mirror of
https://github.com/golang/go
synced 2024-11-21 20:14:52 -07:00
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
This commit is contained in:
parent
75780f99f4
commit
f1df07bf6a
@ -294,6 +294,7 @@ asmb(void)
|
||||
ElfPhdr *ph, *pph;
|
||||
ElfShdr *sh;
|
||||
Section *sect;
|
||||
int o;
|
||||
|
||||
if(debug['v'])
|
||||
Bprint(&bso, "%5.2f asmb\n", cputime());
|
||||
@ -462,6 +463,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 for dynamic linking */
|
||||
sh = newElfShdr(elfstr[ElfStrInterp]);
|
||||
|
@ -699,6 +699,7 @@ asmb(void)
|
||||
ElfPhdr *ph, *pph;
|
||||
ElfShdr *sh;
|
||||
Section *sect;
|
||||
int o;
|
||||
|
||||
if(debug['v'])
|
||||
Bprint(&bso, "%5.2f asmb\n", cputime());
|
||||
@ -862,6 +863,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]);
|
||||
|
@ -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]);
|
||||
|
Loading…
Reference in New Issue
Block a user