On Thu, Jan 12, 2023 at 04:50:07PM +0000, Richard Sandiford wrote: > I'm jumping in here without fully understanding the context, so maybe this > is exactly your point, but: the SIMD/FP DWARF registers are supposed to be > size 8 regardless of which features are enabled. That's already only half > of the hardware register size for base Armv8-A, since Advanced SIMD registers > are 16 bytes in size. > > So yeah, if we're using the hardware register size then something is wrong. I'm talking about what the following compiles to static unsigned char dwarf_reg_size_table[__LIBGCC_DWARF_FRAME_REGISTERS__+1]; void foo (void) { __builtin_init_dwarf_reg_size_table (dwarf_reg_size_table); } (and therefore what libgcc/unwind-dw2.c (init_dwarf_reg_size_table) as well) with -O2 -fbuilding-libgcc -march=armv8-a vs. -O2 -fbuilding-libgcc -march=armv8-a+sve The former is setting I think [0..31, 46, 48..63, 72..79, 96]=8, [64..71, 80..95]=0 (and leaving others untouched, which keeps them 0). While the latter is setting [0..31, 46, 72..79, 96]=8, [64..71, 80..95]=0 and [48..63]=cntd Jakub