* Add patch "x86: Treat R_X86_64_PLT32 as R_X86_64_PC32" to stable?
@ 2018-03-15 23:36 Matthias Kaehlcke
2018-03-16 12:48 ` Greg Kroah-Hartman
0 siblings, 1 reply; 2+ messages in thread
From: Matthias Kaehlcke @ 2018-03-15 23:36 UTC (permalink / raw)
To: Greg Kroah-Hartman
Cc: stable, H . J . Lu, Manoj Gupta, Stephen Hines, Nick Desaulniers,
Michael Davidson, Guenter Roeck
Hi Greg,
The below patch recently landed in Linus' tree:
commit b21ebf2fb4cde1618915a97cc773e287ff49173e
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Wed Feb 7 14:20:09 2018 -0800
x86: Treat R_X86_64_PLT32 as R_X86_64_PC32
On i386, there are 2 types of PLTs, PIC and non-PIC. PIE and shared
objects must use PIC PLT. To use PIC PLT, you need to load
_GLOBAL_OFFSET_TABLE_ into EBX first. There is no need for that on
x86-64 since x86-64 uses PC-relative PLT.
On x86-64, for 32-bit PC-relative branches, we can generate PLT32
relocation, instead of PC32 relocation, which can also be used as
a marker for 32-bit PC-relative branches. Linker can always reduce
PLT32 relocation to PC32 if function is defined locally. Local
functions should use PC32 relocation. As far as Linux kernel is
concerned, R_X86_64_PLT32 can be treated the same as R_X86_64_PC32
since Linux kernel doesn't use PLT.
R_X86_64_PLT32 for 32-bit PC-relative branches has been enabled in
binutils master branch which will become binutils 2.31.
[ hjl is working on having better documentation on this all, but a few
more notes from him:
"PLT32 relocation is used as marker for PC-relative branches. Because
of EBX, it looks odd to generate PLT32 relocation on i386 when EBX
doesn't have GOT.
As for symbol resolution, PLT32 and PC32 relocations are almost
interchangeable. But when linker sees PLT32 relocation against a
protected symbol, it can resolved locally at link-time since it is
used on a branch instruction. Linker can't do that for PC32
relocation"
but for the kernel use, the two are basically the same, and this
commit gets things building and working with the current binutils
master - Linus ]
Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
The commit message mentions that "R_X86_64_PLT32 for 32-bit
PC-relative branches has been enabled in binutils master branch which
will become binutils 2.31."
This probably means that builds of older kernels could fail with
binutils >= 2.31 and that the patch should be included in stable.
FYI: for pre-v4.14 kernel you might also want to include the below
patch. It isn't strictly needed, but is trivial and including it
avoids a conflict.
commit eda9cec4c9a12208a6f69fbe68f72a6311d50032
Author: Josh Poimboeuf <jpoimboe@redhat.com>
Date: Fri Nov 3 07:58:54 2017 -0500
x86/module: Detect and skip invalid relocations
Thanks
Matthias
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: Add patch "x86: Treat R_X86_64_PLT32 as R_X86_64_PC32" to stable?
2018-03-15 23:36 Add patch "x86: Treat R_X86_64_PLT32 as R_X86_64_PC32" to stable? Matthias Kaehlcke
@ 2018-03-16 12:48 ` Greg Kroah-Hartman
0 siblings, 0 replies; 2+ messages in thread
From: Greg Kroah-Hartman @ 2018-03-16 12:48 UTC (permalink / raw)
To: Matthias Kaehlcke
Cc: stable, H . J . Lu, Manoj Gupta, Stephen Hines, Nick Desaulniers,
Michael Davidson, Guenter Roeck
On Thu, Mar 15, 2018 at 04:36:23PM -0700, Matthias Kaehlcke wrote:
> Hi Greg,
>
> The below patch recently landed in Linus' tree:
>
> commit b21ebf2fb4cde1618915a97cc773e287ff49173e
> Author: H.J. Lu <hjl.tools@gmail.com>
> Date: Wed Feb 7 14:20:09 2018 -0800
>
> x86: Treat R_X86_64_PLT32 as R_X86_64_PC32
>
> On i386, there are 2 types of PLTs, PIC and non-PIC. PIE and shared
> objects must use PIC PLT. To use PIC PLT, you need to load
> _GLOBAL_OFFSET_TABLE_ into EBX first. There is no need for that on
> x86-64 since x86-64 uses PC-relative PLT.
>
> On x86-64, for 32-bit PC-relative branches, we can generate PLT32
> relocation, instead of PC32 relocation, which can also be used as
> a marker for 32-bit PC-relative branches. Linker can always reduce
> PLT32 relocation to PC32 if function is defined locally. Local
> functions should use PC32 relocation. As far as Linux kernel is
> concerned, R_X86_64_PLT32 can be treated the same as R_X86_64_PC32
> since Linux kernel doesn't use PLT.
>
> R_X86_64_PLT32 for 32-bit PC-relative branches has been enabled in
> binutils master branch which will become binutils 2.31.
>
> [ hjl is working on having better documentation on this all, but a few
> more notes from him:
>
> "PLT32 relocation is used as marker for PC-relative branches. Because
> of EBX, it looks odd to generate PLT32 relocation on i386 when EBX
> doesn't have GOT.
>
> As for symbol resolution, PLT32 and PC32 relocations are almost
> interchangeable. But when linker sees PLT32 relocation against a
> protected symbol, it can resolved locally at link-time since it is
> used on a branch instruction. Linker can't do that for PC32
> relocation"
>
> but for the kernel use, the two are basically the same, and this
> commit gets things building and working with the current binutils
> master - Linus ]
>
> Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
>
>
> The commit message mentions that "R_X86_64_PLT32 for 32-bit
> PC-relative branches has been enabled in binutils master branch which
> will become binutils 2.31."
>
> This probably means that builds of older kernels could fail with
> binutils >= 2.31 and that the patch should be included in stable.
>
> FYI: for pre-v4.14 kernel you might also want to include the below
> patch. It isn't strictly needed, but is trivial and including it
> avoids a conflict.
>
> commit eda9cec4c9a12208a6f69fbe68f72a6311d50032
> Author: Josh Poimboeuf <jpoimboe@redhat.com>
> Date: Fri Nov 3 07:58:54 2017 -0500
>
> x86/module: Detect and skip invalid relocations
>
Thanks for the info, both patches are now queued up.
greg k-h
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2018-03-16 12:48 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-03-15 23:36 Add patch "x86: Treat R_X86_64_PLT32 as R_X86_64_PC32" to stable? Matthias Kaehlcke
2018-03-16 12:48 ` Greg Kroah-Hartman
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.