Allow SMUL_LOHI and UMUL_LOHI to be narrow to MUL on targets where MUL is Custom...
[oota-llvm.git] / lib / Object / COFFObjectFile.cpp
index 007d28e6bdf1324f3c1e0a1bba737ac2c527cc91..ec8989d5c67cb07ffc35abdad0b8e36be568ebdd 100644 (file)
 using namespace llvm;
 using namespace object;
 
-namespace {
 using support::ulittle8_t;
 using support::ulittle16_t;
 using support::ulittle32_t;
 using support::little16_t;
-}
 
-namespace {
 // Returns false if size is greater than the buffer size. And sets ec.
-bool checkSize(const MemoryBuffer *M, error_code &EC, uint64_t Size) {
+static bool checkSize(const MemoryBuffer *M, error_code &EC, uint64_t Size) {
   if (M->getBufferSize() < Size) {
     EC = object_error::unexpected_eof;
     return false;
@@ -43,8 +40,8 @@ bool checkSize(const MemoryBuffer *M, error_code &EC, uint64_t Size) {
 // Sets Obj unless any bytes in [addr, addr + size) fall outsize of m.
 // Returns unexpected_eof if error.
 template<typename T>
-error_code getObject(const T *&Obj, const MemoryBuffer *M, const uint8_t *Ptr,
-                     const size_t Size = sizeof(T)) {
+static error_code getObject(const T *&Obj, const MemoryBuffer *M,
+                            const uint8_t *Ptr, const size_t Size = sizeof(T)) {
   uintptr_t Addr = uintptr_t(Ptr);
   if (Addr + Size < Addr ||
       Addr + Size < Size ||
@@ -54,7 +51,6 @@ error_code getObject(const T *&Obj, const MemoryBuffer *M, const uint8_t *Ptr,
   Obj = reinterpret_cast<const T *>(Addr);
   return object_error::success;
 }
-}
 
 const coff_symbol *COFFObjectFile::toSymb(DataRefImpl Ref) const {
   const coff_symbol *Addr = reinterpret_cast<const coff_symbol*>(Ref.p);
@@ -462,7 +458,8 @@ error_code COFFObjectFile::initExportTablePtr() {
   uintptr_t IntPtr = 0;
   if (error_code EC = getRvaPtr(ExportTableRva, IntPtr))
     return EC;
-  ExportDirectory = reinterpret_cast<const export_directory_table_entry *>(IntPtr);
+  ExportDirectory =
+      reinterpret_cast<const export_directory_table_entry *>(IntPtr);
   return object_error::success;
 }
 
@@ -737,7 +734,8 @@ ArrayRef<uint8_t> COFFObjectFile::getSymbolAuxData(
          == 0 && "Aux Symbol data did not point to the beginning of a symbol");
 # endif
   }
-  return ArrayRef<uint8_t>(Aux, Symbol->NumberOfAuxSymbols * sizeof(coff_symbol));
+  return ArrayRef<uint8_t>(Aux,
+                           Symbol->NumberOfAuxSymbols * sizeof(coff_symbol));
 }
 
 error_code COFFObjectFile::getSectionName(const coff_section *Sec,
@@ -953,6 +951,22 @@ ExportDirectoryEntryRef::getNext(ExportDirectoryEntryRef &Result) const {
   return object_error::success;
 }
 
+// Returns the name of the current export symbol. If the symbol is exported only
+// by ordinal, the empty string is set as a result.
+error_code ExportDirectoryEntryRef::getDllName(StringRef &Result) const {
+  uintptr_t IntPtr = 0;
+  if (error_code EC = OwningObject->getRvaPtr(ExportTable->NameRVA, IntPtr))
+    return EC;
+  Result = StringRef(reinterpret_cast<const char *>(IntPtr));
+  return object_error::success;
+}
+
+// Returns the starting ordinal number.
+error_code ExportDirectoryEntryRef::getOrdinalBase(uint32_t &Result) const {
+  Result = ExportTable->OrdinalBase;
+  return object_error::success;
+}
+
 // Returns the export ordinal of the current export symbol.
 error_code ExportDirectoryEntryRef::getOrdinal(uint32_t &Result) const {
   Result = ExportTable->OrdinalBase + Index;
@@ -965,14 +979,15 @@ error_code ExportDirectoryEntryRef::getExportRVA(uint32_t &Result) const {
   if (error_code EC = OwningObject->getRvaPtr(
           ExportTable->ExportAddressTableRVA, IntPtr))
     return EC;
-  const export_address_table_entry *entry = reinterpret_cast<const export_address_table_entry *>(IntPtr);
+  const export_address_table_entry *entry =
+      reinterpret_cast<const export_address_table_entry *>(IntPtr);
   Result = entry[Index].ExportRVA;
   return object_error::success;
 }
 
 // Returns the name of the current export symbol. If the symbol is exported only
 // by ordinal, the empty string is set as a result.
-error_code ExportDirectoryEntryRef::getName(StringRef &Result) const {
+error_code ExportDirectoryEntryRef::getSymbolName(StringRef &Result) const {
   uintptr_t IntPtr = 0;
   if (error_code EC = OwningObject->getRvaPtr(
           ExportTable->OrdinalTableRVA, IntPtr))
@@ -1003,4 +1018,4 @@ ObjectFile *ObjectFile::createCOFFObjectFile(MemoryBuffer *Object) {
   error_code EC;
   return new COFFObjectFile(Object, EC);
 }
-} // end namespace llvm
+}