Use 'ao-dbg' instead of 's51' to communicate with TeleMetrum
[fw/sdcc] / src / SDCCmem.h
1 /*-----------------------------------------------------------------*/
2 /* SDCCmem.h - header file for memory management                    */
3 /*-----------------------------------------------------------------*/
4
5 #ifndef SDCCMEM_H
6 #define SDCCMEM_H
7
8 #include "dbuf.h"
9
10 struct set;
11 struct value;
12 struct eBBlock;
13
14 typedef struct memmap
15   {
16     unsigned char pageno;       /* page no for this variable  */
17     const char *sname;          /*   character prefix for map */
18     char dbName;                /* debugger address space name */
19     int ptrType;                /* pointer Type for this space */
20     int slbl;                   /* label counter for space    */
21     unsigned sloc;              /* starting location          */
22     unsigned fmap:1;            /* 1 = 16bit addressing reqd  */
23     unsigned paged:1;           /* this is a paged mem space  */
24     unsigned direct:1;          /* 1 = indirect access only   */
25     unsigned bitsp:1;           /* 1 = bit addressable space  */
26     unsigned codesp:1;          /* 1 = code space             */
27     unsigned regsp:1;           /* 1 = sfr space              */
28     struct dbuf_s oBuf;         /* object buffer associated   */
29     struct set *syms;           /* symbols defined in this segment */
30   }
31 memmap;
32
33 extern FILE *junkFile;
34
35 /* memory map prefixes  MOF added the DATA,CODE,XDATA,BIT */
36 #define  XSTACK_NAME   port->mem.xstack_name
37 #define  ISTACK_NAME   port->mem.istack_name
38 #define  CODE_NAME     port->mem.code_name
39 #define  DATA_NAME     port->mem.data_name
40 #define  IDATA_NAME    port->mem.idata_name
41 #define  PDATA_NAME    port->mem.pdata_name
42 #define  XDATA_NAME    port->mem.xdata_name
43 #define  XIDATA_NAME   port->mem.xidata_name
44 #define  XINIT_NAME    port->mem.xinit_name
45 #define  BIT_NAME      port->mem.bit_name
46 #define  REG_NAME      port->mem.reg_name
47 #define  STATIC_NAME   port->mem.static_name
48 #define  HOME_NAME     port->mem.home_name
49 #define  OVERLAY_NAME  port->mem.overlay_name
50 #define  CONST_NAME    port->mem.const_name
51 #define  CABS_NAME     port->mem.cabs_name
52 #define  XABS_NAME     port->mem.xabs_name
53 #define  IABS_NAME     port->mem.iabs_name
54
55 /* forward definition for variables */
56 extern memmap *xstack;          /* xternal stack data           */
57 extern memmap *istack;          /* internal stack               */
58 extern memmap *code;            /* code segment                 */
59 extern memmap *data;            /* internal data upto 128       */
60 extern memmap *pdata;           /* paged external data upto 256 */
61 extern memmap *xdata;           /* external data                */
62 extern memmap *xidata;          /* the initialized xdata        */
63 extern memmap *xinit;           /* the initializers for xidata  */
64 extern memmap *idata;           /* internal data upto 256       */
65 extern memmap *bit;             /* bit addressable space        */
66 extern memmap *statsg;          /* static code segment          */
67 extern memmap *c_abs;           /* constant absolute data       */
68 extern memmap *x_abs;           /* absolute xdata/pdata         */
69 extern memmap *i_abs;           /* absolute idata upto 256      */
70 extern memmap *d_abs;           /* absolute data upto 128       */
71 extern memmap *sfr;             /* register space               */
72 extern memmap *sfrbit;          /* sfr bit space                */
73 extern memmap *reg;             /* register space               */
74 extern memmap *generic;         /* unknown                      */
75 extern memmap *overlay;         /* the overlay segment          */
76 extern memmap *eeprom;          /* eeprom space                 */
77 extern memmap *home;            /* Non-banked home space        */
78
79 extern int fatalError;
80
81 extern struct set *ovrSetSets;
82
83 /* easy access macros */
84 #define IN_BITSPACE(map)        (map && map->bitsp)
85 #define IN_STACK(x)  (IS_SPEC(x) && (SPEC_OCLS(x) == xstack || SPEC_OCLS(x) == istack ))
86 #define IN_FARSPACE(map)        (map && map->fmap)
87 #define IN_DIRSPACE(map)        (map && map->direct)
88 #define IN_PAGEDSPACE(map)      (map && map->paged )
89 #define IN_CODESPACE(map)       (map && map->codesp)
90 #define IN_REGSP(map)           (map && map->regsp)
91 #define PTR_TYPE(map)           (map ? (map->ptrType ? map->ptrType : POINTER)\
92                                      : port->unqualified_pointer)
93
94 /* forward decls for functions    */
95 memmap *allocMap (char, char, char, char, char, char, unsigned, const char *, char, int);
96 void initMem ();
97 void allocGlobal (struct symbol *);
98 void allocLocal (struct symbol *);
99 void allocParms (struct value *);
100 void deallocParms (struct value *);
101 void deallocLocal (struct symbol *);
102 int allocVariables (struct symbol *);
103 void overlay2Set ();
104 void overlay2data ();
105 void redoStackOffsets ();
106 void printAllocInfo (struct symbol *, struct dbuf_s *);
107 void doOverlays (struct eBBlock **, int count);
108 void deleteFromSeg(struct symbol *);
109 #endif