gcc/libgcc
Richard Earnshaw ebdb6f2377 PR target/86951 arm - Handle speculation barriers on pre-armv7 CPUs
The AArch32 instruction sets prior to Armv7 do not define the ISB and
DSB instructions that are needed to form a speculation barrier.  While
I do not know of any instances of cores based on those instruction
sets being vulnerable to speculative side channel attacks it is
possible to run code built for those ISAs on more recent hardware
where they would become vulnerable.

This patch works around this by using a library call added to libgcc.
That code can then take any platform-specific actions necessary to
ensure safety.

For the moment I've only handled two cases: the library code being
built for armv7 or later anyway and running on Linux.

On Linux we can handle this by calling the kernel function that will
flush a small amount of cache.  Such a sequence ends with a ISB+DSB
sequence if running on an Armv7 or later CPU.

gcc:

	PR target/86951
	* config/arm/arm-protos.h (arm_emit_speculation_barrier): New
	prototype.
	* config/arm/arm.c (speculation_barrier_libfunc): New static
	variable.
	(arm_init_libfuncs): Initialize it.
	(arm_emit_speculation_barrier): New function.
	* config/arm/arm.md (speculation_barrier): Call
	arm_emit_speculation_barrier for architectures that do not have 
	DSB or ISB.
	(speculation_barrier_insn): Only match on Armv7 or later.

libgcc:

	PR target/86951
	* config/arm/lib1funcs.asm (speculation_barrier): New function.
	* config/arm/t-arm (LIB1ASMFUNCS): Add it to list of functions
	to build.

From-SVN: r263806
2018-08-23 09:47:34 +00:00
..
config PR target/86951 arm - Handle speculation barriers on pre-armv7 CPUs 2018-08-23 09:47:34 +00:00
soft-fp
ChangeLog PR target/86951 arm - Handle speculation barriers on pre-armv7 CPUs 2018-08-23 09:47:34 +00:00
config.host commit missed change from r263764 2018-08-22 12:05:45 +00:00
config.in re PR debug/83917 (with -mcall-ms2sysv-xlogues, stepping into x86 tail-call restore stub gives bad backtrace) 2018-02-28 09:59:15 +01:00
configure Add missing '|' as wrong patch was applied. 2018-07-05 14:28:01 -06:00
configure.ac add support for --disable-gcov 2018-06-27 10:04:25 +00:00
crtstuff.c * crtstuff.c: Remove declaration of _Jv_RegisterClasses. 2018-05-30 17:21:48 -06:00
dfp-bit.c Update copyright years. 2018-01-03 11:03:58 +01:00
dfp-bit.h Update copyright years. 2018-01-03 11:03:58 +01:00
divmod.c Update copyright years. 2018-01-03 11:03:58 +01:00
empty.mk
emutls.c Update copyright years. 2018-01-03 11:03:58 +01:00
enable-execute-stack-empty.c
enable-execute-stack-mprotect.c Update copyright years. 2018-01-03 11:03:58 +01:00
find-symver.awk Update copyright years. 2018-01-03 11:03:58 +01:00
fixed-bit.c Update copyright years. 2018-01-03 11:03:58 +01:00
fixed-bit.h Update copyright years. 2018-01-03 11:03:58 +01:00
fixed-obj.mk
floatunsidf.c
floatunsisf.c
floatunsitf.c
floatunsixf.c
fp-bit.c Update copyright years. 2018-01-03 11:03:58 +01:00
fp-bit.h Update copyright years. 2018-01-03 11:03:58 +01:00
gbl-ctors.h Update copyright years. 2018-01-03 11:03:58 +01:00
gcov.h Update copyright years. 2018-01-03 11:03:58 +01:00
gen-fixed.sh
generic-morestack-thread.c Update copyright years. 2018-01-03 11:03:58 +01:00
generic-morestack.c re PR libgcc/86213 (-fsplit-stack runtime may clobber SSE input param reg) 2018-06-20 21:11:23 +00:00
generic-morestack.h Update copyright years. 2018-01-03 11:03:58 +01:00
gstdint.h
gthr-posix.h Update copyright years. 2018-01-03 11:03:58 +01:00
gthr-single.h Update copyright years. 2018-01-03 11:03:58 +01:00
gthr.h Update copyright years. 2018-01-03 11:03:58 +01:00
libgcc2.c Update copyright years. 2018-01-03 11:03:58 +01:00
libgcc2.h Update copyright years. 2018-01-03 11:03:58 +01:00
libgcc-std.ver.in Update copyright years. 2018-01-03 11:03:58 +01:00
libgcov-driver-system.c Fix libgcov-driver-system bootstrap failure (PR bootstrap/86057). 2018-06-07 04:21:35 +00:00
libgcov-driver.c Fix compilation of libgcov with GCOV_LOCKED=0. 2018-06-07 04:23:16 +00:00
libgcov-interface.c Update copyright years. 2018-01-03 11:03:58 +01:00
libgcov-merge.c Update copyright years. 2018-01-03 11:03:58 +01:00
libgcov-profiler.c __gcov_indirect_call_callee can't be null in __gcov_indirect_call_profiler_v2. 2018-08-01 10:22:18 +00:00
libgcov-util.c Fix libgcov-driver-system bootstrap failure (PR bootstrap/86057). 2018-06-07 04:21:35 +00:00
libgcov.h Update copyright years. 2018-01-03 11:03:58 +01:00
Makefile.in Fix typo in libgcc/Makefile.in 2018-06-27 20:32:27 +00:00
memcmp.c
memcpy.c
memmove.c
memset.c
mkheader.sh Update copyright years. 2018-01-03 11:03:58 +01:00
mkmap-flat.awk Update copyright years. 2018-01-03 11:03:58 +01:00
mkmap-symver.awk Update copyright years. 2018-01-03 11:03:58 +01:00
offloadstuff.c Update copyright years. 2018-01-03 11:03:58 +01:00
shared-object.mk
siditi-object.mk
static-object.mk
sync.c Update copyright years. 2018-01-03 11:03:58 +01:00
udivmod.c Update copyright years. 2018-01-03 11:03:58 +01:00
udivmodsi4.c Update copyright years. 2018-01-03 11:03:58 +01:00
unwind-arm-common.inc Update copyright years. 2018-01-03 11:03:58 +01:00
unwind-c.c Update copyright years. 2018-01-03 11:03:58 +01:00
unwind-compat.c Update copyright years. 2018-01-03 11:03:58 +01:00
unwind-compat.h Update copyright years. 2018-01-03 11:03:58 +01:00
unwind-dw2-fde-compat.c Update copyright years. 2018-01-03 11:03:58 +01:00
unwind-dw2-fde-dip.c Update copyright years. 2018-01-03 11:03:58 +01:00
unwind-dw2-fde.c Update copyright years. 2018-01-03 11:03:58 +01:00
unwind-dw2-fde.h Update copyright years. 2018-01-03 11:03:58 +01:00
unwind-dw2.c SVE unwinding 2018-01-13 17:56:52 +00:00
unwind-dw2.h Update copyright years. 2018-01-03 11:03:58 +01:00
unwind-generic.h libgcc/CET: Skip signal frames when unwinding shadow stack 2018-04-19 10:05:39 -07:00
unwind-pe.h Update copyright years. 2018-01-03 11:03:58 +01:00
unwind-seh.c Update copyright years. 2018-01-03 11:03:58 +01:00
unwind-sjlj.c Update copyright years. 2018-01-03 11:03:58 +01:00
unwind.inc libgcc/CET: Skip signal frames when unwinding shadow stack 2018-04-19 10:05:39 -07:00
vtv_end_preinit.c Update copyright years. 2018-01-03 11:03:58 +01:00
vtv_end.c Update copyright years. 2018-01-03 11:03:58 +01:00
vtv_start_preinit.c Update copyright years. 2018-01-03 11:03:58 +01:00
vtv_start.c Update copyright years. 2018-01-03 11:03:58 +01:00