1# RUN: ld64.lld -arch arm64 -r %s -o %t
2# RUN: ld64.lld -arch arm64 -r %t -o %t2
3# RUN: llvm-objdump -s --section="__eh_frame" %t | FileCheck %s
4# RUN: llvm-objdump -s --section="__eh_frame" %t2 | FileCheck %s
5
6# The reference from FDE->CIE is implicitly created as a negDelta32.
7# We don't emit these in to the binary as relocations, so we need to
8# make sure that the offset in the FDE to the CIE is the correct value.
9# CHECK: {{[0-9abcdef]*}} 10000000 00000000 017a5200 01781e01
10# CHECK: {{[0-9abcdef]*}} 100c1f00 20000000 18000000 b8ffffff
11# Note, this one that matters               ^~~~~~~~
12# It needs to be 0x18 as that is the offset back to 0 where the CIE is.
13# CHECK: {{[0-9abcdef]*}} ffffffff 20000000 00000000 00480e10
14# CHECK: {{[0-9abcdef]*}} 9e019d02 00000000
15
16---  !mach-o
17arch:            arm64
18file-type:       MH_OBJECT
19flags:           [ MH_SUBSECTIONS_VIA_SYMBOLS ]
20compat-version:  0.0
21current-version: 0.0
22has-UUID:        false
23OS:              unknown
24sections:
25  - segment:         __TEXT
26    section:         __text
27    type:            S_REGULAR
28    attributes:      [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
29    alignment:       4
30    address:         0x0000000000000000
31    content:         [ 0xFD, 0x7B, 0xBF, 0xA9, 0xFD, 0x03, 0x00, 0x91,
32                       0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x91,
33                       0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x80, 0x52,
34                       0xFD, 0x7B, 0xC1, 0xA8, 0xC0, 0x03, 0x5F, 0xD6 ]
35    relocations:
36      - offset:          0x00000010
37        type:            ARM64_RELOC_BRANCH26
38        length:          2
39        pc-rel:          true
40        extern:          true
41        symbol:          6
42      - offset:          0x0000000C
43        type:            ARM64_RELOC_PAGEOFF12
44        length:          2
45        pc-rel:          false
46        extern:          true
47        symbol:          1
48      - offset:          0x00000008
49        type:            ARM64_RELOC_PAGE21
50        length:          2
51        pc-rel:          true
52        extern:          true
53        symbol:          1
54  - segment:         __TEXT
55    section:         __cstring
56    type:            S_CSTRING_LITERALS
57    attributes:      [  ]
58    address:         0x0000000000000020
59    content:         [ 0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x77, 0x6F,
60                       0x72, 0x6C, 0x64, 0x00 ]
61  - segment:         __LD
62    section:         __compact_unwind
63    type:            S_REGULAR
64    attributes:      [  ]
65    alignment:       8
66    address:         0x0000000000000030
67    content:         [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
68                       0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
69                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
70                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ]
71    relocations:
72      - offset:          0x00000000
73        type:            ARM64_RELOC_UNSIGNED
74        length:          3
75        pc-rel:          false
76        extern:          false
77        symbol:          1
78  - segment:         __TEXT
79    section:         __eh_frame
80    type:            S_COALESCED
81    attributes:      [  ]
82    alignment:       8
83    address:         0x0000000000000050
84    content:         [ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
85                       0x01, 0x7A, 0x52, 0x00, 0x01, 0x78, 0x1E, 0x01,
86                       0x10, 0x0C, 0x1F, 0x00, 0x20, 0x00, 0x00, 0x00,
87                       0x18, 0x00, 0x00, 0x00, 0x94, 0xFF, 0xFF, 0xFF,
88                       0xFF, 0xFF, 0xFF, 0xFF, 0x20, 0x00, 0x00, 0x00,
89                       0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x0E, 0x10,
90                       0x9E, 0x01, 0x9D, 0x02, 0x00, 0x00, 0x00, 0x00 ]
91local-symbols:
92  - name:            ltmp0
93    type:            N_SECT
94    sect:            1
95    value:           0x0000000000000000
96  - name:            L_str
97    type:            N_SECT
98    sect:            2
99    value:           0x0000000000000020
100  - name:            ltmp1
101    type:            N_SECT
102    sect:            2
103    value:           0x0000000000000020
104  - name:            ltmp2
105    type:            N_SECT
106    sect:            3
107    value:           0x0000000000000030
108  - name:            ltmp3
109    type:            N_SECT
110    sect:            4
111    value:           0x0000000000000050
112global-symbols:
113  - name:            __Z3fooi
114    type:            N_SECT
115    scope:           [ N_EXT ]
116    sect:            1
117    value:           0x0000000000000000
118undefined-symbols:
119  - name:            _puts
120    type:            N_UNDF
121    scope:           [ N_EXT ]
122    value:           0x0000000000000000
123page-size:       0x00000000
124...
125