> The last stack adjustment it sees is > the rx backend's adjustment to allocate the frame: > > _medium_frame: > pushm r6-r12 > add #-4, r0, r6 ; marked frame-related (fp = sp - > 4) mov.L r6, r0 ; marked frame-related (sp = fp) . . > . ; stack checking code goes here > add #0xffffc000, r0 ; not marked frame-related > > 00000000 <_medium_frame>: > 0: 6e 6c pushm r6-r12 > 2: 71 06 fc add #-4, r0, r6 > 5: ef 60 mov.l r6, r0 > 7:
I gather that r0 is the stack pointer and r6 the frame pointer? > 00000014 00000030 00000000 FDE cie=00000000 pc=00000000..00000043 > DW_CFA_advance_loc4: 2 to 00000002 > DW_CFA_def_cfa_offset: 32 > DW_CFA_offset: r12 at cfa-8 > . . . > DW_CFA_offset: r6 at cfa-32 > DW_CFA_advance_loc4: 3 to 00000005 > DW_CFA_def_cfa: r6 ofs 36 > DW_CFA_advance_loc4: 2 to 00000007 > DW_CFA_def_cfa_register: r0 > ( that's it for debug info ) If so, the above DW_CFA_def_cfa_register doesn't make sense, it should be r6 once the frame is established. What does the CIE contain exactly? > Perhaps the stack-check code should set FRAME_RELATED on any stack > adjustment insn? No, the design is that stack checking or alloca force the use of the frame pointer, which thus becomes the CFA register, which means that subsequent stack adjustments are irrelevant for the CFI. -- Eric Botcazou