]> git.ipfire.org Git - thirdparty/gcc.git/commit
libgcc: hide CIE and FDE data for DWARF architecture extensions behind a handler.
authorMatthieu Longo <matthieu.longo@arm.com>
Mon, 23 Sep 2024 14:03:37 +0000 (15:03 +0100)
committerTamar Christina <tamar.christina@arm.com>
Mon, 23 Sep 2024 14:24:21 +0000 (15:24 +0100)
commitbdf41d627c13bc5f0dc676991f4513daa9d9ae36
tree560fd640adb15152e64a36a4e67da30ccc0f2777
parentba3e597681b640f6f9a676ec4f6cd3ca3878cefc
libgcc: hide CIE and FDE data for DWARF architecture extensions behind a handler.

This patch provides a new handler MD_ARCH_FRAME_STATE_T to hide an
architecture-specific structure containing CIE and FDE data related
to DWARF architecture extensions.

Hiding the architecture-specific attributes behind a handler has the
following benefits:
1. isolating those data from the generic ones in _Unwind_FrameState
2. avoiding casts to custom types.
3. preserving typing information when debugging with GDB, and so
   facilitating their printing.

This approach required to add a new header md-unwind-def.h included at
the top of libgcc/unwind-dw2.h, and redirecting to the corresponding
architecture header via a symbolic link.

An obvious drawback is the increase in complexity with macros, and
headers. It also caused a split of architecture definitions between
md-unwind-def.h (types definitions used in unwind-dw2.h) and
md-unwind.h (local types definitions and handlers implementations).
The naming of md-unwind.h with .h extension is a bit misleading as
the file is only included in the middle of unwind-dw2.c. Changing
this naming would require modification of others backends, which I
prefered to abstain from. Overall the benefits are worth the added
complexity from my perspective.

libgcc/ChangeLog:

* Makefile.in: New target for symbolic link to md-unwind-def.h
* config.host: New parameter md_unwind_def_header. Set it to
aarch64/aarch64-unwind-def.h for AArch64 targets, or no-unwind.h
by default.
* config/aarch64/aarch64-unwind.h
(aarch64_pointer_auth_key): Move to aarch64-unwind-def.h
(aarch64_cie_aug_handler): Update.
(aarch64_arch_extension_frame_init): Update.
(aarch64_demangle_return_addr): Update.
* configure.ac: New substitute variable md_unwind_def_header.
* unwind-dw2.h (defined): MD_ARCH_FRAME_STATE_T.
* config/aarch64/aarch64-unwind-def.h: New file.
* configure: Regenerate.
* config/no-unwind.h: Updated comment
libgcc/Makefile.in
libgcc/config.host
libgcc/config/aarch64/aarch64-unwind-def.h [new file with mode: 0644]
libgcc/config/aarch64/aarch64-unwind.h
libgcc/config/no-unwind.h
libgcc/configure
libgcc/configure.ac
libgcc/unwind-dw2.h