x86, extable: Switch to relative exception table entries
authorH. Peter Anvin <hpa@zytor.com>
Sat, 21 Apr 2012 00:12:48 +0000 (17:12 -0700)
committerH. Peter Anvin <hpa@zytor.com>
Sat, 21 Apr 2012 00:22:34 +0000 (17:22 -0700)
commit706276543b699d80f546e45f8b12574e7b18d952
treefc0fd24bf22517086685aa470a0fb596a71026ab
parentfa574a48a1e9706bba38188d3bf61ecb66546a77
x86, extable: Switch to relative exception table entries

Switch to using relative exception table entries on x86.  On i386,
this has the advantage that the exception table entries don't need to
be relocated; on x86-64 this means the exception table entries take up
only half the space.

In either case, a 32-bit delta is sufficient, as the range of kernel
code addresses is limited.

Since part of the goal is to avoid needing to adjust the entries when
the kernel is relocated, the old trick of using addresses in the NULL
pointer range to indicate uaccess_err no longer works (and unlike RISC
architectures we can't use a flag bit); instead use an delta just
below +2G to indicate these special entries.  The reach is still
limited to a single instruction.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Cc: David Daney <david.daney@cavium.com>
Link: http://lkml.kernel.org/r/CA%2B55aFyijf43qSu3N9nWHEBwaGbb7T2Oq9A=9EyR=Jtyqfq_cQ@mail.gmail.com
arch/x86/include/asm/asm.h
arch/x86/include/asm/uaccess.h
arch/x86/mm/extable.c