[gcc(refs/users/ppalka/heads/libstdcxx-constrained-algos)] Emit .note.GNU-stack for soft-float linux targets.
Patrick Palka
ppalka@gcc.gnu.org
Sat Jan 25 22:52:00 GMT 2020
https://gcc.gnu.org/g:a3c1e1f2ff88628cb163abc5331af752221eddc0
commit a3c1e1f2ff88628cb163abc5331af752221eddc0
Author: Dragan Mladjenovic <dragan.mladjenovic@rt-rk.com>
Date: Thu Jan 23 16:38:14 2020 +0100
Emit .note.GNU-stack for soft-float linux targets.
gcc/ChangeLog:
2020-01-23 Dragan Mladjenovic <dmladjenovic@wavecomp.com>
* config/mips/linux.h (NEED_INDICATE_EXEC_STACK): Define to
TARGET_SOFT_FLOAT.
* config/mips/mips.c (TARGET_ASM_FILE_END): Define to ...
(mips_asm_file_end): New function. Delegate to
file_end_indicate_exec_stack if NEED_INDICATE_EXEC_STACK is true.
* config/mips/mips.h (NEED_INDICATE_EXEC_STACK): Define to 0.
libgcc/ChangeLog:
2020-01-23 Dragan Mladjenovic <dmladjenovic@wavecomp.com>
* config/mips/gnustack.h: New file.
* config/mips/crti.S: Include gnustack.h.
* config/mips/crtn.S: Likewise.
* config/mips/mips16.S: Likewise.
* config/mips/vr4120-div.S: Likewise.
Diff:
---
gcc/ChangeLog | 9 +++++++++
gcc/config/mips/linux.h | 4 ++++
gcc/config/mips/mips.c | 11 +++++++++++
gcc/config/mips/mips.h | 2 ++
libgcc/ChangeLog | 8 ++++++++
libgcc/config/mips/crti.S | 3 +++
libgcc/config/mips/crtn.S | 3 +++
libgcc/config/mips/gnustack.h | 7 +++++++
libgcc/config/mips/mips16.S | 3 +++
libgcc/config/mips/vr4120-div.S | 3 +++
10 files changed, 53 insertions(+)
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3d50dab..b8b9b55 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2020-01-23 Dragan Mladjenovic <dmladjenovic@wavecomp.com>
+
+ * config/mips/linux.h (NEED_INDICATE_EXEC_STACK): Define to
+ TARGET_SOFT_FLOAT.
+ * config/mips/mips.c (TARGET_ASM_FILE_END): Define to ...
+ (mips_asm_file_end): New function. Delegate to
+ file_end_indicate_exec_stack if NEED_INDICATE_EXEC_STACK is true.
+ * config/mips/mips.h (NEED_INDICATE_EXEC_STACK): Define to 0.
+
2020-01-23 Jakub Jelinek <jakub@redhat.com>
PR target/93376
diff --git a/gcc/config/mips/linux.h b/gcc/config/mips/linux.h
index f8db8d5..183b62f 100644
--- a/gcc/config/mips/linux.h
+++ b/gcc/config/mips/linux.h
@@ -50,3 +50,7 @@ along with GCC; see the file COPYING3. If not see
#define GNU_USER_DYNAMIC_LINKERN32 \
CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKERN32, UCLIBC_DYNAMIC_LINKERN32, \
BIONIC_DYNAMIC_LINKERN32, MUSL_DYNAMIC_LINKERN32)
+
+#undef NEED_INDICATE_EXEC_STACK
+
+#define NEED_INDICATE_EXEC_STACK TARGET_SOFT_FLOAT
diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c
index c9a706e..dae189e 100644
--- a/gcc/config/mips/mips.c
+++ b/gcc/config/mips/mips.c
@@ -22550,6 +22550,13 @@ mips_starting_frame_offset (void)
return 0;
return crtl->outgoing_args_size + MIPS_GP_SAVE_AREA_SIZE;
}
+
+static void
+mips_asm_file_end (void)
+{
+ if (NEED_INDICATE_EXEC_STACK)
+ file_end_indicate_exec_stack ();
+}
/* Initialize the GCC target structure. */
#undef TARGET_ASM_ALIGNED_HI_OP
@@ -22857,6 +22864,10 @@ mips_starting_frame_offset (void)
#undef TARGET_STARTING_FRAME_OFFSET
#define TARGET_STARTING_FRAME_OFFSET mips_starting_frame_offset
+#undef TARGET_ASM_FILE_END
+#define TARGET_ASM_FILE_END mips_asm_file_end
+
+
struct gcc_target targetm = TARGET_INITIALIZER;
#include "gt-mips.h"
diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h
index 1f9bc86..3ce0c19 100644
--- a/gcc/config/mips/mips.h
+++ b/gcc/config/mips/mips.h
@@ -3438,3 +3438,5 @@ struct GTY(()) machine_function {
(TARGET_LOAD_STORE_PAIRS \
&& (TUNE_P5600 || TUNE_I6400 || TUNE_P6600) \
&& !TARGET_MICROMIPS && !TARGET_FIX_24K)
+
+#define NEED_INDICATE_EXEC_STACK 0
diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog
index bd8cc38..eddcd9f 100644
--- a/libgcc/ChangeLog
+++ b/libgcc/ChangeLog
@@ -1,3 +1,11 @@
+2020-01-23 Dragan Mladjenovic <dmladjenovic@wavecomp.com>
+
+ * config/mips/gnustack.h: New file.
+ * config/mips/crti.S: Include gnustack.h.
+ * config/mips/crtn.S: Likewise.
+ * config/mips/mips16.S: Likewise.
+ * config/mips/vr4120-div.S: Likewise.
+
2020-01-23 Martin Liska <mliska@suse.cz>
* libgcov-driver.c (prune_topn_counter): Remove
diff --git a/libgcc/config/mips/crti.S b/libgcc/config/mips/crti.S
index 3347a78..6705642 100644
--- a/libgcc/config/mips/crti.S
+++ b/libgcc/config/mips/crti.S
@@ -21,6 +21,9 @@ a copy of the GCC Runtime Library Exception along with this program;
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
<http://www.gnu.org/licenses/>. */
+/* An executable stack is *not* required for these functions. */
+#include "gnustack.h"
+
/* 4 slots for argument spill area. 1 for cpreturn, 1 for stack.
Return spill offset of 40 and 20. Aligned to 16 bytes for n32. */
diff --git a/libgcc/config/mips/crtn.S b/libgcc/config/mips/crtn.S
index 7f46829..ceede64 100644
--- a/libgcc/config/mips/crtn.S
+++ b/libgcc/config/mips/crtn.S
@@ -21,6 +21,9 @@ a copy of the GCC Runtime Library Exception along with this program;
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
<http://www.gnu.org/licenses/>. */
+/* An executable stack is *not* required for these functions. */
+#include "gnustack.h"
+
/* 4 slots for argument spill area. 1 for cpreturn, 1 for stack.
Return spill offset of 40 and 20. Aligned to 16 bytes for n32. */
diff --git a/libgcc/config/mips/gnustack.h b/libgcc/config/mips/gnustack.h
new file mode 100644
index 0000000..c7e9fe7
--- /dev/null
+++ b/libgcc/config/mips/gnustack.h
@@ -0,0 +1,7 @@
+#include "config.h"
+#if defined(__ELF__) && defined(__linux__)
+#if defined (__mips_soft_float)
+ .section .note.GNU-stack,"",%progbits
+ .previous
+#endif
+#endif
diff --git a/libgcc/config/mips/mips16.S b/libgcc/config/mips/mips16.S
index 396285e..5c3678b 100644
--- a/libgcc/config/mips/mips16.S
+++ b/libgcc/config/mips/mips16.S
@@ -21,6 +21,9 @@ a copy of the GCC Runtime Library Exception along with this program;
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
<http://www.gnu.org/licenses/>. */
+/* An executable stack is *not* required for these functions. */
+#include "gnustack.h"
+
#include "auto-host.h"
#if defined(__mips_micromips) || defined(__mips_soft_float) \
diff --git a/libgcc/config/mips/vr4120-div.S b/libgcc/config/mips/vr4120-div.S
index 92226b5..2999c77 100644
--- a/libgcc/config/mips/vr4120-div.S
+++ b/libgcc/config/mips/vr4120-div.S
@@ -22,6 +22,9 @@ a copy of the GCC Runtime Library Exception along with this program;
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
<http://www.gnu.org/licenses/>. */
+/* An executable stack is *not* required for these functions. */
+#include "gnustack.h"
+
/* This file contains functions which implement divsi3 and modsi3 for
-mfix-vr4120. div and ddiv do not give the correct result when one
of the operands is negative. */
More information about the Gcc-cvs
mailing list