[PATCH] D29493: [ELF] - Use SignExtend when reading R_386_PC16 addend.

George Rimar via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Feb 3 07:18:36 PST 2017


grimar created this revision.

This is the same as https://reviews.llvm.org/D29490, but for R_386_PC16


https://reviews.llvm.org/D29493

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


Index: test/ELF/i386-pc16-addend.s
===================================================================
--- test/ELF/i386-pc16-addend.s
+++ test/ELF/i386-pc16-addend.s
@@ -0,0 +1,34 @@
+# 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: llvm-objdump -d %t1.o | FileCheck %s --check-prefix=OBJDISASM
+# RUN: llvm-readobj -r %t1.o | FileCheck %s --check-prefix=OBJRELOC
+
+## We have 0xFFFE addend.
+# OBJDISASM:      Disassembly of section .text:
+# OBJDISASM-NEXT: .text:
+# OBJDISASM-NEXT:   0: e9 fe ff 90 90
+## And R_386_PC16 relocation:
+# OBJRELOC:      Relocations [
+# OBJRELOC-NEXT:   Section {{.*}} .rel.text {
+# OBJRELOC-NEXT:     0x1 R_386_PC16 und 0x0
+# OBJRELOC-NEXT:   }
+# OBJRELOC-NEXT: ]
+
+# RUN: ld.lld %t1.o %t2.o -o %t.out
+# RUN: llvm-objdump -d %t.out | FileCheck %s --check-prefix=DISASM
+# RUN: llvm-readobj -symbols %t.out | FileCheck %s --check-prefix=SYM
+# DISASM:      Disassembly of section .text:
+# DISASM-NEXT: .text:
+# DISASM-NEXT:    11000: e9 05 00 90 90
+## e9 05 00 is a short 3-bytes relative jmp.
+## 0x11000 + 3 + 0x0005 = 0x11008
+# SYM:     Symbol {
+# SYM:       Name: und
+# SYM-NEXT:  Value: 0x11008
+
+.code16
+
+jmp und
+nop
+nop
Index: ELF/Target.cpp
===================================================================
--- ELF/Target.cpp
+++ ELF/Target.cpp
@@ -495,8 +495,9 @@
   case R_386_PC8:
     return *Buf;
   case R_386_16:
-  case R_386_PC16:
     return read16le(Buf);
+  case R_386_PC16:
+    return SignExtend64<16>(read16le(Buf));
   case R_386_32:
   case R_386_GOT32:
   case R_386_GOT32X:


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D29493.86959.patch
Type: text/x-patch
Size: 1685 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170203/d8c58a22/attachment.bin>


More information about the llvm-commits mailing list