All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/1] x86/vdso: fix a reference to a non-existing instruction
@ 2015-03-05  8:13 Jiri Slaby
  2015-03-05 23:22 ` Andy Lutomirski
  2015-03-06  8:39 ` [tip:x86/urgent] x86/vdso: Fix the build on GCC5 tip-bot for Jiri Slaby
  0 siblings, 2 replies; 4+ messages in thread
From: Jiri Slaby @ 2015-03-05  8:13 UTC (permalink / raw)
  To: luto
  Cc: linux-kernel, rguenther, Jiri Slaby, stable, Thomas Gleixner,
	Ingo Molnar, H. Peter Anvin, x86

.LSTARTFDEDLSI1 says:
        /* HACK: The dwarf2 unwind routines will subtract 1 from the
           return address to get an address in the middle of the
           presumed call instruction.  Since we didn't get here via
           a call, we need to include the nop before the real start
           to make up for it.  */
        .long .LSTART_sigreturn-1-.     /* PC-relative start address */

But commit 69d0627a7f6e891189124d784d2fa90cae7c449a (x86 vDSO: reorder
vdso32 code) from 2.6.25 replaced
  .org __kernel_vsyscall+32,0x90
by ALIGN right before __kernel_sigreturn. Of course, ALIGN need not
generate any nop in there. Esp. gcc5 collapses vclock_gettime.o and
int80.o together with no generated nops as "ALIGN". In that case
kernel does not even link:
ld: .eh_frame_hdr table[4] FDE at 0000000000000648 overlaps table[5] FDE at 0000000000000670.

So fix this by adding there at least a single nop and make the
function ALIGN possibly with more nops then.

Kudos for reporting and diagnosing should go to Richard.

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Reported-by: Richard Biener <rguenther@suse.de>
Cc: stable@vger.kernel.org
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: x86@kernel.org
---
 arch/x86/vdso/vdso32/sigreturn.S | 1 +
 1 file changed, 1 insertion(+)

diff --git a/arch/x86/vdso/vdso32/sigreturn.S b/arch/x86/vdso/vdso32/sigreturn.S
index 31776d0efc8c..d7ec4e251c0a 100644
--- a/arch/x86/vdso/vdso32/sigreturn.S
+++ b/arch/x86/vdso/vdso32/sigreturn.S
@@ -17,6 +17,7 @@
 	.text
 	.globl __kernel_sigreturn
 	.type __kernel_sigreturn,@function
+	nop /* this guy is needed for .LSTARTFDEDLSI1 below (watch for HACK) */
 	ALIGN
 __kernel_sigreturn:
 .LSTART_sigreturn:
-- 
2.3.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2015-03-06  8:42 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-03-05  8:13 [PATCH 1/1] x86/vdso: fix a reference to a non-existing instruction Jiri Slaby
2015-03-05 23:22 ` Andy Lutomirski
2015-03-06  8:36   ` Ingo Molnar
2015-03-06  8:39 ` [tip:x86/urgent] x86/vdso: Fix the build on GCC5 tip-bot for Jiri Slaby

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.