shithub: rgbds

ref: 3c82b1ae0399849835acfb5ade31dae6299ec559
dir: /src/link/include/mylink.h/

View raw version
#ifndef LINK_H
#define LINK_H 1

#if defined(AMIGA) || defined(__GNUC__)
#define _MAX_PATH	512
#endif

#include "types.h"

extern SLONG options;
#define OPT_SMALL	0x01
#define OPT_SMART_C_LINK	0x02

enum eRpnData {
	RPN_ADD = 0,
	RPN_SUB,
	RPN_MUL,
	RPN_DIV,
	RPN_MOD,
	RPN_UNSUB,

	RPN_OR,
	RPN_AND,
	RPN_XOR,
	RPN_UNNOT,

	RPN_LOGAND,
	RPN_LOGOR,
	RPN_LOGUNNOT,

	RPN_LOGEQ,
	RPN_LOGNE,
	RPN_LOGGT,
	RPN_LOGLT,
	RPN_LOGGE,
	RPN_LOGLE,

	RPN_SHL,
	RPN_SHR,

	RPN_BANK,

	RPN_HRAM,

	RPN_PCEZP,

	RPN_RANGECHECK,

	RPN_CONST = 0x80,
	RPN_SYM = 0x81
};

enum eSectionType {
	SECT_BSS,
	SECT_VRAM,
	SECT_CODE,
	SECT_HOME,
	SECT_HRAM
};

struct sSection {
	SLONG nBank;
	SLONG nOrg;
	BBOOL oAssigned;

	SLONG nByteSize;
	enum eSectionType Type;
	UBYTE *pData;
	SLONG nNumberOfSymbols;
	struct sSymbol **tSymbols;
	struct sPatch *pPatches;
	struct sSection *pNext;
};

enum eSymbolType {
	SYM_LOCAL,
	SYM_IMPORT,
	SYM_EXPORT
};

struct sSymbol {
	char *pzName;
	enum eSymbolType Type;
	/* the following 3 items only valid when Type!=SYM_IMPORT */
	SLONG nSectionID;	/* internal to object.c */
	struct sSection *pSection;
	SLONG nOffset;
};

enum ePatchType {
	PATCH_BYTE = 0,
	PATCH_WORD_L,
	PATCH_LONG_L,
	PATCH_WORD_B,
	PATCH_LONG_B
};

struct sPatch {
	char *pzFilename;
	SLONG nLineNo;
	SLONG nOffset;
	enum ePatchType Type;
	SLONG nRPNSize;
	UBYTE *pRPN;
	struct sPatch *pNext;
	BBOOL oRelocPatch;
};

extern struct sSection *pSections;
extern struct sSection *pLibSections;

#endif