linux/arch/x86/vdso
Jiri Slaby e893286918 x86/vdso: Fix the build on GCC5
On gcc5 the kernel does not link:

  ld: .eh_frame_hdr table[4] FDE at 0000000000000648 overlaps table[5] FDE at 0000000000000670.

Because prior GCC versions always emitted NOPs on ALIGN directives, but
gcc5 started omitting them.

.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 69d0627a7f ("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".

So fix this by adding to that point at least a single NOP and make the
function ALIGN possibly with more NOPs then.

Kudos for reporting and diagnosing should go to Richard.

Reported-by: Richard Biener <rguenther@suse.de>
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Acked-by: Andy Lutomirski <luto@amacapital.net>
Cc: <stable@vger.kernel.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/1425543211-12542-1-git-send-email-jslaby@suse.cz
Signed-off-by: Ingo Molnar <mingo@kernel.org>
2015-03-06 09:34:45 +01:00
..
vdso32 x86/vdso: Fix the build on GCC5 2015-03-06 09:34:45 +01:00
.gitignore x86, vdso: Reimplement vdso.so preparation in build-time C 2014-05-05 13:18:51 -07:00
Makefile x86_64: add KASan support 2015-02-13 21:21:41 -08:00
checkundef.sh x86, vdso: Don't quote $nm in the script for checking vdso references 2010-07-27 23:52:29 -07:00
vclock_gettime.c x86/vdso: Move DISABLE_BRANCH_PROFILING into the vdso makefile 2014-06-24 13:53:00 -07:00
vdso-layout.lds.S x86, vdso: Move the vvar area before the vdso text 2014-07-11 16:57:51 -07:00
vdso-note.S x86_64: move vdso 2007-10-11 11:17:10 +02:00
vdso.lds.S x86/vdso: Improve the fake section headers 2014-06-19 15:45:12 -07:00
vdso2c.c x86, vdso: Get rid of the fake section mechanism 2014-07-11 16:58:07 -07:00
vdso2c.h x86/vdso: Fix vdso2c's special_pages[] error checking 2014-09-24 09:55:38 +02:00
vdso32-setup.c arm64,ia64,ppc,s390,sh,tile,um,x86,mm: remove default gate area 2014-08-08 15:57:27 -07:00
vdsox32.lds.S x86/vdso: Improve the fake section headers 2014-06-19 15:45:12 -07:00
vgetcpu.c x86,vdso: Use LSL unconditionally for vgetcpu 2014-11-03 13:41:53 +01:00
vma.c x86_64, vdso: Fix the vdso address randomization algorithm 2014-12-20 16:56:57 -08:00