From: Olivier Hainque Date: Tue, 29 May 2018 09:41:02 +0000 (+0000) Subject: [Ada] Tighten crtbegin files for VxWorks X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=1f39fcd651b3334e7b12b35f7e822ca6c4b57376;p=gcc.git [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 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 --- diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index b380a2106c3..0539fd2c472 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,27 @@ +2018-05-29 Olivier Hainque + + * 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 * 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 6da58381474..4fcc8d4afbc 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 136bcb544ca..c53a6099bcd 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 0c608be2288..fca69e64652 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 e4f6b290fb9..66dc1391b39 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 243ce22ca3b..dd2830988b5 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 f0766fc3ad8..d325ba39671 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 829776b53ea..bafd8f6d529 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 7d157e1c2e4..39d6fb09781 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 02a48ad1e29..145b6eeb99c 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 d7c5e3ed9d9..b52bdade996 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 111310b697f..ad3df31cad5 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_array.c b/gcc/ada/vx_crtbegin_array.c new file mode 100644 index 00000000000..b2740ae4406 --- /dev/null +++ b/gcc/ada/vx_crtbegin_array.c @@ -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 * + * . * + * * + * 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 index 00000000000..19fbe6061bb --- /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 * + * . * + * * + * 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 index bb541e00eb0..00000000000 --- a/gcc/ada/vx_crtbegin_auto.c +++ /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 * - * . * - * * - * 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};