Give extracted linker sections pretty names

Replace .linker.sect0, etc. with .linker, .linker.text, .linker.data
and .linker.data.rel.ro by extracting the name of the first section
in each program header.

Test: build and run host bionic binary
Change-Id: I25107547536a3a3963fdeb311c45a7ee53c0bc45
This commit is contained in:
Colin Cross 2021-06-11 17:57:09 -07:00
parent f04eb99acc
commit 009f3df380

View file

@ -61,8 +61,15 @@ func main() {
continue
}
sectionName := fmt.Sprintf(".linker.sect%d", load)
symName := fmt.Sprintf("__dlwrap_linker_sect%d", load)
var progName string
progSection := progToFirstSection(prog, ef.Sections)
if progSection != nil {
progName = progSection.Name
} else {
progName = fmt.Sprintf(".sect%d", load)
}
sectionName := ".linker" + progName
symName := "__dlwrap_linker" + strings.ReplaceAll(progName, ".", "_")
flags := ""
if prog.Flags&elf.PF_W != 0 {
@ -125,3 +132,12 @@ func bytesToAsm(asm io.Writer, buf []byte) {
}
fmt.Fprintln(asm)
}
func progToFirstSection(prog *elf.Prog, sections []*elf.Section) *elf.Section {
for _, section := range sections {
if section.Addr == prog.Vaddr {
return section
}
}
return nil
}