• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; Test kernel hwasan instrumentation for alloca.
2;
3; RUN: opt < %s -hwasan -hwasan-kernel=1 -S | FileCheck %s
4
5target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
6target triple = "aarch64--linux-android"
7
8declare void @use32(i32*)
9
10define void @test_alloca() sanitize_hwaddress {
11; CHECK-LABEL: @test_alloca(
12; CHECK: %[[FP:[^ ]*]] = call i8* @llvm.frameaddress(i32 0)
13; CHECK: %[[A:[^ ]*]] = ptrtoint i8* %[[FP]] to i64
14; CHECK: %[[B:[^ ]*]] = lshr i64 %[[A]], 20
15; CHECK: %[[BASE_TAG:[^ ]*]] = xor i64 %[[A]], %[[B]]
16
17; CHECK: %[[X:[^ ]*]] = alloca i32, align 16
18; CHECK: %[[X_TAG:[^ ]*]] = xor i64 %[[BASE_TAG]], 0
19; CHECK: %[[X1:[^ ]*]] = ptrtoint i32* %[[X]] to i64
20; CHECK: %[[C:[^ ]*]] = shl i64 %[[X_TAG]], 56
21; CHECK: %[[D:[^ ]*]] = or i64 %[[C]], 72057594037927935
22; CHECK: %[[E:[^ ]*]] = and i64 %[[X1]], %[[D]]
23; CHECK: %[[X_HWASAN:[^ ]*]] = inttoptr i64 %[[E]] to i32*
24
25entry:
26  %x = alloca i32, align 4
27  call void @use32(i32* nonnull %x)
28  ret void
29}
30