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:
parent
1a21eb922b
commit
4e28634a49