From 6d5c51fa0ae84a98f4200d39de4eb2b75e369753 Mon Sep 17 00:00:00 2001 From: Bjoern Brandenburg Date: Wed, 17 Apr 2013 17:58:46 +0200 Subject: Fix compile failure related to aliasing (gcc 4.4.5) My version of gcc would complain about "dereferencing pointer does break strict-aliasing rules" because of a (harmless) pointer cast. This patch adds a helper void pointer to make the assignment explicit, which avoids the cast and hence silences the warning. --- src/kernel_iface.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/kernel_iface.c b/src/kernel_iface.c index e446102..98449b0 100644 --- a/src/kernel_iface.c +++ b/src/kernel_iface.c @@ -86,6 +86,7 @@ int init_kernel_iface(void) { int err = 0; long page_size = sysconf(_SC_PAGESIZE); + void* mapped_at = NULL; BUILD_BUG_ON(sizeof(union np_flag) != sizeof(uint64_t)); @@ -98,7 +99,13 @@ int init_kernel_iface(void) BUILD_BUG_ON(offsetof(struct control_page, irq_syscall_start) != LITMUS_CP_OFFSET_IRQ_SC_START); - err = map_file(LITMUS_CTRL_DEVICE, (void**) &ctrl_page, CTRL_PAGES * page_size); + err = map_file(LITMUS_CTRL_DEVICE, &mapped_at, CTRL_PAGES * page_size); + + /* Assign ctrl_page indirectly to avoid GCC warnings about aliasing + * related to type pruning. + */ + ctrl_page = mapped_at; + if (err) { fprintf(stderr, "%s: cannot open LITMUS^RT control page (%m)\n", __FUNCTION__); -- cgit v1.2.2