OLD | NEW |
1 // Inferno utils/6l/span.c | 1 // Inferno utils/6l/span.c |
2 // http://code.google.com/p/inferno-os/source/browse/utils/6l/span.c | 2 // http://code.google.com/p/inferno-os/source/browse/utils/6l/span.c |
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 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
227 for(h=0; h<NHASH; h++) { | 227 for(h=0; h<NHASH; h++) { |
228 for(s=hash[h]; s!=S; s=s->link) { | 228 for(s=hash[h]; s!=S; s=s->link) { |
229 switch(s->type) { | 229 switch(s->type) { |
230 case SCONST: | 230 case SCONST: |
231 if(!s->reachable) | 231 if(!s->reachable) |
232 continue; | 232 continue; |
233 put(s->name, 'D', s->value, s->size, s->version,
s->gotype); | 233 put(s->name, 'D', s->value, s->size, s->version,
s->gotype); |
234 continue; | 234 continue; |
235 | 235 |
236 case SDATA: | 236 case SDATA: |
| 237 case SELFDATA: |
237 if(!s->reachable) | 238 if(!s->reachable) |
238 continue; | 239 continue; |
239 put(s->name, 'D', s->value+INITDAT, s->size, s->
version, s->gotype); | 240 put(s->name, 'D', s->value+INITDAT, s->size, s->
version, s->gotype); |
240 continue; | 241 continue; |
241 | 242 |
242 case SMACHO: | 243 case SMACHO: |
243 if(!s->reachable) | 244 if(!s->reachable) |
244 continue; | 245 continue; |
245 put(s->name, 'D', s->value+INITDAT+datsize+bsssi
ze, s->size, s->version, s->gotype); | 246 put(s->name, 'D', s->value+INITDAT+datsize+bsssi
ze, s->size, s->version, s->gotype); |
246 continue; | 247 continue; |
247 | 248 |
248 case SBSS: | 249 case SBSS: |
249 if(!s->reachable) | 250 if(!s->reachable) |
250 continue; | 251 continue; |
251 put(s->name, 'B', s->value+INITDAT, s->size, s->
version, s->gotype); | 252 put(s->name, 'B', s->value+INITDAT, s->size, s->
version, s->gotype); |
252 continue; | 253 continue; |
253 | 254 |
| 255 case SFIXED: |
| 256 put(s->name, 'B', s->value, s->size, s->version,
s->gotype); |
| 257 continue; |
| 258 |
254 case SFILE: | 259 case SFILE: |
255 put(s->name, 'f', s->value, 0, s->version, 0); | 260 put(s->name, 'f', s->value, 0, s->version, 0); |
256 continue; | 261 continue; |
257 } | 262 } |
258 } | 263 } |
259 } | 264 } |
260 | 265 |
261 for(p = textp; p != P; p = p->pcond) { | 266 for(p = textp; p != P; p = p->pcond) { |
262 s = p->from.sym; | 267 s = p->from.sym; |
263 if(s->type != STEXT) | 268 if(s->type != STEXT) |
(...skipping 521 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
785 case SUNDEF: | 790 case SUNDEF: |
786 ckoff(s, v); | 791 ckoff(s, v); |
787 case STEXT: | 792 case STEXT: |
788 case SCONST: | 793 case SCONST: |
789 if(!s->reachable) | 794 if(!s->reachable) |
790 diag("unreachable symbol in vaddr - %s",
s->name); | 795 diag("unreachable symbol in vaddr - %s",
s->name); |
791 if((uvlong)s->value < (uvlong)INITTEXT) | 796 if((uvlong)s->value < (uvlong)INITTEXT) |
792 v += INITTEXT; /* TO DO */ | 797 v += INITTEXT; /* TO DO */ |
793 v += s->value; | 798 v += s->value; |
794 break; | 799 break; |
| 800 case SFIXED: |
| 801 v += s->value; |
| 802 break; |
795 case SMACHO: | 803 case SMACHO: |
796 if(!s->reachable) | 804 if(!s->reachable) |
797 sysfatal("unreachable symbol in vaddr -
%s", s->name); | 805 sysfatal("unreachable symbol in vaddr -
%s", s->name); |
798 v += INITDAT + datsize + s->value; | 806 v += INITDAT + datsize + s->value; |
799 break; | 807 break; |
800 default: | 808 default: |
801 if(!s->reachable) | 809 if(!s->reachable) |
802 diag("unreachable symbol in vaddr - %s",
s->name); | 810 diag("unreachable symbol in vaddr - %s",
s->name); |
803 v += INITDAT + s->value; | 811 v += INITDAT + s->value; |
804 } | 812 } |
(...skipping 1089 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1894 | 1902 |
1895 cflush(); | 1903 cflush(); |
1896 seek(cout, off, 0); | 1904 seek(cout, off, 0); |
1897 lputb(t); | 1905 lputb(t); |
1898 | 1906 |
1899 if(debug['v']){ | 1907 if(debug['v']){ |
1900 Bprint(&bso, "import table entries = %d\n", imports); | 1908 Bprint(&bso, "import table entries = %d\n", imports); |
1901 Bprint(&bso, "export table entries = %d\n", exports); | 1909 Bprint(&bso, "export table entries = %d\n", exports); |
1902 } | 1910 } |
1903 } | 1911 } |
OLD | NEW |