In message <20020901114242.21242@colin.muc.de> you write:
>
> [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.
Yes, agreed. Linus, please apply.
--- 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 */
-- Anyone who quotes me in their sig is an idiot. -- Rusty Russell. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
This archive was generated by hypermail 2b29 : Sat Sep 07 2002 - 22:00:15 EST