From 4fe1203111eeda8a38af4f2a4208e4d4de720c0d Mon Sep 17 00:00:00 2001 From: Keith Randall Date: Fri, 2 Jan 2026 13:42:00 -0800 Subject: cmd/link: align covctrs symbol If we start the covctrs blob at an odd alignment, then covctrs will not be correctly aligned. Each individual entry is aligned properly, but the start marker may be before any padding inserted to enforce that alignment. Fixes #58936 Change-Id: I802fbe40eacfa5a3c8c4864e078b0e078da956d5 Reviewed-on: https://go-review.googlesource.com/c/go/+/733740 LUCI-TryBot-Result: Go LUCI Reviewed-by: Cherry Mui Reviewed-by: Keith Randall --- src/cmd/link/internal/ld/data.go | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'src/cmd/link') diff --git a/src/cmd/link/internal/ld/data.go b/src/cmd/link/internal/ld/data.go index 683df3bb67..a045ff5eea 100644 --- a/src/cmd/link/internal/ld/data.go +++ b/src/cmd/link/internal/ld/data.go @@ -2022,6 +2022,13 @@ func (state *dodataState) allocateDataSections(ctxt *Link) { ldr.SetSymSect(ldr.LookupOrCreateSym("runtime.covctrs", 0), sect) ldr.SetSymSect(ldr.LookupOrCreateSym("runtime.ecovctrs", 0), sect) + // If we started this blob at an odd alignment, then covctrs will + // not be correctly aligned. Each individual entry is aligned properly, + // but the start marker may be before any padding inserted to enforce + // that alignment. Fix that here. See issue 58936. + covCounterDataStartOff += covCounterDataLen % 4 + covCounterDataLen -= covCounterDataLen % 4 + // Coverage instrumentation counters for libfuzzer. if len(state.data[sym.SLIBFUZZER_8BIT_COUNTER]) > 0 { sect := state.allocateNamedSectionAndAssignSyms(&Segdata, ".go.fuzzcntrs", sym.SLIBFUZZER_8BIT_COUNTER, sym.Sxxx, 06) -- cgit v1.3-5-g45d5