diff options
author | Colin Cross <ccross@android.com> | 2018-02-27 23:06:41 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2018-02-27 23:06:41 +0000 |
commit | 8c5d337c8072eb99e5def5345b609df2e1bdf238 (patch) | |
tree | ecc53546eb3092cec072f46adee8b773b374599e | |
parent | aa14355b6a2b2e093cf7699abf21409c0f7fa524 (diff) | |
parent | 0c74ad9381e33545e77596dd0e9208e5e215eae8 (diff) | |
download | build_soong-8c5d337c8072eb99e5def5345b609df2e1bdf238.tar.gz build_soong-8c5d337c8072eb99e5def5345b609df2e1bdf238.tar.bz2 build_soong-8c5d337c8072eb99e5def5345b609df2e1bdf238.zip |
Merge changes I41d1c3c3,I9de0a0f5
am: 0c74ad9381
Change-Id: I6f496938039222eedfe42724fa34ba497e98fa15
-rw-r--r-- | cmd/symbol_inject/macho.go | 17 | ||||
-rw-r--r-- | cmd/symbol_inject/pe.go | 5 |
2 files changed, 18 insertions, 4 deletions
diff --git a/cmd/symbol_inject/macho.go b/cmd/symbol_inject/macho.go index 0945293f..4a3ecc74 100644 --- a/cmd/symbol_inject/macho.go +++ b/cmd/symbol_inject/macho.go @@ -18,6 +18,7 @@ import ( "debug/macho" "fmt" "io" + "sort" ) func findMachoSymbol(r io.ReaderAt, symbolName string) (uint64, uint64, error) { @@ -26,17 +27,25 @@ func findMachoSymbol(r io.ReaderAt, symbolName string) (uint64, uint64, error) { return maxUint64, maxUint64, cantParseError{err} } - // TODO(ccross): why? + // symbols in macho files seem to be prefixed with an underscore symbolName = "_" + symbolName - for i, symbol := range machoFile.Symtab.Syms { + symbols := machoFile.Symtab.Syms + sort.Slice(symbols, func(i, j int) bool { + if symbols[i].Sect != symbols[j].Sect { + return symbols[i].Sect < symbols[j].Sect + } + return symbols[i].Value < symbols[j].Value + }) + + for i, symbol := range symbols { if symbol.Sect == 0 { continue } if symbol.Name == symbolName { var nextSymbol *macho.Symbol - if i+1 < len(machoFile.Symtab.Syms) { - nextSymbol = &machoFile.Symtab.Syms[i+1] + if i+1 < len(symbols) { + nextSymbol = &symbols[i+1] } return calculateMachoSymbolOffset(machoFile, symbol, nextSymbol) } diff --git a/cmd/symbol_inject/pe.go b/cmd/symbol_inject/pe.go index 86f61621..dad530d4 100644 --- a/cmd/symbol_inject/pe.go +++ b/cmd/symbol_inject/pe.go @@ -27,6 +27,11 @@ func findPESymbol(r io.ReaderAt, symbolName string) (uint64, uint64, error) { return maxUint64, maxUint64, cantParseError{err} } + if peFile.FileHeader.Machine == pe.IMAGE_FILE_MACHINE_I386 { + // symbols in win32 exes seem to be prefixed with an underscore + symbolName = "_" + symbolName + } + sort.Slice(peFile.Symbols, func(i, j int) bool { if peFile.Symbols[i].SectionNumber != peFile.Symbols[j].SectionNumber { return peFile.Symbols[i].SectionNumber < peFile.Symbols[j].SectionNumber |