OSDN Git Service

2009-10-27 Kai Tietz <kai.tietz@onevision.com>
authorktietz <ktietz@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 27 Oct 2009 17:14:47 +0000 (17:14 +0000)
committerktietz <ktietz@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 27 Oct 2009 17:14:47 +0000 (17:14 +0000)
        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

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@153606 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/i386/i386.c
gcc/config/i386/mingw.opt
gcc/config/i386/mingw32.h
gcc/doc/invoke.texi

index 5a0bdb2..42707f8 100644 (file)
@@ -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
index 6065f49..a4e51af 100644 (file)
@@ -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
index 6be904e..bd9a4b6 100644 (file)
@@ -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.
index 9dcc5ba..4f8b101 100644 (file)
@@ -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>
index 4a9ffbf..60f67c7 100644 (file)
@@ -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