1#pragma once
2
3/* defines linker sections for commonly accessed regions,
4 * .text, .bss, .rodata, etc... */
5#include <compiler.h>
6#include <stdint.h>
7
8extern uint64_t __stext, __etext;
9extern uint64_t __srodata, __erodata;
10extern uint64_t __sdata, __edata;
11extern uint64_t __sbss, __ebss;
12extern uint64_t __slimine_requests, __elimine_requests;
13extern uint64_t __kernel_virt_end;
14
15#define LINKER_SECTION_ATTRIBUTE(n) \
16 __attribute__((section(".kernel_" #n), used))
17
18#define LINKER_SECTION_OBJECT(type, section) \
19 LINKER_SECTION_ATTRIBUTE(section) type
20
21#define LINKER_SECTION_DEFINE(type, name) \
22 extern type __skernel_##name[]; \
23 extern type __ekernel_##name[];
24
25#define linker_section_for_each_object(obj, name) \
26 for (obj = __skernel_##name; obj < __ekernel_##name; obj++)
27