PATCH: Restore i386 binary compat for EH info

Martin v. Loewis martin@loewis.home.cs.tu-berlin.de
Tue Jan 4 15:36:00 GMT 2000


> 1) That should not be necessary for binary compatibility.  So long as
>    the register mapping is backward-compatible, adding new registers should
>    be fine.  Why was it breaking?

struct frame_state has two arrays (reg_or_offset, saved) which depend
on the number of registers. As a result, the location of cfa_reg
changes when new registers are added. Since struct frame_state* is a
result of frame_state_for, this breaks if the implementation of
frame_state_for was compiled with a different compiler than the caller
of frame_state_for.

> 2) How did this happen?  Were some of the registers not represented before?

This happened with the new ia32 back-end. The old back-end had 17 hard
registers, the new one has 19. "flags" and "fpsr" where not previously
considered as hard registers. Since gcc never actively saves them on
stack (does it?), I believe not representing them in frame_state still
works ok.

Regards,
Martin



More information about the Gcc-patches mailing list