diff options
Diffstat (limited to 'contrib/llvm/lib/Object/COFFObjectFile.cpp')
| -rw-r--r-- | contrib/llvm/lib/Object/COFFObjectFile.cpp | 20 | 
1 files changed, 20 insertions, 0 deletions
| diff --git a/contrib/llvm/lib/Object/COFFObjectFile.cpp b/contrib/llvm/lib/Object/COFFObjectFile.cpp index 579c8dde366a..9a760d86e7e2 100644 --- a/contrib/llvm/lib/Object/COFFObjectFile.cpp +++ b/contrib/llvm/lib/Object/COFFObjectFile.cpp @@ -650,6 +650,23 @@ std::error_code COFFObjectFile::initDebugDirectoryPtr() {    return std::error_code();  } +std::error_code COFFObjectFile::initLoadConfigPtr() { +  // Get the RVA of the debug directory. Do nothing if it does not exist. +  const data_directory *DataEntry; +  if (getDataDirectory(COFF::LOAD_CONFIG_TABLE, DataEntry)) +    return std::error_code(); + +  // Do nothing if the RVA is NULL. +  if (DataEntry->RelativeVirtualAddress == 0) +    return std::error_code(); +  uintptr_t IntPtr = 0; +  if (std::error_code EC = getRvaPtr(DataEntry->RelativeVirtualAddress, IntPtr)) +    return EC; + +  LoadConfig = (const void *)IntPtr; +  return std::error_code(); +} +  COFFObjectFile::COFFObjectFile(MemoryBufferRef Object, std::error_code &EC)      : ObjectFile(Binary::ID_COFF, Object), COFFHeader(nullptr),        COFFBigObjHeader(nullptr), PE32Header(nullptr), PE32PlusHeader(nullptr), @@ -784,6 +801,9 @@ COFFObjectFile::COFFObjectFile(MemoryBufferRef Object, std::error_code &EC)    if ((EC = initDebugDirectoryPtr()))      return; +  if ((EC = initLoadConfigPtr())) +    return; +    EC = std::error_code();  } | 
