[lkml]   [2002]   [Sep]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
Patch in this message
Subject[PATCH] Fix RELOC_HIDE miscompilation

[resend due to mailer problems]

RELOC_HIDE got miscompiled on gcc3.1/x86-64 in the access to softirq.c's per
cpu variables. This patch fixes the problem.

Clearly to hide the relocation the addition needs to be done after the
value obfuscation, not before.

I don't know if it triggers on other architectures (x86-64 is especially
stressf here because it has negative kernel addresses), but seems like the
right thing to do.

Also does the arithmetic in unsigned long to avoid undue assumptions of the
comp for pointers.


--- linux/include/linux/compiler.h-o Sun Apr 14 21:18:44 2002
+++ linux/include/linux/compiler.h Sun Sep 1 02:52:31 2002
@@ -16,7 +16,7 @@
/* This macro obfuscates arithmetic on a variable address so that gcc
shouldn't recognize the original var, and make assumptions about it */
#define RELOC_HIDE(ptr, off) \
- ({ __typeof__(ptr) __ptr; \
- __asm__ ("" : "=g"(__ptr) : "0"((void *)(ptr) + (off))); \
- __ptr; })
+ ({ unsigned long __ptr; \
+ __asm__ ("" : "=g"(__ptr) : "0"(ptr)); \
+ (typeof(ptr)) (__ptr + (off)); })
#endif /* __LINUX_COMPILER_H */
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to
More majordomo info at
Please read the FAQ at
 \ /
  Last update: 2005-03-22 13:28    [W:0.034 / U:1.920 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site