mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
[release-branch.go1.24] all: merge master (0ca521f) into release-branch.go1.24
Merge List:
+ 2024-12-11 0ca521f9c1 debug/elf: adjust version API per issue discussion
Change-Id: Ibd6f628528dd366837ad0bbacad624474eee0088
This commit is contained in:
commit
14bb1e11b9
4 changed files with 440 additions and 391 deletions
|
|
@ -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_INFO DynamicVersionFlag #63952
|
||||||
pkg debug/elf, const VER_FLG_WEAK = 2 #63952
|
pkg debug/elf, const VER_FLG_WEAK = 2 #63952
|
||||||
pkg debug/elf, const VER_FLG_WEAK DynamicVersionFlag #63952
|
pkg debug/elf, const VER_FLG_WEAK DynamicVersionFlag #63952
|
||||||
pkg debug/elf, const VerFlagGlobal = 2 #63952
|
pkg debug/elf, const VersionScopeGlobal = 2 #63952
|
||||||
pkg debug/elf, const VerFlagGlobal SymbolVersionFlag #63952
|
pkg debug/elf, const VersionScopeGlobal SymbolVersionScope #63952
|
||||||
pkg debug/elf, const VerFlagHidden = 4 #63952
|
pkg debug/elf, const VersionScopeHidden = 4 #63952
|
||||||
pkg debug/elf, const VerFlagHidden SymbolVersionFlag #63952
|
pkg debug/elf, const VersionScopeHidden SymbolVersionScope #63952
|
||||||
pkg debug/elf, const VerFlagLocal = 1 #63952
|
pkg debug/elf, const VersionScopeLocal = 1 #63952
|
||||||
pkg debug/elf, const VerFlagLocal SymbolVersionFlag #63952
|
pkg debug/elf, const VersionScopeLocal SymbolVersionScope #63952
|
||||||
pkg debug/elf, const VerFlagNone = 0 #63952
|
pkg debug/elf, const VersionScopeNone = 0 #63952
|
||||||
pkg debug/elf, const VerFlagNone SymbolVersionFlag #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) DynamicVersionNeeds() ([]DynamicVersionNeed, error) #63952
|
||||||
pkg debug/elf, method (*File) DynamicVersions() ([]DynamicVersion, error) #63952
|
pkg debug/elf, method (*File) DynamicVersions() ([]DynamicVersion, error) #63952
|
||||||
pkg debug/elf, type DynamicVersion struct #63952
|
pkg debug/elf, type DynamicVersion struct #63952
|
||||||
pkg debug/elf, type DynamicVersion struct, Deps []string #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, 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, 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 #63952
|
||||||
pkg debug/elf, type DynamicVersionDep struct, Dep string #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, 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 DynamicVersionFlag uint16 #63952
|
||||||
pkg debug/elf, type DynamicVersionNeed struct #63952
|
pkg debug/elf, type DynamicVersionNeed struct #63952
|
||||||
pkg debug/elf, type DynamicVersionNeed struct, Name string #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, Needs []DynamicVersionDep #63952
|
||||||
pkg debug/elf, type DynamicVersionNeed struct, Version uint16 #63952
|
pkg debug/elf, type Symbol struct, VersionScope SymbolVersionScope #63952
|
||||||
pkg debug/elf, type Symbol struct, VersionFlags SymbolVersionFlag #63952
|
|
||||||
pkg debug/elf, type Symbol struct, VersionIndex int16 #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 } #62384
|
||||||
pkg encoding, type BinaryAppender interface, AppendBinary([]uint8) ([]uint8, error) #62384
|
pkg encoding, type BinaryAppender interface, AppendBinary([]uint8) ([]uint8, error) #62384
|
||||||
pkg encoding, type TextAppender interface { AppendText } #62384
|
pkg encoding, type TextAppender interface { AppendText } #62384
|
||||||
|
|
|
||||||
|
|
@ -209,10 +209,22 @@ type Symbol struct {
|
||||||
Name string
|
Name string
|
||||||
Info, Other byte
|
Info, Other byte
|
||||||
|
|
||||||
// These fields are used for symbol versioning
|
// VersionScope describes the version in which the symbol is defined.
|
||||||
// and are present only for the dynamic symbol table.
|
// 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
|
VersionIndex int16
|
||||||
VersionFlags SymbolVersionFlag
|
|
||||||
|
|
||||||
Section SectionIndex
|
Section SectionIndex
|
||||||
Value, Size uint64
|
Value, Size uint64
|
||||||
|
|
@ -1455,9 +1467,13 @@ func (f *File) DynamicSymbols() ([]Symbol, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if f.gnuVersionInit(str) {
|
hasVersions, err := f.gnuVersionInit(str)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if hasVersions {
|
||||||
for i := range sym {
|
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
|
return sym, nil
|
||||||
|
|
@ -1478,7 +1494,9 @@ func (f *File) ImportedSymbols() ([]ImportedSymbol, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
f.gnuVersionInit(str)
|
if _, err := f.gnuVersionInit(str); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
var all []ImportedSymbol
|
var all []ImportedSymbol
|
||||||
for i, s := range sym {
|
for i, s := range sym {
|
||||||
if ST_BIND(s.Info) == STB_GLOBAL && s.Section == SHN_UNDEF {
|
if ST_BIND(s.Info) == STB_GLOBAL && s.Section == SHN_UNDEF {
|
||||||
|
|
@ -1490,46 +1508,57 @@ func (f *File) ImportedSymbols() ([]ImportedSymbol, error) {
|
||||||
return all, nil
|
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 (
|
const (
|
||||||
VerFlagNone SymbolVersionFlag = 0x0 // No flags.
|
VersionScopeNone SymbolVersionScope = iota // no symbol version available
|
||||||
VerFlagLocal SymbolVersionFlag = 0x1 // Symbol has local scope.
|
VersionScopeLocal // symbol has local scope
|
||||||
VerFlagGlobal SymbolVersionFlag = 0x2 // Symbol has global scope.
|
VersionScopeGlobal // symbol has global scope and is in the base version
|
||||||
VerFlagHidden SymbolVersionFlag = 0x4 // Symbol is hidden.
|
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.
|
// 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 {
|
type DynamicVersion struct {
|
||||||
Version uint16 // Version of data structure.
|
Name string // Name of version defined by this index.
|
||||||
Flags DynamicVersionFlag
|
Index uint16 // Version index.
|
||||||
Index uint16 // Version index.
|
Flags DynamicVersionFlag
|
||||||
Deps []string // Dependencies.
|
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 {
|
type DynamicVersionNeed struct {
|
||||||
Version uint16 // Version of data structure.
|
Name string // Shared library name.
|
||||||
Name string // Shared library name.
|
Needs []DynamicVersionDep // Dependencies.
|
||||||
Needs []DynamicVersionDep // Dependencies.
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DynamicVersionDep is a version needed from some shared library.
|
||||||
type DynamicVersionDep struct {
|
type DynamicVersionDep struct {
|
||||||
Flags DynamicVersionFlag
|
Flags DynamicVersionFlag
|
||||||
Other uint16 // Version index.
|
Index uint16 // Version index.
|
||||||
Dep string // Name of required version.
|
Dep string // Name of required version.
|
||||||
}
|
}
|
||||||
|
|
||||||
// dynamicVersions returns version information for a dynamic object.
|
// 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 {
|
if f.dynVers != nil {
|
||||||
// Already initialized.
|
// Already initialized.
|
||||||
return true
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Accumulate verdef information.
|
// Accumulate verdef information.
|
||||||
vd := f.SectionByType(SHT_GNU_VERDEF)
|
vd := f.SectionByType(SHT_GNU_VERDEF)
|
||||||
if vd == nil {
|
if vd == nil {
|
||||||
return false
|
return nil
|
||||||
}
|
}
|
||||||
d, _ := vd.Data()
|
d, _ := vd.Data()
|
||||||
|
|
||||||
|
|
@ -1540,12 +1569,20 @@ func (f *File) dynamicVersions(str []byte) bool {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
version := f.ByteOrder.Uint16(d[i : i+2])
|
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]))
|
flags := DynamicVersionFlag(f.ByteOrder.Uint16(d[i+2 : i+4]))
|
||||||
ndx := f.ByteOrder.Uint16(d[i+4 : i+6])
|
ndx := f.ByteOrder.Uint16(d[i+4 : i+6])
|
||||||
cnt := f.ByteOrder.Uint16(d[i+6 : i+8])
|
cnt := f.ByteOrder.Uint16(d[i+6 : i+8])
|
||||||
aux := f.ByteOrder.Uint32(d[i+12 : i+16])
|
aux := f.ByteOrder.Uint32(d[i+12 : i+16])
|
||||||
next := f.ByteOrder.Uint32(d[i+16 : i+20])
|
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 depName string
|
||||||
var deps []string
|
var deps []string
|
||||||
j := i + int(aux)
|
j := i + int(aux)
|
||||||
|
|
@ -1557,16 +1594,20 @@ func (f *File) dynamicVersions(str []byte) bool {
|
||||||
vnext := f.ByteOrder.Uint32(d[j+4 : j+8])
|
vnext := f.ByteOrder.Uint32(d[j+4 : j+8])
|
||||||
depName, _ = getString(str, int(vname))
|
depName, _ = getString(str, int(vname))
|
||||||
|
|
||||||
deps = append(deps, depName)
|
if c == 0 {
|
||||||
|
name = depName
|
||||||
|
} else {
|
||||||
|
deps = append(deps, depName)
|
||||||
|
}
|
||||||
|
|
||||||
j += int(vnext)
|
j += int(vnext)
|
||||||
}
|
}
|
||||||
|
|
||||||
dynVers = append(dynVers, DynamicVersion{
|
dynVers = append(dynVers, DynamicVersion{
|
||||||
Version: version,
|
Name: name,
|
||||||
Flags: flags,
|
Index: ndx,
|
||||||
Index: ndx,
|
Flags: flags,
|
||||||
Deps: deps,
|
Deps: deps,
|
||||||
})
|
})
|
||||||
|
|
||||||
if next == 0 {
|
if next == 0 {
|
||||||
|
|
@ -1577,7 +1618,7 @@ func (f *File) dynamicVersions(str []byte) bool {
|
||||||
|
|
||||||
f.dynVers = dynVers
|
f.dynVers = dynVers
|
||||||
|
|
||||||
return true
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// DynamicVersions returns version information for a dynamic object.
|
// DynamicVersions returns version information for a dynamic object.
|
||||||
|
|
@ -1587,7 +1628,11 @@ func (f *File) DynamicVersions() ([]DynamicVersion, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
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")
|
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.
|
// 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 {
|
if f.dynVerNeeds != nil {
|
||||||
// Already initialized.
|
// Already initialized.
|
||||||
return true
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Accumulate verneed information.
|
// Accumulate verneed information.
|
||||||
vn := f.SectionByType(SHT_GNU_VERNEED)
|
vn := f.SectionByType(SHT_GNU_VERNEED)
|
||||||
if vn == nil {
|
if vn == nil {
|
||||||
return false
|
return nil
|
||||||
}
|
}
|
||||||
d, _ := vn.Data()
|
d, _ := vn.Data()
|
||||||
|
|
||||||
|
|
@ -1617,7 +1662,7 @@ func (f *File) dynamicVersionNeeds(str []byte) bool {
|
||||||
}
|
}
|
||||||
vers := f.ByteOrder.Uint16(d[i : i+2])
|
vers := f.ByteOrder.Uint16(d[i : i+2])
|
||||||
if vers != 1 {
|
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])
|
cnt := f.ByteOrder.Uint16(d[i+2 : i+4])
|
||||||
fileoff := f.ByteOrder.Uint32(d[i+4 : i+8])
|
fileoff := f.ByteOrder.Uint32(d[i+4 : i+8])
|
||||||
|
|
@ -1632,14 +1677,14 @@ func (f *File) dynamicVersionNeeds(str []byte) bool {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
flags := DynamicVersionFlag(f.ByteOrder.Uint16(d[j+4 : j+6]))
|
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])
|
nameoff := f.ByteOrder.Uint32(d[j+8 : j+12])
|
||||||
next := f.ByteOrder.Uint32(d[j+12 : j+16])
|
next := f.ByteOrder.Uint32(d[j+12 : j+16])
|
||||||
depName, _ := getString(str, int(nameoff))
|
depName, _ := getString(str, int(nameoff))
|
||||||
|
|
||||||
deps = append(deps, DynamicVersionDep{
|
deps = append(deps, DynamicVersionDep{
|
||||||
Flags: flags,
|
Flags: flags,
|
||||||
Other: other,
|
Index: index,
|
||||||
Dep: depName,
|
Dep: depName,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
@ -1650,9 +1695,8 @@ func (f *File) dynamicVersionNeeds(str []byte) bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
dynVerNeeds = append(dynVerNeeds, DynamicVersionNeed{
|
dynVerNeeds = append(dynVerNeeds, DynamicVersionNeed{
|
||||||
Version: vers,
|
Name: file,
|
||||||
Name: file,
|
Needs: deps,
|
||||||
Needs: deps,
|
|
||||||
})
|
})
|
||||||
|
|
||||||
if next == 0 {
|
if next == 0 {
|
||||||
|
|
@ -1663,7 +1707,7 @@ func (f *File) dynamicVersionNeeds(str []byte) bool {
|
||||||
|
|
||||||
f.dynVerNeeds = dynVerNeeds
|
f.dynVerNeeds = dynVerNeeds
|
||||||
|
|
||||||
return true
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// DynamicVersionNeeds returns version dependencies for a dynamic object.
|
// DynamicVersionNeeds returns version dependencies for a dynamic object.
|
||||||
|
|
@ -1673,7 +1717,11 @@ func (f *File) DynamicVersionNeeds() ([]DynamicVersionNeed, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
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")
|
return nil, errors.New("DynamicVersionNeeds: missing version table")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1683,66 +1731,66 @@ func (f *File) DynamicVersionNeeds() ([]DynamicVersionNeed, error) {
|
||||||
|
|
||||||
// gnuVersionInit parses the GNU version tables
|
// gnuVersionInit parses the GNU version tables
|
||||||
// for use by calls to gnuVersion.
|
// 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.
|
// Versym parallels symbol table, indexing into verneed.
|
||||||
vs := f.SectionByType(SHT_GNU_VERSYM)
|
vs := f.SectionByType(SHT_GNU_VERSYM)
|
||||||
if vs == nil {
|
if vs == nil {
|
||||||
return false
|
return false, nil
|
||||||
}
|
}
|
||||||
d, _ := vs.Data()
|
d, _ := vs.Data()
|
||||||
|
|
||||||
f.gnuVersym = d
|
f.gnuVersym = d
|
||||||
f.dynamicVersions(str)
|
if err := f.dynamicVersions(str); err != nil {
|
||||||
f.dynamicVersionNeeds(str)
|
return false, err
|
||||||
return true
|
}
|
||||||
|
if err := f.dynamicVersionNeeds(str); err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
return true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// gnuVersion adds Library and Version information to sym,
|
// gnuVersion adds Library and Version information to sym,
|
||||||
// which came from offset i of the symbol table.
|
// 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.
|
// Each entry is two bytes; skip undef entry at beginning.
|
||||||
i = (i + 1) * 2
|
i = (i + 1) * 2
|
||||||
if i >= len(f.gnuVersym) {
|
if i >= len(f.gnuVersym) {
|
||||||
return -1, "", "", VerFlagNone
|
return -1, "", "", VersionScopeNone
|
||||||
}
|
}
|
||||||
s := f.gnuVersym[i:]
|
s := f.gnuVersym[i:]
|
||||||
if len(s) < 2 {
|
if len(s) < 2 {
|
||||||
return -1, "", "", VerFlagNone
|
return -1, "", "", VersionScopeNone
|
||||||
}
|
}
|
||||||
j := int32(f.ByteOrder.Uint16(s))
|
j := int32(f.ByteOrder.Uint16(s))
|
||||||
var ndx = int16(j & 0x7fff)
|
ndx := int16(j & 0x7fff)
|
||||||
|
|
||||||
if ndx == 0 {
|
if j == 0 {
|
||||||
return ndx, "", "", VerFlagLocal
|
return ndx, "", "", VersionScopeLocal
|
||||||
} else if ndx == 1 {
|
} else if j == 1 {
|
||||||
return ndx, "", "", VerFlagGlobal
|
return ndx, "", "", VersionScopeGlobal
|
||||||
}
|
}
|
||||||
|
|
||||||
if ndx < 2 {
|
scope := VersionScopeSpecific
|
||||||
return 0, "", "", VerFlagNone
|
if j&0x8000 != 0 {
|
||||||
|
scope = VersionScopeHidden
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, v := range f.dynVerNeeds {
|
for _, v := range f.dynVerNeeds {
|
||||||
for _, n := range v.Needs {
|
for _, n := range v.Needs {
|
||||||
if uint16(ndx) == n.Other {
|
if uint16(ndx) == n.Index {
|
||||||
return ndx, n.Dep, v.Name, VerFlagHidden
|
return ndx, n.Dep, v.Name, scope
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, v := range f.dynVers {
|
for _, v := range f.dynVers {
|
||||||
if uint16(ndx) == v.Index {
|
if uint16(ndx) == v.Index {
|
||||||
if len(v.Deps) > 0 {
|
return ndx, v.Name, "", scope
|
||||||
flags := VerFlagNone
|
|
||||||
if j&0x8000 != 0 {
|
|
||||||
flags = VerFlagHidden
|
|
||||||
}
|
|
||||||
return ndx, v.Deps[0], "", flags
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1, "", "", VerFlagNone
|
return -1, "", "", VersionScopeNone
|
||||||
}
|
}
|
||||||
|
|
||||||
// ImportedLibraries returns the names of all libraries
|
// ImportedLibraries returns the names of all libraries
|
||||||
|
|
|
||||||
|
|
@ -78,80 +78,80 @@ var fileTests = []fileTest{
|
||||||
},
|
},
|
||||||
[]string{"libc.so.6"},
|
[]string{"libc.so.6"},
|
||||||
[]Symbol{
|
[]Symbol{
|
||||||
{"", 3, 0, -1, VerFlagNone, 1, 134512852, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 1, 134512852, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 2, 134512876, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 2, 134512876, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 3, 134513020, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 3, 134513020, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 4, 134513292, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 4, 134513292, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 5, 134513480, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 5, 134513480, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 6, 134513512, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 6, 134513512, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 7, 134513532, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 7, 134513532, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 8, 134513612, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 8, 134513612, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 9, 134513996, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 9, 134513996, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 10, 134514008, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 10, 134514008, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 11, 134518268, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 11, 134518268, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 12, 134518280, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 12, 134518280, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 13, 134518284, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 13, 134518284, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 14, 134518436, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 14, 134518436, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 15, 134518444, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 15, 134518444, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 16, 134518452, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 16, 134518452, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 17, 134518456, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 17, 134518456, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 18, 134518484, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 18, 134518484, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 19, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 19, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 20, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 20, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 21, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 21, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 22, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 22, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 23, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 23, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 24, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 24, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 25, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 25, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 26, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 26, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 27, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 27, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 28, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 28, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 29, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 29, 0, 0, "", ""},
|
||||||
{"crt1.c", 4, 0, -1, VerFlagNone, 65521, 0, 0, "", ""},
|
{"crt1.c", 4, 0, VersionScopeNone, -1, 65521, 0, 0, "", ""},
|
||||||
{"/usr/src/lib/csu/i386-elf/crti.S", 4, 0, -1, VerFlagNone, 65521, 0, 0, "", ""},
|
{"/usr/src/lib/csu/i386-elf/crti.S", 4, 0, VersionScopeNone, -1, 65521, 0, 0, "", ""},
|
||||||
{"<command line>", 4, 0, -1, VerFlagNone, 65521, 0, 0, "", ""},
|
{"<command line>", 4, 0, VersionScopeNone, -1, 65521, 0, 0, "", ""},
|
||||||
{"<built-in>", 4, 0, -1, VerFlagNone, 65521, 0, 0, "", ""},
|
{"<built-in>", 4, 0, VersionScopeNone, -1, 65521, 0, 0, "", ""},
|
||||||
{"/usr/src/lib/csu/i386-elf/crti.S", 4, 0, -1, VerFlagNone, 65521, 0, 0, "", ""},
|
{"/usr/src/lib/csu/i386-elf/crti.S", 4, 0, VersionScopeNone, -1, 65521, 0, 0, "", ""},
|
||||||
{"crtstuff.c", 4, 0, -1, VerFlagNone, 65521, 0, 0, "", ""},
|
{"crtstuff.c", 4, 0, VersionScopeNone, -1, 65521, 0, 0, "", ""},
|
||||||
{"__CTOR_LIST__", 1, 0, -1, VerFlagNone, 14, 134518436, 0, "", ""},
|
{"__CTOR_LIST__", 1, 0, VersionScopeNone, -1, 14, 134518436, 0, "", ""},
|
||||||
{"__DTOR_LIST__", 1, 0, -1, VerFlagNone, 15, 134518444, 0, "", ""},
|
{"__DTOR_LIST__", 1, 0, VersionScopeNone, -1, 15, 134518444, 0, "", ""},
|
||||||
{"__EH_FRAME_BEGIN__", 1, 0, -1, VerFlagNone, 12, 134518280, 0, "", ""},
|
{"__EH_FRAME_BEGIN__", 1, 0, VersionScopeNone, -1, 12, 134518280, 0, "", ""},
|
||||||
{"__JCR_LIST__", 1, 0, -1, VerFlagNone, 16, 134518452, 0, "", ""},
|
{"__JCR_LIST__", 1, 0, VersionScopeNone, -1, 16, 134518452, 0, "", ""},
|
||||||
{"p.0", 1, 0, -1, VerFlagNone, 11, 134518276, 0, "", ""},
|
{"p.0", 1, 0, VersionScopeNone, -1, 11, 134518276, 0, "", ""},
|
||||||
{"completed.1", 1, 0, -1, VerFlagNone, 18, 134518484, 1, "", ""},
|
{"completed.1", 1, 0, VersionScopeNone, -1, 18, 134518484, 1, "", ""},
|
||||||
{"__do_global_dtors_aux", 2, 0, -1, VerFlagNone, 8, 134513760, 0, "", ""},
|
{"__do_global_dtors_aux", 2, 0, VersionScopeNone, -1, 8, 134513760, 0, "", ""},
|
||||||
{"object.2", 1, 0, -1, VerFlagNone, 18, 134518488, 24, "", ""},
|
{"object.2", 1, 0, VersionScopeNone, -1, 18, 134518488, 24, "", ""},
|
||||||
{"frame_dummy", 2, 0, -1, VerFlagNone, 8, 134513836, 0, "", ""},
|
{"frame_dummy", 2, 0, VersionScopeNone, -1, 8, 134513836, 0, "", ""},
|
||||||
{"crtstuff.c", 4, 0, -1, VerFlagNone, 65521, 0, 0, "", ""},
|
{"crtstuff.c", 4, 0, VersionScopeNone, -1, 65521, 0, 0, "", ""},
|
||||||
{"__CTOR_END__", 1, 0, -1, VerFlagNone, 14, 134518440, 0, "", ""},
|
{"__CTOR_END__", 1, 0, VersionScopeNone, -1, 14, 134518440, 0, "", ""},
|
||||||
{"__DTOR_END__", 1, 0, -1, VerFlagNone, 15, 134518448, 0, "", ""},
|
{"__DTOR_END__", 1, 0, VersionScopeNone, -1, 15, 134518448, 0, "", ""},
|
||||||
{"__FRAME_END__", 1, 0, -1, VerFlagNone, 12, 134518280, 0, "", ""},
|
{"__FRAME_END__", 1, 0, VersionScopeNone, -1, 12, 134518280, 0, "", ""},
|
||||||
{"__JCR_END__", 1, 0, -1, VerFlagNone, 16, 134518452, 0, "", ""},
|
{"__JCR_END__", 1, 0, VersionScopeNone, -1, 16, 134518452, 0, "", ""},
|
||||||
{"__do_global_ctors_aux", 2, 0, -1, VerFlagNone, 8, 134513960, 0, "", ""},
|
{"__do_global_ctors_aux", 2, 0, VersionScopeNone, -1, 8, 134513960, 0, "", ""},
|
||||||
{"/usr/src/lib/csu/i386-elf/crtn.S", 4, 0, -1, VerFlagNone, 65521, 0, 0, "", ""},
|
{"/usr/src/lib/csu/i386-elf/crtn.S", 4, 0, VersionScopeNone, -1, 65521, 0, 0, "", ""},
|
||||||
{"<command line>", 4, 0, -1, VerFlagNone, 65521, 0, 0, "", ""},
|
{"<command line>", 4, 0, VersionScopeNone, -1, 65521, 0, 0, "", ""},
|
||||||
{"<built-in>", 4, 0, -1, VerFlagNone, 65521, 0, 0, "", ""},
|
{"<built-in>", 4, 0, VersionScopeNone, -1, 65521, 0, 0, "", ""},
|
||||||
{"/usr/src/lib/csu/i386-elf/crtn.S", 4, 0, -1, VerFlagNone, 65521, 0, 0, "", ""},
|
{"/usr/src/lib/csu/i386-elf/crtn.S", 4, 0, VersionScopeNone, -1, 65521, 0, 0, "", ""},
|
||||||
{"hello.c", 4, 0, -1, VerFlagNone, 65521, 0, 0, "", ""},
|
{"hello.c", 4, 0, VersionScopeNone, -1, 65521, 0, 0, "", ""},
|
||||||
{"printf", 18, 0, -1, VerFlagNone, 0, 0, 44, "", ""},
|
{"printf", 18, 0, VersionScopeNone, -1, 0, 0, 44, "", ""},
|
||||||
{"_DYNAMIC", 17, 0, -1, VerFlagNone, 65521, 134518284, 0, "", ""},
|
{"_DYNAMIC", 17, 0, VersionScopeNone, -1, 65521, 134518284, 0, "", ""},
|
||||||
{"__dso_handle", 17, 2, -1, VerFlagNone, 11, 134518272, 0, "", ""},
|
{"__dso_handle", 17, 2, VersionScopeNone, -1, 11, 134518272, 0, "", ""},
|
||||||
{"_init", 18, 0, -1, VerFlagNone, 6, 134513512, 0, "", ""},
|
{"_init", 18, 0, VersionScopeNone, -1, 6, 134513512, 0, "", ""},
|
||||||
{"environ", 17, 0, -1, VerFlagNone, 18, 134518512, 4, "", ""},
|
{"environ", 17, 0, VersionScopeNone, -1, 18, 134518512, 4, "", ""},
|
||||||
{"__deregister_frame_info", 32, 0, -1, VerFlagNone, 0, 0, 0, "", ""},
|
{"__deregister_frame_info", 32, 0, VersionScopeNone, -1, 0, 0, 0, "", ""},
|
||||||
{"__progname", 17, 0, -1, VerFlagNone, 11, 134518268, 4, "", ""},
|
{"__progname", 17, 0, VersionScopeNone, -1, 11, 134518268, 4, "", ""},
|
||||||
{"_start", 18, 0, -1, VerFlagNone, 8, 134513612, 145, "", ""},
|
{"_start", 18, 0, VersionScopeNone, -1, 8, 134513612, 145, "", ""},
|
||||||
{"__bss_start", 16, 0, -1, VerFlagNone, 65521, 134518484, 0, "", ""},
|
{"__bss_start", 16, 0, VersionScopeNone, -1, 65521, 134518484, 0, "", ""},
|
||||||
{"main", 18, 0, -1, VerFlagNone, 8, 134513912, 46, "", ""},
|
{"main", 18, 0, VersionScopeNone, -1, 8, 134513912, 46, "", ""},
|
||||||
{"_init_tls", 18, 0, -1, VerFlagNone, 0, 0, 5, "", ""},
|
{"_init_tls", 18, 0, VersionScopeNone, -1, 0, 0, 5, "", ""},
|
||||||
{"_fini", 18, 0, -1, VerFlagNone, 9, 134513996, 0, "", ""},
|
{"_fini", 18, 0, VersionScopeNone, -1, 9, 134513996, 0, "", ""},
|
||||||
{"atexit", 18, 0, -1, VerFlagNone, 0, 0, 43, "", ""},
|
{"atexit", 18, 0, VersionScopeNone, -1, 0, 0, 43, "", ""},
|
||||||
{"_edata", 16, 0, -1, VerFlagNone, 65521, 134518484, 0, "", ""},
|
{"_edata", 16, 0, VersionScopeNone, -1, 65521, 134518484, 0, "", ""},
|
||||||
{"_GLOBAL_OFFSET_TABLE_", 17, 0, -1, VerFlagNone, 65521, 134518456, 0, "", ""},
|
{"_GLOBAL_OFFSET_TABLE_", 17, 0, VersionScopeNone, -1, 65521, 134518456, 0, "", ""},
|
||||||
{"_end", 16, 0, -1, VerFlagNone, 65521, 134518516, 0, "", ""},
|
{"_end", 16, 0, VersionScopeNone, -1, 65521, 134518516, 0, "", ""},
|
||||||
{"exit", 18, 0, -1, VerFlagNone, 0, 0, 68, "", ""},
|
{"exit", 18, 0, VersionScopeNone, -1, 0, 0, 68, "", ""},
|
||||||
{"_Jv_RegisterClasses", 32, 0, -1, VerFlagNone, 0, 0, 0, "", ""},
|
{"_Jv_RegisterClasses", 32, 0, VersionScopeNone, -1, 0, 0, 0, "", ""},
|
||||||
{"__register_frame_info", 32, 0, -1, VerFlagNone, 0, 0, 0, "", ""},
|
{"__register_frame_info", 32, 0, VersionScopeNone, -1, 0, 0, 0, "", ""},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -208,79 +208,79 @@ var fileTests = []fileTest{
|
||||||
},
|
},
|
||||||
[]string{"libc.so.6"},
|
[]string{"libc.so.6"},
|
||||||
[]Symbol{
|
[]Symbol{
|
||||||
{"", 3, 0, -1, VerFlagNone, 1, 4194816, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 1, 4194816, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 2, 4194844, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 2, 4194844, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 3, 4194880, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 3, 4194880, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 4, 4194920, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 4, 4194920, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 5, 4194952, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 5, 4194952, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 6, 4195048, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 6, 4195048, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 7, 4195110, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 7, 4195110, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 8, 4195120, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 8, 4195120, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 9, 4195152, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 9, 4195152, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 10, 4195176, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 10, 4195176, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 11, 4195224, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 11, 4195224, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 12, 4195248, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 12, 4195248, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 13, 4195296, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 13, 4195296, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 14, 4195732, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 14, 4195732, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 15, 4195748, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 15, 4195748, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 16, 4195768, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 16, 4195768, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 17, 4195808, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 17, 4195808, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 18, 6293128, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 18, 6293128, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 19, 6293144, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 19, 6293144, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 20, 6293160, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 20, 6293160, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 21, 6293168, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 21, 6293168, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 22, 6293584, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 22, 6293584, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 23, 6293592, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 23, 6293592, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 24, 6293632, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 24, 6293632, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 25, 6293656, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 25, 6293656, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 26, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 26, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 27, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 27, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 28, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 28, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 29, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 29, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 30, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 30, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 31, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 31, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 32, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 32, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 33, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 33, 0, 0, "", ""},
|
||||||
{"init.c", 4, 0, -1, VerFlagNone, 65521, 0, 0, "", ""},
|
{"init.c", 4, 0, VersionScopeNone, -1, 65521, 0, 0, "", ""},
|
||||||
{"initfini.c", 4, 0, -1, VerFlagNone, 65521, 0, 0, "", ""},
|
{"initfini.c", 4, 0, VersionScopeNone, -1, 65521, 0, 0, "", ""},
|
||||||
{"call_gmon_start", 2, 0, -1, VerFlagNone, 13, 4195340, 0, "", ""},
|
{"call_gmon_start", 2, 0, VersionScopeNone, -1, 13, 4195340, 0, "", ""},
|
||||||
{"crtstuff.c", 4, 0, -1, VerFlagNone, 65521, 0, 0, "", ""},
|
{"crtstuff.c", 4, 0, VersionScopeNone, -1, 65521, 0, 0, "", ""},
|
||||||
{"__CTOR_LIST__", 1, 0, -1, VerFlagNone, 18, 6293128, 0, "", ""},
|
{"__CTOR_LIST__", 1, 0, VersionScopeNone, -1, 18, 6293128, 0, "", ""},
|
||||||
{"__DTOR_LIST__", 1, 0, -1, VerFlagNone, 19, 6293144, 0, "", ""},
|
{"__DTOR_LIST__", 1, 0, VersionScopeNone, -1, 19, 6293144, 0, "", ""},
|
||||||
{"__JCR_LIST__", 1, 0, -1, VerFlagNone, 20, 6293160, 0, "", ""},
|
{"__JCR_LIST__", 1, 0, VersionScopeNone, -1, 20, 6293160, 0, "", ""},
|
||||||
{"__do_global_dtors_aux", 2, 0, -1, VerFlagNone, 13, 4195376, 0, "", ""},
|
{"__do_global_dtors_aux", 2, 0, VersionScopeNone, -1, 13, 4195376, 0, "", ""},
|
||||||
{"completed.6183", 1, 0, -1, VerFlagNone, 25, 6293656, 1, "", ""},
|
{"completed.6183", 1, 0, VersionScopeNone, -1, 25, 6293656, 1, "", ""},
|
||||||
{"p.6181", 1, 0, -1, VerFlagNone, 24, 6293648, 0, "", ""},
|
{"p.6181", 1, 0, VersionScopeNone, -1, 24, 6293648, 0, "", ""},
|
||||||
{"frame_dummy", 2, 0, -1, VerFlagNone, 13, 4195440, 0, "", ""},
|
{"frame_dummy", 2, 0, VersionScopeNone, -1, 13, 4195440, 0, "", ""},
|
||||||
{"crtstuff.c", 4, 0, -1, VerFlagNone, 65521, 0, 0, "", ""},
|
{"crtstuff.c", 4, 0, VersionScopeNone, -1, 65521, 0, 0, "", ""},
|
||||||
{"__CTOR_END__", 1, 0, -1, VerFlagNone, 18, 6293136, 0, "", ""},
|
{"__CTOR_END__", 1, 0, VersionScopeNone, -1, 18, 6293136, 0, "", ""},
|
||||||
{"__DTOR_END__", 1, 0, -1, VerFlagNone, 19, 6293152, 0, "", ""},
|
{"__DTOR_END__", 1, 0, VersionScopeNone, -1, 19, 6293152, 0, "", ""},
|
||||||
{"__FRAME_END__", 1, 0, -1, VerFlagNone, 17, 4195968, 0, "", ""},
|
{"__FRAME_END__", 1, 0, VersionScopeNone, -1, 17, 4195968, 0, "", ""},
|
||||||
{"__JCR_END__", 1, 0, -1, VerFlagNone, 20, 6293160, 0, "", ""},
|
{"__JCR_END__", 1, 0, VersionScopeNone, -1, 20, 6293160, 0, "", ""},
|
||||||
{"__do_global_ctors_aux", 2, 0, -1, VerFlagNone, 13, 4195680, 0, "", ""},
|
{"__do_global_ctors_aux", 2, 0, VersionScopeNone, -1, 13, 4195680, 0, "", ""},
|
||||||
{"initfini.c", 4, 0, -1, VerFlagNone, 65521, 0, 0, "", ""},
|
{"initfini.c", 4, 0, VersionScopeNone, -1, 65521, 0, 0, "", ""},
|
||||||
{"hello.c", 4, 0, -1, VerFlagNone, 65521, 0, 0, "", ""},
|
{"hello.c", 4, 0, VersionScopeNone, -1, 65521, 0, 0, "", ""},
|
||||||
{"_GLOBAL_OFFSET_TABLE_", 1, 2, -1, VerFlagNone, 23, 6293592, 0, "", ""},
|
{"_GLOBAL_OFFSET_TABLE_", 1, 2, VersionScopeNone, -1, 23, 6293592, 0, "", ""},
|
||||||
{"__init_array_end", 0, 2, -1, VerFlagNone, 18, 6293124, 0, "", ""},
|
{"__init_array_end", 0, 2, VersionScopeNone, -1, 18, 6293124, 0, "", ""},
|
||||||
{"__init_array_start", 0, 2, -1, VerFlagNone, 18, 6293124, 0, "", ""},
|
{"__init_array_start", 0, 2, VersionScopeNone, -1, 18, 6293124, 0, "", ""},
|
||||||
{"_DYNAMIC", 1, 2, -1, VerFlagNone, 21, 6293168, 0, "", ""},
|
{"_DYNAMIC", 1, 2, VersionScopeNone, -1, 21, 6293168, 0, "", ""},
|
||||||
{"data_start", 32, 0, -1, VerFlagNone, 24, 6293632, 0, "", ""},
|
{"data_start", 32, 0, VersionScopeNone, -1, 24, 6293632, 0, "", ""},
|
||||||
{"__libc_csu_fini", 18, 0, -1, VerFlagNone, 13, 4195520, 2, "", ""},
|
{"__libc_csu_fini", 18, 0, VersionScopeNone, -1, 13, 4195520, 2, "", ""},
|
||||||
{"_start", 18, 0, -1, VerFlagNone, 13, 4195296, 0, "", ""},
|
{"_start", 18, 0, VersionScopeNone, -1, 13, 4195296, 0, "", ""},
|
||||||
{"__gmon_start__", 32, 0, -1, VerFlagNone, 0, 0, 0, "", ""},
|
{"__gmon_start__", 32, 0, VersionScopeNone, -1, 0, 0, 0, "", ""},
|
||||||
{"_Jv_RegisterClasses", 32, 0, -1, VerFlagNone, 0, 0, 0, "", ""},
|
{"_Jv_RegisterClasses", 32, 0, VersionScopeNone, -1, 0, 0, 0, "", ""},
|
||||||
{"puts@@GLIBC_2.2.5", 18, 0, -1, VerFlagNone, 0, 0, 396, "", ""},
|
{"puts@@GLIBC_2.2.5", 18, 0, VersionScopeNone, -1, 0, 0, 396, "", ""},
|
||||||
{"_fini", 18, 0, -1, VerFlagNone, 14, 4195732, 0, "", ""},
|
{"_fini", 18, 0, VersionScopeNone, -1, 14, 4195732, 0, "", ""},
|
||||||
{"__libc_start_main@@GLIBC_2.2.5", 18, 0, -1, VerFlagNone, 0, 0, 450, "", ""},
|
{"__libc_start_main@@GLIBC_2.2.5", 18, 0, VersionScopeNone, -1, 0, 0, 450, "", ""},
|
||||||
{"_IO_stdin_used", 17, 0, -1, VerFlagNone, 15, 4195748, 4, "", ""},
|
{"_IO_stdin_used", 17, 0, VersionScopeNone, -1, 15, 4195748, 4, "", ""},
|
||||||
{"__data_start", 16, 0, -1, VerFlagNone, 24, 6293632, 0, "", ""},
|
{"__data_start", 16, 0, VersionScopeNone, -1, 24, 6293632, 0, "", ""},
|
||||||
{"__dso_handle", 17, 2, -1, VerFlagNone, 24, 6293640, 0, "", ""},
|
{"__dso_handle", 17, 2, VersionScopeNone, -1, 24, 6293640, 0, "", ""},
|
||||||
{"__libc_csu_init", 18, 0, -1, VerFlagNone, 13, 4195536, 137, "", ""},
|
{"__libc_csu_init", 18, 0, VersionScopeNone, -1, 13, 4195536, 137, "", ""},
|
||||||
{"__bss_start", 16, 0, -1, VerFlagNone, 65521, 6293656, 0, "", ""},
|
{"__bss_start", 16, 0, VersionScopeNone, -1, 65521, 6293656, 0, "", ""},
|
||||||
{"_end", 16, 0, -1, VerFlagNone, 65521, 6293664, 0, "", ""},
|
{"_end", 16, 0, VersionScopeNone, -1, 65521, 6293664, 0, "", ""},
|
||||||
{"_edata", 16, 0, -1, VerFlagNone, 65521, 6293656, 0, "", ""},
|
{"_edata", 16, 0, VersionScopeNone, -1, 65521, 6293656, 0, "", ""},
|
||||||
{"main", 18, 0, -1, VerFlagNone, 13, 4195480, 27, "", ""},
|
{"main", 18, 0, VersionScopeNone, -1, 13, 4195480, 27, "", ""},
|
||||||
{"_init", 18, 0, -1, VerFlagNone, 11, 4195224, 0, "", ""},
|
{"_init", 18, 0, VersionScopeNone, -1, 11, 4195224, 0, "", ""},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -338,21 +338,21 @@ var fileTests = []fileTest{
|
||||||
[]ProgHeader{},
|
[]ProgHeader{},
|
||||||
nil,
|
nil,
|
||||||
[]Symbol{
|
[]Symbol{
|
||||||
{"hello.c", 4, 0, -1, VerFlagNone, 65521, 0, 0, "", ""},
|
{"hello.c", 4, 0, VersionScopeNone, -1, 65521, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 1, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 1, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 3, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 3, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 4, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 4, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 5, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 5, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 6, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 6, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 8, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 8, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 9, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 9, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 11, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 11, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 13, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 13, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 15, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 15, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 16, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 16, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 14, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 14, 0, 0, "", ""},
|
||||||
{"main", 18, 0, -1, VerFlagNone, 1, 0, 23, "", ""},
|
{"main", 18, 0, VersionScopeNone, -1, 1, 0, 23, "", ""},
|
||||||
{"puts", 16, 0, -1, VerFlagNone, 0, 0, 0, "", ""},
|
{"puts", 16, 0, VersionScopeNone, -1, 0, 0, 0, "", ""},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -384,21 +384,21 @@ var fileTests = []fileTest{
|
||||||
[]ProgHeader{},
|
[]ProgHeader{},
|
||||||
nil,
|
nil,
|
||||||
[]Symbol{
|
[]Symbol{
|
||||||
{"hello.c", 4, 0, -1, VerFlagNone, 65521, 0, 0, "", ""},
|
{"hello.c", 4, 0, VersionScopeNone, -1, 65521, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 1, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 1, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 3, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 3, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 4, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 4, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 5, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 5, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 6, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 6, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 8, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 8, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 9, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 9, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 11, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 11, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 13, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 13, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 15, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 15, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 16, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 16, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 14, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 14, 0, 0, "", ""},
|
||||||
{"main", 18, 0, -1, VerFlagNone, 1, 0, 27, "", ""},
|
{"main", 18, 0, VersionScopeNone, -1, 1, 0, 27, "", ""},
|
||||||
{"puts", 16, 0, -1, VerFlagNone, 0, 0, 0, "", ""},
|
{"puts", 16, 0, VersionScopeNone, -1, 0, 0, 0, "", ""},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -430,21 +430,21 @@ var fileTests = []fileTest{
|
||||||
[]ProgHeader{},
|
[]ProgHeader{},
|
||||||
nil,
|
nil,
|
||||||
[]Symbol{
|
[]Symbol{
|
||||||
{"hello.c", 4, 0, -1, VerFlagNone, 65521, 0, 0, "", ""},
|
{"hello.c", 4, 0, VersionScopeNone, -1, 65521, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 1, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 1, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 3, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 3, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 4, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 4, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 5, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 5, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 6, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 6, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 8, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 8, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 9, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 9, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 11, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 11, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 13, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 13, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 15, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 15, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 16, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 16, 0, 0, "", ""},
|
||||||
{"", 3, 0, -1, VerFlagNone, 14, 0, 0, "", ""},
|
{"", 3, 0, VersionScopeNone, -1, 14, 0, 0, "", ""},
|
||||||
{"main", 18, 0, -1, VerFlagNone, 1, 0, 44, "", ""},
|
{"main", 18, 0, VersionScopeNone, -1, 1, 0, 44, "", ""},
|
||||||
{"puts", 16, 0, -1, VerFlagNone, 0, 0, 0, "", ""},
|
{"puts", 16, 0, VersionScopeNone, -1, 0, 0, 0, "", ""},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue