diff options
author | Olivier Hainque <hainque@adacore.com> | 2017-06-02 16:02:24 +0000 |
---|---|---|
committer | Olivier Hainque <hainque@gcc.gnu.org> | 2017-06-02 16:02:24 +0000 |
commit | f876304201c9184718c1d42ddbdda288368204b4 (patch) | |
tree | 4d21f509030a90fa8fdb3d2f880313635e757b95 | |
parent | ffa8a92137cd41829d477be4ef1c1c28849ffee1 (diff) | |
download | gcc-f876304201c9184718c1d42ddbdda288368204b4.zip gcc-f876304201c9184718c1d42ddbdda288368204b4.tar.gz gcc-f876304201c9184718c1d42ddbdda288368204b4.tar.bz2 |
vx_crtbegin_auto.c: New file.
2017-06-02 Olivier Hainque <hainque@adacore.com>
* vx_crtbegin_auto.c: New file.
* vx_crtbegin.c: New file.
* vx_crtbegin.inc: New file.
* vx_crtend.c: New file.
From-SVN: r248837
-rw-r--r-- | gcc/ada/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/ada/vx_crtbegin.c | 39 | ||||
-rw-r--r-- | gcc/ada/vx_crtbegin.inc | 76 | ||||
-rw-r--r-- | gcc/ada/vx_crtbegin_auto.c | 44 | ||||
-rw-r--r-- | gcc/ada/vx_crtend.c | 53 |
5 files changed, 219 insertions, 0 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 4518f95..1b1a8f1 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,10 @@ +2017-06-02 Olivier Hainque <hainque@adacore.com> + + * 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 <jwakely@redhat.com> * 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 0000000..82c2993 --- /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 * + * <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 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 0000000..111310b --- /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 * + * <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. * + * * + ****************************************************************************/ + +/* 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 0000000..b1eb3f5 --- /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 * + * <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 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 0000000..0c04d5d --- /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 * + * <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. * + * * + ****************************************************************************/ + +/* 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 }; |