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
diff --git a/cmd/extract_linker/main.go b/cmd/extract_linker/main.go
index ea0bf4e..d62dea1 100644
--- a/cmd/extract_linker/main.go
+++ b/cmd/extract_linker/main.go
@@ -61,8 +61,15 @@
 			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 @@
 	}
 	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
+}