Find a file
Jakub Jelinek f3ddd6929a Implement protection of stack variables
This patch implements the protection of stack variables.

It lays out stack variables as well as the different red zones,
emits some prologue code to populate the shadow memory as to poison
(mark as non-accessible) the regions of the red zones and mark the
regions of stack variables as accessible, and emit some epilogue code
to un-poison (mark as accessible) the regions of red zones right
before the function exits.

	* Makefile.in (asan.o): Depend on $(EXPR_H) $(OPTABS_H).
	(cfgexpand.o): Depend on asan.h.
	* asan.c: Include expr.h and optabs.h.
	(asan_shadow_set): New variable.
	(asan_shadow_cst, asan_emit_stack_protection): New functions.
	(asan_init_shadow_ptr_types): Initialize also asan_shadow_set.
	* cfgexpand.c: Include asan.h.  Define HOST_WIDE_INT heap vector.
	(partition_stack_vars): If i is large alignment and j small
	alignment or vice versa, break out of the loop instead of continue,
	and put the test earlier.  If flag_asan, break out of the loop
	if for small alignment size is different.
	(struct stack_vars_data): New type.
	(expand_stack_vars): Add DATA argument.  Change PRED type to
	function taking size_t argument instead of tree.  Adjust pred
	calls.  Fill DATA in and add needed padding in between variables
	if -faddress-sanitizer.
	(defer_stack_allocation): Defer everything for flag_asan.
	(stack_protect_decl_phase_1, stack_protect_decl_phase_2): Take
	size_t index into stack_vars array instead of the decl directly.
	(asan_decl_phase_3): New function.
	(expand_used_vars): Return var destruction sequence.  Adjust
	expand_stack_vars calls, add another one for flag_asan.  Call
	asan_emit_stack_protection if expand_stack_vars added anything
	to the vectors.
	(expand_gimple_basic_block): Add disable_tail_calls argument.
	(gimple_expand_cfg): Pass true to it if expand_used_vars returned
	non-NULL.  Emit the sequence returned by expand_used_vars after
	return_label.
	* asan.h (asan_emit_stack_protection): New prototype.
	(asan_shadow_set): New decl.
	(ASAN_RED_ZONE_SIZE, ASAN_STACK_MAGIC_LEFT, ASAN_STACK_MAGIC_MIDDLE,
	ASAN_STACK_MAGIC_RIGHT, ASAN_STACK_FRAME_MAGIC): Define.
	(asan_protect_stack_decl): New inline.
	* toplev.c (process_options): Also disable -faddress-sanitizer on
	!FRAME_GROWS_DOWNWARDS targets.

From-SVN: r193436
2012-11-12 16:52:26 +01:00
boehm-gc configure.ac: Add stanza for *-*-gnu* threads configuration. 2012-11-04 23:56:02 +01:00
config bid_functions.h: Check for __GLIBC__ additionally to LINUX when defining format specifiers. 2012-11-05 00:08:42 +01:00
contrib Add a contrib script for comparing the performance of two sets of 2012-11-07 00:36:04 +00:00
fixincludes It is October, not September. :) 2012-10-29 16:58:16 +00:00
gcc Implement protection of stack variables 2012-11-12 16:52:26 +01:00
gnattools Remove obsolete IRIX 6.5 support 2012-03-14 16:33:37 +00:00
include Add C++ attribute abi_tag and -Wabi-tag option. 2012-11-09 11:14:37 -05:00
INSTALL README: Also refer to the online installation instructions. 2012-08-25 20:48:20 +00:00
intl Fix unportable shell quoting. 2010-09-27 20:19:41 +00:00
libada Makefile.in: Revert most changes. 2012-11-07 04:58:23 +00:00
libatomic acinclude.m4 (LIBAT_CHECK_IFUNC): Clarify message. 2012-11-05 00:27:03 +01:00
libbacktrace mmap.c (backtrace_vector_release): Correct last patch: add aligned, not size. 2012-10-29 18:42:05 +00:00
libcpp Implement a flag -fext-numeric-literals that allows control of whether GNU... 2012-11-10 00:08:49 +00:00
libdecnumber bid_functions.h: Check for __GLIBC__ additionally to LINUX when defining format specifiers. 2012-11-05 00:08:42 +01:00
libffi linux64_closure.S: Add new ABI support. 2012-10-31 14:15:34 +10:30
libgcc generic-morestack.c (__generic_morestack): Align the returned stack pointer to a 32 byte boundary. 2012-11-06 23:04:28 +00:00
libgfortran bessel.m4: Remove useless statement. 2012-10-28 17:54:44 +01:00
libgo reflect: Fix bug comparing struct field types. 2012-11-10 20:24:04 +00:00
libgomp Use -Wl,-undefined,dynamic_lookup on darwin 2012-11-07 15:12:27 -08:00
libiberty cp-demangle.c (d_unqualified_name): Handle abi tags here. 2012-11-10 21:11:15 -05:00
libitm Add HTM fastpath and use Intel RTM for it on x86. 2012-11-09 17:04:40 +00:00
libjava config.gcc: Match arm*-*-linux-* for ARM Linux/GNU. 2012-10-15 21:12:23 +00:00
libmudflap * configure: Regenerated. 2012-09-14 19:37:57 -04:00
libobjc rs6000-cpus.def (POWERPC_MASKS): Don't assume OPTION_MASK_STRICT_ALIGN is defined. 2012-10-19 19:10:03 +00:00
libquadmath fmaq.c (fmaq): Fix build. 2012-11-02 19:08:05 +01:00
libssp * configure: Regenerated. 2012-09-14 19:40:25 -04:00
libstdc++-v3 chapter.txml: Remove whitespace inside <keyword>. 2012-11-11 21:17:43 +00:00
lto-plugin * configure: Regenerated. 2012-09-14 19:42:24 -04:00
maintainer-scripts crontab: Disable snapshots from gcc-4_5-branch. 2012-07-02 09:16:29 +00:00
zlib * configure: Regenerated. 2012-09-14 19:43:33 -04:00
ABOUT-NLS
ChangeLog Fix for building against Mingw64 w32api 2012-11-03 16:56:44 -07:00
ChangeLog.tree-ssa
compile
config-ml.in MAINTAINERS (crx port, [...]): Remove. 2011-03-22 19:58:18 +00:00
config.guess oops - omitted from previous delta. 2011-06-06 10:34:35 +00:00
config.rpath Remove freebsd1 from libtool.m4 macros and config.rpath. 2011-02-13 11:45:53 +00:00
config.sub Update config.sub to 2012-04-18 version from official repo. 2012-04-25 15:48:28 +00:00
configure Fix for building against Mingw64 w32api 2012-11-03 16:56:44 -07:00
configure.ac Fix for building against Mingw64 w32api 2012-11-03 16:56:44 -07:00
COPYING
COPYING.LIB
COPYING.RUNTIME
COPYING3
COPYING3.LIB
depcomp
install-sh
libtool-ldflags
libtool.m4 re PR bootstrap/38607 (AIX error messages about TOC during build) 2012-09-14 19:23:41 -04:00
ltgcc.m4
ltmain.sh backport: ltmain.sh (relink): Use absolute path when hardcoding with -L. 2011-01-13 18:51:10 +00:00
ltoptions.m4 Sync from git Libtool and regenerate. 2009-12-05 17:18:53 +00:00
ltsugar.m4
ltversion.m4 Sync from git Libtool and regenerate. 2009-12-05 17:18:53 +00:00
lt~obsolete.m4 Sync from git Libtool and regenerate. 2009-12-05 17:18:53 +00:00
MAINTAINERS Add myself to MAINTAINERS 2012-10-30 08:30:21 +00:00
Makefile.def libgo: Use libbacktrace rather than debug/elf registration. 2012-09-28 14:48:30 +00:00
Makefile.in re PR bootstrap/54820 (ada: cannot find -lstdc++ since 4.8.0 20121002) 2012-10-22 07:27:21 +00:00
Makefile.tpl re PR bootstrap/54820 (ada: cannot find -lstdc++ since 4.8.0 20121002) 2012-10-22 07:27:21 +00:00
missing
mkdep
mkinstalldirs
move-if-change Import move-if-change script from gnulib. 2011-02-12 15:48:30 +00:00
README * README: Document use of ranges of years in copyright notices. 2012-07-16 15:01:34 +01:00
symlink-tree
ylwrap

This directory contains the GNU Compiler Collection (GCC).

The GNU Compiler Collection is free software.  See the files whose
names start with COPYING for copying permission.  The manuals, and
some of the runtime libraries, are under different terms; see the
individual source files for details.

The directory INSTALL contains copies of the installation information
as HTML and plain text.  The source of this information is
gcc/doc/install.texi.  The installation information includes details
of what is included in the GCC sources and what files GCC installs.

See the file gcc/doc/gcc.texi (together with other files that it
includes) for usage and porting information.  An online readable
version of the manual is in the files gcc/doc/gcc.info*.

See http://gcc.gnu.org/bugs/ for how to report bugs usefully.

Copyright years on GCC source files may be listed using range
notation, e.g., 1987-2012, indicating that every year in the range,
inclusive, is a copyrightable year that could otherwise be listed
individually.