1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-19 02:52:53 +02:00
llvm-mirror/test/Object
Kevin Enderby 1a15e5c9c5 Fix a crash in running llvm-objdump -t with an invalid Mach-O file already
in the test suite. While this is not really an interesting tool and option to run
on a Mach-O file to show the symbol table in a generic libObject format
it shouldn’t crash.

The reason for the crash was in MachOObjectFile::getSymbolType() when it was
calling MachOObjectFile::getSymbolSection() without checking its return value
for the error case.

What makes this fix require a fair bit of diffs is that the method getSymbolType() is
in the class ObjectFile defined without an ErrorOr<> so I needed to add that all
the sub classes.  And all of the uses needed to be updated and the return value
needed to be checked for the error case.

The MachOObjectFile version of getSymbolType() “can” get an error in trying to
come up with the libObject’s internal SymbolRef::Type when the Mach-O symbol
symbol type is an N_SECT type because the code is trying to select from the
SymbolRef::ST_Data or SymbolRef::ST_Function values for the SymbolRef::Type.
And it needs the Mach-O section to use isData() and isBSS to determine if
it will return SymbolRef::ST_Data.

One other possible fix I considered is to simply return SymbolRef::ST_Other
when MachOObjectFile::getSymbolSection() returned an error.  But since in
the past when I did such changes that “ate an error in the libObject code” I
was asked instead to push the error out of the libObject code I chose not
to implement the fix this way.

As currently written both the COFF and ELF versions of getSymbolType()
can’t get an error.  But if isReservedSectionNumber() wanted to check for
the two known negative values rather than allowing all negative values or
the code wanted to add the same check as in getSymbolAddress() to use
getSection() and check for the error then these versions of getSymbolType()
could return errors.

At the end of the day the error printed now is the generic “Invalid data was
encountered while parsing the file” for object_error::parse_failed.  In the
future when we thread Lang’s new TypedError for recoverable error handling
though libObject this will improve.  And where the added // Diagnostic(…
comment is, it would be changed to produce and error message
like “bad section index (42) for symbol at index 8” for this case.

llvm-svn: 264187
2016-03-23 20:27:00 +00:00
..
AArch64 [ELFYAML] Provide default value 0 for YAML relocation addendum field 2015-01-29 06:56:24 +00:00
AMDGPU [AMDGPU] add AMDGPU target support to ELFObjectFile.h header 2016-03-09 17:08:19 +00:00
ARM llvm-nm: Don't print mapping symbols. 2015-06-25 21:00:51 +00:00
Inputs Add a testcase that would have found the bug in r263971. 2016-03-21 21:09:38 +00:00
Lanai [lanai] Add ELF enum value and relocations. 2016-03-01 21:21:42 +00:00
Mips [ELF] Explicitly configure sections alignment in the tests. NFC 2015-07-09 18:22:55 +00:00
X86 IRObject: Mark extern_weak as weak. 2016-02-29 14:26:06 +00:00
ar-create.test
ar-error.test llvm/test/Object/ar-error.test: Don't check the message "No such file or directory". 2014-05-24 08:47:11 +00:00
archive-delete.test lit: Add 'cd' support to the internal shell and port some tests 2015-03-02 21:33:18 +00:00
archive-error-tmp.txt Remove "REQUIRES:shell" from tests. They work for me. 2014-11-04 13:41:33 +00:00
archive-extract-dir.test lit: Add 'cd' support to the internal shell and port some tests 2015-03-02 21:33:18 +00:00
archive-extract.test Accept lower case to handle windows error messages. 2015-07-14 22:42:21 +00:00
archive-format.test Trying to fix the windows bots. 2015-07-16 00:38:34 +00:00
archive-long-index.test Changed the lvm-nm alias "-s" for -print-armap to "-M". 2014-07-08 23:47:31 +00:00
archive-move.test lit: Add 'cd' support to the internal shell and port some tests 2015-03-02 21:33:18 +00:00
archive-replace-pos.test
archive-symtab.test Tests: be slightly more specific to avoid conflict with path. 2015-10-26 13:40:03 +00:00
archive-toc.test Fix reading archive members with / in the name. 2015-07-13 23:07:05 +00:00
archive-update.test Stabilize llvm/test/Object/archive-update.test a bit. 2015-12-07 23:15:57 +00:00
check_binary_output.ll
coff-archive-short.test Object, COFF: Cleanup symbol type code, improve binutils compatibility 2014-10-31 05:07:00 +00:00
coff-archive.test llvm-nm: treat weak undefined as undefined. 2015-07-06 21:36:23 +00:00
coff-invalid.test Check that COFF .obj files have sections with zero virtual address spaces. 2015-07-06 14:26:07 +00:00
corrupt.test Represent the dynamic table itself with a DynRegionInfo. 2016-02-17 16:48:00 +00:00
directory.ll Use std::error_code instead of llvm::error_code. 2014-06-11 19:05:50 +00:00
dllimport-globalref.ll Object: Add XFAILed test case for r239560. 2015-06-24 18:03:39 +00:00
dllimport.ll Object: Prepend __imp_ when mangling a dllimport symbol in IRObjectFile. 2015-06-11 21:42:18 +00:00
dyn-rel-relocation.test [llvm-readobj][ELF] Teach llvm-readobj to show dynamic relocation in REL format 2016-01-16 22:40:09 +00:00
dynamic-reloc.test Add a testcase that would have found the bug in r263971. 2016-03-21 21:09:38 +00:00
elf-reloc-no-sym.test
elf-unknown-type.test [Object][ELF] Test unknown type. 2015-01-23 21:58:09 +00:00
invalid.test Change how readobj stores info about dynamic symbols. 2016-02-17 15:38:21 +00:00
kext.test Object: Test for reading kext bundles 2015-02-27 18:58:23 +00:00
lit.local.cfg Change how symbol sizes are handled in lib/Object. 2015-06-24 10:20:30 +00:00
macho-invalid.test Fix a crash in running llvm-objdump -t with an invalid Mach-O file already 2016-03-23 20:27:00 +00:00
mangle-ir.ll Revert "Change memcpy/memset/memmove to have dest and source alignments." 2015-11-19 05:56:52 +00:00
mri1.test Re-enable tests in llvm/test/Object, corresponding to line_iterator's 2014-11-04 13:19:29 +00:00
mri2.test llvm-ar: Start adding support for mri scripts. 2014-10-10 18:33:51 +00:00
mri3.test Re-enable tests in llvm/test/Object, corresponding to line_iterator's 2014-11-04 13:19:29 +00:00
mri4.test Re-enable tests in llvm/test/Object, corresponding to line_iterator's 2014-11-04 13:19:29 +00:00
mri5.test llvm-ar: Start adding support for mri scripts. 2014-10-10 18:33:51 +00:00
mri-addlib.test Re-enable tests in llvm/test/Object, corresponding to line_iterator's 2014-11-04 13:19:29 +00:00
mri-addmod.test Re-enable tests in llvm/test/Object, corresponding to line_iterator's 2014-11-04 13:19:29 +00:00
mri-crlf.test Add CRLF support to LineIterator. 2014-11-03 14:09:47 +00:00
nm-archive.test Identify thin archives as archives. 2015-07-22 18:29:39 +00:00
nm-darwin-m.test Added the -m option as an alias for -format=darwin to llvm-nm and llvm-size 2014-06-20 00:04:16 +00:00
nm-error.test
nm-irix6.test [Object] Support reading 64-bit MIPS ELF archives 2015-02-17 18:54:22 +00:00
nm-pe-image.test Update comments. 2015-08-06 20:05:27 +00:00
nm-shared-object.test Fix llvm-nm to print the full 64-bit address for symbols in 64-bit object files. 2014-05-09 23:57:49 +00:00
nm-trivial-object.test Fix llvm-nm -S option. 2015-05-22 13:28:35 +00:00
nm-universal-binary.test pr20589: Fix duplicated arch flag. 2014-08-08 16:18:29 +00:00
nm-weak-global-macho.test
no-section-header-string-table.test [Object][ELF] Handle files with no section header string table. 2015-07-21 21:40:33 +00:00
no-section-table.test [llvm-readobj] Dump DT_RELACOUNT correctly. 2016-01-16 06:06:36 +00:00
obj2yaml-coff-long-file-symbol.test Object: Output .file symbols properly 2014-03-20 06:29:02 +00:00
obj2yaml-coff-long-section-name.test obj2yaml, COFF: Handle long section names 2014-10-10 00:17:57 +00:00
obj2yaml-coff-section-aux-symbol.test Add tests for r219479. 2014-10-10 06:59:05 +00:00
obj2yaml-coff-weak-external.test obj2yaml: Don't crash if the characteristics field is zero 2014-04-09 16:38:15 +00:00
obj2yaml-sectiongroup.test [obj2yaml/yaml2obj] Add SHT_GROUP support. 2015-02-21 04:28:26 +00:00
obj2yaml.test [llvm-readobj][ELF] Teach llvm-readobj to show arch specific ELF section's flags 2016-01-20 19:15:18 +00:00
objdump-export-list.test [Object] Don't crash on empty export lists. 2014-12-19 02:31:01 +00:00
objdump-file-header.test
objdump-no-sectionheaders.test objdump: Add test for ELF file with no section table 2014-06-30 20:03:02 +00:00
objdump-private-headers.test Add mach-o LC_RPATH support to llvm-objdump 2014-12-04 07:37:02 +00:00
objdump-reloc-shared.test Revert "[llvm-objdump] Printing relocations in executable and shared object files. This partially reverts r215844 by removing test objdump-reloc-shared.test which stated GNU objdump doesn't print relocations, it does." 2016-03-21 20:59:15 +00:00
objdump-relocations.test Fix getRelocationValueString to return the symbol name for EM_386. 2014-10-29 18:37:13 +00:00
objdump-section-content.test
objdump-sectionheaders.test
objdump-shndx.test Add a test showing that objdump (and so ObjectFIle) can handle shndx. 2015-08-10 21:00:15 +00:00
objdump-symbol-table.test objdump: Don't print a (always 0) size for MachO symbols. 2015-06-23 15:45:38 +00:00
pr25877.test Handle archives with paths in the names. 2015-12-18 16:07:17 +00:00
readobj-absent.test Avoid SEGFAULT if a requested symbol section is absent. 2015-09-21 19:17:18 +00:00
readobj-elf-versioning.test Teach llvm-readobj to print human friendly description of reserved sections. 2014-03-24 05:00:34 +00:00
readobj-shared-object.test Fix printing of 64 bit values and make test more strict. 2015-10-01 17:57:31 +00:00
readobj.test
relocation-executable.test Reapply r260489. 2016-02-16 15:16:00 +00:00
simple-archive.test Changed the lvm-nm alias "-s" for -print-armap to "-M". 2014-07-08 23:47:31 +00:00
size-trivial-macho.test Add the -arch flag support to llvm-size like what was done to llvm-nm 2014-07-01 17:19:10 +00:00
stackmap-dump.test [Stackmap] Pre-assemble the stackmap parser test case. (Fix builders). 2015-06-27 03:49:25 +00:00
yaml2obj-coff-invalid-alignment.test [yaml2obj, COFF] Correctly handle section alignment 2016-03-17 05:43:26 +00:00
yaml2obj-coff-multi-doc.test [yaml2obj] Add new command line option -docnum. 2014-05-31 04:51:07 +00:00
yaml2obj-elf-alignment.yaml [yaml2obj] Align section content using AddressAlign field's value 2015-07-08 10:12:40 +00:00
yaml2obj-elf-bits-endian.test
yaml2obj-elf-file-headers-with-e_flags.yaml [yaml2obj] Allow yaml2obj tool to recognize EF_MIPS_NAN2008 flag 2014-11-04 13:33:36 +00:00
yaml2obj-elf-file-headers.yaml
yaml2obj-elf-multi-doc.test [yaml2obj] Add new command line option -docnum. 2014-05-31 04:51:07 +00:00
yaml2obj-elf-rel-noref.yaml [ELFYAML] Fix handling SHT_NOBITS sections by obj2yaml/yaml2obj tools 2015-07-03 23:00:54 +00:00
yaml2obj-elf-rel.yaml [yaml2obj] Use regex to match sections offsets. NFC 2015-07-08 06:57:24 +00:00
yaml2obj-elf-section-basic.yaml [yaml2obj] Initialize sh_addralign field for the .symtab section 2015-07-09 18:23:02 +00:00
yaml2obj-elf-section-invalid-size.yaml [yaml2obj][ELF] Add an optional Size field to the YAML section declaration. 2014-05-16 16:01:00 +00:00
yaml2obj-elf-symbol-basic.yaml [ELF] Explicitly configure sections alignment in the tests. NFC 2015-07-09 18:22:55 +00:00
yaml2obj-elf-symbol-LocalGlobalWeak.yaml
yaml2obj-elf-symbol-visibility.yaml [ELF][yaml2obj] Handle additional MIPS specific st_other field flags 2014-11-06 22:46:24 +00:00
yaml2obj-readobj.test [yaml2obj] Add "-o" command line option to specify an output file name. 2014-05-15 16:14:02 +00:00