diff options
author | Olivier Hainque <hainque@adacore.com> | 2018-05-29 09:41:02 +0000 |
---|---|---|
committer | Pierre-Marie de Rodat <pmderodat@gcc.gnu.org> | 2018-05-29 09:41:02 +0000 |
commit | 1f39fcd651b3334e7b12b35f7e822ca6c4b57376 (patch) | |
tree | 985fe7a6d4ee2c3b8cc794c84f41a3ef891b88e5 | |
parent | 8f1edbd3ac32fe45d5bd48fd1fa42a17aee6e14d (diff) | |
download | gcc-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/ChangeLog | 24 | ||||
-rw-r--r-- | gcc/ada/libgnat/system-vxworks7-aarch64-rtp-smp.ads | 2 | ||||
-rw-r--r-- | gcc/ada/libgnat/system-vxworks7-aarch64.ads | 2 | ||||
-rw-r--r-- | gcc/ada/libgnat/system-vxworks7-e500-rtp-smp.ads | 2 | ||||
-rw-r--r-- | gcc/ada/libgnat/system-vxworks7-ppc-rtp-smp.ads | 2 | ||||
-rw-r--r-- | gcc/ada/libgnat/system-vxworks7-ppc64-rtp-smp.ads | 2 | ||||
-rw-r--r-- | gcc/ada/libgnat/system-vxworks7-x86-kernel.ads | 2 | ||||
-rw-r--r-- | gcc/ada/libgnat/system-vxworks7-x86-rtp-smp.ads | 2 | ||||
-rw-r--r-- | gcc/ada/libgnat/system-vxworks7-x86_64-kernel.ads | 2 | ||||
-rw-r--r-- | gcc/ada/libgnat/system-vxworks7-x86_64-rtp-smp.ads | 2 | ||||
-rw-r--r-- | gcc/ada/vx_crtbegin.c | 10 | ||||
-rw-r--r-- | gcc/ada/vx_crtbegin.inc | 30 | ||||
-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.c | 42 |
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" |