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