summaryrefslogtreecommitdiff
path: root/rts/linker/InitFini.h
blob: c0a044402e3bae95d3b178a3939ae978ad9c91fe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#pragma once

enum InitFiniKind {
    INITFINI_INIT,       // .init section
    INITFINI_FINI,       // .fini section
    INITFINI_CTORS,      // .ctors section
    INITFINI_DTORS,      // .dtors section
    INITFINI_INIT_ARRAY, // .init_array section
    INITFINI_FINI_ARRAY, // .fini_array section
};

// A linked-list of initializer or finalizer sections.
struct InitFiniList {
    Section *section;
    uint32_t priority;
    enum InitFiniKind kind;
    struct InitFiniList *next;
};

void addInitFini(struct InitFiniList **slist, Section *section, enum InitFiniKind kind, uint32_t priority);
void freeInitFiniList(struct InitFiniList *slist);
bool runInit(struct InitFiniList **slist);
bool runFini(struct InitFiniList **slist);