[PATCH] D63404: [RISCV] Don't force absolute FK_Data_X fixups to relocs
Alex Bradbury via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Aug 19 06:23:00 PDT 2019
This revision was automatically updated to reflect the committed changes.
Closed by commit rL369257: [RISCV] Don't force absolute FK_Data_X fixups to relocs (authored by asb, committed by ).
Herald added a subscriber: pzheng.
Changed prior to commit:
https://reviews.llvm.org/D63404?vs=213374&id=215877#toc
Repository:
rL LLVM
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D63404/new/
https://reviews.llvm.org/D63404
Files:
llvm/trunk/lib/Target/RISCV/MCTargetDesc/RISCVAsmBackend.cpp
llvm/trunk/test/MC/RISCV/fde-reloc.s
llvm/trunk/test/MC/RISCV/linker-relaxation.s
Index: llvm/trunk/lib/Target/RISCV/MCTargetDesc/RISCVAsmBackend.cpp
===================================================================
--- llvm/trunk/lib/Target/RISCV/MCTargetDesc/RISCVAsmBackend.cpp
+++ llvm/trunk/lib/Target/RISCV/MCTargetDesc/RISCVAsmBackend.cpp
@@ -33,6 +33,13 @@
switch ((unsigned)Fixup.getKind()) {
default:
break;
+ case FK_Data_1:
+ case FK_Data_2:
+ case FK_Data_4:
+ case FK_Data_8:
+ if (Target.isAbsolute())
+ return false;
+ break;
case RISCV::fixup_riscv_got_hi20:
case RISCV::fixup_riscv_tls_got_hi20:
case RISCV::fixup_riscv_tls_gd_hi20:
Index: llvm/trunk/test/MC/RISCV/linker-relaxation.s
===================================================================
--- llvm/trunk/test/MC/RISCV/linker-relaxation.s
+++ llvm/trunk/test/MC/RISCV/linker-relaxation.s
@@ -136,3 +136,24 @@
# RELAX-RELOC: R_RISCV_RELAX - 0x0
# RELAX-FIXUP: fixup A - offset: 0, value: %pcrel_lo(.Ltmp1), kind: fixup_riscv_pcrel_lo12_s
# RELAX-FIXUP: fixup B - offset: 0, value: 0, kind: fixup_riscv_relax
+
+# Check that a relocation is not emitted for a symbol difference which has
+# been folded to a fixup with an absolute value. This can happen when a
+# difference expression refers to two symbols, at least one of which is
+# not defined at the point it is referenced. Then during *assembler*
+# relaxation when both symbols have become defined the difference may be folded
+# down to a fixup simply containing the absolute value. We want to ensure that
+# we don't force a relocation to be emitted for this absolute value even
+# when linker relaxation is enabled. The reason for this is that one instance
+# where this pattern appears in in the .eh_frame section (the CIE 'length'
+# field), and the .eh_frame section cannot be parsed by the linker unless the
+# fixup has been resolved to a concrete value instead of a relocation.
+ .data
+lo:
+ .word hi-lo
+ .quad hi-lo
+# NORELAX-RELOC-NOT: R_RISCV_32
+# NORELAX-RELOC-NOT: R_RISCV_64
+# RELAX-RELOC-NOT: R_RISCV_32
+# RELAX-RELOC-NOT: R_RISCV_64
+hi:
Index: llvm/trunk/test/MC/RISCV/fde-reloc.s
===================================================================
--- llvm/trunk/test/MC/RISCV/fde-reloc.s
+++ llvm/trunk/test/MC/RISCV/fde-reloc.s
@@ -14,9 +14,6 @@
# preparation for follow-on patches to fix it.
# RELAX-RELOC: Section (4) .rela.eh_frame {
-# RELAX-RELOC-NEXT: 0x0 R_RISCV_32 - 0x10
-# RELAX-RELOC-NEXT: 0x14 R_RISCV_32 - 0x10
-# RELAX-RELOC-NEXT: 0x18 R_RISCV_32 - 0x18
# RELAX-RELOC-NEXT: 0x1C R_RISCV_ADD32 - 0x0
# RELAX-RELOC-NEXT: 0x1C R_RISCV_SUB32 - 0x0
# RELAX-RELOC-NEXT: 0x20 R_RISCV_ADD32 - 0x0
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D63404.215877.patch
Type: text/x-patch
Size: 2648 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190819/aa4699e6/attachment.bin>
More information about the llvm-commits
mailing list