]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/link: don't count tbss section in TestFlagD
authorCherry Mui <cherryyz@google.com>
Fri, 12 Sep 2025 16:36:38 +0000 (12:36 -0400)
committerCherry Mui <cherryyz@google.com>
Fri, 12 Sep 2025 17:20:07 +0000 (10:20 -0700)
TestFlagD looks for a data-like section at the lowest address.
On OpenBSD, the .tbss section matches the current condition, which
has address 0, causing the test fail. Don't count TLS sections.

Also, print the section name on error.

Fixes #75444.

Change-Id: Ic0aa1a2bb7c6bd5c0023d4482405a482095ff68b
Reviewed-on: https://go-review.googlesource.com/c/go/+/703375
Reviewed-by: Michael Pratt <mpratt@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>

src/cmd/link/elf_test.go

index c82eae8866769877023694b43b31132a12a5febd..dc52c091f65d179ffe1db093400b151eac2df8b6 100644 (file)
@@ -627,30 +627,30 @@ func testFlagD(t *testing.T, dataAddr string, roundQuantum string, expectedAddr
        defer ef.Close()
 
        // Find the first data-related section to verify segment placement
-       var firstDataSectionAddr uint64
-       var found bool = false
+       var firstDataSection *elf.Section
        for _, sec := range ef.Sections {
                if sec.Type == elf.SHT_PROGBITS || sec.Type == elf.SHT_NOBITS {
                        // These sections are writable, allocated at runtime, but not executable
+                       // nor TLS.
                        isWrite := sec.Flags&elf.SHF_WRITE != 0
                        isExec := sec.Flags&elf.SHF_EXECINSTR != 0
                        isAlloc := sec.Flags&elf.SHF_ALLOC != 0
+                       isTLS := sec.Flags&elf.SHF_TLS != 0
 
-                       if isWrite && !isExec && isAlloc {
-                               addrLower := sec.Addr < firstDataSectionAddr
-                               if !found || addrLower {
-                                       firstDataSectionAddr = sec.Addr
-                                       found = true
+                       if isWrite && !isExec && isAlloc && !isTLS {
+                               if firstDataSection == nil || sec.Addr < firstDataSection.Addr {
+                                       firstDataSection = sec
                                }
                        }
                }
        }
 
-       if !found {
+       if firstDataSection == nil {
                t.Fatalf("can't find any writable data sections")
        }
-       if firstDataSectionAddr != expectedAddr {
-               t.Errorf("data section starts at 0x%x, expected 0x%x", firstDataSectionAddr, expectedAddr)
+       if firstDataSection.Addr != expectedAddr {
+               t.Errorf("data section starts at 0x%x for section %s, expected 0x%x",
+                       firstDataSection.Addr, firstDataSection.Name, expectedAddr)
        }
 }