diff options
Diffstat (limited to 'src/cmd/5l/l.h')
-rw-r--r-- | src/cmd/5l/l.h | 57 |
1 files changed, 44 insertions, 13 deletions
diff --git a/src/cmd/5l/l.h b/src/cmd/5l/l.h index b1a48ded8..62dd8947f 100644 --- a/src/cmd/5l/l.h +++ b/src/cmd/5l/l.h @@ -36,7 +36,9 @@ enum { thechar = '5', - PtrSize = 4 + PtrSize = 4, + IntSize = 4, + FuncAlign = 4 // single-instruction alignment }; #ifndef EXTERN @@ -66,22 +68,24 @@ struct Adr { union { - int32 u0offset; + struct { + int32 u0offset; + int32 u0offset2; // argsize + } u0off; char* u0sval; Ieee u0ieee; char* u0sbig; } u0; Sym* sym; + Sym* gotype; char type; - uchar index; // not used on arm, required by ld/go.c char reg; char name; - int32 offset2; // argsize char class; - Sym* gotype; }; -#define offset u0.u0offset +#define offset u0.u0off.u0offset +#define offset2 u0.u0off.u0offset2 #define sval u0.u0sval #define scon sval #define ieee u0.u0ieee @@ -107,7 +111,7 @@ struct Prog } u0; Prog* cond; Prog* link; - Prog* dlink; + Prog* pcrel; int32 pc; int32 line; int32 spadj; @@ -116,7 +120,7 @@ struct Prog uchar as; uchar scond; uchar reg; - uchar align; + uchar align; // unused }; #define regused u0.u0regused @@ -135,8 +139,6 @@ struct Sym uchar reachable; uchar dynexport; uchar leaf; - uchar stkcheck; - uchar hide; int32 dynid; int32 plt; int32 got; @@ -144,18 +146,26 @@ struct Sym int32 sig; int32 size; int32 align; // if non-zero, required alignment in bytes + int32 elfsym; + int32 locals; // size of stack frame locals area + int32 args; // size of stack frame incoming arguments area uchar special; uchar fnptr; // used as fn ptr + uchar stkcheck; + uchar hide; Sym* hash; // in hash table Sym* allsym; // in all symbol list Sym* next; // in text or data list Sym* sub; // in SSUB list Sym* outer; // container of sub Sym* gotype; + Sym* reachparent; + Sym* queue; char* file; char* dynimpname; char* dynimplib; char* dynimpvers; + struct Section* sect; // STEXT Auto* autom; @@ -168,6 +178,7 @@ struct Sym Reloc* r; int32 nr; int32 maxr; + int rel_ro; }; #define SIGNINTERN (1729*325*1729) @@ -190,6 +201,7 @@ struct Optab char size; char param; char flag; + uchar pcrelsiz; }; struct Oprang { @@ -207,10 +219,12 @@ enum LFROM = 1<<0, LTO = 1<<1, LPOOL = 1<<2, + LPCREL = 1<<3, C_NONE = 0, C_REG, C_REGREG, + C_REGREG2, C_SHIFT, C_FREG, C_PSR, @@ -220,6 +234,7 @@ enum C_NCON, /* ~RCON */ C_SCON, /* 0xffff */ C_LCON, + C_LCONADDR, C_ZFCON, C_SFCON, C_LFCON, @@ -273,6 +288,7 @@ EXTERN int32 INITDAT; /* data location */ EXTERN int32 INITRND; /* data round above text location */ EXTERN int32 INITTEXT; /* text location */ EXTERN char* INITENTRY; /* entry point */ +EXTERN char* LIBINITENTRY; /* shared library entry point */ EXTERN int32 autosize; EXTERN Auto* curauto; EXTERN Auto* curhist; @@ -280,7 +296,7 @@ EXTERN Prog* curp; EXTERN Sym* cursym; EXTERN Sym* datap; EXTERN int32 elfdatsize; -EXTERN char debug[128]; +EXTERN int debug[128]; EXTERN Sym* etextp; EXTERN char* noname; EXTERN Prog* lastp; @@ -298,12 +314,15 @@ EXTERN char* rpath; EXTERN uint32 stroffset; EXTERN int32 symsize; EXTERN Sym* textp; -EXTERN int32 textsize; EXTERN int version; EXTERN char xcmp[C_GOK+1][C_GOK+1]; EXTERN Prog zprg; EXTERN int dtype; +EXTERN int tlsoffset; EXTERN int armsize; +EXTERN int goarm; +EXTERN Sym* adrgotype; // type symbol on last Adr read +EXTERN Sym* fromgotype; // type symbol on last p->from read extern char* anames[]; extern Optab optab[]; @@ -312,6 +331,8 @@ void addpool(Prog*, Adr*); EXTERN Prog* blitrl; EXTERN Prog* elitrl; +EXTERN int goarm; + void initdiv(void); EXTERN Prog* prog_div; EXTERN Prog* prog_divu; @@ -398,6 +419,9 @@ void span(void); void strnput(char*, int); int32 symaddr(Sym*); void undef(void); +void vputb(uint64); +void vputl(uint64); +void wputb(uint16); void wput(int32); void wputl(ushort w); void xdefine(char*, int, int32); @@ -407,8 +431,9 @@ int32 immaddr(int32); int32 opbra(int, int); int brextra(Prog*); int isbranch(Prog*); -void fnptrs(void); +void fnptrs(void); void doelf(void); +void dozerostk(void); // used by -Z vlong addaddr(Sym *s, Sym *t); vlong addsize(Sym *s, Sym *t); @@ -425,3 +450,9 @@ vlong adduintxx(Sym *s, uint64 v, int wid); #define VPUT(a) abort() #endif + +/* Used by ../ld/dwarf.c */ +enum +{ + DWARFREGSP = 13 +}; |