* as/mcs51/lkarea.c: removed old K&R style,
[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  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
49 /* forward definition for variables */
50 extern memmap *xstack;          /* xternal stack data           */
51 extern memmap *istack;          /* internal stack               */
52 extern memmap *code;            /* code segment                 */
53 extern memmap *data;            /* internal data upto 128       */
54 extern memmap *pdata;           /* paged external data upto 256 */
55 extern memmap *xdata;           /* external data                */
56 extern memmap *xidata;          /* the initialized xdata        */
57 extern memmap *xinit;           /* the initializers for xidata  */
58 extern memmap *idata;           /* internal data upto 256       */
59 extern memmap *bit;             /* bit addressable space        */
60 extern memmap *statsg;          /* static code segment          */
61 extern memmap *sfr;             /* register space               */
62 extern memmap *sfrbit;          /* sfr bit space                */
63 extern memmap *reg;             /* register space               */
64 extern memmap *generic;         /* unknown                      */
65 extern memmap *overlay;         /* the overlay segment          */
66 extern memmap *eeprom;          /* eepromp space                */
67 extern memmap *eeprom;          /* eepromp space                */
68 extern memmap *home;            /* Non-banked home space        */
69
70 extern int fatalError;
71
72 extern struct set *ovrSetSets;
73
74 extern int maxRegBank;
75
76 /* easy access macros */
77 #define IN_BITSPACE(map)        (map && map->bitsp)
78 #define IN_STACK(x)  (IS_SPEC(x) && (SPEC_OCLS(x) == xstack || SPEC_OCLS(x) == istack ))
79 #define IN_FARSPACE(map)        (map && map->fmap)
80 #define IN_DIRSPACE(map)        (map && map->direct)
81 #define IN_PAGEDSPACE(map)      (map && map->paged )
82 #define IN_CODESPACE(map)       (map && map->codesp)
83 #define IN_REGSP(map)           (map && map->regsp)
84 #define PTR_TYPE(map)           (map ? (map->ptrType ? map->ptrType : POINTER)\
85                                      : port->unqualified_pointer)
86
87 /* forward decls for functions    */
88 memmap *allocMap (char, char, char, char, char, char, unsigned, const char *, char, int);
89 void initMem ();
90 void allocGlobal (struct symbol *);
91 void allocLocal (struct symbol *);
92 void allocParms (struct value *);
93 void deallocParms (struct value *);
94 void deallocLocal (struct symbol *);
95 int allocVariables (struct symbol *);
96 void overlay2Set ();
97 void overlay2data ();
98 void redoStackOffsets ();
99 void printAllocInfo (struct symbol *, FILE *);
100 void doOverlays (struct eBBlock **, int count);
101 void deleteFromSeg(struct symbol *);
102 #endif