blob: 7dde43f06d220af92040618a79c2aaabc9b9f21f [file] [log] [blame]
/*
* Copyright 2019, Data61
* Commonwealth Scientific and Industrial Research Organisation (CSIRO)
* ABN 41 687 119 230.
*
* This software may be distributed and modified according to the terms of
* the BSD 2-Clause license. Note that NO WARRANTY is provided.
* See "LICENSE_BSD2.txt" for details.
*
* @TAG(DATA61_BSD)
*/
/*
* Constructor and destructor handling.
*/
typedef void (*routine)(void);
/*
* Constructors
*/
void _init(void);
extern routine __preinit_array_start[];
extern routine __preinit_array_end[];
extern routine __init_array_start[];
extern routine __init_array_end[];
/*
* Destructors
*/
void _fini(void);
extern routine __fini_array_start[];
extern routine __fini_array_end[];
void __sel4runtime_run_constructors(void)
{
int preinit_array_len
= &__preinit_array_end[0]
- &__preinit_array_start[0];
for (int f = 0; f < preinit_array_len; f++) {
__preinit_array_start[f]();
}
_init();
int init_array_len
= &__init_array_end[0]
- &__init_array_start[0];
for (int f = 0; f < init_array_len; f++) {
__init_array_start[f]();
}
}
void __sel4runtime_run_destructors(void)
{
int fini_array_len
= &__fini_array_end[0]
- &__fini_array_start[0];
for (int f = fini_array_len - 1; f >= 0; f--) {
__fini_array_start[f]();
}
_fini();
}