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 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 > --- > 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 > >