|
From: | Roberto Bagnara |
Subject: | Re: [PPL-devel] Re: Raising Prolog exceptions from C code (2nd attempt) |
Date: | Mon, 10 Jun 2002 19:47:52 +0200 |
User-agent: | Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.0) Gecko/20020606 |
Daniele Peri wrote:
Fri, 2002-06-07 19:25, Roberto Bagnara wrote:in my application (http://www.cs.unipr.it/ppl/) and I observe exactly the same segmentation violations and illegal instructions. May it be because Pl_Exec_Continuation is implemented by means of setjmp/longjmp and I am doing something that is incompatible with them? What can it be?I hope not to bother anyone telling again that this problem seems very similar to the one I experienced with my applications using GTK. I found that such problems arise when linking code compiled without using frame pointer (like many distribution libraries) and gprolog compiled with all the default optimizations (among them the use of frame pointer). Problems actually appear just with callbacks in the case of GTK so I think your hypothesis could be right. I made some test in gdb discovering a complete mess in the stack after a call from a GTK callback. In some cases I could make things work by modifying manually the stack pointer. I discussed it with Daniel Diaz but I haven't had the time to test it thoroughly as Daniel asked me. My simple solution, so far, is to compile GNUProlog and the "critic" libraries or source-codeall in the same way.
Dear Daniele, thanks for your message. Your analysis works! I use the GMP library which, by default, is compiled with -fomit-frame-pointer. And I use the PPL library (http://www.cs.unipr.it/ppl/) that, by default, is compiled without -fomit-frame-pointer. I have first tried to compile PPL with -fomit-frame-pointer and then I discovered the bug of GCC 3.0.x whereby C++ exceptions don't work with -fomit-frame-pointer. Then I have tried compiling everything without -fomit-frame-pointer and everything works OK: I can throw C++ exceptions, catch them in C++ to convert them into GNU Prolog exceptions that can then correctly be caught by Prolog code. I really feel this is a strong limitation of GNU Prolog: we cannot ask our users to recompile every library they use so as to make sure that -fomit-frame-pointer is used or left out consistently in all the builds. Daniel, do you envisage any solution to this problem? Can we do something to help? All the best Roberto -- Prof. Roberto Bagnara Computer Science Group Department of Mathematics, University of Parma, Italy http://www.cs.unipr.it/~bagnara/ mailto:address@hidden
[Prev in Thread] | Current Thread | [Next in Thread] |