1 # REQUIRES: x86, aarch64
2 # RUN: rm -rf %t; mkdir %t
4 # RUN: llvm-mc -emit-compact-unwind-non-canonical=true -filetype=obj -triple=x86_64-apple-macos10.15 %s -o %t/eh-frame-x86_64.o
5 # RUN: %lld -lSystem -lc++ %t/eh-frame-x86_64.o -o %t/eh-frame-x86_64
6 # RUN: llvm-objdump --macho --syms --indirect-symbols --unwind-info \
7 # RUN: --dwarf=frames %t/eh-frame-x86_64 | FileCheck %s -D#BASE=0x100000000 -D#DWARF_ENC=4
8 # RUN: llvm-nm -m %t/eh-frame-x86_64 | FileCheck %s --check-prefix NO-EH-SYMS
9 # RUN: llvm-readobj --section-headers %t/eh-frame-x86_64 | FileCheck %s --check-prefix=ALIGN -D#ALIGN=3
11 ## Test that we correctly handle the output of `ld -r`, which emits EH frames
12 ## using subtractor relocations instead of implicitly encoding the offsets.
13 ## In order to keep this test cross-platform, we check in ld64's output rather
14 ## than invoking ld64 directly. NOTE: whenever this test is updated, the
15 ## checked-in copy of `ld -r`'s output should be updated too!
16 # COM: ld -r %t/eh-frame-x86_64.o -o %S/Inputs/eh-frame-x86_64-r.o
17 # RUN: %lld -lSystem -lc++ %S/Inputs/eh-frame-x86_64-r.o -o %t/eh-frame-x86_64-r
18 # RUN: llvm-objdump --macho --syms --indirect-symbols --unwind-info \
19 # RUN: --dwarf=frames %t/eh-frame-x86_64-r | FileCheck %s -D#BASE=0x100000000 -D#DWARF_ENC=4
20 # RUN: llvm-nm -m %t/eh-frame-x86_64-r | FileCheck %s --check-prefix NO-EH-SYMS
21 # RUN: llvm-readobj --section-headers %t/eh-frame-x86_64-r | FileCheck %s --check-prefix=ALIGN -D#ALIGN=3
23 # RUN: llvm-mc -filetype=obj -emit-compact-unwind-non-canonical=true -triple=arm64-apple-macos11.0 %s -o %t/eh-frame-arm64.o
24 # RUN: %lld -arch arm64 -lSystem -lc++ %t/eh-frame-arm64.o -o %t/eh-frame-arm64
25 # RUN: llvm-objdump --macho --syms --indirect-symbols --unwind-info \
26 # RUN: --dwarf=frames %t/eh-frame-arm64 | FileCheck %s -D#BASE=0x100000000 -D#DWARF_ENC=3
27 # RUN: llvm-nm -m %t/eh-frame-arm64 | FileCheck %s --check-prefix NO-EH-SYMS
29 # COM: ld -r %t/eh-frame-arm64.o -o %S/Inputs/eh-frame-arm64-r.o
30 # RUN: %lld -arch arm64 -lSystem -lc++ %S/Inputs/eh-frame-arm64-r.o -o %t/eh-frame-arm64-r
31 # RUN: llvm-objdump --macho --syms --indirect-symbols --unwind-info \
32 # RUN: --dwarf=frames %t/eh-frame-arm64-r | FileCheck %s -D#BASE=0x100000000 -D#DWARF_ENC=3
33 # RUN: llvm-nm -m %t/eh-frame-arm64-r | FileCheck %s --check-prefix NO-EH-SYMS
35 # ALIGN: Name: __eh_frame
36 # ALIGN-NEXT: Segment: __TEXT
37 # ALIGN-NEXT: Address:
40 # ALIGN-NEXT: Alignment: [[#ALIGN]]
42 # NO-EH-SYMS-NOT: __eh_frame
44 # CHECK: Indirect symbols for (__DATA_CONST,__got) 2 entries
45 # CHECK: address index name
46 # CHECK: 0x[[#%x,GXX_PERSONALITY_GOT:]] {{.*}} ___gxx_personality_v0
47 # CHECK: 0x[[#%x,MY_PERSONALITY_GOT:]]
48 # CHECK: SYMBOL TABLE:
49 # CHECK-DAG: [[#%x,F:]] l F __TEXT,__text _f
50 # CHECK-DAG: [[#%x,NO_UNWIND:]] l F __TEXT,__text _no_unwind
51 # CHECK-DAG: [[#%x,G:]] l F __TEXT,__text _g
52 # CHECK-DAG: [[#%x,H:]] l F __TEXT,__text _h
53 # CHECK-DAG: [[#%x,EXCEPT0:]] l O __TEXT,__gcc_except_tab GCC_except_table0
54 # CHECK-DAG: [[#%x,EXCEPT1:]] l O __TEXT,__gcc_except_tab GCC_except_table1
55 # CHECK-DAG: [[#%x,EXCEPT2:]] l O __TEXT,custom_except custom_except_table2
56 # CHECK-DAG: [[#%x,MY_PERSONALITY:]] g F __TEXT,__text _my_personality
57 # CHECK: Contents of __unwind_info section:
59 # CHECK: Number of personality functions in array: 0x1
60 # CHECK: Number of indices in array: 0x2
61 # CHECK: Personality functions: (count = 1)
62 # CHECK: personality[1]: 0x[[#%.8x,GXX_PERSONALITY_GOT - BASE]]
63 # CHECK: LSDA descriptors:
64 # CHECK: [0]: function offset=0x[[#%.8x,F - BASE]], LSDA offset=0x[[#%.8x,EXCEPT0 - BASE]]
65 # CHECK: [1]: function offset=0x[[#%.8x,G - BASE]], LSDA offset=0x[[#%.8x,EXCEPT1 - BASE]]
66 # CHECK: [2]: function offset=0x[[#%.8x,H - BASE]], LSDA offset=0x[[#%.8x,EXCEPT2 - BASE]]
67 # CHECK: Second level indices:
68 # CHECK: Second level index[0]:
69 # CHECK [0]: function offset=0x[[#%.8x,F - BASE]], encoding[{{.*}}]=0x52{{.*}}
70 # CHECK [1]: function offset=0x[[#%.8x,NO_UNWIND - BASE]], encoding[{{.*}}]=0x00000000
71 # CHECK: [2]: function offset=0x[[#%.8x,G - BASE]], encoding[{{.*}}]=0x0[[#%x,DWARF_ENC]][[#%.6x, G_DWARF_OFF:]]
72 # CHECK: [3]: function offset=0x[[#%.8x,H - BASE]], encoding[{{.*}}]=0x0[[#%x,DWARF_ENC]][[#%.6x, H_DWARF_OFF:]]
73 # CHECK: [4]: function offset=0x[[#%.8x,MY_PERSONALITY - BASE]], encoding[{{.*}}]=0x00000000
75 # CHECK: .debug_frame contents:
76 # CHECK: .eh_frame contents:
78 # CHECK: [[#%.8x,CIE1_OFF:]] {{.*}} CIE
79 # CHECK: Format: DWARF32
81 # CHECK: Augmentation: "zPLR"
82 # CHECK: Code alignment factor: 1
83 # CHECK: Data alignment factor: -8
84 # CHECK: Return address column:
85 # CHECK: Personality Address: [[#%.16x,GXX_PERSONALITY_GOT]]
86 # CHECK: Augmentation data: 9B {{(([[:xdigit:]]{2} ){4})}}10 10
88 # CHECK: [[#%.8x,G_DWARF_OFF]] {{.*}} [[#%.8x,G_DWARF_OFF + 4 - CIE1_OFF]] FDE cie=[[#CIE1_OFF]] pc=[[#%x,G]]
89 # CHECK: Format: DWARF32
90 # CHECK: LSDA Address: [[#%.16x,EXCEPT1]]
91 # CHECK: DW_CFA_def_cfa_offset: +8
94 # CHECK: [[#%.8x,CIE2_OFF:]] {{.*}} CIE
95 # CHECK: Format: DWARF32
97 # CHECK: Augmentation: "zPLR"
98 # CHECK: Code alignment factor: 1
99 # CHECK: Data alignment factor: -8
100 # CHECK: Return address column:
101 # CHECK: Personality Address: [[#%.16x,MY_PERSONALITY_GOT]]
102 # CHECK: Augmentation data: 9B {{(([[:xdigit:]]{2} ){4})}}10 10
104 # CHECK: [[#%.8x,H_DWARF_OFF]] {{.*}} [[#%.8x,H_DWARF_OFF + 4 - CIE2_OFF]] FDE cie=[[#CIE2_OFF]] pc=[[#%x,H]]
105 # CHECK: Format: DWARF32
106 # CHECK: LSDA Address: [[#%.16x,EXCEPT2]]
107 # CHECK: DW_CFA_def_cfa_offset: +8
108 # CHECK: 0x[[#%x,H]]:
110 .globl _my_personality, _main
113 ## _f's unwind info can be encoded with compact unwind, so we shouldn't see an
114 ## FDE entry for it in the output file.
118 .cfi_personality 155, ___gxx_personality_v0
119 .cfi_lsda 16, Lexception0
120 .cfi_def_cfa_offset 8
131 .cfi_personality 155, ___gxx_personality_v0
132 .cfi_lsda 16, Lexception1
133 .cfi_def_cfa_offset 8
134 ## cfi_escape cannot be encoded in compact unwind, so we must keep _g's FDE
135 .cfi_escape 0x2e, 0x10
142 .cfi_personality 155, _my_personality
143 .cfi_lsda 16, Lexception2
144 .cfi_def_cfa_offset 8
145 ## cfi_escape cannot be encoded in compact unwind, so we must keep _h's FDE
146 .cfi_escape 0x2e, 0x10
158 .section __TEXT,__gcc_except_tab
167 .section __TEXT,custom_except
168 custom_except_table2
:
172 .subsections_via_symbols