proc: Add filter for non-variable global symbols to PackageVariables

This commit is contained in:
aarzilli 2016-02-21 17:26:13 +01:00 committed by Derek Parker
parent 58913527db
commit 14a92352bc
2 changed files with 31 additions and 0 deletions

@ -1576,3 +1576,24 @@ func TestIssue414(t *testing.T) {
}
})
}
func TestPackageVariables(t *testing.T) {
withTestProcess("testvariables", t, func(p *Process, fixture protest.Fixture) {
err := p.Continue()
assertNoError(err, t, "Continue()")
scope, err := p.CurrentThread.Scope()
assertNoError(err, t, "Scope()")
vars, err := scope.PackageVariables()
assertNoError(err, t, "PackageVariables()")
failed := false
for _, v := range vars {
if v.Unreadable != nil {
failed = true
t.Logf("Unreadable variable %s: %v", v.Name, v.Unreadable)
}
}
if failed {
t.Fatalf("previous errors")
}
})
}

@ -541,11 +541,21 @@ func (scope *EvalScope) PackageVariables() ([]*Variable, error) {
var vars []*Variable
reader := scope.DwarfReader()
var utypoff dwarf.Offset
utypentry, err := reader.SeekToTypeNamed("<unspecified>")
if err == nil {
utypoff = utypentry.Offset
}
for entry, err := reader.NextPackageVariable(); entry != nil; entry, err = reader.NextPackageVariable() {
if err != nil {
return nil, err
}
if typoff, ok := entry.Val(dwarf.AttrType).(dwarf.Offset); !ok || typoff == utypoff {
continue
}
// Ignore errors trying to extract values
val, err := scope.extractVariableFromEntry(entry)
if err != nil {