aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjoern Brandenburg <bbb@mpi-sws.org>2012-09-03 08:01:12 -0400
committerBjoern Brandenburg <bbb@mpi-sws.org>2012-12-06 22:20:27 -0500
commit93e9d420554ed60cb3fa9fa47d3e97b33556b276 (patch)
tree63c8a246f182ceff0c1b67f170835025a148aa8b
parent3445e102f16ef5ef0ae0a1c78c16a98ce3d2e5b0 (diff)
Add control page offset checksstaging
Make sure the kernel and userspace compilers have the same idea of the layout of the control page.
-rw-r--r--include/internal.h2
-rw-r--r--src/kernel_iface.c11
2 files changed, 12 insertions, 1 deletions
diff --git a/include/internal.h b/include/internal.h
index 747f095..035440b 100644
--- a/include/internal.h
+++ b/include/internal.h
@@ -23,6 +23,8 @@ int __launch_rt_task(rt_fn_t rt_prog, void *rt_arg,
23#define likely(x) __builtin_expect((x), 1) 23#define likely(x) __builtin_expect((x), 1)
24#define unlikely(x) __builtin_expect((x), 0) 24#define unlikely(x) __builtin_expect((x), 0)
25 25
26#define offsetof(s, x) __builtin_offsetof(s, x)
27
26#define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); })) 28#define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); }))
27#define BUILD_BUG_ON(condition) ((void)BUILD_BUG_ON_ZERO(condition)) 29#define BUILD_BUG_ON(condition) ((void)BUILD_BUG_ON_ZERO(condition))
28 30
diff --git a/src/kernel_iface.c b/src/kernel_iface.c
index b9c8f59..4cc1af5 100644
--- a/src/kernel_iface.c
+++ b/src/kernel_iface.c
@@ -82,7 +82,16 @@ int init_kernel_iface(void)
82 int err = 0; 82 int err = 0;
83 long page_size = sysconf(_SC_PAGESIZE); 83 long page_size = sysconf(_SC_PAGESIZE);
84 84
85 BUILD_BUG_ON(sizeof(union np_flag) != sizeof(uint32_t)); 85 BUILD_BUG_ON(sizeof(union np_flag) != sizeof(uint64_t));
86
87 BUILD_BUG_ON(offsetof(struct control_page, sched.raw)
88 != LITMUS_CP_OFFSET_SCHED);
89 BUILD_BUG_ON(offsetof(struct control_page, irq_count)
90 != LITMUS_CP_OFFSET_IRQ_COUNT);
91 BUILD_BUG_ON(offsetof(struct control_page, ts_syscall_start)
92 != LITMUS_CP_OFFSET_TS_SC_START);
93 BUILD_BUG_ON(offsetof(struct control_page, irq_syscall_start)
94 != LITMUS_CP_OFFSET_IRQ_SC_START);
86 95
87 err = map_file(LITMUS_CTRL_DEVICE, (void**) &ctrl_page, CTRL_PAGES * page_size); 96 err = map_file(LITMUS_CTRL_DEVICE, (void**) &ctrl_page, CTRL_PAGES * page_size);
88 if (err) { 97 if (err) {