
On 11-Jun-2002, Manuel Carro boris@aaron.ls.fi.upm.es wrote:
Roberto Bagnara writes:
Right. However, I believe here the point is another one: do GNU and Ciao Prolog require all foreign code they interoperate with to be compiled with -fomit-frame-pointer for proper operation? And: to interoperate with foreign code compiled without -fomit-frame-pointer, is it necessary to recompile GNU and Ciao Prolog without -fomit-frame-pointer?
For GNU Prolog, the experiments conducted by Daniele and myself would seem to indicate two positive answers. Should that be confirmed, it would constitute a serious drawback of GNU Prolog, since proper behavior should not depend on how foreign code is compiled, provided the calling conventions of the platform at hand are respected (and compiling with or without -fomit-frame-pointer has no influence, AFAICT, on the calling conventions used in the platforms we are talking about).
It is possible that omiting the frame pointer (whose exact effect
on the assembler output I really do not know) somehow affects the proper behavior of {long,set}jump. Note that this behavior is anyway not documented in the GCC manual --- maybe this kind of conduct is part of the lore in the C compiler arena.
Omitting the frame pointer should not have any effect on the behaviour of setjmp() and longjmp(). If it does, then that is a bug in GCC, which should be reported. But would be surprised by the existence of such a bug, since I have for quite some time been using setjmp() and longjmp() with GCC in code compiled with `-fomit-frame-pointer', without any problems.
The problem is more likely related to GNU Prolog's use of registers, IMHO.