https://gcc.gnu.org/bugzilla/show_bug.cgi?id=128485

--- Comment #1 from Yoshinori Sato <yoshinori.sato at nifty dot com> ---
This 4-byte DWARF offset issue was exposed when correcting the stack allocation
bug in rx_expand_prologue, specifically changing GEN_INT (-stack_size) to
GEN_INT (-(stack_size + frame_size)) to prevent stack corruption.

While the generated assembly is now fully correct, the CFA tracking breaks. We
attempted to workaround this by manipulating REG_FRAME_RELATED_EXPR notes or
passing false to gen_safe_add, but these approaches hit architectural
limitations:

Passing false to gen_safe_add causes an ICE (e.g., when building crtbeginS.o)
because it attempts to allocate pseudo-registers after the reload pass, failing
the gcc_assert (can_create_pseudo_p ()); in rx.md.

Emitting manual CFA adjustment notes causes ICEs in dwarf2cfi.cc
(maybe_record_trace_start) due to strict CFA state mismatch between prologue,
epilogue (rtsd vs add), and sibcalls.

Therefore, a proper backend-wide fix is required to reconcile
rx_initial_elimination_offset and the DWARF CFA tracking mechanism regarding
the implicit 4-byte PC push.

Reply via email to