LEFT | RIGHT |
1 // Inferno utils/5l/l.h | 1 // Inferno utils/5l/l.h |
2 // http://code.google.com/p/inferno-os/source/browse/utils/5l/l.h | 2 // http://code.google.com/p/inferno-os/source/browse/utils/5l/l.h |
3 // | 3 // |
4 // Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved. | 4 // Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved. |
5 // Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net) | 5 // Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net) |
6 // Portions Copyright © 1997-1999 Vita Nuova Limited | 6 // Portions Copyright © 1997-1999 Vita Nuova Limited |
7 // Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuov
a.com) | 7 // Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuov
a.com) |
8 // Portions Copyright © 2004,2006 Bruce Ellis | 8 // Portions Copyright © 2004,2006 Bruce Ellis |
9 // Portions Copyright © 2005-2007 C H Forsyth (forsyth@terzarima.net) | 9 // Portions Copyright © 2005-2007 C H Forsyth (forsyth@terzarima.net) |
10 // Revisions Copyright © 2000-2007 Lucent Technologies Inc. and others | 10 // Revisions Copyright © 2000-2007 Lucent Technologies Inc. and others |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
101 { | 101 { |
102 Adr from; | 102 Adr from; |
103 Adr to; | 103 Adr to; |
104 union | 104 union |
105 { | 105 { |
106 int32 u0regused; | 106 int32 u0regused; |
107 Prog* u0forwd; | 107 Prog* u0forwd; |
108 } u0; | 108 } u0; |
109 Prog* cond; | 109 Prog* cond; |
110 Prog* link; | 110 Prog* link; |
111 Prog* dlink; | |
112 Prog* pcrel; | 111 Prog* pcrel; |
113 int32 pc; | 112 int32 pc; |
114 int32 line; | 113 int32 line; |
115 int32 spadj; | 114 int32 spadj; |
116 uchar mark; | 115 uchar mark; |
117 uchar optab; | 116 uchar optab; |
118 uchar as; | 117 uchar as; |
119 uchar scond; | 118 uchar scond; |
120 uchar reg; | 119 uchar reg; |
121 » uchar» align; | 120 » uchar» align;» // unused |
122 }; | 121 }; |
123 | 122 |
124 #define regused u0.u0regused | 123 #define regused u0.u0regused |
125 #define forwd u0.u0forwd | 124 #define forwd u0.u0forwd |
126 #define datasize reg | 125 #define datasize reg |
127 #define textflag reg | 126 #define textflag reg |
128 | 127 |
129 #define iscall(p) ((p)->as == ABL) | 128 #define iscall(p) ((p)->as == ABL) |
130 | 129 |
131 struct Sym | 130 struct Sym |
132 { | 131 { |
133 char* name; | 132 char* name; |
134 short type; | 133 short type; |
135 short version; | 134 short version; |
136 uchar dupok; | 135 uchar dupok; |
137 uchar reachable; | 136 uchar reachable; |
138 uchar dynexport; | 137 uchar dynexport; |
139 uchar leaf; | 138 uchar leaf; |
140 uchar stkcheck; | |
141 uchar hide; | |
142 int32 dynid; | 139 int32 dynid; |
143 int32 plt; | 140 int32 plt; |
144 int32 got; | 141 int32 got; |
145 int32 value; | 142 int32 value; |
146 int32 sig; | 143 int32 sig; |
147 int32 size; | 144 int32 size; |
148 int32 align; // if non-zero, required alignment in bytes | 145 int32 align; // if non-zero, required alignment in bytes |
149 int32 elfsym; | 146 int32 elfsym; |
150 uchar special; | 147 uchar special; |
151 uchar fnptr; // used as fn ptr | 148 uchar fnptr; // used as fn ptr |
| 149 uchar stkcheck; |
| 150 uchar hide; |
152 Sym* hash; // in hash table | 151 Sym* hash; // in hash table |
153 Sym* allsym; // in all symbol list | 152 Sym* allsym; // in all symbol list |
154 Sym* next; // in text or data list | 153 Sym* next; // in text or data list |
155 Sym* sub; // in SSUB list | 154 Sym* sub; // in SSUB list |
156 Sym* outer; // container of sub | 155 Sym* outer; // container of sub |
157 Sym* gotype; | 156 Sym* gotype; |
158 Sym* reachparent; | 157 Sym* reachparent; |
159 Sym* queue; | 158 Sym* queue; |
160 char* file; | 159 char* file; |
161 char* dynimpname; | 160 char* dynimpname; |
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
303 EXTERN Opcross opcross[8]; | 302 EXTERN Opcross opcross[8]; |
304 EXTERN Oprang oprange[ALAST]; | 303 EXTERN Oprang oprange[ALAST]; |
305 EXTERN char* outfile; | 304 EXTERN char* outfile; |
306 EXTERN int32 pc; | 305 EXTERN int32 pc; |
307 EXTERN uchar repop[ALAST]; | 306 EXTERN uchar repop[ALAST]; |
308 EXTERN char* interpreter; | 307 EXTERN char* interpreter; |
309 EXTERN char* rpath; | 308 EXTERN char* rpath; |
310 EXTERN uint32 stroffset; | 309 EXTERN uint32 stroffset; |
311 EXTERN int32 symsize; | 310 EXTERN int32 symsize; |
312 EXTERN Sym* textp; | 311 EXTERN Sym* textp; |
313 EXTERN int32 textsize; | |
314 EXTERN int version; | 312 EXTERN int version; |
315 EXTERN char xcmp[C_GOK+1][C_GOK+1]; | 313 EXTERN char xcmp[C_GOK+1][C_GOK+1]; |
316 EXTERN Prog zprg; | 314 EXTERN Prog zprg; |
317 EXTERN int dtype; | 315 EXTERN int dtype; |
318 EXTERN int tlsoffset; | 316 EXTERN int tlsoffset; |
319 EXTERN int armsize; | 317 EXTERN int armsize; |
320 EXTERN int goarm; | 318 EXTERN int goarm; |
321 | 319 |
322 extern char* anames[]; | 320 extern char* anames[]; |
323 extern Optab optab[]; | 321 extern Optab optab[]; |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
419 void wputb(uint16); | 417 void wputb(uint16); |
420 void wput(int32); | 418 void wput(int32); |
421 void wputl(ushort w); | 419 void wputl(ushort w); |
422 void xdefine(char*, int, int32); | 420 void xdefine(char*, int, int32); |
423 void noops(void); | 421 void noops(void); |
424 int32 immrot(uint32); | 422 int32 immrot(uint32); |
425 int32 immaddr(int32); | 423 int32 immaddr(int32); |
426 int32 opbra(int, int); | 424 int32 opbra(int, int); |
427 int brextra(Prog*); | 425 int brextra(Prog*); |
428 int isbranch(Prog*); | 426 int isbranch(Prog*); |
429 void fnptrs(void); | 427 void» fnptrs(void); |
430 void doelf(void); | 428 void doelf(void); |
| 429 void dozerostk(void); // used by -Z |
431 | 430 |
432 vlong addaddr(Sym *s, Sym *t); | 431 vlong addaddr(Sym *s, Sym *t); |
433 vlong addsize(Sym *s, Sym *t); | 432 vlong addsize(Sym *s, Sym *t); |
434 vlong addstring(Sym *s, char *str); | 433 vlong addstring(Sym *s, char *str); |
435 vlong adduint16(Sym *s, uint16 v); | 434 vlong adduint16(Sym *s, uint16 v); |
436 vlong adduint32(Sym *s, uint32 v); | 435 vlong adduint32(Sym *s, uint32 v); |
437 vlong adduint64(Sym *s, uint64 v); | 436 vlong adduint64(Sym *s, uint64 v); |
438 vlong adduint8(Sym *s, uint8 v); | 437 vlong adduint8(Sym *s, uint8 v); |
439 vlong adduintxx(Sym *s, uint64 v, int wid); | 438 vlong adduintxx(Sym *s, uint64 v, int wid); |
440 | 439 |
441 /* Native is little-endian */ | 440 /* Native is little-endian */ |
442 #define LPUT(a) lputl(a) | 441 #define LPUT(a) lputl(a) |
443 #define WPUT(a) wputl(a) | 442 #define WPUT(a) wputl(a) |
444 #define VPUT(a) abort() | 443 #define VPUT(a) abort() |
445 | 444 |
446 #endif | 445 #endif |
447 | 446 |
448 /* Used by ../ld/dwarf.c */ | 447 /* Used by ../ld/dwarf.c */ |
449 enum | 448 enum |
450 { | 449 { |
451 DWARFREGSP = 13 | 450 DWARFREGSP = 13 |
452 }; | 451 }; |
LEFT | RIGHT |