mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-01 05:01:59 +01:00
Move getELFDynamicSymbolIterators to a public header.
llvm-svn: 202264
This commit is contained in:
parent
c90c7cc416
commit
dbc8026a28
@ -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
|
/// This is a generic interface for retrieving GNU symbol version
|
||||||
/// information from an ELFObjectFile.
|
/// information from an ELFObjectFile.
|
||||||
static inline error_code GetELFSymbolVersion(const ObjectFile *Obj,
|
static inline error_code GetELFSymbolVersion(const ObjectFile *Obj,
|
||||||
|
@ -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) {
|
static void dumpSymbolNamesFromObject(SymbolicFile *Obj) {
|
||||||
basic_symbol_iterator IBegin = Obj->symbol_begin();
|
basic_symbol_iterator IBegin = Obj->symbol_begin();
|
||||||
basic_symbol_iterator IEnd = Obj->symbol_end();
|
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());
|
error("File format has no dynamic symbol table", Obj->getFileName());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
getDynamicSymbolIterators(Obj, IBegin, IEnd);
|
std::pair<symbol_iterator, symbol_iterator> IDyn =
|
||||||
|
getELFDynamicSymbolIterators(Obj);
|
||||||
|
IBegin = IDyn.first;
|
||||||
|
IEnd = IDyn.second;
|
||||||
}
|
}
|
||||||
std::string NameBuffer;
|
std::string NameBuffer;
|
||||||
raw_string_ostream OS(NameBuffer);
|
raw_string_ostream OS(NameBuffer);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user