})
}
}
+
+func TestIssue51939(t *testing.T) {
+ testenv.MustHaveGoBuild(t)
+ t.Parallel()
+ td := t.TempDir()
+ goFile := filepath.Join(td, "issue51939.go")
+ if err := os.WriteFile(goFile, []byte(goSource), 0444); err != nil {
+ t.Fatal(err)
+ }
+ outFile := filepath.Join(td, "issue51939.exe")
+ goTool := testenv.GoToolPath(t)
+ cmd := exec.Command(goTool, "build", "-o", outFile, goFile)
+ if out, err := cmd.CombinedOutput(); err != nil {
+ t.Logf("%s", out)
+ t.Fatal(err)
+ }
+
+ ef, err := elf.Open(outFile)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ for _, s := range ef.Sections {
+ if s.Flags&elf.SHF_ALLOC == 0 && s.Addr != 0 {
+ t.Errorf("section %s should not allocated with addr %x", s.Name, s.Addr)
+ }
+ }
+}
sh.Flags |= uint64(elf.SHF_TLS)
sh.Type = uint32(elf.SHT_NOBITS)
}
+ if linkmode != LinkExternal {
+ sh.Addr = sect.Vaddr
+ }
+
if strings.HasPrefix(sect.Name, ".debug") || strings.HasPrefix(sect.Name, ".zdebug") {
sh.Flags = 0
+ sh.Addr = 0
if sect.Compressed {
sh.Flags |= uint64(elf.SHF_COMPRESSED)
}
}
- if linkmode != LinkExternal {
- sh.Addr = sect.Vaddr
- }
sh.Addralign = uint64(sect.Align)
sh.Size = sect.Length
if sect.Name != ".tbss" {