72 lines
2.9 KiB
Diff
72 lines
2.9 KiB
Diff
From: Alexander van Heukelum <heukelum@fastmail.fm>
|
|
Date: Fri, 11 Mar 2011 20:59:38 +0000 (+0100)
|
|
Subject: x86, binutils, xen: Fix another wrong size directive
|
|
X-Git-Tag: v2.6.39-rc1~506^2
|
|
X-Git-Url: http://git.itanic.dy.fi/?p=linux-stable;a=commitdiff_plain;h=371c394af27ab7d1e58a66bc19d9f1f3ac1f67b4
|
|
|
|
x86, binutils, xen: Fix another wrong size directive
|
|
|
|
The latest binutils (2.21.0.20110302/Ubuntu) breaks the build
|
|
yet another time, under CONFIG_XEN=y due to a .size directive that
|
|
refers to a slightly differently named (hence, to the now very
|
|
strict and unforgiving assembler, non-existent) symbol.
|
|
|
|
[ mingo:
|
|
|
|
This unnecessary build breakage caused by new binutils
|
|
version 2.21 gets escallated back several kernel releases spanning
|
|
several years of Linux history, affecting over 130,000 upstream
|
|
kernel commits (!), on CONFIG_XEN=y 64-bit kernels (i.e. essentially
|
|
affecting all major Linux distro kernel configs).
|
|
|
|
Git annotate tells us that this slight debug symbol code mismatch
|
|
bug has been introduced in 2008 in commit 3d75e1b8:
|
|
|
|
3d75e1b8 (Jeremy Fitzhardinge 2008-07-08 15:06:49 -0700 1231) ENTRY(xen_do_hypervisor_callback) # do_hypervisor_callback(struct *pt_regs)
|
|
|
|
The 'bug' is just a slight assymetry in ENTRY()/END()
|
|
debug-symbols sequences, with lots of assembly code between the
|
|
ENTRY() and the END():
|
|
|
|
ENTRY(xen_do_hypervisor_callback) # do_hypervisor_callback(struct *pt_regs)
|
|
...
|
|
END(do_hypervisor_callback)
|
|
|
|
Human reviewers almost never catch such small mismatches, and binutils
|
|
never even warned about it either.
|
|
|
|
This new binutils version thus breaks the Xen build on all upstream kernels
|
|
since v2.6.27, out of the blue.
|
|
|
|
This makes a straightforward Git bisection of all 64-bit Xen-enabled kernels
|
|
impossible on such binutils, for a bisection window of over hundred
|
|
thousand historic commits. (!)
|
|
|
|
This is a major fail on the side of binutils and binutils needs to turn
|
|
this show-stopper build failure into a warning ASAP. ]
|
|
|
|
Signed-off-by: Alexander van Heukelum <heukelum@fastmail.fm>
|
|
Cc: Jeremy Fitzhardinge <jeremy@goop.org>
|
|
Cc: Jan Beulich <jbeulich@novell.com>
|
|
Cc: H.J. Lu <hjl.tools@gmail.com>
|
|
Cc: Linus Torvalds <torvalds@linux-foundation.org>
|
|
Cc: Andrew Morton <akpm@linux-foundation.org>
|
|
Cc: "H. Peter Anvin" <hpa@zytor.com>
|
|
Cc: Kees Cook <kees.cook@canonical.com>
|
|
LKML-Reference: <1299877178-26063-1-git-send-email-heukelum@fastmail.fm>
|
|
Signed-off-by: Ingo Molnar <mingo@elte.hu>
|
|
---
|
|
|
|
diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S
|
|
index aed1ffb..bbd5c80 100644
|
|
--- a/arch/x86/kernel/entry_64.S
|
|
+++ b/arch/x86/kernel/entry_64.S
|
|
@@ -1248,7 +1248,7 @@ ENTRY(xen_do_hypervisor_callback) # do_hypervisor_callback(struct *pt_regs)
|
|
decl PER_CPU_VAR(irq_count)
|
|
jmp error_exit
|
|
CFI_ENDPROC
|
|
-END(do_hypervisor_callback)
|
|
+END(xen_do_hypervisor_callback)
|
|
|
|
/*
|
|
* Hypervisor uses this for application faults while it executes.
|