MIPS: Disable stack checks on MIPS kernels
Disable stack checking on MIPS kernels. Some distribution toolchains might pass the -fstack-check option to gcc. This results in a store-doubleword instruction being emitted at the top of all functions that checks the available stack space. E.g., a80000000001d740 <per_cpu_init>: a80000000001d740: ffa0bfc0 sd zero,-16448(sp) a80000000001d744: 2405ffc9 li a1,-55 a80000000001d748: 67bdffc0 daddiu sp,sp,-64 Generally, this is undesirable, and especially on the SGI IP27 platform, it will trigger a NULL pointer dereference in '_raw_spin_lock_irq' during early init. Signed-off-by: Joshua Kinard <kumba@gentoo.org> Suggested-by: James Hogan <james.hogan@imgtec.com> Cc: Ralf Baechle <ralf@linux-mips.org> Cc: "Maciej W. Rozycki" <macro@linux-mips.org> Cc: linux-mips@linux-mips.org Patchwork: https://patchwork.linux-mips.org/patch/15132/ Signed-off-by: James Hogan <james.hogan@imgtec.com>
This commit is contained in:
parent
93e502b3c2
commit
573deec094
1 changed files with 15 additions and 0 deletions
|
@ -131,6 +131,21 @@ cflags-$(CONFIG_CPU_LITTLE_ENDIAN) += $(shell $(CC) -dumpmachine |grep -q 'mips.
|
|||
|
||||
cflags-$(CONFIG_SB1XXX_CORELIS) += $(call cc-option,-mno-sched-prolog) \
|
||||
-fno-omit-frame-pointer
|
||||
|
||||
# Some distribution-specific toolchains might pass the -fstack-check
|
||||
# option during the build, which adds a simple stack-probe at the beginning
|
||||
# of every function. This stack probe is to ensure that there is enough
|
||||
# stack space, else a SEGV is generated. This is not desirable for MIPS
|
||||
# as kernel stacks are small, placed in unmapped virtual memory, and do not
|
||||
# grow when overflowed. Especially on SGI IP27 platforms, this check will
|
||||
# lead to a NULL pointer dereference in _raw_spin_lock_irq.
|
||||
#
|
||||
# In disassembly, this stack probe appears at the top of a function as:
|
||||
# sd zero,<offset>(sp)
|
||||
# Where <offset> is a negative value.
|
||||
#
|
||||
cflags-y += -fno-stack-check
|
||||
|
||||
#
|
||||
# CPU-dependent compiler/assembler options for optimization.
|
||||
#
|
||||
|
|
Loading…
Reference in a new issue