Files
TheRock/compiler/amd-llvm/lld/test/MachO/eh-frame-ordering.s
T
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

108 lines
2.9 KiB
ArmAsm

# REQUIRES: x86, aarch64
## Test that __eh_frame CIE/FDE ordering is preserved even when
## priority-based section sorting (from BP compression sort, order files,
## etc.) would otherwise reorder input sections. CIE records must precede
## the FDE records that reference them; reordering breaks CIE pointer
## resolution.
## x86_64
# RUN: llvm-mc -filetype=obj -emit-compact-unwind-non-canonical=true -triple=x86_64-apple-macos10.15 %s -o %t-x86_64.o
# RUN: %lld -lSystem -lc++ %t-x86_64.o -o %t-x86_64 --bp-compression-sort=both
# RUN: llvm-objdump --dwarf=frames %t-x86_64 2>&1 | FileCheck %s --implicit-check-not=error --implicit-check-not=warning
## arm64
# RUN: llvm-mc -filetype=obj -emit-compact-unwind-non-canonical=true -triple=arm64-apple-macos11.0 %s -o %t-arm64.o
# RUN: %lld -arch arm64 -lSystem -lc++ %t-arm64.o -o %t-arm64 --bp-compression-sort=both
# RUN: llvm-objdump --dwarf=frames %t-arm64 2>&1 | FileCheck %s --implicit-check-not=error --implicit-check-not=warning
## Verify that __eh_frame starts with a CIE (not an FDE), contains both
## CIEs and FDEs, and that no parse errors occur. The test uses two
## personality functions, producing two CIE groups (CIE_A + FDEs, CIE_B +
## FDEs). The --implicit-check-not flags above ensure no FDE fails to
## resolve its CIE pointer.
# CHECK: .eh_frame contents:
# CHECK: {{[0-9a-f]+}} {{.*}} CIE
# CHECK: {{[0-9a-f]+}} {{.*}} FDE
# CHECK: {{[0-9a-f]+}} {{.*}} FDE
# CHECK: {{[0-9a-f]+}} {{.*}} FDE
# CHECK: {{[0-9a-f]+}} {{.*}} FDE
.globl _my_personality_a, _my_personality_b, _main
.text
## _func_a uses cfi_escape to force DWARF unwind (can't be compact-encoded).
## Uses personality A -> produces CIE_A + FDE for _func_a.
.p2align 2
_func_a:
.cfi_startproc
.cfi_personality 155, _my_personality_a
.cfi_lsda 16, Lexception_a
.cfi_def_cfa_offset 16
.cfi_escape 0x2e, 0x10
ret
.cfi_endproc
## _func_b also uses personality A + cfi_escape -> reuses CIE_A, new FDE.
.p2align 2
_func_b:
.cfi_startproc
.cfi_personality 155, _my_personality_a
.cfi_lsda 16, Lexception_b
.cfi_def_cfa_offset 16
.cfi_escape 0x2e, 0x10
ret
.cfi_endproc
## _func_c uses personality B + cfi_escape -> produces CIE_B + FDE.
.p2align 2
_func_c:
.cfi_startproc
.cfi_personality 155, _my_personality_b
.cfi_lsda 16, Lexception_c
.cfi_def_cfa_offset 16
.cfi_escape 0x2e, 0x10
ret
.cfi_endproc
## _func_d uses personality B + cfi_escape -> reuses CIE_B, new FDE.
.p2align 2
_func_d:
.cfi_startproc
.cfi_personality 155, _my_personality_b
.cfi_lsda 16, Lexception_d
.cfi_def_cfa_offset 16
.cfi_escape 0x2e, 0x10
ret
.cfi_endproc
.p2align 2
_my_personality_a:
ret
.p2align 2
_my_personality_b:
ret
.p2align 2
_main:
ret
.section __TEXT,__gcc_except_tab
GCC_except_table_a:
Lexception_a:
.byte 255
GCC_except_table_b:
Lexception_b:
.byte 255
GCC_except_table_c:
Lexception_c:
.byte 255
GCC_except_table_d:
Lexception_d:
.byte 255
.subsections_via_symbols