summaryrefslogtreecommitdiff
path: root/gcc/config/i386/cygming-crtend.c
diff options
context:
space:
mode:
authordannysmith <dannysmith@138bc75d-0d04-0410-961f-82ee72b054a4>2007-06-14 02:38:37 +0000
committerdannysmith <dannysmith@138bc75d-0d04-0410-961f-82ee72b054a4>2007-06-14 02:38:37 +0000
commit9e51385b8df5adbbb04123513f900514bf91e55b (patch)
tree654abed38b0324efc35de124e2281685a7eed705 /gcc/config/i386/cygming-crtend.c
parent4015e6f0a28f072b64a4a8ea5b461c5e4111cd44 (diff)
downloadgcc-9e51385b8df5adbbb04123513f900514bf91e55b.tar.gz
ChangeLog/libgcc
2007-06-14 Danny Smith <dannysmith@users.sourceforge.net> * config.host(*-cygwin* |*-mingw* ): Add crtbegin.o, crtend.o to extra_parts. Add config/i386/t-cygming to tmake_file. * config/i386/t-cygming: New file with rules for crtbegin.o, crtend.o. ChangeLog/gcc 2007-06-14 Danny Smith <dannysmith@users.sourceforge.net> * config/i386/cygming.h (DWARF_FRAME_REGNUM): Define. (DWARF2_UNWIND_INFO): Override default if configured with SJLJ EH disabled. * config/i386/cygwin.h (STARTFILE_SPEC): Add crtbegin.o. (ENDFILE_SPEC): Add crtend.o. * config/i386/mingw32.h (STARTFILE_SEC): Add crtbegin.o. (ENDFILE_SPEC): Add crtend.o. (TARGET_USE_JCR_SECTION): Define. (MD_UNWIND_SUPPORT): Define for 32-bit target. * config/i386/cygming-crtbegin.c: New file. * config/i386/cygming-crtend.c: New file. 2007-06-14 Pascal Obry Pascal Obry <obry@adacore.com> * config/i386/w32-unwind.h: New file. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@125696 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/i386/cygming-crtend.c')
-rwxr-xr-xgcc/config/i386/cygming-crtend.c86
1 files changed, 86 insertions, 0 deletions
diff --git a/gcc/config/i386/cygming-crtend.c b/gcc/config/i386/cygming-crtend.c
new file mode 100755
index 00000000000..92e133099e4
--- /dev/null
+++ b/gcc/config/i386/cygming-crtend.c
@@ -0,0 +1,86 @@
+/* crtend object for windows32 targets.
+ Copyright (C) 2007 Free Software Foundation, Inc.
+
+ Contributed by Danny Smith <dannysmith@users.sourceforge.net>
+
+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 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.)
+
+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 COPYING. If not, write to the Free
+Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+02111-1307, USA. */
+
+/* Target machine header files require this define. */
+#define IN_LIBGCC2
+
+/* auto-host.h is needed by cygming.h for HAVE_GAS_WEAK and here
+ for HAVE_LD_RO_RW_SECTION_MIXING. */
+#include "auto-host.h"
+#include "tconfig.h"
+#include "tsystem.h"
+#include "coretypes.h"
+#include "tm.h"
+#include "unwind-dw2-fde.h"
+
+#if defined(HAVE_LD_RO_RW_SECTION_MIXING)
+# define EH_FRAME_SECTION_CONST const
+#else
+# define EH_FRAME_SECTION_CONST
+#endif
+
+#if DWARF2_UNWIND_INFO
+/* Terminate the frame unwind info section with a 0 as a sentinel;
+ this would be the 'length' field in a real FDE. */
+
+static EH_FRAME_SECTION_CONST int __FRAME_END__[]
+ __attribute__ ((unused, section(EH_FRAME_SECTION_NAME),
+ aligned(4)))
+ = { 0 };
+#endif
+
+#if TARGET_USE_JCR_SECTION
+/* Null terminate the .jcr section array. */
+static void *__JCR_END__[1]
+ __attribute__ ((unused, section(JCR_SECTION_NAME),
+ aligned(sizeof(void *))))
+ = { 0 };
+#endif
+
+
+extern void __gcc_register_frame (void);
+extern void __gcc_deregister_frame (void);
+
+static void register_frame_ctor (void) __attribute__ ((constructor (0)));
+static void deregister_frame_dtor (void) __attribute__ ((destructor (0)));
+
+
+static void
+register_frame_ctor (void)
+{
+ __gcc_register_frame ();
+}
+
+static void
+deregister_frame_dtor (void)
+{
+ __gcc_deregister_frame ();
+}