diff options
| author | 2019-06-23 21:36:31 +0000 | |
|---|---|---|
| committer | 2019-06-23 21:36:31 +0000 | |
| commit | 23f101f37937a1bd4a29726cab2f76e0fb038b35 (patch) | |
| tree | f7da7d6b32c2e07114da399150bfa88d72187012 /gnu/llvm/tools/llvm-rtdyld/llvm-rtdyld.cpp | |
| parent | sort previous; ok deraadt (diff) | |
| download | wireguard-openbsd-23f101f37937a1bd4a29726cab2f76e0fb038b35.tar.xz wireguard-openbsd-23f101f37937a1bd4a29726cab2f76e0fb038b35.zip | |
Import LLVM 8.0.0 release including clang, lld and lldb.
Diffstat (limited to 'gnu/llvm/tools/llvm-rtdyld/llvm-rtdyld.cpp')
| -rw-r--r-- | gnu/llvm/tools/llvm-rtdyld/llvm-rtdyld.cpp | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/gnu/llvm/tools/llvm-rtdyld/llvm-rtdyld.cpp b/gnu/llvm/tools/llvm-rtdyld/llvm-rtdyld.cpp index 54db1ec113f..975638ed82d 100644 --- a/gnu/llvm/tools/llvm-rtdyld/llvm-rtdyld.cpp +++ b/gnu/llvm/tools/llvm-rtdyld/llvm-rtdyld.cpp @@ -88,25 +88,30 @@ CheckFiles("check", cl::desc("File containing RuntimeDyld verifier checks."), cl::ZeroOrMore); -static cl::opt<uint64_t> +// Tracking BUG: 19665 +// http://llvm.org/bugs/show_bug.cgi?id=19665 +// +// Do not change these options to cl::opt<uint64_t> since this silently breaks +// argument parsing. +static cl::opt<unsigned long long> PreallocMemory("preallocate", cl::desc("Allocate memory upfront rather than on-demand"), cl::init(0)); -static cl::opt<uint64_t> +static cl::opt<unsigned long long> TargetAddrStart("target-addr-start", cl::desc("For -verify only: start of phony target address " "range."), cl::init(4096), // Start at "page 1" - no allocating at "null". cl::Hidden); -static cl::opt<uint64_t> +static cl::opt<unsigned long long> TargetAddrEnd("target-addr-end", cl::desc("For -verify only: end of phony target address range."), cl::init(~0ULL), cl::Hidden); -static cl::opt<uint64_t> +static cl::opt<unsigned long long> TargetSectionSep("target-section-sep", cl::desc("For -verify only: Separation between sections in " "phony target address space."), @@ -304,7 +309,7 @@ static int printLineInfoForInput(bool LoadObjects, bool UseDebugObj) { if (!MaybeObj) { std::string Buf; raw_string_ostream OS(Buf); - logAllUnhandledErrors(MaybeObj.takeError(), OS, ""); + logAllUnhandledErrors(MaybeObj.takeError(), OS); OS.flush(); ErrorAndExit("unable to create object file: '" + Buf + "'"); } @@ -433,7 +438,7 @@ static int executeInput() { if (!MaybeObj) { std::string Buf; raw_string_ostream OS(Buf); - logAllUnhandledErrors(MaybeObj.takeError(), OS, ""); + logAllUnhandledErrors(MaybeObj.takeError(), OS); OS.flush(); ErrorAndExit("unable to create object file: '" + Buf + "'"); } @@ -577,7 +582,11 @@ static void remapSectionsAndSymbols(const llvm::Triple &TargetTriple, if (LoadAddr && *LoadAddr != static_cast<uint64_t>( reinterpret_cast<uintptr_t>(Tmp->first))) { - AlreadyAllocated[*LoadAddr] = Tmp->second; + // A section will have a LoadAddr of 0 if it wasn't loaded for whatever + // reason (e.g. zero byte COFF sections). Don't include those sections in + // the allocation map. + if (*LoadAddr != 0) + AlreadyAllocated[*LoadAddr] = Tmp->second; Worklist.erase(Tmp); } } @@ -701,7 +710,7 @@ static int linkAndVerify() { if (!MaybeObj) { std::string Buf; raw_string_ostream OS(Buf); - logAllUnhandledErrors(MaybeObj.takeError(), OS, ""); + logAllUnhandledErrors(MaybeObj.takeError(), OS); OS.flush(); ErrorAndExit("unable to create object file: '" + Buf + "'"); } |
