aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorColin Cross <ccross@android.com>2018-02-27 23:06:41 +0000
committerandroid-build-merger <android-build-merger@google.com>2018-02-27 23:06:41 +0000
commit8c5d337c8072eb99e5def5345b609df2e1bdf238 (patch)
treeecc53546eb3092cec072f46adee8b773b374599e
parentaa14355b6a2b2e093cf7699abf21409c0f7fa524 (diff)
parent0c74ad9381e33545e77596dd0e9208e5e215eae8 (diff)
downloadbuild_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.go17
-rw-r--r--cmd/symbol_inject/pe.go5
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