* Make cranelift_codegen::isa::unwind::input public * Move UnwindCode's common offset field out of the structure * Make MachCompileResult::unwind_info more generic * Record initial stack pointer offset
206 lines
7.0 KiB
Plaintext
206 lines
7.0 KiB
Plaintext
test unwind
|
|
set opt_level=speed_and_size
|
|
set is_pic
|
|
target x86_64 haswell
|
|
|
|
; check the unwind information with a function with no args
|
|
function %no_args() system_v {
|
|
block0:
|
|
return
|
|
}
|
|
; sameln: 0x00000000: CIE
|
|
; nextln: length: 0x00000014
|
|
; nextln: version: 0x01
|
|
; nextln: code_align: 1
|
|
; nextln: data_align: -8
|
|
; nextln: ra_register: 0x10
|
|
; nextln: DW_CFA_def_cfa (r7, 8)
|
|
; nextln: DW_CFA_offset (r16, 1)
|
|
; nextln: DW_CFA_nop
|
|
; nextln: DW_CFA_nop
|
|
; nextln: DW_CFA_nop
|
|
; nextln: DW_CFA_nop
|
|
; nextln: DW_CFA_nop
|
|
; nextln: DW_CFA_nop
|
|
; nextln: Instructions: Init State:
|
|
; nextln:
|
|
; nextln:
|
|
; nextln: 0x00000018: FDE
|
|
; nextln: length: 0x00000024
|
|
; nextln: CIE_pointer: 0x00000000
|
|
; nextln: start_addr: 0x0000000000000000
|
|
; nextln: range_size: 0x0000000000000006 (end_addr = 0x0000000000000006)
|
|
; nextln: Instructions:
|
|
; nextln: DW_CFA_advance_loc (1)
|
|
; nextln: DW_CFA_def_cfa_offset (16)
|
|
; nextln: DW_CFA_offset (r6, 2)
|
|
; nextln: DW_CFA_advance_loc (3)
|
|
; nextln: DW_CFA_def_cfa_register (r6)
|
|
; nextln: DW_CFA_advance_loc (1)
|
|
; nextln: DW_CFA_same_value (r6)
|
|
; nextln: DW_CFA_def_cfa (r7, 8)
|
|
; nextln: DW_CFA_nop
|
|
|
|
; check a function with medium-sized stack alloc
|
|
function %medium_stack() system_v {
|
|
ss0 = explicit_slot 100000
|
|
block0:
|
|
return
|
|
}
|
|
; sameln: 0x00000000: CIE
|
|
; nextln: length: 0x00000014
|
|
; nextln: version: 0x01
|
|
; nextln: code_align: 1
|
|
; nextln: data_align: -8
|
|
; nextln: ra_register: 0x10
|
|
; nextln: DW_CFA_def_cfa (r7, 8)
|
|
; nextln: DW_CFA_offset (r16, 1)
|
|
; nextln: DW_CFA_nop
|
|
; nextln: DW_CFA_nop
|
|
; nextln: DW_CFA_nop
|
|
; nextln: DW_CFA_nop
|
|
; nextln: DW_CFA_nop
|
|
; nextln: DW_CFA_nop
|
|
; nextln: Instructions: Init State:
|
|
; nextln:
|
|
; nextln:
|
|
; nextln: 0x00000018: FDE
|
|
; nextln: length: 0x00000024
|
|
; nextln: CIE_pointer: 0x00000000
|
|
; nextln: start_addr: 0x0000000000000000
|
|
; nextln: range_size: 0x000000000000001a (end_addr = 0x000000000000001a)
|
|
; nextln: Instructions:
|
|
; nextln: DW_CFA_advance_loc (1)
|
|
; nextln: DW_CFA_def_cfa_offset (16)
|
|
; nextln: DW_CFA_offset (r6, 2)
|
|
; nextln: DW_CFA_advance_loc (3)
|
|
; nextln: DW_CFA_def_cfa_register (r6)
|
|
; nextln: DW_CFA_advance_loc (21)
|
|
; nextln: DW_CFA_same_value (r6)
|
|
; nextln: DW_CFA_def_cfa (r7, 8)
|
|
; nextln: DW_CFA_nop
|
|
|
|
; check a function with large-sized stack alloc
|
|
function %large_stack() system_v {
|
|
ss0 = explicit_slot 524288
|
|
block0:
|
|
return
|
|
}
|
|
; sameln: 0x00000000: CIE
|
|
; nextln: length: 0x00000014
|
|
; nextln: version: 0x01
|
|
; nextln: code_align: 1
|
|
; nextln: data_align: -8
|
|
; nextln: ra_register: 0x10
|
|
; nextln: DW_CFA_def_cfa (r7, 8)
|
|
; nextln: DW_CFA_offset (r16, 1)
|
|
; nextln: DW_CFA_nop
|
|
; nextln: DW_CFA_nop
|
|
; nextln: DW_CFA_nop
|
|
; nextln: DW_CFA_nop
|
|
; nextln: DW_CFA_nop
|
|
; nextln: DW_CFA_nop
|
|
; nextln: Instructions: Init State:
|
|
; nextln:
|
|
; nextln:
|
|
; nextln: 0x00000018: FDE
|
|
; nextln: length: 0x00000024
|
|
; nextln: CIE_pointer: 0x00000000
|
|
; nextln: start_addr: 0x0000000000000000
|
|
; nextln: range_size: 0x000000000000001a (end_addr = 0x000000000000001a)
|
|
; nextln: Instructions:
|
|
; nextln: DW_CFA_advance_loc (1)
|
|
; nextln: DW_CFA_def_cfa_offset (16)
|
|
; nextln: DW_CFA_offset (r6, 2)
|
|
; nextln: DW_CFA_advance_loc (3)
|
|
; nextln: DW_CFA_def_cfa_register (r6)
|
|
; nextln: DW_CFA_advance_loc (21)
|
|
; nextln: DW_CFA_same_value (r6)
|
|
; nextln: DW_CFA_def_cfa (r7, 8)
|
|
; nextln: DW_CFA_nop
|
|
; nextln:
|
|
|
|
; check a function that has CSRs
|
|
function %lots_of_registers(i64, i64) system_v {
|
|
block0(v0: i64, v1: i64):
|
|
v2 = load.i32 v0+0
|
|
v3 = load.i32 v0+8
|
|
v4 = load.i32 v0+16
|
|
v5 = load.i32 v0+24
|
|
v6 = load.i32 v0+32
|
|
v7 = load.i32 v0+40
|
|
v8 = load.i32 v0+48
|
|
v9 = load.i32 v0+56
|
|
v10 = load.i32 v0+64
|
|
v11 = load.i32 v0+72
|
|
v12 = load.i32 v0+80
|
|
v13 = load.i32 v0+88
|
|
v14 = load.i32 v0+96
|
|
store.i32 v2, v1+0
|
|
store.i32 v3, v1+8
|
|
store.i32 v4, v1+16
|
|
store.i32 v5, v1+24
|
|
store.i32 v6, v1+32
|
|
store.i32 v7, v1+40
|
|
store.i32 v8, v1+48
|
|
store.i32 v9, v1+56
|
|
store.i32 v10, v1+64
|
|
store.i32 v11, v1+72
|
|
store.i32 v12, v1+80
|
|
store.i32 v13, v1+88
|
|
store.i32 v14, v1+96
|
|
return
|
|
}
|
|
; sameln: 0x00000000: CIE
|
|
; nextln: length: 0x00000014
|
|
; nextln: version: 0x01
|
|
; nextln: code_align: 1
|
|
; nextln: data_align: -8
|
|
; nextln: ra_register: 0x10
|
|
; nextln: DW_CFA_def_cfa (r7, 8)
|
|
; nextln: DW_CFA_offset (r16, 1)
|
|
; nextln: DW_CFA_nop
|
|
; nextln: DW_CFA_nop
|
|
; nextln: DW_CFA_nop
|
|
; nextln: DW_CFA_nop
|
|
; nextln: DW_CFA_nop
|
|
; nextln: DW_CFA_nop
|
|
; nextln: Instructions: Init State:
|
|
; nextln:
|
|
; nextln:
|
|
; nextln: 0x00000018: FDE
|
|
; nextln: length: 0x00000044
|
|
; nextln: CIE_pointer: 0x00000000
|
|
; nextln: start_addr: 0x0000000000000000
|
|
; nextln: range_size: 0x0000000000000074 (end_addr = 0x0000000000000074)
|
|
; nextln: Instructions:
|
|
; nextln: DW_CFA_advance_loc (1)
|
|
; nextln: DW_CFA_def_cfa_offset (16)
|
|
; nextln: DW_CFA_offset (r6, 2)
|
|
; nextln: DW_CFA_advance_loc (3)
|
|
; nextln: DW_CFA_def_cfa_register (r6)
|
|
; nextln: DW_CFA_advance_loc (1)
|
|
; nextln: DW_CFA_offset (r3, 3)
|
|
; nextln: DW_CFA_advance_loc (2)
|
|
; nextln: DW_CFA_offset (r12, 4)
|
|
; nextln: DW_CFA_advance_loc (2)
|
|
; nextln: DW_CFA_offset (r13, 5)
|
|
; nextln: DW_CFA_advance_loc (2)
|
|
; nextln: DW_CFA_offset (r14, 6)
|
|
; nextln: DW_CFA_advance_loc (2)
|
|
; nextln: DW_CFA_offset (r15, 7)
|
|
; nextln: DW_CFA_advance_loc (94)
|
|
; nextln: DW_CFA_same_value (r15)
|
|
; nextln: DW_CFA_advance_loc (2)
|
|
; nextln: DW_CFA_same_value (r14)
|
|
; nextln: DW_CFA_advance_loc (2)
|
|
; nextln: DW_CFA_same_value (r13)
|
|
; nextln: DW_CFA_advance_loc (2)
|
|
; nextln: DW_CFA_same_value (r12)
|
|
; nextln: DW_CFA_advance_loc (1)
|
|
; nextln: DW_CFA_same_value (r3)
|
|
; nextln: DW_CFA_advance_loc (1)
|
|
; nextln: DW_CFA_same_value (r6)
|
|
; nextln: DW_CFA_def_cfa (r7, 8)
|
|
; nextln: DW_CFA_nop
|