@@ -137,14 +137,12 @@ func initTools(b *binrep, config string) {
137
137
}
138
138
139
139
defaultPath := paths ["" ]
140
- b .llvmSymbolizer , b .llvmSymbolizerFound = findExe ("llvm-symbolizer" , append (paths ["llvm-symbolizer" ], defaultPath ... ))
141
- b .addr2line , b .addr2lineFound = findExe ("addr2line" , append (paths ["addr2line" ], defaultPath ... ))
142
- if ! b .addr2lineFound {
143
- // On MacOS, brew installs addr2line under gaddr2line name, so search for
144
- // that if the tool is not found by its default name.
145
- b .addr2line , b .addr2lineFound = findExe ("gaddr2line" , append (paths ["addr2line" ], defaultPath ... ))
146
- }
147
- b .nm , b .nmFound = findExe ("nm" , append (paths ["nm" ], defaultPath ... ))
140
+ b .llvmSymbolizer , b .llvmSymbolizerFound = chooseExe ([]string {"llvm-symbolizer" }, []string {}, append (paths ["llvm-symbolizer" ], defaultPath ... ))
141
+ b .addr2line , b .addr2lineFound = chooseExe ([]string {"addr2line" }, []string {"gaddr2line" }, append (paths ["addr2line" ], defaultPath ... ))
142
+ // The "-n" option is supported by LLVM since 2011. The output of llvm-nm
143
+ // and GNU nm with "-n" option is interchangeable for our purposes, so we do
144
+ // not need to differrentiate them.
145
+ b .nm , b .nmFound = chooseExe ([]string {"llvm-nm" , "nm" }, []string {"gnm" }, append (paths ["nm" ], defaultPath ... ))
148
146
b .objdump , b .objdumpFound , b .isLLVMObjdump = findObjdump (append (paths ["objdump" ], defaultPath ... ))
149
147
}
150
148
@@ -155,7 +153,7 @@ func initTools(b *binrep, config string) {
155
153
// a string with path to the preferred objdump binary if found,
156
154
// or an empty string if not found;
157
155
// a boolean if any acceptable objdump was found;
158
- // a boolen indicating if it is an LLVM objdump.
156
+ // a boolean indicating if it is an LLVM objdump.
159
157
func findObjdump (paths []string ) (string , bool , bool ) {
160
158
objdumpNames := []string {"llvm-objdump" , "objdump" }
161
159
if runtime .GOOS == "darwin" {
@@ -179,6 +177,26 @@ func findObjdump(paths []string) (string, bool, bool) {
179
177
return "" , false , false
180
178
}
181
179
180
+ // chooseExe finds and returns path to preferred binary. names is a list of
181
+ // names to search on both Linux and OSX. osxNames is a list of names specific
182
+ // to OSX. names always has a higher priority than osxNames. The order of
183
+ // the name within each list decides its priority (e.g. the first name has a
184
+ // higher priority than the second name in the list).
185
+ //
186
+ // It returns a string with path to the binary and a boolean indicating if any
187
+ // acceptable binary was found.
188
+ func chooseExe (names , osxNames []string , paths []string ) (string , bool ) {
189
+ if runtime .GOOS == "darwin" {
190
+ names = append (names , osxNames ... )
191
+ }
192
+ for _ , name := range names {
193
+ if binary , found := findExe (name , paths ); found {
194
+ return binary , true
195
+ }
196
+ }
197
+ return "" , false
198
+ }
199
+
182
200
// isLLVMObjdump accepts a string with path to an objdump binary,
183
201
// and returns a boolean indicating if the given binary is an LLVM
184
202
// objdump binary of an acceptable version.
0 commit comments