Skip to content
This repository was archived by the owner on Feb 5, 2019. It is now read-only.

Commit 2895793

Browse files
author
Alexey Samsonov
committed
Move getELFDynamicSymbolIterators to a public header.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@202264 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent 18f2091 commit 2895793

File tree

2 files changed

+23
-25
lines changed

2 files changed

+23
-25
lines changed

include/llvm/Object/ELFObjectFile.h

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1015,6 +1015,25 @@ static inline error_code getELFRelocationAddend(const RelocationRef R,
10151015
llvm_unreachable("Object passed to getELFRelocationAddend() is not ELF");
10161016
}
10171017

1018+
static inline std::pair<symbol_iterator, symbol_iterator>
1019+
getELFDynamicSymbolIterators(SymbolicFile *Obj) {
1020+
if (const ELF32LEObjectFile *ELF = dyn_cast<ELF32LEObjectFile>(Obj))
1021+
return std::make_pair(ELF->dynamic_symbol_begin(),
1022+
ELF->dynamic_symbol_end());
1023+
if (const ELF64LEObjectFile *ELF = dyn_cast<ELF64LEObjectFile>(Obj))
1024+
return std::make_pair(ELF->dynamic_symbol_begin(),
1025+
ELF->dynamic_symbol_end());
1026+
if (const ELF32BEObjectFile *ELF = dyn_cast<ELF32BEObjectFile>(Obj))
1027+
return std::make_pair(ELF->dynamic_symbol_begin(),
1028+
ELF->dynamic_symbol_end());
1029+
if (const ELF64BEObjectFile *ELF = cast<ELF64BEObjectFile>(Obj))
1030+
return std::make_pair(ELF->dynamic_symbol_begin(),
1031+
ELF->dynamic_symbol_end());
1032+
1033+
llvm_unreachable(
1034+
"Object passed to getELFDynamicSymbolIterators() is not ELF");
1035+
}
1036+
10181037
/// This is a generic interface for retrieving GNU symbol version
10191038
/// information from an ELFObjectFile.
10201039
static inline error_code GetELFSymbolVersion(const ObjectFile *Obj,

tools/llvm-nm/llvm-nm.cpp

Lines changed: 4 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -462,30 +462,6 @@ static char getNMTypeChar(SymbolicFile *Obj, basic_symbol_iterator I) {
462462
return Ret;
463463
}
464464

465-
static void getDynamicSymbolIterators(SymbolicFile *Obj,
466-
basic_symbol_iterator &Begin,
467-
basic_symbol_iterator &End) {
468-
if (ELF32LEObjectFile *ELF = dyn_cast<ELF32LEObjectFile>(Obj)) {
469-
Begin = ELF->dynamic_symbol_begin();
470-
End = ELF->dynamic_symbol_end();
471-
return;
472-
}
473-
if (ELF64LEObjectFile *ELF = dyn_cast<ELF64LEObjectFile>(Obj)) {
474-
Begin = ELF->dynamic_symbol_begin();
475-
End = ELF->dynamic_symbol_end();
476-
return;
477-
}
478-
if (ELF32BEObjectFile *ELF = dyn_cast<ELF32BEObjectFile>(Obj)) {
479-
Begin = ELF->dynamic_symbol_begin();
480-
End = ELF->dynamic_symbol_end();
481-
return;
482-
}
483-
ELF64BEObjectFile *ELF = cast<ELF64BEObjectFile>(Obj);
484-
Begin = ELF->dynamic_symbol_begin();
485-
End = ELF->dynamic_symbol_end();
486-
return;
487-
}
488-
489465
static void dumpSymbolNamesFromObject(SymbolicFile *Obj) {
490466
basic_symbol_iterator IBegin = Obj->symbol_begin();
491467
basic_symbol_iterator IEnd = Obj->symbol_end();
@@ -494,7 +470,10 @@ static void dumpSymbolNamesFromObject(SymbolicFile *Obj) {
494470
error("File format has no dynamic symbol table", Obj->getFileName());
495471
return;
496472
}
497-
getDynamicSymbolIterators(Obj, IBegin, IEnd);
473+
std::pair<symbol_iterator, symbol_iterator> IDyn =
474+
getELFDynamicSymbolIterators(Obj);
475+
IBegin = IDyn.first;
476+
IEnd = IDyn.second;
498477
}
499478
std::string NameBuffer;
500479
raw_string_ostream OS(NameBuffer);

0 commit comments

Comments
 (0)