diff options
Diffstat (limited to 'src/cmd/ld/elf.c')
-rw-r--r-- | src/cmd/ld/elf.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/cmd/ld/elf.c b/src/cmd/ld/elf.c index f4809e07c..c57630e80 100644 --- a/src/cmd/ld/elf.c +++ b/src/cmd/ld/elf.c @@ -17,6 +17,7 @@ static int elf64; static ElfEhdr hdr; static ElfPhdr *phdr[NSECT]; static ElfShdr *shdr[NSECT]; +static char *interp; /* Initialize the global variable that describes the ELF header. It will be updated as @@ -278,3 +279,29 @@ elfwritedynentsymsize(Sym *s, int tag, Sym *t) adduint32(s, tag); addsize(s, t); } + +int +elfwriteinterp(void) +{ + int n; + + if(interp == nil) + return 0; + + n = strlen(interp)+1; + seek(cout, ELFRESERVE-n, 0); + write(cout, interp, n); + return n; +} + +void +elfinterp(ElfShdr *sh, uint64 startva, char *p) +{ + int n; + + interp = p; + n = strlen(interp)+1; + sh->addr = startva + ELFRESERVE - n; + sh->off = ELFRESERVE - n; + sh->size = n; +} |