[PATCH] RISC-V: gas: Change initial CFI operation from DW_CFA_def_cfa_register to DW_CFA_def_cfa

Nelson Chu nelson@rivosinc.com
Tue May 14 23:19:23 GMT 2024


Also send this to gdb mailing list as there should be more DWARF experts
out there.

On Mon, May 13, 2024 at 4:13 PM Sung-hun Kim <sfoon.kim@samsung.com> wrote:

> The DWARF specification (especially, DWARF4 and 5 [1,2]) states that
> DW_CFA_def_cfa_register cannot be used as the first CFI operation.
> It said DW_CFA_def_cfa_register as follows:
>
>   ... This operation is valid only if the current CFA rule is defined
>   to use a register and offset.
>
> So, DW_CFA_def_cfa_register can be used after that other definition
> operation such as DW_CFA_def_cfa is called. However, the current gas
> code emits DW_CFA_def_cfa_register as an initial CFI operation for RISCV.
>
> In the libgcc, the unwinding function does not care about it, so it can
> unwind the call stack. However, on the third party library such as
> libunwindstack in Android, it causes a fatal error.
>
> This patch changes the initial CFI operation to DW_CFA_def_cfa with
> offset 0. It works as same as the previous one, but it does not have
> any limitation so it satisfies the DWARF spec. This change resolves
> the compatibility issue while preserving the original behaviour.
>
> Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31733
>
> [1] DWARF4 specification, https://dwarfstd.org/doc/DWARF4.pdf
> [2] DWARF5 specification, https://dwarfstd.org/doc/DWARF5.pdf
>
> Signed-off-by: Sung-hun Kim <sfoon.kim@samsung.com>
> ---
>  gas/config/tc-riscv.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/gas/config/tc-riscv.c b/gas/config/tc-riscv.c
> index 1757ff6e9e2..8d749581c1d 100644
> --- a/gas/config/tc-riscv.c
> +++ b/gas/config/tc-riscv.c
> @@ -5209,7 +5209,7 @@ RISC-V options:\n\
>  void
>  riscv_cfi_frame_initial_instructions (void)
>  {
> -  cfi_add_CFA_def_cfa_register (X_SP);
> +  cfi_add_CFA_def_cfa (X_SP, 0);
>  }
>
>  int
> --
> 2.25.1
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://sourceware.org/pipermail/binutils/attachments/20240515/df3ef22d/attachment.htm>


More information about the Binutils mailing list