LEFT | RIGHT |
1 // Derived from Inferno utils/6l/l.h | 1 // Derived from Inferno utils/6l/l.h |
2 // http://code.google.com/p/inferno-os/source/browse/utils/6l/l.h | 2 // http://code.google.com/p/inferno-os/source/browse/utils/6l/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 13 matching lines...) Expand all Loading... |
24 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | 24 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
25 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | 25 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
26 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | 26 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
27 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | 27 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
28 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | 28 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
29 // THE SOFTWARE. | 29 // THE SOFTWARE. |
30 | 30 |
31 enum | 31 enum |
32 { | 32 { |
33 Sxxx, | 33 Sxxx, |
34 » | 34 |
35 /* order here is order in output file */ | 35 /* order here is order in output file */ |
36 STEXT, | 36 STEXT, |
37 SMACHOPLT, | 37 SMACHOPLT, |
38 STYPE, | 38 STYPE, |
39 SSTRING, | 39 SSTRING, |
40 SGOSTRING, | 40 SGOSTRING, |
41 SRODATA, | 41 SRODATA, |
42 STYPELINK, | 42 STYPELINK, |
43 SGCDATA, | 43 SGCDATA, |
44 SGCBSS, | 44 SGCBSS, |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
91 struct Segment | 91 struct Segment |
92 { | 92 { |
93 uchar rwx; // permission as usual unix bits (5 = r-x etc) | 93 uchar rwx; // permission as usual unix bits (5 = r-x etc) |
94 uvlong vaddr; // virtual address | 94 uvlong vaddr; // virtual address |
95 uvlong len; // length in memory | 95 uvlong len; // length in memory |
96 uvlong fileoff; // file offset | 96 uvlong fileoff; // file offset |
97 uvlong filelen; // length on disk | 97 uvlong filelen; // length on disk |
98 Section* sect; | 98 Section* sect; |
99 }; | 99 }; |
100 | 100 |
| 101 #pragma incomplete struct Elf64_Shdr |
| 102 |
101 struct Section | 103 struct Section |
102 { | 104 { |
103 uchar rwx; | 105 uchar rwx; |
104 char *name; | 106 char *name; |
105 uvlong vaddr; | 107 uvlong vaddr; |
106 uvlong len; | 108 uvlong len; |
107 Section *next; // in segment list | 109 Section *next; // in segment list |
108 Segment *seg; | 110 Segment *seg; |
| 111 struct Elf64_Shdr *elfsect; |
109 }; | 112 }; |
110 | 113 |
111 extern char symname[]; | 114 extern char symname[]; |
112 extern char **libdir; | 115 extern char **libdir; |
113 extern int nlibdir; | 116 extern int nlibdir; |
114 | 117 |
115 EXTERN char* INITENTRY; | 118 EXTERN char* INITENTRY; |
116 EXTERN char* thestring; | 119 EXTERN char* thestring; |
117 EXTERN Library* library; | 120 EXTERN Library* library; |
118 EXTERN int libraryp; | 121 EXTERN int libraryp; |
119 EXTERN int nlibrary; | 122 EXTERN int nlibrary; |
120 EXTERN Sym* hash[NHASH]; | 123 EXTERN Sym* hash[NHASH]; |
121 EXTERN Sym* allsym; | 124 EXTERN Sym* allsym; |
122 EXTERN Sym* histfrog[MAXHIST]; | 125 EXTERN Sym* histfrog[MAXHIST]; |
123 EXTERN uchar fnuxi8[8]; | 126 EXTERN uchar fnuxi8[8]; |
124 EXTERN uchar fnuxi4[4]; | 127 EXTERN uchar fnuxi4[4]; |
125 EXTERN int histfrogp; | 128 EXTERN int histfrogp; |
126 EXTERN int histgen; | 129 EXTERN int histgen; |
127 EXTERN uchar inuxi1[1]; | 130 EXTERN uchar inuxi1[1]; |
128 EXTERN uchar inuxi2[2]; | 131 EXTERN uchar inuxi2[2]; |
129 EXTERN uchar inuxi4[4]; | 132 EXTERN uchar inuxi4[4]; |
130 EXTERN uchar inuxi8[8]; | 133 EXTERN uchar inuxi8[8]; |
131 EXTERN char* outfile; | 134 EXTERN char* outfile; |
132 EXTERN int32 nsymbol; | 135 EXTERN int32 nsymbol; |
133 EXTERN char* thestring; | 136 EXTERN char* thestring; |
134 EXTERN int ndynexp; | 137 EXTERN int ndynexp; |
135 EXTERN int havedynamic; | 138 EXTERN int havedynamic; |
136 EXTERN int iscgo; | 139 EXTERN int iscgo; |
| 140 EXTERN int elfglobalsymndx; |
| 141 EXTERN int flag_race; |
| 142 EXTERN int flag_shared; |
137 EXTERN char* tracksym; | 143 EXTERN char* tracksym; |
| 144 EXTERN char* interpreter; |
138 | 145 |
139 EXTERN Segment segtext; | 146 EXTERN Segment segtext; |
140 EXTERN Segment segdata; | 147 EXTERN Segment segdata; |
141 EXTERN Segment segsym; | 148 EXTERN Segment segsym; |
142 EXTERN Segment segdwarf; | 149 EXTERN Segment segdwarf; |
143 | 150 |
144 void addlib(char *src, char *obj); | 151 void addlib(char *src, char *obj); |
145 void addlibpath(char *srcref, char *objref, char *file, char *pkg); | 152 void addlibpath(char *srcref, char *objref, char *file, char *pkg); |
146 Section* addsection(Segment*, char*, int); | 153 Section* addsection(Segment*, char*, int); |
147 void copyhistfrog(char *buf, int nbuf); | 154 void copyhistfrog(char *buf, int nbuf); |
(...skipping 16 matching lines...) Expand all Loading... |
164 void loadlib(void); | 171 void loadlib(void); |
165 void errorexit(void); | 172 void errorexit(void); |
166 void mangle(char*); | 173 void mangle(char*); |
167 void objfile(char *file, char *pkg); | 174 void objfile(char *file, char *pkg); |
168 void libinit(void); | 175 void libinit(void); |
169 void pclntab(void); | 176 void pclntab(void); |
170 void symtab(void); | 177 void symtab(void); |
171 void Lflag(char *arg); | 178 void Lflag(char *arg); |
172 void usage(void); | 179 void usage(void); |
173 void adddynrel(Sym*, Reloc*); | 180 void adddynrel(Sym*, Reloc*); |
| 181 void adddynrela(Sym*, Sym*, Reloc*); |
| 182 Sym* lookuprel(); |
174 void ldobj1(Biobuf *f, char*, int64 len, char *pn); | 183 void ldobj1(Biobuf *f, char*, int64 len, char *pn); |
175 void ldobj(Biobuf*, char*, int64, char*, int); | 184 void ldobj(Biobuf*, char*, int64, char*, int); |
176 void ldelf(Biobuf*, char*, int64, char*); | 185 void ldelf(Biobuf*, char*, int64, char*); |
177 void ldmacho(Biobuf*, char*, int64, char*); | 186 void ldmacho(Biobuf*, char*, int64, char*); |
178 void ldpe(Biobuf*, char*, int64, char*); | 187 void ldpe(Biobuf*, char*, int64, char*); |
179 void ldpkg(Biobuf*, char*, int64, char*, int); | 188 void ldpkg(Biobuf*, char*, int64, char*, int); |
180 void mark(Sym *s); | 189 void mark(Sym *s); |
181 void mkfwd(void); | 190 void mkfwd(void); |
182 char* expandpkg(char*, char*); | 191 char* expandpkg(char*, char*); |
183 void deadcode(void); | 192 void deadcode(void); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
216 void genasmsym(void (*put)(Sym*, char*, int, vlong, vlong, int, Sym*)); | 225 void genasmsym(void (*put)(Sym*, char*, int, vlong, vlong, int, Sym*)); |
217 vlong datoff(vlong); | 226 vlong datoff(vlong); |
218 void adddynlib(char*); | 227 void adddynlib(char*); |
219 int archreloc(Reloc*, Sym*, vlong*); | 228 int archreloc(Reloc*, Sym*, vlong*); |
220 void adddynsym(Sym*); | 229 void adddynsym(Sym*); |
221 void addexport(void); | 230 void addexport(void); |
222 void dostkcheck(void); | 231 void dostkcheck(void); |
223 void undef(void); | 232 void undef(void); |
224 void doweak(void); | 233 void doweak(void); |
225 void setpersrc(Sym*); | 234 void setpersrc(Sym*); |
| 235 void doversion(void); |
| 236 void usage(void); |
| 237 void setinterp(char*); |
226 | 238 |
227 int pathchar(void); | 239 int pathchar(void); |
228 void* mal(uint32); | 240 void* mal(uint32); |
229 void unmal(void*, uint32); | 241 void unmal(void*, uint32); |
230 void mywhatsys(void); | 242 void mywhatsys(void); |
231 int rbyoff(const void*, const void*); | 243 int rbyoff(const void*, const void*); |
232 | 244 |
233 uint16 le16(uchar*); | 245 uint16 le16(uchar*); |
234 uint32 le32(uchar*); | 246 uint32 le32(uchar*); |
235 uint64 le64(uchar*); | 247 uint64 le64(uchar*); |
236 uint16 be16(uchar*); | 248 uint16 be16(uchar*); |
237 uint32 be32(uchar*); | 249 uint32 be32(uchar*); |
238 uint64 be64(uchar*); | 250 uint64 be64(uchar*); |
239 | 251 |
240 typedef struct Endian Endian; | 252 typedef struct Endian Endian; |
241 struct Endian | 253 struct Endian |
242 { | 254 { |
243 uint16 (*e16)(uchar*); | 255 uint16 (*e16)(uchar*); |
244 uint32 (*e32)(uchar*); | 256 uint32 (*e32)(uchar*); |
245 uint64 (*e64)(uchar*); | 257 uint64 (*e64)(uchar*); |
246 }; | 258 }; |
247 | 259 |
248 extern Endian be, le; | 260 extern Endian be, le; |
249 | |
250 // relocation size bits | |
251 enum { | |
252 Rbig = 128, | |
253 Rlittle = 64, | |
254 }; | |
255 | 261 |
256 /* set by call to mywhatsys() */ | 262 /* set by call to mywhatsys() */ |
257 extern char* goroot; | 263 extern char* goroot; |
258 extern char* goarch; | 264 extern char* goarch; |
259 extern char* goos; | 265 extern char* goos; |
260 | 266 |
261 /* whence for ldpkg */ | 267 /* whence for ldpkg */ |
262 enum { | 268 enum { |
263 FileObj = 0, | 269 FileObj = 0, |
264 ArchiveObj, | 270 ArchiveObj, |
(...skipping 24 matching lines...) Expand all Loading... |
289 typedef struct Header Header; | 295 typedef struct Header Header; |
290 struct Header { | 296 struct Header { |
291 char *name; | 297 char *name; |
292 int val; | 298 int val; |
293 }; | 299 }; |
294 | 300 |
295 EXTERN char* headstring; | 301 EXTERN char* headstring; |
296 extern Header headers[]; | 302 extern Header headers[]; |
297 | 303 |
298 int headtype(char*); | 304 int headtype(char*); |
| 305 void setheadtype(char*); |
299 | 306 |
300 int Yconv(Fmt*); | 307 int Yconv(Fmt*); |
301 | 308 |
302 #pragma varargck type "O" int | 309 #pragma varargck type "O" int |
303 #pragma varargck type "Y" Sym* | 310 #pragma varargck type "Y" Sym* |
304 | 311 |
305 // buffered output | 312 // buffered output |
306 | 313 |
307 EXTERN Biobuf bso; | 314 EXTERN Biobuf bso; |
308 | 315 |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
341 int decodetype_funcoutcount(Sym*); | 348 int decodetype_funcoutcount(Sym*); |
342 Sym* decodetype_funcintype(Sym*, int); | 349 Sym* decodetype_funcintype(Sym*, int); |
343 Sym* decodetype_funcouttype(Sym*, int); | 350 Sym* decodetype_funcouttype(Sym*, int); |
344 int decodetype_structfieldcount(Sym*); | 351 int decodetype_structfieldcount(Sym*); |
345 char* decodetype_structfieldname(Sym*, int); | 352 char* decodetype_structfieldname(Sym*, int); |
346 Sym* decodetype_structfieldtype(Sym*, int); | 353 Sym* decodetype_structfieldtype(Sym*, int); |
347 vlong decodetype_structfieldoffs(Sym*, int); | 354 vlong decodetype_structfieldoffs(Sym*, int); |
348 vlong decodetype_ifacemethodcount(Sym*); | 355 vlong decodetype_ifacemethodcount(Sym*); |
349 | 356 |
350 void sortdynexp(void); | 357 void sortdynexp(void); |
LEFT | RIGHT |