From 2efb9f7c3e75fa50cf2d0274057cbb076f0c8ff3 Mon Sep 17 00:00:00 2001 From: Adrian Prantl Date: Thu, 9 Jul 2015 02:14:49 +0000 Subject: [PATCH] Temporarily reverting 241765, 241768, and 241772 to unbreak the build bots. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241781 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Object/ELF.h | 79 ++++++++----------------- include/llvm/Object/ELFTypes.h | 18 ------ test/Object/Inputs/no-section-table.so | Bin 2544 -> 0 bytes test/Object/no-section-table.test | 8 --- tools/llvm-readobj/ELFDumper.cpp | 13 ---- tools/llvm-readobj/ObjDumper.h | 1 - tools/llvm-readobj/StreamWriter.h | 4 +- tools/llvm-readobj/llvm-readobj.cpp | 6 -- 8 files changed, 27 insertions(+), 102 deletions(-) delete mode 100644 test/Object/Inputs/no-section-table.so delete mode 100644 test/Object/no-section-table.test diff --git a/include/llvm/Object/ELF.h b/include/llvm/Object/ELF.h index 068fc32f3a2..3b0c548ffe1 100644 --- a/include/llvm/Object/ELF.h +++ b/include/llvm/Object/ELF.h @@ -16,7 +16,6 @@ #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/DenseMap.h" -#include "llvm/ADT/IntervalMap.h" #include "llvm/ADT/PointerIntPair.h" #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringSwitch.h" @@ -140,7 +139,6 @@ public: typedef Elf_Verneed_Impl Elf_Verneed; typedef Elf_Vernaux_Impl Elf_Vernaux; typedef Elf_Versym_Impl Elf_Versym; - typedef Elf_Hash Elf_Hash; typedef ELFEntityIterator Elf_Dyn_Iter; typedef iterator_range Elf_Dyn_Range; typedef ELFEntityIterator Elf_Rela_Iter; @@ -178,7 +176,6 @@ private: const Elf_Shdr *dot_symtab_sec = nullptr; // Symbol table section. StringRef DynSymStrTab; // Dynnamic symbol string table. const Elf_Shdr *DotDynSymSec = nullptr; // Dynamic symbol table section. - const Elf_Hash *HashTable = nullptr; const Elf_Shdr *SymbolTableSectionHeaderIndex = nullptr; DenseMap ExtendedSymbolTable; @@ -232,8 +229,6 @@ private: void LoadVersionNeeds(const Elf_Shdr *ec) const; void LoadVersionMap() const; - void scanDynamicTable(); - public: template const T *getEntry(uint32_t Section, uint32_t Entry) const; @@ -242,7 +237,6 @@ public: const Elf_Shdr *getDotSymtabSec() const { return dot_symtab_sec; } const Elf_Shdr *getDotDynSymSec() const { return DotDynSymSec; } - const Elf_Hash *getHashTable() const { return HashTable; } ErrorOr getStringTable(const Elf_Shdr *Section) const; const char *getDynamicString(uintX_t Offset) const; @@ -584,10 +578,8 @@ ELFFile::ELFFile(StringRef Object, std::error_code &EC) Header = reinterpret_cast(base()); - if (Header->e_shoff == 0) { - scanDynamicTable(); + if (Header->e_shoff == 0) return; - } const uint64_t SectionTableOffset = Header->e_shoff; @@ -612,13 +604,6 @@ ELFFile::ELFFile(StringRef Object, std::error_code &EC) for (const Elf_Shdr &Sec : sections()) { switch (Sec.sh_type) { - case ELF::SHT_HASH: - if (HashTable) { - EC = object_error::parse_failed; - return; - } - HashTable = reinterpret_cast(base() + Sec.sh_offset); - break; case ELF::SHT_SYMTAB_SHNDX: if (SymbolTableSectionHeaderIndex) { // More than one .symtab_shndx! @@ -716,21 +701,7 @@ ELFFile::ELFFile(StringRef Object, std::error_code &EC) } } - scanDynamicTable(); - - EC = std::error_code(); -} - -template -void ELFFile::scanDynamicTable() { - // Build load-address to file-offset map. - typedef IntervalMap< - uintX_t, uintptr_t, - IntervalMapImpl::NodeSizer::LeafSize, - IntervalMapHalfOpenInfo> LoadMapT; - typename LoadMapT::Allocator Alloc; - LoadMapT LoadMap(Alloc); - + // Scan program headers. for (Elf_Phdr_Iter PhdrI = program_header_begin(), PhdrE = program_header_end(); PhdrI != PhdrE; ++PhdrI) { @@ -738,36 +709,34 @@ void ELFFile::scanDynamicTable() { DynamicRegion.Addr = base() + PhdrI->p_offset; DynamicRegion.Size = PhdrI->p_filesz; DynamicRegion.EntSize = sizeof(Elf_Dyn); - continue; + break; } - if (PhdrI->p_type != ELF::PT_LOAD) - continue; - if (PhdrI->p_filesz == 0) - continue; - LoadMap.insert(PhdrI->p_vaddr, PhdrI->p_vaddr + PhdrI->p_filesz, - PhdrI->p_offset); } - auto toMappedAddr = [&](uint64_t VAddr) -> const uint8_t * { - auto I = LoadMap.find(VAddr); - if (I == LoadMap.end()) - return nullptr; - return base() + I.value() + (VAddr - I.start()); - }; - + // Scan dynamic table. for (Elf_Dyn_Iter DynI = dynamic_table_begin(), DynE = dynamic_table_end(); DynI != DynE; ++DynI) { switch (DynI->d_tag) { - case ELF::DT_HASH: - if (HashTable) - continue; - HashTable = - reinterpret_cast(toMappedAddr(DynI->getPtr())); - break; - case ELF::DT_RELA: - if (!DynRelaRegion.Addr) - DynRelaRegion.Addr = toMappedAddr(DynI->getPtr()); + case ELF::DT_RELA: { + uint64_t VBase = 0; + const uint8_t *FBase = nullptr; + for (Elf_Phdr_Iter PhdrI = program_header_begin(), + PhdrE = program_header_end(); + PhdrI != PhdrE; ++PhdrI) { + if (PhdrI->p_type != ELF::PT_LOAD) + continue; + if (DynI->getPtr() >= PhdrI->p_vaddr && + DynI->getPtr() < PhdrI->p_vaddr + PhdrI->p_memsz) { + VBase = PhdrI->p_vaddr; + FBase = base() + PhdrI->p_offset; + break; + } + } + if (!VBase) + return; + DynRelaRegion.Addr = FBase + DynI->getPtr() - VBase; break; + } case ELF::DT_RELASZ: DynRelaRegion.Size = DynI->getVal(); break; @@ -775,6 +744,8 @@ void ELFFile::scanDynamicTable() { DynRelaRegion.EntSize = DynI->getVal(); } } + + EC = std::error_code(); } template diff --git a/include/llvm/Object/ELFTypes.h b/include/llvm/Object/ELFTypes.h index 87de41c1b4a..63e13909ae5 100644 --- a/include/llvm/Object/ELFTypes.h +++ b/include/llvm/Object/ELFTypes.h @@ -10,7 +10,6 @@ #ifndef LLVM_OBJECT_ELFTYPES_H #define LLVM_OBJECT_ELFTYPES_H -#include "llvm/ADT/ArrayRef.h" #include "llvm/Object/Error.h" #include "llvm/Support/DataTypes.h" #include "llvm/Support/ELF.h" @@ -464,23 +463,6 @@ struct Elf_Phdr_Impl> { Elf_Xword p_align; // Segment alignment constraint }; -// ELFT needed for endianess. -template -struct Elf_Hash { - LLVM_ELF_IMPORT_TYPES_ELFT(ELFT) - Elf_Word nbucket; - Elf_Word nchain; - - ArrayRef buckets() const { - return ArrayRef(&nbucket + 2, &nbucket + 2 + nbucket); - } - - ArrayRef chains() const { - return ArrayRef(&nbucket + 2 + nbucket, - &nbucket + 2 + nbucket + nchain); - } -}; - // MIPS .reginfo section template struct Elf_Mips_RegInfo; diff --git a/test/Object/Inputs/no-section-table.so b/test/Object/Inputs/no-section-table.so deleted file mode 100644 index fd176ebf7ce09787e1c726d811837f5ad251c16f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2544 zcmcgtO=w(I6h1T4NhT&uhS1uW2zk^LZNW=^ni4HB(b4v$w4fmYH{;{Y%$v-}%$qXr zO-#BmFjg$JC@w^I!Hsn%xap#cDJ`YTx{HDk#KH`85fCJ9GM@A9IdSp~y7Rz&=brC; z=iGbGyFVYkb@@Ux5&@AIyar??;~JS4M~9w=8HfXUP6S-0b};_#-tE$T(EvsO&=}-u zu)oozana+^fCe+HC5}uA+2Xh@juYMBrHD@GH1PHlKX(NCV;mRO&ofUnaY^36I1bUk ze|(edkD)$_tq^e zJ9!9B^&UK=4q#a;<%(;0zFqY#3#_7B^ufxb0&8LEij{M!&Pvhqo$At+RH@=ROLnH@ zXy4%;E4yY>0=rbahQv#&)*@#}m2A&*JaE=99r`VAy_~6(pj6Ccl~+;cz;bf7Z{wsg zo~P%8keh>xmlxhhS(9o~P0QjU5Wy~eNdrXp?dxdC{;CZZaeGAJ+kivo$Ow9}-?#Zt zJ__NRj5qoJ319557^nY7`%`4I1LqWh>vjj;BV^Ryci^=DMecOqoo8Z;aXACR-|oOW z`DXoT!n_&(C1!wmz2V23FJOdOe~`E@ky^K>e??0B)NlA57@fx+*#&a8w%aJDekPkr z-Fl3sd29A31k77;Qp@J)UGv5hv%cHEdK`z#lM9FINw>H21EX&Or0-MKyc!t&C>Rjq zzYgN3ztHh}6n}3oX5QE_?=|Pl$V2nTJ%0$3O>nY4olM7v^KHy7APs6Sn)TUk>MdhF zzt6lmdj_rMEKa#;;wSwuZXgi({h#w`;ej&ib5QGTy@yOaZyf)-s9sEqQnnwbTl46p zei~~S)R)T{8Ht@A!qr8w-Q8=q&!T>cTp#r@Y$TCuix62$Mn?L&6Q5%>#}K2tXao7< zMCeam=pVW?(ECAR1LlU$pP3pvNwCDnLh%$!?JABF+$FE~CqIs+j>^44u_Ut3WnXKQ z&W{#4GbD5mlgNEZcQc9Hd(UZe{~V35E$3sHZ8=XgHxlt5(I&jh1IroNqN1V5yf@h| zXW|F#-hUsc&LlCdpuzi}(?C#5^hw?5ypWvG3O?b92>yr@$vhj(>tQY9;cu!Cbes8D z_P~}p?y&tS`~PHH=E>>)cO~zBc;G*{4qc)9?qVwSs`1itrsn!JA#;v8fLZ2#Vih4 Z!9@5`LH6LmQTX0~%2vu{$ED*6e*r37Y)1e9 diff --git a/test/Object/no-section-table.test b/test/Object/no-section-table.test deleted file mode 100644 index 1049390ce85..00000000000 --- a/test/Object/no-section-table.test +++ /dev/null @@ -1,8 +0,0 @@ -RUN: llvm-readobj %p/Inputs/no-section-table.so -hash-table | FileCheck %s - -CHECK: HashTable { -CHECK: Num Buckets: 3 -CHECK: Num Chains: 13 -CHECK: Buckets: [12, 10, 11] -CHECK: Chains: [0, 0, 0, 0, 2, 3, 4, 0, 7, 5, 6, 8, 9] -CHECK: } diff --git a/tools/llvm-readobj/ELFDumper.cpp b/tools/llvm-readobj/ELFDumper.cpp index 574964a4cc5..a4b25efeb9b 100644 --- a/tools/llvm-readobj/ELFDumper.cpp +++ b/tools/llvm-readobj/ELFDumper.cpp @@ -56,7 +56,6 @@ public: void printDynamicTable() override; void printNeededLibraries() override; void printProgramHeaders() override; - void printHashTable() override; void printAttributes() override; void printMipsPLTGOT() override; @@ -1120,18 +1119,6 @@ void ELFDumper::printProgramHeaders() { } } -template -void ELFDumper::printHashTable() { - DictScope D(W, "HashTable"); - auto HT = Obj->getHashTable(); - if (!HT) - return; - W.printNumber("Num Buckets", HT->nbucket); - W.printNumber("Num Chains", HT->nchain); - W.printList("Buckets", HT->buckets()); - W.printList("Chains", HT->chains()); -} - template void ELFDumper::printAttributes() { W.startLine() << "Attributes not implemented.\n"; diff --git a/tools/llvm-readobj/ObjDumper.h b/tools/llvm-readobj/ObjDumper.h index 5ecf0ec3d6f..27e15b256cc 100644 --- a/tools/llvm-readobj/ObjDumper.h +++ b/tools/llvm-readobj/ObjDumper.h @@ -37,7 +37,6 @@ public: virtual void printDynamicTable() { } virtual void printNeededLibraries() { } virtual void printProgramHeaders() { } - virtual void printHashTable() { } // Only implemented for ARM ELF at this time. virtual void printAttributes() { } diff --git a/tools/llvm-readobj/StreamWriter.h b/tools/llvm-readobj/StreamWriter.h index f3cc57ef940..245588ba060 100644 --- a/tools/llvm-readobj/StreamWriter.h +++ b/tools/llvm-readobj/StreamWriter.h @@ -181,8 +181,8 @@ public: startLine() << Label << ": " << (Value ? "Yes" : "No") << '\n'; } - template - void printList(StringRef Label, const T &List) { + template + void printList(StringRef Label, const SmallVectorImpl &List) { startLine() << Label << ": ["; bool Comma = false; for (const auto &Item : List) { diff --git a/tools/llvm-readobj/llvm-readobj.cpp b/tools/llvm-readobj/llvm-readobj.cpp index 12afacb0a85..990299bc2ce 100644 --- a/tools/llvm-readobj/llvm-readobj.cpp +++ b/tools/llvm-readobj/llvm-readobj.cpp @@ -127,10 +127,6 @@ namespace opts { cl::opt ProgramHeaders("program-headers", cl::desc("Display ELF program headers")); - // -hash-table - cl::opt HashTable("hash-table", - cl::desc("Display ELF hash table")); - // -expand-relocs cl::opt ExpandRelocs("expand-relocs", cl::desc("Expand each shown relocation to multiple lines")); @@ -304,8 +300,6 @@ static void dumpObject(const ObjectFile *Obj) { Dumper->printNeededLibraries(); if (opts::ProgramHeaders) Dumper->printProgramHeaders(); - if (opts::HashTable) - Dumper->printHashTable(); if (Obj->getArch() == llvm::Triple::arm && Obj->isELF()) if (opts::ARMAttributes) Dumper->printAttributes(); -- 2.34.1