aboutsummaryrefslogtreecommitdiff
path: root/include/kern/init.h
blob: 737b85f7f1f622a4216019f61ae08d5a8b7bc421 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#ifndef INIT_H_
#define INIT_H_

/** Globals annotated with _no_init will not be set during init1 bootup
 * where the data segement is loaded from flash and the bss segment is
 * cleared.
 *
 * This is useful for routines that run in the init0 boot procedure
 * that need persistent globals.
 *
 * Note that initializing a global annotated with _no_init will have
 * no effect as the variable will remain uninitialized until explicitly
 * set by by the program.
 */
#define _no_init \
  __attribute((__section__(".noinit")))

#define init0 \
  static void init0fn(); \
  static __attribute((__section__(".init0"))) \
  __attribute((__used__)) \
  void(*init0_ptr)() = init0fn; \
  static void init0fn
#define init1 \
  static void init1fn(); \
  static __attribute((__section__(".init1"))) \
  __attribute((__used__)) \
  void(*init1_ptr)() = init1fn; \
  static void init1fn
#define init2 \
  static void init2fn(); \
  static __attribute((__section__(".init2"))) \
  __attribute((__used__)) \
  void(*init2_ptr)() = init2fn; \
  static void init2fn
#define init3 \
  static void init3fn(); \
  static __attribute((__section__(".init3"))) \
  __attribute((__used__)) \
  void(*init3_ptr)() = init3fn; \
  static void init3fn
#define init4 \
  static void init4fn(); \
  static __attribute((__section__(".init4"))) \
  __attribute((__used__)) \
  void(*init4_ptr)() = init4fn; \
  static void init4fn
#define init5 \
  static void init5fn(); \
  static __attribute((__section__(".init5"))) \
  __attribute((__used__)) \
  void(*init5_ptr)() = init5fn; \
  static void init5fn
#define init6 \
  static void init6fn(); \
  static __attribute((__section__(".init6"))) \
  __attribute((__used__)) \
  void(*init6_ptr)() = init6fn; \
  static void init6fn
#define init7 \
  static void init7fn(); \
  static __attribute((__section__(".init7"))) \
  __attribute((__used__)) \
  void(*init7_ptr)() = init7fn; \
  static void init7fn

#endif /* INIT_H_ */