[Ada] Tighten crtbegin files for VxWorks
authorOlivier Hainque <hainque@adacore.com>
Tue, 29 May 2018 09:41:02 +0000 (09:41 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Tue, 29 May 2018 09:41:02 +0000 (09:41 +0000)
Enforce a more explicit distinction of crtbegin objects holding
either functions with ctor/dtor attributes or _ctors/_dtors arrays,
or none of the two (no array, no attributes). Then allow/enforce
different linking strategies for VxWorks 7.

2018-05-29  Olivier Hainque  <hainque@adacore.com>

gcc/ada/

* vx_crtbegin.inc: Use a consistent naming convention for the
registration/deregistration functions across RTP or kernel.  Remove the
ctor/dtor attribute setting based on RTP/kernel, expect the optional
attribute extension to be provided by includers instead.
* vx_crtbegin.c: Mere inclusion of vx_crtbegin.inc with empty attribute
extension for the registration/deregistration functions.
* vx_crtbegin_attr.c: New file. Include vx_crtbegin.inc with explicit
constructor/destructor attribute extensions.
* vx_crtbegin_array.c: New file. Include vx_crtbegin.inc with empty
attribute extensions and declare _ctors/_dtors arrays.
* vx_crtbegin_auto.c: Remove.
* libgnat/system-vxworks7-aarch64-rtp-smp.ads: Use
vxworks7-gnat-crtbe-link.spec.
* libgnat/system-vxworks7-aarch64.ads: Likewise.
* libgnat/system-vxworks7-e500-rtp-smp.ads: Likewise.
* libgnat/system-vxworks7-ppc-rtp-smp.ads: Likewise.
* libgnat/system-vxworks7-ppc64-rtp-smp.ads: Likewise.
* libgnat/system-vxworks7-x86-kernel.ads: Likewise.
* libgnat/system-vxworks7-x86-rtp-smp.ads: Likewise.
* libgnat/system-vxworks7-x86_64-kernel.ads: Likewise.
* libgnat/system-vxworks7-x86_64-rtp-smp.ads: Likewise.

From-SVN: r260876

15 files changed:
gcc/ada/ChangeLog
gcc/ada/libgnat/system-vxworks7-aarch64-rtp-smp.ads
gcc/ada/libgnat/system-vxworks7-aarch64.ads
gcc/ada/libgnat/system-vxworks7-e500-rtp-smp.ads
gcc/ada/libgnat/system-vxworks7-ppc-rtp-smp.ads
gcc/ada/libgnat/system-vxworks7-ppc64-rtp-smp.ads
gcc/ada/libgnat/system-vxworks7-x86-kernel.ads
gcc/ada/libgnat/system-vxworks7-x86-rtp-smp.ads
gcc/ada/libgnat/system-vxworks7-x86_64-kernel.ads
gcc/ada/libgnat/system-vxworks7-x86_64-rtp-smp.ads
gcc/ada/vx_crtbegin.c
gcc/ada/vx_crtbegin.inc
gcc/ada/vx_crtbegin_array.c [new file with mode: 0644]
gcc/ada/vx_crtbegin_attr.c [new file with mode: 0644]
gcc/ada/vx_crtbegin_auto.c [deleted file]

index b380a2106c3c50d2b94965e44ba41c1f3a3b13fa..0539fd2c4722dd11d54b530d40e62933e9a37174 100644 (file)
@@ -1,3 +1,27 @@
+2018-05-29  Olivier Hainque  <hainque@adacore.com>
+
+       * vx_crtbegin.inc: Use a consistent naming convention for the
+       registration/deregistration functions across RTP or kernel.  Remove the
+       ctor/dtor attribute setting based on RTP/kernel, expect the optional
+       attribute extension to be provided by includers instead.
+       * vx_crtbegin.c: Mere inclusion of vx_crtbegin.inc with empty attribute
+       extension for the registration/deregistration functions.
+       * vx_crtbegin_attr.c: New file. Include vx_crtbegin.inc with explicit
+       constructor/destructor attribute extensions.
+       * vx_crtbegin_array.c: New file. Include vx_crtbegin.inc with empty
+       attribute extensions and declare _ctors/_dtors arrays.
+       * vx_crtbegin_auto.c: Remove.
+       * libgnat/system-vxworks7-aarch64-rtp-smp.ads: Use
+       vxworks7-gnat-crtbe-link.spec.
+       * libgnat/system-vxworks7-aarch64.ads: Likewise.
+       * libgnat/system-vxworks7-e500-rtp-smp.ads: Likewise.
+       * libgnat/system-vxworks7-ppc-rtp-smp.ads: Likewise.
+       * libgnat/system-vxworks7-ppc64-rtp-smp.ads: Likewise.
+       * libgnat/system-vxworks7-x86-kernel.ads: Likewise.
+       * libgnat/system-vxworks7-x86-rtp-smp.ads: Likewise.
+       * libgnat/system-vxworks7-x86_64-kernel.ads: Likewise.
+       * libgnat/system-vxworks7-x86_64-rtp-smp.ads: Likewise.
+
 2018-05-29  Piotr Trojanek  <trojanek@adacore.com>
 
        * ali.adb: Minor reformatting.
index 6da583814748629d473b7f5ba79aeec7c289dbbd..4fcc8d4afbc84582022601b6e06909df93dbd56e 100644 (file)
@@ -120,7 +120,7 @@ package System is
 
 private
 
-   pragma Linker_Options ("--specs=vxworks-gnat-crtbe-link.spec");
+   pragma Linker_Options ("--specs=vxworks7-gnat-crtbe-link.spec");
    --  Pull in crtbegin/crtend objects and register exceptions for ZCX.
    --  This is commented out by our Makefile for SJLJ runtimes.
 
index 136bcb544ca3f011fb5913c25ff9a7f0b81954a2..c53a6099bcdc4efdd92744e624da9d11518ad598 100644 (file)
@@ -120,7 +120,7 @@ package System is
 
 private
 
-   pragma Linker_Options ("--specs=vxworks-gnat-crtbe-link.spec");
+   pragma Linker_Options ("--specs=vxworks7-gnat-crtbe-link.spec");
    --  Pull in crtbegin/crtend objects and register exceptions for ZCX.
    --  This is commented out by our Makefile for SJLJ runtimes.
 
index 0c608be2288130b80fea1f473b25da5979e80058..fca69e646523f2306aac389f9135c5f48859bc22 100644 (file)
@@ -120,7 +120,7 @@ package System is
 
 private
 
-   pragma Linker_Options ("--specs=vxworks-gnat-crtbe-link.spec");
+   pragma Linker_Options ("--specs=vxworks7-gnat-crtbe-link.spec");
    --  Pull in crtbegin/crtend objects and register exceptions for ZCX.
    --  This is commented out by our Makefile for SJLJ runtimes.
 
index e4f6b290fb997331934fa6b55b08971a60fc0104..66dc1391b39ea9ebab77a4a4c88aebf67a45d504 100644 (file)
@@ -120,7 +120,7 @@ package System is
 
 private
 
-   pragma Linker_Options ("--specs=vxworks-gnat-crtbe-link.spec");
+   pragma Linker_Options ("--specs=vxworks7-gnat-crtbe-link.spec");
    --  Pull in crtbegin/crtend objects and register exceptions for ZCX.
    --  This is commented out by our Makefile for SJLJ runtimes.
 
index 243ce22ca3b08bc5e4010c8bec7fa64bb6652053..dd2830988b5a66e61ec093f81fb5d70915d882c3 100644 (file)
@@ -120,7 +120,7 @@ package System is
 
 private
 
-   pragma Linker_Options ("--specs=vxworks-gnat-crtbe-link.spec");
+   pragma Linker_Options ("--specs=vxworks7-gnat-crtbe-link.spec");
    --  Pull in crtbegin/crtend objects and register exceptions for ZCX.
    --  This is commented out by our Makefile for SJLJ runtimes.
 
index f0766fc3ad8cfdf645c918e760307e8df0b80aaf..d325ba39671b74b91176bc24d26912d32c0e612c 100644 (file)
@@ -118,7 +118,7 @@ package System is
 
 private
 
-   pragma Linker_Options ("--specs=vxworks-gnat-crtbe-link.spec");
+   pragma Linker_Options ("--specs=vxworks7-gnat-crtbe-link.spec");
    --  Pull in crtbegin/crtend objects and register exceptions for ZCX.
    --  This is commented out by our Makefile for SJLJ runtimes.
 
index 829776b53ea38cebd82431008248e6c1c06164e2..bafd8f6d529d203dfb40424c0d7b468cbd8bba1c 100644 (file)
@@ -118,7 +118,7 @@ package System is
 
 private
 
-   pragma Linker_Options ("--specs=vxworks-gnat-crtbe-link.spec");
+   pragma Linker_Options ("--specs=vxworks7-gnat-crtbe-link.spec");
    --  Pull in crtbegin/crtend objects and register exceptions for ZCX.
    --  This is commented out by our Makefile for SJLJ runtimes.
 
index 7d157e1c2e4c511cb126c3a1c577aa297b8f9d75..39d6fb097814668dee5f243f59d43a7d6c09db81 100644 (file)
@@ -118,7 +118,7 @@ package System is
 
 private
 
-   pragma Linker_Options ("--specs=vxworks-gnat-crtbe-link.spec");
+   pragma Linker_Options ("--specs=vxworks7-gnat-crtbe-link.spec");
    --  Pull in crtbegin/crtend objects and register exceptions for ZCX.
    --  This is commented out by our Makefile for SJLJ runtimes.
 
index 02a48ad1e29899dfd93512f9f818f4a363b92683..145b6eeb99cb0df7938a47856347a6d01820d3cf 100644 (file)
@@ -118,7 +118,7 @@ package System is
 
 private
 
-   pragma Linker_Options ("--specs=vxworks-gnat-crtbe-link.spec");
+   pragma Linker_Options ("--specs=vxworks7-gnat-crtbe-link.spec");
    --  Pull in crtbegin/crtend objects and register exceptions for ZCX.
    --  This is commented out by our Makefile for SJLJ runtimes.
 
index d7c5e3ed9d99c095ef930e2fc6a58b50e710d69b..b52bdade996d4d8608e4eb698e7dabd2c6bb339e 100644 (file)
  ****************************************************************************/
 
 /* 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"
+   purposes on VxWorks.  This variant exposes just the ctor/dtor functions
+   without any particular attribute.  */
 
+#define CTOR_ATTRIBUTE
+#define DTOR_ATTRIBUTE
 
+#include "vx_crtbegin.inc"
index 111310b697f50e79b4347f371833706c726bf2cd..ad3df31cad5abe980cabcdc6b33df980f98f0422 100644 (file)
 #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}...". ???  */
+/* Pick names that the VxWorks muncher will get if involved and leave the
+   symbols with public visibility.  Hiding by default is pointless and even
+   problematic in some configurations.  When the presence of these
+   constructors is an issue, best is not to include the crt object files at
+   all.  */
 
-#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
+#define CTOR_NAME _STI__101___crtbe_register_frame
+#define DTOR_NAME _STD__101___crtbe_deregister_frame
 
-CDTOR_VISIBILITY void CTOR_NAME (void) CTOR_ATTRIBUTE;
-CDTOR_VISIBILITY void DTOR_NAME (void) DTOR_ATTRIBUTE;
+void CTOR_NAME (void) CTOR_ATTRIBUTE;
+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)
+void CTOR_NAME (void)
 {
   static struct object object;
   __register_frame_info (__EH_FRAME_BEGIN__, &object);
 }
 
-CDTOR_VISIBILITY void DTOR_NAME (void)
+void DTOR_NAME (void)
 {
   __deregister_frame_info (__EH_FRAME_BEGIN__);
 }
diff --git a/gcc/ada/vx_crtbegin_array.c b/gcc/ada/vx_crtbegin_array.c
new file mode 100644 (file)
index 0000000..b2740ae
--- /dev/null
@@ -0,0 +1,45 @@
+/****************************************************************************
+ *                                                                          *
+ *                         GNAT COMPILER COMPONENTS                         *
+ *                                                                          *
+ *                          V X _ C R T B E G I N                           *
+ *                                                                          *
+ *                          C Implementation File                           *
+ *                                                                          *
+ *              Copyright (C) 2016-2018, 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).  */
+
+#define CTOR_ATTRIBUTE
+#define DTOR_ATTRIBUTE
+
+#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_crtbegin_attr.c b/gcc/ada/vx_crtbegin_attr.c
new file mode 100644 (file)
index 0000000..19fbe60
--- /dev/null
@@ -0,0 +1,42 @@
+/****************************************************************************
+ *                                                                          *
+ *                         GNAT COMPILER COMPONENTS                         *
+ *                                                                          *
+ *                          V X _ C R T B E G I N                           *
+ *                                                                          *
+ *                          C Implementation File                           *
+ *                                                                          *
+ *              Copyright (C) 2016-2018, 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 explicit constructors, expected to be placed in a .ctors/.dtors
+   section.  */
+
+/* 101 is the highest user level priority allowed by VxWorks.  */
+
+#define CTOR_ATTRIBUTE __attribute__((constructor(101)))
+#define DTOR_ATTRIBUTE __attribute__((destructor(101)))
+
+#include "vx_crtbegin.inc"
diff --git a/gcc/ada/vx_crtbegin_auto.c b/gcc/ada/vx_crtbegin_auto.c
deleted file mode 100644 (file)
index bb541e0..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-/****************************************************************************
- *                                                                          *
- *                         GNAT COMPILER COMPONENTS                         *
- *                                                                          *
- *                          V X _ C R T B E G I N                           *
- *                                                                          *
- *                          C Implementation File                           *
- *                                                                          *
- *              Copyright (C) 2016-2018, 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"
-
-/* Diab C++ for ppc64-vx7 crtbegin wants to declare a
-   char dso_handle = 0;
-   here. ???  */
-
-typedef void (*func_ptr) (void);
-func_ptr _dtors [] = {DTOR_NAME, 0};
-func_ptr _ctors [] = {CTOR_NAME, 0};