summaryrefslogtreecommitdiffstats
path: root/llvm/test/tools/llvm-objdump
diff options
context:
space:
mode:
authorKevin Enderby <enderby@apple.com>2016-11-14 20:57:04 +0000
committerKevin Enderby <enderby@apple.com>2016-11-14 20:57:04 +0000
commit22fc0078095c5806aba560a3ec9add1e9c11e647 (patch)
treee53373992c268a9a108ef3f8dced2ec844d57e69 /llvm/test/tools/llvm-objdump
parentb16a4e58699966d5d56c10371e5b62fee67d5350 (diff)
downloadbcm5719-llvm-22fc0078095c5806aba560a3ec9add1e9c11e647.tar.gz
bcm5719-llvm-22fc0078095c5806aba560a3ec9add1e9c11e647.zip
Add a checkSymbolTable() method to the MachOObjectFile class.
The philosophy of the error checking in libObject for Mach-O files is that the constructor will check the load commands so for their tables the offsets and sizes are properly contained in the file. But there is no checking of the entries of any of the tables. For the contents of the tables themselves the methods accessing the contents of the entries return errors as needed. In some cases this however makes it difficult or cumbersome to produce a good error message which would include the tool name, file name, archive member, and name of the architecture of a slice of a universal file the error occurred in. So idea is that there will be a method to check a table which can be called up front before using it allowing a good error message to be produced before a table is used. And if only verification of the Mach-O file and its tables are wanted a new possible method checkAllTables() could be added to call all of the methods to check all the tables at some time when such methods exist. The checkSymbolTable() is the first of such methods to check one of the Mach-O file tables. This method initially will used in llvm-objdump’s DisassembleMachO() routine before it gets the section and symbol information. As if there are problems with the symbol table currently the error is first encountered by the bool operator() in the SymbolSorter() struct which passed to std::sort(). In this case there is no context as to the file name the symbol which results a poor error message: LLVM ERROR: truncated or malformed object (bad string index: 22 for symbol at index 1) with the added call to the checkSymbolTable() method the error message includes the tool name and file name: llvm-objdump: 'macho-invalid-symbol-strx': truncated or malformed object (bad string table index: 22 past the end of string table, for symbol at index 1) llvm-svn: 286887
Diffstat (limited to 'llvm/test/tools/llvm-objdump')
-rw-r--r--llvm/test/tools/llvm-objdump/X86/Inputs/macho-invalid-symbol-indrbin0 -> 260 bytes
-rw-r--r--llvm/test/tools/llvm-objdump/X86/Inputs/macho-invalid-symbol-lib_ordinalbin0 -> 304 bytes
-rw-r--r--llvm/test/tools/llvm-objdump/X86/Inputs/macho-invalid-symbol-nsectbin0 -> 424 bytes
-rw-r--r--llvm/test/tools/llvm-objdump/X86/Inputs/macho-invalid-symbol-strxbin0 -> 260 bytes
-rw-r--r--llvm/test/tools/llvm-objdump/X86/malformed-machos.test12
5 files changed, 12 insertions, 0 deletions
diff --git a/llvm/test/tools/llvm-objdump/X86/Inputs/macho-invalid-symbol-indr b/llvm/test/tools/llvm-objdump/X86/Inputs/macho-invalid-symbol-indr
new file mode 100644
index 00000000000..67751b7f12e
--- /dev/null
+++ b/llvm/test/tools/llvm-objdump/X86/Inputs/macho-invalid-symbol-indr
Binary files differ
diff --git a/llvm/test/tools/llvm-objdump/X86/Inputs/macho-invalid-symbol-lib_ordinal b/llvm/test/tools/llvm-objdump/X86/Inputs/macho-invalid-symbol-lib_ordinal
new file mode 100644
index 00000000000..d3b54701a55
--- /dev/null
+++ b/llvm/test/tools/llvm-objdump/X86/Inputs/macho-invalid-symbol-lib_ordinal
Binary files differ
diff --git a/llvm/test/tools/llvm-objdump/X86/Inputs/macho-invalid-symbol-nsect b/llvm/test/tools/llvm-objdump/X86/Inputs/macho-invalid-symbol-nsect
new file mode 100644
index 00000000000..3ee21c4b024
--- /dev/null
+++ b/llvm/test/tools/llvm-objdump/X86/Inputs/macho-invalid-symbol-nsect
Binary files differ
diff --git a/llvm/test/tools/llvm-objdump/X86/Inputs/macho-invalid-symbol-strx b/llvm/test/tools/llvm-objdump/X86/Inputs/macho-invalid-symbol-strx
new file mode 100644
index 00000000000..4a6e56135db
--- /dev/null
+++ b/llvm/test/tools/llvm-objdump/X86/Inputs/macho-invalid-symbol-strx
Binary files differ
diff --git a/llvm/test/tools/llvm-objdump/X86/malformed-machos.test b/llvm/test/tools/llvm-objdump/X86/malformed-machos.test
index 499c23e09d2..edd6a24177e 100644
--- a/llvm/test/tools/llvm-objdump/X86/malformed-machos.test
+++ b/llvm/test/tools/llvm-objdump/X86/malformed-machos.test
@@ -39,3 +39,15 @@
# RUN: | FileCheck -check-prefix=m0337 %s
# m0337: mem-crup-0337.macho': truncated or malformed object (section relocation entries at offset 0 with a size of 512, overlaps Mach-O headers at offset 0 with a size of 2048)
+
+RUN: not llvm-objdump -macho -disassemble %p/Inputs/macho-invalid-symbol-nsect 2>&1 | FileCheck -check-prefix INVALID-SYMBOL-NSECT %s
+INVALID-SYMBOL-NSECT: macho-invalid-symbol-nsect': truncated or malformed object (bad section index: 97 for symbol at index 1)
+
+RUN: not llvm-objdump -macho -disassemble %p/Inputs/macho-invalid-symbol-indr 2>&1 | FileCheck -check-prefix INVALID-SYMBOL-INDR %s
+INVALID-SYMBOL-INDR: macho-invalid-symbol-indr': truncated or malformed object (bad n_value: 22 past the end of string table, for N_INDR symbol at index 1)
+
+RUN: not llvm-objdump -macho -disassemble %p/Inputs/macho-invalid-symbol-strx 2>&1 | FileCheck -check-prefix INVALID-SYMBOL-STRX %s
+INVALID-SYMBOL-STRX: macho-invalid-symbol-strx': truncated or malformed object (bad string table index: 22 past the end of string table, for symbol at index 1)
+
+RUN: not llvm-objdump -macho -disassemble %p/Inputs/macho-invalid-symbol-lib_ordinal 2>&1 | FileCheck -check-prefix INVALID-SYMBOL-LIB_ORDINAL %s
+INVALID-SYMBOL-LIB_ORDINAL: macho-invalid-symbol-lib_ordinal': truncated or malformed object (bad library ordinal: 7 for symbol at index 2)
OpenPOWER on IntegriCloud