/**************************************************************************** * * * 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__); }