1 /*
2 * Copyright 2007-2011, Ingo Weinhold, ingo_weinhold@gmx.de.
3 * Distributed under the terms of the MIT License.
4 */
5
6 // This file is used to get C structure offsets into assembly code.
7 // The build system assembles the file and processes the output to create
8 // a header file with macro definitions, that can be included from assembly
9 // code.
10
11
12 #include <computed_asm_macros.h>
13
14 #include <arch_cpu.h>
15 #include <cpu.h>
16 #include <ksignal.h>
17 #include <ksyscalls.h>
18 #include <thread_types.h>
19
20
21 #define DEFINE_MACRO(macro, value) DEFINE_COMPUTED_ASM_MACRO(macro, value)
22
23 #define DEFINE_OFFSET_MACRO(prefix, structure, member) \
24 DEFINE_MACRO(prefix##_##member, offsetof(struct structure, member));
25
26 #define DEFINE_SIZEOF_MACRO(prefix, structure) \
27 DEFINE_MACRO(prefix##_sizeof, sizeof(struct structure));
28
29
30 void
dummy()31 dummy()
32 {
33 // struct cpu_ent
34 DEFINE_OFFSET_MACRO(CPU_ENT, cpu_ent, fault_handler);
35 DEFINE_OFFSET_MACRO(CPU_ENT, cpu_ent, fault_handler_stack_pointer);
36
37 // struct Thread
38 DEFINE_OFFSET_MACRO(THREAD, Thread, time_lock);
39 DEFINE_OFFSET_MACRO(THREAD, Thread, kernel_time);
40 DEFINE_OFFSET_MACRO(THREAD, Thread, user_time);
41 DEFINE_OFFSET_MACRO(THREAD, Thread, last_time);
42 DEFINE_OFFSET_MACRO(THREAD, Thread, in_kernel);
43 DEFINE_OFFSET_MACRO(THREAD, Thread, flags);
44 DEFINE_OFFSET_MACRO(THREAD, Thread, kernel_stack_top);
45 DEFINE_OFFSET_MACRO(THREAD, Thread, fault_handler);
46
47 // struct iframe
48 DEFINE_SIZEOF_MACRO(IFRAME, iframe);
49 DEFINE_OFFSET_MACRO(IFRAME, iframe, pc);
50 DEFINE_OFFSET_MACRO(IFRAME, iframe, usr_sp);
51 DEFINE_OFFSET_MACRO(IFRAME, iframe, usr_lr);
52
53 // struct signal_frame_data
54 DEFINE_SIZEOF_MACRO(SIGNAL_FRAME_DATA, signal_frame_data);
55 DEFINE_OFFSET_MACRO(SIGNAL_FRAME_DATA, signal_frame_data, info);
56 DEFINE_OFFSET_MACRO(SIGNAL_FRAME_DATA, signal_frame_data, context);
57 DEFINE_OFFSET_MACRO(SIGNAL_FRAME_DATA, signal_frame_data, user_data);
58 DEFINE_OFFSET_MACRO(SIGNAL_FRAME_DATA, signal_frame_data, handler);
59
60 // struct ucontext_t
61 DEFINE_OFFSET_MACRO(UCONTEXT_T, __ucontext_t, uc_mcontext);
62
63 // struct siginfo_t
64 DEFINE_OFFSET_MACRO(SIGINFO_T, __siginfo_t, si_signo);
65 }
66