Re: [PATCH] Fix RELOC_HIDE miscompilation

From: Rusty Russell (rusty@rustcorp.com.au)
Date: Sun Sep 01 2002 - 21:11:28 EST


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