mirror of
https://github.com/adtools/clib2.git
synced 2025-12-08 14:59:05 +00:00
- Reimplemented the constructor/destructor invocation code for GCC.
Both the 68k and PowerPC platform now invoke them in the same order and the 68k code uses the designated invocation priorities. The PowerPC destructor function now sets up the exit() jmp_buf before the destructor functions are called. git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14874 87f5fb63-7c3d-0410-a384-fd976d0f7a62
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: macros.h,v 1.12 2005-03-10 07:53:57 obarthel Exp $
|
||||
* $Id: macros.h,v 1.13 2005-03-10 09:55:03 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@@ -155,54 +155,50 @@
|
||||
|
||||
#ifdef __SASC
|
||||
|
||||
#define CLIB_CONSTRUCTOR(name) int __stdargs _STI_500_##name(void)
|
||||
#define CLIB_DESTRUCTOR(name) void __stdargs _STD_500_##name(void)
|
||||
#define PROFILE_CONSTRUCTOR(name) int __stdargs _STI_150_##name(void)
|
||||
#define PROFILE_DESTRUCTOR(name) void __stdargs _STD_150_##name(void)
|
||||
#define CONSTRUCTOR_SUCCEED() return(0)
|
||||
#define CONSTRUCTOR_FAIL() return(1)
|
||||
#define CONSTRUCTOR(name,pri) \
|
||||
int __stdargs _STI_##pri##_##name(void); \
|
||||
int __stdargs _STI_##pri##_##name(void)
|
||||
|
||||
#define DESTRUCTOR(name,pri) \
|
||||
int __stdargs _STD_##pri##_##name(void); \
|
||||
int __stdargs _STD_##pri##_##name(void)
|
||||
|
||||
#define CONSTRUCTOR_SUCCEED() \
|
||||
return(0)
|
||||
|
||||
#define CONSTRUCTOR_FAIL() \
|
||||
return(1)
|
||||
|
||||
#endif /* __SASC */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifdef __GNUC__
|
||||
|
||||
#if defined(__amigaos4__)
|
||||
|
||||
#define CONSTRUCTOR(name,pri) \
|
||||
STATIC VOID __attribute__((used)) name##_ctor(void); \
|
||||
STATIC VOID (*__##name##_ctor)(void) __attribute__((used,section(".ctors._" #pri))) = name##_ctor; \
|
||||
STATIC VOID name##_ctor(void)
|
||||
STATIC VOID __attribute__((used)) name##_ctor(VOID); \
|
||||
STATIC VOID (*__##name##_ctor)(VOID) __attribute__((used,section(".ctors._" #pri))) = name##_ctor; \
|
||||
STATIC VOID name##_ctor(VOID)
|
||||
|
||||
#define DESTRUCTOR(name,pri) \
|
||||
STATIC VOID __attribute__((used)) name##_dtor(void); \
|
||||
STATIC VOID (*__##name##_dtor)(void) __attribute__((used,section(".dtors._" #pri))) = name##_dtor; \
|
||||
STATIC VOID name##_dtor(void)
|
||||
STATIC VOID __attribute__((used)) name##_dtor(VOID); \
|
||||
STATIC VOID (*__##name##_dtor)(VOID) __attribute__((used,section(".dtors._" #pri))) = name##_dtor; \
|
||||
STATIC VOID name##_dtor(VOID)
|
||||
|
||||
#define CLIB_CONSTRUCTOR(name) CONSTRUCTOR(name, 00500)
|
||||
#define CLIB_DESTRUCTOR(name) DESTRUCTOR(name, 00500)
|
||||
#define PROFILE_CONSTRUCTOR(name) CONSTRUCTOR(name, 00150)
|
||||
#define PROFILE_DESTRUCTOR(name) DESTRUCTOR(name, 00150)
|
||||
#else
|
||||
|
||||
/*
|
||||
#define CLIB_CONSTRUCTOR(name) \
|
||||
STATIC VOID __attribute__((used)) name##_ctor(void); \
|
||||
STATIC VOID (*__name##_ctor)(void) __attribute__((used,section(".ctors._00500"))) = name##_ctor; \
|
||||
STATIC VOID name##_ctor(void)
|
||||
#define CONSTRUCTOR(name,pri) \
|
||||
STATIC VOID __attribute__((constructor)) __ctor##pri##_##name##(VOID); \
|
||||
STATIC void __ctor##pri##_##name##(VOID)
|
||||
|
||||
#define CLIB_DESTRUCTOR(name) \
|
||||
STATIC VOID __attribute__((used)) name##_dtor(void); \
|
||||
STATIC VOID (*__name##_dtor)(void) __attribute__((used,section(".dtors._00500"))) = name##_dtor; \
|
||||
STATIC VOID name##_dtor(void)
|
||||
#define DESTRUCTOR(name,pri) \
|
||||
STATIC VOID __attribute__((destructor)) __dtor##pri##_##name##(VOID); \
|
||||
STATIC VOID __dtor##pri##_##name##(VOID)
|
||||
|
||||
#define PROFILE_CONSTRUCTOR(name) \
|
||||
STATIC VOID __attribute__((used)) name##_ctor(void); \
|
||||
STATIC VOID (*__name##_ctor)(void) __attribute__((used,section(".ctors._00150"))) = name##_ctor; \
|
||||
STATIC VOID name##_ctor(void)
|
||||
#endif /* __amigaos4__ */
|
||||
|
||||
#define PROFILE_DESTRUCTOR(name) \
|
||||
STATIC VOID __attribute__((used)) name##_dtor(void); \
|
||||
STATIC VOID (*__name##_dtor)(void) __attribute__((used,section(".dtors._00150"))) = name##_dtor; \
|
||||
STATIC VOID name##_ctor(void)
|
||||
*/
|
||||
|
||||
#define CONSTRUCTOR_SUCCEED() \
|
||||
return
|
||||
|
||||
@@ -213,6 +209,13 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#define CLIB_CONSTRUCTOR(name) CONSTRUCTOR(name, 500)
|
||||
#define CLIB_DESTRUCTOR(name) DESTRUCTOR(name, 500)
|
||||
#define PROFILE_CONSTRUCTOR(name) CONSTRUCTOR(name, 150)
|
||||
#define PROFILE_DESTRUCTOR(name) DESTRUCTOR(name, 150)
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifdef __SASC
|
||||
extern void ASM _PROLOG(REG(a0,char *));
|
||||
extern void ASM _EPILOG(REG(a0,char *));
|
||||
@@ -226,6 +229,8 @@ extern void ASM _EPILOG(REG(a0,char *));
|
||||
#endif /* _PROFILE */
|
||||
#endif /* __SASC */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifdef __GNUC__
|
||||
#define PROFILE_OFF() ((void)0)
|
||||
#define PROFILE_ON() ((void)0)
|
||||
|
||||
Reference in New Issue
Block a user