shithub: rgbds

ref: 3c82b1ae0399849835acfb5ade31dae6299ec559
dir: /src/asm/include/symbol.h/

View raw version
#ifndef SYMBOL_H
#define SYMBOL_H 1

#include "types.h"

#define HASHSIZE 73
#define MAXSYMLEN 256

struct sSymbol {
	char tzName[MAXSYMLEN + 1];
	SLONG nValue;
	ULONG nType;
	struct sSymbol *pScope;
	struct sSymbol *pNext;
	struct Section *pSection;
	ULONG ulMacroSize;
	char *pMacro;
	 SLONG(*Callback) (struct sSymbol *);
};

#define SYMF_RELOC		0x001	/* symbol will be reloc'ed during linking, it's absolute value is unknown */
#define SYMF_EQU		0x002	/* symbol is defined using EQU, will not be changed during linking */
#define SYMF_SET		0x004	/* symbol is (re)defined using SET, will not be changed during linking */
#define SYMF_EXPORT		0x008	/* symbol should be exported */
#define SYMF_IMPORT		0x010	/* symbol is imported, it's value is unknown */
#define SYMF_LOCAL		0x020	/* symbol is a local symbol */
#define SYMF_DEFINED	0x040	/* symbol has been defined, not only referenced */
#define SYMF_MACRO		0x080	/* symbol is a macro */
#define SYMF_STRING		0x100	/* symbol is a stringsymbol */
#define SYMF_CONST		0x200	/* symbol has a constant value, will not be changed during linking */

void sym_PrepPass1(void);
void sym_PrepPass2(void);
void sym_AddLocalReloc(char *tzSym);
void sym_AddReloc(char *tzSym);
void sym_Export(char *tzSym);
void sym_PrintSymbolTable(void);
struct sSymbol *sym_FindMacro(char *s);
void sym_InitNewMacroArgs(void);
void sym_AddNewMacroArg(char *s);
void sym_SaveCurrentMacroArgs(char *save[]);
void sym_RestoreCurrentMacroArgs(char *save[]);
void sym_UseNewMacroArgs(void);
void sym_FreeCurrentMacroArgs(void);
void sym_AddEqu(char *tzSym, SLONG value);
void sym_AddSet(char *tzSym, SLONG value);
void sym_Init(void);
ULONG sym_GetConstantValue(char *s);
void sym_Import(char *tzSym);
ULONG sym_isConstant(char *s);
struct sSymbol *sym_FindSymbol(char *tzName);
void sym_Global(char *tzSym);
char *sym_FindMacroArg(SLONG i);
char *sym_GetStringValue(char *tzSym);
void sym_UseCurrentMacroArgs(void);
void sym_SetMacroArgID(ULONG nMacroCount);
ULONG sym_isString(char *tzSym);
void sym_AddMacro(char *tzSym);
void sym_ShiftCurrentMacroArgs(void);
void sym_AddString(char *tzSym, char *tzValue);
ULONG sym_GetValue(char *s);
ULONG sym_GetDefinedValue(char *s);
ULONG sym_isDefined(char *tzName);
void sym_Purge(char *tzName);
ULONG sym_isConstDefined(char *tzName);

#endif