llvm-project/llvm/tools
Kevin Enderby 3fcdf6ae2a Thread Expected<...> up from createMachOObjectFile() to allow llvm-objdump 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-06 22:14:09 +00:00
..
bugpoint ValueMapper: Add support for seeding metadata with nullptr 2016-04-02 17:04:38 +00:00
bugpoint-passes Remove autoconf support 2016-01-26 21:29:08 +00:00
dsymutil Thread Expected<...> up from createMachOObjectFile() to allow llvm-objdump to produce a real error message 2016-04-06 22:14:09 +00:00
gold [gold] Save bitcode for module partitions (save-temps + split codegen). 2016-04-06 18:32:13 +00:00
llc Add a flag to the LLVMContext to disable name for Value other than GlobalValue 2016-03-10 01:28:54 +00:00
lli Thread Expected<...> up from createMachOObjectFile() to allow llvm-objdump to produce a real error message 2016-04-06 22:14:09 +00:00
llvm-ar Remove autoconf support 2016-01-26 21:29:08 +00:00
llvm-as clang-format llvm-as.cpp (NFC) 2016-04-04 21:06:17 +00:00
llvm-as-fuzzer [libFuzzer] make LLVMFuzzerTestOneInput (the fuzzer target function) return int instead of void. The actual return value is not *yet* used (and expected to be 0). This change is API breaking, so the fuzzers will need to be updated. 2015-10-02 23:34:06 +00:00
llvm-bcanalyzer Add a module Hash in the bitcode and the combined index, implementing a kind of "build-id" 2016-04-01 05:33:11 +00:00
llvm-c-test Revert "Fix Clang-tidy modernize-deprecated-headers warnings in remaining files; other minor fixes." 2016-04-05 20:45:04 +00:00
llvm-config llvm-config: fix --libs on Linux 2016-03-14 21:39:58 +00:00
llvm-cov Thread Expected<...> up from createMachOObjectFile() to allow llvm-objdump to produce a real error message 2016-04-06 22:14:09 +00:00
llvm-cxxdump Thread Expected<...> up from createMachOObjectFile() to allow llvm-objdump to produce a real error message 2016-04-06 22:14:09 +00:00
llvm-diff Remove uses of builtin comma operator. 2016-02-18 22:09:30 +00:00
llvm-dis Remove autoconf support 2016-01-26 21:29:08 +00:00
llvm-dwarfdump Thread Expected<...> up from createMachOObjectFile() to allow llvm-objdump to produce a real error message 2016-04-06 22:14:09 +00:00
llvm-dwp Thread Expected<...> up from createMachOObjectFile() to allow llvm-objdump to produce a real error message 2016-04-06 22:14:09 +00:00
llvm-extract Remove autoconf support 2016-01-26 21:29:08 +00:00
llvm-go Remove autoconf support 2016-01-26 21:29:08 +00:00
llvm-jitlistener Remove autoconf support 2016-01-26 21:29:08 +00:00
llvm-link [ThinLTO] Use bulk importing in llvm-link 2016-03-24 19:52:20 +00:00
llvm-lto Clean up calls to WriteBitcodeToFile (NFC) 2016-04-04 21:19:31 +00:00
llvm-mc MC: Don't access the filesystem in MCContext's constructor 2016-03-22 22:24:29 +00:00
llvm-mc-fuzzer [libFuzzer] make LLVMFuzzerTestOneInput (the fuzzer target function) return int instead of void. The actual return value is not *yet* used (and expected to be 0). This change is API breaking, so the fuzzers will need to be updated. 2015-10-02 23:34:06 +00:00
llvm-mcmarkup Remove autoconf support 2016-01-26 21:29:08 +00:00
llvm-nm Thread Expected<...> up from createMachOObjectFile() to allow llvm-objdump to produce a real error message 2016-04-06 22:14:09 +00:00
llvm-objdump Thread Expected<...> up from createMachOObjectFile() to allow llvm-objdump to produce a real error message 2016-04-06 22:14:09 +00:00
llvm-pdbdump [llvm-pdbdump] Dump line table information. 2016-03-08 21:42:24 +00:00
llvm-profdata Add a profile summary class specific to instrumentation profiles. 2016-02-17 18:18:47 +00:00
llvm-readobj Thread Expected<...> up from createMachOObjectFile() to allow llvm-objdump to produce a real error message 2016-04-06 22:14:09 +00:00
llvm-rtdyld Thread Expected<...> up from createMachOObjectFile() to allow llvm-objdump to produce a real error message 2016-04-06 22:14:09 +00:00
llvm-shlib llvm-shlib: Remove the option to override __cxa_atexit 2016-03-14 21:54:45 +00:00
llvm-size Thread Expected<...> up from createMachOObjectFile() to allow llvm-objdump to produce a real error message 2016-04-06 22:14:09 +00:00
llvm-split Remove personality for declarations in CloneModule. 2016-03-28 21:37:02 +00:00
llvm-stress Remove autoconf support 2016-01-26 21:29:08 +00:00
llvm-symbolizer Remove autoconf support 2016-01-26 21:29:08 +00:00
lto Add a libLTO API to stop/restart ThinLTO between optimizations and CodeGen 2016-04-01 06:47:02 +00:00
msbuild MSBuild integration: fix the loop in install.bat 2014-09-30 22:30:06 +00:00
obj2yaml Thread Expected<...> up from createMachOObjectFile() to allow llvm-objdump to produce a real error message 2016-04-06 22:14:09 +00:00
opt [PM] Make the AnalysisManager parameter to run methods a reference. 2016-03-11 11:05:24 +00:00
sancov Thread Expected<...> up from createMachOObjectFile() to allow llvm-objdump to produce a real error message 2016-04-06 22:14:09 +00:00
sanstats Revert "Fix Clang-tidy modernize-deprecated-headers warnings in remaining files; other minor fixes." 2016-04-05 20:45:04 +00:00
verify-uselistorder Remove autoconf support 2016-01-26 21:29:08 +00:00
xcode-toolchain [CMake] [Darwin] Add support for generating Xcode-compatible toolchains that xcodebuild and xcrun can search 2015-10-15 20:09:01 +00:00
yaml2obj [yaml2obj, COFF] Correctly handle section alignment 2016-03-17 05:43:26 +00:00
CMakeLists.txt [CMake] Add the gold plugin before clang 2016-02-26 21:07:04 +00:00
LLVMBuild.txt llvm-dwp: Initial layout 2015-12-01 00:48:34 +00:00