diff options
author | Mike Frysinger <vapier@gentoo.org> | 2005-01-15 03:05:28 +0000 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2005-01-15 03:05:28 +0000 |
commit | 728dcd0287c5f387e4b49619cd98e9ec027412ca (patch) | |
tree | caffd770c1a522f98ae6780bd1e3e6be49b984ec /sys-devel | |
parent | cleanup oldschool ebuild (diff) | |
download | gentoo-2-728dcd0287c5f387e4b49619cd98e9ec027412ca.tar.gz gentoo-2-728dcd0287c5f387e4b49619cd98e9ec027412ca.tar.bz2 gentoo-2-728dcd0287c5f387e4b49619cd98e9ec027412ca.zip |
punt old gcc-2 patches
(Portage version: 2.0.51-r12)
Diffstat (limited to 'sys-devel')
-rw-r--r-- | sys-devel/gcc/files/2.95.3/gcc-2.95.3-alpha.diff | 427 | ||||
-rw-r--r-- | sys-devel/gcc/files/2.95.3/gcc-2.95.3-new-atexit.diff | 397 |
2 files changed, 0 insertions, 824 deletions
diff --git a/sys-devel/gcc/files/2.95.3/gcc-2.95.3-alpha.diff b/sys-devel/gcc/files/2.95.3/gcc-2.95.3-alpha.diff deleted file mode 100644 index f97fb94b90e4..000000000000 --- a/sys-devel/gcc/files/2.95.3/gcc-2.95.3-alpha.diff +++ /dev/null @@ -1,427 +0,0 @@ -2000-04-29 Richard Henderson <rth@cygnus.com> - - * config/alpha/crtbegin.asm: Use C comments instead of #. - Mark __dso_handle hidden. - -2000-02-16 Richard Henderson <rth@cygnus.com> - - * configure.in (alpha-linux*, alpha-netbsd) [extra_parts]: - Add crtbeginS.o and crtendS.o. - * alpha/elf.h (STARTFILE_SPEC): Use crtbeginS.o. - (ENDFILE_SPEC): Use crtendS.o. - * alpha/t-crtbe (crtbeginS.o, crtendS.o): New targets. - - * alpha/crtbegin.asm (__do_frame_takedown): Merge into ... - (__do_global_dtors_aux): ... here. Call __cxa_finalize if - shared and present. - (__dso_handle): New variable. - -2000-04-04 Ulrich Drepper <drepper@cygnus.com> - - * acconfig.h: Add HAVE_GAS_HIDDEN. - * config.in: Regenerated. - * configure.in: Add test for .hidden pseudo-op in gas. - * configure: Regenerated. - * crtstuff.c: Include auto-host.h. - Emit additional .hidden pseudo-op for __dso_handle if the - assembler knows about it. - ---- gcc-2.95.x/gcc/config/alpha/crtbegin.asm.jj Wed Dec 16 22:00:53 1998 -+++ gcc-2.95.x/gcc/config/alpha/crtbegin.asm Mon Aug 13 11:16:43 2001 -@@ -1,42 +1,46 @@ -- # Copyright (C) 1996, 1998 Free Software Foundation, Inc. -- # Contributed by Richard Henderson (rth@tamu.edu) -- # -- # This file 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 with other programs, and to distribute -- # those programs 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 another program.) -- # -- # This file 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 this program; see the file COPYING. If not, write to -- # the Free Software Foundation, 59 Temple Place - Suite 330, -- # Boston, MA 02111-1307, USA. -- # -- # As a special exception, if you link this library with files -- # compiled with GCC to produce an executable, this does not cause -- # the resulting executable to be covered by the GNU General Public License. -- # This exception does not however invalidate any other reasons why -- # the executable file might be covered by the GNU General Public License. -- -- # -- # Heads of the constructor/destructor lists. -- # -- -- # The __*TOR_LIST__ symbols are not global because when this file is used -- # in a shared library, we do not want the symbol to fall over to the -- # application's lists. -+/* Copyright (C) 1996, 1998 Free Software Foundation, Inc. -+ * Contributed by Richard Henderson (rth@tamu.edu) -+ * -+ * This file 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 with other programs, and to distribute -+ * those programs 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 another program.) -+ * -+ * This file 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 this program; see the file COPYING. If not, write to -+ * the Free Software Foundation, 59 Temple Place - Suite 330, -+ * Boston, MA 02111-1307, USA. -+ * -+ * As a special exception, if you link this library with files -+ * compiled with GCC to produce an executable, this does not cause -+ * the resulting executable to be covered by the GNU General Public License. -+ * This exception does not however invalidate any other reasons why -+ * the executable file might be covered by the GNU General Public License. -+ */ -+ -+ -+ -+/* -+ * Heads of the constructor/destructor lists. -+ */ -+ -+/* The __*TOR_LIST__ symbols are not global because when this file is used -+ * in a shared library, we do not want the symbol to fall over to the -+ * application's lists. -+ */ - - .section .ctors,"aw" - -@@ -53,34 +57,34 @@ __DTOR_LIST__: - .section .eh_frame,"aw" - __EH_FRAME_BEGIN__: - -- # -- # Fragment of the ELF _fini routine that invokes our dtor cleanup. -- # -+/* -+ * Fragment of the ELF _fini routine that invokes our dtor cleanup. -+ */ - - .section .fini,"ax" - -- # Since the bits of the _fini function are spread across many -- # object files, each potentially with its own GP, we must -- # assume we need to load ours. Further, our .fini section -- # can easily be more than 4MB away from our .text bits so we -- # can't use bsr. -+ /* Since the bits of the _fini function are spread across many -+ object files, each potentially with its own GP, we must -+ assume we need to load ours. Further, our .fini section -+ can easily be more than 4MB away from our .text bits so we -+ can't use bsr. */ - - br $29,1f - 1: ldgp $29,0($29) - jsr $26,__do_global_dtors_aux - -- # Ideally this call would go in crtend.o, except that we can't -- # get hold of __EH_FRAME_BEGIN__ there. -+ /* Ideally this call would go in crtend.o, except that we can't -+ get hold of __EH_FRAME_BEGIN__ there */ - - jsr $26,__do_frame_takedown - -- # Must match the alignment we got from crti.o else we get -- # zero-filled holes in our _fini function and then SIGILL. -+ /* Must match the alignment we got from crti.o else we get -+ zero-filled holes in our _fini function and then SIGILL. */ - .align 3 - -- # -- # Fragment of the ELF _init routine that sets up the frame info. -- # -+/* -+ * Fragment of the ELF _init routine that sets up the frame info. -+ */ - - .section .init,"ax" - br $29,1f -@@ -88,32 +92,68 @@ __EH_FRAME_BEGIN__: - jsr $26,__do_frame_setup - .align 3 - -- # -- # Invoke our destructors in order. -- # -+/* -+ * Invoke our destructors in order. -+ */ - - .data - -- # Support recursive calls to exit. -+/* Support recursive calls to exit. */ - $ptr: .quad __DTOR_LIST__ - -+/* A globally unique widget for c++ local destructors to hang off. -+ -+ This has a unique value in every dso; in the main program its -+ value is zero. The object should be protected. This means the -+ instance in any dso or the main program is not used in any other -+ dso. The dynamic linker takes care of this. */ -+ -+ .global __dso_handle -+ .type __dso_handle,@object -+ .size __dso_handle,8 -+#ifdef SHARED -+.section .data -+ .align 3 -+__dso_handle: -+ .quad __dso_handle -+#else -+.section .bss -+ .align 3 -+__dso_handle: -+ .zero 8 -+#endif -+#ifdef HAVE_GAS_HIDDEN -+ .hidden __dso_handle -+#endif -+ - .text - - .align 3 - .ent __do_global_dtors_aux - - __do_global_dtors_aux: -+ ldgp $29,0($27) - lda $30,-16($30) - .frame $30,16,$26,0 - stq $9,8($30) - stq $26,0($30) - .mask 0x4000200,-16 -- .prologue 0 -+ .prologue 1 - -+#ifdef SHARED -+ /* Do c++ local destructors. */ -+ lda $1,__cxa_finalize -+ beq $1,2f -+ lda $16,__dso_handle -+ jsr $26,__cxa_finalize -+ ldgp $29,0($26) -+2: -+#endif - lda $9,$ptr - br 1f - 0: stq $1,0($9) - jsr $26,($27) -+ ldgp $29,0($26) - 1: ldq $1,0($9) - ldq $27,8($1) - addq $1,8,$1 -@@ -126,11 +166,11 @@ __do_global_dtors_aux: - - .end __do_global_dtors_aux - -- # -- # Install our frame info. -- # -+/* -+ * Install our frame info. -+ */ - -- # ??? How can we rationally keep this size correct? -+/* ??? How can we rationally keep this size correct? */ - - .section .bss - .type $object,@object -@@ -163,9 +203,9 @@ __do_frame_setup: - - .end __do_frame_setup - -- # -- # Remove our frame info. -- # -+/* -+ * Remove our frame info. -+ */ - - .align 3 - .ent __do_frame_takedown -@@ -190,3 +230,6 @@ __do_frame_takedown: - - .weak __register_frame_info - .weak __deregister_frame_info -+#ifdef SHARED -+.weak __cxa_finalize -+#endif ---- gcc-2.95.x/gcc/config/alpha/t-crtbe.jj Wed Dec 16 22:01:05 1998 -+++ gcc-2.95.x/gcc/config/alpha/t-crtbe Mon Aug 13 11:08:08 2001 -@@ -3,7 +3,13 @@ T = disable - - # Assemble startup files. - crtbegin.o: $(srcdir)/config/alpha/crtbegin.asm $(GCC_PASSES) -- $(GCC_FOR_TARGET) -c -o crtbegin.o -x assembler $(srcdir)/config/alpha/crtbegin.asm -+ $(GCC_FOR_TARGET) -c -o crtbegin.o -x assembler-with-cpp $(srcdir)/config/alpha/crtbegin.asm - - crtend.o: $(srcdir)/config/alpha/crtend.asm $(GCC_PASSES) -- $(GCC_FOR_TARGET) -c -o crtend.o -x assembler $(srcdir)/config/alpha/crtend.asm -+ $(GCC_FOR_TARGET) -c -o crtend.o -x assembler $(srcdir)/config/alpha/crtend.asm -+ -+crtbeginS.o: $(srcdir)/config/alpha/crtbegin.asm $(GCC_PASSES) -+ $(GCC_FOR_TARGET) -DSHARED -c -o crtbeginS.o -x assembler-with-cpp -I. $(srcdir)/config/alpha/crtbegin.asm -+ -+crtendS.o: $(srcdir)/config/alpha/crtend.asm $(GCC_PASSES) -+ $(GCC_FOR_TARGET) -c -o crtendS.o -x assembler -I. $(srcdir)/config/alpha/crtend.asm ---- gcc-2.95.x/gcc/config/alpha/elf.h.jj Mon Jun 21 22:15:10 1999 -+++ gcc-2.95.x/gcc/config/alpha/elf.h Mon Aug 13 11:09:13 2001 -@@ -513,7 +513,7 @@ do { \ - #define STARTFILE_SPEC \ - "%{!shared: \ - %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} %{!p:crt1.o%s}}}\ -- crti.o%s crtbegin.o%s" -+ crti.o%s %{shared:crtbeginS.o%s}%{!shared:crtbegin.o%s}" - - /* Provide a ENDFILE_SPEC appropriate for ELF. Here we tack on the - magical crtend.o file which provides part of the support for -@@ -522,7 +522,7 @@ do { \ - - #undef ENDFILE_SPEC - #define ENDFILE_SPEC \ -- "crtend.o%s crtn.o%s" -+ "%{shared:crtendS.o%s}%{!shared:crtend.o%s} crtn.o%s" - - /* We support #pragma. */ - #define HANDLE_SYSV_PRAGMA ---- gcc-2.95.x/gcc/crtstuff.c 2001/04/03 10:34:32 1.18.4.1 -+++ gcc-2.95.x/gcc/crtstuff.c 2001/08/09 06:56:33 -@@ -55,6 +55,7 @@ Boston, MA 02111-1307, USA. */ - #include "defaults.h" - #include <stddef.h> - #include "frame.h" -+#include "auto-host.h" - - /* We do not want to add the weak attribute to the declarations of these - routines in frame.h because that will cause the definition of these -@@ -134,7 +135,29 @@ typedef void (*func_ptr) (void); - #ifdef INIT_SECTION_ASM_OP - - #ifdef OBJECT_FORMAT_ELF -+/* Declare the __dso_handle variable. It should have a unique value -+ in every shared-object; in a main program its value is zero. The -+ object should in any case be protected. This means the instance -+ in one DSO or the main program is not used in another object. The -+ dynamic linker takes care of this. */ -+ -+/* XXX Ideally the following should be implemented using -+ __attribute__ ((__visibility__ ("hidden"))) -+ but the __attribute__ support is not yet there. */ -+#ifdef HAVE_GAS_HIDDEN -+asm (".hidden\t__dso_handle"); -+#endif -+ -+#ifdef CRTSTUFFS_O -+void *__dso_handle = &__dso_handle; -+#else -+void *__dso_handle = 0; -+#endif - -+/* The __cxa_finalize function may not be available so we use only a -+ weak declaration. */ -+extern void __cxa_finalize (void *) TARGET_ATTRIBUTE_WEAK; -+ - /* Run all the global destructors on exit from the program. */ - - /* Some systems place the number of pointers in the first word of the -@@ -164,6 +187,11 @@ __do_global_dtors_aux (void) - - if (completed) - return; -+ -+#ifdef CRTSTUFFS_O -+ if (__cxa_finalize) -+ __cxa_finalize (__dso_handle); -+#endif - - while (*p) - { ---- gcc-2.95.x/gcc/configure.in.jj Wed Oct 13 09:58:02 1999 -+++ gcc-2.95.x/gcc/configure.in Mon Aug 13 11:11:39 2001 -@@ -608,7 +608,7 @@ changequote([,])dnl - tm_file="${tm_file} alpha/elf.h alpha/linux.h alpha/linux-elf.h" - target_cpu_default="MASK_GAS" - tmake_file="t-linux t-linux-gnulibc1 alpha/t-linux alpha/t-crtbe alpha/t-ieee" -- extra_parts="crtbegin.o crtend.o" -+ extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o" - xmake_file=none - gas=yes gnu_ld=yes - if test x$enable_threads = xyes; then -@@ -619,7 +619,7 @@ changequote([,])dnl - tm_file="${tm_file} alpha/elf.h alpha/linux.h alpha/linux-elf.h" - target_cpu_default="MASK_GAS" - tmake_file="t-linux alpha/t-linux alpha/t-crtbe alpha/t-ieee" -- extra_parts="crtbegin.o crtend.o" -+ extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o" - xmake_file=none - gas=yes gnu_ld=yes - if test x$enable_threads = xyes; then -@@ -630,7 +630,7 @@ changequote([,])dnl - tm_file="${tm_file} alpha/elf.h alpha/netbsd.h alpha/netbsd-elf.h" - target_cpu_default="MASK_GAS" - tmake_file="alpha/t-crtbe alpha/t-ieee" -- extra_parts="crtbegin.o crtend.o" -+ extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o" - xmake_file=none - gas=yes gnu_ld=yes - ;; -@@ -4052,6 +4052,21 @@ EOF - rm -f conftest.s conftest.o conftest.nm1 conftest.nm2 - fi - AC_MSG_RESULT($gcc_cv_as_subsections) -+ -+AC_MSG_CHECKING(assembler hidden support) -+gcc_cv_as_hidden= -+if test x$gcc_cv_as != x; then -+ # Check if we have .hidden -+ echo " .hidden foobar" > conftest.s -+ echo "foobar:" >> conftest.s -+ if $gcc_cv_as -o conftest.o conftest.s > /dev/null 2>&1; then -+ AC_DEFINE(HAVE_GAS_HIDDEN, 1, -+ [Define if your assembler supports .hidden.]) -+ gcc_cv_as_hidden="yes" -+ fi -+ rm -f conftest.s conftest.o conftest.nm1 conftest.nm2 -+fi -+AC_MSG_RESULT($gcc_cv_as_hidden) - - AC_MSG_CHECKING(assembler instructions) - gcc_cv_as_instructions= ---- gcc-2.95.x/gcc/config.in.jj Mon Oct 25 10:02:08 1999 -+++ gcc-2.95.x/gcc/config.in Wed Jun 13 12:45:56 2001 -2 the beginning of your section */ - #undef HAVE_GAS_SUBSECTION_ORDERING - -+/* Define if your assembler supports .hidden. */ -+#undef HAVE_GAS_HIDDEN -+ - /* Define if your assembler uses the old HImode fild and fist notation. */ - #undef HAVE_GAS_FILDS_FISTS diff --git a/sys-devel/gcc/files/2.95.3/gcc-2.95.3-new-atexit.diff b/sys-devel/gcc/files/2.95.3/gcc-2.95.3-new-atexit.diff deleted file mode 100644 index af4de7908197..000000000000 --- a/sys-devel/gcc/files/2.95.3/gcc-2.95.3-new-atexit.diff +++ /dev/null @@ -1,397 +0,0 @@ ---- gcc-2.95.3-orig/gcc/c-common.c Tue Sep 7 03:11:16 1999 -+++ gcc-2.95.3/gcc/c-common.c Tue Aug 14 11:15:53 2001 -@@ -697,7 +697,23 @@ - if (exact_log2 (align) == -1) - error ("requested alignment is not a power of 2"); - else if (is_type) -- TYPE_ALIGN (type) = align; -+ { -+ /* If we have a TYPE_DECL, then copy the type, so that we -+ don't accidentally modify a builtin type. See pushdecl. */ -+ if (decl && TREE_TYPE (decl) != error_mark_node -+ && DECL_ORIGINAL_TYPE (decl) == NULL_TREE) -+ { -+ tree tt = TREE_TYPE (decl); -+ DECL_ORIGINAL_TYPE (decl) = tt; -+ tt = build_type_copy (tt); -+ TYPE_NAME (tt) = decl; -+ TREE_USED (tt) = TREE_USED (decl); -+ TREE_TYPE (decl) = tt; -+ type = tt; -+ } -+ -+ TYPE_ALIGN (type) = align; -+ } - else if (TREE_CODE (decl) != VAR_DECL - && TREE_CODE (decl) != FIELD_DECL) - error_with_decl (decl, ---- gcc-2.95.3-orig/gcc/config/alpha/crtbegin.asm Wed Dec 16 15:00:53 1998 -+++ gcc-2.95.3/gcc/config/alpha/crtbegin.asm Tue Aug 14 11:15:53 2001 -@@ -97,6 +97,31 @@ - # Support recursive calls to exit. - $ptr: .quad __DTOR_LIST__ - -+/* A globally unique widget for c++ local destructors to hang off. -+ -+ This has a unique value in every dso; in the main program its -+ value is zero. The object should be protected. This means the -+ instance in any dso or the main program is not used in any other -+ dso. The dynamic linker takes care of this. */ -+ -+ .global __dso_handle -+ .type __dso_handle,@object -+ .size __dso_handle,8 -+#ifdef SHARED -+.section .data -+ .align 3 -+__dso_handle: -+ .quad __dso_handle -+#else -+.section .bss -+ .align 3 -+__dso_handle: -+ .zero 8 -+#endif -+#ifdef HAVE_GAS_HIDDEN -+ .hidden __dso_handle -+#endif -+ - .text - - .align 3 ---- gcc-2.95.3-orig/gcc/config/i386/i386.c Tue Sep 7 02:38:56 1999 -+++ gcc-2.95.3/gcc/config/i386/i386.c Tue Aug 14 11:17:15 2001 -@@ -291,7 +291,7 @@ - - if (ix86_arch_string == 0) - { -- ix86_arch_string = PROCESSOR_PENTIUM_STRING; -+ ix86_arch_string = PROCESSOR_DEFAULT_STRING; - if (ix86_cpu_string == 0) - ix86_cpu_string = PROCESSOR_DEFAULT_STRING; - } -@@ -308,7 +308,7 @@ - if (i == ptt_size) - { - error ("bad value (%s) for -march= switch", ix86_arch_string); -- ix86_arch_string = PROCESSOR_PENTIUM_STRING; -+ ix86_arch_string = PROCESSOR_DEFAULT_STRING; - ix86_arch = PROCESSOR_DEFAULT; - } - ---- gcc-2.95.3-orig/gcc/config/i386/linux.h Wed Apr 7 19:32:13 1999 -+++ gcc-2.95.3/gcc/config/i386/linux.h Tue Aug 14 11:15:53 2001 -@@ -234,3 +234,21 @@ - } \ - } while (0) - #endif -+ -+#if defined(__PIC__) && defined (USE_GNULIBC_1) -+/* This is a kludge. The i386 GNU/Linux dynamic linker needs ___brk_addr, -+ __environ and atexit (). We have to make sure they are in the .dynsym -+ section. We accomplish it by making a dummy call here. This -+ code is never reached. */ -+ -+#define CRT_END_INIT_DUMMY \ -+ do \ -+ { \ -+ extern void *___brk_addr; \ -+ extern char **__environ; \ -+ \ -+ ___brk_addr = __environ; \ -+ atexit (0); \ -+ } \ -+ while (0) -+#endif ---- gcc-2.95.3-orig/gcc/config/rs6000/rs6000.md Thu Jan 25 08:03:35 2001 -+++ gcc-2.95.3/gcc/config/rs6000/rs6000.md Tue Aug 14 11:15:53 2001 -@@ -6184,7 +6184,9 @@ - reg. So expand it. */ - if (GET_CODE (operands[0]) == SUBREG - && GET_CODE (SUBREG_REG (operands[0])) == REG -- && REGNO (SUBREG_REG (operands[0])) < FIRST_PSEUDO_REGISTER) -+ && REGNO (SUBREG_REG (operands[0])) < FIRST_PSEUDO_REGISTER -+ && (! REG_FUNCTION_VALUE_P (SUBREG_REG (operands[0])) -+ || ! rtx_equal_function_value_matters)) - operands[0] = alter_subreg (operands[0]); - if (GET_CODE (operands[1]) == SUBREG - && GET_CODE (SUBREG_REG (operands[1])) == REG ---- gcc-2.95.3-orig/gcc/crtstuff.c Mon Mar 22 18:43:51 1999 -+++ gcc-2.95.3/gcc/crtstuff.c Tue Aug 14 11:15:53 2001 -@@ -55,6 +55,7 @@ - #include "defaults.h" - #include <stddef.h> - #include "frame.h" -+#include "auto-host.h" - - /* We do not want to add the weak attribute to the declarations of these - routines in frame.h because that will cause the definition of these -@@ -134,6 +135,29 @@ - #ifdef INIT_SECTION_ASM_OP - - #ifdef OBJECT_FORMAT_ELF -+/* Declare the __dso_handle variable. It should have a unique value -+ in every shared-object; in a main program its value is zero. The -+ object should in any case be protected. This means the instance -+ in one DSO or the main program is not used in another object. The -+ dynamic linker takes care of this. */ -+ -+/* XXX Ideally the following should be implemented using -+ __attribute__ ((__visibility__ ("hidden"))) -+ but the __attribute__ support is not yet there. */ -+#define HAVE_GAS_HIDDEN 1 -+#ifdef HAVE_GAS_HIDDEN -+asm (".hidden\t__dso_handle"); -+#endif -+ -+#ifdef CRTSTUFFS_O -+void *__dso_handle = &__dso_handle; -+#else -+void *__dso_handle = 0; -+#endif -+ -+/* The __cxa_finalize function may not be available so we use only a -+ weak declaration. */ -+extern void __cxa_finalize (void *) TARGET_ATTRIBUTE_WEAK; - - /* Run all the global destructors on exit from the program. */ - -@@ -165,6 +189,11 @@ - if (completed) - return; - -+#ifdef CRTSTUFFS_O -+ if (__cxa_finalize) -+ __cxa_finalize (__dso_handle); -+#endif -+ - while (*p) - { - p++; -@@ -379,20 +408,8 @@ - FORCE_INIT_SECTION_ALIGN; - #endif - asm (TEXT_SECTION_ASM_OP); -- --/* This is a kludge. The i386 GNU/Linux dynamic linker needs ___brk_addr, -- __environ and atexit (). We have to make sure they are in the .dynsym -- section. We accomplish it by making a dummy call here. This -- code is never reached. */ -- --#if defined(__linux__) && defined(__PIC__) && defined(__i386__) -- { -- extern void *___brk_addr; -- extern char **__environ; -- -- ___brk_addr = __environ; -- atexit (); -- } -+#ifdef CRT_END_INIT_DUMMY -+ CRT_END_INIT_DUMMY; - #endif - } - ---- gcc-2.95.3-orig/gcc/cse.c Thu Jan 25 08:03:03 2001 -+++ gcc-2.95.3/gcc/cse.c Tue Aug 14 11:15:53 2001 -@@ -695,8 +695,6 @@ - static struct cse_reg_info* get_cse_reg_info PROTO((int)); - static void free_cse_reg_info PROTO((splay_tree_value)); - static void flush_hash_table PROTO((void)); -- --extern int rtx_equal_function_value_matters; - - /* Dump the expressions in the equivalence class indicated by CLASSP. - This function is used only for debugging. */ ---- gcc-2.95.3-orig/gcc/function.c Thu Jan 25 08:03:15 2001 -+++ gcc-2.95.3/gcc/function.c Tue Aug 14 11:15:53 2001 -@@ -5292,7 +5292,18 @@ - - offset_ptr->constant); - } - #else /* !ARGS_GROW_DOWNWARD */ -- pad_to_arg_alignment (initial_offset_ptr, boundary); -+ if (!in_regs -+#ifdef REG_PARM_STACK_SPACE -+ || REG_PARM_STACK_SPACE (fndecl) > 0 -+#else -+ /* For the gcc-2_95-branch we want to make sure not to break something -+ on platforms which pass argument in registers but don't define -+ REG_PARM_STACK_SPACE. So we force the original behaviour here. */ -+ || 1 -+#endif -+ ) -+ pad_to_arg_alignment (initial_offset_ptr, boundary); -+ - *offset_ptr = *initial_offset_ptr; - - #ifdef PUSH_ROUNDING ---- gcc-2.95.3-orig/gcc/rtl.h Thu Jan 25 08:03:22 2001 -+++ gcc-2.95.3/gcc/rtl.h Tue Aug 14 11:16:20 2001 -@@ -168,7 +168,8 @@ - either changing how we compute the frame address or saving and - restoring registers in the prologue and epilogue. - 1 in a MEM if the MEM refers to a scalar, rather than a member of -- an aggregate. */ -+ an aggregate. -+ 1 in a SYMBOL_REF if the symbol is weak. */ - unsigned frame_related : 1; - /* The first element of the operands of this rtx. - The number of operands and their types are controlled -@@ -661,6 +662,9 @@ - /* 1 means a SYMBOL_REF has been the library function in emit_library_call. */ - #define SYMBOL_REF_USED(RTX) ((RTX)->used) - -+/* 1 means a SYMBOL_REF is weak. */ -+#define SYMBOL_REF_WEAK(RTX) ((RTX)->frame_related) -+ - /* For an INLINE_HEADER rtx, FIRST_FUNCTION_INSN is the first insn - of the function that is not involved in copying parameters to - pseudo-registers. FIRST_PARM_INSN is the very first insn of -@@ -888,6 +892,12 @@ - /* For a NOTE_INSN_LIVE note, the original basic block number. */ - #define RANGE_LIVE_ORIG_BLOCK(INSN) (XINT (INSN, 1)) - -+/* Nonzero if we need to distinguish between the return value of this function -+ and the return value of a function called by this function. This helps -+ integrate.c. -+ This is 1 until after the rtl generation pass. */ -+extern int rtx_equal_function_value_matters; -+ - /* Generally useful functions. */ - - /* The following functions accept a wide integer argument. Rather than ---- gcc-2.95.3-orig/gcc/rtlanal.c Thu Jan 25 08:03:22 2001 -+++ gcc-2.95.3/gcc/rtlanal.c Tue Aug 14 11:16:20 2001 -@@ -136,11 +136,9 @@ - switch (code) - { - case SYMBOL_REF: -+ return SYMBOL_REF_WEAK (x); -+ - case LABEL_REF: -- /* SYMBOL_REF is problematic due to the possible presence of -- a #pragma weak, but to say that loads from symbols can trap is -- *very* costly. It's not at all clear what's best here. For -- now, we ignore the impact of #pragma weak. */ - return 0; - - case REG: ---- gcc-2.95.3-orig/gcc/stor-layout.c Thu Mar 11 07:56:20 1999 -+++ gcc-2.95.3/gcc/stor-layout.c Tue Aug 14 11:15:53 2001 -@@ -264,8 +264,8 @@ - if (spec_size == 0 && DECL_NAME (decl) != 0) - abort (); - -- /* Size is specified number of bits. */ -- DECL_SIZE (decl) = size_int (spec_size); -+ /* Size is specified in number of bits. */ -+ DECL_SIZE (decl) = bitsize_int (spec_size, 0); - } - /* Force alignment required for the data type. - But if the decl itself wants greater alignment, don't override that. -@@ -301,7 +301,7 @@ - DECL_ALIGN (decl) = MAX ((unsigned) GET_MODE_ALIGNMENT (xmode), - DECL_ALIGN (decl)); - DECL_MODE (decl) = xmode; -- DECL_SIZE (decl) = size_int (GET_MODE_BITSIZE (xmode)); -+ DECL_SIZE (decl) = bitsize_int (GET_MODE_BITSIZE (xmode), 0); - /* This no longer needs to be accessed as a bit field. */ - DECL_BIT_FIELD (decl) = 0; - } -@@ -520,7 +520,7 @@ - DECL_FIELD_BITPOS (field) = var_size; - else - { -- DECL_FIELD_BITPOS (field) = size_int (const_size); -+ DECL_FIELD_BITPOS (field) = bitsize_int (const_size, 0L); - - /* If this field ended up more aligned than we thought it - would be (we approximate this by seeing if its position -@@ -562,7 +562,7 @@ - - if (var_size == 0) - { -- TYPE_SIZE (rec) = size_int (const_size); -+ TYPE_SIZE (rec) = bitsize_int (const_size, 0L); - } - else - { -@@ -610,7 +610,7 @@ - /* The size of the union, based on the fields scanned so far, - is max (CONST_SIZE, VAR_SIZE). - VAR_SIZE may be null; then CONST_SIZE by itself is the size. */ -- register int const_size = 0; -+ register HOST_WIDE_INT const_size = 0; - register tree var_size = 0; - - #ifdef STRUCTURE_SIZE_BOUNDARY -@@ -627,6 +627,8 @@ - - for (field = TYPE_FIELDS (rec); field; field = TREE_CHAIN (field)) - { -+ tree dsize; -+ - /* Enums which are local to this class need not be laid out. */ - if (TREE_CODE (field) == CONST_DECL || TREE_CODE (field) == TYPE_DECL) - continue; -@@ -645,19 +647,22 @@ - union_align = MAX (union_align, TYPE_ALIGN (TREE_TYPE (field))); - #endif - -+ dsize = DECL_SIZE (field); - if (TREE_CODE (rec) == UNION_TYPE) - { - /* Set union_size to max (decl_size, union_size). - There are more and less general ways to do this. - Use only CONST_SIZE unless forced to use VAR_SIZE. */ - -- if (TREE_CODE (DECL_SIZE (field)) == INTEGER_CST) -+ if (TREE_CODE (dsize) == INTEGER_CST -+ && ! TREE_CONSTANT_OVERFLOW (dsize) -+ && TREE_INT_CST_HIGH (dsize) == 0) - const_size -- = MAX (const_size, TREE_INT_CST_LOW (DECL_SIZE (field))); -+ = MAX (const_size, TREE_INT_CST_LOW (dsize)); - else if (var_size == 0) -- var_size = DECL_SIZE (field); -+ var_size = dsize; - else -- var_size = size_binop (MAX_EXPR, var_size, DECL_SIZE (field)); -+ var_size = size_binop (MAX_EXPR, var_size, dsize); - } - else if (TREE_CODE (rec) == QUAL_UNION_TYPE) - var_size = fold (build (COND_EXPR, sizetype, DECL_QUALIFIER (field), ---- gcc-2.95.3-orig/gcc/toplev.c Thu Jan 25 08:03:23 2001 -+++ gcc-2.95.3/gcc/toplev.c Tue Aug 14 11:15:53 2001 -@@ -137,8 +137,6 @@ - #define DIR_SEPARATOR '/' - #endif - --extern int rtx_equal_function_value_matters; -- - #if ! (defined (VMS) || defined (OS2)) - extern char **environ; - #endif ---- gcc-2.95.3-orig/gcc/varasm.c Mon Feb 19 08:02:02 2001 -+++ gcc-2.95.3/gcc/varasm.c Tue Aug 14 11:16:20 2001 -@@ -723,6 +723,8 @@ - Also handle vars declared register invalidly. */ - if (DECL_RTL (decl) == 0) - { -+ rtx x; -+ - /* Can't use just the variable's own name for a variable - whose scope is less than the whole file. - Concatenate a distinguishing number. */ -@@ -752,8 +754,10 @@ - new_name, strlen (new_name)); - } - -- DECL_RTL (decl) = gen_rtx_MEM (DECL_MODE (decl), -- gen_rtx_SYMBOL_REF (Pmode, name)); -+ x = gen_rtx_SYMBOL_REF (Pmode, name); -+ SYMBOL_REF_WEAK (x) = DECL_WEAK (decl); -+ DECL_RTL (decl) = gen_rtx_MEM (DECL_MODE (decl), x); -+ - MEM_ALIAS_SET (DECL_RTL (decl)) = get_alias_set (decl); - - /* If this variable is to be treated as volatile, show its |