mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
[dev.link] cmd/link: expand set of symbol attributes in loader
Add in a collection of new loader interfaces for getting/setting
symbol attributes, e.g. properties that would normally be part of the
sym.Symbol "Attr" field. This change also moves references to the
loaders 'reachable' bitmap behind a pair of loader methods, so that we
a consistent way of accessing symbol attributes overall. It is worth
noting that not every symbol attribute is backed by a bitmap; for some
infrequently used attributes, a map[Sym]struct{} is used instead.
Change-Id: I0010c9cd928d41b4bb6cdf45db4581e11c3c5db3
Reviewed-on: https://go-review.googlesource.com/c/go/+/210778
Run-TryBot: Than McIntosh <thanm@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
Reviewed-by: Jeremy Faller <jeremy@golang.org>
This commit is contained in:
parent
07914eda40
commit
b658c62e9c
3 changed files with 312 additions and 27 deletions
|
|
@ -6,6 +6,7 @@ package loader
|
|||
|
||||
import (
|
||||
"cmd/link/internal/sym"
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
|
|
@ -52,4 +53,47 @@ func TestAddMaterializedSymbol(t *testing.T) {
|
|||
if es3 == 0 {
|
||||
t.Fatalf("CreateExtSym failed for nameless sym")
|
||||
}
|
||||
|
||||
// New symbols should not initially be reachable.
|
||||
if ldr.AttrReachable(es1) || ldr.AttrReachable(es2) || ldr.AttrReachable(es3) {
|
||||
t.Errorf("newly materialized symbols should not be reachable")
|
||||
}
|
||||
|
||||
// ... however it should be possible to set/unset their reachability.
|
||||
ldr.SetAttrReachable(es3, true)
|
||||
if !ldr.AttrReachable(es3) {
|
||||
t.Errorf("expected reachable symbol after update")
|
||||
}
|
||||
ldr.SetAttrReachable(es3, false)
|
||||
if ldr.AttrReachable(es3) {
|
||||
t.Errorf("expected unreachable symbol after update")
|
||||
}
|
||||
|
||||
// Test expansion of attr bitmaps
|
||||
for idx := 0; idx < 36; idx++ {
|
||||
es := ldr.AddExtSym(fmt.Sprintf("zext%d", idx), 0)
|
||||
if ldr.AttrOnList(es) {
|
||||
t.Errorf("expected OnList after creation")
|
||||
}
|
||||
ldr.SetAttrOnList(es, true)
|
||||
if !ldr.AttrOnList(es) {
|
||||
t.Errorf("expected !OnList after update")
|
||||
}
|
||||
if ldr.AttrDuplicateOK(es) {
|
||||
t.Errorf("expected DupOK after creation")
|
||||
}
|
||||
ldr.SetAttrDuplicateOK(es, true)
|
||||
if !ldr.AttrDuplicateOK(es) {
|
||||
t.Errorf("expected !DupOK after update")
|
||||
}
|
||||
}
|
||||
|
||||
// Get/set a few other attributes
|
||||
if ldr.AttrVisibilityHidden(es3) {
|
||||
t.Errorf("expected initially not hidden")
|
||||
}
|
||||
ldr.SetAttrVisibilityHidden(es3, true)
|
||||
if !ldr.AttrVisibilityHidden(es3) {
|
||||
t.Errorf("expected hidden after update")
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue