diff options
author | Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> | 2011-07-13 09:57:08 +0000 |
---|---|---|
committer | Rainer Orth <ro@gcc.gnu.org> | 2011-07-13 09:57:08 +0000 |
commit | 2d1efe2d2d19872257bffb1561838805eb5f4fab (patch) | |
tree | cbc547366cfc0f946a4235b8ca7d0cdbd6bb3499 /libgcc | |
parent | 09df293c7aa620c7c5494c7d7dbab2be2da0b040 (diff) | |
download | gcc-2d1efe2d2d19872257bffb1561838805eb5f4fab.zip gcc-2d1efe2d2d19872257bffb1561838805eb5f4fab.tar.gz gcc-2d1efe2d2d19872257bffb1561838805eb5f4fab.tar.bz2 |
Makefile.in (CRT0STUFF_T_CFLAGS): Remove.
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.
From-SVN: r176225
Diffstat (limited to 'libgcc')
-rw-r--r-- | libgcc/ChangeLog | 11 | ||||
-rw-r--r-- | libgcc/config.host | 3 | ||||
-rw-r--r-- | libgcc/config/i386/netware-crt0.c | 79 | ||||
-rw-r--r-- | libgcc/config/i386/t-nwld | 64 | ||||
-rw-r--r-- | libgcc/config/i386/t-slibgcc-nwld | 31 |
5 files changed, 159 insertions, 29 deletions
diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index 0221e75..c358ae4 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 55f8a51..6b6caff 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 0000000..03141ab --- /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 4085872..d08e282 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 0000000..4085872 --- /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)/ |