Skip to content

Commit 875629f

Browse files
author
Christian Pirker
committedMay 20, 2014
ARMEB: Additional test files for ARM fixups
llvm-svn: 209200
1 parent 9a24f88 commit 875629f

File tree

4 files changed

+223
-1
lines changed

4 files changed

+223
-1
lines changed
 

‎llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp

+4-1
Original file line numberDiff line numberDiff line change
@@ -742,8 +742,11 @@ void ARMAsmBackend::applyFixup(const MCFixup &Fixup, char *Data,
742742

743743
// Used to point to big endian bytes.
744744
unsigned FullSizeBytes;
745-
if (!IsLittleEndian)
745+
if (!IsLittleEndian) {
746746
FullSizeBytes = getFixupKindContainerSizeBytes(Fixup.getKind());
747+
assert((Offset + FullSizeBytes) <= DataSize && "Invalid fixup size!");
748+
assert(NumBytes <= FullSizeBytes && "Invalid fixup size!");
749+
}
747750

748751
// For each byte of the fragment that the fixup touches, mask in the bits from
749752
// the fixup value. The Value has been "split up" into the appropriate
+107
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
// RUN: llvm-mc -triple=armeb-eabi -mattr v7,vfp2 -filetype=obj < %s | llvm-objdump -s - | FileCheck %s
2+
3+
.syntax unified
4+
.text
5+
.align 2
6+
.code 32
7+
8+
@ARM::fixup_arm_condbl
9+
.section s_condbl,"ax",%progbits
10+
// CHECK-LABEL: Contents of section s_condbl
11+
// CHECK: 0000 0b000002
12+
bleq condbl_label+16
13+
condbl_label:
14+
15+
@ARM::fixup_arm_uncondbl
16+
.section s_uncondbl,"ax",%progbits
17+
// CHECK-LABEL: Contents of section s_uncondbl
18+
// CHECK: 0000 eb000002
19+
bl uncond_label+16
20+
uncond_label:
21+
22+
@ARM::fixup_arm_blx
23+
.section s_blx,"ax",%progbits
24+
// CHECK-LABEL: Contents of section s_blx
25+
// CHECK: 0000 fa000002
26+
blx blx_label+16
27+
blx_label:
28+
29+
@ARM::fixup_arm_uncondbranch
30+
.section s_uncondbranch,"ax",%progbits
31+
// CHECK-LABEL: Contents of section s_uncondbranch
32+
// CHECK: 0000 ea000003
33+
b uncondbranch_label+16
34+
uncondbranch_label:
35+
36+
@ARM::fixup_arm_condbranch
37+
.section s_condbranch,"ax",%progbits
38+
// CHECK-LABEL: Contents of section s_condbranch
39+
// CHECK: 0000 0a000003
40+
beq condbranch_label+16
41+
condbranch_label:
42+
43+
@ARM::fixup_arm_pcrel_10
44+
.section s_arm_pcrel_10,"ax",%progbits
45+
// CHECK-LABEL: Contents of section s_arm_pcrel_10
46+
// CHECK: 0000 ed9f0b03
47+
vldr d0, arm_pcrel_10_label+16
48+
arm_pcrel_10_label:
49+
50+
@ARM::fixup_arm_ldst_pcrel_12
51+
.section s_arm_ldst_pcrel_12,"ax",%progbits
52+
// CHECK-LABEL: Contents of section s_arm_ldst_pcrel_12
53+
// CHECK: 0000 e59f000c
54+
ldr r0, arm_ldst_pcrel_12_label+16
55+
arm_ldst_pcrel_12_label:
56+
57+
@ARM::fixup_arm_adr_pcrel_12
58+
.section s_arm_adr_pcrel_12,"ax",%progbits
59+
// CHECK-LABEL: Contents of section s_arm_adr_pcrel_12
60+
// CHECK: 0000 e28f0010
61+
adr r0, arm_adr_pcrel_12_label+20
62+
arm_adr_pcrel_12_label:
63+
64+
@ARM::fixup_arm_adr_pcrel_10_unscaled
65+
.section s_arm_adr_pcrel_10_unscaled,"ax",%progbits
66+
// CHECK-LABEL: Contents of section s_arm_adr_pcrel_10_unscaled
67+
// CHECK: 0000 e1cf01d4
68+
ldrd r0, r1, arm_adr_pcrel_10_unscaled_label+24
69+
arm_adr_pcrel_10_unscaled_label:
70+
71+
@ARM::fixup_arm_movw_lo16
72+
.section s_movw,"ax",%progbits
73+
// CHECK-LABEL: Contents of section s_movw
74+
// CHECK: 0000 e3000008
75+
movw r0, :lower16:(some_label+8)
76+
77+
@ARM::fixup_arm_movt_hi16
78+
.section s_movt,"ax",%progbits
79+
// CHECK-LABEL: Contents of section s_movt
80+
// CHECK: 0000 e34f0ffc
81+
movt r0, :upper16:GOT-(movt_label)
82+
movt_label:
83+
84+
@FK_Data_1
85+
.section s_fk_data_1
86+
// CHECK-LABEL: Contents of section s_fk_data_1
87+
// CHECK: 0000 01
88+
fk_data1_l_label:
89+
.byte fk_data1_h_label-fk_data1_l_label
90+
fk_data1_h_label:
91+
92+
@FK_Data_2
93+
.section s_fk_data_2
94+
// CHECK-LABEL: Contents of section s_fk_data_2
95+
// CHECK: 0000 0002
96+
fk_data2_l_label:
97+
.short fk_data2_h_label-fk_data2_l_label
98+
fk_data2_h_label:
99+
100+
@FK_Data_4
101+
.section s_fk_data_4
102+
// CHECK-LABEL: Contents of section s_fk_data_4
103+
// CHECK: 0000 00000004
104+
fk_data4_l_label:
105+
.long fk_data4_h_label-fk_data4_l_label
106+
fk_data4_h_label:
107+
+63
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
// RUN: llvm-mc -triple=armeb-eabi -mattr v7,vfp2 -filetype=obj < %s | llvm-objdump -s - | FileCheck %s
2+
3+
.syntax unified
4+
.text
5+
.align 2
6+
.code 16
7+
8+
@ARM::fixup_arm_thumb_bl
9+
.section s_thumb_bl,"ax",%progbits
10+
// CHECK-LABEL: Contents of section s_thumb_bl
11+
// CHECK: 0000 f000f801
12+
bl thumb_bl_label
13+
nop
14+
thumb_bl_label:
15+
16+
@ARM::fixup_arm_thumb_blx
17+
// CHECK-LABEL: Contents of section s_thumb_bl
18+
// CHECK: 0000 f000e802
19+
.section s_thumb_blx,"ax",%progbits
20+
blx thumb_blx_label+8
21+
thumb_blx_label:
22+
23+
@ARM::fixup_arm_thumb_br
24+
.section s_thumb_br,"ax",%progbits
25+
// CHECK-LABEL: Contents of section s_thumb_br
26+
// CHECK: 0000 e000bf00
27+
b thumb_br_label
28+
nop
29+
thumb_br_label:
30+
31+
@ARM::fixup_arm_thumb_bcc
32+
.section s_thumb_bcc,"ax",%progbits
33+
// CHECK-LABEL: Contents of section s_thumb_bcc
34+
// CHECK: 0000 d000bf00
35+
beq thumb_bcc_label
36+
nop
37+
thumb_bcc_label:
38+
39+
@ARM::fixup_arm_thumb_cb
40+
.section s_thumb_cb,"ax",%progbits
41+
// CHECK-LABEL: Contents of section s_thumb_cb
42+
// CHECK: 0000 b100bf00
43+
cbz r0, thumb_cb_label
44+
nop
45+
thumb_cb_label:
46+
47+
@ARM::fixup_arm_thumb_cp
48+
.section s_thumb_cp,"ax",%progbits
49+
// CHECK-LABEL: Contents of section s_thumb_cp
50+
// CHECK: 0000 4801bf00
51+
ldr r0, =thumb_cp_label
52+
nop
53+
nop
54+
thumb_cp_label:
55+
56+
@ARM::fixup_arm_thumb_adr_pcrel_10
57+
.section s_thumb_adr_pcrel_10,"ax",%progbits
58+
// CHECK-LABEL: Contents of section s_thumb_adr_pcrel_10
59+
// CHECK: 0000 a000bf00
60+
adr r0, thumb_adr_pcrel_10_label
61+
nop
62+
thumb_adr_pcrel_10_label:
63+
+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
// RUN: llvm-mc -triple=thumbeb-eabi -mattr v7,vfp2 -filetype=obj < %s | llvm-objdump -s - | FileCheck %s
2+
3+
.syntax unified
4+
.text
5+
.align 2
6+
7+
@ARM::fixup_t2_movw_lo16
8+
.section s_movw,"ax",%progbits
9+
// CHECK-LABEL: Contents of section s_movw
10+
// CHECK: 0000 f2400008
11+
movw r0, :lower16:(some_label+8)
12+
13+
@ARM::fixup_t2_movt_hi16
14+
.section s_movt,"ax",%progbits
15+
// CHECK-LABEL: Contents of section s_movt
16+
// CHECK: 0000 f6cf70fc
17+
movt r0, :upper16:GOT-(movt_label)
18+
movt_label:
19+
20+
@ARM::fixup_t2_uncondbranch
21+
.section s_uncondbranch,"ax",%progbits
22+
// CHECK-LABEL: Contents of section s_uncondbranch
23+
// CHECK: 0000 f000b801 bf00
24+
b.w uncond_label
25+
nop
26+
uncond_label:
27+
28+
@ARM::fixup_t2_condbranch
29+
.section s_condbranch,"ax",%progbits
30+
// CHECK-LABEL: Contents of section s_condbranch
31+
// CHECK: 0000 f0008001 bf00
32+
beq.w cond_label
33+
nop
34+
cond_label:
35+
36+
@ARM::fixup_t2_ldst_precel_12
37+
.section s_ldst_precel_12,"ax",%progbits
38+
ldr r0, ldst_precel_12_label
39+
nop
40+
nop
41+
ldst_precel_12_label:
42+
43+
@ARM::fixup_t2_adr_pcrel_12
44+
.section s_adr_pcrel_12,"ax",%progbits
45+
adr r0, adr_pcrel_12_label
46+
nop
47+
nop
48+
adr_pcrel_12_label:
49+

0 commit comments

Comments
 (0)