aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorKai Tietz <kai.tietz@onevision.com>2009-10-27 17:14:47 +0000
committerKai Tietz <ktietz@gcc.gnu.org>2009-10-27 18:14:47 +0100
commit41ca8d08460314d305c79140abef6c9587b9b446 (patch)
tree533c525e054265aa03544fa40b7a4795744eb7c0 /gcc
parent2c9062e2c161350768abb05284a6e334f9261145 (diff)
downloadgcc-41ca8d08460314d305c79140abef6c9587b9b446.zip
gcc-41ca8d08460314d305c79140abef6c9587b9b446.tar.gz
gcc-41ca8d08460314d305c79140abef6c9587b9b446.tar.bz2
mingw32.h (CHECK_EXECUTE_STACK_ENABLED): New macro.
2009-10-27 Kai Tietz <kai.tietz@onevision.com> PR/41799 * config/i386/mingw32.h (CHECK_EXECUTE_STACK_ENABLED): New macro. * config/i386/mingw.opt: Add fset-stack-executable. * config/i386/i386.c (ix86_trampoline_init): Make call to emit_library_call conditional, if CHECK_EXECUTE_STACK_ENABLED is defined and its value is not zero. * doc/invoke.texi From-SVN: r153606
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog10
-rw-r--r--gcc/config/i386/i386.c3
-rw-r--r--gcc/config/i386/mingw.opt4
-rw-r--r--gcc/config/i386/mingw32.h2
-rw-r--r--gcc/doc/invoke.texi11
5 files changed, 29 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5a0bdb2..42707f8 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,13 @@
+2009-10-27 Kai Tietz <kai.tietz@onevision.com>
+
+ PR/41799
+ * config/i386/mingw32.h (CHECK_EXECUTE_STACK_ENABLED): New macro.
+ * config/i386/mingw.opt: Add fset-stack-executable.
+ * config/i386/i386.c (ix86_trampoline_init): Make call to
+ emit_library_call conditional, if CHECK_EXECUTE_STACK_ENABLED is
+ defined and its value is not zero.
+ * doc/invoke.texi
+
2009-10-27 Richard Guenther <rguenther@suse.de>
* tree-ssa-structalias.c (find_func_aliases): In IPA mode
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 6065f49..a4e51af 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -20042,6 +20042,9 @@ ix86_trampoline_init (rtx m_tramp, tree fndecl, rtx chain_value)
}
#ifdef ENABLE_EXECUTE_STACK
+#ifdef CHECK_EXECUTE_STACK_ENABLED
+ if (CHECK_EXECUTE_STACK_ENABLED)
+#endif
emit_library_call (gen_rtx_SYMBOL_REF (Pmode, "__enable_execute_stack"),
LCT_NORMAL, VOIDmode, 1, XEXP (m_tramp, 0), Pmode);
#endif
diff --git a/gcc/config/i386/mingw.opt b/gcc/config/i386/mingw.opt
index 6be904e..bd9a4b6 100644
--- a/gcc/config/i386/mingw.opt
+++ b/gcc/config/i386/mingw.opt
@@ -21,3 +21,7 @@
Wpedantic-ms-format
C ObjC C++ ObjC++ Var(warn_pedantic_ms_format) Init(1) Warning
Warn about none ISO msvcrt scanf/printf width extensions
+
+fset-stack-executable
+Common Report Var(flag_setstackexecutable) Init(1) Optimization
+For nested functions on stack executable permission is set.
diff --git a/gcc/config/i386/mingw32.h b/gcc/config/i386/mingw32.h
index 9dcc5ba..4f8b101 100644
--- a/gcc/config/i386/mingw32.h
+++ b/gcc/config/i386/mingw32.h
@@ -202,6 +202,8 @@ __enable_execute_stack (void *addr) \
#undef ENABLE_EXECUTE_STACK
#define ENABLE_EXECUTE_STACK MINGW_ENABLE_EXECUTE_STACK
+#undef CHECK_EXECUTE_STACK_ENABLED
+#define CHECK_EXECUTE_STACK_ENABLED flag_setstackexecutable
#ifdef IN_LIBGCC2
#include <windows.h>
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 4a9ffbf..60f67c7 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -877,7 +877,8 @@ See i386 and x86-64 Options.
@emph{i386 and x86-64 Windows Options}
@gccoptlist{-mconsole -mcygwin -mno-cygwin -mdll
--mnop-fun-dllimport -mthread -municode -mwin32 -mwindows}
+-mnop-fun-dllimport -mthread -municode -mwin32 -mwindows
+-fno-set-stack-executable}
@emph{Xstormy16 Options}
@gccoptlist{-msim}
@@ -16704,6 +16705,14 @@ specifies that a GUI application is to be generated by
instructing the linker to set the PE header subsystem type
appropriately.
+@item -fno-set-stack-executable
+@opindex fno-set-stack-executable
+This option is available for MinGW targets. It specifies that
+the executable flag for stack used by nested functions isn't
+set. This is necessary for binaries running in kernel mode of
+Windows, as there the user32 API, which is used to set executable
+privileges, isn't available.
+
@item -mpe-aligned-commons
@opindex mpe-aligned-commons
This option is available for Cygwin and MinGW targets. It