From f876304201c9184718c1d42ddbdda288368204b4 Mon Sep 17 00:00:00 2001 From: Olivier Hainque Date: Fri, 2 Jun 2017 16:02:24 +0000 Subject: [PATCH] vx_crtbegin_auto.c: New file. 2017-06-02 Olivier Hainque * vx_crtbegin_auto.c: New file. * vx_crtbegin.c: New file. * vx_crtbegin.inc: New file. * vx_crtend.c: New file. From-SVN: r248837 --- gcc/ada/ChangeLog | 7 ++++ gcc/ada/vx_crtbegin.c | 39 +++++++++++++++++++ gcc/ada/vx_crtbegin.inc | 76 ++++++++++++++++++++++++++++++++++++++ gcc/ada/vx_crtbegin_auto.c | 44 ++++++++++++++++++++++ gcc/ada/vx_crtend.c | 53 ++++++++++++++++++++++++++ 5 files changed, 219 insertions(+) create mode 100644 gcc/ada/vx_crtbegin.c create mode 100644 gcc/ada/vx_crtbegin.inc create mode 100644 gcc/ada/vx_crtbegin_auto.c create mode 100644 gcc/ada/vx_crtend.c diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 4518f9519b4..1b1a8f178dd 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,10 @@ +2017-06-02 Olivier Hainque + + * vx_crtbegin_auto.c: New file. + * vx_crtbegin.c: New file. + * vx_crtbegin.inc: New file. + * vx_crtend.c: New file. + 2017-05-25 Jonathan Wakely * gcc-interface/utils2.c (compare_elmt_bitpos): Remove redundant diff --git a/gcc/ada/vx_crtbegin.c b/gcc/ada/vx_crtbegin.c new file mode 100644 index 00000000000..82c2993faf9 --- /dev/null +++ b/gcc/ada/vx_crtbegin.c @@ -0,0 +1,39 @@ +/**************************************************************************** + * * + * GNAT COMPILER COMPONENTS * + * * + * V X _ C R T B E G I N * + * * + * C Implementation File * + * * + * Copyright (C) 2016, 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 visible entities so they're picked by the WRS muncher. */ + +#define CDTOR_VISIBILITY +#include "vx_crtbegin.inc" + + diff --git a/gcc/ada/vx_crtbegin.inc b/gcc/ada/vx_crtbegin.inc new file mode 100644 index 00000000000..111310b697f --- /dev/null +++ b/gcc/ada/vx_crtbegin.inc @@ -0,0 +1,76 @@ +/**************************************************************************** + * * + * GNAT COMPILER COMPONENTS * + * * + * V X _ C R T B E G I N * + * * + * C Implementation File * + * * + * Copyright (C) 2016, 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. * + * * + ****************************************************************************/ + +/* Common body for the various flavors of vx_crtbegin C sources we need + to perform eh frame registration/deregistration in various + circumstances. #includers should define CDTOR_VISIBILITY. */ + +#include "tconfig.h" +#include "tsystem.h" +#include "coretypes.h" +#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}...". ??? */ + +#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 + +CDTOR_VISIBILITY void CTOR_NAME (void) CTOR_ATTRIBUTE; +CDTOR_VISIBILITY 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) +{ + static struct object object; + __register_frame_info (__EH_FRAME_BEGIN__, &object); +} + +CDTOR_VISIBILITY void DTOR_NAME (void) +{ + __deregister_frame_info (__EH_FRAME_BEGIN__); +} + diff --git a/gcc/ada/vx_crtbegin_auto.c b/gcc/ada/vx_crtbegin_auto.c new file mode 100644 index 00000000000..b1eb3f5983f --- /dev/null +++ b/gcc/ada/vx_crtbegin_auto.c @@ -0,0 +1,44 @@ +/**************************************************************************** + * * + * GNAT COMPILER COMPONENTS * + * * + * V X _ C R T B E G I N * + * * + * C Implementation File * + * * + * Copyright (C) 2016, 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" + +typedef void (*func_ptr) (void); +func_ptr _dtors [] = {DTOR_NAME, 0}; +func_ptr _ctors [] = {CTOR_NAME, 0}; diff --git a/gcc/ada/vx_crtend.c b/gcc/ada/vx_crtend.c new file mode 100644 index 00000000000..0c04d5dd92a --- /dev/null +++ b/gcc/ada/vx_crtend.c @@ -0,0 +1,53 @@ +/**************************************************************************** + * * + * GNAT COMPILER COMPONENTS * + * * + * V X _ C R T E N D * + * * + * C Implementation File * + * * + * Copyright (C) 2016, 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. * + * * + ****************************************************************************/ + +/* crtend kind of file for ehframe registration/deregistration + purposes on VxWorks. */ + +#include "tconfig.h" +#include "tsystem.h" +#include "coretypes.h" +#include "tm.h" + +# if __INT_MAX__ == 2147483647 +typedef int int32; +# elif __LONG_MAX__ == 2147483647 +typedef long int32; +# elif __SHRT_MAX__ == 2147483647 +typedef short int32; +# else +# error "Missing a 4 byte integer" +# endif + +static const int32 __FRAME_END__[] + __attribute__ ((used, section(EH_FRAME_SECTION_NAME), + aligned(sizeof(int32)))) + = { 0 }; -- 2.30.2