| ; 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: |