]> git.baikalelectronics.ru Git - kernel.git/commit
powerpc/modules: Fix alignment of .toc section in kernel modules
authorAlan Modra <amodra@gmail.com>
Wed, 6 Dec 2017 19:12:28 +0000 (17:12 -0200)
committerMichael Ellerman <mpe@ellerman.id.au>
Mon, 11 Dec 2017 02:03:35 +0000 (13:03 +1100)
commit07efb8c9258dc242232665e71fd907605eac990d
tree25ec5996a48e85c68e64440d99723c8bd6f7e9a4
parentc70aa24d7cc8b01c4ec037612b09fb031fa7ac29
powerpc/modules: Fix alignment of .toc section in kernel modules

powerpc64 gcc can generate code that offsets an address, to access
part of an object in memory. If the address is a -mcmodel=medium toc
pointer relative address then code like the following is possible.

  addis r9,r2,var@toc@ha
  ld r3,var@toc@l(r9)
  ld r4,(var+8)@toc@l(r9)

This works fine so long as var is naturally aligned, *and* r2 is
sufficiently aligned. If not, there is a possibility that the offset
added to access var+8 wraps over a n*64k+32k boundary. Modules don't
have any guarantee that r2 is sufficiently aligned. Moreover, code
generated by older compilers generates a .toc section with 2**0
alignment, which can result in relocation failures at module load time
even without the wrap problem.

Thus, this patch links modules with an aligned .toc section (Makefile
and module.lds changes), and forces alignment for out of tree modules
or those without a .toc section (module_64.c changes).

Signed-off-by: Alan Modra <amodra@gmail.com>
[desnesn: updated patch to apply to powerpc-next kernel v4.15 ]
Signed-off-by: Desnes A. Nunes do Rosario <desnesn@linux.vnet.ibm.com>
[mpe: Fix out-of-tree build, swap -256 for ~0xff, reflow comment]
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/Makefile
arch/powerpc/kernel/module.lds [new file with mode: 0644]
arch/powerpc/kernel/module_64.c