summaryrefslogtreecommitdiffstats
path: root/libcxx/utils
diff options
context:
space:
mode:
authorEric Fiselier <eric@efcs.ca>2015-03-20 23:07:38 +0000
committerEric Fiselier <eric@efcs.ca>2015-03-20 23:07:38 +0000
commit1f1980d9ca8c985e51d4e0bd49deecfed7736b3d (patch)
tree7fac15aaeab01b63ef19fef234a3c6d27987672a /libcxx/utils
parent2ad80dac9b334bbf0634c857284fc1c0590f930b (diff)
downloadbcm5719-llvm-1f1980d9ca8c985e51d4e0bd49deecfed7736b3d.tar.gz
bcm5719-llvm-1f1980d9ca8c985e51d4e0bd49deecfed7736b3d.zip
Improve automatic detection of filetype for sym_check
llvm-svn: 232858
Diffstat (limited to 'libcxx/utils')
-rw-r--r--libcxx/utils/sym_check/sym_check/util.py28
1 files changed, 27 insertions, 1 deletions
diff --git a/libcxx/utils/sym_check/sym_check/util.py b/libcxx/utils/sym_check/sym_check/util.py
index 09106185c12..1d3b424f6f3 100644
--- a/libcxx/utils/sym_check/sym_check/util.py
+++ b/libcxx/utils/sym_check/sym_check/util.py
@@ -95,8 +95,34 @@ def demangle_symbol(symbol):
return out
+def is_elf(filename):
+ with open(filename, 'r') as f:
+ magic_bytes = f.read(4)
+ return magic_bytes == '\x7fELF'
+
+
+def is_mach_o(filename):
+ with open(filename, 'r') as f:
+ magic_bytes = f.read(4)
+ return magic_bytes in [
+ '\xfe\xed\xfa\xce', # MH_MAGIC
+ '\xce\xfa\xed\xfe', # MH_CIGAM
+ '\xfe\xed\xfa\xcf', # MH_MAGIC_64
+ '\xcf\xfa\xed\xfe', # MH_CIGAM_64
+ '\xca\xfe\xba\xbe', # FAT_MAGIC
+ '\xbe\xba\xfe\xca' # FAT_CIGAM
+ ]
+
+
+def is_library_file(filename):
+ if sys.platform == 'darwin':
+ return is_mach_o(filename)
+ else:
+ return is_elf(filename)
+
+
def extract_or_load(filename):
import sym_check.extract
- if filename.endswith('.so') or filename.endswith('.dylib'):
+ if is_library_file(filename):
return sym_check.extract.extract_symbols(filename)
return read_syms_from_file(filename)
OpenPOWER on IntegriCloud