summaryrefslogtreecommitdiff
path: root/debugger/mcs51/sdcdb.h
diff options
context:
space:
mode:
authorXavier ASUS <xavi92psx@gmail.com>2019-10-18 00:31:54 +0200
committerXavier ASUS <xavi92psx@gmail.com>2019-10-18 00:31:54 +0200
commit268a53de823a6750d6256ee1fb1e7707b4b45740 (patch)
tree42c1799a9a82b2f7d9790ee9fe181d72a7274751 /debugger/mcs51/sdcdb.h
downloadsdcc-gas-268a53de823a6750d6256ee1fb1e7707b4b45740.tar.gz
sdcc-3.9.0 fork implementing GNU assembler syntax
This fork aims to provide better support for stm8-binutils
Diffstat (limited to 'debugger/mcs51/sdcdb.h')
-rw-r--r--debugger/mcs51/sdcdb.h295
1 files changed, 295 insertions, 0 deletions
diff --git a/debugger/mcs51/sdcdb.h b/debugger/mcs51/sdcdb.h
new file mode 100644
index 0000000..d9f8b81
--- /dev/null
+++ b/debugger/mcs51/sdcdb.h
@@ -0,0 +1,295 @@
+/*-------------------------------------------------------------------------
+ sdcdb.h - Header file used by ALL source files for the debugger
+ Written By - Sandeep Dutta . sandeep.dutta@usa.net (1999)
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 2, or (at your option) any
+ later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ In other words, you are welcome to use, share and improve this program.
+ You are forbidden to forbid anyone else to use, share and improve
+ what you give them. Help stamp out software-hoarding!
+-------------------------------------------------------------------------*/
+
+#ifndef SDCDB_H
+#define SDCDB_H
+
+#define SDCDB_VERSION "0.9"
+
+#define SDCDB_DEBUG
+
+#ifdef SDCDB_DEBUG
+// set D_x to 0 to turn off, 1 to turn on.
+#define D_break 0x01
+#define D_simi 0x02
+#define D_sdcdb 0x04
+#define D_symtab 0x08
+
+extern int sdcdbDebug;
+
+#define Dprintf(f, fs) {if (f & sdcdbDebug) printf fs ; }
+#else
+#define Dprintf(f, fs) { }
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <limits.h>
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#elif defined(_WIN32) && !defined(__MINGW32__)
+# include "sdcc_vc.h"
+#else
+# include "sdccconf.h"
+#endif
+#include "src/SDCCset.h"
+#include "src/SDCChasht.h"
+
+#define TRUE 1
+#define FALSE !TRUE
+
+typedef short bool;
+
+#ifndef max
+#define max(a,b) (a > b ? a : b)
+#endif
+
+#ifndef min
+#define min(a,b) (a < b ? a : b)
+#endif
+
+/*
+ * #ifndef ALLOC
+ * #define ALLOC(x,sz) if (!(x = calloc(1, sz))) \
+ * { \
+ * fprintf(stderr,"sdcdb: out of memory\n"); \
+ * exit (1); \
+ * }
+ * #endif
+ * #ifndef ALLOC_ATOMIC
+ * #define ALLOC_ATOMIC(x,sz) if (!(x = calloc(1, sz))) \
+ * { \
+ * fprintf(stderr,"sdcdb: out of memory\n"); \
+ * exit (1); \
+ * }
+ * #endif
+ */
+
+/* generalpurpose stack related macros */
+#define STACK_DCL(stack, type, size) \
+ typedef type t_##stack; \
+ t_##stack stack[size]; \
+ t_##stack *p_##stack = stack - 1; \
+ t_##stack *w_##stack;
+
+/* define extern stack */
+#define EXTERN_STACK_DCL(stack, type, size) \
+ typedef type t_##stack; \
+ extern t_##stack stack[size]; \
+ extern t_##stack *p_##stack; \
+ extern t_##stack *w_##stack;
+
+#define STACK_EMPTY(stack) ((p_##stack) < stack)
+#define STACK_FULL(stack) ((p_##stack) >= (stack + \
+ sizeof(stack) / sizeof(*stack) - 1) )
+
+#define STACK_PUSH_(stack, x) (*++p_##stack = (x))
+#define STACK_POP_(stack) (*p_##stack--)
+
+#define STACK_PUSH(stack, x) (STACK_FULL(stack) \
+ ? (STACK_ERR(1, stack), *p_##stack) \
+ : STACK_PUSH_(stack, x) )
+
+#define STACK_POP(stack) (STACK_EMPTY(stack) \
+ ? (STACK_ERR(-1, stack), *stack) \
+ : STACK_POP_(stack) )
+
+#define STACK_PEEK(stack) (STACK_EMPTY(stack) \
+ ? (STACK_ERR(0, stack), *stack) \
+ : *p_##stack )
+
+#define STACK_PPEEK(stack) (((p_##stack - 1) < stack) \
+ ? (STACK_ERR(0, stack), *stack) \
+ : *(p_##stack - 1) )
+
+#define STACK_ERR(o, stack) (fprintf(stderr, "stack '%s' %s\n", \
+ #stack, \
+ (o < 0) \
+ ? "underflow" \
+ : (o > 0) \
+ ? "overflow" \
+ : "empty") )
+
+#define STACK_STARTWALK(stack) (w_##stack = p_##stack)
+
+#define STACK_WALK(stack) (w_##stack >= stack \
+ ? NULL : STACK_POP_(stack) )
+
+#include "src/SDCCbitv.h"
+
+enum {
+ SYM_REC = 1,
+ LNK_REC,
+ FUNC_REC,
+ STRUCT_REC,
+ MOD_REC
+};
+
+enum {
+ FMT_NON = 0,
+ FMT_BIN = 1,
+ FMT_OCT = 2,
+ FMT_DEZ = 3,
+ FMT_HEX = 4
+};
+
+enum { SRC_CMODE = 1, SRC_AMODE };
+
+/*-----------------------------------------------------------------*/
+/* source line structure */
+/*-----------------------------------------------------------------*/
+typedef struct srcLine
+{
+ unsigned addr ;
+ short block, level; /* scope information */
+ char *src ;
+
+} srcLine ;
+
+/*-----------------------------------------------------------------*/
+/* structure for cdb record */
+/*-----------------------------------------------------------------*/
+typedef struct cdbrecs {
+ char type ; /* type of line */
+ char *line; /* contents of line */
+ struct cdbrecs *next; /* next in chain */
+} cdbrecs ;
+
+/*-----------------------------------------------------------------*/
+/* module definition */
+/*-----------------------------------------------------------------*/
+typedef struct module {
+ char *cfullname ; /* full name Includeing path for the module */
+ char *afullname; /* fullname of assembly file */
+ char *name ; /* name of module */
+ char *c_name; /* c filename */
+ char *asm_name; /* asm file name */
+ int ncLines; /* number of lines in this module */
+ int nasmLines; /* # of lines in the assembler file */
+ srcLine **cLines; /* actual source lines */
+ srcLine **asmLines; /* actual assembler source lines*/
+ set *cfpoints; /* set of double line execution points */
+} module;
+
+/*-----------------------------------------------------------------*/
+/* execution point definition */
+/*-----------------------------------------------------------------*/
+typedef struct exePoint
+{
+ unsigned addr ;
+ int line ;
+ short block , level ;
+} exePoint ;
+
+/*-----------------------------------------------------------------*/
+/* definition for a function */
+/*-----------------------------------------------------------------*/
+typedef struct function {
+ struct symbol *sym ;/* pointer to symbol for function */
+ char *modName ;/* module name */
+ module *mod ;/* module for this function */
+ int entryline ;/* first line in the function */
+ int aentryline ;
+ int exitline ;/* last line in the function */
+ int aexitline ;
+ set *cfpoints ;/* set of all C execution points in func */
+ set *afpoints ;/* set of all ASM execution points in func */
+ unsigned int laddr ;/* last executed address */
+ int lline ;/* last executed linenumber */
+ unsigned int stkaddr ;/* stackpointer at beginning of function
+ * (not reentrant ! ) only actual */
+} function ;
+
+/*-----------------------------------------------------------------*/
+/* link record defintion */
+/*-----------------------------------------------------------------*/
+typedef struct linkrec {
+ char type; /* type of linker rec */
+ unsigned addr ; /* address specified by the linker rec */
+ char *name ; /* name specified by linker rec */
+} linkrec;
+
+/*-----------------------------------------------------------------*/
+/* program context */
+/*-----------------------------------------------------------------*/
+typedef struct context {
+ function *func; /* current function we are in */
+ char *modName; /* name of the module */
+ unsigned int addr ; /* current pc */
+ int cline ; /* current c line number */
+ int asmline; /* current asm line number */
+ int block ; /* current block number */
+ int level ; /* current level number */
+} context ;
+
+/*-----------------------------------------------------------------*/
+/* symbol display information */
+/*-----------------------------------------------------------------*/
+typedef struct _dsymbol
+{
+ char *name;
+ int dnum;
+ int fmt;
+ char *rs;
+} dsymbol;
+
+
+extern cdbrecs *recsRoot ;
+extern context *currCtxt ;
+extern set *modules ; /* set of modules */
+extern set *functions; /* set of functions */
+extern set *symbols ; /* set of symbols */
+extern set *sfrsymbols;/* set of symbols of sfr or sbit */
+extern set *dispsymbols; /* set of displayable symbols */
+
+
+extern char *currModName ;
+extern char userinterrupt ;
+extern char nointerrupt ;
+extern short showfull ;
+extern int nStructs ;
+extern struct structdef **structs ; /* all structures */
+extern char *ssdirl; /* source directory search path */
+void **resize (void **, int );
+char *alloccpy(char *,int );
+char *gc_strdup(const char *s);
+srcLine **loadFile (char *name, int *nlines);
+
+extern short fullname;
+extern int srcMode;
+extern char contsim;
+char *searchDirsFname (char *);
+char *getNextCmdLine(void);
+void setCmdLine(char *);
+void stopCommandList(void);
+
+char *argsToCmdLine(char **args, int nargs);
+
+/* trimming functions */
+extern char *trim_left(char *s);
+extern char *trim_right(char *s);
+extern char *trim(char *s);
+
+#endif