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 | c0153e764ab8d53abed51087988140a797e168f0 (patch) | |
tree | 8727eaf3e5e42d7a9e34c07b88e86694c8706d2e /src/cmd/8l | |
parent | 6d311ea60e06920efe0301e123ddf409e0254ffa (diff) | |
download | golang-c0153e764ab8d53abed51087988140a797e168f0.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/8l')
-rw-r--r-- | src/cmd/8l/asm.c | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/src/cmd/8l/asm.c b/src/cmd/8l/asm.c index e496672e5..689ba12d9 100644 --- a/src/cmd/8l/asm.c +++ b/src/cmd/8l/asm.c @@ -304,14 +304,6 @@ doelf(void) 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 - empty for now. @@ -794,7 +786,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; @@ -1012,10 +1011,9 @@ asmb(void) a += elfwritehdr(); a += elfwritephdrs(); a += elfwriteshdrs(); - if (a > ELFRESERVE) { - diag("ELFRESERVE too small: %d > %d", a, ELFRESERVE); - } cflush(); + if(a+elfwriteinterp() > ELFRESERVE) + diag("ELFRESERVE too small: %d > %d", a, ELFRESERVE); break; } cflush(); |