1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204
|
# REQUIRES: asserts
# UNSUPPORTED: system-windows
# RUN: llvm-mc -triple=x86_64-pc-linux-gnu -large-code-model \
# RUN: -filetype=obj -o %t %s
# RUN: llvm-jitlink -debug-only=jitlink -noexec -phony-externals %t 2>&1 | \
# RUN: FileCheck %s
#
# Check handling of pointer encodings for personality functions when compiling
# with `-mcmodel=large -static`.
#
# CHECK: Record is CIE
# CHECK-NEXT: edge at {{.*}} to personality at {{.*}} (DW.ref.__gxx_personality_v0)
# CHECK: Record is CIE
# CHECK-NEXT: edge at {{.*}} to personality at {{.*}} (__gxx_personality_v0)
.text
.file "eh.cpp"
.globl main
.p2align 4, 0x90
.type main,@function
main:
xorl %eax, %eax
retq
.Lfunc_end_main:
.size main, .Lfunc_end_main-main
# pe_absptr uses absptr encoding for __gxx_personality_v0
.text
.globl pe_absptr
.p2align 4, 0x90
.type pe_absptr,@function
pe_absptr:
.Lfunc_begin0:
.cfi_startproc
.cfi_personality 0, __gxx_personality_v0
.cfi_lsda 0, .Lexception0
pushq %rax
.cfi_def_cfa_offset 16
movabsq $__cxa_allocate_exception, %rax
movl $4, %edi
callq *%rax
movl $42, (%rax)
.Ltmp0:
movabsq $_ZTIi, %rsi
movabsq $__cxa_throw, %rcx
movq %rax, %rdi
xorl %edx, %edx
callq *%rcx
.Ltmp1:
.LBB0_2:
.Ltmp2:
movabsq $__cxa_begin_catch, %rcx
movq %rax, %rdi
callq *%rcx
movabsq $__cxa_end_catch, %rax
popq %rcx
.cfi_def_cfa_offset 8
jmpq *%rax
.Lfunc_end0:
.size pe_absptr, .Lfunc_end0-pe_absptr
.cfi_endproc
.section .gcc_except_table,"a",@progbits
.p2align 2
GCC_except_table0:
.Lexception0:
.byte 255 # @LPStart Encoding = omit
.byte 0 # @TType Encoding = absptr
.uleb128 .Lttbase0-.Lttbaseref0
.Lttbaseref0:
.byte 1 # Call site Encoding = uleb128
.uleb128 .Lcst_end0-.Lcst_begin0
.Lcst_begin0:
.uleb128 .Lfunc_begin0-.Lfunc_begin0 # >> Call Site 1 <<
.uleb128 .Ltmp0-.Lfunc_begin0 # Call between .Lfunc_begin0 and .Ltmp0
.byte 0 # has no landing pad
.byte 0 # On action: cleanup
.uleb128 .Ltmp0-.Lfunc_begin0 # >> Call Site 2 <<
.uleb128 .Ltmp1-.Ltmp0 # Call between .Ltmp0 and .Ltmp1
.uleb128 .Ltmp2-.Lfunc_begin0 # jumps to .Ltmp2
.byte 1 # On action: 1
.uleb128 .Ltmp1-.Lfunc_begin0 # >> Call Site 3 <<
.uleb128 .Lfunc_end0-.Ltmp1 # Call between .Ltmp1 and .Lfunc_end0
.byte 0 # has no landing pad
.byte 0 # On action: cleanup
.Lcst_end0:
.byte 1 # >> Action Record 1 <<
# Catch TypeInfo 1
.byte 0 # No further actions
.p2align 2
# >> Catch TypeInfos <<
.quad _ZTIi # TypeInfo 1
.Lttbase0:
.p2align 2
# -- End function
# pe_indir_pcrel_sdata8 uses 0x9C -- Indirect, pc-rel, sdata8 encoding to
# DW.ref.__gxx_personality_v0
.text
.globl pe_indir_pcrel_sdata8
.p2align 4, 0x90
.type pe_indir_pcrel_sdata8,@function
pe_indir_pcrel_sdata8:
.Lfunc_begin1:
.cfi_startproc
.cfi_personality 156, DW.ref.__gxx_personality_v0
.cfi_lsda 28, .Lexception1
pushq %r14
.cfi_def_cfa_offset 16
pushq %rbx
.cfi_def_cfa_offset 24
pushq %rax
.cfi_def_cfa_offset 32
.cfi_offset %rbx, -24
.cfi_offset %r14, -16
.L1$pb:
leaq .L1$pb(%rip), %rax
movabsq $_GLOBAL_OFFSET_TABLE_-.L1$pb, %rbx
addq %rax, %rbx
movabsq $__cxa_allocate_exception@GOT, %rax
movl $4, %edi
callq *(%rbx,%rax)
movl $42, (%rax)
.Ltmp4:
movabsq $_ZTIi@GOT, %rcx
movq (%rbx,%rcx), %rsi
movabsq $__cxa_throw@GOT, %rcx
movq %rax, %rdi
xorl %edx, %edx
movq %rbx, %r14
callq *(%rbx,%rcx)
.Ltmp5:
.LBB1_2:
.Ltmp6:
movabsq $__cxa_begin_catch@GOT, %rcx
movq %rax, %rdi
callq *(%r14,%rcx)
movabsq $__cxa_end_catch@GOT, %rax
movq %r14, %rcx
addq $8, %rsp
.cfi_def_cfa_offset 24
popq %rbx
.cfi_def_cfa_offset 16
popq %r14
.cfi_def_cfa_offset 8
jmpq *(%rcx,%rax)
.Lfunc_end1:
.size pe_indir_pcrel_sdata8, .Lfunc_end1-pe_indir_pcrel_sdata8
.cfi_endproc
.section .gcc_except_table,"a",@progbits
.p2align 2
GCC_except_table1:
.Lexception1:
.byte 255 # @LPStart Encoding = omit
.byte 156 # @TType Encoding = indirect pcrel sdata8
.uleb128 .Lttbase1-.Lttbaseref1
.Lttbaseref1:
.byte 1 # Call site Encoding = uleb128
.uleb128 .Lcst_end1-.Lcst_begin1
.Lcst_begin1:
.uleb128 .Lfunc_begin1-.Lfunc_begin1 # >> Call Site 1 <<
.uleb128 .Ltmp4-.Lfunc_begin1 # Call between .Lfunc_begin1 and .Ltmp4
.byte 0 # has no landing pad
.byte 0 # On action: cleanup
.uleb128 .Ltmp4-.Lfunc_begin1 # >> Call Site 2 <<
.uleb128 .Ltmp5-.Ltmp4 # Call between .Ltmp4 and .Ltmp5
.uleb128 .Ltmp6-.Lfunc_begin1 # jumps to .Ltmp6
.byte 1 # On action: 1
.uleb128 .Ltmp5-.Lfunc_begin1 # >> Call Site 3 <<
.uleb128 .Lfunc_end1-.Ltmp5 # Call between .Ltmp5 and .Lfunc_end1
.byte 0 # has no landing pad
.byte 0 # On action: cleanup
.Lcst_end1:
.byte 1 # >> Action Record 1 <<
# Catch TypeInfo 1
.byte 0 # No further actions
.p2align 2
# >> Catch TypeInfos <<
.Ltmp7: # TypeInfo 1
.quad .L_ZTIi.DW.stub-.Ltmp7
.Lttbase1:
.p2align 2
# -- End function
.data
.p2align 3
.L_ZTIi.DW.stub:
.quad _ZTIi
.hidden DW.ref.__gxx_personality_v0
.weak DW.ref.__gxx_personality_v0
.section .data.DW.ref.__gxx_personality_v0,"aGw",@progbits,DW.ref.__gxx_personality_v0,comdat
.p2align 3
.type DW.ref.__gxx_personality_v0,@object
.size DW.ref.__gxx_personality_v0, 8
DW.ref.__gxx_personality_v0:
.quad __gxx_personality_v0
.ident "clang version 13.0.1"
.section ".note.GNU-stack","",@progbits
.addrsig
.addrsig_sym __gxx_personality_v0
.addrsig_sym _ZTIi
|