summaryrefslogtreecommitdiff
path: root/libgcc
diff options
context:
space:
mode:
authorro <ro@138bc75d-0d04-0410-961f-82ee72b054a4>2011-07-13 09:57:08 +0000
committerro <ro@138bc75d-0d04-0410-961f-82ee72b054a4>2011-07-13 09:57:08 +0000
commitef3ab47f2b8bafc52617570f7cfa91ff2d29beab (patch)
treecbc547366cfc0f946a4235b8ca7d0cdbd6bb3499 /libgcc
parent934438078477ce4823b09c6cf92a6231dd69bbf3 (diff)
downloadgcc-ef3ab47f2b8bafc52617570f7cfa91ff2d29beab.tar.gz
gcc:
* Makefile.in (CRT0STUFF_T_CFLAGS): Remove. ($(T)crt0.o, $(T)mcrt0.o, s-crt0): Remove. * config/i386/netware-crt0.c: Move to ../libgcc/config/i386. * config/i386/t-nwld (CRTSTUFF_T_CFLAGS, CRT0STUFF_T_CFLAGS): Remove. (CRT0_S, MCRT0_S): Remove. ($(T)libgcc.def, $(T)libc.def, $(T)libcpre.def, $(T)posixpre.def): Remove. (s-crt0): Remove. * config.gcc (i[3456x]86-*-netware*): Remove extra_parts. libgcc: * config/i386/netware-crt0.c: New file. * config/i386/t-nwld: Rename to ... * config/i386/t-slibgcc-nwld: ... this. * config/i386/t-nwld: New file. * config.host (i[3456x]86-*-netware*): Add i386/t-slibgcc-nwld to tmake_file. Add crt0.o, libgcc.def, libc.def, libcpre.def, posixpre.def to extra_parts. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@176225 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libgcc')
-rw-r--r--libgcc/ChangeLog11
-rw-r--r--libgcc/config.host3
-rw-r--r--libgcc/config/i386/netware-crt0.c79
-rw-r--r--libgcc/config/i386/t-nwld64
-rw-r--r--libgcc/config/i386/t-slibgcc-nwld31
5 files changed, 159 insertions, 29 deletions
diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog
index 0221e751919..c358ae4126a 100644
--- a/libgcc/ChangeLog
+++ b/libgcc/ChangeLog
@@ -1,3 +1,14 @@
+2011-07-13 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * config/i386/netware-crt0.c: New file.
+ * config/i386/t-nwld: Rename to ...
+ * config/i386/t-slibgcc-nwld: ... this.
+ * config/i386/t-nwld: New file.
+ * config.host (i[3456x]86-*-netware*): Add i386/t-slibgcc-nwld to
+ tmake_file.
+ Add crt0.o, libgcc.def, libc.def, libcpre.def, posixpre.def to
+ extra_parts.
+
2011-07-11 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* configure.ac (i?86-*-solaris2*): Use libgcc copy of
diff --git a/libgcc/config.host b/libgcc/config.host
index 55f8a510766..6b6caffde95 100644
--- a/libgcc/config.host
+++ b/libgcc/config.host
@@ -369,7 +369,8 @@ i[34567]86-*-lynxos*)
i[3456x]86-*-netware*)
case /${with_ld} in
*/nwld)
- tmake_file="${tmake_file} i386/t-nwld"
+ tmake_file="${tmake_file} i386/t-nwld i386/t-slibgcc-nwld"
+ extra_parts="${extra_parts} crt0.o libgcc.def libc.def libcpre.def posixpre.def"
;;
esac
;;
diff --git a/libgcc/config/i386/netware-crt0.c b/libgcc/config/i386/netware-crt0.c
new file mode 100644
index 00000000000..03141ab9987
--- /dev/null
+++ b/libgcc/config/i386/netware-crt0.c
@@ -0,0 +1,79 @@
+/* Startup routines for NetWare.
+ Contributed by Jan Beulich (jbeulich@novell.com)
+ Copyright (C) 2004, 2007 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC 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 3, or (at your option)
+any later version.
+
+GCC 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 GCC; see the file COPYING3. If not see
+<http://www.gnu.org/licenses/>. */
+
+#include <stddef.h>
+#include <stdint.h>
+#include "unwind-dw2-fde.h"
+
+int __init_environment (void *);
+int __deinit_environment (void *);
+
+
+#define SECTION_DECL(name, decl) decl __attribute__((__section__(name)))
+
+SECTION_DECL(".ctors", void(*const __CTOR_LIST__)(void))
+ = (void(*)(void))(intptr_t)-1;
+SECTION_DECL(".ctors$_", void(*const __CTOR_END__)(void)) = NULL;
+
+SECTION_DECL(".dtors", void(*const __DTOR_LIST__)(void))
+ = (void(*)(void))(intptr_t)-1;
+SECTION_DECL(".dtors$_", void(*const __DTOR_END__)(void)) = NULL;
+
+/* No need to use the __[de]register_frame_info_bases functions since
+ for us the bases are NULL always anyway. */
+void __register_frame_info (const void *, struct object *)
+ __attribute__((__weak__));
+void *__deregister_frame_info (const void *) __attribute__((__weak__));
+
+SECTION_DECL(".eh_frame", /*const*/ uint32_t __EH_FRAME_BEGIN__[]) = { };
+SECTION_DECL(".eh_frame$_", /*const*/ uint32_t __EH_FRAME_END__[]) = {0};
+
+int
+__init_environment (void *unused __attribute__((__unused__)))
+{
+ void (* const * pctor)(void);
+ static struct object object;
+
+ if (__register_frame_info)
+ __register_frame_info (__EH_FRAME_BEGIN__, &object);
+
+ for (pctor = &__CTOR_END__ - 1; pctor > &__CTOR_LIST__; --pctor)
+ if (*pctor != NULL)
+ (*pctor)();
+
+ return 0;
+}
+
+int
+__deinit_environment (void *unused __attribute__((__unused__)))
+{
+ /* This should be static to prevent calling the same destructor
+ twice (just in case where we get here multiple times). */
+ static void (* const * pdtor)(void) = &__DTOR_LIST__ + 1;
+
+ while (pdtor < &__DTOR_END__)
+ if (*pdtor++ != NULL)
+ pdtor[-1] ();
+
+ if (__deregister_frame_info)
+ __deregister_frame_info(__EH_FRAME_BEGIN__);
+
+ return 0;
+}
diff --git a/libgcc/config/i386/t-nwld b/libgcc/config/i386/t-nwld
index 408587273da..d08e2827f65 100644
--- a/libgcc/config/i386/t-nwld
+++ b/libgcc/config/i386/t-nwld
@@ -1,31 +1,39 @@
-# Build a shared libgcc library for NetWare.
+# Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011
+# Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC 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 3, or (at your option)
+# any later version.
+#
+# GCC 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 GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
-SHLIB_EXT = .nlm
-SHLIB_NAME = @shlib_base_name@.nlm
-SHLIB_SLIBDIR_QUAL = @shlib_slibdir_qual@
-SHLIB_DEF = $(gcc_srcdir)/config/i386/netware-libgcc.def
-SHLIB_MAP = $(gcc_srcdir)/config/i386/netware-libgcc.exp
-SHLIB_SRC = $(gcc_srcdir)/config/i386/netware-libgcc.c
+crt0.o: $(srcdir)/config/i386/netware-crt0.c
+ $(crt_compile) $(CRTSTUFF_T_CFLAGS) -c $<
-SHLIB_LINK = set -e; \
- cat $(SHLIB_DEF) >@shlib_base_name@.def; \
- echo "name $(SHLIB_NAME)" >>@shlib_base_name@.def; \
- echo "version $(version)" | sed "s!\.!,!g" >>@shlib_base_name@.def; \
- touch build; \
- echo "build $$(expr $$(<build) + 0)" >>@shlib_base_name@.def; \
- echo "export @$(SHLIB_MAP)" >>@shlib_base_name@.def; \
- if mpkxdc -n -p @shlib_base_name@.xdc; \
- then echo "xdcdata @shlib_base_name@.xdc" >>@shlib_base_name@.def; \
- else echo "WARNING: $(SHLIB_NAME) built without XDC data will not work well." 1>&2; \
- fi; \
- $(CC) $(LIBGCC2_CFLAGS) -o $(SHLIB_NAME) \
- $(SHLIB_SRC) -posix -static-libgcc -lnetware \
- -Wl,--Map,--map-info,full,--strip-all,--def-file,@shlib_base_name@.def; \
- rm -f @shlib_base_name@.imp; $(LN_S) $(SHLIB_MAP) @shlib_base_name@.imp; \
- rm -f libgcc.imp; $(LN_S) @shlib_base_name@.imp libgcc.imp; \
- expr $$(<build) + 1 >build
+CRTSTUFF_T_CFLAGS = -mpreferred-stack-boundary=2
-SHLIB_INSTALL = \
- $(SHELL) $(srcdir)/mkinstalldirs $(slibdir)$(SHLIB_SLIBDIR_QUAL); \
- $(INSTALL_DATA) $(SHLIB_NAME) $(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_NAME); \
- $(INSTALL_DATA) @shlib_base_name@.imp $(DESTDIR)$(libsubdir)/
+libgcc.def: $(srcdir)/config/i386/t-nwld
+ echo "module libgcc_s" >$@
+
+libc.def: $(srcdir)/config/i386/t-nwld
+ echo "module libc" >$@
+
+libcpre.def: $(srcdir)/config/i386/t-nwld
+ echo "start _LibCPrelude" >$@
+ echo "exit _LibCPostlude" >>$@
+ echo "check _LibCCheckUnload" >>$@
+
+posixpre.def: $(srcdir)/config/i386/t-nwld
+ echo "start POSIX_Start" >$@
+ echo "exit POSIX_Stop" >>$@
+ echo "check POSIX_CheckUnload" >>$@
diff --git a/libgcc/config/i386/t-slibgcc-nwld b/libgcc/config/i386/t-slibgcc-nwld
new file mode 100644
index 00000000000..408587273da
--- /dev/null
+++ b/libgcc/config/i386/t-slibgcc-nwld
@@ -0,0 +1,31 @@
+# Build a shared libgcc library for NetWare.
+
+SHLIB_EXT = .nlm
+SHLIB_NAME = @shlib_base_name@.nlm
+SHLIB_SLIBDIR_QUAL = @shlib_slibdir_qual@
+SHLIB_DEF = $(gcc_srcdir)/config/i386/netware-libgcc.def
+SHLIB_MAP = $(gcc_srcdir)/config/i386/netware-libgcc.exp
+SHLIB_SRC = $(gcc_srcdir)/config/i386/netware-libgcc.c
+
+SHLIB_LINK = set -e; \
+ cat $(SHLIB_DEF) >@shlib_base_name@.def; \
+ echo "name $(SHLIB_NAME)" >>@shlib_base_name@.def; \
+ echo "version $(version)" | sed "s!\.!,!g" >>@shlib_base_name@.def; \
+ touch build; \
+ echo "build $$(expr $$(<build) + 0)" >>@shlib_base_name@.def; \
+ echo "export @$(SHLIB_MAP)" >>@shlib_base_name@.def; \
+ if mpkxdc -n -p @shlib_base_name@.xdc; \
+ then echo "xdcdata @shlib_base_name@.xdc" >>@shlib_base_name@.def; \
+ else echo "WARNING: $(SHLIB_NAME) built without XDC data will not work well." 1>&2; \
+ fi; \
+ $(CC) $(LIBGCC2_CFLAGS) -o $(SHLIB_NAME) \
+ $(SHLIB_SRC) -posix -static-libgcc -lnetware \
+ -Wl,--Map,--map-info,full,--strip-all,--def-file,@shlib_base_name@.def; \
+ rm -f @shlib_base_name@.imp; $(LN_S) $(SHLIB_MAP) @shlib_base_name@.imp; \
+ rm -f libgcc.imp; $(LN_S) @shlib_base_name@.imp libgcc.imp; \
+ expr $$(<build) + 1 >build
+
+SHLIB_INSTALL = \
+ $(SHELL) $(srcdir)/mkinstalldirs $(slibdir)$(SHLIB_SLIBDIR_QUAL); \
+ $(INSTALL_DATA) $(SHLIB_NAME) $(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_NAME); \
+ $(INSTALL_DATA) @shlib_base_name@.imp $(DESTDIR)$(libsubdir)/