diff options
author | Russ Cox <rsc@golang.org> | 2009-11-18 13:51:05 -0800 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2009-11-18 13:51:05 -0800 |
commit | 564466bac1b8cc6307cc7d6ace36b362cde38658 (patch) | |
tree | 8727eaf3e5e42d7a9e34c07b88e86694c8706d2e /src/cmd/6l | |
parent | 89ff095d3af3036482652e9ea591d63412d8937f (diff) | |
download | go-564466bac1b8cc6307cc7d6ace36b362cde38658.tar.gz |
ld: move interpreter string into first block of ELF file
necessary on freebsd.
R=r, dho
CC=golang-dev
http://codereview.appspot.com/157069
Diffstat (limited to 'src/cmd/6l')
-rw-r--r-- | src/cmd/6l/asm.c | 25 |
1 files changed, 10 insertions, 15 deletions
diff --git a/src/cmd/6l/asm.c b/src/cmd/6l/asm.c index 3679e5cf4..4f7f6e22f 100644 --- a/src/cmd/6l/asm.c +++ b/src/cmd/6l/asm.c @@ -315,19 +315,6 @@ doelf(void) elfstr[ElfStrDynstr] = addstring(shstrtab, ".dynstr"); elfstr[ElfStrRela] = addstring(shstrtab, ".rela"); - /* interpreter string */ - s = lookup(".interp", 0); - s->reachable = 1; - s->type = SDATA; // TODO: rodata - switch(HEADTYPE) { - case 7: - addstring(lookup(".interp", 0), linuxdynld); - break; - case 9: - addstring(lookup(".interp", 0), freebsddynld); - break; - } - /* * hash table. * only entries that other objects need to find when @@ -688,7 +675,14 @@ asmb(void) sh->type = SHT_PROGBITS; sh->flags = SHF_ALLOC; sh->addralign = 1; - shsym(sh, lookup(".interp", 0)); + switch(HEADTYPE) { + case 7: + elfinterp(sh, startva, linuxdynld); + break; + case 9: + elfinterp(sh, startva, freebsddynld); + break; + } ph = newElfPhdr(); ph->type = PT_INTERP; @@ -903,7 +897,8 @@ asmb(void) a += elfwritehdr(); a += elfwritephdrs(); a += elfwriteshdrs(); - if (a > ELFRESERVE) + cflush(); + if(a+elfwriteinterp() > ELFRESERVE) diag("ELFRESERVE too small: %d > %d", a, ELFRESERVE); break; } |