[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
This commit is contained in:
parent
8f1edbd3ac
commit
1f39fcd651
@ -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.
|
||||
|
@ -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.
|
||||
|
||||
|
@ -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.
|
||||
|
||||
|
@ -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.
|
||||
|
||||
|
@ -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.
|
||||
|
||||
|
@ -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.
|
||||
|
||||
|
@ -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.
|
||||
|
||||
|
@ -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.
|
||||
|
||||
|
@ -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.
|
||||
|
||||
|
@ -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.
|
||||
|
||||
|
@ -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. */
|
||||
purposes on VxWorks. This variant exposes just the ctor/dtor functions
|
||||
without any particular attribute. */
|
||||
|
||||
#define CTOR_ATTRIBUTE
|
||||
#define DTOR_ATTRIBUTE
|
||||
|
||||
#define CDTOR_VISIBILITY
|
||||
#include "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__);
|
||||
}
|
||||
|
@ -33,16 +33,13 @@
|
||||
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 CTOR_ATTRIBUTE
|
||||
#define DTOR_ATTRIBUTE
|
||||
|
||||
#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};
|
42
gcc/ada/vx_crtbegin_attr.c
Normal file
42
gcc/ada/vx_crtbegin_attr.c
Normal file
@ -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"
|
Loading…
x
Reference in New Issue
Block a user