[PATCH] D29714: [ELF] - Do sign extend for addends of R_386_8, R_386_16 relocations

George Rimar via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Feb 8 04:50:31 PST 2017


grimar created this revision.

The same we did earlier for PC ones,
currenly LLD fails to link kernel, reporting relocation out of range because of this.

I prepared separate test, because had to involve -Ttext option and
that would change currect pc8/pc16 test significantly , what probably not worth to do.


https://reviews.llvm.org/D29714

Files:
  ELF/Target.cpp
  test/ELF/i386-reloc8-reloc16-addend.s


Index: test/ELF/i386-reloc8-reloc16-addend.s
===================================================================
--- test/ELF/i386-reloc8-reloc16-addend.s
+++ test/ELF/i386-reloc8-reloc16-addend.s
@@ -0,0 +1,17 @@
+# REQUIRES: x86
+# RUN: llvm-mc -filetype=obj -triple=i386-pc-linux-gnu %s -o %t1.o
+
+# RUN: ld.lld -Ttext=0x0 %t1.o -o %t.out
+# RUN: llvm-objdump -s -t %t.out | FileCheck %s
+# CHECK:      Contents of section .text:
+# CHECK-NEXT:  0000 020100 
+## 0x3 + addend(-1) = 0x02
+## 0x3 + addend(-2) = 0x0100
+# CHECK: SYMBOL TABLE:
+# CHECK: 00000003 .und
+
+.byte  und-1
+.short und-2
+
+.section .und, "ax"
+und:
Index: ELF/Target.cpp
===================================================================
--- ELF/Target.cpp
+++ ELF/Target.cpp
@@ -491,11 +491,9 @@
   default:
     return 0;
   case R_386_8:
-    return *Buf;
   case R_386_PC8:
     return SignExtend64<8>(*Buf);
   case R_386_16:
-    return read16le(Buf);
   case R_386_PC16:
     return SignExtend64<16>(read16le(Buf));
   case R_386_32:


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D29714.87635.patch
Type: text/x-patch
Size: 1021 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170208/0109ed16/attachment.bin>


More information about the llvm-commits mailing list