aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/8l
diff options
context:
space:
mode:
authorDavid Anderson <danderson@google.com>2011-07-12 17:49:55 -0700
committerRuss Cox <rsc@golang.org>2011-07-12 17:49:55 -0700
commitf1df07bf6a37bc291f293fd5cdfc9203dd22b31f (patch)
tree29ace000141082271efae375dd09950bfb9b69bf /src/cmd/8l
parent75780f99f4c310877e5343b4e8b2fe01b4b00b51 (diff)
downloadgo-f1df07bf6a37bc291f293fd5cdfc9203dd22b31f.tar.xz
5l, 6l, 8l: Add a PT_LOAD PHDR entry for the PHDR.
Per the TIS ELF spec, if a PHDR entry is present in the program header table, it must be part of the memory image of the program. Failure to do this makes elflint complain, and causes some tools that manipulate ELF to crash. R=iant, rsc CC=dave, golang-dev https://golang.org/cl/4650067
Diffstat (limited to 'src/cmd/8l')
-rw-r--r--src/cmd/8l/asm.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/cmd/8l/asm.c b/src/cmd/8l/asm.c
index e1ccfb8a3d..82bff3e1ed 100644
--- a/src/cmd/8l/asm.c
+++ b/src/cmd/8l/asm.c
@@ -665,6 +665,7 @@ asmb(void)
ElfShdr *sh;
Section *sect;
Sym *sym;
+ int o;
int i;
if(debug['v'])
@@ -932,6 +933,17 @@ asmb(void)
pph->paddr = INITTEXT - HEADR + pph->off;
pph->align = INITRND;
+ /*
+ * PHDR must be in a loaded segment. Adjust the text
+ * segment boundaries downwards to include it.
+ */
+ o = segtext.vaddr - pph->vaddr;
+ segtext.vaddr -= o;
+ segtext.len += o;
+ o = segtext.fileoff - pph->off;
+ segtext.fileoff -= o;
+ segtext.filelen += o;
+
if(!debug['d']) {
/* interpreter */
sh = newElfShdr(elfstr[ElfStrInterp]);