This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: Overlapping EH regions


> The second problem is the following.  I couldn't immediately see how
> it is related to using DONT_USE_BUILTIN_SETJMP.  The following error
> occurs compiling libio/iostream.cc:
> 
> /xxx/gnu/gcc-2.97/objdir/gcc/g++ -B/xxx/gnu/gcc-2.97/objdir/gcc/ -nostdinc++ -isystem /xxx/gnu/gcc-2.97/libstdc++ -isystem /xxx/gnu/gcc-2.97/libstdc++/std -isystem /xxx/gnu/gcc-2.97/libstdc++/stl -isystem /xxx/gnu/gcc-2.97/libio -isystem /xxx/gnu/gcc-2.97/objdir/hppa1.1-hp-hpux10.20/libio -L/xxx/gnu/gcc-2.97/objdir/hppa1.1-hp-hpux10.20/libstdc++ -B/usr/local/hppa1.1-hp-hpux10.20/bin/ -B/usr/local/hppa1.1-hp-hpux10.20/lib/ -isystem /usr/local/hppa1.1-hp-hpux10.20/include -c -O3 -fno-implicit-templates -I. -I../../../libio -nostdinc++  ../../../libio/iostream.cc
> ../../../libio/iostream.cc: In constructor `iostream::iostream(streambuf *, 
>    ostream *)':
> ../../../libio/iostream.cc:1038: Internal compiler error in , at except.c:2785

The above is definitely related to DONT_USE_BUILTIN_SETJMP.  The problem
goes away if I revert this patch:

--- pa.h	Wed Oct 25 16:55:50 2000
+++ pa.h.new	Wed Oct 25 17:14:29 2000
@@ -1985,6 +1985,11 @@
      of the return address.  */						\
   (GEN_INT (-4))
 
+/* FIXME: builtin_setjmp/builtin_longjmp don't manage the data linkage
+   table pointer register, r19, correctly.  Thus, they don't work in
+   shared libraries.  Don't use these two builtins for now. */
+#define DONT_USE_BUILTIN_SETJMP 1
+
 /* The number of Pmode words for the setjmp buffer.  */
 #define JMP_BUF_SIZE 50
 
I thought the problem might be that current_function_has_nonlocal_label
and nonlocal_goto_handler_labels weren't being handled correctly for
this case.  I added

  /* Tell flow about the strange goings on.  Putting `label' on
     `nonlocal_goto_handler_labels' to indicates that function
     calls may traverse the arc back to this label.  */

  current_function_has_nonlocal_label = 1;
  nonlocal_goto_handler_labels
    = gen_rtx_EXPR_LIST (VOIDmode, label, nonlocal_goto_handler_labels);

to jumpif_rtx in except.c but this didn't resolve the problem.

Any thoughts on the matter?  There must be something else that differs
between the two modes.

Dave
-- 
J. David Anglin                                  dave.anglin@nrc.ca
National Research Council of Canada              (613) 990-0752 (FAX: 952-6605)

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]