summaryrefslogtreecommitdiff
path: root/cmd/extract_linker/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/extract_linker/main.go')
-rw-r--r--cmd/extract_linker/main.go20
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
+}