This is the mail archive of the libc-hacker@sources.redhat.com mailing list for the glibc project.

Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: dwarf2 unwind info check broken


On Sun, Mar 17, 2002 at 01:25:16PM +0100, Andreas Jaeger wrote:
> Andreas Jaeger <aj@suse.de> writes:
> 
> > Andreas Jaeger <aj@suse.de> writes:
> >
> >> With current binutils and both gcc 2.95.3 and GCC 3.2 CVS on
> >> i686-linux-gnu I now get:
> >>
> >> checking for DWARF2 unwind info support... (cached) no
> >>
> >> The test program from configure:
> >> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> >> static char __EH_FRAME_BEGIN__[];
> >
> > I figured out the problem: the []; gets removed by autoconf - but my
> > autoconf version didn't remove it. :-(
> 
> But that's not the whole story, something is still broken for me:

There are 2 different cases if the register_frame_info &
register_frame check both fail.
Either you have gcc 3.1+ configured with old binutils, or new binutils.
In the former case, we should define HAVE_DWARF2_UNWIND_INFO and
HAVE_DWARF2_UNWIND_INFO_STATIC, in the latter case nothing (as in that
case no registry should happen).

So the unwind info check should be extended to something like
(untested):

 if AC_TRY_COMMAND([${CC-cc} $CFLAGS -DCHECK__register_frame_info
                             -nostdlib -nostartfiles
                             -o conftest conftest.c -lgcc >&AC_FD_CC]); then
   libc_cv_gcc_dwarf2_unwind_info=static
 else
   libc_cv_gcc_dwarf2_unwind_info=no
 fi
+if AC_TRY_COMMAND([${CC-cc} $CFLAGS -DCHECK__register_frame_info
+                            -nostdlib -nostartfiles
+                            -o conftest conftest.c -lgcc -lgcc_eh >&AC_FD_CC]); then
+  if ${CC-cc} $CFLAGS -DCHECK__register_frame_info -nostdlib -nostartfiles \
+     -o conftest conftest.c -lgcc -lgcc_eh 2>&1 >/dev/null \
+     | grep -q -- --eh-frame-hdr; then
+    libc_cv_gcc_dwarf2_unwind_info=no_registry_needed
+  else
+    libc_cv_gcc_dwarf2_unwind_info=static
+  fi
+else
+  libc_cv_gcc_dwarf2_unwind_info=no
+fi
 if test $libc_cv_gcc_dwarf2_unwind_info = no; then
   if AC_TRY_COMMAND([${CC-cc} $CFLAGS -DCHECK__register_frame
                               -nostdlib -nostartfiles
                               -o conftest conftest.c -lgcc >&AC_FD_CC]);
 then
     libc_cv_gcc_dwarf2_unwind_info=yes
   else
     libc_cv_gcc_dwarf2_unwind_info=no
   fi
 fi

> So, how can we fix that configure test - and do we need to add -lgcc_s
> for sln?

Um, why? Especially since adding -lgcc_s to -static will lead to failed link
(there is no static -lgcc_s).
gcc takes care of adding -lgcc_eh when it is necessary for -static link.

	Jakub


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