summaryrefslogtreecommitdiff
path: root/src/cmd/ld/elf.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/ld/elf.c')
-rw-r--r--src/cmd/ld/elf.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/cmd/ld/elf.c b/src/cmd/ld/elf.c
index fc917b203..f9f9ef6b2 100644
--- a/src/cmd/ld/elf.c
+++ b/src/cmd/ld/elf.c
@@ -308,13 +308,13 @@ int
elfwriteinterp(void)
{
int n;
-
+
if(interp == nil)
return 0;
n = strlen(interp)+1;
- seek(cout, ELFRESERVE-n, 0);
- ewrite(cout, interp, n);
+ cseek(ELFRESERVE-n);
+ cwrite(interp, n);
return n;
}
@@ -322,7 +322,7 @@ void
elfinterp(ElfShdr *sh, uint64 startva, char *p)
{
int n;
-
+
interp = p;
n = strlen(interp)+1;
sh->addr = startva + ELFRESERVE - n;
@@ -393,7 +393,7 @@ elfdynhash(void)
nsym = nelfsym;
s = lookup(".hash", 0);
- s->type = SELFDATA;
+ s->type = SELFROSECT;
s->reachable = 1;
i = nsym;
@@ -539,6 +539,12 @@ elfshbits(Section *sect)
return nil;
found:
+ for(i=0; i<hdr.shnum; i++) {
+ sh = shdr[i];
+ if(sh->name == off)
+ return sh;
+ }
+
sh = newElfShdr(off);
if(sect->vaddr < sect->seg->vaddr + sect->seg->filelen)
sh->type = SHT_PROGBITS;