1 /*-----------------------------------------------------------------*/
2 /* SDCCmem.h - header file for memory management */
3 /*-----------------------------------------------------------------*/
14 unsigned char pageno; /* page no for this variable */
15 const char *sname; /* character prefix for map */
16 char dbName; /* debugger address space name */
17 int ptrType; /* pointer Type for this space */
18 int slbl; /* label counter for space */
19 unsigned sloc; /* starting location */
20 unsigned fmap:1; /* 1 = 16bit addressing reqd */
21 unsigned paged:1; /* this is a paged mem space */
22 unsigned direct:1; /* 1= indirect access only */
23 unsigned bitsp:1; /* 1 = bit addressable space */
24 unsigned codesp:1; /* 1 = code space */
25 unsigned regsp:1; /* 1= sfr space */
26 FILE *oFile; /* object file associated */
27 struct set *syms; /* symbols defined in this segment */
31 extern FILE *junkFile;
33 /* memory map prefixes MOF added the DATA,CODE,XDATA,BIT */
34 #define XSTACK_NAME port->mem.xstack_name
35 #define ISTACK_NAME port->mem.istack_name
36 #define CODE_NAME port->mem.code_name
37 #define DATA_NAME port->mem.data_name
38 #define IDATA_NAME port->mem.idata_name
39 #define PDATA_NAME port->mem.pdata_name
40 #define XDATA_NAME port->mem.xdata_name
41 #define XIDATA_NAME port->mem.xidata_name
42 #define XINIT_NAME port->mem.xinit_name
43 #define BIT_NAME port->mem.bit_name
44 #define REG_NAME port->mem.reg_name
45 #define STATIC_NAME port->mem.static_name
46 #define HOME_NAME port->mem.home_name
47 #define OVERLAY_NAME port->mem.overlay_name
48 #define CONST_NAME port->mem.const_name
50 /* forward definition for variables */
51 extern memmap *xstack; /* xternal stack data */
52 extern memmap *istack; /* internal stack */
53 extern memmap *code; /* code segment */
54 extern memmap *data; /* internal data upto 128 */
55 extern memmap *pdata; /* paged external data upto 256 */
56 extern memmap *xdata; /* external data */
57 extern memmap *xidata; /* the initialized xdata */
58 extern memmap *xinit; /* the initializers for xidata */
59 extern memmap *idata; /* internal data upto 256 */
60 extern memmap *bit; /* bit addressable space */
61 extern memmap *statsg; /* static code segment */
62 extern memmap *sfr; /* register space */
63 extern memmap *sfrbit; /* sfr bit space */
64 extern memmap *reg; /* register space */
65 extern memmap *generic; /* unknown */
66 extern memmap *overlay; /* the overlay segment */
67 extern memmap *eeprom; /* eepromp space */
68 extern memmap *eeprom; /* eepromp space */
69 extern memmap *home; /* Non-banked home space */
71 extern int fatalError;
73 extern struct set *ovrSetSets;
75 extern int maxRegBank;
77 /* easy access macros */
78 #define IN_BITSPACE(map) (map && map->bitsp)
79 #define IN_STACK(x) (IS_SPEC(x) && (SPEC_OCLS(x) == xstack || SPEC_OCLS(x) == istack ))
80 #define IN_FARSPACE(map) (map && map->fmap)
81 #define IN_DIRSPACE(map) (map && map->direct)
82 #define IN_PAGEDSPACE(map) (map && map->paged )
83 #define IN_CODESPACE(map) (map && map->codesp)
84 #define IN_REGSP(map) (map && map->regsp)
85 #define PTR_TYPE(map) (map ? (map->ptrType ? map->ptrType : POINTER)\
86 : port->unqualified_pointer)
88 /* forward decls for functions */
89 memmap *allocMap (char, char, char, char, char, char, unsigned, const char *, char, int);
91 void allocGlobal (struct symbol *);
92 void allocLocal (struct symbol *);
93 void allocParms (struct value *);
94 void deallocParms (struct value *);
95 void deallocLocal (struct symbol *);
96 int allocVariables (struct symbol *);
99 void redoStackOffsets ();
100 void printAllocInfo (struct symbol *, FILE *);
101 void doOverlays (struct eBBlock **, int count);
102 void deleteFromSeg(struct symbol *);