]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile/internal: refactor coverage ir.Name flags
authorThan McIntosh <thanm@google.com>
Tue, 5 Mar 2024 15:52:28 +0000 (15:52 +0000)
committerThan McIntosh <thanm@google.com>
Fri, 29 Mar 2024 21:55:46 +0000 (21:55 +0000)
Minor refactoring to eliminate one of the ir.Name flag values used
when building in coverage mode (no changes to functionality). This is
intended to free up a bit in the uint16 flags field to be used in a
subsequent patch.

Change-Id: I4aedb9a55fde24c808ff3f7b077ee0552aa979af
Reviewed-on: https://go-review.googlesource.com/c/go/+/572055
Reviewed-by: Cherry Mui <cherryyz@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>

src/cmd/compile/internal/coverage/cover.go
src/cmd/compile/internal/gc/obj.go
src/cmd/compile/internal/inline/inl.go
src/cmd/compile/internal/ir/name.go

index 5320f004da60bddeb417ea853befe36f5a8aeb4b..51f934f060099fe4e6523ae21cc535f35c2ff89a 100644 (file)
@@ -75,7 +75,7 @@ func Fixup() {
                }
                if strings.HasPrefix(s.Name, counterPrefix) {
                        ckTypSanity(nm, "countervar")
-                       nm.SetCoverageCounter(true)
+                       nm.SetCoverageAuxVar(true)
                        s := nm.Linksym()
                        s.Type = objabi.SCOVERAGE_COUNTER
                }
index e090cafb610f4353d618e73637376c66d5fbbb43..4b42c81ef8184523087f3e392716f48f23b3621d 100644 (file)
@@ -154,7 +154,7 @@ func dumpGlobal(n *ir.Name) {
        }
        types.CalcSize(n.Type())
        ggloblnod(n)
-       if n.CoverageCounter() || n.CoverageAuxVar() || n.Linksym().Static() {
+       if n.CoverageAuxVar() || n.Linksym().Static() {
                return
        }
        base.Ctxt.DwarfGlobal(types.TypeSymName(n.Type()), n.Linksym())
@@ -253,6 +253,11 @@ func ggloblnod(nam *ir.Name) {
        linkname := nam.Sym().Linkname
        name := nam.Sym().Name
 
+       var saveType objabi.SymKind
+       if nam.CoverageAuxVar() {
+               saveType = s.Type
+       }
+
        // We've skipped linkname'd globals's instrument, so we can skip them here as well.
        if base.Flag.ASan && linkname == "" && pkginit.InstrumentGlobalsMap[name] != nil {
                // Write the new size of instrumented global variables that have
@@ -266,8 +271,9 @@ func ggloblnod(nam *ir.Name) {
        if nam.Libfuzzer8BitCounter() {
                s.Type = objabi.SLIBFUZZER_8BIT_COUNTER
        }
-       if nam.CoverageCounter() {
-               s.Type = objabi.SCOVERAGE_COUNTER
+       if nam.CoverageAuxVar() && saveType == objabi.SCOVERAGE_COUNTER {
+               // restore specialized counter type (which Globl call above overwrote)
+               s.Type = saveType
        }
        if nam.Sym().Linkname != "" {
                // Make sure linkname'd symbol is non-package. When a symbol is
index a17562596f9adf50e610780fbc6b7750b31c48df..3f65b2bbc9ab0f3308f35cc0208748f3608d7596 100644 (file)
@@ -1162,7 +1162,10 @@ func isIndexingCoverageCounter(n ir.Node) bool {
                return false
        }
        nn := ixn.X.(*ir.Name)
-       return nn.CoverageCounter()
+       // CoverageAuxVar implies either a coverage counter or a package
+       // ID; since the cover tool never emits code to index into ID vars
+       // this is effectively testing whether nn is a coverage counter.
+       return nn.CoverageAuxVar()
 }
 
 // isAtomicCoverageCounterUpdate examines the specified node to
index 2844c0b8699bd9dd1113384bf8749c758f7eacc3..758158651e6c055c47116e2312b2a92286f8c62a 100644 (file)
@@ -192,8 +192,7 @@ const (
        nameInlLocal                 // PAUTO created by inliner, derived from callee local
        nameOpenDeferSlot            // if temporary var storing info for open-coded defers
        nameLibfuzzer8BitCounter     // if PEXTERN should be assigned to __sancov_cntrs section
-       nameCoverageCounter          // instrumentation counter var for cmd/cover
-       nameCoverageAuxVar           // instrumentation pkg ID variable cmd/cover
+       nameCoverageAuxVar           // instrumentation counter var or pkg ID for cmd/cover
        nameAlias                    // is type name an alias
 )
 
@@ -209,7 +208,6 @@ func (n *Name) InlFormal() bool                { return n.flags&nameInlFormal !=
 func (n *Name) InlLocal() bool                 { return n.flags&nameInlLocal != 0 }
 func (n *Name) OpenDeferSlot() bool            { return n.flags&nameOpenDeferSlot != 0 }
 func (n *Name) Libfuzzer8BitCounter() bool     { return n.flags&nameLibfuzzer8BitCounter != 0 }
-func (n *Name) CoverageCounter() bool          { return n.flags&nameCoverageCounter != 0 }
 func (n *Name) CoverageAuxVar() bool           { return n.flags&nameCoverageAuxVar != 0 }
 
 func (n *Name) setReadonly(b bool)                 { n.flags.set(nameReadonly, b) }
@@ -224,7 +222,6 @@ func (n *Name) SetInlFormal(b bool)                { n.flags.set(nameInlFormal,
 func (n *Name) SetInlLocal(b bool)                 { n.flags.set(nameInlLocal, b) }
 func (n *Name) SetOpenDeferSlot(b bool)            { n.flags.set(nameOpenDeferSlot, b) }
 func (n *Name) SetLibfuzzer8BitCounter(b bool)     { n.flags.set(nameLibfuzzer8BitCounter, b) }
-func (n *Name) SetCoverageCounter(b bool)          { n.flags.set(nameCoverageCounter, b) }
 func (n *Name) SetCoverageAuxVar(b bool)           { n.flags.set(nameCoverageAuxVar, b) }
 
 // OnStack reports whether variable n may reside on the stack.