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.
This commit is contained in:
Ulrich Drepper 2001-11-16 01:27:24 +00:00
parent 4acda75c3d
commit 74bd2300b5
53 changed files with 4446 additions and 156 deletions

View File

@ -1,3 +1,69 @@
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.
2001-11-15 Jeff Law <law@redhat.com>
* posix/regex.c (uintptr_t): Do not provide a definition if the
@ -798,8 +864,8 @@
2001-09-18 Jakub Jelinek <jakub@redhat.com>
* sysdeps/unix/sysv/linux/ia64/ldd-rewrite.sed: New.
* sysdeps/unix/sysv/linux/s390/ldd-rewrite.sed: New.
* sysdeps/unix/sysv/linux/ia64/ldd-rewrite.sed: New file.
* sysdeps/unix/sysv/linux/s390/ldd-rewrite.sed: New file.
* sysdeps/unix/sysv/linux/configure.in: Add ia64 and s390
ldd-rewrite scripts.
@ -1632,7 +1698,7 @@
2001-08-21 Jakub Jelinek <jakub@redhat.com>
* string/strnlen.c: Remove.
* sysdeps/generic/strnlen.c: New.
* sysdeps/generic/strnlen.c: New file.
* sysdeps/i386/i486/bits/string.h (strnlen): Remove.
2001-08-21 Roland McGrath <roland@frob.com>

View File

@ -400,7 +400,7 @@ endif
ifeq ($(elf),yes)
define build-shlib-helper
$(LINK.o) -shared -Wl,-O1 $(sysdep-LDFLAGS) $(config-LDFLAGS) \
$(LINK.o) -shared $(static-libgcc) -Wl,-O1 $(sysdep-LDFLAGS) $(config-LDFLAGS) \
$(extra-B-$(@F:lib%.so=%).so) -B$(csu-objpfx) \
$(extra-B-$(@F:lib%.so=%).so) $(load-map-file) \
-Wl,-soname=lib$(libprefix)$(@F:lib%.so=%).so$($(@F)-version) \
@ -460,7 +460,7 @@ $(LINK.o) -Wl,-G -Wl,-bM:SRE -Wl,-bnoentry -Wl,-bexpall \
endef
else
define build-module-helper
$(LINK.o) -shared $(sysdep-LDFLAGS) $(config-LDFLAGS) \
$(LINK.o) -shared $(static-libgcc) $(sysdep-LDFLAGS) $(config-LDFLAGS) \
-B$(csu-objpfx) $(load-map-file) \
$(LDFLAGS.so) $(LDFLAGS-$(@F:%.so=%).so) \
-L$(subst :, -L,$(rpath-link)) -Wl,-rpath-link=$(rpath-link)

View File

@ -48,6 +48,9 @@
/* Define a symbol_name as a global .symbol_name for ld. */
#undef HAVE_ASM_GLOBAL_DOT_NAME
/* Define if _Unwind_Find_FDE should be exported from glibc. */
#undef EXPORT_UNWIND_FIND_FDE
/* Define to use GNU libio instead of GNU stdio.
This is defined by configure under --enable-libio. */
#undef USE_IN_LIBIO

View File

@ -46,6 +46,9 @@ have-Bgroup = @libc_cv_Bgroup@
need-nopic-initfini = @nopic_initfini@
with-cvs = @with_cvs@
old-glibc-headers = @old_glibc_headers@
unwind-find-fde = @libc_cv_gcc_unwind_find_fde@
static-libgcc = @libc_cv_gcc_static_libgcc@
versioning = @VERSIONING@
oldest-abi = @oldest_abi@

207
configure vendored
View File

@ -2105,27 +2105,6 @@ test -n "$aux_missing" && echo "configure: warning:
CCVERSION=`$CC -v 2>&1 | sed -n 's/gcc version //p'`
case $CCVERSION in
3.*) gcc3=yes;;
esac
if test x"$gcc3" = xyes; then
echo "\
*** This version of GNU libc cannot be compiled by GCC 3.x.
*** GCC 3.x will generate a library that is binary incompatible to
*** older and future releases of GNU libc.
*** You should compile this GNU libc release by an older GCC version
*** or wait for the next GNU libc release."
if test $enable_sanity = yes; then
echo "\
*** If you really mean to use GCC 3.x, run configure again
*** using the extra parameter \`--disable-sanity-checks'."
exit 1
else
echo "\
*** This configuration is not supported by the GNU libc developers."
fi
fi
# if using special system headers, find out the compiler's sekrit
# header directory and add that to the list. NOTE: Only does the right
# thing on a system that doesn't need fixincludes. (Not presently a problem.)
@ -2137,7 +2116,7 @@ fi
# check if ranlib is necessary
echo $ac_n "checking whether ranlib is necessary""... $ac_c" 1>&6
echo "configure:2141: checking whether ranlib is necessary" >&5
echo "configure:2120: checking whether ranlib is necessary" >&5
if eval "test \"`echo '$''{'libc_cv_ranlib_necessary'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -2171,7 +2150,7 @@ fi
# - two terminals occur directly after each other
# - the path contains an element with a dot in it
echo $ac_n "checking LD_LIBRARY_PATH variable""... $ac_c" 1>&6
echo "configure:2175: checking LD_LIBRARY_PATH variable" >&5
echo "configure:2154: checking LD_LIBRARY_PATH variable" >&5
case ${LD_LIBRARY_PATH} in
[:\;]* | *[:\;] | *[:\;][:\;]* | *[:\;]. | .[:\;]*| . | *[:\;].[:\;]* )
ld_library_path_setting="contains current directory"
@ -2188,10 +2167,25 @@ if test "$ld_library_path_setting" != "ok"; then
*** and run configure again." 1>&2; exit 1; }
fi
echo $ac_n "checking whether GCC supports -static-libgcc""... $ac_c" 1>&6
echo "configure:2172: checking whether GCC supports -static-libgcc" >&5
if eval "test \"`echo '$''{'libc_cv_gcc_static_libgcc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if $CC -v -static-libgcc 2>&1 | grep -q 'unrecognized option.*static-libgcc'; then
libc_cv_gcc_static_libgcc=
else
libc_cv_gcc_static_libgcc=-static-libgcc
fi
fi
echo "$ac_t""$libc_cv_gcc_static_libgcc" 1>&6
# Extract the first word of "bash", so it can be a program name with args.
set dummy bash; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:2195: checking for $ac_word" >&5
echo "configure:2189: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_BASH'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -2237,7 +2231,7 @@ if test "$BASH" = no; then
# Extract the first word of "ksh", so it can be a program name with args.
set dummy ksh; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:2241: checking for $ac_word" >&5
echo "configure:2235: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_KSH'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -2287,7 +2281,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:2291: checking for $ac_word" >&5
echo "configure:2285: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -2319,7 +2313,7 @@ done
# Extract the first word of "perl", so it can be a program name with args.
set dummy perl; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:2323: checking for $ac_word" >&5
echo "configure:2317: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_PERL'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -2359,7 +2353,7 @@ fi
# Extract the first word of "install-info", so it can be a program name with args.
set dummy install-info; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:2363: checking for $ac_word" >&5
echo "configure:2357: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_INSTALL_INFO'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -2394,7 +2388,7 @@ fi
if test "$INSTALL_INFO" != "no"; then
echo $ac_n "checking for old Debian install-info""... $ac_c" 1>&6
echo "configure:2398: checking for old Debian install-info" >&5
echo "configure:2392: checking for old Debian install-info" >&5
if eval "test \"`echo '$''{'libc_cv_old_debian_install_info'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -2429,7 +2423,7 @@ fi
# Extract the first word of "bison", so it can be a program name with args.
set dummy bison; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:2433: checking for $ac_word" >&5
echo "configure:2427: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_BISON'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -2464,7 +2458,7 @@ fi
echo $ac_n "checking for signed size_t type""... $ac_c" 1>&6
echo "configure:2468: checking for signed size_t type" >&5
echo "configure:2462: checking for signed size_t type" >&5
if eval "test \"`echo '$''{'libc_cv_signed_size_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -2488,12 +2482,12 @@ EOF
fi
echo $ac_n "checking for libc-friendly stddef.h""... $ac_c" 1>&6
echo "configure:2492: checking for libc-friendly stddef.h" >&5
echo "configure:2486: checking for libc-friendly stddef.h" >&5
if eval "test \"`echo '$''{'libc_cv_friendly_stddef'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 2497 "configure"
#line 2491 "configure"
#include "confdefs.h"
#define __need_size_t
#define __need_wchar_t
@ -2508,7 +2502,7 @@ size_t size; wchar_t wchar;
if (&size == NULL || &wchar == NULL) abort ();
; return 0; }
EOF
if { (eval echo configure:2512: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:2506: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
libc_cv_friendly_stddef=yes
else
@ -2527,7 +2521,7 @@ override stddef.h = # The installed <stddef.h> seems to be libc-friendly."
fi
echo $ac_n "checking whether we need to use -P to assemble .S files""... $ac_c" 1>&6
echo "configure:2531: checking whether we need to use -P to assemble .S files" >&5
echo "configure:2525: checking whether we need to use -P to assemble .S files" >&5
if eval "test \"`echo '$''{'libc_cv_need_minus_P'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -2550,7 +2544,7 @@ asm-CPPFLAGS = -P # The assembler can't grok cpp's # line directives."
fi
echo $ac_n "checking whether .text pseudo-op must be used""... $ac_c" 1>&6
echo "configure:2554: checking whether .text pseudo-op must be used" >&5
echo "configure:2548: checking whether .text pseudo-op must be used" >&5
if eval "test \"`echo '$''{'libc_cv_dot_text'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -2571,7 +2565,7 @@ else
fi
echo $ac_n "checking for assembler global-symbol directive""... $ac_c" 1>&6
echo "configure:2575: checking for assembler global-symbol directive" >&5
echo "configure:2569: checking for assembler global-symbol directive" >&5
if eval "test \"`echo '$''{'libc_cv_asm_global_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -2601,7 +2595,7 @@ EOF
fi
echo $ac_n "checking for .set assembler directive""... $ac_c" 1>&6
echo "configure:2605: checking for .set assembler directive" >&5
echo "configure:2599: checking for .set assembler directive" >&5
if eval "test \"`echo '$''{'libc_cv_asm_set_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -2644,7 +2638,7 @@ EOF
esac
echo $ac_n "checking for .symver assembler directive""... $ac_c" 1>&6
echo "configure:2648: checking for .symver assembler directive" >&5
echo "configure:2642: checking for .symver assembler directive" >&5
if eval "test \"`echo '$''{'libc_cv_asm_symver_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -2663,7 +2657,7 @@ fi
echo "$ac_t""$libc_cv_asm_symver_directive" 1>&6
echo $ac_n "checking for ld --version-script""... $ac_c" 1>&6
echo "configure:2667: checking for ld --version-script" >&5
echo "configure:2661: checking for ld --version-script" >&5
if eval "test \"`echo '$''{'libc_cv_ld_version_script_option'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -2686,7 +2680,7 @@ EOF
if { ac_try='${CC-cc} $CFLAGS -shared -o conftest.so conftest.o
-nostartfiles -nostdlib
-Wl,--version-script,conftest.map
1>&5'; { (eval echo configure:2690: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; };
1>&5'; { (eval echo configure:2684: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; };
then
libc_cv_ld_version_script_option=yes
else
@ -2725,7 +2719,7 @@ if test $elf = yes && test $shared != no && test $VERSIONING = no; then
fi
if test $elf = yes; then
echo $ac_n "checking for .previous assembler directive""... $ac_c" 1>&6
echo "configure:2729: checking for .previous assembler directive" >&5
echo "configure:2723: checking for .previous assembler directive" >&5
if eval "test \"`echo '$''{'libc_cv_asm_previous_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -2733,7 +2727,7 @@ else
.section foo_section
.previous
EOF
if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:2737: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:2731: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_asm_previous_directive=yes
else
libc_cv_asm_previous_directive=no
@ -2749,7 +2743,7 @@ EOF
else
echo $ac_n "checking for .popsection assembler directive""... $ac_c" 1>&6
echo "configure:2753: checking for .popsection assembler directive" >&5
echo "configure:2747: checking for .popsection assembler directive" >&5
if eval "test \"`echo '$''{'libc_cv_asm_popsection_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -2757,7 +2751,7 @@ else
.pushsection foo_section
.popsection
EOF
if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:2761: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:2755: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_asm_popsection_directive=yes
else
libc_cv_asm_popsection_directive=no
@ -2774,7 +2768,7 @@ EOF
fi
fi
echo $ac_n "checking for .protected and .hidden assembler directive""... $ac_c" 1>&6
echo "configure:2778: checking for .protected and .hidden assembler directive" >&5
echo "configure:2772: checking for .protected and .hidden assembler directive" >&5
if eval "test \"`echo '$''{'libc_cv_asm_protected_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -2784,7 +2778,7 @@ foo:
.hidden bar
bar:
EOF
if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:2788: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:2782: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_asm_protected_directive=yes
else
libc_cv_asm_protected_directive=no
@ -2796,14 +2790,14 @@ echo "$ac_t""$libc_cv_asm_protected_directive" 1>&6
echo $ac_n "checking for -z nodelete option""... $ac_c" 1>&6
echo "configure:2800: checking for -z nodelete option" >&5
echo "configure:2794: checking for -z nodelete option" >&5
if eval "test \"`echo '$''{'libc_cv_z_nodelete'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.c <<EOF
int _start (void) { return 42; }
EOF
if { ac_try='${CC-cc} -shared -o conftest.so conftest.c -Wl,--enable-new-dtags,-z,nodelete 1>&5'; { (eval echo configure:2807: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }
if { ac_try='${CC-cc} -shared -o conftest.so conftest.c -Wl,--enable-new-dtags,-z,nodelete 1>&5'; { (eval echo configure:2801: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }
then
libc_cv_z_nodelete=yes
else
@ -2816,14 +2810,14 @@ echo "$ac_t""$libc_cv_z_nodelete" 1>&6
echo $ac_n "checking for -z nodlopen option""... $ac_c" 1>&6
echo "configure:2820: checking for -z nodlopen option" >&5
echo "configure:2814: checking for -z nodlopen option" >&5
if eval "test \"`echo '$''{'libc_cv_z_nodlopen'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.c <<EOF
int _start (void) { return 42; }
EOF
if { ac_try='${CC-cc} -shared -o conftest.so conftest.c -Wl,--enable-new-dtags,-z,nodlopen 1>&5'; { (eval echo configure:2827: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }
if { ac_try='${CC-cc} -shared -o conftest.so conftest.c -Wl,--enable-new-dtags,-z,nodlopen 1>&5'; { (eval echo configure:2821: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }
then
libc_cv_z_nodlopen=yes
else
@ -2836,14 +2830,14 @@ echo "$ac_t""$libc_cv_z_nodlopen" 1>&6
echo $ac_n "checking for -z initfirst option""... $ac_c" 1>&6
echo "configure:2840: checking for -z initfirst option" >&5
echo "configure:2834: checking for -z initfirst option" >&5
if eval "test \"`echo '$''{'libc_cv_z_initfirst'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.c <<EOF
int _start (void) { return 42; }
EOF
if { ac_try='${CC-cc} -shared -o conftest.so conftest.c -Wl,--enable-new-dtags,-z,initfirst 1>&5'; { (eval echo configure:2847: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }
if { ac_try='${CC-cc} -shared -o conftest.so conftest.c -Wl,--enable-new-dtags,-z,initfirst 1>&5'; { (eval echo configure:2841: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }
then
libc_cv_z_initfirst=yes
else
@ -2856,14 +2850,14 @@ echo "$ac_t""$libc_cv_z_initfirst" 1>&6
echo $ac_n "checking for -Bgroup option""... $ac_c" 1>&6
echo "configure:2860: checking for -Bgroup option" >&5
echo "configure:2854: checking for -Bgroup option" >&5
if eval "test \"`echo '$''{'libc_cv_Bgroup'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.c <<EOF
int _start (void) { return 42; }
EOF
if { ac_try='${CC-cc} -shared -o conftest.so conftest.c -Wl,-Bgroup -nostdlib 1>&5'; { (eval echo configure:2867: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }
if { ac_try='${CC-cc} -shared -o conftest.so conftest.c -Wl,-Bgroup -nostdlib 1>&5'; { (eval echo configure:2861: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }
then
libc_cv_Bgroup=yes
else
@ -2876,14 +2870,14 @@ echo "$ac_t""$libc_cv_Bgroup" 1>&6
echo $ac_n "checking for -z combreloc""... $ac_c" 1>&6
echo "configure:2880: checking for -z combreloc" >&5
echo "configure:2874: checking for -z combreloc" >&5
if eval "test \"`echo '$''{'libc_cv_z_combreloc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.c <<EOF
int foo (void) { return 0; }
EOF
if { ac_try='${CC-cc} -shared -o conftest.so conftest.c -Wl,-z,combreloc 1>&5'; { (eval echo configure:2887: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }
if { ac_try='${CC-cc} -shared -o conftest.so conftest.c -Wl,-z,combreloc 1>&5'; { (eval echo configure:2881: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }
then
if readelf -S conftest.so | grep '\.rel\(a\|\)\.dyn' > /dev/null; then
libc_cv_z_combreloc=yes
@ -2908,12 +2902,12 @@ fi
if test $elf != yes; then
echo $ac_n "checking for .init and .fini sections""... $ac_c" 1>&6
echo "configure:2912: checking for .init and .fini sections" >&5
echo "configure:2906: checking for .init and .fini sections" >&5
if eval "test \"`echo '$''{'libc_cv_have_initfini'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 2917 "configure"
#line 2911 "configure"
#include "confdefs.h"
int main() {
@ -2922,7 +2916,7 @@ asm (".section .init");
asm ("${libc_cv_dot_text}");
; return 0; }
EOF
if { (eval echo configure:2926: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:2920: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
libc_cv_have_initfini=yes
else
@ -2945,7 +2939,7 @@ fi
if test $elf = yes -a $gnu_ld = yes; then
echo $ac_n "checking whether cc puts quotes around section names""... $ac_c" 1>&6
echo "configure:2949: checking whether cc puts quotes around section names" >&5
echo "configure:2943: checking whether cc puts quotes around section names" >&5
if eval "test \"`echo '$''{'libc_cv_have_section_quotes'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -2982,19 +2976,19 @@ if test $elf = yes; then
else
if test $ac_cv_prog_cc_works = yes; then
echo $ac_n "checking for _ prefix on C symbol names""... $ac_c" 1>&6
echo "configure:2986: checking for _ prefix on C symbol names" >&5
echo "configure:2980: checking for _ prefix on C symbol names" >&5
if eval "test \"`echo '$''{'libc_cv_asm_underscores'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 2991 "configure"
#line 2985 "configure"
#include "confdefs.h"
asm ("_glibc_foobar:");
int main() {
glibc_foobar ();
; return 0; }
EOF
if { (eval echo configure:2998: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:2992: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
libc_cv_asm_underscores=yes
else
@ -3009,17 +3003,17 @@ fi
echo "$ac_t""$libc_cv_asm_underscores" 1>&6
else
echo $ac_n "checking for _ prefix on C symbol names""... $ac_c" 1>&6
echo "configure:3013: checking for _ prefix on C symbol names" >&5
echo "configure:3007: checking for _ prefix on C symbol names" >&5
if eval "test \"`echo '$''{'libc_cv_asm_underscores'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 3018 "configure"
#line 3012 "configure"
#include "confdefs.h"
void underscore_test(void) {
return; }
EOF
if { (eval echo configure:3023: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:3017: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if grep _underscore_test conftest* >/dev/null; then
rm -f conftest*
libc_cv_asm_underscores=yes
@ -3051,7 +3045,7 @@ if test $elf = yes; then
fi
echo $ac_n "checking for assembler .weak directive""... $ac_c" 1>&6
echo "configure:3055: checking for assembler .weak directive" >&5
echo "configure:3049: checking for assembler .weak directive" >&5
if eval "test \"`echo '$''{'libc_cv_asm_weak_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -3074,7 +3068,7 @@ echo "$ac_t""$libc_cv_asm_weak_directive" 1>&6
if test $libc_cv_asm_weak_directive = no; then
echo $ac_n "checking for assembler .weakext directive""... $ac_c" 1>&6
echo "configure:3078: checking for assembler .weakext directive" >&5
echo "configure:3072: checking for assembler .weakext directive" >&5
if eval "test \"`echo '$''{'libc_cv_asm_weakext_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -3121,14 +3115,14 @@ EOF
;;
hppa*linux*)
echo $ac_n "checking for assembler line separator""... $ac_c" 1>&6
echo "configure:3125: checking for assembler line separator" >&5
echo "configure:3119: checking for assembler line separator" >&5
if eval "test \"`echo '$''{'libc_cv_asm_line_sep'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.s <<EOF
nop ; is_old_puffin
EOF
if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:3132: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:3126: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_asm_line_sep='!'
else
if test -z "$enable_hacker_mode"; then
@ -3150,7 +3144,7 @@ EOF
esac
echo $ac_n "checking for ld --no-whole-archive""... $ac_c" 1>&6
echo "configure:3154: checking for ld --no-whole-archive" >&5
echo "configure:3148: checking for ld --no-whole-archive" >&5
if eval "test \"`echo '$''{'libc_cv_ld_no_whole_archive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -3161,7 +3155,7 @@ __throw () {}
EOF
if { ac_try='${CC-cc} $CFLAGS
-nostdlib -nostartfiles -Wl,--no-whole-archive
-o conftest conftest.c 1>&5'; { (eval echo configure:3165: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
-o conftest conftest.c 1>&5'; { (eval echo configure:3159: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_ld_no_whole_archive=yes
else
libc_cv_ld_no_whole_archive=no
@ -3175,7 +3169,7 @@ if test $libc_cv_ld_no_whole_archive = yes; then
fi
echo $ac_n "checking for gcc -fexceptions""... $ac_c" 1>&6
echo "configure:3179: checking for gcc -fexceptions" >&5
echo "configure:3173: checking for gcc -fexceptions" >&5
if eval "test \"`echo '$''{'libc_cv_gcc_exceptions'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -3186,7 +3180,7 @@ __throw () {}
EOF
if { ac_try='${CC-cc} $CFLAGS
-nostdlib -nostartfiles -fexceptions
-o conftest conftest.c 1>&5'; { (eval echo configure:3190: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
-o conftest conftest.c 1>&5'; { (eval echo configure:3184: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_gcc_exceptions=yes
else
libc_cv_gcc_exceptions=no
@ -3201,14 +3195,14 @@ fi
if test "$base_machine" = alpha ; then
echo $ac_n "checking for function ..ng prefix""... $ac_c" 1>&6
echo "configure:3205: checking for function ..ng prefix" >&5
echo "configure:3199: checking for function ..ng prefix" >&5
if eval "test \"`echo '$''{'libc_cv_gcc_alpha_ng_prefix'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.c <<\EOF
foo () { }
EOF
if { ac_try='${CC-cc} -S conftest.c -o - | fgrep "\$foo..ng" > /dev/null'; { (eval echo configure:3212: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; };
if { ac_try='${CC-cc} -S conftest.c -o - | fgrep "\$foo..ng" > /dev/null'; { (eval echo configure:3206: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; };
then
libc_cv_gcc_alpha_ng_prefix=yes
else
@ -3235,19 +3229,19 @@ if test "$host_cpu" = powerpc ; then
# Check for a bug present in at least versions 2.8.x of GCC
# and versions 1.0.x of EGCS.
echo $ac_n "checking whether clobbering cr0 causes problems""... $ac_c" 1>&6
echo "configure:3239: checking whether clobbering cr0 causes problems" >&5
echo "configure:3233: checking whether clobbering cr0 causes problems" >&5
if eval "test \"`echo '$''{'libc_cv_c_asmcr0_bug'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 3244 "configure"
#line 3238 "configure"
#include "confdefs.h"
int tester(int x) { asm ("" : : : "cc"); return x & 123; }
int main() {
; return 0; }
EOF
if { (eval echo configure:3251: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:3245: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
libc_cv_c_asmcr0_bug='no'
else
@ -3269,12 +3263,12 @@ fi
fi
echo $ac_n "checking for DWARF2 unwind info support""... $ac_c" 1>&6
echo "configure:3273: checking for DWARF2 unwind info support" >&5
echo "configure:3267: checking for DWARF2 unwind info support" >&5
if eval "test \"`echo '$''{'libc_cv_gcc_dwarf2_unwind_info'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.c <<EOF
#line 3278 "configure"
#line 3272 "configure"
static char __EH_FRAME_BEGIN__;
_start ()
{
@ -3301,7 +3295,7 @@ __bzero () {}
EOF
if { ac_try='${CC-cc} $CFLAGS -DCHECK__register_frame_info
-nostdlib -nostartfiles
-o conftest conftest.c -lgcc >&5'; { (eval echo configure:3305: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
-o conftest conftest.c -lgcc >&5'; { (eval echo configure:3299: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_gcc_dwarf2_unwind_info=static
else
libc_cv_gcc_dwarf2_unwind_info=no
@ -3309,7 +3303,7 @@ fi
if test $libc_cv_gcc_dwarf2_unwind_info = no; then
if { ac_try='${CC-cc} $CFLAGS -DCHECK__register_frame
-nostdlib -nostartfiles
-o conftest conftest.c -lgcc >&5'; { (eval echo configure:3313: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
-o conftest conftest.c -lgcc >&5'; { (eval echo configure:3307: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_gcc_dwarf2_unwind_info=yes
else
libc_cv_gcc_dwarf2_unwind_info=no
@ -3339,12 +3333,12 @@ EOF
esac
echo $ac_n "checking for __builtin_expect""... $ac_c" 1>&6
echo "configure:3343: checking for __builtin_expect" >&5
echo "configure:3337: checking for __builtin_expect" >&5
if eval "test \"`echo '$''{'libc_cv_gcc_builtin_expect'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.c <<EOF
#line 3348 "configure"
#line 3342 "configure"
int foo (int a)
{
a = __builtin_expect (a, 10);
@ -3352,7 +3346,7 @@ int foo (int a)
}
EOF
if { ac_try='${CC-cc} $CFLAGS -nostdlib -nostartfiles
-o conftest conftest.c -lgcc >&5'; { (eval echo configure:3356: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
-o conftest conftest.c -lgcc >&5'; { (eval echo configure:3350: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_gcc_builtin_expect=yes
else
libc_cv_gcc_builtin_expect=no
@ -3369,12 +3363,12 @@ EOF
fi
echo $ac_n "checking for local label subtraction""... $ac_c" 1>&6
echo "configure:3373: checking for local label subtraction" >&5
echo "configure:3367: checking for local label subtraction" >&5
if eval "test \"`echo '$''{'libc_cv_gcc_subtract_local_labels'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.c <<EOF
#line 3378 "configure"
#line 3372 "configure"
int foo (int a)
{
static const int ar[] = { &&l1 - &&l1, &&l2 - &&l1 };
@ -3387,7 +3381,7 @@ int foo (int a)
}
EOF
if { ac_try='${CC-cc} $CFLAGS -nostdlib -nostartfiles
-o conftest conftest.c -lgcc >&5'; { (eval echo configure:3391: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
-o conftest conftest.c -lgcc >&5'; { (eval echo configure:3385: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_gcc_subtract_local_labels=yes
else
libc_cv_gcc_subtract_local_labels=no
@ -3404,7 +3398,7 @@ EOF
fi
echo $ac_n "checking for libgd""... $ac_c" 1>&6
echo "configure:3408: checking for libgd" >&5
echo "configure:3402: checking for libgd" >&5
if test "$with_gd" != "no"; then
old_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS $libgd_include"
@ -3413,14 +3407,14 @@ if test "$with_gd" != "no"; then
old_LIBS="$LIBS"
LIBS="$LIBS -lgd -lpng -lz -lm"
cat > conftest.$ac_ext <<EOF
#line 3417 "configure"
#line 3411 "configure"
#include "confdefs.h"
#include <gd.h>
int main() {
gdImagePng (0, 0)
; return 0; }
EOF
if { (eval echo configure:3424: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:3418: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
LIBGD=yes
else
@ -3440,7 +3434,7 @@ echo "$ac_t""$LIBGD" 1>&6
echo $ac_n "checking size of long double""... $ac_c" 1>&6
echo "configure:3444: checking size of long double" >&5
echo "configure:3438: checking size of long double" >&5
if eval "test \"`echo '$''{'ac_cv_sizeof_long_double'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -3448,7 +3442,7 @@ else
ac_cv_sizeof_long_double=0
else
cat > conftest.$ac_ext <<EOF
#line 3452 "configure"
#line 3446 "configure"
#include "confdefs.h"
#include <stdio.h>
int main()
@ -3459,7 +3453,7 @@ int main()
return(0);
}
EOF
if { (eval echo configure:3463: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
if { (eval echo configure:3457: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_sizeof_long_double=`cat conftestval`
else
@ -3492,6 +3486,7 @@ libc_link_sources=
use_ldconfig=no
ldd_rewrite_script=no
libc_cv_sysconfdir=$sysconfdir
libc_cv_gcc_unwind_find_fde=no
# Iterate over all the sysdep directories we will use, running their
# configure fragments, and looking for a uname implementation.
@ -3516,6 +3511,14 @@ for dir in $sysnames; do
fi
done
if test x$libc_cv_gcc_unwind_find_fde = xyes; then
cat >> confdefs.h <<\EOF
#define EXPORT_UNWIND_FIND_FDE 1
EOF
fi
# If we will use the generic uname implementation, we must figure out what
@ -3528,7 +3531,7 @@ if test "$uname" = "sysdeps/generic"; then
fi
echo $ac_n "checking OS release for uname""... $ac_c" 1>&6
echo "configure:3532: checking OS release for uname" >&5
echo "configure:3535: checking OS release for uname" >&5
if eval "test \"`echo '$''{'libc_cv_uname_release'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -3550,7 +3553,7 @@ echo "$ac_t""$libc_cv_uname_release" 1>&6
uname_release="$libc_cv_uname_release"
echo $ac_n "checking OS version for uname""... $ac_c" 1>&6
echo "configure:3554: checking OS version for uname" >&5
echo "configure:3557: checking OS version for uname" >&5
if eval "test \"`echo '$''{'libc_cv_uname_version'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -3572,7 +3575,7 @@ else
fi
echo $ac_n "checking stdio selection""... $ac_c" 1>&6
echo "configure:3576: checking stdio selection" >&5
echo "configure:3579: checking stdio selection" >&5
case $stdio in
libio) cat >> confdefs.h <<\EOF
@ -3586,7 +3589,7 @@ echo "$ac_t""$stdio" 1>&6
# Test for old glibc 2.0.x headers so that they can be removed properly
# Search only in includedir.
echo $ac_n "checking for old glibc 2.0.x headers""... $ac_c" 1>&6
echo "configure:3590: checking for old glibc 2.0.x headers" >&5
echo "configure:3593: checking for old glibc 2.0.x headers" >&5
if eval test -f "${includedir}/elfclass.h" -a -f "${includedir}/fcntlbits.h"
then
old_glibc_headers=yes
@ -3647,7 +3650,7 @@ if test $shared = default; then
fi
echo $ac_n "checking whether -fPIC is default""... $ac_c" 1>&6
echo "configure:3651: checking whether -fPIC is default" >&5
echo "configure:3654: checking whether -fPIC is default" >&5
if eval "test \"`echo '$''{'pic_default'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -3860,6 +3863,7 @@ s%@RANLIB@%$RANLIB%g
s%@MIG@%$MIG%g
s%@CCVERSION@%$CCVERSION%g
s%@SYSINCLUDES@%$SYSINCLUDES%g
s%@libc_cv_gcc_static_libgcc@%$libc_cv_gcc_static_libgcc%g
s%@BASH@%$BASH%g
s%@libc_cv_have_bash2@%$libc_cv_have_bash2%g
s%@KSH@%$KSH%g
@ -3881,6 +3885,7 @@ s%@no_whole_archive@%$no_whole_archive%g
s%@exceptions@%$exceptions%g
s%@LIBGD@%$LIBGD%g
s%@sizeof_long_double@%$sizeof_long_double%g
s%@libc_cv_gcc_unwind_find_fde@%$libc_cv_gcc_unwind_find_fde%g
s%@uname_sysname@%$uname_sysname%g
s%@uname_release@%$uname_release%g
s%@uname_version@%$uname_version%g

View File

@ -636,27 +636,6 @@ test -n "$aux_missing" && AC_MSG_WARN([
CCVERSION=`$CC -v 2>&1 | sed -n 's/gcc version //p'`
AC_SUBST(CCVERSION)
case $CCVERSION in
3.*) gcc3=yes;;
esac
if test x"$gcc3" = xyes; then
echo "\
*** This version of GNU libc cannot be compiled by GCC 3.x.
*** GCC 3.x will generate a library that is binary incompatible to
*** older and future releases of GNU libc.
*** You should compile this GNU libc release by an older GCC version
*** or wait for the next GNU libc release."
if test $enable_sanity = yes; then
echo "\
*** If you really mean to use GCC 3.x, run configure again
*** using the extra parameter \`--disable-sanity-checks'."
exit 1
else
echo "\
*** This configuration is not supported by the GNU libc developers."
fi
fi
# if using special system headers, find out the compiler's sekrit
# header directory and add that to the list. NOTE: Only does the right
# thing on a system that doesn't need fixincludes. (Not presently a problem.)
@ -713,6 +692,14 @@ AC_MSG_ERROR([
*** and run configure again.])
fi
AC_CACHE_CHECK(whether GCC supports -static-libgcc, libc_cv_gcc_static_libgcc, [dnl
if $CC -v -static-libgcc 2>&1 | grep -q 'unrecognized option.*static-libgcc'; then
libc_cv_gcc_static_libgcc=
else
libc_cv_gcc_static_libgcc=-static-libgcc
fi])
AC_SUBST(libc_cv_gcc_static_libgcc)
AC_PATH_PROG(BASH, bash, no)
if test "$BASH" != no &&
$BASH -c 'test "$BASH_VERSINFO" \
@ -1459,6 +1446,7 @@ libc_link_sources=
use_ldconfig=no
ldd_rewrite_script=no
libc_cv_sysconfdir=$sysconfdir
libc_cv_gcc_unwind_find_fde=no
# Iterate over all the sysdep directories we will use, running their
# configure fragments, and looking for a uname implementation.
@ -1484,6 +1472,11 @@ for dir in $sysnames; do
]dnl
done
if test x$libc_cv_gcc_unwind_find_fde = xyes; then
AC_DEFINE(EXPORT_UNWIND_FIND_FDE)
fi
AC_SUBST(libc_cv_gcc_unwind_find_fde)
AC_LINK_FILES(`echo $libc_link_sources`, `echo $libc_link_dests`)
# If we will use the generic uname implementation, we must figure out what

View File

@ -66,6 +66,11 @@ distribute := $(rtld-routines:=.c) dynamic-link.h do-rel.h dl-machine.h \
include ../Makeconfig
ifeq ($(unwind-find-fde),yes)
routines += unwind-dw2-fde
shared-only-routines = unwind-dw2-fde
endif
before-compile = $(objpfx)trusted-dirs.h
generated := trusted-dirs.h trusted-dirs.st for-renamed/renamed.so
generated-dirs := for-renamed

View File

@ -2,6 +2,9 @@ libc {
GLIBC_2.0 {
# functions used in other libraries
_dl_open; _dl_close; _dl_addr;
%ifdef EXPORT_UNWIND_FIND_FDE
__register_frame_info; __deregister_frame_info;
%endif
}
GLIBC_2.1 {
# functions used in other libraries
@ -17,6 +20,12 @@ libc {
GLIBC_2.2.4 {
dl_iterate_phdr;
}
%ifdef EXPORT_UNWIND_FIND_FDE
GLIBC_2.2.5 {
__register_frame_info_bases; __deregister_frame_info_bases;
__register_frame_info_table_bases; _Unwind_Find_FDE;
}
%endif
}
ld {

View File

@ -4,6 +4,7 @@
calling those lists of functions. */
#include <libc-internal.h>
#include <stdlib.h>
#ifdef HAVE_DWARF2_UNWIND_INFO_STATIC
# include <gccframe.h>
@ -29,7 +30,10 @@ static char __EH_FRAME_BEGIN__[]
= { };
# ifdef HAVE_DWARF2_UNWIND_INFO_STATIC
extern void __register_frame_info (const void *, struct object *);
extern void __register_frame_info_bases (const void *, struct object *,
void *, void *);
extern void __deregister_frame_info (const void *);
extern void __deregister_frame_info_bases (const void *);
# else
extern void __register_frame (const void *);
extern void __deregister_frame (const void *);
@ -47,7 +51,23 @@ __libc_global_ctors (void)
# ifdef HAVE_DWARF2_UNWIND_INFO_STATIC
{
static struct object ob;
# if defined CRT_GET_RFIB_TEXT || defined CRT_GET_RFIB_DATA
void *tbase, *dbase;
# ifdef CRT_GET_RFIB_TEXT
CRT_GET_RFIB_TEXT (tbase);
# else
tbase = NULL;
# endif
# ifdef CRT_GET_RFIB_DATA
CRT_GET_RFIB_DATA (dbase);
# else
dbase = NULL;
# endif
__register_frame_info_bases (__EH_FRAME_BEGIN__, &ob, tbase, dbase);
# else
__register_frame_info (__EH_FRAME_BEGIN__, &ob);
# endif
}
# else
__register_frame (__EH_FRAME_BEGIN__);
@ -66,7 +86,11 @@ _fini (void)
run_hooks (__DTOR_LIST__);
#ifdef HAVE_DWARF2_UNWIND_INFO
# ifdef HAVE_DWARF2_UNWIND_INFO_STATIC
# if defined CRT_GET_RFIB_TEXT || defined CRT_GET_RFIB_DATA
__deregister_frame_info_bases (__EH_FRAME_BEGIN__);
# else
__deregister_frame_info (__EH_FRAME_BEGIN__);
# endif
# else
__deregister_frame (__EH_FRAME_BEGIN__);
# endif

311
localedata/locales/se_NO Normal file
View File

@ -0,0 +1,311 @@
# $Id$
comment_char %
escape_char /
%
% Northern Saami Language Locale for Norway
% Source: http://www.hum.uit.no/a/trond/loc.html
% Contact: Børre Gaup
% Email: boerre.gaup@pc.nu
% Language: se
% Territory: NO
% Revision: 0.1
% Date: 2001-11-03
% Application: general
% Users: general
% Charset: UTF-8
% Distribution and use is free, also
% for commercial purposes.
LC_IDENTIFICATION
title "Northern Saami language locale for Norway"
source "http://www.hum.uit.no/a/trond/loc.html"
address ""
contact "Børre Gaup"
email "boerre.gaup@pc.nu"
tel ""
fax ""
language "Northern Saami"
territory "Norway"
revision "0.1"
date "2001-11-09"
category se_NO:2000;LC_IDENTIFICATION
category se_NO:2000;LC_CTYPE
category se_NO:2000;LC_COLLATE
category se_NO:2000;LC_TIME
category se_NO:2000;LC_NUMERIC
category se_NO:2000;LC_PAPER
category se_NO:2000;LC_TELEPHONE
category se_NO:2000;LC_MEASUREMENT
category se_NO:2000;LC_ADDRESS
category se_NO:2000;LC_MONETARY
category se_NO:2000;LC_MESSAGES
END LC_IDENTIFICATION
LC_COLLATE
copy "iso14651_t1"
collating-symbol <aring>
collating-symbol <atilde>
collating-symbol <acircumflex>
collating-symbol <agrave>
collating-symbol <aacute>
collating-symbol <noae>
collating-symbol <svae>
collating-symbol <ccedilla>
collating-symbol <ccaron>
collating-symbol <ezh>
collating-symbol <ezhcaron>
collating-symbol <dstroke>
collating-symbol <eth>
collating-symbol <fhook>
collating-symbol <gcaron>
collating-symbol <gstroke>
collating-symbol <kcaron>
collating-symbol <otilde>
collating-symbol <oe>
collating-symbol <ssharp>
collating-symbol <scaron>
collating-symbol <oumlaut>
collating-symbol <oslash>
%
reorder-after <CAP>
<MIN>
reorder-after <a>
<agrave>
<atilde>
<aacute>
<acircumflex>
reorder-after <c>
<ccaron>
<ccedilla>
<ezh>
<ezhcaron>
reorder-after <d>
<dstroke>
<eth>
reorder-after <f>
<fhook>
reorder-after <g>
<gcaron>
<gstroke>
reorder-after <k>
<kcaron>
reorder-after <s>
<ssharp>
<scaron>
reorder-after <th>
<noae>
<oslash>
<aring>
<svae>
<oumlaut>
reorder-after <U0061>
<U00E0> <agrave>;<GRA>;<MIN>;IGNORE % 201 à
<U00E1> <aacute>;<ACA>;<MIN>;IGNORE % 200 á
<U00E2> <acircumflex>;<CIR>;<MIN>;IGNORE % 202 â
<U00E3> <atilde>;<TIL>;<MIN>;IGNORE % 203 ã
reorder-after <U0041>
<U00C0> <agrave>;<GRA>;<CAP>;IGNORE % 321 À
<U00C1> <aacute>;<ACA>;<CAP>;IGNORE % 320 Á
<U00C2> <acircumflex>;<CIR>;<CAP>;IGNORE % 322 Â
<U00C3> <atilde>;<TIL>;<CAP>;IGNORE % 323 Ã
reorder-after <U0063>
<U00E7> <ccedilla>;<CDI>;<MIN>;IGNORE % 212 ç
<U010D> <ccaron>;<CAR>;<MIN>;IGNORE % 215 <c<>
reorder-after <U0043>
<U00C7> <ccedilla>;<CDI>;<CAP>;IGNORE % 332 Ç
<U010C> <ccaron>;<CAR>;<CAP>;IGNORE % 335 <C<>
reorder-after <U010B>
<U0292> <ezh>;<BAS>;<MIN>;IGNORE % ezh
<U01EF> <ezhcaron>;<CAR>;<MIN>;IGNORE % ezh caron
reorder-after <U010A>
<U01B7> <ezh>;<BAS>;<MIN>;IGNORE % EZH
<U01EE> <ezhcaron>;<CAR>;<CAP>;IGNORE % EZH caron
reorder-after <U0064>
<U00F0> <eth>;<PCL>;<MIN>;IGNORE % 218 ð
<U0111> <dstroke>;<OBL>;<MIN>;IGNORE % 220 <d//>
reorder-after <U0044>
<U00D0> <eth>;<PCL>;<CAP>;IGNORE % 338 Ð
<U0110> <dstroke>;<OBL>;<CAP>;IGNORE % 340 <D//>
reorder-after <U0066>
<U0192> <fhook>;<BAS>;<MIN>;IGNORE % f WITH HOOK
reorder-after <U0123>
<U01E7> <gcaron>;<CAR>;<MIN>;IGNORE % gcaron
<U01E5> <gstroke>;<OBL>;<MIN>;IGNORE % gstroke
reorder-after <U0122>
<U01E6> <gcaron>;<CAR>;<MIN>;IGNORE % Gcaron
<U01E4> <gstroke>;<OBL>;<MIN>;IGNORE % Gstroke
reorder-after <U0137>
<U01E9> <kcaron>;<CAR>;<MIN>;IGNORE % kcaron
reorder-after <U0136>
<U01E8> <kcaron>;<CAR>;<CAP>;IGNORE % Kcaron
reorder-after <U0053>
<U00DF> <ssharp>;"<LIG><LIG>";"<MIN><MIN>";IGNORE % ß
<U0161> <scaron>;<CAR>;<MIN>;IGNORE % 288 <s<>
<U0160> <scaron>;<CAR>;<CAP>;IGNORE % 405 <S<>
reorder-after <U00E3>
<U00E4> <svae>;<REU>;<MIN>;IGNORE % ä
<U00E5> <aring>;<RNE>;<MIN>;IGNORE % å
<U00E6> <noae>;<LIG>;<MIN>;IGNORE % æ
reorder-after <U00F5>
<U00F6> <oumlaut>;<REU>;<MIN>;IGNORE % ö
<U00F8> <oslash>;<OBL>;<MIN>;IGNORE % ø
reorder-after <U00C3>
<U00C4> <svae>;<REU>;<CAP>;IGNORE % Ä
<U00C5> <aring>;<RNE>;<CAP>;IGNORE % Å
<U00C6> <noae>;<LIG>;<CAP>;IGNORE % Æ
reorder-after <U00D5>
<U00D6> <oumlaut>;<REU>;<CAP>;IGNORE % Ö
<U00D8> <oslash>;<OBL>;<CAP>;IGNORE % Ø
% ü/Ü is treated like y/Y but is sorted after the latter
reorder-after <U00FB>
<U00FC> <y>;<REU>;<MIN>;IGNORE % ü
reorder-after <U00DB>
<U00DC> <y>;<REU>;<CAP>;IGNORE % Ü
reorder-end
END LC_COLLATE
LC_CTYPE
copy "i18n"
END LC_CTYPE
LC_MONETARY
int_curr_symbol "<U004E><U004F><U004B><U0020>"
currency_symbol "<U0020><U0072><U0075>"
mon_decimal_point "<U002C>"
mon_thousands_sep "<U002E>"
mon_grouping 3;3
positive_sign ""
negative_sign "<U002D>"
int_frac_digits 2
frac_digits 2
p_cs_precedes 1
p_sep_by_space 0
n_cs_precedes 1
n_sep_by_space 0
p_sign_posn 4
n_sign_posn 4
END LC_MONETARY
LC_NUMERIC
decimal_point "<U002C>"
thousands_sep "<U002E>"
grouping 3;3
END LC_NUMERIC
LC_TIME
abday "<U0073><U006F><U0074><U006E>";"<U0076><U0075><U006F><U0073>";/
"<U006D><U0061><U014B>";"<U0067><U0061><U0073><U006B>";/
"<U0064><U0075><U006F><U0072>";"<U0062><U0065><U0061><U0072>";/
"<U006C><U00E1><U0076>"
day "<U0073><U006F><U0074><U006E><U0061><U0062><U0065><U0061><U0069><U0076><U0069>";/
"<U0076><U0075><U006F><U0073><U0073><U00E1><U0072><U0067><U0061>";/
"<U006D><U0061><U014B><U014B><U0065><U0062><U0061><U0072><U0067><U0061>";/
"<U0067><U0061><U0073><U006B><U0061><U0076><U0061><U0068><U006B><U006B><U0075>";/
"<U0064><U0075><U006F><U0072><U0061><U0073><U0064><U0061><U0074>";/
"<U0062><U0065><U0061><U0072><U006A><U0061><U0064><U0061><U0074>";/
"<U006C><U00E1><U0076><U0076><U0061><U0072><U0064><U0061><U0074>"
abmon "<U006F><U0111><U0111><U006A>";"<U0067><U0075><U006F><U0076>";/
"<U006E><U006A><U0075><U006B>";"<U0063><U0075><U006F><U014B>";/
"<U006D><U0069><U0065><U0073>";"<U0067><U0065><U0061><U0073>";/
"<U0073><U0075><U006F><U0069>";"<U0062><U006F><U0072><U0067>";/
"<U010D><U0061><U006B><U010D>";"<U0067><U006F><U006C><U0067>";/
"<U0073><U006B><U00E1><U0062>";"<U006A><U0075><U006F><U0076>"
mon "<U006F><U0111><U0111><U0061><U006A><U0061><U0067><U0065><U006D><U00E1><U006E><U0075>";/
"<U0067><U0075><U006F><U0076><U0076><U0061><U006D><U00E1><U006E><U0075>";/
"<U006E><U006A><U0075><U006B><U010D><U0061><U006D><U00E1><U006E><U0075>";/
"<U0063><U0075><U006F><U014B><U006F><U006D><U00E1><U006E><U0075>";/
"<U006D><U0069><U0065><U0073><U0073><U0065><U006D><U00E1><U006E><U0075>";/
"<U0067><U0065><U0061><U0073><U0073><U0065><U006D><U00E1><U006E><U0075>";/
"<U0073><U0075><U006F><U0069><U0064><U006E><U0065><U006D><U00E1><U006E><U0075>";/
"<U0062><U006F><U0072><U0067><U0065><U006D><U00E1><U006E><U0075>";/
"<U010D><U0061><U006B><U010D><U0061><U006D><U00E1><U006E><U0075>";/
"<U0067><U006F><U006C><U0067><U0067><U006F><U0074><U006D><U00E1><U006E><U0075>";/
"<U0073><U006B><U00E1><U0062><U006D><U0061><U006D><U00E1><U006E><U0075>";/
"<U006A><U0075><U006F><U0076><U006C><U0061><U006D><U00E1><U006E><U0075>"
% usual date representation
% Linjen nedenfor er: %a, %b %e b. %Y %T %Z
% f.eks. bear, geas 14. b. 2001 21:15:11 CEST
d_t_fmt "<U0025><U0061><U002C><U0020><U0025><U0062><U0020><U0025><U0065><U002E><U0020><U0062><U002E><U0020><U0025><U0059><U0020><U0025><U0054><U0020><U0025><U005A>"
%Linjen nedenfor er: %Y-%m-%d
%f.eks 2001-04-26
d_fmt "<U0025><U0059><U002D><U0025><U006D><U002D><U0025><U0064>"
t_fmt "<U0025><U0054>"
am_pm "";""
t_fmt_ampm ""
% Denne linjen vil gi f.eks.:
% duorasdat, borgem<U00E1>nu 23. b. 2001 00:47:57 CEST
date_fmt "<U0025><U0041><U002C><U0020><U0025><U0042><U0020><U0025><U0064><U002E>/
<U0020><U0062><U002E><U0020><U0025><U0059><U0020><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053>/
<U0020><U0025><U005A>"
% %a %b-%e %H:%M:%S %Z %Y søn jan-31 21:15:11 CET 2001
END LC_TIME
LC_MESSAGES
yesexpr "<U005E><U005B><U004A><U006A><U0059><U0079><U005D><U002E><U002A>"
noexpr "<U005E><U005B><U0049><U0069><U005D><U002E><U002A>"
END LC_MESSAGES
LC_PAPER
height 297
width 210
END LC_PAPER
LC_TELEPHONE
tel_int_fmt "<U002B><U0025><U0063><U0020><U0025><U006C>"
tel_dom_fmt "<U0025><U006C>"
int_select "<U0030><U0030>"
int_prefix "<U0034><U0037>"
END LC_TELEPHONE
LC_MEASUREMENT
measurement 1
END LC_MEASUREMENT
LC_NAME
name_fmt "<U0025><U0064><U0025><U0074><U0025><U0067><U0025><U0074>/
<U0025><U006D><U0025><U0074><U0025><U0066>"
END LC_NAME
LC_ADDRESS
postal_fmt "<U0025><U0066><U0025><U004E><U0025><U0061><U0025><U004E>/
<U0025><U0064><U0025><U004E><U0025><U0062><U0025><U004E><U0025><U0073>/
<U0020><U0025><U0068><U0020><U0025><U0065><U0020><U0025><U0072><U0025>/
<U004E><U0025><U0025><U007A><U0020><U0025><U0054><U0025>/
<U004E><U0025><U0063><U0025><U004E>"
END LC_ADDRESS

22
sysdeps/alpha/gccframe.h Normal file
View File

@ -0,0 +1,22 @@
/* Definition of object in frame unwind info. alpha version.
Copyright (C) 2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
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. */
#define FIRST_PSEUDO_REGISTER 64
#include <sysdeps/generic/gccframe.h>

22
sysdeps/arm/gccframe.h Normal file
View File

@ -0,0 +1,22 @@
/* Definition of object in frame unwind info. arm version.
Copyright (C) 2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
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. */
#define FIRST_PSEUDO_REGISTER 27
#include <sysdeps/generic/gccframe.h>

585
sysdeps/generic/dwarf2.h Normal file
View File

@ -0,0 +1,585 @@
/* Declarations and definitions of codes relating to the DWARF2 symbolic
debugging information format.
Copyright (C) 1992, 1993, 1995, 1996, 1997, 2000
Free Software Foundation, Inc.
Contributed by Gary Funck (gary@intrepid.com). Derived from the
DWARF 1 implementation written by Ron Guilmette (rfg@monkeys.com).
This file is part of GNU CC.
GNU CC is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU CC 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU CC; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* This file is derived from the DWARF specification (a public document)
Revision 2.0.0 (July 27, 1993) developed by the UNIX International
Programming Languages Special Interest Group (UI/PLSIG) and distributed
by UNIX International. Copies of this specification are available from
UNIX International, 20 Waterview Boulevard, Parsippany, NJ, 07054. */
/* This file is shared between GCC and GDB, and should not contain
prototypes. */
/* Tag names and codes. */
enum dwarf_tag
{
DW_TAG_padding = 0x00,
DW_TAG_array_type = 0x01,
DW_TAG_class_type = 0x02,
DW_TAG_entry_point = 0x03,
DW_TAG_enumeration_type = 0x04,
DW_TAG_formal_parameter = 0x05,
DW_TAG_imported_declaration = 0x08,
DW_TAG_label = 0x0a,
DW_TAG_lexical_block = 0x0b,
DW_TAG_member = 0x0d,
DW_TAG_pointer_type = 0x0f,
DW_TAG_reference_type = 0x10,
DW_TAG_compile_unit = 0x11,
DW_TAG_string_type = 0x12,
DW_TAG_structure_type = 0x13,
DW_TAG_subroutine_type = 0x15,
DW_TAG_typedef = 0x16,
DW_TAG_union_type = 0x17,
DW_TAG_unspecified_parameters = 0x18,
DW_TAG_variant = 0x19,
DW_TAG_common_block = 0x1a,
DW_TAG_common_inclusion = 0x1b,
DW_TAG_inheritance = 0x1c,
DW_TAG_inlined_subroutine = 0x1d,
DW_TAG_module = 0x1e,
DW_TAG_ptr_to_member_type = 0x1f,
DW_TAG_set_type = 0x20,
DW_TAG_subrange_type = 0x21,
DW_TAG_with_stmt = 0x22,
DW_TAG_access_declaration = 0x23,
DW_TAG_base_type = 0x24,
DW_TAG_catch_block = 0x25,
DW_TAG_const_type = 0x26,
DW_TAG_constant = 0x27,
DW_TAG_enumerator = 0x28,
DW_TAG_file_type = 0x29,
DW_TAG_friend = 0x2a,
DW_TAG_namelist = 0x2b,
DW_TAG_namelist_item = 0x2c,
DW_TAG_packed_type = 0x2d,
DW_TAG_subprogram = 0x2e,
DW_TAG_template_type_param = 0x2f,
DW_TAG_template_value_param = 0x30,
DW_TAG_thrown_type = 0x31,
DW_TAG_try_block = 0x32,
DW_TAG_variant_part = 0x33,
DW_TAG_variable = 0x34,
DW_TAG_volatile_type = 0x35,
/* SGI/MIPS Extensions */
DW_TAG_MIPS_loop = 0x4081,
/* GNU extensions */
DW_TAG_format_label = 0x4101, /* for FORTRAN 77 and Fortran 90 */
DW_TAG_function_template = 0x4102, /* for C++ */
DW_TAG_class_template = 0x4103, /* for C++ */
DW_TAG_GNU_BINCL = 0x4104,
DW_TAG_GNU_EINCL = 0x4105
};
#define DW_TAG_lo_user 0x4080
#define DW_TAG_hi_user 0xffff
/* flag that tells whether entry has a child or not */
#define DW_children_no 0
#define DW_children_yes 1
/* Form names and codes. */
enum dwarf_form
{
DW_FORM_addr = 0x01,
DW_FORM_block2 = 0x03,
DW_FORM_block4 = 0x04,
DW_FORM_data2 = 0x05,
DW_FORM_data4 = 0x06,
DW_FORM_data8 = 0x07,
DW_FORM_string = 0x08,
DW_FORM_block = 0x09,
DW_FORM_block1 = 0x0a,
DW_FORM_data1 = 0x0b,
DW_FORM_flag = 0x0c,
DW_FORM_sdata = 0x0d,
DW_FORM_strp = 0x0e,
DW_FORM_udata = 0x0f,
DW_FORM_ref_addr = 0x10,
DW_FORM_ref1 = 0x11,
DW_FORM_ref2 = 0x12,
DW_FORM_ref4 = 0x13,
DW_FORM_ref8 = 0x14,
DW_FORM_ref_udata = 0x15,
DW_FORM_indirect = 0x16
};
/* Attribute names and codes. */
enum dwarf_attribute
{
DW_AT_sibling = 0x01,
DW_AT_location = 0x02,
DW_AT_name = 0x03,
DW_AT_ordering = 0x09,
DW_AT_subscr_data = 0x0a,
DW_AT_byte_size = 0x0b,
DW_AT_bit_offset = 0x0c,
DW_AT_bit_size = 0x0d,
DW_AT_element_list = 0x0f,
DW_AT_stmt_list = 0x10,
DW_AT_low_pc = 0x11,
DW_AT_high_pc = 0x12,
DW_AT_language = 0x13,
DW_AT_member = 0x14,
DW_AT_discr = 0x15,
DW_AT_discr_value = 0x16,
DW_AT_visibility = 0x17,
DW_AT_import = 0x18,
DW_AT_string_length = 0x19,
DW_AT_common_reference = 0x1a,
DW_AT_comp_dir = 0x1b,
DW_AT_const_value = 0x1c,
DW_AT_containing_type = 0x1d,
DW_AT_default_value = 0x1e,
DW_AT_inline = 0x20,
DW_AT_is_optional = 0x21,
DW_AT_lower_bound = 0x22,
DW_AT_producer = 0x25,
DW_AT_prototyped = 0x27,
DW_AT_return_addr = 0x2a,
DW_AT_start_scope = 0x2c,
DW_AT_stride_size = 0x2e,
DW_AT_upper_bound = 0x2f,
DW_AT_abstract_origin = 0x31,
DW_AT_accessibility = 0x32,
DW_AT_address_class = 0x33,
DW_AT_artificial = 0x34,
DW_AT_base_types = 0x35,
DW_AT_calling_convention = 0x36,
DW_AT_count = 0x37,
DW_AT_data_member_location = 0x38,
DW_AT_decl_column = 0x39,
DW_AT_decl_file = 0x3a,
DW_AT_decl_line = 0x3b,
DW_AT_declaration = 0x3c,
DW_AT_discr_list = 0x3d,
DW_AT_encoding = 0x3e,
DW_AT_external = 0x3f,
DW_AT_frame_base = 0x40,
DW_AT_friend = 0x41,
DW_AT_identifier_case = 0x42,
DW_AT_macro_info = 0x43,
DW_AT_namelist_items = 0x44,
DW_AT_priority = 0x45,
DW_AT_segment = 0x46,
DW_AT_specification = 0x47,
DW_AT_static_link = 0x48,
DW_AT_type = 0x49,
DW_AT_use_location = 0x4a,
DW_AT_variable_parameter = 0x4b,
DW_AT_virtuality = 0x4c,
DW_AT_vtable_elem_location = 0x4d,
/* SGI/MIPS Extensions */
DW_AT_MIPS_fde = 0x2001,
DW_AT_MIPS_loop_begin = 0x2002,
DW_AT_MIPS_tail_loop_begin = 0x2003,
DW_AT_MIPS_epilog_begin = 0x2004,
DW_AT_MIPS_loop_unroll_factor = 0x2005,
DW_AT_MIPS_software_pipeline_depth = 0x2006,
DW_AT_MIPS_linkage_name = 0x2007,
DW_AT_MIPS_stride = 0x2008,
DW_AT_MIPS_abstract_name = 0x2009,
DW_AT_MIPS_clone_origin = 0x200a,
DW_AT_MIPS_has_inlines = 0x200b,
/* GNU extensions. */
DW_AT_sf_names = 0x2101,
DW_AT_src_info = 0x2102,
DW_AT_mac_info = 0x2103,
DW_AT_src_coords = 0x2104,
DW_AT_body_begin = 0x2105,
DW_AT_body_end = 0x2106
};
#define DW_AT_lo_user 0x2000 /* implementation-defined range start */
#define DW_AT_hi_user 0x3ff0 /* implementation-defined range end */
/* Location atom names and codes. */
enum dwarf_location_atom
{
DW_OP_addr = 0x03,
DW_OP_deref = 0x06,
DW_OP_const1u = 0x08,
DW_OP_const1s = 0x09,
DW_OP_const2u = 0x0a,
DW_OP_const2s = 0x0b,
DW_OP_const4u = 0x0c,
DW_OP_const4s = 0x0d,
DW_OP_const8u = 0x0e,
DW_OP_const8s = 0x0f,
DW_OP_constu = 0x10,
DW_OP_consts = 0x11,
DW_OP_dup = 0x12,
DW_OP_drop = 0x13,
DW_OP_over = 0x14,
DW_OP_pick = 0x15,
DW_OP_swap = 0x16,
DW_OP_rot = 0x17,
DW_OP_xderef = 0x18,
DW_OP_abs = 0x19,
DW_OP_and = 0x1a,
DW_OP_div = 0x1b,
DW_OP_minus = 0x1c,
DW_OP_mod = 0x1d,
DW_OP_mul = 0x1e,
DW_OP_neg = 0x1f,
DW_OP_not = 0x20,
DW_OP_or = 0x21,
DW_OP_plus = 0x22,
DW_OP_plus_uconst = 0x23,
DW_OP_shl = 0x24,
DW_OP_shr = 0x25,
DW_OP_shra = 0x26,
DW_OP_xor = 0x27,
DW_OP_bra = 0x28,
DW_OP_eq = 0x29,
DW_OP_ge = 0x2a,
DW_OP_gt = 0x2b,
DW_OP_le = 0x2c,
DW_OP_lt = 0x2d,
DW_OP_ne = 0x2e,
DW_OP_skip = 0x2f,
DW_OP_lit0 = 0x30,
DW_OP_lit1 = 0x31,
DW_OP_lit2 = 0x32,
DW_OP_lit3 = 0x33,
DW_OP_lit4 = 0x34,
DW_OP_lit5 = 0x35,
DW_OP_lit6 = 0x36,
DW_OP_lit7 = 0x37,
DW_OP_lit8 = 0x38,
DW_OP_lit9 = 0x39,
DW_OP_lit10 = 0x3a,
DW_OP_lit11 = 0x3b,
DW_OP_lit12 = 0x3c,
DW_OP_lit13 = 0x3d,
DW_OP_lit14 = 0x3e,
DW_OP_lit15 = 0x3f,
DW_OP_lit16 = 0x40,
DW_OP_lit17 = 0x41,
DW_OP_lit18 = 0x42,
DW_OP_lit19 = 0x43,
DW_OP_lit20 = 0x44,
DW_OP_lit21 = 0x45,
DW_OP_lit22 = 0x46,
DW_OP_lit23 = 0x47,
DW_OP_lit24 = 0x48,
DW_OP_lit25 = 0x49,
DW_OP_lit26 = 0x4a,
DW_OP_lit27 = 0x4b,
DW_OP_lit28 = 0x4c,
DW_OP_lit29 = 0x4d,
DW_OP_lit30 = 0x4e,
DW_OP_lit31 = 0x4f,
DW_OP_reg0 = 0x50,
DW_OP_reg1 = 0x51,
DW_OP_reg2 = 0x52,
DW_OP_reg3 = 0x53,
DW_OP_reg4 = 0x54,
DW_OP_reg5 = 0x55,
DW_OP_reg6 = 0x56,
DW_OP_reg7 = 0x57,
DW_OP_reg8 = 0x58,
DW_OP_reg9 = 0x59,
DW_OP_reg10 = 0x5a,
DW_OP_reg11 = 0x5b,
DW_OP_reg12 = 0x5c,
DW_OP_reg13 = 0x5d,
DW_OP_reg14 = 0x5e,
DW_OP_reg15 = 0x5f,
DW_OP_reg16 = 0x60,
DW_OP_reg17 = 0x61,
DW_OP_reg18 = 0x62,
DW_OP_reg19 = 0x63,
DW_OP_reg20 = 0x64,
DW_OP_reg21 = 0x65,
DW_OP_reg22 = 0x66,
DW_OP_reg23 = 0x67,
DW_OP_reg24 = 0x68,
DW_OP_reg25 = 0x69,
DW_OP_reg26 = 0x6a,
DW_OP_reg27 = 0x6b,
DW_OP_reg28 = 0x6c,
DW_OP_reg29 = 0x6d,
DW_OP_reg30 = 0x6e,
DW_OP_reg31 = 0x6f,
DW_OP_breg0 = 0x70,
DW_OP_breg1 = 0x71,
DW_OP_breg2 = 0x72,
DW_OP_breg3 = 0x73,
DW_OP_breg4 = 0x74,
DW_OP_breg5 = 0x75,
DW_OP_breg6 = 0x76,
DW_OP_breg7 = 0x77,
DW_OP_breg8 = 0x78,
DW_OP_breg9 = 0x79,
DW_OP_breg10 = 0x7a,
DW_OP_breg11 = 0x7b,
DW_OP_breg12 = 0x7c,
DW_OP_breg13 = 0x7d,
DW_OP_breg14 = 0x7e,
DW_OP_breg15 = 0x7f,
DW_OP_breg16 = 0x80,
DW_OP_breg17 = 0x81,
DW_OP_breg18 = 0x82,
DW_OP_breg19 = 0x83,
DW_OP_breg20 = 0x84,
DW_OP_breg21 = 0x85,
DW_OP_breg22 = 0x86,
DW_OP_breg23 = 0x87,
DW_OP_breg24 = 0x88,
DW_OP_breg25 = 0x89,
DW_OP_breg26 = 0x8a,
DW_OP_breg27 = 0x8b,
DW_OP_breg28 = 0x8c,
DW_OP_breg29 = 0x8d,
DW_OP_breg30 = 0x8e,
DW_OP_breg31 = 0x8f,
DW_OP_regx = 0x90,
DW_OP_fbreg = 0x91,
DW_OP_bregx = 0x92,
DW_OP_piece = 0x93,
DW_OP_deref_size = 0x94,
DW_OP_xderef_size = 0x95,
DW_OP_nop = 0x96
};
#define DW_OP_lo_user 0x80 /* implementation-defined range start */
#define DW_OP_hi_user 0xff /* implementation-defined range end */
/* Type encodings. */
enum dwarf_type
{
DW_ATE_void = 0x0,
DW_ATE_address = 0x1,
DW_ATE_boolean = 0x2,
DW_ATE_complex_float = 0x3,
DW_ATE_float = 0x4,
DW_ATE_signed = 0x5,
DW_ATE_signed_char = 0x6,
DW_ATE_unsigned = 0x7,
DW_ATE_unsigned_char = 0x8
};
#define DW_ATE_lo_user 0x80
#define DW_ATE_hi_user 0xff
/* Array ordering names and codes. */
enum dwarf_array_dim_ordering
{
DW_ORD_row_major = 0,
DW_ORD_col_major = 1
};
/* access attribute */
enum dwarf_access_attribute
{
DW_ACCESS_public = 1,
DW_ACCESS_protected = 2,
DW_ACCESS_private = 3
};
/* visibility */
enum dwarf_visibility_attribute
{
DW_VIS_local = 1,
DW_VIS_exported = 2,
DW_VIS_qualified = 3
};
/* virtuality */
enum dwarf_virtuality_attribute
{
DW_VIRTUALITY_none = 0,
DW_VIRTUALITY_virtual = 1,
DW_VIRTUALITY_pure_virtual = 2
};
/* case sensitivity */
enum dwarf_id_case
{
DW_ID_case_sensitive = 0,
DW_ID_up_case = 1,
DW_ID_down_case = 2,
DW_ID_case_insensitive = 3
};
/* calling convention */
enum dwarf_calling_convention
{
DW_CC_normal = 0x1,
DW_CC_program = 0x2,
DW_CC_nocall = 0x3
};
#define DW_CC_lo_user 0x40
#define DW_CC_hi_user 0xff
/* inline attribute */
enum dwarf_inline_attribute
{
DW_INL_not_inlined = 0,
DW_INL_inlined = 1,
DW_INL_declared_not_inlined = 2,
DW_INL_declared_inlined = 3
};
/* discriminant lists */
enum dwarf_discrim_list
{
DW_DSC_label = 0,
DW_DSC_range = 1
};
/* line number opcodes */
enum dwarf_line_number_ops
{
DW_LNS_extended_op = 0,
DW_LNS_copy = 1,
DW_LNS_advance_pc = 2,
DW_LNS_advance_line = 3,
DW_LNS_set_file = 4,
DW_LNS_set_column = 5,
DW_LNS_negate_stmt = 6,
DW_LNS_set_basic_block = 7,
DW_LNS_const_add_pc = 8,
DW_LNS_fixed_advance_pc = 9
};
/* line number extended opcodes */
enum dwarf_line_number_x_ops
{
DW_LNE_end_sequence = 1,
DW_LNE_set_address = 2,
DW_LNE_define_file = 3
};
/* call frame information */
enum dwarf_call_frame_info
{
DW_CFA_advance_loc = 0x40,
DW_CFA_offset = 0x80,
DW_CFA_restore = 0xc0,
DW_CFA_nop = 0x00,
DW_CFA_set_loc = 0x01,
DW_CFA_advance_loc1 = 0x02,
DW_CFA_advance_loc2 = 0x03,
DW_CFA_advance_loc4 = 0x04,
DW_CFA_offset_extended = 0x05,
DW_CFA_restore_extended = 0x06,
DW_CFA_undefined = 0x07,
DW_CFA_same_value = 0x08,
DW_CFA_register = 0x09,
DW_CFA_remember_state = 0x0a,
DW_CFA_restore_state = 0x0b,
DW_CFA_def_cfa = 0x0c,
DW_CFA_def_cfa_register = 0x0d,
DW_CFA_def_cfa_offset = 0x0e,
DW_CFA_def_cfa_expression = 0x0f,
DW_CFA_expression = 0x10,
/* Dwarf 2.1 */
DW_CFA_offset_extended_sf = 0x11,
DW_CFA_def_cfa_sf = 0x12,
DW_CFA_def_cfa_offset_sf = 0x13,
/* SGI/MIPS specific */
DW_CFA_MIPS_advance_loc8 = 0x1d,
/* GNU extensions */
DW_CFA_GNU_window_save = 0x2d,
DW_CFA_GNU_args_size = 0x2e,
DW_CFA_GNU_negative_offset_extended = 0x2f
};
#define DW_CIE_ID 0xffffffff
#define DW_CIE_VERSION 1
#define DW_CFA_extended 0
#define DW_CFA_low_user 0x1c
#define DW_CFA_high_user 0x3f
#define DW_CHILDREN_no 0x00
#define DW_CHILDREN_yes 0x01
#define DW_ADDR_none 0
/* Source language names and codes. */
enum dwarf_source_language
{
DW_LANG_C89 = 0x0001,
DW_LANG_C = 0x0002,
DW_LANG_Ada83 = 0x0003,
DW_LANG_C_plus_plus = 0x0004,
DW_LANG_Cobol74 = 0x0005,
DW_LANG_Cobol85 = 0x0006,
DW_LANG_Fortran77 = 0x0007,
DW_LANG_Fortran90 = 0x0008,
DW_LANG_Pascal83 = 0x0009,
DW_LANG_Modula2 = 0x000a,
DW_LANG_Java = 0x000b,
DW_LANG_Mips_Assembler = 0x8001
};
#define DW_LANG_lo_user 0x8000 /* implementation-defined range start */
#define DW_LANG_hi_user 0xffff /* implementation-defined range start */
/* Names and codes for macro information. */
enum dwarf_macinfo_record_type
{
DW_MACINFO_define = 1,
DW_MACINFO_undef = 2,
DW_MACINFO_start_file = 3,
DW_MACINFO_end_file = 4,
DW_MACINFO_vendor_ext = 255
};
/* @@@ For use with GNU frame unwind information. */
#define DW_EH_PE_absptr 0x00
#define DW_EH_PE_omit 0xff
#define DW_EH_PE_uleb128 0x01
#define DW_EH_PE_udata2 0x02
#define DW_EH_PE_udata4 0x03
#define DW_EH_PE_udata8 0x04
#define DW_EH_PE_sleb128 0x09
#define DW_EH_PE_sdata2 0x0A
#define DW_EH_PE_sdata4 0x0B
#define DW_EH_PE_sdata8 0x0C
#define DW_EH_PE_signed 0x08
#define DW_EH_PE_pcrel 0x10
#define DW_EH_PE_textrel 0x20
#define DW_EH_PE_datarel 0x30
#define DW_EH_PE_funcrel 0x40
#define DW_EH_PE_aligned 0x50
#define DW_EH_PE_indirect 0x80

View File

@ -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);
}

View File

@ -1,5 +1,5 @@
/* Definition of object in frame unwind info. Generic version.
Copyright (C) 2000 Free Software Foundation, Inc.
Copyright (C) 2000, 2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@ -17,14 +17,34 @@
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
/* This must match what's in frame.h in gcc. */
#include <sys/types.h>
struct dwarf_fde;
struct fde_vector;
struct object
{
void *pc_begin;
void *pc_end;
void *fde_begin;
void *fde_array;
__SIZE_TYPE__ count;
void *tbase;
void *dbase;
union {
struct dwarf_fde *single;
struct dwarf_fde **array;
struct fde_vector *sort;
} u;
union {
struct {
unsigned long sorted : 1;
unsigned long from_array : 1;
unsigned long mixed_encoding : 1;
unsigned long encoding : 8;
/* ??? Wish there was an easy way to detect a 64-bit host here;
we've got 32 bits left to play with... */
unsigned long count : 21;
} b;
size_t i;
} s;
struct object *next;
};

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,165 @@
/* Subroutines needed for unwinding stack frames for exception handling. */
/* Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
Contributed by Jason Merrill <jason@cygnus.com>.
This file is part of GNU CC.
GNU CC is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
In addition to the permissions in the GNU General Public License, the
Free Software Foundation gives you unlimited permission to link the
compiled version of this file into combinations with other programs,
and to distribute those combinations without any restriction coming
from the use of this file. (The General Public License restrictions
do apply in other respects; for example, they cover modification of
the file, and distribution when not linked into a combine
executable.)
GNU CC 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU CC; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
struct fde_vector
{
void *orig_data;
size_t count;
struct dwarf_fde *array __flexarr;
};
#ifdef _LIBC
#include <gccframe.h>
#else
struct object
{
void *pc_begin;
void *tbase;
void *dbase;
union {
struct dwarf_fde *single;
struct dwarf_fde **array;
struct fde_vector *sort;
} u;
union {
struct {
unsigned long sorted : 1;
unsigned long from_array : 1;
unsigned long mixed_encoding : 1;
unsigned long encoding : 8;
/* ??? Wish there was an easy way to detect a 64-bit host here;
we've got 32 bits left to play with... */
unsigned long count : 21;
} b;
size_t i;
} s;
struct object *next;
};
#endif
/* This is the original definition of struct object. While the struct
itself was opaque to users, they did know how large it was, and
allocate one statically in crtbegin for each DSO. Keep this around
so that we're aware of the static size limitations for the new struct. */
struct old_object
{
void *pc_begin;
void *pc_end;
struct dwarf_fde *fde_begin;
struct dwarf_fde **fde_array;
size_t count;
struct old_object *next;
};
struct dwarf_eh_bases
{
void *tbase;
void *dbase;
void *func;
};
extern void __register_frame_info_bases (void *, struct object *,
void *, void *);
extern void __register_frame_info (void *, struct object *);
extern void __register_frame (void *);
extern void __register_frame_info_table_bases (void *, struct object *,
void *, void *);
extern void __register_frame_info_table (void *, struct object *);
extern void __register_frame_table (void *);
extern void *__deregister_frame_info (void *);
extern void *__deregister_frame_info_bases (void *);
extern void __deregister_frame (void *);
typedef int sword __attribute__ ((mode (SI)));
typedef unsigned int uword __attribute__ ((mode (SI)));
typedef unsigned int uaddr __attribute__ ((mode (pointer)));
typedef int saddr __attribute__ ((mode (pointer)));
typedef unsigned char ubyte;
/* Terminology:
CIE - Common Information Element
FDE - Frame Descriptor Element
There is one per function, and it describes where the function code
is located, and what the register lifetimes and stack layout are
within the function.
The data structures are defined in the DWARF specfication, although
not in a very readable way (see LITERATURE).
Every time an exception is thrown, the code needs to locate the FDE
for the current function, and starts to look for exception regions
from that FDE. This works in a two-level search:
a) in a linear search, find the shared image (i.e. DLL) containing
the PC
b) using the FDE table for that shared object, locate the FDE using
binary search (which requires the sorting). */
/* The first few fields of a CIE. The CIE_id field is 0 for a CIE,
to distinguish it from a valid FDE. FDEs are aligned to an addressing
unit boundary, but the fields within are unaligned. */
struct dwarf_cie
{
uword length;
sword CIE_id;
ubyte version;
unsigned char augmentation __flexarr;
} __attribute__ ((packed, aligned (__alignof__ (void *))));
/* The first few fields of an FDE. */
struct dwarf_fde
{
uword length;
sword CIE_delta;
unsigned char pc_begin __flexarr;
} __attribute__ ((packed, aligned (__alignof__ (void *))));
typedef struct dwarf_fde fde;
/* Locate the CIE for a given FDE. */
static inline struct dwarf_cie *
get_cie (struct dwarf_fde *f)
{
return (void *)&f->CIE_delta - f->CIE_delta;
}
static inline fde *
next_fde (fde *f)
{
return (fde *)((char *)f + f->length + sizeof (f->length));
}
extern fde * _Unwind_Find_FDE (void *, struct dwarf_eh_bases *);

1207
sysdeps/generic/unwind-dw2.c Normal file

File diff suppressed because it is too large Load Diff

272
sysdeps/generic/unwind-pe.h Normal file
View File

@ -0,0 +1,272 @@
/* Exception handling and frame unwind runtime interface routines.
Copyright (C) 2001 Free Software Foundation, Inc.
This file is part of GNU CC.
GNU CC is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU CC 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU CC; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* @@@ Really this should be out of line, but this also causes link
compatibility problems with the base ABI. This is slightly better
than duplicating code, however. */
/* If using C++, references to abort have to be qualified with std::. */
#if __cplusplus
#define __gxx_abort std::abort
#else
#define __gxx_abort abort
#endif
/* Pointer encodings, from dwarf2.h. */
#define DW_EH_PE_absptr 0x00
#define DW_EH_PE_omit 0xff
#define DW_EH_PE_uleb128 0x01
#define DW_EH_PE_udata2 0x02
#define DW_EH_PE_udata4 0x03
#define DW_EH_PE_udata8 0x04
#define DW_EH_PE_sleb128 0x09
#define DW_EH_PE_sdata2 0x0A
#define DW_EH_PE_sdata4 0x0B
#define DW_EH_PE_sdata8 0x0C
#define DW_EH_PE_signed 0x08
#define DW_EH_PE_pcrel 0x10
#define DW_EH_PE_textrel 0x20
#define DW_EH_PE_datarel 0x30
#define DW_EH_PE_funcrel 0x40
#define DW_EH_PE_aligned 0x50
#define DW_EH_PE_indirect 0x80
/* Given an encoding, return the number of bytes the format occupies.
This is only defined for fixed-size encodings, and so does not
include leb128. */
#ifndef _LIBC
static
#endif
unsigned int
size_of_encoded_value (unsigned char encoding)
#if defined(_LIBC) && !defined(NO_BASE_OF_ENCODED_VALUE)
;
#else
{
if (encoding == DW_EH_PE_omit)
return 0;
switch (encoding & 0x07)
{
case DW_EH_PE_absptr:
return sizeof (void *);
case DW_EH_PE_udata2:
return 2;
case DW_EH_PE_udata4:
return 4;
case DW_EH_PE_udata8:
return 8;
}
__gxx_abort ();
}
#endif
#ifndef NO_BASE_OF_ENCODED_VALUE
/* Given an encoding and an _Unwind_Context, return the base to which
the encoding is relative. This base may then be passed to
read_encoded_value_with_base for use when the _Unwind_Context is
not available. */
static _Unwind_Ptr
base_of_encoded_value (unsigned char encoding, struct _Unwind_Context *context)
{
if (encoding == DW_EH_PE_omit)
return 0;
switch (encoding & 0x70)
{
case DW_EH_PE_absptr:
case DW_EH_PE_pcrel:
case DW_EH_PE_aligned:
return 0;
case DW_EH_PE_textrel:
return _Unwind_GetTextRelBase (context);
case DW_EH_PE_datarel:
return _Unwind_GetDataRelBase (context);
case DW_EH_PE_funcrel:
return _Unwind_GetRegionStart (context);
}
__gxx_abort ();
}
#endif
/* Load an encoded value from memory at P. The value is returned in VAL;
The function returns P incremented past the value. BASE is as given
by base_of_encoded_value for this encoding in the appropriate context. */
#ifndef _LIBC
static
#endif
const unsigned char *
read_encoded_value_with_base (unsigned char encoding, _Unwind_Ptr base,
const unsigned char *p, _Unwind_Ptr *val)
#if defined(_LIBC) && !defined(NO_BASE_OF_ENCODED_VALUE)
;
#else
{
union unaligned
{
void *ptr;
unsigned u2 __attribute__ ((mode (HI)));
unsigned u4 __attribute__ ((mode (SI)));
unsigned u8 __attribute__ ((mode (DI)));
signed s2 __attribute__ ((mode (HI)));
signed s4 __attribute__ ((mode (SI)));
signed s8 __attribute__ ((mode (DI)));
} __attribute__((__packed__));
union unaligned *u = (union unaligned *) p;
_Unwind_Ptr result;
if (encoding == DW_EH_PE_aligned)
{
_Unwind_Ptr a = (_Unwind_Ptr)p;
a = (a + sizeof (void *) - 1) & - sizeof(void *);
result = *(_Unwind_Ptr *) a;
p = (const unsigned char *)(a + sizeof (void *));
}
else
{
switch (encoding & 0x0f)
{
case DW_EH_PE_absptr:
result = (_Unwind_Ptr) u->ptr;
p += sizeof (void *);
break;
case DW_EH_PE_uleb128:
{
unsigned int shift = 0;
unsigned char byte;
result = 0;
do
{
byte = *p++;
result |= (_Unwind_Ptr)(byte & 0x7f) << shift;
shift += 7;
}
while (byte & 0x80);
}
break;
case DW_EH_PE_sleb128:
{
unsigned int shift = 0;
unsigned char byte;
result = 0;
do
{
byte = *p++;
result |= (_Unwind_Ptr)(byte & 0x7f) << shift;
shift += 7;
}
while (byte & 0x80);
if (shift < 8 * sizeof(result) && (byte & 0x40) != 0)
result |= -(1L << shift);
}
break;
case DW_EH_PE_udata2:
result = u->u2;
p += 2;
break;
case DW_EH_PE_udata4:
result = u->u4;
p += 4;
break;
case DW_EH_PE_udata8:
result = u->u8;
p += 8;
break;
case DW_EH_PE_sdata2:
result = u->s2;
p += 2;
break;
case DW_EH_PE_sdata4:
result = u->s4;
p += 4;
break;
case DW_EH_PE_sdata8:
result = u->s8;
p += 8;
break;
default:
__gxx_abort ();
}
if (result != 0)
{
result += ((encoding & 0x70) == DW_EH_PE_pcrel
? (_Unwind_Ptr)u : base);
if (encoding & DW_EH_PE_indirect)
result = *(_Unwind_Ptr *)result;
}
}
*val = result;
return p;
}
#endif
#ifndef NO_BASE_OF_ENCODED_VALUE
/* Like read_encoded_value_with_base, but get the base from the context
rather than providing it directly. */
static inline const unsigned char *
read_encoded_value (struct _Unwind_Context *context, unsigned char encoding,
const unsigned char *p, _Unwind_Ptr *val)
{
return read_encoded_value_with_base (encoding,
base_of_encoded_value (encoding, context),
p, val);
}
#endif
/* Read an unsigned leb128 value from P, store the value in VAL, return
P incremented past the value. */
static inline const unsigned char *
read_uleb128 (const unsigned char *p, _Unwind_Ptr *val)
{
return read_encoded_value_with_base (DW_EH_PE_uleb128, 0, p, val);
}
/* Similar, but read a signed leb128 value. */
static inline const unsigned char *
read_sleb128 (const unsigned char *p, _Unwind_Ptr *val)
{
return read_encoded_value_with_base (DW_EH_PE_sleb128, 0, p, val);
}

191
sysdeps/generic/unwind.h Normal file
View File

@ -0,0 +1,191 @@
/* Exception handling and frame unwind runtime interface routines.
Copyright (C) 2001 Free Software Foundation, Inc.
This file is part of GNU CC.
GNU CC is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU CC 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU CC; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* This is derived from the C++ ABI for IA-64. Where we diverge
for cross-architecture compatibility are noted with "@@@". */
#ifdef __cplusplus
extern "C" {
#endif
/* Level 1: Base ABI */
/* @@@ The IA-64 ABI uses uint64 throughout. Most places this is
inefficient for 32-bit and smaller machines. */
typedef unsigned _Unwind_Word __attribute__((__mode__(__word__)));
typedef signed _Unwind_Sword __attribute__((__mode__(__word__)));
typedef unsigned _Unwind_Ptr __attribute__((__mode__(__pointer__)));
/* @@@ The IA-64 ABI uses a 64-bit word to identify the producer and
consumer of an exception. We'll go along with this for now even on
32-bit machines. We'll need to provide some other option for
16-bit machines and for machines with > 8 bits per byte. */
typedef unsigned _Unwind_Exception_Class __attribute__((__mode__(__DI__)));
/* The unwind interface uses reason codes in several contexts to
identify the reasons for failures or other actions. */
typedef enum
{
_URC_NO_REASON = 0,
_URC_FOREIGN_EXCEPTION_CAUGHT = 1,
_URC_FATAL_PHASE2_ERROR = 2,
_URC_FATAL_PHASE1_ERROR = 3,
_URC_NORMAL_STOP = 4,
_URC_END_OF_STACK = 5,
_URC_HANDLER_FOUND = 6,
_URC_INSTALL_CONTEXT = 7,
_URC_CONTINUE_UNWIND = 8
} _Unwind_Reason_Code;
/* The unwind interface uses a pointer to an exception header object
as its representation of an exception being thrown. In general, the
full representation of an exception object is language- and
implementation-specific, but it will be prefixed by a header
understood by the unwind interface. */
struct _Unwind_Exception;
typedef void (*_Unwind_Exception_Cleanup_Fn) (_Unwind_Reason_Code,
struct _Unwind_Exception *);
struct _Unwind_Exception
{
_Unwind_Exception_Class exception_class;
_Unwind_Exception_Cleanup_Fn exception_cleanup;
_Unwind_Word private_1;
_Unwind_Word private_2;
/* @@@ The IA-64 ABI says that this structure must be double-word aligned.
Taking that literally does not make much sense generically. Instead we
provide the maximum alignment required by any type for the machine. */
} __attribute__((__aligned__));
/* The ACTIONS argument to the personality routine is a bitwise OR of one
or more of the following constants. */
typedef int _Unwind_Action;
#define _UA_SEARCH_PHASE 1
#define _UA_CLEANUP_PHASE 2
#define _UA_HANDLER_FRAME 4
#define _UA_FORCE_UNWIND 8
/* This is an opaque type used to refer to a system-specific data
structure used by the system unwinder. This context is created and
destroyed by the system, and passed to the personality routine
during unwinding. */
struct _Unwind_Context;
/* Raise an exception, passing along the given exception object. */
extern _Unwind_Reason_Code _Unwind_RaiseException (struct _Unwind_Exception *);
/* Raise an exception for forced unwinding. */
typedef _Unwind_Reason_Code (*_Unwind_Stop_Fn)
(int, _Unwind_Action, _Unwind_Exception_Class,
struct _Unwind_Exception *, struct _Unwind_Context *, void *);
extern _Unwind_Reason_Code _Unwind_ForcedUnwind (struct _Unwind_Exception *,
_Unwind_Stop_Fn,
void *);
/* Helper to invoke the exception_cleanup routine. */
extern void _Unwind_DeleteException (struct _Unwind_Exception *);
/* Resume propagation of an existing exception. This is used after
e.g. executing cleanup code, and not to implement rethrowing. */
extern void _Unwind_Resume (struct _Unwind_Exception *);
/* These functions are used for communicating information about the unwind
context (i.e. the unwind descriptors and the user register state) between
the unwind library and the personality routine and landing pad. Only
selected registers maybe manipulated. */
extern _Unwind_Word _Unwind_GetGR (struct _Unwind_Context *, int);
extern void _Unwind_SetGR (struct _Unwind_Context *, int, _Unwind_Word);
extern _Unwind_Ptr _Unwind_GetIP (struct _Unwind_Context *);
extern void _Unwind_SetIP (struct _Unwind_Context *, _Unwind_Ptr);
extern void *_Unwind_GetLanguageSpecificData (struct _Unwind_Context *);
extern _Unwind_Ptr _Unwind_GetRegionStart (struct _Unwind_Context *);
/* The personality routine is the function in the C++ (or other language)
runtime library which serves as an interface between the system unwind
library and language-specific exception handling semantics. It is
specific to the code fragment described by an unwind info block, and
it is always referenced via the pointer in the unwind info block, and
hence it has no ABI-specified name.
Note that this implies that two different C++ implementations can
use different names, and have different contents in the language
specific data area. Moreover, that the language specific data
area contains no version info because name of the function invoked
provides more effective versioning by detecting at link time the
lack of code to handle the different data format. */
typedef _Unwind_Reason_Code (*_Unwind_Personality_Fn)
(int, _Unwind_Action, _Unwind_Exception_Class,
struct _Unwind_Exception *, struct _Unwind_Context *);
/* @@@ The following alternate entry points are for setjmp/longjmp
based unwinding. */
struct SjLj_Function_Context;
extern void _Unwind_SjLj_Register (struct SjLj_Function_Context *);
extern void _Unwind_SjLj_Unregister (struct SjLj_Function_Context *);
extern _Unwind_Reason_Code _Unwind_SjLj_RaiseException
(struct _Unwind_Exception *);
extern _Unwind_Reason_Code _Unwind_SjLj_ForcedUnwind
(struct _Unwind_Exception *, _Unwind_Stop_Fn, void *);
extern void _Unwind_SjLj_Resume (struct _Unwind_Exception *);
/* @@@ The following provide access to the base addresses for text
and data-relative addressing in the LDSA. In order to stay link
compatible with the standard ABI for IA-64, we inline these. */
#ifdef __ia64__
#include <stdlib.h>
static inline _Unwind_Ptr
_Unwind_GetDataRelBase (struct _Unwind_Context *_C)
{
/* The GP is stored in R1. */
return _Unwind_GetGR (_C, 1);
}
static inline _Unwind_Ptr
_Unwind_GetTextRelBase (struct _Unwind_Context *_C)
{
abort ();
return 0;
}
#else
extern _Unwind_Ptr _Unwind_GetDataRelBase (struct _Unwind_Context *);
extern _Unwind_Ptr _Unwind_GetTextRelBase (struct _Unwind_Context *);
#endif
#ifdef __cplusplus
}
#endif

23
sysdeps/hppa/gccframe.h Normal file
View File

@ -0,0 +1,23 @@
/* Definition of object in frame unwind info. hppa version.
Copyright (C) 2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
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. */
/* Note: For hppa64 this is 61 */
#define DWARF_FRAME_REGISTERS 89
#include <sysdeps/generic/gccframe.h>

28
sysdeps/i386/gccframe.h Normal file
View File

@ -0,0 +1,28 @@
/* Definition of object in frame unwind info. i386 version.
Copyright (C) 2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
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. */
#define DWARF_FRAME_REGISTERS 17
#define CRT_GET_RFIB_DATA(BASE) \
{ \
register void *__ebx __asm__("ebx");\
BASE = __ebx; \
}
#include <sysdeps/generic/gccframe.h>

22
sysdeps/m68k/gccframe.h Normal file
View File

@ -0,0 +1,22 @@
/* Definition of object in frame unwind info. m68k version.
Copyright (C) 2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
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. */
#define FIRST_PSEUDO_REGISTER 24
#include <sysdeps/generic/gccframe.h>

View File

@ -9,3 +9,11 @@ inhibit_glue=yes
if test "x$prefix" != x; then
echo "configure: warning: --prefix= (empty) is required for GNU/Hurd to work normally" 1>&2
fi
case "$machine" in
i386*)
if test -z "$oldest_abi" || test "$oldest_abi" < "2.2.5"; then
libc_cv_gcc_unwind_find_fde=yes
fi
;;
esac

View File

@ -11,3 +11,11 @@ inhibit_glue=yes
if test "x$prefix" != x; then
AC_MSG_WARN([--prefix= (empty) is required for GNU/Hurd to work normally])
fi
case "$machine" in
i386*)
if test -z "$oldest_abi" || test "$oldest_abi" < "2.2.5"; then
libc_cv_gcc_unwind_find_fde=yes
fi
;;
esac

View File

@ -0,0 +1,7 @@
ifeq ($(subdir),elf)
ifeq (yes,$(build-shared))
# This is needed to support g++ v2 and v3.
sysdep_routines += framestate
shared-only-routines += framestate
endif
endif

View File

@ -2,7 +2,6 @@ libc {
GLIBC_2.0 {
# Exception handling support functions from libgcc
__register_frame; __register_frame_table; __deregister_frame;
__register_frame_info; __deregister_frame_info; __frame_state_for;
__register_frame_info_table;
__frame_state_for; __register_frame_info_table;
}
}

22
sysdeps/mips/gccframe.h Normal file
View File

@ -0,0 +1,22 @@
/* Definition of object in frame unwind info. mips version.
Copyright (C) 2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
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. */
#define FIRST_PSEUDO_REGISTER 76
#include <sysdeps/generic/gccframe.h>

View File

@ -0,0 +1,22 @@
/* Definition of object in frame unwind info. powerpc version.
Copyright (C) 2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
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. */
#define DWARF_FRAME_REGISTERS 77
#include <sysdeps/generic/gccframe.h>

22
sysdeps/s390/gccframe.h Normal file
View File

@ -0,0 +1,22 @@
/* Definition of object in frame unwind info. s390 version.
Copyright (C) 2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
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. */
#define FIRST_PSEUDO_REGISTER 34
#include <sysdeps/generic/gccframe.h>

22
sysdeps/sh/gccframe.h Normal file
View File

@ -0,0 +1,22 @@
/* Definition of object in frame unwind info. sh version.
Copyright (C) 2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
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. */
#define DWARF_FRAME_REGISTERS 49
#include <sysdeps/generic/gccframe.h>

22
sysdeps/sparc/gccframe.h Normal file
View File

@ -0,0 +1,22 @@
/* Definition of object in frame unwind info. sparc version.
Copyright (C) 2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
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. */
#define FIRST_PSEUDO_REGISTER 101
#include <sysdeps/generic/gccframe.h>

View File

@ -23,3 +23,11 @@ ifeq ($(subdir),signal)
sysdep_routines += rt_sigsuspend rt_sigprocmask rt_sigtimedwait \
rt_sigqueueinfo rt_sigaction rt_sigpending
endif
ifeq ($(subdir),elf)
ifeq (yes,$(build-shared))
# This is needed to support g++ v2 and v3.
sysdep_routines += framestate
shared-only-routines += framestate
endif
endif

View File

@ -6,8 +6,7 @@ libc {
# Exception handling support functions from libgcc
__register_frame; __register_frame_table; __deregister_frame;
__register_frame_info; __deregister_frame_info; __frame_state_for;
__register_frame_info_table;
__frame_state_for; __register_frame_info_table;
# b*
bus_base; bus_base_sparse;

View File

@ -19,4 +19,10 @@ sysdep-dl-routines += dl-procinfo
sysdep_routines += dl-procinfo
# extra shared linker files to link only into dl-allobjs.so
sysdep-rtld-routines += dl-procinfo
ifeq (yes,$(build-shared))
# This is needed to support g++ v2 and v3.
sysdep_routines += framestate
shared-only-routines += framestate
endif
endif

View File

@ -2,8 +2,7 @@ libc {
GLIBC_2.0 {
# Exception handling support functions from libgcc
__register_frame; __register_frame_table; __deregister_frame;
__register_frame_info; __deregister_frame_info; __frame_state_for;
__register_frame_info_table;
__frame_state_for; __register_frame_info_table;
}
GLIBC_2.1 {
ioperm; iopl;

View File

@ -54,6 +54,11 @@ fi
case "$machine" in
alpha*)
arch_minimum_kernel=2.1.100
libc_cv_gcc_unwind_find_fde=yes
;;
i386*)
libc_cv_gcc_unwind_find_fde=yes
arch_minimum_kernel=2.0.10
;;
ia64*)
arch_minimum_kernel=2.4.0
@ -63,9 +68,19 @@ case "$machine" in
;;
mips*)
arch_minimum_kernel=2.2.15
libc_cv_gcc_unwind_find_fde=yes
;;
powerpc)
libc_cv_gcc_unwind_find_fde=yes
arch_minimum_kernel=2.0.10
;;
sh*)
arch_minimum_kernel=2.3.99
libc_cv_gcc_unwind_find_fde=yes
;;
sparc*)
libc_cv_gcc_unwind_find_fde=yes
arch_minimum_kernel=2.0.10
;;
x86_64*)
arch_minimum_kernel=2.4.0
@ -91,11 +106,11 @@ fi
if test -n "$minimum_kernel"; then
echo $ac_n "checking for kernel header at least $minimum_kernel""... $ac_c" 1>&6
echo "configure:95: checking for kernel header at least $minimum_kernel" >&5
echo "configure:110: checking for kernel header at least $minimum_kernel" >&5
decnum=`echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/(\1 * 65536 + \2 * 256 + \3)/'`;
abinum=`echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1,\2,\3/'`;
cat > conftest.$ac_ext <<EOF
#line 99 "configure"
#line 114 "configure"
#include "confdefs.h"
#include <linux/version.h>
#if LINUX_VERSION_CODE < $decnum
@ -128,6 +143,12 @@ EOF
fi
fi
# The result of the above test for the use of the FDE code is invalid if
# the user overrides the decision about the minimum ABI.
if test "$oldest_abi" != default && test "2.2.4" \< "$oldest_abi"; then
libc_cv_gcc_unwind_find_fde=no
fi
if test -n "$sysheaders"; then
CPPFLAGS=$OLD_CPPFLAGS
fi
@ -219,7 +240,7 @@ if test $host = $build; then
ac_prefix=$ac_default_prefix
fi
echo $ac_n "checking for symlinks in ${ac_prefix}/include""... $ac_c" 1>&6
echo "configure:223: checking for symlinks in ${ac_prefix}/include" >&5
echo "configure:244: checking for symlinks in ${ac_prefix}/include" >&5
ac_message=
if test -L ${ac_prefix}/include/net; then
ac_message="$ac_message

View File

@ -41,6 +41,11 @@ fi
case "$machine" in
alpha*)
arch_minimum_kernel=2.1.100
libc_cv_gcc_unwind_find_fde=yes
;;
i386*)
libc_cv_gcc_unwind_find_fde=yes
arch_minimum_kernel=2.0.10
;;
ia64*)
arch_minimum_kernel=2.4.0
@ -50,9 +55,19 @@ case "$machine" in
;;
mips*)
arch_minimum_kernel=2.2.15
libc_cv_gcc_unwind_find_fde=yes
;;
powerpc)
libc_cv_gcc_unwind_find_fde=yes
arch_minimum_kernel=2.0.10
;;
sh*)
arch_minimum_kernel=2.3.99
libc_cv_gcc_unwind_find_fde=yes
;;
sparc*)
libc_cv_gcc_unwind_find_fde=yes
arch_minimum_kernel=2.0.10
;;
x86_64*)
arch_minimum_kernel=2.4.0
@ -96,6 +111,12 @@ eat flaming death
fi
fi
# The result of the above test for the use of the FDE code is invalid if
# the user overrides the decision about the minimum ABI.
if test "$oldest_abi" != default && test "2.2.4" \< "$oldest_abi"; then
libc_cv_gcc_unwind_find_fde=no
fi
if test -n "$sysheaders"; then
CPPFLAGS=$OLD_CPPFLAGS
fi

View File

@ -12,6 +12,12 @@ sysdep-dl-routines += dl-procinfo
sysdep_routines += dl-procinfo
# extra shared linker files to link only into dl-allobjs.so
sysdep-rtld-routines += dl-procinfo
ifeq (yes,$(build-shared))
# This is needed to support g++ v2 and v3.
sysdep_routines += framestate
shared-only-routines += framestate
endif
endif
ifeq ($(subdir),resource)

View File

@ -2,8 +2,7 @@ libc {
GLIBC_2.0 {
# Exception handling support functions from libgcc
__register_frame; __register_frame_table; __deregister_frame;
__register_frame_info; __deregister_frame_info; __frame_state_for;
__register_frame_info_table;
__frame_state_for; __register_frame_info_table;
ioperm; iopl;

View File

@ -0,0 +1 @@
/* Linux/ia64 does not need unwind table registry. */

View File

@ -10,6 +10,12 @@ endif
ifeq ($(subdir),elf)
sysdep-others += lddlibc4
install-bin += lddlibc4
ifeq (yes,$(build-shared))
# This is needed to support g++ v2 and v3.
sysdep_routines += framestate
shared-only-routines += framestate
endif
endif
ifeq ($(subdir),resource)

View File

@ -2,8 +2,7 @@ libc {
GLIBC_2.0 {
# Exception handling support functions from libgcc
__register_frame; __register_frame_table; __deregister_frame;
__register_frame_info; __deregister_frame_info; __frame_state_for;
__register_frame_info_table;
__frame_state_for; __register_frame_info_table;
# c*
cacheflush;

View File

@ -9,3 +9,11 @@ sysdep_routines += cachectl cacheflush sysmips _test_and_set
sysdep_headers += sys/cachectl.h sys/sysmips.h sys/tas.h
endif
ifeq ($(subdir),elf)
ifeq (yes,$(build-shared))
# This is needed to support g++ v2 and v3.
sysdep_routines += framestate
shared-only-routines += framestate
endif
endif

View File

@ -2,8 +2,7 @@ libc {
GLIBC_2.0 {
# Exception handling support functions from libgcc
__register_frame; __register_frame_table; __deregister_frame;
__register_frame_info; __deregister_frame_info; __frame_state_for;
__register_frame_info_table;
__frame_state_for; __register_frame_info_table;
# Needed by gcc:
_flush_cache;

View File

@ -6,3 +6,11 @@ endif
ifeq ($(subdir),resource)
sysdep_routines += oldgetrlimit64
endif
ifeq ($(subdir),elf)
ifeq (yes,$(build-shared))
# This is needed to support g++ v2 and v3.
sysdep_routines += framestate
shared-only-routines += framestate
endif
endif

View File

@ -2,8 +2,7 @@ libc {
GLIBC_2.0 {
# Exception handling support functions from libgcc
__register_frame; __register_frame_table; __deregister_frame;
__register_frame_info; __deregister_frame_info; __frame_state_for;
__register_frame_info_table;
__frame_state_for; __register_frame_info_table;
}
GLIBC_2.2 {
# functions used in other libraries

View File

@ -6,3 +6,11 @@ endif
ifeq ($(subdir),resource)
sysdep_routines += oldgetrlimit64
endif
ifeq ($(subdir),elf)
ifeq (yes,$(build-shared))
# This is needed to support g++ v2 and v3.
sysdep_routines += framestate
shared-only-routines += framestate
endif
endif

View File

@ -2,8 +2,7 @@ libc {
GLIBC_2.0 {
# Exception handling support functions from libgcc
__register_frame; __register_frame_table; __deregister_frame;
__register_frame_info; __deregister_frame_info; __frame_state_for;
__register_frame_info_table;
__frame_state_for; __register_frame_info_table;
}
GLIBC_2.2 {
# functions used in other libraries

View File

@ -42,3 +42,11 @@ $(objpfx)syscall-%.h $(objpfx)syscall-%.d: ../sysdeps/unix/sysv/linux/sys/syscal
mv -f $(@:.h=.d)-t2 $(@:.h=.d)
endif
ifeq ($(subdir),elf)
ifeq (yes,$(build-shared))
# This is needed to support g++ v2 and v3.
sysdep_routines += framestate
shared-only-routines += framestate
endif
endif

View File

@ -2,8 +2,7 @@ libc {
GLIBC_2.0 {
# Exception handling support functions from libgcc
__register_frame; __register_frame_table; __deregister_frame;
__register_frame_info; __deregister_frame_info; __frame_state_for;
__register_frame_info_table;
__frame_state_for; __register_frame_info_table;
}
GLIBC_2.2 {
# functions used in other libraries

View File

@ -2,8 +2,7 @@ libc {
GLIBC_2.0 {
# Exception handling support functions from libgcc
__register_frame; __register_frame_table; __deregister_frame;
__register_frame_info; __deregister_frame_info; __frame_state_for;
__register_frame_info_table;
__frame_state_for; __register_frame_info_table;
}
GLIBC_2.2.2 {
# w*

22
sysdeps/vax/gccframe.h Normal file
View File

@ -0,0 +1,22 @@
/* Definition of object in frame unwind info. vax version.
Copyright (C) 2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
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. */
#define DWARF_FRAME_REGISTERS 16
#include <sysdeps/generic/gccframe.h>