diff options
Diffstat (limited to 'src/cmd/ld/elf.c')
-rw-r--r-- | src/cmd/ld/elf.c | 16 |
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; |