diff options
Diffstat (limited to 'src/cmd/8l/asm.c')
-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(); |