1 /*-----------------------------------------------------------------*/
2 /* SDCCmem.h - header file for memory management */
3 /*-----------------------------------------------------------------*/
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 */
33 extern FILE *junkFile;
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
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 */
79 extern int fatalError;
81 extern struct set *ovrSetSets;
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)
94 /* forward decls for functions */
95 memmap *allocMap (char, char, char, char, char, char, unsigned, const char *, char, int);
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 *);
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 *);