xref: /llvm-project/llvm/test/CodeGen/ARM/stack-guard-elf.ll (revision 4cb90ca8f8bfbe8dc938a1b8b821d98640cbab4c)
16ae7b735SFangrui Song; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 3
25888dee7SFangrui Song;; direct-access-external-data is false due to PIC Level, so __stack_chk_guard
35888dee7SFangrui Song;; is dso_preemtable. Check that we use GOT PIC code sequence as well because
45888dee7SFangrui Song;; R_ARM_GOT_ABS does not have assembler support.
56ae7b735SFangrui Song; RUN: llc -relocation-model=static < %s | FileCheck %s
65888dee7SFangrui Song; RUN: llc -relocation-model=pic < %s | FileCheck %s
73b943c02SFangrui Song;; Also check Thumb1 and Thumb2.
83b943c02SFangrui Song; RUN: llc -mtriple=thumbv6-linux-gnueabi -relocation-model=static < %s | FileCheck %s --check-prefix=THUMB1
93b943c02SFangrui Song; RUN: llc -mtriple=thumbv6-linux-gnueabi -relocation-model=pic < %s | FileCheck %s --check-prefix=THUMB1-PIC
103b943c02SFangrui Song; RUN: llc -mtriple=thumbv7-linux-gnueabi -relocation-model=static < %s | FileCheck %s --check-prefix=THUMB2
113b943c02SFangrui Song; RUN: llc -mtriple=thumbv7-linux-gnueabi -relocation-model=pic < %s | FileCheck %s --check-prefix=THUMB2-PIC
126ae7b735SFangrui Song
136ae7b735SFangrui Songtarget triple = "armv7a-linux-gnueabi"
146ae7b735SFangrui Song
156ae7b735SFangrui Songdefine i32 @test1() #0 {
166ae7b735SFangrui Song; CHECK-LABEL: test1:
176ae7b735SFangrui Song; CHECK:       @ %bb.0:
186ae7b735SFangrui Song; CHECK-NEXT:    push {r11, lr}
196ae7b735SFangrui Song; CHECK-NEXT:    sub sp, sp, #8
206ae7b735SFangrui Song; CHECK-NEXT:    sub sp, sp, #1024
215888dee7SFangrui Song; CHECK-NEXT:    ldr r0, .LCPI0_0
225888dee7SFangrui Song; CHECK-NEXT:  .LPC0_0:
235888dee7SFangrui Song; CHECK-NEXT:    add r0, pc, r0
246ae7b735SFangrui Song; CHECK-NEXT:    ldr r0, [r0]
256ae7b735SFangrui Song; CHECK-NEXT:    ldr r0, [r0]
266ae7b735SFangrui Song; CHECK-NEXT:    str r0, [sp, #1028]
276ae7b735SFangrui Song; CHECK-NEXT:    add r0, sp, #4
286ae7b735SFangrui Song; CHECK-NEXT:    bl foo
296ae7b735SFangrui Song; CHECK-NEXT:    ldr r0, [sp, #1028]
305888dee7SFangrui Song; CHECK-NEXT:    ldr r1, .LCPI0_1
315888dee7SFangrui Song; CHECK-NEXT:  .LPC0_1:
325888dee7SFangrui Song; CHECK-NEXT:    add r1, pc, r1
336ae7b735SFangrui Song; CHECK-NEXT:    ldr r1, [r1]
346ae7b735SFangrui Song; CHECK-NEXT:    ldr r1, [r1]
356ae7b735SFangrui Song; CHECK-NEXT:    cmp r1, r0
366ae7b735SFangrui Song; CHECK-NEXT:    moveq r0, #0
376ae7b735SFangrui Song; CHECK-NEXT:    addeq sp, sp, #8
386ae7b735SFangrui Song; CHECK-NEXT:    addeq sp, sp, #1024
396ae7b735SFangrui Song; CHECK-NEXT:    popeq {r11, pc}
406ae7b735SFangrui Song; CHECK-NEXT:  .LBB0_1:
416ae7b735SFangrui Song; CHECK-NEXT:    bl __stack_chk_fail
425888dee7SFangrui Song; CHECK-NEXT:    .p2align 2
435888dee7SFangrui Song; CHECK-NEXT:  @ %bb.2:
445888dee7SFangrui Song; CHECK-NEXT:  .LCPI0_0:
455888dee7SFangrui Song; CHECK-NEXT:  .Ltmp0:
465888dee7SFangrui Song; CHECK-NEXT:    .long __stack_chk_guard(GOT_PREL)-((.LPC0_0+8)-.Ltmp0)
475888dee7SFangrui Song; CHECK-NEXT:  .LCPI0_1:
485888dee7SFangrui Song; CHECK-NEXT:  .Ltmp1:
495888dee7SFangrui Song; CHECK-NEXT:    .long __stack_chk_guard(GOT_PREL)-((.LPC0_1+8)-.Ltmp1)
503b943c02SFangrui Song;
513b943c02SFangrui Song; THUMB1-LABEL: test1:
523b943c02SFangrui Song; THUMB1:       @ %bb.0:
533b943c02SFangrui Song; THUMB1-NEXT:    .save {r4, r5, r6, lr}
543b943c02SFangrui Song; THUMB1-NEXT:    push {r4, r5, r6, lr}
553b943c02SFangrui Song; THUMB1-NEXT:    .pad #508
563b943c02SFangrui Song; THUMB1-NEXT:    sub sp, #508
573b943c02SFangrui Song; THUMB1-NEXT:    .pad #508
583b943c02SFangrui Song; THUMB1-NEXT:    sub sp, #508
593b943c02SFangrui Song; THUMB1-NEXT:    .pad #16
603b943c02SFangrui Song; THUMB1-NEXT:    sub sp, #16
613b943c02SFangrui Song; THUMB1-NEXT:    ldr r0, .LCPI0_0
62*4cb90ca8SFangrui Song; THUMB1-NEXT:  .LPC0_0:
63*4cb90ca8SFangrui Song; THUMB1-NEXT:    add r0, pc
643b943c02SFangrui Song; THUMB1-NEXT:    ldr r0, [r0]
653b943c02SFangrui Song; THUMB1-NEXT:    ldr r0, [r0]
663b943c02SFangrui Song; THUMB1-NEXT:    add r1, sp, #904
673b943c02SFangrui Song; THUMB1-NEXT:    str r0, [r1, #124]
683b943c02SFangrui Song; THUMB1-NEXT:    add r0, sp, #4
693b943c02SFangrui Song; THUMB1-NEXT:    bl foo
703b943c02SFangrui Song; THUMB1-NEXT:    add r0, sp, #904
713b943c02SFangrui Song; THUMB1-NEXT:    ldr r0, [r0, #124]
72*4cb90ca8SFangrui Song; THUMB1-NEXT:    ldr r1, .LCPI0_1
73*4cb90ca8SFangrui Song; THUMB1-NEXT:  .LPC0_1:
74*4cb90ca8SFangrui Song; THUMB1-NEXT:    add r1, pc
753b943c02SFangrui Song; THUMB1-NEXT:    ldr r1, [r1]
763b943c02SFangrui Song; THUMB1-NEXT:    ldr r1, [r1]
773b943c02SFangrui Song; THUMB1-NEXT:    cmp r1, r0
783b943c02SFangrui Song; THUMB1-NEXT:    bne .LBB0_2
793b943c02SFangrui Song; THUMB1-NEXT:  @ %bb.1:
803b943c02SFangrui Song; THUMB1-NEXT:    movs r0, #0
813b943c02SFangrui Song; THUMB1-NEXT:    add sp, #508
823b943c02SFangrui Song; THUMB1-NEXT:    add sp, #508
833b943c02SFangrui Song; THUMB1-NEXT:    add sp, #16
843b943c02SFangrui Song; THUMB1-NEXT:    pop {r4, r5, r6, pc}
853b943c02SFangrui Song; THUMB1-NEXT:  .LBB0_2:
863b943c02SFangrui Song; THUMB1-NEXT:    bl __stack_chk_fail
873b943c02SFangrui Song; THUMB1-NEXT:    .p2align 2
883b943c02SFangrui Song; THUMB1-NEXT:  @ %bb.3:
893b943c02SFangrui Song; THUMB1-NEXT:  .LCPI0_0:
90*4cb90ca8SFangrui Song; THUMB1-NEXT:  .Ltmp0:
91*4cb90ca8SFangrui Song; THUMB1-NEXT:    .long __stack_chk_guard(GOT_PREL)-((.LPC0_0+4)-.Ltmp0)
92*4cb90ca8SFangrui Song; THUMB1-NEXT:  .LCPI0_1:
93*4cb90ca8SFangrui Song; THUMB1-NEXT:  .Ltmp1:
94*4cb90ca8SFangrui Song; THUMB1-NEXT:    .long __stack_chk_guard(GOT_PREL)-((.LPC0_1+4)-.Ltmp1)
953b943c02SFangrui Song;
963b943c02SFangrui Song; THUMB1-PIC-LABEL: test1:
973b943c02SFangrui Song; THUMB1-PIC:       @ %bb.0:
983b943c02SFangrui Song; THUMB1-PIC-NEXT:    .save {r4, r5, r6, lr}
993b943c02SFangrui Song; THUMB1-PIC-NEXT:    push {r4, r5, r6, lr}
1003b943c02SFangrui Song; THUMB1-PIC-NEXT:    .pad #508
1013b943c02SFangrui Song; THUMB1-PIC-NEXT:    sub sp, #508
1023b943c02SFangrui Song; THUMB1-PIC-NEXT:    .pad #508
1033b943c02SFangrui Song; THUMB1-PIC-NEXT:    sub sp, #508
1043b943c02SFangrui Song; THUMB1-PIC-NEXT:    .pad #16
1053b943c02SFangrui Song; THUMB1-PIC-NEXT:    sub sp, #16
1063b943c02SFangrui Song; THUMB1-PIC-NEXT:    ldr r0, .LCPI0_0
1073b943c02SFangrui Song; THUMB1-PIC-NEXT:  .LPC0_0:
1083b943c02SFangrui Song; THUMB1-PIC-NEXT:    add r0, pc
1093b943c02SFangrui Song; THUMB1-PIC-NEXT:    ldr r0, [r0]
1103b943c02SFangrui Song; THUMB1-PIC-NEXT:    ldr r0, [r0]
1113b943c02SFangrui Song; THUMB1-PIC-NEXT:    add r1, sp, #904
1123b943c02SFangrui Song; THUMB1-PIC-NEXT:    str r0, [r1, #124]
1133b943c02SFangrui Song; THUMB1-PIC-NEXT:    add r0, sp, #4
1143b943c02SFangrui Song; THUMB1-PIC-NEXT:    bl foo
1153b943c02SFangrui Song; THUMB1-PIC-NEXT:    add r0, sp, #904
1163b943c02SFangrui Song; THUMB1-PIC-NEXT:    ldr r0, [r0, #124]
1173b943c02SFangrui Song; THUMB1-PIC-NEXT:    ldr r1, .LCPI0_1
1183b943c02SFangrui Song; THUMB1-PIC-NEXT:  .LPC0_1:
1193b943c02SFangrui Song; THUMB1-PIC-NEXT:    add r1, pc
1203b943c02SFangrui Song; THUMB1-PIC-NEXT:    ldr r1, [r1]
1213b943c02SFangrui Song; THUMB1-PIC-NEXT:    ldr r1, [r1]
1223b943c02SFangrui Song; THUMB1-PIC-NEXT:    cmp r1, r0
1233b943c02SFangrui Song; THUMB1-PIC-NEXT:    bne .LBB0_2
1243b943c02SFangrui Song; THUMB1-PIC-NEXT:  @ %bb.1:
1253b943c02SFangrui Song; THUMB1-PIC-NEXT:    movs r0, #0
1263b943c02SFangrui Song; THUMB1-PIC-NEXT:    add sp, #508
1273b943c02SFangrui Song; THUMB1-PIC-NEXT:    add sp, #508
1283b943c02SFangrui Song; THUMB1-PIC-NEXT:    add sp, #16
1293b943c02SFangrui Song; THUMB1-PIC-NEXT:    pop {r4, r5, r6, pc}
1303b943c02SFangrui Song; THUMB1-PIC-NEXT:  .LBB0_2:
1313b943c02SFangrui Song; THUMB1-PIC-NEXT:    bl __stack_chk_fail
1323b943c02SFangrui Song; THUMB1-PIC-NEXT:    .p2align 2
1333b943c02SFangrui Song; THUMB1-PIC-NEXT:  @ %bb.3:
1343b943c02SFangrui Song; THUMB1-PIC-NEXT:  .LCPI0_0:
1353b943c02SFangrui Song; THUMB1-PIC-NEXT:  .Ltmp0:
1363b943c02SFangrui Song; THUMB1-PIC-NEXT:    .long __stack_chk_guard(GOT_PREL)-((.LPC0_0+4)-.Ltmp0)
1373b943c02SFangrui Song; THUMB1-PIC-NEXT:  .LCPI0_1:
1383b943c02SFangrui Song; THUMB1-PIC-NEXT:  .Ltmp1:
1393b943c02SFangrui Song; THUMB1-PIC-NEXT:    .long __stack_chk_guard(GOT_PREL)-((.LPC0_1+4)-.Ltmp1)
1403b943c02SFangrui Song;
1413b943c02SFangrui Song; THUMB2-LABEL: test1:
1423b943c02SFangrui Song; THUMB2:       @ %bb.0:
1433b943c02SFangrui Song; THUMB2-NEXT:    .save {r7, lr}
1443b943c02SFangrui Song; THUMB2-NEXT:    push {r7, lr}
1453b943c02SFangrui Song; THUMB2-NEXT:    .pad #1032
1463b943c02SFangrui Song; THUMB2-NEXT:    sub.w sp, sp, #1032
147*4cb90ca8SFangrui Song; THUMB2-NEXT:    ldr r0, .LCPI0_0
148*4cb90ca8SFangrui Song; THUMB2-NEXT:  .LPC0_0:
149*4cb90ca8SFangrui Song; THUMB2-NEXT:    add r0, pc
1503b943c02SFangrui Song; THUMB2-NEXT:    ldr r0, [r0]
1513b943c02SFangrui Song; THUMB2-NEXT:    ldr r0, [r0]
1523b943c02SFangrui Song; THUMB2-NEXT:    str.w r0, [sp, #1028]
1533b943c02SFangrui Song; THUMB2-NEXT:    add r0, sp, #4
1543b943c02SFangrui Song; THUMB2-NEXT:    bl foo
1553b943c02SFangrui Song; THUMB2-NEXT:    ldr.w r0, [sp, #1028]
156*4cb90ca8SFangrui Song; THUMB2-NEXT:    ldr r1, .LCPI0_1
157*4cb90ca8SFangrui Song; THUMB2-NEXT:  .LPC0_1:
158*4cb90ca8SFangrui Song; THUMB2-NEXT:    add r1, pc
1593b943c02SFangrui Song; THUMB2-NEXT:    ldr r1, [r1]
1603b943c02SFangrui Song; THUMB2-NEXT:    ldr r1, [r1]
1613b943c02SFangrui Song; THUMB2-NEXT:    cmp r1, r0
1623b943c02SFangrui Song; THUMB2-NEXT:    ittt eq
1633b943c02SFangrui Song; THUMB2-NEXT:    moveq r0, #0
1643b943c02SFangrui Song; THUMB2-NEXT:    addeq.w sp, sp, #1032
1653b943c02SFangrui Song; THUMB2-NEXT:    popeq {r7, pc}
1663b943c02SFangrui Song; THUMB2-NEXT:  .LBB0_1:
1673b943c02SFangrui Song; THUMB2-NEXT:    bl __stack_chk_fail
168*4cb90ca8SFangrui Song; THUMB2-NEXT:    .p2align 2
169*4cb90ca8SFangrui Song; THUMB2-NEXT:  @ %bb.2:
170*4cb90ca8SFangrui Song; THUMB2-NEXT:  .LCPI0_0:
171*4cb90ca8SFangrui Song; THUMB2-NEXT:  .Ltmp0:
172*4cb90ca8SFangrui Song; THUMB2-NEXT:    .long __stack_chk_guard(GOT_PREL)-((.LPC0_0+4)-.Ltmp0)
173*4cb90ca8SFangrui Song; THUMB2-NEXT:  .LCPI0_1:
174*4cb90ca8SFangrui Song; THUMB2-NEXT:  .Ltmp1:
175*4cb90ca8SFangrui Song; THUMB2-NEXT:    .long __stack_chk_guard(GOT_PREL)-((.LPC0_1+4)-.Ltmp1)
1763b943c02SFangrui Song;
1773b943c02SFangrui Song; THUMB2-PIC-LABEL: test1:
1783b943c02SFangrui Song; THUMB2-PIC:       @ %bb.0:
1793b943c02SFangrui Song; THUMB2-PIC-NEXT:    .save {r7, lr}
1803b943c02SFangrui Song; THUMB2-PIC-NEXT:    push {r7, lr}
1813b943c02SFangrui Song; THUMB2-PIC-NEXT:    .pad #1032
1823b943c02SFangrui Song; THUMB2-PIC-NEXT:    sub.w sp, sp, #1032
1833b943c02SFangrui Song; THUMB2-PIC-NEXT:    ldr r0, .LCPI0_0
1843b943c02SFangrui Song; THUMB2-PIC-NEXT:  .LPC0_0:
1853b943c02SFangrui Song; THUMB2-PIC-NEXT:    add r0, pc
1863b943c02SFangrui Song; THUMB2-PIC-NEXT:    ldr r0, [r0]
1873b943c02SFangrui Song; THUMB2-PIC-NEXT:    ldr r0, [r0]
1883b943c02SFangrui Song; THUMB2-PIC-NEXT:    str.w r0, [sp, #1028]
1893b943c02SFangrui Song; THUMB2-PIC-NEXT:    add r0, sp, #4
1903b943c02SFangrui Song; THUMB2-PIC-NEXT:    bl foo
1913b943c02SFangrui Song; THUMB2-PIC-NEXT:    ldr.w r0, [sp, #1028]
1923b943c02SFangrui Song; THUMB2-PIC-NEXT:    ldr r1, .LCPI0_1
1933b943c02SFangrui Song; THUMB2-PIC-NEXT:  .LPC0_1:
1943b943c02SFangrui Song; THUMB2-PIC-NEXT:    add r1, pc
1953b943c02SFangrui Song; THUMB2-PIC-NEXT:    ldr r1, [r1]
1963b943c02SFangrui Song; THUMB2-PIC-NEXT:    ldr r1, [r1]
1973b943c02SFangrui Song; THUMB2-PIC-NEXT:    cmp r1, r0
1983b943c02SFangrui Song; THUMB2-PIC-NEXT:    ittt eq
1993b943c02SFangrui Song; THUMB2-PIC-NEXT:    moveq r0, #0
2003b943c02SFangrui Song; THUMB2-PIC-NEXT:    addeq.w sp, sp, #1032
2013b943c02SFangrui Song; THUMB2-PIC-NEXT:    popeq {r7, pc}
2023b943c02SFangrui Song; THUMB2-PIC-NEXT:  .LBB0_1:
2033b943c02SFangrui Song; THUMB2-PIC-NEXT:    bl __stack_chk_fail
2043b943c02SFangrui Song; THUMB2-PIC-NEXT:    .p2align 2
2053b943c02SFangrui Song; THUMB2-PIC-NEXT:  @ %bb.2:
2063b943c02SFangrui Song; THUMB2-PIC-NEXT:  .LCPI0_0:
2073b943c02SFangrui Song; THUMB2-PIC-NEXT:  .Ltmp0:
2083b943c02SFangrui Song; THUMB2-PIC-NEXT:    .long __stack_chk_guard(GOT_PREL)-((.LPC0_0+4)-.Ltmp0)
2093b943c02SFangrui Song; THUMB2-PIC-NEXT:  .LCPI0_1:
2103b943c02SFangrui Song; THUMB2-PIC-NEXT:  .Ltmp1:
2113b943c02SFangrui Song; THUMB2-PIC-NEXT:    .long __stack_chk_guard(GOT_PREL)-((.LPC0_1+4)-.Ltmp1)
2126ae7b735SFangrui Song  %a1 = alloca [256 x i32], align 4
2136ae7b735SFangrui Song  call void @foo(ptr %a1) #3
2146ae7b735SFangrui Song  ret i32 0
2156ae7b735SFangrui Song}
2166ae7b735SFangrui Song
2176ae7b735SFangrui Songdeclare void @foo(ptr)
2186ae7b735SFangrui Song
2196ae7b735SFangrui Songattributes #0 = { nounwind sspstrong }
2206ae7b735SFangrui Song
2216ae7b735SFangrui Song!llvm.module.flags = !{!0}
2226ae7b735SFangrui Song!0 = !{i32 8, !"PIC Level", i32 2}
223