1# REQUIRES: x86 2 3# RUN: llvm-mc -emit-compact-unwind-non-canonical=true -filetype=obj -triple=x86_64-apple-darwin19.0.0 %s -o %t.o 4# RUN: not %lld -lSystem -lc++ %t.o -o %t 2>&1 | FileCheck %s --check-prefix=TOO-MANY 5# RUN: not %lld -lSystem %t.o -o %t 2>&1 | FileCheck %s --check-prefix=UNDEF 6# TOO-MANY: error: too many personalities (4) for compact unwind to encode 7# UNDEF: error: undefined symbol: ___gxx_personality_v0 8 9## Tests that we can handle more than 3 personalities with DWARFs 10# RUN: llvm-mc -emit-compact-unwind-non-canonical=false -filetype=obj -triple=x86_64-apple-darwin19.0.0 %s -o %t-dwarf.o 11# RUN: %lld -lSystem -lc++ %t-dwarf.o -o %t-dwarf 12# RUN: llvm-objdump --macho --indirect-symbols --dwarf=frames %t-dwarf | FileCheck %s --check-prefix=DWARF -D#BASE=0x100000000 13 14# DWARF: Indirect symbols 15# DWARF: address index name 16# DWARF: 0x[[#%x,GXX_PERSONALITY:]] {{.*}} ___gxx_personality_v0 17# DWARF: 0x[[#%x,PERSONALITY_1:]] LOCAL 18# DWARF: 0x[[#%x,PERSONALITY_2:]] LOCAL 19# DWARF: 0x[[#%x,PERSONALITY_3:]] LOCAL 20# DWARF: .eh_frame contents: 21# DWARF: Personality Address: [[#%.16x,GXX_PERSONALITY]] 22# DWARF: Personality Address: [[#%.16x,PERSONALITY_1]] 23# DWARF: Personality Address: [[#%.16x,PERSONALITY_2]] 24# DWARF: Personality Address: [[#%.16x,PERSONALITY_3]] 25 26 27.globl _main, _personality_1, _personality_2, _personality_3 28 29.text 30 31_foo: 32 .cfi_startproc 33 .cfi_personality 155, _personality_1 34 .cfi_def_cfa_offset 16 35 retq 36 .cfi_endproc 37 38_bar: 39 .cfi_startproc 40 .cfi_personality 155, _personality_2 41 .cfi_def_cfa_offset 16 42 retq 43 .cfi_endproc 44 45_baz: 46 .cfi_startproc 47 .cfi_personality 155, _personality_3 48 .cfi_def_cfa_offset 16 49 retq 50 .cfi_endproc 51 52_main: 53 .cfi_startproc 54 .cfi_personality 155, ___gxx_personality_v0 55 .cfi_def_cfa_offset 16 56 retq 57 .cfi_endproc 58 59_personality_1: 60 retq 61_personality_2: 62 retq 63_personality_3: 64 retq 65