--- /dev/null
+From 26a9a418237c0b06528941bca693c49c8d97edbe Mon Sep 17 00:00:00 2001
+From: Linus Torvalds <torvalds@linux-foundation.org>
+Date: Tue, 19 May 2009 11:25:35 -0700
+Subject: Avoid ICE in get_random_int() with gcc-3.4.5
+
+From: Linus Torvalds <torvalds@linux-foundation.org>
+
+commit 26a9a418237c0b06528941bca693c49c8d97edbe upstream.
+
+Martin Knoblauch reports that trying to build 2.6.30-rc6-git3 with
+RHEL4.3 userspace (gcc (GCC) 3.4.5 20051201 (Red Hat 3.4.5-2)) causes an
+internal compiler error (ICE):
+
+ drivers/char/random.c: In function `get_random_int':
+ drivers/char/random.c:1672: error: unrecognizable insn:
+ (insn 202 148 150 0 /scratch/build/linux-2.6.30-rc6-git3/arch/x86/include/asm/tsc.h:23 (set (reg:SI 0 ax [91])
+ (subreg:SI (plus:DI (plus:DI (reg:DI 0 ax [88])
+ (subreg:DI (reg:SI 6 bp) 0))
+ (const_int -4 [0xfffffffffffffffc])) 0)) -1 (nil)
+ (nil))
+ drivers/char/random.c:1672: internal compiler error: in extract_insn, at recog.c:2083
+
+and after some debugging it turns out that it's due to the code trying
+to figure out the rough value of the current stack pointer by taking an
+address of an uninitialized variable and casting that to an integer.
+
+This is clearly a compiler bug, but it's not worth fighting - while the
+current stack kernel pointer might be somewhat hard to predict in user
+space, it's also not generally going to change for a lot of the call
+chains for a particular process.
+
+So just drop it, and mumble some incoherent curses at the compiler.
+
+Tested-by: Martin Knoblauch <spamtrap@knobisoft.de>
+Cc: Matt Mackall <mpm@selenic.com>
+Cc: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/char/random.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/char/random.c
++++ b/drivers/char/random.c
+@@ -1634,7 +1634,7 @@ unsigned int get_random_int(void)
+ int ret;
+
+ keyptr = get_keyptr();
+- hash[0] += current->pid + jiffies + get_cycles() + (int)(long)&ret;
++ hash[0] += current->pid + jiffies + get_cycles();
+
+ ret = half_md4_transform(hash, keyptr->secret);
+ put_cpu_var(get_random_int_hash);