summaryrefslogtreecommitdiff
path: root/src/cmd/8l/asm.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/8l/asm.c')
-rw-r--r--src/cmd/8l/asm.c22
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();