aboutsummaryrefslogtreecommitdiff
path: root/llvm/tools/llvm-objdump
AgeCommit message (Collapse)AuthorFilesLines
2016-05-02Thread Expected<...> up from libObject’s getType() for symbols to allow ↵Kevin Enderby3-32/+77
llvm-objdump to produce a good error message. Produce another specific error message for a malformed Mach-O file when a symbol’s section index is more than the number of sections. The existing test case in test/Object/macho-invalid.test for macho-invalid-section-index-getSectionRawName now reports the error with the message indicating that a symbol at a specific index has a bad section index and that bad section index value. Again converting interfaces to Expected<> from ErrorOr<> does involve touching a number of places. Where the existing code reported the error with a string message or an error code it was converted to do the same. Also there some were bugs in the existing code that did not deal with the old ErrorOr<> return values.  So now with Expected<> since they must be checked and the error handled, I added a TODO and a comment: "// TODO: Actually report errors helpfully" and a call something like consumeError(NameOrErr.takeError()) so the buggy code will not crash since needed to deal with the Error. llvm-svn: 268298
2016-04-28Fix a bug in llvm-objdump for -private-headers printing the ↵Kevin Enderby1-1/+1
LC_CODE_SIGNATURE Mach-O load command. rdar://25985653 llvm-svn: 267940
2016-04-28Update llvm-objdump for disassembly of ARM Mach-O files to always include ↵Kevin Enderby1-3/+5
the opcode bytes. As this is the expected behavior of the old darwin otool(1) for ARM Mach-O files. rdar://25896249 llvm-svn: 267929
2016-04-27Fix bugs in llvm-objdump printing the last word for -section in non i386 and ↵Kevin Enderby1-2/+2
x86 files. Two problems, 1) for the last 4 bytes it would print them as separate bytes not a word and 2) it would print the same last byte for those bytes less than a word. rdar://25938224 llvm-svn: 267819
2016-04-27Fix a bug in llvm-objdump printing of 32-bit addresses for -section in non ↵Kevin Enderby1-1/+1
i386 and x86 files. rdar://25896202 llvm-svn: 267807
2016-04-26Reapply: "ARM: put correct symbol index on indirect pointers in __thread_ptr.""Tim Northover1-1/+1
A latent bug in llvm-objdump used the wrong format specifier on 32-bit targets, causing the test to fail. This fixes the issue. llvm-svn: 267582
2016-04-22llvm-objdump: deal with invalid ARM encodings slightly better.Tim Northover1-7/+17
Before we printed a warning to stderr and left the actual output stream in a mess. This tries to print a .long or .short representation of what we saw (as if there was a data-in-code directive). This isn't guaranteed to restore synchronization in Thumb-mode (if the invalid instruction was supposed to be 32-bits, we may be off-by-16 for the rest of the function). But there's no certain way to deal with that, and it's invalid code anyway (if the data really wasn't an instruction, the user can add proper .data_in_code directives if they care) llvm-svn: 267250
2016-04-22MachO: remove weird ARM/Thumb interface from MachOObjectFileTim Northover1-5/+12
Only one consumer (llvm-objdump) actually cared about the fact that there were two triples. Others were actively working around the fact that the Triple returned by getArch might have been invalid. As for llvm-objdump, it needs to be acutely aware of both Triples anyway, so being generic in the exposed API is no benefit. Also rename the version of getArch returning a Triple. Users were having to pass an unwanted nullptr to disambiguate the two, which was nasty. The only functional change here is that armv7m and armv7em object files no longer crash llvm-objdump. llvm-svn: 267249
2016-04-22AMDGPU: Fix crash when dumping unknown opcodeMatt Arsenault1-0/+5
I'm for some reason having a problem producing a test. It should be the same as test/MC/X86/invalid_opcode.s, but llvm-mc seems to ignore random bytes. llvm-svn: 267225
2016-04-21Fix crash in llvm-objdump with -macho -objc-meta-data that was trying dump a ↵Kevin Enderby1-0/+3
non-existent section. Showed up in running on a large binary with the missing section. I could create a fake test case if anyone really wants but the fix is pretty obvious. rdar://25837034 llvm-svn: 267037
2016-04-20Thread Expected<...> up from libObject’s getName() for symbols to allow ↵Kevin Enderby3-65/+151
llvm-objdump to produce a good error message. Produce another specific error message for a malformed Mach-O file when a symbol’s string index is past the end of the string table. The existing test case in test/Object/macho-invalid.test for macho-invalid-symbol-name-past-eof now reports the error with the message indicating that a symbol at a specific index has a bad sting index and that bad string index value. Again converting interfaces to Expected<> from ErrorOr<> does involve touching a number of places. Where the existing code reported the error with a string message or an error code it was converted to do the same. There is some code for this that could be factored into a routine but I would like to leave that for the code owners post-commit to do as they want for handling an llvm::Error. An example of how this could be done is shown in the diff in lib/ExecutionEngine/RuntimeDyld/RuntimeDyldImpl.h which had a Check() routine already for std::error_code so I added one like it for llvm::Error . Also there some were bugs in the existing code that did not deal with the old ErrorOr<> return values.  So now with Expected<> since they must be checked and the error handled, I added a TODO and a comment: “// TODO: Actually report errors helpfully” and a call something like consumeError(NameOrErr.takeError()) so the buggy code will not crash since needed to deal with the Error. Note there fixes needed to lld that goes along with this that I will commit right after this. So expect lld not to built after this commit and before the next one. llvm-svn: 266919
2016-04-18[NFC] Header cleanupMehdi Amini2-3/+3
Removed some unused headers, replaced some headers with forward class declarations. Found using simple scripts like this one: clear && ack --cpp -l '#include "llvm/ADT/IndexedMap.h"' | xargs grep -L 'IndexedMap[<]' | xargs grep -n --color=auto 'IndexedMap' Patch by Eugene Kosov <claprix@yandex.ru> Differential Revision: http://reviews.llvm.org/D19219 From: Mehdi Amini <mehdi.amini@apple.com> llvm-svn: 266595
2016-04-08Revert r265817Colin LeMahieu1-2/+1
lld tests need to be addressed. llvm-svn: 265822
2016-04-08[llvm-objdump] Printing hex instead of dec by defaultColin LeMahieu1-1/+2
Differential Revision: http://reviews.llvm.org/D18770 llvm-svn: 265817
2016-04-07fix r265645: target dependent printf formatting flags.Valery Pykhtin1-2/+2
llvm-svn: 265649
2016-04-07[AMDGPU] llvm-objdump: Minimal HSA Code Object disassembler support.Valery Pykhtin1-0/+43
Reenable reverted r265550 with endianness issue fixed. Variables of endian-aware types such as ulittle32_t should be explicitly casted to their natural equivalent types before passing it as vararg to printf like functions (format in my case). Added lit config file depending on AMDGPU target as the testcase uses assembler. Differential revision: http://reviews.llvm.org/D16998 llvm-svn: 265645
2016-04-06Thread Expected<...> up from createMachOObjectFile() to allow llvm-objdump ↵Kevin Enderby3-6/+18
to produce a real error message Produce the first specific error message for a malformed Mach-O file describing the problem instead of the generic message for object_error::parse_failed of "Invalid data was encountered while parsing the file”.  Many more good error messages will follow after this first one. This is built on Lang Hames’ great work of adding the ’Error' class for structured error handling and threading Error through MachOObjectFile construction. And making createMachOObjectFile return Expected<...> . So to to get the error to the llvm-obdump tool, I changed the stack of these methods to also return Expected<...> : object::ObjectFile::createObjectFile() object::SymbolicFile::createSymbolicFile() object::createBinary() Then finally in ParseInputMachO() in MachODump.cpp the error can be reported and the specific error message can be printed in llvm-objdump and can be seen in the existing test case for the existing malformed binary but with the updated error message. Converting these interfaces to Expected<> from ErrorOr<> does involve touching a number of places. To contain the changes for now use of errorToErrorCode() and errorOrToExpected() are used where the callers are yet to be converted. Also there some were bugs in the existing code that did not deal with the old ErrorOr<> return values. So now with Expected<> since they must be checked and the error handled, I added a TODO and a comment: “// TODO: Actually report errors helpfully” and a call something like consumeError(ObjOrErr.takeError()) so the buggy code will not crash since needed to deal with the Error. Note there is one fix also needed to lld/COFF/InputFiles.cpp that goes along with this that I will commit right after this. So expect lld not to built after this commit and before the next one. llvm-svn: 265606
2016-04-06Revert "[AMDGPU] llvm-objdump: Minimal HSA Code Object disassembler support."Valery Pykhtin1-41/+0
This reverts commit r265550. There're problems with endianness on dumping instruction bytes. Need to find out how to use support::ulittle32_t type properly. llvm-svn: 265554
2016-04-06[AMDGPU] llvm-objdump: Minimal HSA Code Object disassembler support.Valery Pykhtin1-0/+41
Differential revision: http://reviews.llvm.org/D16998 llvm-svn: 265550
2016-03-23Fix a cut-and-paste error in the changes for r264187 which I think isKevin Enderby1-1/+1
the cause of the tools/llvm-objdump/X86/macho-symbolized-disassembly.test crashing on linux. Either way clearly incorrect code. llvm-svn: 264198
2016-03-23Fix a crash in running llvm-objdump -t with an invalid Mach-O file alreadyKevin Enderby2-7/+29
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-21Revert "[llvm-objdump] Printing relocations in executable and shared object ↵Rafael Espindola1-0/+4
files. This partially reverts r215844 by removing test objdump-reloc-shared.test which stated GNU objdump doesn't print relocations, it does." This reverts commit r263971. It produces the wrong results for .rela.dyn. I will add a test. llvm-svn: 263987
2016-03-21[llvm-objdump] Printing relocations in executable and shared object files. ↵Colin LeMahieu1-4/+0
This partially reverts r215844 by removing test objdump-reloc-shared.test which stated GNU objdump doesn't print relocations, it does. In executable and shared object ELF files, relocations in the file contain the final virtual address rather than section offset so this is adjusted to display section offset. Differential revision: http://reviews.llvm.org/D15965 llvm-svn: 263971
2016-03-18[llvm-objdump] Print <unknown> in place of instruction text if it couldn't ↵Colin LeMahieu1-64/+69
be disassembled. llvm-svn: 263793
2016-03-17[llvm-objdump] Add '0x' prefix to a target displacement number to accent its ↵Simon Atanasyan1-1/+1
hex format It might be hard to recognize a hexadecimal number without '0x' prefix. Besides that '0x' prefix corresponds to GNU objdump behaviour. Differential Revision: http://reviews.llvm.org/D18207 llvm-svn: 263705
2016-03-15[llvm-objdump] Add support for dumping the PE TLS directoryDavid Majnemer1-0/+51
The PE TLS directory contains information about where the TLS data resides in the image, what functions should be executed when threads are created, etc. llvm-svn: 263537
2016-03-01[lanai] Add ELF enum value and relocations.Jacques Pienaar1-0/+1
Add ELF enum value and relocations for Lanai backed. General Lanai backend discussion on llvm-dev thread "[RFC] Lanai backend" (http://lists.llvm.org/pipermail/llvm-dev/2016-February/095118.html). Differential Revision: http://reviews.llvm.org/D17008 llvm-svn: 262394
2016-01-26Remove autoconf supportChris Bieneman1-17/+0
Summary: This patch is provided in preparation for removing autoconf on 1/26. The proposal to remove autoconf on 1/26 was discussed on the llvm-dev thread here: http://lists.llvm.org/pipermail/llvm-dev/2016-January/093875.html "I felt a great disturbance in the [build system], as if millions of [makefiles] suddenly cried out in terror and were suddenly silenced. I fear something [amazing] has happened." - Obi Wan Kenobi Reviewers: chandlerc, grosbach, bob.wilson, tstellarAMD, echristo, whitequark Subscribers: chfast, simoncook, emaste, jholewinski, tberghammer, jfb, danalbert, srhines, arsenm, dschuff, jyknight, dsanders, joker.eph, llvm-commits Differential Revision: http://reviews.llvm.org/D16471 llvm-svn: 258861
2016-01-26Update the comments for the macho-invalid-zero-ncmds test and fixKevin Enderby1-0/+4
llvm-objdump when printing the Mach Header to print the unknown cputype and cpusubtype fields as decimal instead of not printing them at all. And change the test to check for that. llvm-svn: 258826
2016-01-26Reflect the MC/MCDisassembler split on the include/ level.Benjamin Kramer2-4/+4
No functional change, just moving code around. llvm-svn: 258818
2016-01-26Re-submit r256008 "Improve DWARFDebugFrame::parse to also handle __eh_frame."Igor Laevsky3-259/+21
Originally this change was causing failures on windows buildbots. But those problems were fixed in r258806. llvm-svn: 258811
2016-01-13[llvm-readobj] Remove dead code. Add an assertion instead.Davide Italiano1-2/+3
When we arrive at the end of the function, the validation of the object has been done already. In theory, so, we should never arrive here with something broken as the object isn't mutated. Practice sometimes proves theory to be wrong, so leave an assertion instead, as suggested by David Blaikie, to catch bugs. llvm-svn: 257570
2016-01-13[llvm-objdump] Use report_error() and improve error coverage.Davide Italiano1-4/+2
llvm-svn: 257561
2016-01-13For llvm-objdump, add the option -private-header (without the trailing ’s’)Kevin Enderby3-11/+46
to only print the first private header. Which for Mach-O files only prints the Mach header and not the subsequent load commands. Which is used by scripts to match what the darwin otool(1) with the -h flag does without the -l flag. For non-Mach-O files it has the same functionality as -private-headers (with the trailing ’s’). rdar://24158331 llvm-svn: 257548
2016-01-12COFF: Teach llvm-objdump how to dump DLL forwarder symbols.Rui Ueyama1-1/+18
llvm-svn: 257539
2016-01-12[WebAssembly] Add a EM_WEBASSEMBLY value, and several bits of code that use it.Dan Gohman1-0/+17
A request has been made to the official registry, but an official value is not yet available. This patch uses a temporary value in order to support development. When an official value is recieved, the value of EM_WEBASSEMBLY will be updated. llvm-svn: 257517
2015-12-29[llvm-objdump] Mark noreturn function as such.Davide Italiano2-2/+4
Match attribute in the header to make MSVC happy. llvm-svn: 256560
2015-12-25[llvm-objdump] Use stderr and not stdout for fatal errors.Davide Italiano1-2/+2
llvm-svn: 256423
2015-12-21[llvm-objdump] Use appropriate helper. NFC.Davide Italiano1-2/+1
llvm-svn: 256156
2015-12-20[llvm-objdump] Move COFF function to where it belongs.Davide Italiano3-50/+51
Ideally much more stuff should be moved out of llvm-objdump.cpp, but that will happen later. llvm-svn: 256118
2015-12-19[llvm-objdump] Fail early if we can't parse the object header.Davide Italiano1-4/+5
llvm-svn: 256108
2015-12-18Revert "Improve DWARFDebugFrame::parse to also handle __eh_frame."Pete Cooper3-21/+259
This reverts commit r256008. Its breaking multiple buildbots, although works for me locally. llvm-svn: 256013
2015-12-18Improve DWARFDebugFrame::parse to also handle __eh_frame.Pete Cooper3-259/+21
LLVM MC has single methods which can handle the output of EH frame and DWARF CIE's and FDE's. This code improves DWARFDebugFrame::parse to do the same for parsing. This also allows llvm-objdump to support the --dwarf=frames option which objdump supports. This option dumps the .eh_frame section using the new code in DWARFDebugFrame::parse. http://reviews.llvm.org/D15535 Reviewed by Rafael Espindola. llvm-svn: 256008
2015-12-17[llvm-objdump] Use report_fatal_error() for a more uniform error handling.Davide Italiano1-29/+13
llvm-svn: 255871
2015-12-15[llvm-objdump/MachODump] Shrink code a little bit. NFC.Davide Italiano1-4/+1
llvm-svn: 255701
2015-12-14Factor out some duplication. NFC.Pete Cooper1-44/+20
llvm-svn: 255569
2015-12-14Start implementing FDE dumping when printing the eh_frame.Pete Cooper1-5/+107
This code adds some simple decoding of the FDE's in an eh_frame. There's still more to be done in terms of error handling and verification. Also, we need to be able to decode the CFI's. llvm-svn: 255550
2015-12-14Print the eh_frame section in MachoDump.Pete Cooper1-1/+180
This is the start of work to dump the contents of the eh_frame section. It currently emits CIE entries. FDE entries will come later. It also needs improved error checking which will follow soon. http://reviews.llvm.org/D15502 Reviewed by Kevin Enderby and Lang Hames. llvm-svn: 255546
2015-12-12[llvm-objdump/MachoDump] Simplify.Davide Italiano1-7/+3
llvm-svn: 255443
2015-12-11[llvm-objdump/MachODump] Reduce code duplication.Davide Italiano1-69/+41
llvm-svn: 255380