linux/arch/mips
Victor Kamensky d3f703c435
mips: vdso: fix 'jalr t9' crash in vdso code
Observed that when kernel is built with Yocto mips64-poky-linux-gcc,
and mips64-poky-linux-gnun32-gcc toolchain, resulting vdso contains
'jalr t9' instructions in its code and since in vdso case nobody
sets GOT table code crashes when instruction reached. On other hand
observed that when kernel is built mips-poky-linux-gcc toolchain, the
same 'jalr t9' instruction are replaced with PC relative function
calls using 'bal' instructions.

The difference boils down to -mrelax-pic-calls and -mexplicit-relocs
gcc options that gets different default values depending on gcc
target triplets and corresponding binutils. -mrelax-pic-calls got
enabled by default only in mips-poky-linux-gcc case. MIPS binutils
ld relies on R_MIPS_JALR relocation to convert 'jalr t9' into 'bal'
and such relocation is generated only if -mrelax-pic-calls option
is on.

Please note 'jalr t9' conversion to 'bal' can happen only to static
functions. These static PIC calls use mips local GOT entries that
are supposed to be filled with start of DSO value by run-time linker
(missing in VDSO case) and they do not have dynamic relocations.
Global mips GOT entries must have dynamic relocations and they should
be prevented by cmd_vdso_check Makefile rule.

Solution call out -mrelax-pic-calls and -mexplicit-relocs options
explicitly while compiling MIPS vdso code. That would get correct
and consistent between different toolchains behaviour.

Reported-by: Bruce Ashfield <bruce.ashfield@gmail.com>
Signed-off-by: Victor Kamensky <kamensky@cisco.com>
Signed-off-by: Paul Burton <paulburton@kernel.org>
Cc: linux-mips@vger.kernel.org
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: James Hogan <jhogan@kernel.org>
Cc: Vincenzo Frascino <vincenzo.frascino@arm.com>
Cc: richard.purdie@linuxfoundation.org
2020-02-15 11:04:05 -08:00
..
alchemy treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 182 2019-05-30 11:29:20 -07:00
ar7 remove ioremap_nocache and devm_ioremap_nocache 2020-01-06 09:45:59 +01:00
ath25 remove ioremap_nocache and devm_ioremap_nocache 2020-01-06 09:45:59 +01:00
ath79 remove ioremap_nocache and devm_ioremap_nocache 2020-01-06 09:45:59 +01:00
bcm47xx MIPS: BCM47XX: Add support for Netgear R6200 V1 2019-07-25 22:10:05 -07:00
bcm63xx MIPS: bmips: mark exception vectors as char arrays 2019-10-23 21:07:28 -07:00
bmips dma-mapping: drop the dev argument to arch_sync_dma_for_* 2019-11-20 20:31:38 +01:00
boot kbuild: rename hostprogs-y/always to hostprogs/always-y 2020-02-04 01:53:07 +09:00
cavium-octeon The main MIPS changes for 5.6: 2020-01-31 11:28:31 -08:00
cobalt
configs MIPS: generic: don't unconditionally select PINCTRL 2020-01-22 10:16:45 -08:00
crypto crypto: {arm,arm64,mips}/poly1305 - remove redundant non-reduction from emit 2020-01-16 15:18:12 +08:00
dec treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
emma treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
fw A few MIPS fixes: 2019-11-01 14:36:44 -07:00
generic remove ioremap_nocache and devm_ioremap_nocache 2020-01-06 09:45:59 +01:00
include Microblaze patches for 5.6-rc1 2020-02-04 11:58:07 +00:00
jazz dma-mapping: drop the dev argument to arch_sync_dma_for_* 2019-11-20 20:31:38 +01:00
jz4740 MIPS: X1830: Add X1830 system type. 2020-01-09 09:48:42 -08:00
kernel kgdb patches for 5.6-rc1 2020-02-03 16:59:51 +00:00
kvm KVM: MIPS: Fold comparecount_func() into comparecount_wakeup() 2020-02-05 15:29:55 +01:00
lantiq remove ioremap_nocache and devm_ioremap_nocache 2020-01-06 09:45:59 +01:00
lasat proc: convert everything to "struct proc_ops" 2020-02-04 03:05:26 +00:00
lib MIPS: Make DIEI support as a config option 2020-01-23 10:26:16 -08:00
loongson2ef The main MIPS changes for 5.6: 2020-01-31 11:28:31 -08:00
loongson32 remove ioremap_nocache and devm_ioremap_nocache 2020-01-06 09:45:59 +01:00
loongson64 The main MIPS changes for 5.6: 2020-01-31 11:28:31 -08:00
math-emu MIPS: Add MAC2008 Support 2020-01-22 15:56:08 -08:00
mm MIPS: mm: Place per_cpu on different nodes, if NUMA is enabled 2020-01-09 09:54:30 -08:00
mti-malta remove ioremap_nocache and devm_ioremap_nocache 2020-01-06 09:45:59 +01:00
net MIPS: BPF: Use sizeof_field() instead of FIELD_SIZEOF() 2020-01-10 11:33:35 -08:00
netlogic MIPS: xlp: Drop boot_mem_map 2019-08-23 14:47:21 +01:00
oprofile MIPS: Loongson: Rename LOONGSON1 to LOONGSON32 2019-11-11 10:43:13 -08:00
paravirt
pci The main MIPS changes for 5.6: 2020-01-31 11:28:31 -08:00
pic32 remove ioremap_nocache and devm_ioremap_nocache 2020-01-06 09:45:59 +01:00
pistachio A batch of MIPS fixes: 2019-06-08 13:09:31 -07:00
pmcs-msp71xx remove ioremap_nocache and devm_ioremap_nocache 2020-01-06 09:45:59 +01:00
pnx833x A batch of MIPS fixes: 2019-06-08 13:09:31 -07:00
power mips: check for dsp presence only once before save/restore 2019-10-07 10:58:53 -07:00
ralink The main MIPS changes for 5.6: 2020-01-31 11:28:31 -08:00
rb532 remove ioremap_nocache and devm_ioremap_nocache 2020-01-06 09:45:59 +01:00
sgi-ip22 MIPS: ip22-gio: Make gio_match_device() static 2020-01-13 10:55:40 -08:00
sgi-ip27 mfd: ioc3: Add driver for SGI IOC3 chip 2020-01-09 15:30:59 -08:00
sgi-ip30 MIPS: SGI-IP30: Check for valid pointer before using it 2020-01-22 10:15:45 -08:00
sgi-ip32 rtc: ds1685: add indirect access method and remove plat_read/plat_write 2019-10-16 10:39:00 +02:00
sibyte treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
sni remove ioremap_nocache and devm_ioremap_nocache 2020-01-06 09:45:59 +01:00
tools kbuild: rename hostprogs-y/always to hostprogs/always-y 2020-02-04 01:53:07 +09:00
txx9 A batch of MIPS fixes: 2019-06-08 13:09:31 -07:00
vdso mips: vdso: fix 'jalr t9' crash in vdso code 2020-02-15 11:04:05 -08:00
vr41xx treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
Kbuild treewide: Add SPDX license identifier - Kbuild 2019-05-30 11:32:33 -07:00
Kbuild.platforms MIPS: add support for SGI Octane (IP30) 2019-11-01 14:58:56 -07:00
Kconfig The main MIPS changes for 5.6: 2020-01-31 11:28:31 -08:00
Kconfig.debug MIPS: cmdline: Remove redundant Kconfig defaults 2019-10-09 15:53:16 -07:00
Makefile Merge git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6 2019-11-25 19:49:58 -08:00
Makefile.postlink MIPS: fix indentation of the 'RELOCS' message 2020-01-20 15:37:30 -08:00