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 XDATA_NAME port->mem.xdata_name
40 #define XIDATA_NAME port->mem.xidata_name
41 #define XINIT_NAME port->mem.xinit_name
42 #define BIT_NAME port->mem.bit_name
43 #define REG_NAME port->mem.reg_name
44 #define STATIC_NAME port->mem.static_name
45 #define HOME_NAME port->mem.home_name
46 #define OVERLAY_NAME port->mem.overlay_name
48 /* forward definition for variables */
49 extern memmap *xstack; /* xternal stack data */
50 extern memmap *istack; /* internal stack */
51 extern memmap *code; /* code segment */
52 extern memmap *data; /* internal data upto 128 */
53 extern memmap *xdata; /* external data */
54 extern memmap *xidata; /* the initialized xdata */
55 extern memmap *xinit; /* the initializers for xidata */
56 extern memmap *idata; /* internal data upto 256 */
57 extern memmap *bit; /* bit addressable space */
58 extern memmap *statsg; /* static code segment */
59 extern memmap *sfr; /* register space */
60 extern memmap *sfrbit; /* sfr bit space */
61 extern memmap *reg; /* register space */
62 extern memmap *generic; /* unknown */
63 extern memmap *overlay; /* the overlay segment */
64 extern memmap *eeprom; /* eepromp space */
65 extern memmap *eeprom; /* eepromp space */
66 extern memmap *home; /* Non-banked home space */
68 extern int fatalError;
70 extern struct set *ovrSetSets;
72 extern int maxRegBank;
74 /* easy access macros */
75 #define IN_BITSPACE(map) (map && map->bitsp)
76 #define IN_STACK(x) (IS_SPEC(x) && (SPEC_OCLS(x) == xstack || SPEC_OCLS(x) == istack ))
77 #define IN_FARSPACE(map) (map && map->fmap)
78 #define IN_DIRSPACE(map) (map && map->direct)
79 #define IN_PAGEDSPACE(map) (map && map->paged )
80 #define IN_CODESPACE(map) (map && map->codesp)
81 #define IN_REGSP(map) (map && map->regsp)
82 #define PTR_TYPE(map) (map ? (map->ptrType ? map->ptrType : POINTER)\
83 : port->unqualified_pointer)
85 /* forward decls for functions */
86 memmap *allocMap (char, char, char, char, char, char, unsigned, const char *, char, int);
88 void allocGlobal (struct symbol *);
89 void allocLocal (struct symbol *);
90 void allocParms (struct value *);
91 void deallocParms (struct value *);
92 void deallocLocal (struct symbol *);
93 int allocVariables (struct symbol *);
96 void redoStackOffsets ();
97 void printAllocInfo (struct symbol *, FILE *);
98 void doOverlays (struct eBBlock **, int count);
99 void deleteFromSeg(struct symbol *);