]> Shamusworld >> Repos - rmac/blob - symbol.h
Fix to prevent defined registers/CCs from being exported in the symtab.
[rmac] / symbol.h
1 //
2 // RMAC - Renamed Macro Assembler for all Atari computers
3 // SYMBOL.H - Symbol Handling
4 // Copyright (C) 199x Landon Dyer, 2011-2022 Reboot and Friends
5 // RMAC derived from MADMAC v1.07 Written by Landon Dyer, 1986
6 // Source utilised with the kind permission of Landon Dyer
7 //
8
9 #ifndef __SYMBOL_H__
10 #define __SYMBOL_H__
11
12 #include <inttypes.h>
13
14 // Line lists
15 #define LLIST struct _llist
16 LLIST
17 {
18         LLIST * next;
19         uint8_t * line;
20         int lineno;
21 };
22
23 // Symbols
24 #define SYM struct _sym
25 SYM
26 {
27         SYM * snext;                    // * -> Next symbol on hash-chain
28         SYM * sorder;                   // * -> Next sym in order of reference
29         SYM * sdecl;                    // * -> Next sym in order of declaration
30         uint8_t stype;                  // Symbol type
31         uint16_t sattr;                 // Attribute bits
32         uint32_t sattre;                // Extended attribute bits
33         uint16_t senv;                  // Enviroment number
34         uint64_t svalue;                // Symbol value (now 64-bit)
35         uint8_t * sname;                // * -> Symbol's print-name
36         LLIST * lineList;               // * -> Macro's linked list of lines
37         LLIST * last;                   // * -> end of macro linked list
38         uint16_t cfileno;               // File the macro is defined in
39         uint32_t uid;                   // Symbol's unique ID
40 };
41
42 // Exported variables
43 extern int curenv;
44 extern uint32_t firstglobal;// Index of the fist global symbol in an ELF object.
45
46 // Exported functions
47 SYM * lookup(uint8_t *, int, int);
48 void InitSymbolTable(void);
49 SYM * NewSymbol(uint8_t *, int, int);
50 void AddToSymbolDeclarationList(SYM *);
51 void ForceUndefinedSymbolsGlobal(void);
52 int symtable(void);
53 uint32_t AssignSymbolNos(uint8_t *, uint8_t *(*)());
54 uint32_t AssignSymbolNosELF(uint8_t *, uint8_t *(*)());
55 void DumpLODSymbols(void);
56 uint8_t * GetSymbolNameByUID(uint32_t);
57
58 #endif // __SYMBOL_H__
59