[PATCH] D28094: [ELF] - Implemented support for R_386_PC8/R_386_8 relocations.

George Rimar via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Jan 24 05:04:27 PST 2017


grimar updated this revision to Diff 85573.
grimar added a comment.

- Rebased.


https://reviews.llvm.org/D28094

Files:
  ELF/Target.cpp
  test/ELF/Inputs/i386-pc8.s
  test/ELF/i386-pc8.s
  test/ELF/unknown-reloc.s


Index: test/ELF/unknown-reloc.s
===================================================================
--- test/ELF/unknown-reloc.s
+++ test/ELF/unknown-reloc.s
@@ -1,14 +0,0 @@
-# REQUIRES: x86
-# RUN: llvm-mc -filetype=obj -triple=i386-pc-linux-gnu %s -o %t1.o
-# RUN: llvm-mc -filetype=obj -triple=i386-pc-linux-gnu %S/Inputs/unknown-reloc.s -o %t2.o
-# RUN: not ld.lld %t1.o %t2.o -o %t.out 2>&1 | FileCheck %s
-
-# CHECK: do not know how to handle relocation 'R_386_PC8' (23)
-# CHECK: do not know how to handle relocation 'R_386_8' (22)
-
-.text
-.global foo
-foo:
-
-.byte und-foo
-.byte foo
Index: test/ELF/i386-pc8.s
===================================================================
--- test/ELF/i386-pc8.s
+++ test/ELF/i386-pc8.s
@@ -0,0 +1,17 @@
+# REQUIRES: x86
+# RUN: llvm-mc -filetype=obj -triple=i386-pc-linux-gnu %s -o %t1.o
+# RUN: llvm-mc -filetype=obj -triple=i386-pc-linux-gnu %S/Inputs/i386-pc8.s -o %t2.o
+# RUN: ld.lld %t1.o %t2.o -o %t.out
+# RUN: llvm-objdump -s -section=.text %t.out | FileCheck %s
+
+# CHECK:      Contents of section .text:
+# CHECK-NEXT:  11000 15263344
+
+.text
+.global foo
+foo:
+
+.byte und-foo+0x11
+.byte und-foo+0x22
+.byte foo+0x33
+.byte foo+0x44
Index: test/ELF/Inputs/i386-pc8.s
===================================================================
--- test/ELF/Inputs/i386-pc8.s
+++ test/ELF/Inputs/i386-pc8.s
@@ -0,0 +1,2 @@
+.global und
+und:
Index: ELF/Target.cpp
===================================================================
--- ELF/Target.cpp
+++ ELF/Target.cpp
@@ -356,6 +356,7 @@
 
 RelExpr X86TargetInfo::getRelExpr(uint32_t Type, const SymbolBody &S) const {
   switch (Type) {
+  case R_386_8:
   case R_386_16:
   case R_386_32:
   case R_386_TLS_LDO_32:
@@ -366,6 +367,7 @@
     return R_TLSLD;
   case R_386_PLT32:
     return R_PLT_PC;
+  case R_386_PC8:
   case R_386_PC16:
   case R_386_PC32:
     return R_PC;
@@ -486,6 +488,9 @@
   switch (Type) {
   default:
     return 0;
+  case R_386_8:
+  case R_386_PC8:
+    return read<uint8_t, endianness::little>(Buf);
   case R_386_16:
   case R_386_PC16:
     return read16le(Buf);


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D28094.85573.patch
Type: text/x-patch
Size: 2108 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170124/6c08432b/attachment.bin>


More information about the llvm-commits mailing list