Port decides whether to handle a GPOINTER unqualified pointers will be treated as...
[fw/sdcc] / src / SDCCmem.h
1 /*-----------------------------------------------------------------*/
2 /* SDCCmem.h - header file for memory management                    */
3 /*-----------------------------------------------------------------*/
4
5 #ifndef SDCCMEM_H
6 #define SDCCMEM_H
7
8 struct set;
9 struct value;
10 struct eBBlock;
11
12 typedef struct memmap
13   {
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 */
28   }
29 memmap;
30
31 extern FILE *junkFile;
32
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
47 /* forward definition for variables */
48 extern memmap *xstack;          /* xternal stack data         */
49 extern memmap *istack;          /* internal stack             */
50 extern memmap *code;            /* code segment               */
51 extern memmap *data;            /* internal data upto 128     */
52 extern memmap *xdata;           /* external data              */
53 extern memmap *xidata;          /* the initialized xdata       */
54 extern memmap *xinit;           /* the initializers for xidata */
55 extern memmap *idata;           /* internal data upto 256     */
56 extern memmap *bit;             /* bit addressable space      */
57 extern memmap *statsg;          /* static code segment        */
58 extern memmap *sfr;             /* register space             */
59 extern memmap *sfrbit;          /* sfr bit space              */
60 extern memmap *reg;             /* register space             */
61 extern memmap *generic;         /* unknown                    */
62 extern memmap *overlay;         /* the overlay segment        */
63 extern memmap *eeprom;          /* eepromp space              */
64 extern memmap *eeprom;          /* eepromp space              */
65 extern memmap *home;            /* Non-banked home space      */
66
67 extern int fatalError;
68
69 extern struct set *ovrSetSets;
70
71 extern int maxRegBank;
72
73 /* easy access macros */
74 #define IN_BITSPACE(map)        (map && map->bitsp)
75 #define IN_STACK(x)  (IS_SPEC(x) && (SPEC_OCLS(x) == xstack || SPEC_OCLS(x) == istack ))
76 #define IN_FARSPACE(map)        (map && map->fmap)
77 #define IN_DIRSPACE(map)        (map && map->direct)
78 #define IN_PAGEDSPACE(map)      (map && map->paged )
79 #define IN_CODESPACE(map)       (map && map->codesp)
80 #define IN_REGSP(map)           (map && map->regsp)
81 #define PTR_TYPE(map)           (map ? (map->ptrType ? map->ptrType : POINTER)\
82                                      : port->unqualified_pointer)
83
84 /* forward decls for functions    */
85 memmap *allocMap (char, char, char, char, char, char, unsigned, const char *, char, int);
86 void initMem ();
87 void allocGlobal (struct symbol *);
88 void allocLocal (struct symbol *);
89 void allocParms (struct value *);
90 void deallocParms (struct value *);
91 void deallocLocal (struct symbol *);
92 int allocVariables (struct symbol *);
93 void overlay2Set ();
94 void overlay2data ();
95 void redoStackOffsets ();
96 void printAllocInfo (struct symbol *, FILE *);
97 void doOverlays (struct eBBlock **, int count);
98 #endif