summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSaleem Abdulrasool <compnerd@compnerd.org>2014-05-04 23:13:15 +0000
committerSaleem Abdulrasool <compnerd@compnerd.org>2014-05-04 23:13:15 +0000
commit729c7a08fbba0217b8e26ca16b265ccb0a3ebae5 (patch)
tree8e1d91688b0e29a0a527734c346f17a97f738023
parent9130cb85476c656a893fd35537fb5184cd2e5bb4 (diff)
downloadbcm5719-llvm-729c7a08fbba0217b8e26ca16b265ccb0a3ebae5.tar.gz
bcm5719-llvm-729c7a08fbba0217b8e26ca16b265ccb0a3ebae5.zip
MC: support FK_SecRel_4 for Windows on ARM
Add handling for FK_SecRel_4 (4-byte section relative relocations). These are used by the generation of DWARF debug information (the abbrevations use section relative relocations). This will also be used in generation of CodeView line tables. llvm-svn: 207941
-rw-r--r--llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp5
-rw-r--r--llvm/lib/Target/ARM/MCTargetDesc/ARMWinCOFFObjectWriter.cpp2
-rw-r--r--llvm/test/MC/ARM/coff-debugging-secrel.ll41
3 files changed, 48 insertions, 0 deletions
diff --git a/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp b/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp
index aade4328db3..ad73e84bf53 100644
--- a/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp
+++ b/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp
@@ -316,6 +316,8 @@ static unsigned adjustFixupValue(const MCFixup &Fixup, uint64_t Value,
case FK_Data_2:
case FK_Data_4:
return Value;
+ case FK_SecRel_4:
+ return Value;
case ARM::fixup_arm_movt_hi16:
if (!IsPCRel)
Value >>= 16;
@@ -662,6 +664,9 @@ static unsigned getFixupKindNumBytes(unsigned Kind) {
case ARM::fixup_t2_movt_hi16:
case ARM::fixup_t2_movw_lo16:
return 4;
+
+ case FK_SecRel_4:
+ return 4;
}
}
diff --git a/llvm/lib/Target/ARM/MCTargetDesc/ARMWinCOFFObjectWriter.cpp b/llvm/lib/Target/ARM/MCTargetDesc/ARMWinCOFFObjectWriter.cpp
index 2372693636a..e3e6802fd3c 100644
--- a/llvm/lib/Target/ARM/MCTargetDesc/ARMWinCOFFObjectWriter.cpp
+++ b/llvm/lib/Target/ARM/MCTargetDesc/ARMWinCOFFObjectWriter.cpp
@@ -49,6 +49,8 @@ unsigned ARMWinCOFFObjectWriter::getRelocType(const MCValue &Target,
default:
return COFF::IMAGE_REL_ARM_ADDR32;
}
+ case FK_SecRel_4:
+ return COFF::IMAGE_REL_ARM_SECREL;
case ARM::fixup_t2_condbranch:
return COFF::IMAGE_REL_ARM_BRANCH20T;
case ARM::fixup_t2_uncondbranch:
diff --git a/llvm/test/MC/ARM/coff-debugging-secrel.ll b/llvm/test/MC/ARM/coff-debugging-secrel.ll
new file mode 100644
index 00000000000..928f4b11957
--- /dev/null
+++ b/llvm/test/MC/ARM/coff-debugging-secrel.ll
@@ -0,0 +1,41 @@
+; RUN: llc -mtriple thumbv7--windows-itanium -filetype obj -o - %s \
+; RUN: | llvm-readobj -r - | FileCheck %s
+
+; ModuleID = '/Users/compnerd/work/llvm/test/MC/ARM/reduced.c'
+target datalayout = "e-m:e-p:32:32-i1:8:32-i8:8:32-i16:16:32-i64:64-v128:64:128-a:0:32-n32-S64"
+target triple = "thumbv7--windows-itanium"
+
+define arm_aapcs_vfpcc void @function() {
+entry:
+ ret void, !dbg !0
+}
+
+!llvm.dbg.cu = !{!7}
+!llvm.module.flags = !{!9, !10}
+
+!0 = metadata !{i32 1, i32 0, metadata !1, null}
+!1 = metadata !{i32 786478, metadata !2, metadata !3, metadata !"function", metadata !"function", metadata !"", i32 1, metadata !4, i1 false, i1 true, i32 0, i32 0, null, i32 0, i1 false, void ()* @function, null, null, metadata !6, i32 1} ; [ DW_TAG_subprogram ], [line 1], [def], [function]
+!2 = metadata !{metadata !"/Users/compnerd/work/llvm/test/MC/ARM/reduced.c", metadata !"/Users/compnerd/work/llvm"}
+!3 = metadata !{i32 786473, metadata !2} ; [ DW_TAG_file_type] [/Users/compnerd/work/llvm/test/MC/ARM/reduced.c]
+!4 = metadata !{i32 786453, i32 0, null, metadata !"", i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !5, i32 0, null, null, null} ; [ DW_TAG_subroutine_type ], [line 0, size 0, align 0, offset 0] [from ]
+!5 = metadata !{null}
+!6 = metadata !{}
+!7 = metadata !{i32 786449, metadata !2, i32 12, metadata !"clang version 3.5.0", i1 false, metadata !"", i32 0, metadata !6, metadata !6, metadata !8, metadata !6, metadata !6, metadata !"", i32 1} ; [ DW_TAG_compile_unit ] [/Users/compnerd/work/llvm/test/MC/ARM/reduced.c] [DW_LANG_C99]
+!8 = metadata !{metadata !1}
+!9 = metadata !{i32 2, metadata !"Dwarf Version", i32 4}
+!10 = metadata !{i32 1, metadata !"Debug Info Version", i32 1}
+
+; CHECK: Relocations [
+; CHECK: Section {{.*}} .debug_info {
+; CHECK: 0x6 IMAGE_REL_ARM_SECREL .debug_abbrev
+; CHECK: 0xC IMAGE_REL_ARM_SECREL .debug_str
+; CHECK: 0x12 IMAGE_REL_ARM_SECREL .debug_str
+; CHECK: 0x16 IMAGE_REL_ARM_SECREL .debug_line
+; CHECK: 0x1A IMAGE_REL_ARM_SECREL .debug_str
+; CHECK: 0x27 IMAGE_REL_ARM_SECREL .debug_str
+; CHECK: }
+; CHECK: Section {{.*}}.debug_pubnames {
+; CHECK: 0x6 IMAGE_REL_ARM_SECREL .debug_info
+; CHECK: }
+; CHECK: ]
+
OpenPOWER on IntegriCloud