mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-01 05:01:59 +01:00
[Object/ELF] Provide helpers for symbol types.
These were, originally, in a different form in lld. They can be reused for other tools, e.g. llvm-readobj. llvm-svn: 239231
This commit is contained in:
parent
55a3d56f02
commit
04d09c03d4
@ -154,6 +154,7 @@ struct Elf_Sym_Base<ELFType<TargetEndianness, true>> {
|
||||
template <class ELFT>
|
||||
struct Elf_Sym_Impl : Elf_Sym_Base<ELFT> {
|
||||
using Elf_Sym_Base<ELFT>::st_info;
|
||||
using Elf_Sym_Base<ELFT>::st_shndx;
|
||||
using Elf_Sym_Base<ELFT>::st_other;
|
||||
|
||||
// These accessors and mutators correspond to the ELF32_ST_BIND,
|
||||
@ -176,6 +177,28 @@ struct Elf_Sym_Impl : Elf_Sym_Base<ELFT> {
|
||||
assert(v < 4 && "Invalid value for visibility");
|
||||
st_other = (st_other & ~0x3) | v;
|
||||
}
|
||||
|
||||
bool isAbsolute() const { return st_shndx == ELF::SHN_ABS; }
|
||||
bool isCommon() const {
|
||||
return !isUndefined() &&
|
||||
!(st_shndx >= ELF::SHN_LORESERVE && st_shndx < ELF::SHN_ABS);
|
||||
}
|
||||
bool isDefined() const {
|
||||
return !isUndefined() &&
|
||||
(!(st_shndx >= ELF::SHN_LORESERVE &&
|
||||
st_shndx <= ELF::SHN_HIRESERVE) ||
|
||||
st_shndx == ELF::SHN_XINDEX);
|
||||
}
|
||||
bool isProcessorSpecific() const {
|
||||
return st_shndx >= ELF::SHN_LOPROC && st_shndx <= ELF::SHN_HIPROC;
|
||||
}
|
||||
bool isOSSpecific() const {
|
||||
return st_shndx >= ELF::SHN_LOOS && st_shndx <= ELF::SHN_HIOS;
|
||||
}
|
||||
bool isReserved() const {
|
||||
return st_shndx > ELF::SHN_HIOS && st_shndx < ELF::SHN_ABS;
|
||||
}
|
||||
bool isUndefined() const { return st_shndx == ELF::SHN_UNDEF; }
|
||||
};
|
||||
|
||||
/// Elf_Versym: This is the structure of entries in the SHT_GNU_versym section
|
||||
|
Loading…
x
Reference in New Issue
Block a user