Home | History | Annotate | Download | only in HWAddressSanitizer
      1 ; Test kernel hwasan instrumentation for alloca.
      2 ;
      3 ; RUN: opt < %s -hwasan -hwasan-kernel=1 -S | FileCheck %s
      4 
      5 target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
      6 target triple = "aarch64--linux-android"
      7 
      8 declare void @use32(i32*)
      9 
     10 define 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 
     25 entry:
     26   %x = alloca i32, align 4
     27   call void @use32(i32* nonnull %x)
     28   ret void
     29 }
     30