diff options
Diffstat (limited to 'cmd/extract_linker/main.go')
-rw-r--r-- | cmd/extract_linker/main.go | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/cmd/extract_linker/main.go b/cmd/extract_linker/main.go index ea0bf4eed..d62dea1c0 100644 --- a/cmd/extract_linker/main.go +++ b/cmd/extract_linker/main.go @@ -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 +} |