mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-15 09:51:00 +00:00
[llvm-readobj] - Simplify .gnu.version_d dumping.
This is similar to D58048. Instead of scanning the dynamic table to read the DT_VERDEFNUM, we could take it from the sh_info field. (https://docs.oracle.com/cd/E19683-01/816-1386/chapter6-94076/index.html) The patch does this. llvm-svn: 354270
This commit is contained in:
parent
afd2d12460
commit
c54720f1f4
@ -652,16 +652,6 @@ static void printVersionDefinitionSection(ELFDumper<ELFT> *Dumper,
|
||||
if (!Sec)
|
||||
return;
|
||||
|
||||
// The number of entries in the section SHT_GNU_verdef
|
||||
// is determined by DT_VERDEFNUM tag.
|
||||
unsigned VerDefsNum = 0;
|
||||
for (const typename ELFO::Elf_Dyn &Dyn : Dumper->dynamic_table()) {
|
||||
if (Dyn.d_tag == DT_VERDEFNUM) {
|
||||
VerDefsNum = Dyn.d_un.d_val;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
const uint8_t *SecStartAddress =
|
||||
(const uint8_t *)Obj->base() + Sec->sh_offset;
|
||||
const uint8_t *SecEndAddress = SecStartAddress + Sec->sh_size;
|
||||
@ -669,6 +659,7 @@ static void printVersionDefinitionSection(ELFDumper<ELFT> *Dumper,
|
||||
const typename ELFO::Elf_Shdr *StrTab =
|
||||
unwrapOrError(Obj->getSection(Sec->sh_link));
|
||||
|
||||
unsigned VerDefsNum = Sec->sh_info;
|
||||
while (VerDefsNum--) {
|
||||
if (P + sizeof(VerDef) > SecEndAddress)
|
||||
report_fatal_error("invalid offset in the section");
|
||||
|
Loading…
x
Reference in New Issue
Block a user