Move getELFDynamicSymbolIterators to a public header.
authorAlexey Samsonov <samsonov@google.com>
Wed, 26 Feb 2014 12:51:19 +0000 (12:51 +0000)
committerAlexey Samsonov <samsonov@google.com>
Wed, 26 Feb 2014 12:51:19 +0000 (12:51 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@202264 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Object/ELFObjectFile.h
tools/llvm-nm/llvm-nm.cpp

index ae6b6068d50652e6848423990f2643353e802c77..917786fd22738b987f29f9835c166fe46fea27f5 100644 (file)
@@ -1015,6 +1015,25 @@ static inline error_code getELFRelocationAddend(const RelocationRef R,
   llvm_unreachable("Object passed to getELFRelocationAddend() is not ELF");
 }
 
   llvm_unreachable("Object passed to getELFRelocationAddend() is not ELF");
 }
 
+static inline std::pair<symbol_iterator, symbol_iterator>
+getELFDynamicSymbolIterators(SymbolicFile *Obj) {
+  if (const ELF32LEObjectFile *ELF = dyn_cast<ELF32LEObjectFile>(Obj))
+    return std::make_pair(ELF->dynamic_symbol_begin(),
+                          ELF->dynamic_symbol_end());
+  if (const ELF64LEObjectFile *ELF = dyn_cast<ELF64LEObjectFile>(Obj))
+    return std::make_pair(ELF->dynamic_symbol_begin(),
+                          ELF->dynamic_symbol_end());
+  if (const ELF32BEObjectFile *ELF = dyn_cast<ELF32BEObjectFile>(Obj))
+    return std::make_pair(ELF->dynamic_symbol_begin(),
+                          ELF->dynamic_symbol_end());
+  if (const ELF64BEObjectFile *ELF = cast<ELF64BEObjectFile>(Obj))
+    return std::make_pair(ELF->dynamic_symbol_begin(),
+                          ELF->dynamic_symbol_end());
+
+  llvm_unreachable(
+      "Object passed to getELFDynamicSymbolIterators() is not ELF");
+}
+
 /// This is a generic interface for retrieving GNU symbol version
 /// information from an ELFObjectFile.
 static inline error_code GetELFSymbolVersion(const ObjectFile *Obj,
 /// This is a generic interface for retrieving GNU symbol version
 /// information from an ELFObjectFile.
 static inline error_code GetELFSymbolVersion(const ObjectFile *Obj,
index d93177e245c408f38b88b9f2e1b6c04ddda1f03c..ffdc7737803c2c1da475fc6a7a552cceb530035d 100644 (file)
@@ -462,30 +462,6 @@ static char getNMTypeChar(SymbolicFile *Obj, basic_symbol_iterator I) {
   return Ret;
 }
 
   return Ret;
 }
 
-static void getDynamicSymbolIterators(SymbolicFile *Obj,
-                                      basic_symbol_iterator &Begin,
-                                      basic_symbol_iterator &End) {
-  if (ELF32LEObjectFile *ELF = dyn_cast<ELF32LEObjectFile>(Obj)) {
-    Begin = ELF->dynamic_symbol_begin();
-    End = ELF->dynamic_symbol_end();
-    return;
-  }
-  if (ELF64LEObjectFile *ELF = dyn_cast<ELF64LEObjectFile>(Obj)) {
-    Begin = ELF->dynamic_symbol_begin();
-    End = ELF->dynamic_symbol_end();
-    return;
-  }
-  if (ELF32BEObjectFile *ELF = dyn_cast<ELF32BEObjectFile>(Obj)) {
-    Begin = ELF->dynamic_symbol_begin();
-    End = ELF->dynamic_symbol_end();
-    return;
-  }
-  ELF64BEObjectFile *ELF = cast<ELF64BEObjectFile>(Obj);
-  Begin = ELF->dynamic_symbol_begin();
-  End = ELF->dynamic_symbol_end();
-  return;
-}
-
 static void dumpSymbolNamesFromObject(SymbolicFile *Obj) {
   basic_symbol_iterator IBegin = Obj->symbol_begin();
   basic_symbol_iterator IEnd = Obj->symbol_end();
 static void dumpSymbolNamesFromObject(SymbolicFile *Obj) {
   basic_symbol_iterator IBegin = Obj->symbol_begin();
   basic_symbol_iterator IEnd = Obj->symbol_end();
@@ -494,7 +470,10 @@ static void dumpSymbolNamesFromObject(SymbolicFile *Obj) {
       error("File format has no dynamic symbol table", Obj->getFileName());
       return;
     }
       error("File format has no dynamic symbol table", Obj->getFileName());
       return;
     }
-    getDynamicSymbolIterators(Obj, IBegin, IEnd);
+    std::pair<symbol_iterator, symbol_iterator> IDyn =
+        getELFDynamicSymbolIterators(Obj);
+    IBegin = IDyn.first;
+    IEnd = IDyn.second;
   }
   std::string NameBuffer;
   raw_string_ostream OS(NameBuffer);
   }
   std::string NameBuffer;
   raw_string_ostream OS(NameBuffer);