brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.9 KiB · fca92cb Raw
211 lines · plain
1; Regular stack poisoning.2; RUN: opt < %s -passes=asan -asan-use-after-scope=0 -S | FileCheck --check-prefixes=CHECK,ENTRY,EXIT %s3 4; Stack poisoning with stack-use-after-scope.5; RUN: opt < %s -passes=asan -asan-use-after-scope=1 -S | FileCheck --check-prefixes=CHECK,ENTRY-UAS,EXIT-UAS %s6 7target datalayout = "e-i64:64-f80:128-s:64-n8:16:32:64-S128"8target triple = "x86_64-unknown-linux-gnu"9 10declare void @Foo(ptr)11 12define void @Bar() uwtable sanitize_address {13entry:14  %x = alloca [650 x i8], align 1615  %xx = getelementptr inbounds [650 x i8], ptr %x, i64 0, i64 016 17  %y = alloca [13 x i8], align 118  %yy = getelementptr inbounds [13 x i8], ptr %y, i64 0, i64 019 20  %z = alloca [40 x i8], align 121  %zz = getelementptr inbounds [40 x i8], ptr %z, i64 0, i64 022 23  ; CHECK: [[SHADOW_BASE:%[0-9]+]] = add i64 %{{[0-9]+}}, 214745088024 25  ; F1F1F1F126  ; ENTRY-NEXT: [[OFFSET:%[0-9]+]] = add i64 [[SHADOW_BASE]], 027  ; ENTRY-NEXT: [[PTR:%[0-9]+]] = inttoptr i64 [[OFFSET]] to ptr28  ; ENTRY-NEXT: store i32 -235802127, ptr [[PTR]], align 129 30  ; 02F2F2F2F2F2F2F231  ; ENTRY-NEXT: [[OFFSET:%[0-9]+]] = add i64 [[SHADOW_BASE]], 8532  ; ENTRY-NEXT: [[PTR:%[0-9]+]] = inttoptr i64 [[OFFSET]] to ptr33  ; ENTRY-NEXT: store i64 -940422246894996990, ptr [[PTR]], align 134 35  ; F2F2F2F2F2F2F2F236  ; ENTRY-NEXT: [[OFFSET:%[0-9]+]] = add i64 [[SHADOW_BASE]], 9337  ; ENTRY-NEXT: [[PTR:%[0-9]+]] = inttoptr i64 [[OFFSET]] to ptr38  ; ENTRY-NEXT: store i64 -940422246894996750, ptr [[PTR]], align 139 40  ; F20005F2F200000041  ; ENTRY-NEXT: [[OFFSET:%[0-9]+]] = add i64 [[SHADOW_BASE]], 10142  ; ENTRY-NEXT: [[PTR:%[0-9]+]] = inttoptr i64 [[OFFSET]] to ptr43  ; ENTRY-NEXT: store i64 1043442499826, ptr [[PTR]], align 144 45  ; F3F3F3F346  ; ENTRY-NEXT: [[OFFSET:%[0-9]+]] = add i64 [[SHADOW_BASE]], 11147  ; ENTRY-NEXT: [[PTR:%[0-9]+]] = inttoptr i64 [[OFFSET]] to ptr48  ; ENTRY-NEXT: store i32 -202116109, ptr [[PTR]], align 149 50  ; F351  ; ENTRY-NEXT: [[OFFSET:%[0-9]+]] = add i64 [[SHADOW_BASE]], 11552  ; ENTRY-NEXT: [[PTR:%[0-9]+]] = inttoptr i64 [[OFFSET]] to ptr53  ; ENTRY-NEXT: store i8 -13, ptr [[PTR]], align 154 55  ; F1F1F1F156  ; ENTRY-UAS-NEXT: [[OFFSET:%[0-9]+]] = add i64 [[SHADOW_BASE]], 057  ; ENTRY-UAS-NEXT: [[PTR:%[0-9]+]] = inttoptr i64 [[OFFSET]] to ptr58  ; ENTRY-UAS-NEXT: store i32 -235802127, ptr [[PTR]], align 159 60  ; F8F8F8...61  ; ENTRY-UAS-NEXT: [[OFFSET:%[0-9]+]] = add i64 [[SHADOW_BASE]], 462  ; ENTRY-UAS-NEXT: call void @__asan_set_shadow_f8(i64 [[OFFSET]], i64 82)63 64  ; F2F2F2F2F2F2F2F265  ; ENTRY-UAS-NEXT: [[OFFSET:%[0-9]+]] = add i64 [[SHADOW_BASE]], 8666  ; ENTRY-UAS-NEXT: [[PTR:%[0-9]+]] = inttoptr i64 [[OFFSET]] to ptr67  ; ENTRY-UAS-NEXT: store i64 -940422246894996750, ptr [[PTR]], align 168 69  ; F2F2F2F2F2F2F2F270  ; ENTRY-UAS-NEXT: [[OFFSET:%[0-9]+]] = add i64 [[SHADOW_BASE]], 9471  ; ENTRY-UAS-NEXT: [[PTR:%[0-9]+]] = inttoptr i64 [[OFFSET]] to ptr72  ; ENTRY-UAS-NEXT: store i64 -940422246894996750, ptr [[PTR]], align 173 74  ; F8F8F2F2F8F8F8F875  ; ENTRY-UAS-NEXT: [[OFFSET:%[0-9]+]] = add i64 [[SHADOW_BASE]], 10276  ; ENTRY-UAS-NEXT: [[PTR:%[0-9]+]] = inttoptr i64 [[OFFSET]] to ptr77  ; ENTRY-UAS-NEXT: store i64 -506381209967593224, ptr [[PTR]], align 178 79  ; F8F3F3F380  ; ENTRY-UAS-NEXT: [[OFFSET:%[0-9]+]] = add i64 [[SHADOW_BASE]], 11081  ; ENTRY-UAS-NEXT: [[PTR:%[0-9]+]] = inttoptr i64 [[OFFSET]] to ptr82  ; ENTRY-UAS-NEXT: store i32 -202116104, ptr [[PTR]], align 183 84  ; F3F385  ; ENTRY-UAS-NEXT: [[OFFSET:%[0-9]+]] = add i64 [[SHADOW_BASE]], 11486  ; ENTRY-UAS-NEXT: [[PTR:%[0-9]+]] = inttoptr i64 [[OFFSET]] to ptr87  ; ENTRY-UAS-NEXT: store i16 -3085, ptr [[PTR]], align 188 89  ; CHECK-LABEL: %xx = getelementptr inbounds90  ; CHECK-NEXT: %yy = getelementptr inbounds91  ; CHECK-NEXT: %zz = getelementptr inbounds92 93 94  call void @llvm.lifetime.start.p0(i64 650, ptr %xx)95  ; 0000...96  ; ENTRY-UAS-NEXT: [[OFFSET:%[0-9]+]] = add i64 [[SHADOW_BASE]], 497  ; ENTRY-UAS-NEXT: call void @__asan_set_shadow_00(i64 [[OFFSET]], i64 81)98  ; 0299  ; ENTRY-UAS-NEXT: [[OFFSET:%[0-9]+]] = add i64 [[SHADOW_BASE]], 85100  ; ENTRY-UAS-NEXT: [[PTR:%[0-9]+]] = inttoptr i64 [[OFFSET]] to ptr101  ; ENTRY-UAS-NEXT: store i8 2, ptr [[PTR]], align 1102 103  call void @Foo(ptr %xx)104  ; CHECK-NEXT: call void @Foo(ptr %xx)105 106  call void @llvm.lifetime.end.p0(i64 650, ptr %xx)107  ; ENTRY-UAS-NEXT: [[OFFSET:%[0-9]+]] = add i64 [[SHADOW_BASE]], 4108  ; ENTRY-UAS-NEXT: call void @__asan_set_shadow_f8(i64 [[OFFSET]], i64 82)109 110 111  call void @llvm.lifetime.start.p0(i64 13, ptr %yy)112  ; 0005113  ; ENTRY-UAS-NEXT: [[OFFSET:%[0-9]+]] = add i64 [[SHADOW_BASE]], 102114  ; ENTRY-UAS-NEXT: [[PTR:%[0-9]+]] = inttoptr i64 [[OFFSET]] to ptr115  ; ENTRY-UAS-NEXT: store i16 1280, ptr [[PTR]], align 1116 117  call void @Foo(ptr %yy)118  ; CHECK-NEXT: call void @Foo(ptr %yy)119 120  call void @llvm.lifetime.end.p0(i64 13, ptr %yy)121  ; F8F8122  ; ENTRY-UAS-NEXT: [[OFFSET:%[0-9]+]] = add i64 [[SHADOW_BASE]], 102123  ; ENTRY-UAS-NEXT: [[PTR:%[0-9]+]] = inttoptr i64 [[OFFSET]] to ptr124  ; ENTRY-UAS-NEXT: store i16 -1800, ptr [[PTR]], align 1125 126 127  call void @llvm.lifetime.start.p0(i64 40, ptr %zz)128  ; 00000000129  ; ENTRY-UAS-NEXT: [[OFFSET:%[0-9]+]] = add i64 [[SHADOW_BASE]], 106130  ; ENTRY-UAS-NEXT: [[PTR:%[0-9]+]] = inttoptr i64 [[OFFSET]] to ptr131  ; ENTRY-UAS-NEXT: store i32 0, ptr [[PTR]], align 1132  ; 00133  ; ENTRY-UAS-NEXT: [[OFFSET:%[0-9]+]] = add i64 [[SHADOW_BASE]], 110134  ; ENTRY-UAS-NEXT: [[PTR:%[0-9]+]] = inttoptr i64 [[OFFSET]] to ptr135  ; ENTRY-UAS-NEXT: store i8 0, ptr [[PTR]], align 1136 137  call void @Foo(ptr %zz)138  ; CHECK-NEXT: call void @Foo(ptr %zz)139 140  call void @llvm.lifetime.end.p0(i64 40, ptr %zz)141  ; F8F8F8F8142  ; ENTRY-UAS-NEXT: [[OFFSET:%[0-9]+]] = add i64 [[SHADOW_BASE]], 106143  ; ENTRY-UAS-NEXT: [[PTR:%[0-9]+]] = inttoptr i64 [[OFFSET]] to ptr144  ; ENTRY-UAS-NEXT: store i32 -117901064, ptr [[PTR]], align 1145  ; F8146  ; ENTRY-UAS-NEXT: [[OFFSET:%[0-9]+]] = add i64 [[SHADOW_BASE]], 110147  ; ENTRY-UAS-NEXT: [[PTR:%[0-9]+]] = inttoptr i64 [[OFFSET]] to ptr148  ; ENTRY-UAS-NEXT: store i8 -8, ptr [[PTR]], align 1149 150  ; CHECK: {{^[0-9]+}}:151 152  ; CHECK-NEXT: [[OFFSET:%[0-9]+]] = add i64 [[SHADOW_BASE]], 0153  ; CHECK-NEXT: call void @__asan_set_shadow_f5(i64 [[OFFSET]], i64 128)154 155  ; CHECK-NOT: add i64 [[SHADOW_BASE]]156 157  ; CHECK: {{^[0-9]+}}:158 159  ; 00000000160  ; EXIT-NEXT: [[OFFSET:%[0-9]+]] = add i64 [[SHADOW_BASE]], 0161  ; EXIT-NEXT: [[PTR:%[0-9]+]] = inttoptr i64 [[OFFSET]] to ptr162  ; EXIT-NEXT: store i32 0, ptr [[PTR]], align 1163 164  ; 0000000000000000165  ; EXIT-NEXT: [[OFFSET:%[0-9]+]] = add i64 [[SHADOW_BASE]], 85166  ; EXIT-NEXT: [[PTR:%[0-9]+]] = inttoptr i64 [[OFFSET]] to ptr167  ; EXIT-NEXT: store i64 0, ptr [[PTR]], align 1168 169  ; 0000000000000000170  ; EXIT-NEXT: [[OFFSET:%[0-9]+]] = add i64 [[SHADOW_BASE]], 93171  ; EXIT-NEXT: [[PTR:%[0-9]+]] = inttoptr i64 [[OFFSET]] to ptr172  ; EXIT-NEXT: store i64 0, ptr [[PTR]], align 1173 174  ; 0000000000000000175  ; EXIT-NEXT: [[OFFSET:%[0-9]+]] = add i64 [[SHADOW_BASE]], 101176  ; EXIT-NEXT: [[PTR:%[0-9]+]] = inttoptr i64 [[OFFSET]] to ptr177  ; EXIT-NEXT: store i64 0, ptr [[PTR]], align 1178 179  ; 00000000180  ; EXIT-NEXT: [[OFFSET:%[0-9]+]] = add i64 [[SHADOW_BASE]], 111181  ; EXIT-NEXT: [[PTR:%[0-9]+]] = inttoptr i64 [[OFFSET]] to ptr182  ; EXIT-NEXT: store i32 0, ptr [[PTR]], align 1183 184  ; 00185  ; EXIT-NEXT: [[OFFSET:%[0-9]+]] = add i64 [[SHADOW_BASE]], 115186  ; EXIT-NEXT: [[PTR:%[0-9]+]] = inttoptr i64 [[OFFSET]] to ptr187  ; EXIT-NEXT: store i8 0, ptr [[PTR]], align 1188 189  ; 0000...190  ; EXIT-UAS-NEXT: [[OFFSET:%[0-9]+]] = add i64 [[SHADOW_BASE]], 0191  ; EXIT-UAS-NEXT: call void @__asan_set_shadow_00(i64 [[OFFSET]], i64 116)192 193  ; CHECK-NOT: add i64 [[SHADOW_BASE]]194 195  ret void196  ; CHECK: {{^[0-9]+}}:197  ; CHECK: ret void198}199 200declare void @llvm.lifetime.start.p0(i64, ptr nocapture)201declare void @llvm.lifetime.end.p0(i64, ptr nocapture)202 203; CHECK-ON: declare void @__asan_set_shadow_00(i64, i64)204; CHECK-ON: declare void @__asan_set_shadow_f1(i64, i64)205; CHECK-ON: declare void @__asan_set_shadow_f2(i64, i64)206; CHECK-ON: declare void @__asan_set_shadow_f3(i64, i64)207; CHECK-ON: declare void @__asan_set_shadow_f5(i64, i64)208; CHECK-ON: declare void @__asan_set_shadow_f8(i64, i64)209 210; CHECK-OFF-NOT: declare void @__asan_set_shadow_211