blob: 154ce87b788ec87ed62bfac8dba26a9764451692 [file] [log] [blame]
; Test of global redzone layout
; REQUIRES: allow_dump
; RUN: %p2i -i %s --args -threads=0 -fsanitize-address \
; RUN: | FileCheck %s
; RUN: %p2i -i %s --args -verbose=global_init,inst -threads=0 \
; RUN: -fsanitize-address | FileCheck --check-prefix=DUMP %s
; The array of redzones
; DUMP-LABEL: ========= Instrumented Globals =========
; DUMP: @__$rz_array = internal constant <{ i32, i32, i32, i32, i32, i32 }>
; DUMP: <{ i32 ptrtoint ([32 x i8]* @__$rz0 to i32), i32 ptrtoint ([32 x i8]* @__$rz1 to i32),
; DUMP: i32 ptrtoint ([32 x i8]* @__$rz2 to i32), i32 ptrtoint ([32 x i8]* @__$rz3 to i32),
; DUMP: i32 ptrtoint ([32 x i8]* @__$rz4 to i32), i32 ptrtoint ([32 x i8]* @__$rz5 to i32) }>
; (SPACE is 32 ascii)
; DUMP-NEXT: @__$rz_sizes = internal constant <{ [4 x i8], [4 x i8], [4 x i8], [4 x i8], [4 x i8],
; DUMP-SAME: [4 x i8] }> <{ [4 x i8] c" \00\00\00", [4 x i8] c" \00\00\00", [4 x i8] c" \00\00\00",
; DUMP-SAME: [4 x i8] c" \00\00\00", [4 x i8] c" \00\00\00", [4 x i8] c" \00\00\00" }>
; CHECK-LABEL: .type __$rz_array,%object
; CHECK-NEXT: .section .rodata
; CHECK-NEXT: __$rz_array:
; CHECK-NEXT: .long __$rz0
; CHECK-NEXT: .long __$rz1
; CHECK-NEXT: .long __$rz2
; CHECK-NEXT: .long __$rz3
; CHECK-NEXT: .long __$rz4
; CHECK-NEXT: .long __$rz5
; CHECK-LABEL: .type __$rz_sizes,%object
; CHECK-NEXT: .section .rodata
; CHECK-NEXT: __$rz_sizes:
; CHECK-NEXT: .byte 32
; CHECK-NEXT: .byte 0
; CHECK-NEXT: .byte 0
; CHECK-NEXT: .byte 0
; CHECK-NEXT: .byte 32
; CHECK-NEXT: .byte 0
; CHECK-NEXT: .byte 0
; CHECK-NEXT: .byte 0
; CHECK-NEXT: .byte 32
; CHECK-NEXT: .byte 0
; CHECK-NEXT: .byte 0
; CHECK-NEXT: .byte 0
; CHECK-NEXT: .byte 32
; CHECK-NEXT: .byte 0
; CHECK-NEXT: .byte 0
; CHECK-NEXT: .byte 0
; CHECK-NEXT: .byte 32
; CHECK-NEXT: .byte 0
; CHECK-NEXT: .byte 0
; CHECK-NEXT: .byte 0
; CHECK-NEXT: .byte 32
; CHECK-NEXT: .byte 0
; CHECK-NEXT: .byte 0
; CHECK-NEXT: .byte 0
; A zero-initialized global
@zeroInitGlobal = internal global [32 x i8] zeroinitializer
; DUMP-NEXT: @__$rz0 = internal global [32 x i8] zeroinitializer
; DUMP-NEXT: @zeroInitGlobal = internal global [32 x i8] zeroinitializer
; DUMP-NEXT: @__$rz1 = internal global [32 x i8] zeroinitializer
; CHECK-LABEL: .type __$rz0,%object
; CHECK-NEXT: .section .bss
; CHECK-NEXT: .p2align 5
; CHECK-NEXT: __$rz0:
; CHECK-LABEL: .type zeroInitGlobal,%object
; CHECK-NEXT: .section .bss
; CHECK-NEXT: .p2align 5
; CHECK-NEXT: zeroInitGlobal:
; CHECK-LABEL: .type __$rz1,%object
; CHECK-NEXT: .section .bss
; CHECK-NEXT: __$rz1:
; A constant-initialized global
@constInitGlobal = internal constant [32 x i8] c"ABCDEFGHIJKLMNOPQRSTUVWXYZ012345"
; CHECK-LABEL: .type __$rz2,%object
; CHECK-NEXT: .section .rodata
; CHECK-NEXT: .p2align 5
; CHECK-NEXT: __$rz2:
; CHECK-LABEL: .type constInitGlobal,%object
; CHECK-NEXT: .section .rodata
; CHECK-NEXT: .p2align 5
; CHECK-NEXT: constInitGlobal:
; CHECK-LABEL: .type __$rz3,%object
; CHECK-NEXT: .section .rodata
; CHECK-NEXT: __$rz3:
; DUMP-NEXT: @__$rz2 = internal constant [32 x i8] c"RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR"
; DUMP-NEXT: @constInitGlobal = internal constant [32 x i8] c"ABCDEFGHIJKLMNOPQRSTUVWXYZ012345"
; DUMP-NEXT: @__$rz3 = internal constant [32 x i8] c"RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR"
; A regular global
@regInitGlobal = internal global [32 x i8] c"ABCDEFGHIJKLMNOPQRSTUVWXYZ012345"
; DUMP-NEXT: @__$rz4 = internal global [32 x i8] c"RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR"
; DUMP-NEXT: @regInitGlobal = internal global [32 x i8] c"ABCDEFGHIJKLMNOPQRSTUVWXYZ012345"
; DUMP-NEXT: @__$rz5 = internal global [32 x i8] c"RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR"
; CHECK-LABEL: .type __$rz4,%object
; CHECK-NEXT: .section .data
; CHECK-NEXT: .p2align 5
; CHECK-NEXT: __$rz4:
; CHECK-LABEL: .type regInitGlobal,%object
; CHECK-NEXT: .section .data
; CHECK-NEXT: .p2align 5
; CHECK-NEXT: regInitGlobal:
; CHECK-LABEL: .type __$rz5,%object
; CHECK-NEXT: .section .data
; CHECK-NEXT: __$rz5:
define internal void @func() {
ret void
}
; DUMP-LABEL: define internal void @func() {
; CHECK-LABEL: func: