151 lines · plain
1# RUN: llc -verify-machineinstrs -mtriple=aarch64-none-linux-gnu \2# RUN: -start-before aarch64-sls-hardening -o - %s \3# RUN: -mattr=+pauth,+harden-sls-retbr \4# RUN: | FileCheck %s --check-prefixes=CHECK,ISBDSB5# RUN: llc -verify-machineinstrs -mtriple=aarch64-none-linux-gnu \6# RUN: -start-before aarch64-sls-hardening -o - %s \7# RUN: -mattr=+pauth,+harden-sls-retbr -mattr=+sb \8# RUN: | FileCheck %s --check-prefixes=CHECK,SB9 10# Check that the SLS hardening pass also protects BRA* indirect branches that11# llvm currently does not generate.12--- |13 @ptr_aa = private unnamed_addr constant [2 x ptr] [ptr blockaddress(@br_aa, %return), ptr blockaddress(@br_aa, %l2)], align 814 @ptr_aaz = private unnamed_addr constant [2 x ptr] [ptr blockaddress(@br_aaz, %return), ptr blockaddress(@br_aaz, %l2)], align 815 @ptr_ab = private unnamed_addr constant [2 x ptr] [ptr blockaddress(@br_ab, %return), ptr blockaddress(@br_ab, %l2)], align 816 @ptr_abz = private unnamed_addr constant [2 x ptr] [ptr blockaddress(@br_abz, %return), ptr blockaddress(@br_abz, %l2)], align 817 18 define dso_local i32 @br_aa(i32 %a, i32 %b, i32 %i) {19 entry:20 br label %l221 l2:22 br label %return23 return:24 ret i32 undef25 }26 define dso_local i32 @br_aaz(i32 %a, i32 %b, i32 %i) {27 entry:28 br label %l229 l2:30 br label %return31 return:32 ret i32 undef33 }34 define dso_local i32 @br_ab(i32 %a, i32 %b, i32 %i) {35 entry:36 br label %l237 l2:38 br label %return39 return:40 ret i32 undef41 }42 define dso_local i32 @br_abz(i32 %a, i32 %b, i32 %i) {43 entry:44 br label %l245 l2:46 br label %return47 return:48 ret i32 undef49 }50...51---52name: br_aa53tracksRegLiveness: true54body: |55 ; CHECK-LABEL: br_aa:56 bb.0.entry:57 successors: %bb.2, %bb.158 liveins: $w259 $x8 = ADRP target-flags(aarch64-page) @ptr_aa60 renamable $x8 = ADDXri $x8, target-flags(aarch64-pageoff, aarch64-nc) @ptr_aa, 061 renamable $x8 = LDRXroW killed renamable $x8, killed renamable $w2, 1, 162 BRAA killed renamable $x8, $sp63 ; CHECK: braa x8, sp64 ; ISBDSB-NEXT: dsb sy65 ; ISBDSB-NEXT: isb66 ; SB-NEXT: {{ sb$}}67 68 bb.1.l2 (ir-block-address-taken %ir-block.l2):69 renamable $w0 = MOVZWi 1, 070 RET undef $lr, implicit $w071 72 bb.2.return (ir-block-address-taken %ir-block.return):73 $w0 = ORRWrs $wzr, $wzr, 074 RET undef $lr, implicit $w075...76---77name: br_aaz78tracksRegLiveness: true79body: |80 ; CHECK-LABEL: br_aaz:81 bb.0.entry:82 successors: %bb.2, %bb.183 liveins: $w284 $x8 = ADRP target-flags(aarch64-page) @ptr_aaz85 renamable $x8 = ADDXri $x8, target-flags(aarch64-pageoff, aarch64-nc) @ptr_aaz, 086 renamable $x8 = LDRXroW killed renamable $x8, killed renamable $w2, 1, 187 BRAAZ killed renamable $x888 ; CHECK: braaz x889 ; ISBDSB-NEXT: dsb sy90 ; ISBDSB-NEXT: isb91 ; SB-NEXT: {{ sb$}}92 93 bb.1.l2 (ir-block-address-taken %ir-block.l2):94 renamable $w0 = MOVZWi 1, 095 RET undef $lr, implicit $w096 97 bb.2.return (ir-block-address-taken %ir-block.return):98 $w0 = ORRWrs $wzr, $wzr, 099 RET undef $lr, implicit $w0100...101---102name: br_ab103tracksRegLiveness: true104body: |105 ; CHECK-LABEL: br_ab:106 bb.0.entry:107 successors: %bb.2, %bb.1108 liveins: $w2109 $x8 = ADRP target-flags(aarch64-page) @ptr_ab110 renamable $x8 = ADDXri $x8, target-flags(aarch64-pageoff, aarch64-nc) @ptr_ab, 0111 renamable $x8 = LDRXroW killed renamable $x8, killed renamable $w2, 1, 1112 BRAA killed renamable $x8, $sp113 ; CHECK: braa x8, sp114 ; ISBDSB-NEXT: dsb sy115 ; ISBDSB-NEXT: isb116 ; SB-NEXT: {{ sb$}}117 118 bb.1.l2 (ir-block-address-taken %ir-block.l2):119 renamable $w0 = MOVZWi 1, 0120 RET undef $lr, implicit $w0121 122 bb.2.return (ir-block-address-taken %ir-block.return):123 $w0 = ORRWrs $wzr, $wzr, 0124 RET undef $lr, implicit $w0125...126---127name: br_abz128tracksRegLiveness: true129body: |130 ; CHECK-LABEL: br_abz:131 bb.0.entry:132 successors: %bb.2, %bb.1133 liveins: $w2134 $x8 = ADRP target-flags(aarch64-page) @ptr_abz135 renamable $x8 = ADDXri $x8, target-flags(aarch64-pageoff, aarch64-nc) @ptr_abz, 0136 renamable $x8 = LDRXroW killed renamable $x8, killed renamable $w2, 1, 1137 BRAAZ killed renamable $x8138 ; CHECK: braaz x8139 ; ISBDSB-NEXT: dsb sy140 ; ISBDSB-NEXT: isb141 ; SB-NEXT: {{ sb$}}142 143 bb.1.l2 (ir-block-address-taken %ir-block.l2):144 renamable $w0 = MOVZWi 1, 0145 RET undef $lr, implicit $w0146 147 bb.2.return (ir-block-address-taken %ir-block.return):148 $w0 = ORRWrs $wzr, $wzr, 0149 RET undef $lr, implicit $w0150...151