summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Robbins <drobbins@gentoo.org>2001-08-20 16:05:32 +0000
committerDaniel Robbins <drobbins@gentoo.org>2001-08-20 16:05:32 +0000
commitd15cf50982e45b729fe6ae091bc793fda07e80b0 (patch)
treebc4186f78d814b04759d50af5a1f4e649027fe6e /sys-devel
parentmask entry for the new glibc (diff)
downloadgentoo-2-d15cf50982e45b729fe6ae091bc793fda07e80b0.tar.gz
gentoo-2-d15cf50982e45b729fe6ae091bc793fda07e80b0.tar.bz2
gentoo-2-d15cf50982e45b729fe6ae091bc793fda07e80b0.zip
patch for latest gcc
Diffstat (limited to 'sys-devel')
-rw-r--r--sys-devel/gcc/files/gcc-2.95.3-destructor-atexit.diff123
1 files changed, 123 insertions, 0 deletions
diff --git a/sys-devel/gcc/files/gcc-2.95.3-destructor-atexit.diff b/sys-devel/gcc/files/gcc-2.95.3-destructor-atexit.diff
new file mode 100644
index 000000000000..d9cc67f1efaf
--- /dev/null
+++ b/sys-devel/gcc/files/gcc-2.95.3-destructor-atexit.diff
@@ -0,0 +1,123 @@
+--- 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 Wed Jun 13 12:41:28 2001
+@@ -97,6 +97,31 @@ __EH_FRAME_BEGIN__:
+ # 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
+============================================================
+Index: gcc/crtstuff.c
+--- 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 Wed Jun 13 12:44:34 2001
+@@ -4053,6 +4053,21 @@ EOF
+ 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=
+ if test x$gcc_cv_as != x; then
+--- 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
+