vx_crtbegin_auto.c: New file.
authorOlivier Hainque <hainque@adacore.com>
Fri, 2 Jun 2017 16:02:24 +0000 (16:02 +0000)
committerOlivier Hainque <hainque@gcc.gnu.org>
Fri, 2 Jun 2017 16:02:24 +0000 (16:02 +0000)
2017-06-02  Olivier Hainque  <hainque@adacore.com>

* vx_crtbegin_auto.c: New file.
* vx_crtbegin.c: New file.
* vx_crtbegin.inc: New file.
* vx_crtend.c: New file.

From-SVN: r248837

gcc/ada/ChangeLog
gcc/ada/vx_crtbegin.c [new file with mode: 0644]
gcc/ada/vx_crtbegin.inc [new file with mode: 0644]
gcc/ada/vx_crtbegin_auto.c [new file with mode: 0644]
gcc/ada/vx_crtend.c [new file with mode: 0644]

index 4518f9519b4756098c54145985f1fade923b75d1..1b1a8f178dd6ef729b73fcc9989c95669c5241ec 100644 (file)
@@ -1,3 +1,10 @@
+2017-06-02  Olivier Hainque  <hainque@adacore.com>
+
+       * vx_crtbegin_auto.c: New file.
+       * vx_crtbegin.c: New file.
+       * vx_crtbegin.inc: New file.
+       * vx_crtend.c: New file.
+
 2017-05-25  Jonathan Wakely  <jwakely@redhat.com>
 
        * gcc-interface/utils2.c (compare_elmt_bitpos): Remove redundant
diff --git a/gcc/ada/vx_crtbegin.c b/gcc/ada/vx_crtbegin.c
new file mode 100644 (file)
index 0000000..82c2993
--- /dev/null
@@ -0,0 +1,39 @@
+/****************************************************************************
+ *                                                                          *
+ *                         GNAT COMPILER COMPONENTS                         *
+ *                                                                          *
+ *                          V X _ C R T B E G I N                           *
+ *                                                                          *
+ *                          C Implementation File                           *
+ *                                                                          *
+ *              Copyright (C) 2016, Free Software Foundation, Inc.          *
+ *                                                                          *
+ * GNAT is free software;  you can  redistribute it  and/or modify it under *
+ * terms of the  GNU General Public License as published  by the Free Soft- *
+ * ware  Foundation;  either version 3,  or (at your option) any later ver- *
+ * sion.  GNAT is distributed in the hope that it will be useful, but WITH- *
+ * OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY *
+ * or FITNESS FOR A PARTICULAR PURPOSE.                                     *
+ *                                                                          *
+ * As a special exception under Section 7 of GPL version 3, you are granted *
+ * additional permissions described in the GCC Runtime Library Exception,   *
+ * version 3.1, as published by the Free Software Foundation.               *
+ *                                                                          *
+ * You should have received a copy of the GNU General Public License and    *
+ * a copy of the GCC Runtime Library Exception along with this program;     *
+ * see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    *
+ * <http://www.gnu.org/licenses/>.                                          *
+ *                                                                          *
+ * GNAT was originally developed  by the GNAT team at  New York University. *
+ * Extensive contributions were provided by Ada Core Technologies Inc.      *
+ *                                                                          *
+ ****************************************************************************/
+
+/* crtbegin kind of file for ehframe registration/deregistration
+   purposes on VxWorks.  This variant exposes the ctor/dtor functions
+   as visible entities so they're picked by the WRS muncher.  */
+
+#define CDTOR_VISIBILITY
+#include "vx_crtbegin.inc"
+
+
diff --git a/gcc/ada/vx_crtbegin.inc b/gcc/ada/vx_crtbegin.inc
new file mode 100644 (file)
index 0000000..111310b
--- /dev/null
@@ -0,0 +1,76 @@
+/****************************************************************************
+ *                                                                          *
+ *                         GNAT COMPILER COMPONENTS                         *
+ *                                                                          *
+ *                          V X _ C R T B E G I N                           *
+ *                                                                          *
+ *                          C Implementation File                           *
+ *                                                                          *
+ *              Copyright (C) 2016, Free Software Foundation, Inc.          *
+ *                                                                          *
+ * GNAT is free software;  you can  redistribute it  and/or modify it under *
+ * terms of the  GNU General Public License as published  by the Free Soft- *
+ * ware  Foundation;  either version 3,  or (at your option) any later ver- *
+ * sion.  GNAT is distributed in the hope that it will be useful, but WITH- *
+ * OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY *
+ * or FITNESS FOR A PARTICULAR PURPOSE.                                     *
+ *                                                                          *
+ * As a special exception under Section 7 of GPL version 3, you are granted *
+ * additional permissions described in the GCC Runtime Library Exception,   *
+ * version 3.1, as published by the Free Software Foundation.               *
+ *                                                                          *
+ * You should have received a copy of the GNU General Public License and    *
+ * a copy of the GCC Runtime Library Exception along with this program;     *
+ * see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    *
+ * <http://www.gnu.org/licenses/>.                                          *
+ *                                                                          *
+ * GNAT was originally developed  by the GNAT team at  New York University. *
+ * Extensive contributions were provided by Ada Core Technologies Inc.      *
+ *                                                                          *
+ ****************************************************************************/
+
+/* Common body for the various flavors of vx_crtbegin C sources we need
+   to perform eh frame registration/deregistration in various
+   circumstances.  #includers should define CDTOR_VISIBILITY. */
+
+#include "tconfig.h"
+#include "tsystem.h"
+#include "coretypes.h"
+#include "tm.h"
+#include "unwind-dw2-fde.h"
+
+/* Pick names that the VxWorks muncher will get if involved.
+   Note: ppc64-vx7 diab uses "_STI_15..." for C++ in kernel mode,
+   not "_GLOBAL__{I,D}...". ???  */
+
+#ifdef __RTP__
+/* 101 is the highest user level priority allowed by VxWorks.  */
+#define CTOR_NAME _STI__101____crtbe_register_frame
+#define DTOR_NAME _STI__101____crtbe_deregister_frame
+#define CTOR_ATTRIBUTE __attribute__((constructor(101)))
+#define DTOR_ATTRIBUTE __attribute__((destructor(101)))
+#else
+#define CTOR_NAME _GLOBAL__I___crtbe_register_frame
+#define DTOR_NAME _GLOBAL__D___crtbe_deregister_frame
+#define CTOR_ATTRIBUTE __attribute__((unused))
+#define DTOR_ATTRIBUTE __attribute__((unused))
+#endif
+
+CDTOR_VISIBILITY void CTOR_NAME (void) CTOR_ATTRIBUTE;
+CDTOR_VISIBILITY void DTOR_NAME (void) DTOR_ATTRIBUTE;
+
+static const char __EH_FRAME_BEGIN__[]
+__attribute__((section(EH_FRAME_SECTION_NAME), aligned(4)))
+  = { };
+
+CDTOR_VISIBILITY void CTOR_NAME (void)
+{
+  static struct object object;
+  __register_frame_info (__EH_FRAME_BEGIN__, &object);
+}
+
+CDTOR_VISIBILITY void DTOR_NAME (void)
+{
+  __deregister_frame_info (__EH_FRAME_BEGIN__);
+}
+
diff --git a/gcc/ada/vx_crtbegin_auto.c b/gcc/ada/vx_crtbegin_auto.c
new file mode 100644 (file)
index 0000000..b1eb3f5
--- /dev/null
@@ -0,0 +1,44 @@
+/****************************************************************************
+ *                                                                          *
+ *                         GNAT COMPILER COMPONENTS                         *
+ *                                                                          *
+ *                          V X _ C R T B E G I N                           *
+ *                                                                          *
+ *                          C Implementation File                           *
+ *                                                                          *
+ *              Copyright (C) 2016, Free Software Foundation, Inc.          *
+ *                                                                          *
+ * GNAT is free software;  you can  redistribute it  and/or modify it under *
+ * terms of the  GNU General Public License as published  by the Free Soft- *
+ * ware  Foundation;  either version 3,  or (at your option) any later ver- *
+ * sion.  GNAT is distributed in the hope that it will be useful, but WITH- *
+ * OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY *
+ * or FITNESS FOR A PARTICULAR PURPOSE.                                     *
+ *                                                                          *
+ * As a special exception under Section 7 of GPL version 3, you are granted *
+ * additional permissions described in the GCC Runtime Library Exception,   *
+ * version 3.1, as published by the Free Software Foundation.               *
+ *                                                                          *
+ * You should have received a copy of the GNU General Public License and    *
+ * a copy of the GCC Runtime Library Exception along with this program;     *
+ * see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    *
+ * <http://www.gnu.org/licenses/>.                                          *
+ *                                                                          *
+ * GNAT was originally developed  by the GNAT team at  New York University. *
+ * Extensive contributions were provided by Ada Core Technologies Inc.      *
+ *                                                                          *
+ ****************************************************************************/
+
+/* crtbegin kind of file for ehframe registration/deregistration
+   purposes on VxWorks.  This variant provides _ctors and _dtors
+   arrays that the kernel module loader knows to process when it has
+   been configured for this purpose (c++ constructor strategy set to
+   automatic).  The ctor/dtor functions need not be visible in this
+   case.  */
+
+#define CDTOR_VISIBILITY static
+#include "vx_crtbegin.inc"
+
+typedef void (*func_ptr) (void);
+func_ptr _dtors [] = {DTOR_NAME, 0};
+func_ptr _ctors [] = {CTOR_NAME, 0};
diff --git a/gcc/ada/vx_crtend.c b/gcc/ada/vx_crtend.c
new file mode 100644 (file)
index 0000000..0c04d5d
--- /dev/null
@@ -0,0 +1,53 @@
+/****************************************************************************
+ *                                                                          *
+ *                         GNAT COMPILER COMPONENTS                         *
+ *                                                                          *
+ *                            V X _ C R T E N D                             *
+ *                                                                          *
+ *                          C Implementation File                           *
+ *                                                                          *
+ *              Copyright (C) 2016, Free Software Foundation, Inc.          *
+ *                                                                          *
+ * GNAT is free software;  you can  redistribute it  and/or modify it under *
+ * terms of the  GNU General Public License as published  by the Free Soft- *
+ * ware  Foundation;  either version 3,  or (at your option) any later ver- *
+ * sion.  GNAT is distributed in the hope that it will be useful, but WITH- *
+ * OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY *
+ * or FITNESS FOR A PARTICULAR PURPOSE.                                     *
+ *                                                                          *
+ * As a special exception under Section 7 of GPL version 3, you are granted *
+ * additional permissions described in the GCC Runtime Library Exception,   *
+ * version 3.1, as published by the Free Software Foundation.               *
+ *                                                                          *
+ * You should have received a copy of the GNU General Public License and    *
+ * a copy of the GCC Runtime Library Exception along with this program;     *
+ * see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    *
+ * <http://www.gnu.org/licenses/>.                                          *
+ *                                                                          *
+ * GNAT was originally developed  by the GNAT team at  New York University. *
+ * Extensive contributions were provided by Ada Core Technologies Inc.      *
+ *                                                                          *
+ ****************************************************************************/
+
+/* crtend kind of file for ehframe registration/deregistration
+   purposes on VxWorks.  */
+
+#include "tconfig.h"
+#include "tsystem.h"
+#include "coretypes.h"
+#include "tm.h"
+
+# if __INT_MAX__ == 2147483647
+typedef int int32;
+# elif __LONG_MAX__ == 2147483647
+typedef long int32;
+# elif __SHRT_MAX__ == 2147483647
+typedef short int32;
+# else
+#  error "Missing a 4 byte integer"
+# endif
+
+static const int32 __FRAME_END__[]
+     __attribute__ ((used, section(EH_FRAME_SECTION_NAME),
+                    aligned(sizeof(int32))))
+     = { 0 };