One additional detail: when I build in debug (-O0), it doesn't crash. In that case, gcc decides to use an unwind table based on offsets against the cfa instead of against rbp, which works fine: >_ULx86_64_fetch_frame: fetch frame ip=0x55555589afb7 cfa=0x7fffffff94d0 format=0 >run_cfi_program: CFA_def_cfa r7+0x8 >run_cfi_program: CFA_offset r16 at cfa+0xfffffffffffffff8 >run_cfi_program: CFA_advance_loc to 0x5555558855b3 >run_cfi_program: CFA_def_cfa_offset 0x10 >run_cfi_program: CFA_offset r6 at cfa+0xfffffffffffffff0 >run_cfi_program: CFA_advance_loc to 0x5555558855b6 >run_cfi_program: CFA_def_cfa_register r6 >run_cfi_program: CFA_advance_loc to 0x5555558855e6 >run_cfi_program: CFA_offset r13 at cfa+0xffffffffffffffe8 >run_cfi_program: CFA_offset r12 at cfa+0xffffffffffffffe0 >run_cfi_program: CFA_offset r3 at cfa+0xffffffffffffffd8 On Thu, Feb 3, 2022 at 2:36 AM Juraj Oršulić <juraj.orsulic@xxxxxx> wrote: > > Hi Sam, thanks for replying. The example wasn't meant to be compile > (sure, I missed the class closing brace and omitted storing argc). > That's not the point. > To reproduce it I would need to include a bunch of other code from the > codebase and put it inside ::process(). > The point is that the mere presence of this code causes it to crash > if I throw right at the beginning -- I don't even execute any of that code. > I'm trying to figure out why the DWARF unwinding code becomes incorrect, > as I described in detail. > > > > Sam Varshavchik wrote: > > > This was slimmed down too much. I don't see how this would compile.