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