I wanted to preserve this analysis of the bug fixed by the previous commit.

From "Alexander N. Kabaev" <ak03@gte.com>:
The problem is that default builtin_setjmp implementation does not restore
any registers except for stack pointers when doing nonlocal jump. This
means, that every platform, that needs to store/restore some other state
between jumps, has to provide appropriate definitions for
builtin_setjmp_setup and builtin_setjmp_receiver RTL expansions.

Every plaftorm which needs to do some additional processing at setjmp
receive point, such as restoring additional information previously saved by
builtin_setjmp_setup, can provide definition for builtin_setjmp_receiver
RTL expansion. [That is what the previous commit does.] The i386 code
compiled with -fpic option requires the value of the PIC register (EBX) to
be restored in order to function properly.  One should not provide
expansion for builtin_setjmp_setup because GCC documentation explicitly
states that values should be recalculated if possibe, rather than stored in
setjmp buffer and proper value for EBX can easlity be determined from the
current EIP contents.
This commit is contained in:
obrien 2000-01-22 16:31:39 +00:00
parent 1a21eb922b
commit 4e28634a49

Diff Content Not Available