Skip to content
Snippets Groups Projects
  • Matthieu Longo's avatar
    bdf41d62
    libgcc: hide CIE and FDE data for DWARF architecture extensions behind a handler. · bdf41d62
    Matthieu Longo authored
    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
    bdf41d62
    History
    libgcc: hide CIE and FDE data for DWARF architecture extensions behind a handler.
    Matthieu Longo authored
    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