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