summaryrefslogtreecommitdiff
path: root/gcc/ada/vx_crtbegin.inc
blob: 111310b697f50e79b4347f371833706c726bf2cd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
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__);
}