[llvm-commits] [lld] r173533 - [ELF][x86-64] Add relocation string<->kind.

Michael J. Spencer bigcheesegs at gmail.com
Fri Jan 25 15:48:59 PST 2013


Author: mspencer
Date: Fri Jan 25 17:48:58 2013
New Revision: 173533

URL: http://llvm.org/viewvc/llvm-project?rev=173533&view=rev
Log:
[ELF][x86-64] Add relocation string<->kind.

Modified:
    lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ELFTargetInfo.h
    lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetInfo.cpp
    lld/trunk/test/elf/x86_64-kinds.test

Modified: lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ELFTargetInfo.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ELFTargetInfo.h?rev=173533&r1=173532&r2=173533&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ELFTargetInfo.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ELFTargetInfo.h Fri Jan 25 17:48:58 2013
@@ -36,6 +36,9 @@ public:
     return _options._baseAddress;
   }
 
+  virtual ErrorOr<int32_t> relocKindFromString(StringRef str) const;
+  virtual ErrorOr<std::string> stringFromRelocKind(int32_t kind) const;
+
 };
 } // elf
 } // lld

Modified: lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetInfo.cpp?rev=173533&r1=173532&r2=173533&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetInfo.cpp (original)
+++ lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetInfo.cpp Fri Jan 25 17:48:58 2013
@@ -0,0 +1,112 @@
+//===- lib/ReaderWriter/ELF/X86_64/X86_64ELFTargetInfo.cpp ----------------===//
+//
+//                             The LLVM Linker
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "X86_64ELFTargetInfo.h"
+
+#include "llvm/ADT/StringSwitch.h"
+
+using namespace lld;
+
+#define LLD_CASE(name) .Case(#name, llvm::ELF::name)
+
+ErrorOr<int32_t> elf::X86_64ELFTargetInfo::relocKindFromString(StringRef str) const {
+  int32_t ret = llvm::StringSwitch<int32_t>(str)
+    LLD_CASE(R_X86_64_NONE)
+    LLD_CASE(R_X86_64_64)
+    LLD_CASE(R_X86_64_PC32)
+    LLD_CASE(R_X86_64_GOT32)
+    LLD_CASE(R_X86_64_PLT32)
+    LLD_CASE(R_X86_64_COPY)
+    LLD_CASE(R_X86_64_GLOB_DAT)
+    LLD_CASE(R_X86_64_JUMP_SLOT)
+    LLD_CASE(R_X86_64_RELATIVE)
+    LLD_CASE(R_X86_64_GOTPCREL)
+    LLD_CASE(R_X86_64_32)
+    LLD_CASE(R_X86_64_32S)
+    LLD_CASE(R_X86_64_16)
+    LLD_CASE(R_X86_64_PC16)
+    LLD_CASE(R_X86_64_8)
+    LLD_CASE(R_X86_64_PC8)
+    LLD_CASE(R_X86_64_DTPMOD64)
+    LLD_CASE(R_X86_64_DTPOFF64)
+    LLD_CASE(R_X86_64_TPOFF64)
+    LLD_CASE(R_X86_64_TLSGD)
+    LLD_CASE(R_X86_64_TLSLD)
+    LLD_CASE(R_X86_64_DTPOFF32)
+    LLD_CASE(R_X86_64_GOTTPOFF)
+    LLD_CASE(R_X86_64_TPOFF32)
+    LLD_CASE(R_X86_64_PC64)
+    LLD_CASE(R_X86_64_GOTOFF64)
+    LLD_CASE(R_X86_64_GOTPC32)
+    LLD_CASE(R_X86_64_GOT64)
+    LLD_CASE(R_X86_64_GOTPCREL64)
+    LLD_CASE(R_X86_64_GOTPC64)
+    LLD_CASE(R_X86_64_GOTPLT64)
+    LLD_CASE(R_X86_64_PLTOFF64)
+    LLD_CASE(R_X86_64_SIZE32)
+    LLD_CASE(R_X86_64_SIZE64)
+    LLD_CASE(R_X86_64_GOTPC32_TLSDESC)
+    LLD_CASE(R_X86_64_TLSDESC_CALL)
+    LLD_CASE(R_X86_64_TLSDESC)
+    LLD_CASE(R_X86_64_IRELATIVE)
+    .Default(-1);
+
+  if (ret == -1)
+    return make_error_code(yaml_reader_error::illegal_value);
+  return ret;
+}
+
+#undef LLD_CASE
+
+#define LLD_CASE(name) case llvm::ELF::name: return std::string(#name);
+
+ErrorOr<std::string> elf::X86_64ELFTargetInfo::stringFromRelocKind(int32_t kind) const {
+  switch (kind) {
+  LLD_CASE(R_X86_64_NONE)
+  LLD_CASE(R_X86_64_64)
+  LLD_CASE(R_X86_64_PC32)
+  LLD_CASE(R_X86_64_GOT32)
+  LLD_CASE(R_X86_64_PLT32)
+  LLD_CASE(R_X86_64_COPY)
+  LLD_CASE(R_X86_64_GLOB_DAT)
+  LLD_CASE(R_X86_64_JUMP_SLOT)
+  LLD_CASE(R_X86_64_RELATIVE)
+  LLD_CASE(R_X86_64_GOTPCREL)
+  LLD_CASE(R_X86_64_32)
+  LLD_CASE(R_X86_64_32S)
+  LLD_CASE(R_X86_64_16)
+  LLD_CASE(R_X86_64_PC16)
+  LLD_CASE(R_X86_64_8)
+  LLD_CASE(R_X86_64_PC8)
+  LLD_CASE(R_X86_64_DTPMOD64)
+  LLD_CASE(R_X86_64_DTPOFF64)
+  LLD_CASE(R_X86_64_TPOFF64)
+  LLD_CASE(R_X86_64_TLSGD)
+  LLD_CASE(R_X86_64_TLSLD)
+  LLD_CASE(R_X86_64_DTPOFF32)
+  LLD_CASE(R_X86_64_GOTTPOFF)
+  LLD_CASE(R_X86_64_TPOFF32)
+  LLD_CASE(R_X86_64_PC64)
+  LLD_CASE(R_X86_64_GOTOFF64)
+  LLD_CASE(R_X86_64_GOTPC32)
+  LLD_CASE(R_X86_64_GOT64)
+  LLD_CASE(R_X86_64_GOTPCREL64)
+  LLD_CASE(R_X86_64_GOTPC64)
+  LLD_CASE(R_X86_64_GOTPLT64)
+  LLD_CASE(R_X86_64_PLTOFF64)
+  LLD_CASE(R_X86_64_SIZE32)
+  LLD_CASE(R_X86_64_SIZE64)
+  LLD_CASE(R_X86_64_GOTPC32_TLSDESC)
+  LLD_CASE(R_X86_64_TLSDESC_CALL)
+  LLD_CASE(R_X86_64_TLSDESC)
+  LLD_CASE(R_X86_64_IRELATIVE)
+  }
+
+  return make_error_code(yaml_reader_error::illegal_value);
+}

Modified: lld/trunk/test/elf/x86_64-kinds.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/x86_64-kinds.test?rev=173533&r1=173532&r2=173533&view=diff
==============================================================================
--- lld/trunk/test/elf/x86_64-kinds.test (original)
+++ lld/trunk/test/elf/x86_64-kinds.test Fri Jan 25 17:48:58 2013
@@ -1,6 +1,9 @@
 RUN: lld -flavor ld -target x86_64-linux -o %t1 %p/Inputs/relocs.x86-64 \
 RUN: && llvm-objdump -d %t1 | FileCheck %s -check-prefix=RELOCS
 
+RUN: lld -core -target x86_64-linux -output=- -emit-yaml \
+RUN:    %p/Inputs/relocs.x86-64 | FileCheck %s -check-prefix=X86_64
+
 RELOCS: ELF64-x86-64
 
 // R_X86_64_32S
@@ -12,3 +15,6 @@ RELOCS: 05 00 00 00 movl
 RELOCS: e8
 RELOCS-NOT: 00 00 00 00
 RELOCS: callq
+
+X86_64: R_X86_64_32S
+X86_64: R_X86_64_PC32





More information about the llvm-commits mailing list