[PATCH] D50204: [llvm-objdump] Label calls to the PLT
Joel Galenson via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Aug 24 08:23:12 PDT 2018
This revision was automatically updated to reflect the committed changes.
Closed by commit rL340611: [llvm-objdump] Label calls to the PLT. (authored by jgalenson, committed by ).
Changed prior to commit:
https://reviews.llvm.org/D50204?vs=161102&id=162384#toc
Repository:
rL LLVM
https://reviews.llvm.org/D50204
Files:
llvm/trunk/test/tools/llvm-objdump/AArch64/Inputs/cfi.elf-aarch64
llvm/trunk/test/tools/llvm-objdump/AArch64/plt.test
llvm/trunk/test/tools/llvm-objdump/X86/Inputs/hello.exe.elf-i386
llvm/trunk/test/tools/llvm-objdump/X86/Inputs/hello.exe.nopie.elf-i386
llvm/trunk/test/tools/llvm-objdump/X86/plt.test
llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp
Index: llvm/trunk/test/tools/llvm-objdump/X86/plt.test
===================================================================
--- llvm/trunk/test/tools/llvm-objdump/X86/plt.test
+++ llvm/trunk/test/tools/llvm-objdump/X86/plt.test
@@ -0,0 +1,14 @@
+// RUN: llvm-objdump -d %p/Inputs/stripped-elf.so | FileCheck -check-prefix=64 %s
+// RUN: llvm-objdump -d %p/Inputs/hello.exe.elf-i386 | FileCheck -check-prefix=32 %s
+// RUN: llvm-objdump -d %p/Inputs/hello.exe.nopie.elf-i386 | FileCheck -check-prefix=32 %s
+
+# 64: Disassembly of section .plt:
+# 64: __gmon_start__ at plt:
+# 64: __cxa_finalize at plt:
+# 64: callq {{.*}} <__cxa_finalize at plt>
+
+# 32: Disassembly of section .plt:
+# 32: puts at plt:
+# 32: __libc_start_main at plt:
+# 32: calll {{.*}} <puts at plt>
+# 32: calll {{.*}} <__libc_start_main at plt>
Index: llvm/trunk/test/tools/llvm-objdump/AArch64/plt.test
===================================================================
--- llvm/trunk/test/tools/llvm-objdump/AArch64/plt.test
+++ llvm/trunk/test/tools/llvm-objdump/AArch64/plt.test
@@ -0,0 +1,5 @@
+// RUN: llvm-objdump -d %p/Inputs/cfi.elf-aarch64 | FileCheck %s
+
+# CHECK: Disassembly of section .plt:
+# CHECK: __cfi_slowpath at plt:
+# CHECK: bl {{.*}} <__cfi_slowpath at plt>
Index: llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp
===================================================================
--- llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp
+++ llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp
@@ -56,6 +56,7 @@
#include "llvm/Support/InitLLVM.h"
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/SourceMgr.h"
+#include "llvm/Support/StringSaver.h"
#include "llvm/Support/TargetRegistry.h"
#include "llvm/Support/TargetSelect.h"
#include "llvm/Support/raw_ostream.h"
@@ -1235,6 +1236,37 @@
llvm_unreachable("Unsupported binary format");
}
+static void addPltEntries(const ObjectFile *Obj,
+ std::map<SectionRef, SectionSymbolsTy> &AllSymbols,
+ StringSaver &Saver) {
+ Optional<SectionRef> Plt = None;
+ for (const SectionRef &Section : Obj->sections()) {
+ StringRef Name;
+ if (Section.getName(Name))
+ continue;
+ if (Name == ".plt")
+ Plt = Section;
+ }
+ if (!Plt)
+ return;
+ if (auto *ElfObj = dyn_cast<ELFObjectFileBase>(Obj)) {
+ for (auto PltEntry : ElfObj->getPltAddresses()) {
+ SymbolRef Symbol(PltEntry.first, ElfObj);
+
+ uint8_t SymbolType = getElfSymbolType(Obj, Symbol);
+
+ Expected<StringRef> NameOrErr = Symbol.getName();
+ if (!NameOrErr)
+ report_error(Obj->getFileName(), NameOrErr.takeError());
+ if (NameOrErr->empty())
+ continue;
+ StringRef Name = Saver.save((*NameOrErr + "@plt").str());
+
+ AllSymbols[*Plt].emplace_back(PltEntry.second, Name, SymbolType);
+ }
+ }
+}
+
static void DisassembleObject(const ObjectFile *Obj, bool InlineRelocs) {
if (StartAddress > StopAddress)
error("Start address should be less than stop address");
@@ -1342,6 +1374,10 @@
if (AllSymbols.empty() && Obj->isELF())
addDynamicElfSymbols(Obj, AllSymbols);
+ BumpPtrAllocator A;
+ StringSaver Saver(A);
+ addPltEntries(Obj, AllSymbols, Saver);
+
// Create a mapping from virtual address to section.
std::vector<std::pair<uint64_t, SectionRef>> SectionAddresses;
for (SectionRef Sec : Obj->sections())
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D50204.162384.patch
Type: text/x-patch
Size: 3361 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180824/d2d03946/attachment.bin>
More information about the llvm-commits
mailing list