mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-20 11:33:24 +02:00
3bd0231fd8
And update the existing test cases in test/Object/macho-invalid.test to use llvm-objdump with the -macho option to produce these error messages and stop producing the generic "Invalid data was encountered while parsing the file" message. Working from the beginning of the file, if the mach header is too large for the size of the file and then if the load commands that follow extend past the end of the file these two errors now generate correct error messages. Both of these have existing test cases in test/Object/macho-invalid.test . But the first with macho-invalid-header it will never trigger the error message "mach header extends past the end of the file" using any of the llvm tools as they all use identify_magic() which rejects files with the correct magic number that are too small in size. So I tested this by hacking that code and seeing the error message down in parseHeader() really does happen. So in case there is ever code in llvm that directly calls createMachOObjectFile() this error message will be correctly produced. The second error message of "load commands extends past the end of the file" is triggered by a number of existing tests cases in test/Object/macho-invalid.test . Also other tests trigger different error messages now like "ilocalsym plus nlocalsym in LC_DYSYMTAB load command extends past the end of the symbol table". There are two existing test cases that still get the "Invalid data was encountered ..." error messages that I will tackle next. But they will involve a bit of pluming an Expect<...> up through the call stack and I want to do those as separate changes. FYI, for those test cases that were trying to test specific errors that now get different errors I’ll fix those in follow on changes and create new test cases for those so they test the error they were meant to test. llvm-svn: 266248
65 lines
4.2 KiB
Plaintext
65 lines
4.2 KiB
Plaintext
// An odd Mach-O file, with just a mach header with all but the magic field
|
|
// and filetype zeros. The cputype and cpusubtype fields being zero are invalid,
|
|
// but that does not mater for the most part to display some of the contents.
|
|
RUN: llvm-objdump -private-headers %p/Inputs/macho-invalid-zero-ncmds -macho \
|
|
RUN: | FileCheck -check-prefix ZERO-NCMDS %s
|
|
ZERO-NCMDS: MH_MAGIC_64 0 0 0x00 OBJECT 0 0 0x00000000
|
|
|
|
RUN: not llvm-objdump -macho -private-headers %p/Inputs/macho64-invalid-incomplete-load-command 2>&1 \
|
|
RUN: | FileCheck -check-prefix INCOMPLETE-LOADC %s
|
|
INCOMPLETE-LOADC: truncated or malformed object (load command 0 extends past the end all load commands in the file)
|
|
|
|
RUN: not llvm-objdump -macho -private-headers %p/Inputs/macho-invalid-too-small-load-command 2>&1 \
|
|
RUN: | FileCheck -check-prefix SMALL-LOADC-SIZE %s
|
|
RUN: not llvm-objdump -macho -private-headers %p/Inputs/macho64-invalid-too-small-load-command 2>&1 \
|
|
RUN: | FileCheck -check-prefix SMALL-LOADC-SIZE %s
|
|
SMALL-LOADC-SIZE: truncated or malformed object (load commands extends past the end of the file)
|
|
|
|
RUN: not llvm-objdump -private-headers %p/Inputs/macho-invalid-too-small-segment-load-command 2>&1 \
|
|
RUN: | FileCheck -check-prefix SMALL-SEGLOADC-SIZE %s
|
|
RUN: not llvm-objdump -private-headers %p/Inputs/macho64-invalid-too-small-segment-load-command 2>&1 \
|
|
RUN: | FileCheck -check-prefix SMALL-SEGLOADC-SIZE %s
|
|
SMALL-SEGLOADC-SIZE: Mach-O segment load command size is too small
|
|
|
|
RUN: not llvm-objdump -private-headers %p/Inputs/macho-invalid-no-size-for-sections 2>&1 \
|
|
RUN: | FileCheck -check-prefix TOO-MANY-SECTS %s
|
|
RUN: not llvm-objdump -private-headers %p/Inputs/macho64-invalid-no-size-for-sections 2>&1 \
|
|
RUN: | FileCheck -check-prefix TOO-MANY-SECTS %s
|
|
TOO-MANY-SECTS: Mach-O segment load command contains too many sections
|
|
|
|
RUN: not llvm-objdump -macho -t %p/Inputs/macho-invalid-bad-symbol-index 2>&1 \
|
|
RUN: | FileCheck -check-prefix BAD-SYMBOL %s
|
|
BAD-SYMBOL: truncated or malformed object (ilocalsym plus nlocalsym in LC_DYSYMTAB load command extends past the end of the symbol table)
|
|
RUN: llvm-objdump -macho -t %p/Inputs/macho-valid-0-nsyms 2>&1 \
|
|
RUN: | FileCheck -check-prefix ZERO-NSYMS %s
|
|
ZERO-NSYMS: SYMBOL TABLE
|
|
|
|
RUN: not llvm-objdump -t %p/Inputs/macho-invalid-symbol-name-past-eof 2>&1 \
|
|
RUN: | FileCheck -check-prefix NAME-PAST-EOF %s
|
|
NAME-PAST-EOF: error reading file: Invalid data was encountered while parsing the file.
|
|
RUN: llvm-nm -pa %p/Inputs/macho-invalid-symbol-name-past-eof 2>&1 \
|
|
RUN: | FileCheck -check-prefix NAME-PAST-EOF-nm-pa %s
|
|
NAME-PAST-EOF-nm-pa: 0000000000000000 - 00 0000 SO bad string index
|
|
RUN: llvm-nm -pax %p/Inputs/macho-invalid-symbol-name-past-eof 2>&1 \
|
|
RUN: | FileCheck -check-prefix NAME-PAST-EOF-nm-pax %s
|
|
NAME-PAST-EOF-nm-pax: 0000000000000000 64 00 0000 fe000002 bad string index
|
|
|
|
RUN: llvm-nm %p/Inputs/macho-invalid-section-index-getSectionRawName 2>&1 \
|
|
RUN: | FileCheck -check-prefix INVALID-SECTION-IDX-SYMBOL-SEC %s
|
|
INVALID-SECTION-IDX-SYMBOL-SEC: 0000000100000000 S __mh_execute_header
|
|
RUN: llvm-nm -m %p/Inputs/macho-invalid-section-index-getSectionRawName 2>&1 \
|
|
RUN: | FileCheck -check-prefix INVALID-SECTION-IDX-SYMBOL-SEC-m %s
|
|
INVALID-SECTION-IDX-SYMBOL-SEC-m: 0000000100000000 (?,?) [referenced dynamically] external __mh_execute_header
|
|
RUN: llvm-nm -pax %p/Inputs/macho-invalid-section-index-getSectionRawName 2>&1 \
|
|
RUN: | FileCheck -check-prefix INVALID-SECTION-IDX-SYMBOL-SEC-pax %s
|
|
INVALID-SECTION-IDX-SYMBOL-SEC-pax: 0000000100000000 0f 42 0010 00000065 __mh_execute_header
|
|
RUN: not llvm-objdump -t %p/Inputs/macho-invalid-section-index-getSectionRawName 2>&1 \
|
|
RUN: | FileCheck -check-prefix INVALID-SECTION-IDX-SYMBOL-SEC-objdump %s
|
|
INVALID-SECTION-IDX-SYMBOL-SEC-objdump: Invalid data was encountered while parsing the file.
|
|
|
|
RUN: not llvm-objdump -macho -private-headers %p/Inputs/macho-invalid-header 2>&1 | FileCheck -check-prefix INVALID-HEADER %s
|
|
INVALID-HEADER: The file was not recognized as a valid object file
|
|
|
|
RUN: not llvm-objdump -macho -private-headers %p/Inputs/macho64-invalid-incomplete-segment-load-command 2>&1 | FileCheck -check-prefix INCOMPLETE-SEGMENT-LOADC %s
|
|
INCOMPLETE-SEGMENT-LOADC: truncated or malformed object (load commands extends past the end of the file)
|