diff options
| author | 2018-04-06 14:26:03 +0000 | |
|---|---|---|
| committer | 2018-04-06 14:26:03 +0000 | |
| commit | bdabc2f19ffb9e20600dad6e8a300842a7bda50e (patch) | |
| tree | c50e7b2e5449b074651bb82a58517a8ebc4a8cf7 /gnu/llvm/tools/llvm-rtdyld/llvm-rtdyld.cpp | |
| parent | Print a 'p' flag for file descriptors that were opened after pledge(2). (diff) | |
| download | wireguard-openbsd-bdabc2f19ffb9e20600dad6e8a300842a7bda50e.tar.xz wireguard-openbsd-bdabc2f19ffb9e20600dad6e8a300842a7bda50e.zip | |
Import LLVM 6.0.1 release including clang, lld and lldb.
"where is the kaboom?" deraadt@
Diffstat (limited to 'gnu/llvm/tools/llvm-rtdyld/llvm-rtdyld.cpp')
| -rw-r--r-- | gnu/llvm/tools/llvm-rtdyld/llvm-rtdyld.cpp | 44 |
1 files changed, 28 insertions, 16 deletions
diff --git a/gnu/llvm/tools/llvm-rtdyld/llvm-rtdyld.cpp b/gnu/llvm/tools/llvm-rtdyld/llvm-rtdyld.cpp index ba130ce80be..b09594622ca 100644 --- a/gnu/llvm/tools/llvm-rtdyld/llvm-rtdyld.cpp +++ b/gnu/llvm/tools/llvm-rtdyld/llvm-rtdyld.cpp @@ -24,7 +24,6 @@ #include "llvm/MC/MCInstrInfo.h" #include "llvm/MC/MCRegisterInfo.h" #include "llvm/MC/MCSubtargetInfo.h" -#include "llvm/Object/MachO.h" #include "llvm/Object/SymbolSize.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/DynamicLibrary.h" @@ -37,7 +36,6 @@ #include "llvm/Support/TargetSelect.h" #include "llvm/Support/raw_ostream.h" #include <list> -#include <system_error> using namespace llvm; using namespace llvm::object; @@ -178,10 +176,14 @@ public: void deregisterEHFrames() override {} void preallocateSlab(uint64_t Size) { - std::string Err; - sys::MemoryBlock MB = sys::Memory::AllocateRWX(Size, nullptr, &Err); + std::error_code EC; + sys::MemoryBlock MB = + sys::Memory::allocateMappedMemory(Size, nullptr, + sys::Memory::MF_READ | + sys::Memory::MF_WRITE, + EC); if (!MB.base()) - report_fatal_error("Can't allocate enough memory: " + Err); + report_fatal_error("Can't allocate enough memory: " + EC.message()); PreallocSlab = MB; UsePreallocation = true; @@ -222,10 +224,14 @@ uint8_t *TrivialMemoryManager::allocateCodeSection(uintptr_t Size, if (UsePreallocation) return allocateFromSlab(Size, Alignment, true /* isCode */); - std::string Err; - sys::MemoryBlock MB = sys::Memory::AllocateRWX(Size, nullptr, &Err); + std::error_code EC; + sys::MemoryBlock MB = + sys::Memory::allocateMappedMemory(Size, nullptr, + sys::Memory::MF_READ | + sys::Memory::MF_WRITE, + EC); if (!MB.base()) - report_fatal_error("MemoryManager allocation failed: " + Err); + report_fatal_error("MemoryManager allocation failed: " + EC.message()); FunctionMemory.push_back(MB); return (uint8_t*)MB.base(); } @@ -242,10 +248,14 @@ uint8_t *TrivialMemoryManager::allocateDataSection(uintptr_t Size, if (UsePreallocation) return allocateFromSlab(Size, Alignment, false /* isCode */); - std::string Err; - sys::MemoryBlock MB = sys::Memory::AllocateRWX(Size, nullptr, &Err); + std::error_code EC; + sys::MemoryBlock MB = + sys::Memory::allocateMappedMemory(Size, nullptr, + sys::Memory::MF_READ | + sys::Memory::MF_WRITE, + EC); if (!MB.base()) - report_fatal_error("MemoryManager allocation failed: " + Err); + report_fatal_error("MemoryManager allocation failed: " + EC.message()); DataMemory.push_back(MB); return (uint8_t*)MB.base(); } @@ -324,8 +334,8 @@ static int printLineInfoForInput(bool LoadObjects, bool UseDebugObj) { } } - std::unique_ptr<DIContext> Context( - new DWARFContextInMemory(*SymbolObj,LoadedObjInfo.get())); + std::unique_ptr<DIContext> Context = + DWARFContext::create(*SymbolObj, LoadedObjInfo.get()); std::vector<std::pair<SymbolRef, uint64_t>> SymAddr = object::computeSymbolSizes(*SymbolObj); @@ -453,9 +463,11 @@ static int executeInput() { // Make sure the memory is executable. // setExecutable will call InvalidateInstructionCache. - std::string ErrorStr; - if (!sys::Memory::setExecutable(FM, &ErrorStr)) - ErrorAndExit("unable to mark function executable: '" + ErrorStr + "'"); + if (auto EC = sys::Memory::protectMappedMemory(FM, + sys::Memory::MF_READ | + sys::Memory::MF_EXEC)) + ErrorAndExit("unable to mark function executable: '" + EC.message() + + "'"); } // Dispatch to _main(). |
