diff options
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(). |
