debug/elf: adjust version API per issue discussion

This updates the new version API for the discussion on #63952.

This change reveals that in fact none of the tests set the
VERSYM_HIDDEN bit. The code before this CL set the hidden flag
for symbols that appear in DynamicVersionNeed, but that is not
an accurate representation of the ELF. The readelf program
does print undefined symbols that way (with a single '@'),
but that doesn't mean that the hidden flag is set.
Leaving tests with the hidden bit set for later.

For #63952

Change-Id: Ida60831e0c9922dfc10f10c7a64bc76a2b197537
Reviewed-on: https://go-review.googlesource.com/c/go/+/635079
Reviewed-by: Austin Clements <austin@google.com>
Commit-Queue: Ian Lance Taylor <iant@google.com>
Auto-Submit: Ian Lance Taylor <iant@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
This commit is contained in:
Ian Lance Taylor 2024-12-10 19:48:11 -08:00 committed by Gopher Robot
parent c93477b5e5
commit 0ca521f9c1
4 changed files with 440 additions and 391 deletions

View File

@ -106,33 +106,34 @@ pkg debug/elf, const VER_FLG_INFO = 4 #63952
pkg debug/elf, const VER_FLG_INFO DynamicVersionFlag #63952
pkg debug/elf, const VER_FLG_WEAK = 2 #63952
pkg debug/elf, const VER_FLG_WEAK DynamicVersionFlag #63952
pkg debug/elf, const VerFlagGlobal = 2 #63952
pkg debug/elf, const VerFlagGlobal SymbolVersionFlag #63952
pkg debug/elf, const VerFlagHidden = 4 #63952
pkg debug/elf, const VerFlagHidden SymbolVersionFlag #63952
pkg debug/elf, const VerFlagLocal = 1 #63952
pkg debug/elf, const VerFlagLocal SymbolVersionFlag #63952
pkg debug/elf, const VerFlagNone = 0 #63952
pkg debug/elf, const VerFlagNone SymbolVersionFlag #63952
pkg debug/elf, const VersionScopeGlobal = 2 #63952
pkg debug/elf, const VersionScopeGlobal SymbolVersionScope #63952
pkg debug/elf, const VersionScopeHidden = 4 #63952
pkg debug/elf, const VersionScopeHidden SymbolVersionScope #63952
pkg debug/elf, const VersionScopeLocal = 1 #63952
pkg debug/elf, const VersionScopeLocal SymbolVersionScope #63952
pkg debug/elf, const VersionScopeNone = 0 #63952
pkg debug/elf, const VersionScopeNone SymbolVersionScope #63952
pkg debug/elf, const VersionScopeSpecific = 3 #63952
pkg debug/elf, const VersionScopeSpecific SymbolVersionScope #63952
pkg debug/elf, method (*File) DynamicVersionNeeds() ([]DynamicVersionNeed, error) #63952
pkg debug/elf, method (*File) DynamicVersions() ([]DynamicVersion, error) #63952
pkg debug/elf, type DynamicVersion struct #63952
pkg debug/elf, type DynamicVersion struct, Deps []string #63952
pkg debug/elf, type DynamicVersion struct, Flags DynamicVersionFlag #63952
pkg debug/elf, type DynamicVersion struct, Name string #63952
pkg debug/elf, type DynamicVersion struct, Index uint16 #63952
pkg debug/elf, type DynamicVersion struct, Version uint16 #63952
pkg debug/elf, type DynamicVersionDep struct #63952
pkg debug/elf, type DynamicVersionDep struct, Dep string #63952
pkg debug/elf, type DynamicVersionDep struct, Flags DynamicVersionFlag #63952
pkg debug/elf, type DynamicVersionDep struct, Other uint16 #63952
pkg debug/elf, type DynamicVersionDep struct, Index uint16 #63952
pkg debug/elf, type DynamicVersionFlag uint16 #63952
pkg debug/elf, type DynamicVersionNeed struct #63952
pkg debug/elf, type DynamicVersionNeed struct, Name string #63952
pkg debug/elf, type DynamicVersionNeed struct, Needs []DynamicVersionDep #63952
pkg debug/elf, type DynamicVersionNeed struct, Version uint16 #63952
pkg debug/elf, type Symbol struct, VersionFlags SymbolVersionFlag #63952
pkg debug/elf, type Symbol struct, VersionScope SymbolVersionScope #63952
pkg debug/elf, type Symbol struct, VersionIndex int16 #63952
pkg debug/elf, type SymbolVersionFlag uint8 #63952
pkg debug/elf, type SymbolVersionScope uint8 #63952
pkg encoding, type BinaryAppender interface { AppendBinary } #62384
pkg encoding, type BinaryAppender interface, AppendBinary([]uint8) ([]uint8, error) #62384
pkg encoding, type TextAppender interface { AppendText } #62384

View File

@ -209,10 +209,22 @@ type Symbol struct {
Name string
Info, Other byte
// These fields are used for symbol versioning
// and are present only for the dynamic symbol table.
// VersionScope describes the version in which the symbol is defined.
// This is only set for the dynamic symbol table.
// When no symbol versioning information is available,
// this is VersionScopeNone.
VersionScope SymbolVersionScope
// VersionIndex is the version index.
// This is only set if VersionScope is VersionScopeSpecific or
// VersionScopeHidden. This is only set for the dynamic symbol table.
// This index will match either [DynamicVersion.Index]
// in the slice returned by [File.DynamicVersions],
// or [DynamicVersiondep.Index] in the Needs field
// of the elements of the slice returned by [File.DynamicVersionNeeds].
// In general, a defined symbol will have an index referring
// to DynamicVersions, and an undefined symbol will have an index
// referring to some version in DynamicVersionNeeds.
VersionIndex int16
VersionFlags SymbolVersionFlag
Section SectionIndex
Value, Size uint64
@ -1455,9 +1467,13 @@ func (f *File) DynamicSymbols() ([]Symbol, error) {
if err != nil {
return nil, err
}
if f.gnuVersionInit(str) {
hasVersions, err := f.gnuVersionInit(str)
if err != nil {
return nil, err
}
if hasVersions {
for i := range sym {
sym[i].VersionIndex, sym[i].Version, sym[i].Library, sym[i].VersionFlags = f.gnuVersion(i)
sym[i].VersionIndex, sym[i].Version, sym[i].Library, sym[i].VersionScope = f.gnuVersion(i)
}
}
return sym, nil
@ -1478,7 +1494,9 @@ func (f *File) ImportedSymbols() ([]ImportedSymbol, error) {
if err != nil {
return nil, err
}
f.gnuVersionInit(str)
if _, err := f.gnuVersionInit(str); err != nil {
return nil, err
}
var all []ImportedSymbol
for i, s := range sym {
if ST_BIND(s.Info) == STB_GLOBAL && s.Section == SHN_UNDEF {
@ -1490,46 +1508,57 @@ func (f *File) ImportedSymbols() ([]ImportedSymbol, error) {
return all, nil
}
type SymbolVersionFlag byte
// SymbolVersionScope describes the version in which a [Symbol] is defined.
// This is only used for the dynamic symbol table.
type SymbolVersionScope byte
const (
VerFlagNone SymbolVersionFlag = 0x0 // No flags.
VerFlagLocal SymbolVersionFlag = 0x1 // Symbol has local scope.
VerFlagGlobal SymbolVersionFlag = 0x2 // Symbol has global scope.
VerFlagHidden SymbolVersionFlag = 0x4 // Symbol is hidden.
VersionScopeNone SymbolVersionScope = iota // no symbol version available
VersionScopeLocal // symbol has local scope
VersionScopeGlobal // symbol has global scope and is in the base version
VersionScopeSpecific // symbol has global scope and is in the version given by VersionIndex
VersionScopeHidden // symbol is in the version given by VersionIndex, and is hidden
)
// DynamicVersion is a version defined by a dynamic object.
// This describes entries in the ELF SHT_GNU_verdef section.
// We assume that the vd_version field is 1.
// Note that the name of the version appears here;
// it is not in the first Deps entry as it is in the ELF file.
type DynamicVersion struct {
Version uint16 // Version of data structure.
Flags DynamicVersionFlag
Index uint16 // Version index.
Deps []string // Dependencies.
Name string // Name of version defined by this index.
Index uint16 // Version index.
Flags DynamicVersionFlag
Deps []string // Names of versions that this version depends upon.
}
// DynamicVersionNeed describes a shared library needed by a dynamic object,
// with a list of the versions needed from that shared library.
// This describes entries in the ELF SHT_GNU_verneed section.
// We assume that the vn_version field is 1.
type DynamicVersionNeed struct {
Version uint16 // Version of data structure.
Name string // Shared library name.
Needs []DynamicVersionDep // Dependencies.
Name string // Shared library name.
Needs []DynamicVersionDep // Dependencies.
}
// DynamicVersionDep is a version needed from some shared library.
type DynamicVersionDep struct {
Flags DynamicVersionFlag
Other uint16 // Version index.
Index uint16 // Version index.
Dep string // Name of required version.
}
// dynamicVersions returns version information for a dynamic object.
func (f *File) dynamicVersions(str []byte) bool {
func (f *File) dynamicVersions(str []byte) error {
if f.dynVers != nil {
// Already initialized.
return true
return nil
}
// Accumulate verdef information.
vd := f.SectionByType(SHT_GNU_VERDEF)
if vd == nil {
return false
return nil
}
d, _ := vd.Data()
@ -1540,12 +1569,20 @@ func (f *File) dynamicVersions(str []byte) bool {
break
}
version := f.ByteOrder.Uint16(d[i : i+2])
if version != 1 {
return &FormatError{int64(vd.Offset + uint64(i)), "unexpected dynamic version", version}
}
flags := DynamicVersionFlag(f.ByteOrder.Uint16(d[i+2 : i+4]))
ndx := f.ByteOrder.Uint16(d[i+4 : i+6])
cnt := f.ByteOrder.Uint16(d[i+6 : i+8])
aux := f.ByteOrder.Uint32(d[i+12 : i+16])
next := f.ByteOrder.Uint32(d[i+16 : i+20])
if cnt == 0 {
return &FormatError{int64(vd.Offset + uint64(i)), "dynamic version has no name", nil}
}
var name string
var depName string
var deps []string
j := i + int(aux)
@ -1557,16 +1594,20 @@ func (f *File) dynamicVersions(str []byte) bool {
vnext := f.ByteOrder.Uint32(d[j+4 : j+8])
depName, _ = getString(str, int(vname))
deps = append(deps, depName)
if c == 0 {
name = depName
} else {
deps = append(deps, depName)
}
j += int(vnext)
}
dynVers = append(dynVers, DynamicVersion{
Version: version,
Flags: flags,
Index: ndx,
Deps: deps,
Name: name,
Index: ndx,
Flags: flags,
Deps: deps,
})
if next == 0 {
@ -1577,7 +1618,7 @@ func (f *File) dynamicVersions(str []byte) bool {
f.dynVers = dynVers
return true
return nil
}
// DynamicVersions returns version information for a dynamic object.
@ -1587,7 +1628,11 @@ func (f *File) DynamicVersions() ([]DynamicVersion, error) {
if err != nil {
return nil, err
}
if !f.gnuVersionInit(str) {
hasVersions, err := f.gnuVersionInit(str)
if err != nil {
return nil, err
}
if !hasVersions {
return nil, errors.New("DynamicVersions: missing version table")
}
}
@ -1596,16 +1641,16 @@ func (f *File) DynamicVersions() ([]DynamicVersion, error) {
}
// dynamicVersionNeeds returns version dependencies for a dynamic object.
func (f *File) dynamicVersionNeeds(str []byte) bool {
func (f *File) dynamicVersionNeeds(str []byte) error {
if f.dynVerNeeds != nil {
// Already initialized.
return true
return nil
}
// Accumulate verneed information.
vn := f.SectionByType(SHT_GNU_VERNEED)
if vn == nil {
return false
return nil
}
d, _ := vn.Data()
@ -1617,7 +1662,7 @@ func (f *File) dynamicVersionNeeds(str []byte) bool {
}
vers := f.ByteOrder.Uint16(d[i : i+2])
if vers != 1 {
break
return &FormatError{int64(vn.Offset + uint64(i)), "unexpected dynamic need version", vers}
}
cnt := f.ByteOrder.Uint16(d[i+2 : i+4])
fileoff := f.ByteOrder.Uint32(d[i+4 : i+8])
@ -1632,14 +1677,14 @@ func (f *File) dynamicVersionNeeds(str []byte) bool {
break
}
flags := DynamicVersionFlag(f.ByteOrder.Uint16(d[j+4 : j+6]))
other := f.ByteOrder.Uint16(d[j+6 : j+8])
index := f.ByteOrder.Uint16(d[j+6 : j+8])
nameoff := f.ByteOrder.Uint32(d[j+8 : j+12])
next := f.ByteOrder.Uint32(d[j+12 : j+16])
depName, _ := getString(str, int(nameoff))
deps = append(deps, DynamicVersionDep{
Flags: flags,
Other: other,
Index: index,
Dep: depName,
})
@ -1650,9 +1695,8 @@ func (f *File) dynamicVersionNeeds(str []byte) bool {
}
dynVerNeeds = append(dynVerNeeds, DynamicVersionNeed{
Version: vers,
Name: file,
Needs: deps,
Name: file,
Needs: deps,
})
if next == 0 {
@ -1663,7 +1707,7 @@ func (f *File) dynamicVersionNeeds(str []byte) bool {
f.dynVerNeeds = dynVerNeeds
return true
return nil
}
// DynamicVersionNeeds returns version dependencies for a dynamic object.
@ -1673,7 +1717,11 @@ func (f *File) DynamicVersionNeeds() ([]DynamicVersionNeed, error) {
if err != nil {
return nil, err
}
if !f.gnuVersionInit(str) {
hasVersions, err := f.gnuVersionInit(str)
if err != nil {
return nil, err
}
if !hasVersions {
return nil, errors.New("DynamicVersionNeeds: missing version table")
}
}
@ -1683,66 +1731,66 @@ func (f *File) DynamicVersionNeeds() ([]DynamicVersionNeed, error) {
// gnuVersionInit parses the GNU version tables
// for use by calls to gnuVersion.
func (f *File) gnuVersionInit(str []byte) bool {
// It reports whether any version tables were found.
func (f *File) gnuVersionInit(str []byte) (bool, error) {
// Versym parallels symbol table, indexing into verneed.
vs := f.SectionByType(SHT_GNU_VERSYM)
if vs == nil {
return false
return false, nil
}
d, _ := vs.Data()
f.gnuVersym = d
f.dynamicVersions(str)
f.dynamicVersionNeeds(str)
return true
if err := f.dynamicVersions(str); err != nil {
return false, err
}
if err := f.dynamicVersionNeeds(str); err != nil {
return false, err
}
return true, nil
}
// gnuVersion adds Library and Version information to sym,
// which came from offset i of the symbol table.
func (f *File) gnuVersion(i int) (versionIndex int16, version string, library string, versionFlags SymbolVersionFlag) {
func (f *File) gnuVersion(i int) (versionIndex int16, version string, library string, versionFlags SymbolVersionScope) {
// Each entry is two bytes; skip undef entry at beginning.
i = (i + 1) * 2
if i >= len(f.gnuVersym) {
return -1, "", "", VerFlagNone
return -1, "", "", VersionScopeNone
}
s := f.gnuVersym[i:]
if len(s) < 2 {
return -1, "", "", VerFlagNone
return -1, "", "", VersionScopeNone
}
j := int32(f.ByteOrder.Uint16(s))
var ndx = int16(j & 0x7fff)
ndx := int16(j & 0x7fff)
if ndx == 0 {
return ndx, "", "", VerFlagLocal
} else if ndx == 1 {
return ndx, "", "", VerFlagGlobal
if j == 0 {
return ndx, "", "", VersionScopeLocal
} else if j == 1 {
return ndx, "", "", VersionScopeGlobal
}
if ndx < 2 {
return 0, "", "", VerFlagNone
scope := VersionScopeSpecific
if j&0x8000 != 0 {
scope = VersionScopeHidden
}
for _, v := range f.dynVerNeeds {
for _, n := range v.Needs {
if uint16(ndx) == n.Other {
return ndx, n.Dep, v.Name, VerFlagHidden
if uint16(ndx) == n.Index {
return ndx, n.Dep, v.Name, scope
}
}
}
for _, v := range f.dynVers {
if uint16(ndx) == v.Index {
if len(v.Deps) > 0 {
flags := VerFlagNone
if j&0x8000 != 0 {
flags = VerFlagHidden
}
return ndx, v.Deps[0], "", flags
}
return ndx, v.Name, "", scope
}
}
return -1, "", "", VerFlagNone
return -1, "", "", VersionScopeNone
}
// ImportedLibraries returns the names of all libraries

View File

@ -78,80 +78,80 @@ var fileTests = []fileTest{
},
[]string{"libc.so.6"},
[]Symbol{
{"", 3, 0, -1, VerFlagNone, 1, 134512852, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 2, 134512876, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 3, 134513020, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 4, 134513292, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 5, 134513480, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 6, 134513512, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 7, 134513532, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 8, 134513612, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 9, 134513996, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 10, 134514008, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 11, 134518268, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 12, 134518280, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 13, 134518284, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 14, 134518436, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 15, 134518444, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 16, 134518452, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 17, 134518456, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 18, 134518484, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 19, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 20, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 21, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 22, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 23, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 24, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 25, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 26, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 27, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 28, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 29, 0, 0, "", ""},
{"crt1.c", 4, 0, -1, VerFlagNone, 65521, 0, 0, "", ""},
{"/usr/src/lib/csu/i386-elf/crti.S", 4, 0, -1, VerFlagNone, 65521, 0, 0, "", ""},
{"<command line>", 4, 0, -1, VerFlagNone, 65521, 0, 0, "", ""},
{"<built-in>", 4, 0, -1, VerFlagNone, 65521, 0, 0, "", ""},
{"/usr/src/lib/csu/i386-elf/crti.S", 4, 0, -1, VerFlagNone, 65521, 0, 0, "", ""},
{"crtstuff.c", 4, 0, -1, VerFlagNone, 65521, 0, 0, "", ""},
{"__CTOR_LIST__", 1, 0, -1, VerFlagNone, 14, 134518436, 0, "", ""},
{"__DTOR_LIST__", 1, 0, -1, VerFlagNone, 15, 134518444, 0, "", ""},
{"__EH_FRAME_BEGIN__", 1, 0, -1, VerFlagNone, 12, 134518280, 0, "", ""},
{"__JCR_LIST__", 1, 0, -1, VerFlagNone, 16, 134518452, 0, "", ""},
{"p.0", 1, 0, -1, VerFlagNone, 11, 134518276, 0, "", ""},
{"completed.1", 1, 0, -1, VerFlagNone, 18, 134518484, 1, "", ""},
{"__do_global_dtors_aux", 2, 0, -1, VerFlagNone, 8, 134513760, 0, "", ""},
{"object.2", 1, 0, -1, VerFlagNone, 18, 134518488, 24, "", ""},
{"frame_dummy", 2, 0, -1, VerFlagNone, 8, 134513836, 0, "", ""},
{"crtstuff.c", 4, 0, -1, VerFlagNone, 65521, 0, 0, "", ""},
{"__CTOR_END__", 1, 0, -1, VerFlagNone, 14, 134518440, 0, "", ""},
{"__DTOR_END__", 1, 0, -1, VerFlagNone, 15, 134518448, 0, "", ""},
{"__FRAME_END__", 1, 0, -1, VerFlagNone, 12, 134518280, 0, "", ""},
{"__JCR_END__", 1, 0, -1, VerFlagNone, 16, 134518452, 0, "", ""},
{"__do_global_ctors_aux", 2, 0, -1, VerFlagNone, 8, 134513960, 0, "", ""},
{"/usr/src/lib/csu/i386-elf/crtn.S", 4, 0, -1, VerFlagNone, 65521, 0, 0, "", ""},
{"<command line>", 4, 0, -1, VerFlagNone, 65521, 0, 0, "", ""},
{"<built-in>", 4, 0, -1, VerFlagNone, 65521, 0, 0, "", ""},
{"/usr/src/lib/csu/i386-elf/crtn.S", 4, 0, -1, VerFlagNone, 65521, 0, 0, "", ""},
{"hello.c", 4, 0, -1, VerFlagNone, 65521, 0, 0, "", ""},
{"printf", 18, 0, -1, VerFlagNone, 0, 0, 44, "", ""},
{"_DYNAMIC", 17, 0, -1, VerFlagNone, 65521, 134518284, 0, "", ""},
{"__dso_handle", 17, 2, -1, VerFlagNone, 11, 134518272, 0, "", ""},
{"_init", 18, 0, -1, VerFlagNone, 6, 134513512, 0, "", ""},
{"environ", 17, 0, -1, VerFlagNone, 18, 134518512, 4, "", ""},
{"__deregister_frame_info", 32, 0, -1, VerFlagNone, 0, 0, 0, "", ""},
{"__progname", 17, 0, -1, VerFlagNone, 11, 134518268, 4, "", ""},
{"_start", 18, 0, -1, VerFlagNone, 8, 134513612, 145, "", ""},
{"__bss_start", 16, 0, -1, VerFlagNone, 65521, 134518484, 0, "", ""},
{"main", 18, 0, -1, VerFlagNone, 8, 134513912, 46, "", ""},
{"_init_tls", 18, 0, -1, VerFlagNone, 0, 0, 5, "", ""},
{"_fini", 18, 0, -1, VerFlagNone, 9, 134513996, 0, "", ""},
{"atexit", 18, 0, -1, VerFlagNone, 0, 0, 43, "", ""},
{"_edata", 16, 0, -1, VerFlagNone, 65521, 134518484, 0, "", ""},
{"_GLOBAL_OFFSET_TABLE_", 17, 0, -1, VerFlagNone, 65521, 134518456, 0, "", ""},
{"_end", 16, 0, -1, VerFlagNone, 65521, 134518516, 0, "", ""},
{"exit", 18, 0, -1, VerFlagNone, 0, 0, 68, "", ""},
{"_Jv_RegisterClasses", 32, 0, -1, VerFlagNone, 0, 0, 0, "", ""},
{"__register_frame_info", 32, 0, -1, VerFlagNone, 0, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 1, 134512852, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 2, 134512876, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 3, 134513020, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 4, 134513292, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 5, 134513480, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 6, 134513512, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 7, 134513532, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 8, 134513612, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 9, 134513996, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 10, 134514008, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 11, 134518268, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 12, 134518280, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 13, 134518284, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 14, 134518436, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 15, 134518444, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 16, 134518452, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 17, 134518456, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 18, 134518484, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 19, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 20, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 21, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 22, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 23, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 24, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 25, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 26, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 27, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 28, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 29, 0, 0, "", ""},
{"crt1.c", 4, 0, VersionScopeNone, -1, 65521, 0, 0, "", ""},
{"/usr/src/lib/csu/i386-elf/crti.S", 4, 0, VersionScopeNone, -1, 65521, 0, 0, "", ""},
{"<command line>", 4, 0, VersionScopeNone, -1, 65521, 0, 0, "", ""},
{"<built-in>", 4, 0, VersionScopeNone, -1, 65521, 0, 0, "", ""},
{"/usr/src/lib/csu/i386-elf/crti.S", 4, 0, VersionScopeNone, -1, 65521, 0, 0, "", ""},
{"crtstuff.c", 4, 0, VersionScopeNone, -1, 65521, 0, 0, "", ""},
{"__CTOR_LIST__", 1, 0, VersionScopeNone, -1, 14, 134518436, 0, "", ""},
{"__DTOR_LIST__", 1, 0, VersionScopeNone, -1, 15, 134518444, 0, "", ""},
{"__EH_FRAME_BEGIN__", 1, 0, VersionScopeNone, -1, 12, 134518280, 0, "", ""},
{"__JCR_LIST__", 1, 0, VersionScopeNone, -1, 16, 134518452, 0, "", ""},
{"p.0", 1, 0, VersionScopeNone, -1, 11, 134518276, 0, "", ""},
{"completed.1", 1, 0, VersionScopeNone, -1, 18, 134518484, 1, "", ""},
{"__do_global_dtors_aux", 2, 0, VersionScopeNone, -1, 8, 134513760, 0, "", ""},
{"object.2", 1, 0, VersionScopeNone, -1, 18, 134518488, 24, "", ""},
{"frame_dummy", 2, 0, VersionScopeNone, -1, 8, 134513836, 0, "", ""},
{"crtstuff.c", 4, 0, VersionScopeNone, -1, 65521, 0, 0, "", ""},
{"__CTOR_END__", 1, 0, VersionScopeNone, -1, 14, 134518440, 0, "", ""},
{"__DTOR_END__", 1, 0, VersionScopeNone, -1, 15, 134518448, 0, "", ""},
{"__FRAME_END__", 1, 0, VersionScopeNone, -1, 12, 134518280, 0, "", ""},
{"__JCR_END__", 1, 0, VersionScopeNone, -1, 16, 134518452, 0, "", ""},
{"__do_global_ctors_aux", 2, 0, VersionScopeNone, -1, 8, 134513960, 0, "", ""},
{"/usr/src/lib/csu/i386-elf/crtn.S", 4, 0, VersionScopeNone, -1, 65521, 0, 0, "", ""},
{"<command line>", 4, 0, VersionScopeNone, -1, 65521, 0, 0, "", ""},
{"<built-in>", 4, 0, VersionScopeNone, -1, 65521, 0, 0, "", ""},
{"/usr/src/lib/csu/i386-elf/crtn.S", 4, 0, VersionScopeNone, -1, 65521, 0, 0, "", ""},
{"hello.c", 4, 0, VersionScopeNone, -1, 65521, 0, 0, "", ""},
{"printf", 18, 0, VersionScopeNone, -1, 0, 0, 44, "", ""},
{"_DYNAMIC", 17, 0, VersionScopeNone, -1, 65521, 134518284, 0, "", ""},
{"__dso_handle", 17, 2, VersionScopeNone, -1, 11, 134518272, 0, "", ""},
{"_init", 18, 0, VersionScopeNone, -1, 6, 134513512, 0, "", ""},
{"environ", 17, 0, VersionScopeNone, -1, 18, 134518512, 4, "", ""},
{"__deregister_frame_info", 32, 0, VersionScopeNone, -1, 0, 0, 0, "", ""},
{"__progname", 17, 0, VersionScopeNone, -1, 11, 134518268, 4, "", ""},
{"_start", 18, 0, VersionScopeNone, -1, 8, 134513612, 145, "", ""},
{"__bss_start", 16, 0, VersionScopeNone, -1, 65521, 134518484, 0, "", ""},
{"main", 18, 0, VersionScopeNone, -1, 8, 134513912, 46, "", ""},
{"_init_tls", 18, 0, VersionScopeNone, -1, 0, 0, 5, "", ""},
{"_fini", 18, 0, VersionScopeNone, -1, 9, 134513996, 0, "", ""},
{"atexit", 18, 0, VersionScopeNone, -1, 0, 0, 43, "", ""},
{"_edata", 16, 0, VersionScopeNone, -1, 65521, 134518484, 0, "", ""},
{"_GLOBAL_OFFSET_TABLE_", 17, 0, VersionScopeNone, -1, 65521, 134518456, 0, "", ""},
{"_end", 16, 0, VersionScopeNone, -1, 65521, 134518516, 0, "", ""},
{"exit", 18, 0, VersionScopeNone, -1, 0, 0, 68, "", ""},
{"_Jv_RegisterClasses", 32, 0, VersionScopeNone, -1, 0, 0, 0, "", ""},
{"__register_frame_info", 32, 0, VersionScopeNone, -1, 0, 0, 0, "", ""},
},
},
{
@ -208,79 +208,79 @@ var fileTests = []fileTest{
},
[]string{"libc.so.6"},
[]Symbol{
{"", 3, 0, -1, VerFlagNone, 1, 4194816, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 2, 4194844, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 3, 4194880, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 4, 4194920, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 5, 4194952, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 6, 4195048, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 7, 4195110, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 8, 4195120, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 9, 4195152, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 10, 4195176, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 11, 4195224, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 12, 4195248, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 13, 4195296, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 14, 4195732, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 15, 4195748, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 16, 4195768, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 17, 4195808, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 18, 6293128, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 19, 6293144, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 20, 6293160, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 21, 6293168, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 22, 6293584, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 23, 6293592, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 24, 6293632, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 25, 6293656, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 26, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 27, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 28, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 29, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 30, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 31, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 32, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 33, 0, 0, "", ""},
{"init.c", 4, 0, -1, VerFlagNone, 65521, 0, 0, "", ""},
{"initfini.c", 4, 0, -1, VerFlagNone, 65521, 0, 0, "", ""},
{"call_gmon_start", 2, 0, -1, VerFlagNone, 13, 4195340, 0, "", ""},
{"crtstuff.c", 4, 0, -1, VerFlagNone, 65521, 0, 0, "", ""},
{"__CTOR_LIST__", 1, 0, -1, VerFlagNone, 18, 6293128, 0, "", ""},
{"__DTOR_LIST__", 1, 0, -1, VerFlagNone, 19, 6293144, 0, "", ""},
{"__JCR_LIST__", 1, 0, -1, VerFlagNone, 20, 6293160, 0, "", ""},
{"__do_global_dtors_aux", 2, 0, -1, VerFlagNone, 13, 4195376, 0, "", ""},
{"completed.6183", 1, 0, -1, VerFlagNone, 25, 6293656, 1, "", ""},
{"p.6181", 1, 0, -1, VerFlagNone, 24, 6293648, 0, "", ""},
{"frame_dummy", 2, 0, -1, VerFlagNone, 13, 4195440, 0, "", ""},
{"crtstuff.c", 4, 0, -1, VerFlagNone, 65521, 0, 0, "", ""},
{"__CTOR_END__", 1, 0, -1, VerFlagNone, 18, 6293136, 0, "", ""},
{"__DTOR_END__", 1, 0, -1, VerFlagNone, 19, 6293152, 0, "", ""},
{"__FRAME_END__", 1, 0, -1, VerFlagNone, 17, 4195968, 0, "", ""},
{"__JCR_END__", 1, 0, -1, VerFlagNone, 20, 6293160, 0, "", ""},
{"__do_global_ctors_aux", 2, 0, -1, VerFlagNone, 13, 4195680, 0, "", ""},
{"initfini.c", 4, 0, -1, VerFlagNone, 65521, 0, 0, "", ""},
{"hello.c", 4, 0, -1, VerFlagNone, 65521, 0, 0, "", ""},
{"_GLOBAL_OFFSET_TABLE_", 1, 2, -1, VerFlagNone, 23, 6293592, 0, "", ""},
{"__init_array_end", 0, 2, -1, VerFlagNone, 18, 6293124, 0, "", ""},
{"__init_array_start", 0, 2, -1, VerFlagNone, 18, 6293124, 0, "", ""},
{"_DYNAMIC", 1, 2, -1, VerFlagNone, 21, 6293168, 0, "", ""},
{"data_start", 32, 0, -1, VerFlagNone, 24, 6293632, 0, "", ""},
{"__libc_csu_fini", 18, 0, -1, VerFlagNone, 13, 4195520, 2, "", ""},
{"_start", 18, 0, -1, VerFlagNone, 13, 4195296, 0, "", ""},
{"__gmon_start__", 32, 0, -1, VerFlagNone, 0, 0, 0, "", ""},
{"_Jv_RegisterClasses", 32, 0, -1, VerFlagNone, 0, 0, 0, "", ""},
{"puts@@GLIBC_2.2.5", 18, 0, -1, VerFlagNone, 0, 0, 396, "", ""},
{"_fini", 18, 0, -1, VerFlagNone, 14, 4195732, 0, "", ""},
{"__libc_start_main@@GLIBC_2.2.5", 18, 0, -1, VerFlagNone, 0, 0, 450, "", ""},
{"_IO_stdin_used", 17, 0, -1, VerFlagNone, 15, 4195748, 4, "", ""},
{"__data_start", 16, 0, -1, VerFlagNone, 24, 6293632, 0, "", ""},
{"__dso_handle", 17, 2, -1, VerFlagNone, 24, 6293640, 0, "", ""},
{"__libc_csu_init", 18, 0, -1, VerFlagNone, 13, 4195536, 137, "", ""},
{"__bss_start", 16, 0, -1, VerFlagNone, 65521, 6293656, 0, "", ""},
{"_end", 16, 0, -1, VerFlagNone, 65521, 6293664, 0, "", ""},
{"_edata", 16, 0, -1, VerFlagNone, 65521, 6293656, 0, "", ""},
{"main", 18, 0, -1, VerFlagNone, 13, 4195480, 27, "", ""},
{"_init", 18, 0, -1, VerFlagNone, 11, 4195224, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 1, 4194816, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 2, 4194844, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 3, 4194880, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 4, 4194920, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 5, 4194952, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 6, 4195048, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 7, 4195110, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 8, 4195120, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 9, 4195152, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 10, 4195176, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 11, 4195224, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 12, 4195248, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 13, 4195296, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 14, 4195732, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 15, 4195748, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 16, 4195768, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 17, 4195808, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 18, 6293128, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 19, 6293144, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 20, 6293160, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 21, 6293168, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 22, 6293584, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 23, 6293592, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 24, 6293632, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 25, 6293656, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 26, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 27, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 28, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 29, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 30, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 31, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 32, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 33, 0, 0, "", ""},
{"init.c", 4, 0, VersionScopeNone, -1, 65521, 0, 0, "", ""},
{"initfini.c", 4, 0, VersionScopeNone, -1, 65521, 0, 0, "", ""},
{"call_gmon_start", 2, 0, VersionScopeNone, -1, 13, 4195340, 0, "", ""},
{"crtstuff.c", 4, 0, VersionScopeNone, -1, 65521, 0, 0, "", ""},
{"__CTOR_LIST__", 1, 0, VersionScopeNone, -1, 18, 6293128, 0, "", ""},
{"__DTOR_LIST__", 1, 0, VersionScopeNone, -1, 19, 6293144, 0, "", ""},
{"__JCR_LIST__", 1, 0, VersionScopeNone, -1, 20, 6293160, 0, "", ""},
{"__do_global_dtors_aux", 2, 0, VersionScopeNone, -1, 13, 4195376, 0, "", ""},
{"completed.6183", 1, 0, VersionScopeNone, -1, 25, 6293656, 1, "", ""},
{"p.6181", 1, 0, VersionScopeNone, -1, 24, 6293648, 0, "", ""},
{"frame_dummy", 2, 0, VersionScopeNone, -1, 13, 4195440, 0, "", ""},
{"crtstuff.c", 4, 0, VersionScopeNone, -1, 65521, 0, 0, "", ""},
{"__CTOR_END__", 1, 0, VersionScopeNone, -1, 18, 6293136, 0, "", ""},
{"__DTOR_END__", 1, 0, VersionScopeNone, -1, 19, 6293152, 0, "", ""},
{"__FRAME_END__", 1, 0, VersionScopeNone, -1, 17, 4195968, 0, "", ""},
{"__JCR_END__", 1, 0, VersionScopeNone, -1, 20, 6293160, 0, "", ""},
{"__do_global_ctors_aux", 2, 0, VersionScopeNone, -1, 13, 4195680, 0, "", ""},
{"initfini.c", 4, 0, VersionScopeNone, -1, 65521, 0, 0, "", ""},
{"hello.c", 4, 0, VersionScopeNone, -1, 65521, 0, 0, "", ""},
{"_GLOBAL_OFFSET_TABLE_", 1, 2, VersionScopeNone, -1, 23, 6293592, 0, "", ""},
{"__init_array_end", 0, 2, VersionScopeNone, -1, 18, 6293124, 0, "", ""},
{"__init_array_start", 0, 2, VersionScopeNone, -1, 18, 6293124, 0, "", ""},
{"_DYNAMIC", 1, 2, VersionScopeNone, -1, 21, 6293168, 0, "", ""},
{"data_start", 32, 0, VersionScopeNone, -1, 24, 6293632, 0, "", ""},
{"__libc_csu_fini", 18, 0, VersionScopeNone, -1, 13, 4195520, 2, "", ""},
{"_start", 18, 0, VersionScopeNone, -1, 13, 4195296, 0, "", ""},
{"__gmon_start__", 32, 0, VersionScopeNone, -1, 0, 0, 0, "", ""},
{"_Jv_RegisterClasses", 32, 0, VersionScopeNone, -1, 0, 0, 0, "", ""},
{"puts@@GLIBC_2.2.5", 18, 0, VersionScopeNone, -1, 0, 0, 396, "", ""},
{"_fini", 18, 0, VersionScopeNone, -1, 14, 4195732, 0, "", ""},
{"__libc_start_main@@GLIBC_2.2.5", 18, 0, VersionScopeNone, -1, 0, 0, 450, "", ""},
{"_IO_stdin_used", 17, 0, VersionScopeNone, -1, 15, 4195748, 4, "", ""},
{"__data_start", 16, 0, VersionScopeNone, -1, 24, 6293632, 0, "", ""},
{"__dso_handle", 17, 2, VersionScopeNone, -1, 24, 6293640, 0, "", ""},
{"__libc_csu_init", 18, 0, VersionScopeNone, -1, 13, 4195536, 137, "", ""},
{"__bss_start", 16, 0, VersionScopeNone, -1, 65521, 6293656, 0, "", ""},
{"_end", 16, 0, VersionScopeNone, -1, 65521, 6293664, 0, "", ""},
{"_edata", 16, 0, VersionScopeNone, -1, 65521, 6293656, 0, "", ""},
{"main", 18, 0, VersionScopeNone, -1, 13, 4195480, 27, "", ""},
{"_init", 18, 0, VersionScopeNone, -1, 11, 4195224, 0, "", ""},
},
},
{
@ -338,21 +338,21 @@ var fileTests = []fileTest{
[]ProgHeader{},
nil,
[]Symbol{
{"hello.c", 4, 0, -1, VerFlagNone, 65521, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 1, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 3, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 4, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 5, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 6, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 8, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 9, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 11, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 13, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 15, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 16, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 14, 0, 0, "", ""},
{"main", 18, 0, -1, VerFlagNone, 1, 0, 23, "", ""},
{"puts", 16, 0, -1, VerFlagNone, 0, 0, 0, "", ""},
{"hello.c", 4, 0, VersionScopeNone, -1, 65521, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 1, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 3, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 4, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 5, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 6, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 8, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 9, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 11, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 13, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 15, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 16, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 14, 0, 0, "", ""},
{"main", 18, 0, VersionScopeNone, -1, 1, 0, 23, "", ""},
{"puts", 16, 0, VersionScopeNone, -1, 0, 0, 0, "", ""},
},
},
{
@ -384,21 +384,21 @@ var fileTests = []fileTest{
[]ProgHeader{},
nil,
[]Symbol{
{"hello.c", 4, 0, -1, VerFlagNone, 65521, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 1, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 3, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 4, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 5, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 6, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 8, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 9, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 11, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 13, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 15, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 16, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 14, 0, 0, "", ""},
{"main", 18, 0, -1, VerFlagNone, 1, 0, 27, "", ""},
{"puts", 16, 0, -1, VerFlagNone, 0, 0, 0, "", ""},
{"hello.c", 4, 0, VersionScopeNone, -1, 65521, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 1, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 3, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 4, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 5, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 6, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 8, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 9, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 11, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 13, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 15, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 16, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 14, 0, 0, "", ""},
{"main", 18, 0, VersionScopeNone, -1, 1, 0, 27, "", ""},
{"puts", 16, 0, VersionScopeNone, -1, 0, 0, 0, "", ""},
},
},
{
@ -430,21 +430,21 @@ var fileTests = []fileTest{
[]ProgHeader{},
nil,
[]Symbol{
{"hello.c", 4, 0, -1, VerFlagNone, 65521, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 1, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 3, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 4, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 5, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 6, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 8, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 9, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 11, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 13, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 15, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 16, 0, 0, "", ""},
{"", 3, 0, -1, VerFlagNone, 14, 0, 0, "", ""},
{"main", 18, 0, -1, VerFlagNone, 1, 0, 44, "", ""},
{"puts", 16, 0, -1, VerFlagNone, 0, 0, 0, "", ""},
{"hello.c", 4, 0, VersionScopeNone, -1, 65521, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 1, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 3, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 4, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 5, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 6, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 8, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 9, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 11, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 13, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 15, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 16, 0, 0, "", ""},
{"", 3, 0, VersionScopeNone, -1, 14, 0, 0, "", ""},
{"main", 18, 0, VersionScopeNone, -1, 1, 0, 44, "", ""},
{"puts", 16, 0, VersionScopeNone, -1, 0, 0, 0, "", ""},
},
},
}

File diff suppressed because it is too large Load Diff