[llvm] r340611 - [llvm-objdump] Label calls to the PLT.

Joel Galenson via llvm-commits llvm-commits at lists.llvm.org
Fri Aug 24 08:21:57 PDT 2018


Author: jgalenson
Date: Fri Aug 24 08:21:57 2018
New Revision: 340611

URL: http://llvm.org/viewvc/llvm-project?rev=340611&view=rev
Log:
[llvm-objdump] Label calls to the PLT.

Differential Revision: https://reviews.llvm.org/D50204

Added:
    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
Modified:
    llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp

Added: llvm/trunk/test/tools/llvm-objdump/AArch64/Inputs/cfi.elf-aarch64
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objdump/AArch64/Inputs/cfi.elf-aarch64?rev=340611&view=auto
==============================================================================
Binary files llvm/trunk/test/tools/llvm-objdump/AArch64/Inputs/cfi.elf-aarch64 (added) and llvm/trunk/test/tools/llvm-objdump/AArch64/Inputs/cfi.elf-aarch64 Fri Aug 24 08:21:57 2018 differ

Added: llvm/trunk/test/tools/llvm-objdump/AArch64/plt.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objdump/AArch64/plt.test?rev=340611&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-objdump/AArch64/plt.test (added)
+++ llvm/trunk/test/tools/llvm-objdump/AArch64/plt.test Fri Aug 24 08:21:57 2018
@@ -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>

Added: llvm/trunk/test/tools/llvm-objdump/X86/Inputs/hello.exe.elf-i386
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objdump/X86/Inputs/hello.exe.elf-i386?rev=340611&view=auto
==============================================================================
Binary files llvm/trunk/test/tools/llvm-objdump/X86/Inputs/hello.exe.elf-i386 (added) and llvm/trunk/test/tools/llvm-objdump/X86/Inputs/hello.exe.elf-i386 Fri Aug 24 08:21:57 2018 differ

Added: llvm/trunk/test/tools/llvm-objdump/X86/Inputs/hello.exe.nopie.elf-i386
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objdump/X86/Inputs/hello.exe.nopie.elf-i386?rev=340611&view=auto
==============================================================================
Binary files llvm/trunk/test/tools/llvm-objdump/X86/Inputs/hello.exe.nopie.elf-i386 (added) and llvm/trunk/test/tools/llvm-objdump/X86/Inputs/hello.exe.nopie.elf-i386 Fri Aug 24 08:21:57 2018 differ

Added: llvm/trunk/test/tools/llvm-objdump/X86/plt.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objdump/X86/plt.test?rev=340611&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-objdump/X86/plt.test (added)
+++ llvm/trunk/test/tools/llvm-objdump/X86/plt.test Fri Aug 24 08:21:57 2018
@@ -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>

Modified: llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp?rev=340611&r1=340610&r2=340611&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp (original)
+++ llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp Fri Aug 24 08:21:57 2018
@@ -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 @@ addDynamicElfSymbols(const ObjectFile *O
     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 @@ static void DisassembleObject(const Obje
   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())




More information about the llvm-commits mailing list