This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[arm] Add .note.GNU-stack


The patch below adds .note.GNU-stack annotations to arm-linux targets.
Recent ARM cores can mark memory as no-execute, so this is actually useful in 
some cases.

Tested on arm-none-linux-gnueabi.
This is a merge from branches/csl/sourcerygxx-4_1.
Applied to mainline.

Paul

2006-11-02  Carlos O'Donell  <carlos@codesourcery.com>

	gcc/
	* config/arm/linux-elf.h (NEED_INDICATE_EXEC_STACK): Define as 1.
	* arm.c (arm_file_end): If NEED_INDICATE_EXEC_STACK call 
	file_end_indicate_exec_stack. 
	* arm.h [!NEED_INDICATE_EXEC_STACK] (NEED_INIDCATE_EXEC_STACK): 
	Define as 0.
	* lib1funcs.asm [__ELF__ && __linux__]: Emit .note.GNU-stack section
	for a non-executable stack.
	* crti.asm: Likewise.
	* crtn.asm: Likewise.
	* libunwind.S: Likewise. 

Index: gcc/config/arm/linux-elf.h
===================================================================
--- gcc/config/arm/linux-elf.h	(revision 118425)
+++ gcc/config/arm/linux-elf.h	(working copy)
@@ -104,3 +104,7 @@
 
 /* The GNU/Linux profiler needs a frame pointer.  */
 #define SUBTARGET_FRAME_POINTER_REQUIRED current_function_profile
+
+/* Add .note.GNU-stack.  */
+#undef NEED_INDICATE_EXEC_STACK
+#define NEED_INDICATE_EXEC_STACK	1
Index: gcc/config/arm/arm.c
===================================================================
--- gcc/config/arm/arm.c	(revision 118425)
+++ gcc/config/arm/arm.c	(working copy)
@@ -14417,6 +14417,10 @@ arm_file_end (void)
 {
   int regno;
 
+  if (NEED_INDICATE_EXEC_STACK)
+    /* Add .note.GNU-stack.  */
+    file_end_indicate_exec_stack ();
+
   if (! thumb_call_reg_needed)
     return;
 
Index: gcc/config/arm/lib1funcs.asm
===================================================================
--- gcc/config/arm/lib1funcs.asm	(revision 118425)
+++ gcc/config/arm/lib1funcs.asm	(working copy)
@@ -27,6 +27,13 @@ You should have received a copy of the G
 along with this program; see the file COPYING.  If not, write to
 the Free Software Foundation, 51 Franklin Street, Fifth Floor,
 Boston, MA 02110-1301, USA.  */
+
+/* An executable stack is *not* required for these functions.  */
+#if defined(__ELF__) && defined(__linux__)
+.section .note.GNU-stack,"",%progbits
+.previous
+#endif
+
 /* ------------------------------------------------------------------------ 
*/
 
 /* We need to know what prefix to add to function names.  */
Index: gcc/config/arm/arm.h
===================================================================
--- gcc/config/arm/arm.h	(revision 118425)
+++ gcc/config/arm/arm.h	(working copy)
@@ -2591,4 +2591,10 @@ enum arm_builtins
 
   ARM_BUILTIN_MAX
 };
+
+/* Do not emit .note.GNU-stack by default.  */
+#ifndef NEED_INDICATE_EXEC_STACK
+#define NEED_INDICATE_EXEC_STACK	0
+#endif
+
 #endif /* ! GCC_ARM_H */
Index: gcc/config/arm/crti.asm
===================================================================
--- gcc/config/arm/crti.asm	(revision 118425)
+++ gcc/config/arm/crti.asm	(working copy)
@@ -31,6 +31,12 @@
 #    the executable file might be covered by the GNU General Public License.
 # 
 
+/* An executable stack is *not* required for these functions.  */
+#if defined(__ELF__) && defined(__linux__)
+.section .note.GNU-stack,"",%progbits
+.previous
+#endif
+
 # This file just make a stack frame for the contents of the .fini and
 # .init sections.  Users may put any desired instructions in those
 # sections.
Index: gcc/config/arm/crtn.asm
===================================================================
--- gcc/config/arm/crtn.asm	(revision 118425)
+++ gcc/config/arm/crtn.asm	(working copy)
@@ -31,6 +31,12 @@
 #    the executable file might be covered by the GNU General Public License.
 # 
 
+/* An executable stack is *not* required for these functions.  */
+#if defined(__ELF__) && defined(__linux__)
+.section .note.GNU-stack,"",%progbits
+.previous
+#endif
+
 # This file just makes sure that the .fini and .init sections do in
 # fact return.  Users may put any desired instructions in those sections.
 # This file is the last thing linked into any executable.
Index: gcc/config/arm/libunwind.S
===================================================================
--- gcc/config/arm/libunwind.S	(revision 118425)
+++ gcc/config/arm/libunwind.S	(working copy)
@@ -26,6 +26,12 @@
    the Free Software Foundation, 51 Franklin Street, Fifth Floor,
    Boston, MA 02110-1301, USA.  */
 
+/* An executable stack is *not* required for these functions.  */
+#if defined(__ELF__) && defined(__linux__)
+.section .note.GNU-stack,"",%progbits
+.previous
+#endif
+
 #ifndef __symbian__
 
 #include "lib1funcs.asm"


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]