aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlivier Hainque <hainque@adacore.com>2018-05-29 09:41:02 +0000
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>2018-05-29 09:41:02 +0000
commit1f39fcd651b3334e7b12b35f7e822ca6c4b57376 (patch)
tree985fe7a6d4ee2c3b8cc794c84f41a3ef891b88e5
parent8f1edbd3ac32fe45d5bd48fd1fa42a17aee6e14d (diff)
downloadgcc-1f39fcd651b3334e7b12b35f7e822ca6c4b57376.zip
gcc-1f39fcd651b3334e7b12b35f7e822ca6c4b57376.tar.gz
gcc-1f39fcd651b3334e7b12b35f7e822ca6c4b57376.tar.bz2
[Ada] Tighten crtbegin files for VxWorks
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
-rw-r--r--gcc/ada/ChangeLog24
-rw-r--r--gcc/ada/libgnat/system-vxworks7-aarch64-rtp-smp.ads2
-rw-r--r--gcc/ada/libgnat/system-vxworks7-aarch64.ads2
-rw-r--r--gcc/ada/libgnat/system-vxworks7-e500-rtp-smp.ads2
-rw-r--r--gcc/ada/libgnat/system-vxworks7-ppc-rtp-smp.ads2
-rw-r--r--gcc/ada/libgnat/system-vxworks7-ppc64-rtp-smp.ads2
-rw-r--r--gcc/ada/libgnat/system-vxworks7-x86-kernel.ads2
-rw-r--r--gcc/ada/libgnat/system-vxworks7-x86-rtp-smp.ads2
-rw-r--r--gcc/ada/libgnat/system-vxworks7-x86_64-kernel.ads2
-rw-r--r--gcc/ada/libgnat/system-vxworks7-x86_64-rtp-smp.ads2
-rw-r--r--gcc/ada/vx_crtbegin.c10
-rw-r--r--gcc/ada/vx_crtbegin.inc30
-rw-r--r--gcc/ada/vx_crtbegin_array.c (renamed from gcc/ada/vx_crtbegin_auto.c)11
-rw-r--r--gcc/ada/vx_crtbegin_attr.c42
14 files changed, 95 insertions, 40 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index b380a21..0539fd2 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -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.
diff --git a/gcc/ada/libgnat/system-vxworks7-aarch64-rtp-smp.ads b/gcc/ada/libgnat/system-vxworks7-aarch64-rtp-smp.ads
index 6da5838..4fcc8d4 100644
--- a/gcc/ada/libgnat/system-vxworks7-aarch64-rtp-smp.ads
+++ b/gcc/ada/libgnat/system-vxworks7-aarch64-rtp-smp.ads
@@ -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.
diff --git a/gcc/ada/libgnat/system-vxworks7-aarch64.ads b/gcc/ada/libgnat/system-vxworks7-aarch64.ads
index 136bcb5..c53a609 100644
--- a/gcc/ada/libgnat/system-vxworks7-aarch64.ads
+++ b/gcc/ada/libgnat/system-vxworks7-aarch64.ads
@@ -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.
diff --git a/gcc/ada/libgnat/system-vxworks7-e500-rtp-smp.ads b/gcc/ada/libgnat/system-vxworks7-e500-rtp-smp.ads
index 0c608be..fca69e6 100644
--- a/gcc/ada/libgnat/system-vxworks7-e500-rtp-smp.ads
+++ b/gcc/ada/libgnat/system-vxworks7-e500-rtp-smp.ads
@@ -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.
diff --git a/gcc/ada/libgnat/system-vxworks7-ppc-rtp-smp.ads b/gcc/ada/libgnat/system-vxworks7-ppc-rtp-smp.ads
index e4f6b29..66dc139 100644
--- a/gcc/ada/libgnat/system-vxworks7-ppc-rtp-smp.ads
+++ b/gcc/ada/libgnat/system-vxworks7-ppc-rtp-smp.ads
@@ -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.
diff --git a/gcc/ada/libgnat/system-vxworks7-ppc64-rtp-smp.ads b/gcc/ada/libgnat/system-vxworks7-ppc64-rtp-smp.ads
index 243ce22c..dd28309 100644
--- a/gcc/ada/libgnat/system-vxworks7-ppc64-rtp-smp.ads
+++ b/gcc/ada/libgnat/system-vxworks7-ppc64-rtp-smp.ads
@@ -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.
diff --git a/gcc/ada/libgnat/system-vxworks7-x86-kernel.ads b/gcc/ada/libgnat/system-vxworks7-x86-kernel.ads
index f0766fc..d325ba3 100644
--- a/gcc/ada/libgnat/system-vxworks7-x86-kernel.ads
+++ b/gcc/ada/libgnat/system-vxworks7-x86-kernel.ads
@@ -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.
diff --git a/gcc/ada/libgnat/system-vxworks7-x86-rtp-smp.ads b/gcc/ada/libgnat/system-vxworks7-x86-rtp-smp.ads
index 829776b..bafd8f6 100644
--- a/gcc/ada/libgnat/system-vxworks7-x86-rtp-smp.ads
+++ b/gcc/ada/libgnat/system-vxworks7-x86-rtp-smp.ads
@@ -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.
diff --git a/gcc/ada/libgnat/system-vxworks7-x86_64-kernel.ads b/gcc/ada/libgnat/system-vxworks7-x86_64-kernel.ads
index 7d157e1..39d6fb0 100644
--- a/gcc/ada/libgnat/system-vxworks7-x86_64-kernel.ads
+++ b/gcc/ada/libgnat/system-vxworks7-x86_64-kernel.ads
@@ -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.
diff --git a/gcc/ada/libgnat/system-vxworks7-x86_64-rtp-smp.ads b/gcc/ada/libgnat/system-vxworks7-x86_64-rtp-smp.ads
index 02a48ad..145b6ee 100644
--- a/gcc/ada/libgnat/system-vxworks7-x86_64-rtp-smp.ads
+++ b/gcc/ada/libgnat/system-vxworks7-x86_64-rtp-smp.ads
@@ -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.
diff --git a/gcc/ada/vx_crtbegin.c b/gcc/ada/vx_crtbegin.c
index d7c5e3e..b52bdad 100644
--- a/gcc/ada/vx_crtbegin.c
+++ b/gcc/ada/vx_crtbegin.c
@@ -30,10 +30,10 @@
****************************************************************************/
/* 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"
diff --git a/gcc/ada/vx_crtbegin.inc b/gcc/ada/vx_crtbegin.inc
index 111310b..ad3df31 100644
--- a/gcc/ada/vx_crtbegin.inc
+++ b/gcc/ada/vx_crtbegin.inc
@@ -39,37 +39,29 @@
#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_auto.c b/gcc/ada/vx_crtbegin_array.c
index bb541e0..b2740ae 100644
--- a/gcc/ada/vx_crtbegin_auto.c
+++ b/gcc/ada/vx_crtbegin_array.c
@@ -33,15 +33,12 @@
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. */
+ automatic). */
-#define CDTOR_VISIBILITY static
-#include "vx_crtbegin.inc"
+#define CTOR_ATTRIBUTE
+#define DTOR_ATTRIBUTE
-/* Diab C++ for ppc64-vx7 crtbegin wants to declare a
- char dso_handle = 0;
- here. ??? */
+#include "vx_crtbegin.inc"
typedef void (*func_ptr) (void);
func_ptr _dtors [] = {DTOR_NAME, 0};
diff --git a/gcc/ada/vx_crtbegin_attr.c b/gcc/ada/vx_crtbegin_attr.c
new file mode 100644
index 0000000..19fbe60
--- /dev/null
+++ b/gcc/ada/vx_crtbegin_attr.c
@@ -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"