summaryrefslogtreecommitdiff
path: root/sysdeps/generic/framestate.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2001-11-16 01:27:24 +0000
committerUlrich Drepper <drepper@redhat.com>2001-11-16 01:27:24 +0000
commit74bd2300b57fdb2540478e8698ef7f9067db792c (patch)
tree5adf4e4f6294bb2c418c211c686f918452420fab /sysdeps/generic/framestate.c
parent4acda75c3da212931811a902e4658e0c681f83f2 (diff)
Update.
2001-10-02 Jakub Jelinek <jakub@redhat.com> H.J. Lu <hjl@gnu.org> * configure.in (libc_cv_gcc_static_libgcc): Set to -static-libgcc if gcc supports this flag. (EXPORT_UNWIND_FIND_FDE): Define unless target configure disables it. (gcc3): Allow glibc to be compiled with gcc 3.x. * config.h.in (EXPORT_UNWIND_FIND_FDE): Add. * config.make.in (static-libgcc, unwind-find-fde): Add. * Makerules (build-shlib-helper, build-module-helper): Use it. * scripts/versions.awk: Make sure GLIBC_ versions come first. * elf/soinit.c (__libc_global_ctors): Set tbases and dbases if necessary. (_fini): Call __deregister_frame_info_bases if __register_frame_info_bases was used to register. * elf/Versions (__register_frame_info, __deregister_frame_info): Add for GLIBC_2.0. (__register_frame_info_bases, __register_frame_info_table_bases, __deregister_frame_info_bases, _Unwind_Find_FDE): Add for GLIBC_2.2.5. * elf/Makefile (routines): Add unwind-dw2-fde. (shared-only-routines): Add unwind-dw2-fde. * sysdeps/alpha/gccframe.h: New file. * sysdeps/arm/gccframe.h: New file. * sysdeps/generic/framestate.c: New file. * sysdeps/generic/dwarf2.h: New file. * sysdeps/generic/gccframe.h (struct object): Update from gcc 3.0. * sysdeps/generic/unwind-dw2-fde.c: New file. * sysdeps/unix/sysv/linux/ia64/unwind-dw2-fde.c: New file. * sysdeps/generic/unwind-dw2-fde.h: New file. * sysdeps/generic/unwind-dw2.c: New file. * sysdeps/generic/unwind-pe.h: New file. * sysdeps/generic/unwind.h: New file. * sysdeps/hppa/gccframe.h: New file. * sysdeps/i386/gccframe.h: New file. * sysdeps/m68k/gccframe.h: New file. * sysdeps/mips/gccframe.h: New file. * sysdeps/powerpc/gccframe.h: New file. * sysdeps/s390/gccframe.h: New file. * sysdeps/sh/gccframe.h: New file. * sysdeps/sparc/gccframe.h: New file. * sysdeps/vax/gccframe.h: New file. * sysdeps/unix/sysv/linux/configure.in (libc_cv_gcc_unwind_find_fde): Set on all architectures except ia64. * sysdeps/mach/hurd/configure.in (libc_cv_gcc_unwind_find_fde): Set for i386. * sysdeps/mach/hurd/i386/Versions (__register_frame_info, __deregister_frame_info): Move to elf/Versions. * sysdeps/unix/sysv/linux/m68k/Versions: Likewise. * sysdeps/unix/sysv/linux/arm/Versions: Likewise. * sysdeps/unix/sysv/linux/alpha/Versions: Likewise. * sysdeps/unix/sysv/linux/i386/Versions: Likewise. * sysdeps/unix/sysv/linux/mips/Versions: Likewise. * sysdeps/unix/sysv/linux/powerpc/Versions: Likewise. * sysdeps/unix/sysv/linux/s390/s390-32/Versions: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc32/Versions: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc64/Versions: Likewise. * sysdeps/mach/hurd/i386/Makefile (sysdep-routines): Add framestate. * sysdeps/unix/sysv/linux/arm/Makefile: Likewise. * sysdeps/unix/sysv/linux/alpha/Makefile: Likewise. * sysdeps/unix/sysv/linux/i386/Makefile: Likewise. * sysdeps/unix/sysv/linux/m68k/Makefile: Likewise. * sysdeps/unix/sysv/linux/mips/Makefile: Likewise. * sysdeps/unix/sysv/linux/powerpc/Makefile: Likewise. * sysdeps/unix/sysv/linux/s390/s390-32/Makefile: Likewise. * sysdeps/unix/sysv/linux/sparc/Makefile: Likewise. * sysdeps/unix/sysv/linux/ia64/ldd-rewrite.sed: New file. * sysdeps/unix/sysv/linux/s390/ldd-rewrite.sed: New file. * sysdeps/generic/strnlen.c: New file.
Diffstat (limited to 'sysdeps/generic/framestate.c')
-rw-r--r--sysdeps/generic/framestate.c47
1 files changed, 47 insertions, 0 deletions
diff --git a/sysdeps/generic/framestate.c b/sysdeps/generic/framestate.c
new file mode 100644
index 0000000000..5cb3e6ca85
--- /dev/null
+++ b/sysdeps/generic/framestate.c
@@ -0,0 +1,47 @@
+/* __frame_state_for unwinder helper function wrapper.
+ Copyright (C) 2001 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Jakub Jelinek <jakub@redhat.com>, 2001.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+#include <dlfcn.h>
+#include <stdlib.h>
+#define __frame_state_for fallback_frame_state_for
+#include <unwind-dw2.c>
+#undef __frame_state_for
+
+typedef struct frame_state * (*framesf)(void *pc, struct frame_state *);
+struct frame_state *__frame_state_for (void *pc,
+ struct frame_state *frame_state);
+
+struct frame_state *
+__frame_state_for (void *pc, struct frame_state *frame_state)
+{
+ static framesf frame_state_for;
+
+ if (frame_state_for == NULL)
+ {
+ void *handle = __libc_dlopen ("libgcc_s.so.1");
+
+ if (handle == NULL
+ || (frame_state_for
+ = (framesf) __libc_dlsym (handle, "__frame_state_for")) == NULL)
+ frame_state_for = fallback_frame_state_for;
+ }
+
+ return frame_state_for (pc, frame_state);
+}