1
0
mirror of https://github.com/mist-devel/mist-board.git synced 2026-01-30 13:06:45 +00:00
Files
mist-devel.mist-board/tools/vasm/reloc.h
2014-01-31 12:21:39 +00:00

59 lines
2.1 KiB
C

/* reloc.h reloc header file for vasm */
/* (c) in 2002,2005-2008,2010,2011 by Volker Barthelmann and Frank Wille */
#ifndef RELOC_H
#define RELOC_H
/* part of standard relocations */
#ifndef FIRST_STANDARD_RELOC
#define FIRST_STANDARD_RELOC 0
#endif
#define REL_NONE FIRST_STANDARD_RELOC
#define REL_ABS (REL_NONE+1) /* standard absolute relocation */
#define REL_PC (REL_ABS+1) /* PC-relative */
#define REL_GOT (REL_PC+1) /* symbol's pointer in global off.table */
#define REL_GOTPC (REL_GOT+1) /* global offset table PC-relative */
#define REL_GOTOFF (REL_GOTPC+1) /* offset to global offset table */
#define REL_GLOBDAT (REL_GOTOFF+1) /* global data */
#define REL_PLT (REL_GLOBDAT+1) /* procedure linkage table */
#define REL_PLTPC (REL_PLT+1) /* procedure linkage table PC-relative */
#define REL_PLTOFF (REL_PLTPC+1) /* offset to procedure linkage table */
#define REL_SD (REL_PLTOFF+1) /* small data base relative */
#define REL_UABS (REL_SD+1) /* unaligned absolute addr. relocation */
#define REL_LOCALPC (REL_UABS+1) /* pc-relative to local symbol */
#define REL_LOADREL (REL_LOCALPC+1) /* relative to load addr., no symbol */
#define REL_COPY (REL_LOADREL+1) /* copy from shared object */
#define REL_JMPSLOT (REL_COPY+1) /* procedure linkage table entry */
#define REL_SECOFF (REL_JMPSLOT+1) /* symbol's offset to start of section */
#define LAST_STANDARD_RELOC REL_SECOFF
/* standard reloc struct */
typedef struct nreloc {
int offset; /* offset to beginning of data atom in bits */
int size; /* size of relocation in bits */
taddr mask; /* mask value */
taddr addend; /* addend */
symbol *sym;
} nreloc;
typedef struct rlist {
struct rlist *next;
void *reloc;
int type;
} rlist;
#define MAKEMASK(x) ((1LL<<(x))-1LL)
nreloc *new_nreloc(void);
rlist *add_nreloc(rlist **,symbol *,taddr,int,int,int);
rlist *add_nreloc_masked(rlist **,symbol *,taddr,int,int,int,taddr);
void do_pic_check(rlist *);
taddr nreloc_real_addend(nreloc *);
void unsupp_reloc_error(rlist *);
void print_reloc(FILE *,int,nreloc *);
#endif