mirror of
https://gcc.gnu.org/git/gcc.git
synced 2025-01-19 19:04:11 +08:00
Enable no-exec stacks for more targets using the Linux kernel.
Building glibc for many different configurations and running the compilation parts of the testsuite runs into failures of the elf/check-execstack test for hppa and microblaze. Those configurations default to executable stacks in the Linux kernel because of VM_DATA_DEFAULT_FLAGS definitions including VM_EXEC (VM_DATA_DEFAULT_FLAGS being the default definition of VM_STACK_DEFAULT_FLAGS). This fails because those configurations are not generating .note.GNU-stack sections to indicate that programs do not need an executable stack. This patch fixes GCC to generate those sections on those architectures (when configured for a target using the Linux kernel), as it does on other architectures, together with adding that section to libgcc .S sources, with the same code as used on other architectures (or a variant using "#ifdef __linux__" instead of the usual "#if defined(__ELF__) && defined(__linux__)" for microblaze, as that configuration doesn't use elfos.h and so doesn't define __ELF__). This suffices to eliminate that glibc test failure. (For hppa, the compilation parts of the glibc testsuite still fail because of the separate elf/check-textrel failure.) gcc: * config/microblaze/linux.h (TARGET_ASM_FILE_END): Likewise. * config/pa/pa.h (NEED_INDICATE_EXEC_STACK): Likewise. * config/pa/pa-linux.h (NEED_INDICATE_EXEC_STACK): Likewise. * config/pa/pa.c (pa_hpux_file_end): Rename to pa_file_end. Define unconditionally, with [ASM_OUTPUT_EXTERNAL_REAL] conditionals inside the function instead of around it. Call file_end_indicate_exec_stack if NEED_INDICATE_EXEC_STACK. (TARGET_ASM_FILE_END): Define unconditionally to pa_file_end. libgcc: * config/microblaze/crti.S, config/microblaze/crtn.S, config/microblaze/divsi3.S, config/microblaze/moddi3.S, config/microblaze/modsi3.S, config/microblaze/muldi3_hard.S, config/microblaze/mulsi3.S, config/microblaze/stack_overflow_exit.S, config/microblaze/udivsi3.S, config/microblaze/umodsi3.S, config/pa/milli64.S: Add .note.GNU-stack section. From-SVN: r253204
This commit is contained in:
parent
ca617fd214
commit
938b6f1e5d
@ -1,3 +1,14 @@
|
||||
2017-09-26 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
* config/microblaze/linux.h (TARGET_ASM_FILE_END): Likewise.
|
||||
* config/pa/pa.h (NEED_INDICATE_EXEC_STACK): Likewise.
|
||||
* config/pa/pa-linux.h (NEED_INDICATE_EXEC_STACK): Likewise.
|
||||
* config/pa/pa.c (pa_hpux_file_end): Rename to pa_file_end.
|
||||
Define unconditionally, with [ASM_OUTPUT_EXTERNAL_REAL]
|
||||
conditionals inside the function instead of around it. Call
|
||||
file_end_indicate_exec_stack if NEED_INDICATE_EXEC_STACK.
|
||||
(TARGET_ASM_FILE_END): Define unconditionally to pa_file_end.
|
||||
|
||||
2017-09-26 Richard Biener <rguenther@suse.de>
|
||||
|
||||
* graphite-scop-detection.c (scop_detection::build_scop_depth): Rewrite,
|
||||
|
@ -57,3 +57,5 @@
|
||||
/* For the microblaze-*-linux* subtarget. */
|
||||
#undef TARGET_OS_CPP_BUILTINS
|
||||
#define TARGET_OS_CPP_BUILTINS() GNU_USER_TARGET_OS_CPP_BUILTINS()
|
||||
|
||||
#define TARGET_ASM_FILE_END file_end_indicate_exec_stack
|
||||
|
@ -141,3 +141,6 @@ along with GCC; see the file COPYING3. If not see
|
||||
#define HAVE_sync_compare_and_swaphi 1
|
||||
#define HAVE_sync_compare_and_swapsi 1
|
||||
#define HAVE_sync_compare_and_swapdi 1
|
||||
|
||||
#undef NEED_INDICATE_EXEC_STACK
|
||||
#define NEED_INDICATE_EXEC_STACK 1
|
||||
|
@ -159,9 +159,7 @@ static void pa_hpux64_gas_file_start (void) ATTRIBUTE_UNUSED;
|
||||
static void pa_hpux64_hpas_file_start (void) ATTRIBUTE_UNUSED;
|
||||
static void output_deferred_plabels (void);
|
||||
static void output_deferred_profile_counters (void) ATTRIBUTE_UNUSED;
|
||||
#ifdef ASM_OUTPUT_EXTERNAL_REAL
|
||||
static void pa_hpux_file_end (void);
|
||||
#endif
|
||||
static void pa_file_end (void);
|
||||
static void pa_init_libfuncs (void);
|
||||
static rtx pa_struct_value_rtx (tree, int);
|
||||
static bool pa_pass_by_reference (cumulative_args_t, machine_mode,
|
||||
@ -301,11 +299,7 @@ static size_t n_deferred_plabels = 0;
|
||||
#define TARGET_ASM_CAN_OUTPUT_MI_THUNK default_can_output_mi_thunk_no_vcall
|
||||
|
||||
#undef TARGET_ASM_FILE_END
|
||||
#ifdef ASM_OUTPUT_EXTERNAL_REAL
|
||||
#define TARGET_ASM_FILE_END pa_hpux_file_end
|
||||
#else
|
||||
#define TARGET_ASM_FILE_END output_deferred_plabels
|
||||
#endif
|
||||
#define TARGET_ASM_FILE_END pa_file_end
|
||||
|
||||
#undef TARGET_ASM_RELOC_RW_MASK
|
||||
#define TARGET_ASM_RELOC_RW_MASK pa_reloc_rw_mask
|
||||
@ -9979,22 +9973,26 @@ pa_hpux_asm_output_external (FILE *file, tree decl, const char *name)
|
||||
extern_symbol p = {decl, name};
|
||||
vec_safe_push (extern_symbols, p);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Output text required at the end of an assembler file.
|
||||
This includes deferred plabels and .import directives for
|
||||
all external symbols that were actually referenced. */
|
||||
|
||||
static void
|
||||
pa_hpux_file_end (void)
|
||||
pa_file_end (void)
|
||||
{
|
||||
#ifdef ASM_OUTPUT_EXTERNAL_REAL
|
||||
unsigned int i;
|
||||
extern_symbol *p;
|
||||
|
||||
if (!NO_DEFERRED_PROFILE_COUNTERS)
|
||||
output_deferred_profile_counters ();
|
||||
#endif
|
||||
|
||||
output_deferred_plabels ();
|
||||
|
||||
#ifdef ASM_OUTPUT_EXTERNAL_REAL
|
||||
for (i = 0; vec_safe_iterate (extern_symbols, i, &p); i++)
|
||||
{
|
||||
tree decl = p->decl;
|
||||
@ -10005,9 +10003,12 @@ pa_hpux_file_end (void)
|
||||
}
|
||||
|
||||
vec_free (extern_symbols);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (NEED_INDICATE_EXEC_STACK)
|
||||
file_end_indicate_exec_stack ();
|
||||
}
|
||||
|
||||
/* Implement TARGET_CAN_CHANGE_MODE_CLASS. */
|
||||
|
||||
static bool
|
||||
|
@ -1306,3 +1306,5 @@ do { \
|
||||
seven and four instructions, respectively. */
|
||||
#define MAX_PCREL17F_OFFSET \
|
||||
(flag_pic ? (TARGET_HPUX ? 198164 : 221312) : 240000)
|
||||
|
||||
#define NEED_INDICATE_EXEC_STACK 0
|
||||
|
@ -1,3 +1,13 @@
|
||||
2017-09-26 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
* config/microblaze/crti.S, config/microblaze/crtn.S,
|
||||
config/microblaze/divsi3.S, config/microblaze/moddi3.S,
|
||||
config/microblaze/modsi3.S, config/microblaze/muldi3_hard.S,
|
||||
config/microblaze/mulsi3.S,
|
||||
config/microblaze/stack_overflow_exit.S,
|
||||
config/microblaze/udivsi3.S, config/microblaze/umodsi3.S,
|
||||
config/pa/milli64.S: Add .note.GNU-stack section.
|
||||
|
||||
2017-09-23 Daniel Santos <daniel.santos@pobox.com>
|
||||
|
||||
* configure.ac: Add Check for HAVE_AS_AVX.
|
||||
|
@ -24,6 +24,12 @@
|
||||
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. */
|
||||
#ifdef __linux__
|
||||
.section .note.GNU-stack,"",%progbits
|
||||
.previous
|
||||
#endif
|
||||
|
||||
.section .init, "ax"
|
||||
.global __init
|
||||
|
||||
|
@ -24,6 +24,12 @@
|
||||
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. */
|
||||
#ifdef __linux__
|
||||
.section .note.GNU-stack,"",%progbits
|
||||
.previous
|
||||
#endif
|
||||
|
||||
.section .init, "ax"
|
||||
lw r15, r0, r1
|
||||
rtsd r15, 8
|
||||
|
@ -32,6 +32,12 @@
|
||||
#
|
||||
#######################################
|
||||
|
||||
/* An executable stack is *not* required for these functions. */
|
||||
#ifdef __linux__
|
||||
.section .note.GNU-stack,"",%progbits
|
||||
.previous
|
||||
#endif
|
||||
|
||||
.globl __divsi3
|
||||
.ent __divsi3
|
||||
.type __divsi3,@function
|
||||
|
@ -30,6 +30,12 @@
|
||||
#######################################
|
||||
|
||||
|
||||
/* An executable stack is *not* required for these functions. */
|
||||
#ifdef __linux__
|
||||
.section .note.GNU-stack,"",%progbits
|
||||
.previous
|
||||
#endif
|
||||
|
||||
.globl __moddi3
|
||||
.ent __moddi3
|
||||
__moddi3:
|
||||
|
@ -32,6 +32,12 @@
|
||||
#
|
||||
#######################################
|
||||
|
||||
/* An executable stack is *not* required for these functions. */
|
||||
#ifdef __linux__
|
||||
.section .note.GNU-stack,"",%progbits
|
||||
.previous
|
||||
#endif
|
||||
|
||||
.globl __modsi3
|
||||
.ent __modsi3
|
||||
.type __modsi3,@function
|
||||
|
@ -47,6 +47,12 @@
|
||||
#
|
||||
#######################################
|
||||
|
||||
/* An executable stack is *not* required for these functions. */
|
||||
#ifdef __linux__
|
||||
.section .note.GNU-stack,"",%progbits
|
||||
.previous
|
||||
#endif
|
||||
|
||||
.globl muldi3_hardproc
|
||||
.ent muldi3_hardproc
|
||||
muldi3_hardproc:
|
||||
|
@ -32,6 +32,12 @@
|
||||
#
|
||||
#######################################
|
||||
|
||||
/* An executable stack is *not* required for these functions. */
|
||||
#ifdef __linux__
|
||||
.section .note.GNU-stack,"",%progbits
|
||||
.previous
|
||||
#endif
|
||||
|
||||
.globl __mulsi3
|
||||
.ent __mulsi3
|
||||
.type __mulsi3,@function
|
||||
|
@ -33,6 +33,12 @@
|
||||
#
|
||||
#######################################
|
||||
|
||||
/* An executable stack is *not* required for these functions. */
|
||||
#ifdef __linux__
|
||||
.section .note.GNU-stack,"",%progbits
|
||||
.previous
|
||||
#endif
|
||||
|
||||
.globl _stack_overflow_error
|
||||
.data
|
||||
.align 2
|
||||
|
@ -32,6 +32,12 @@
|
||||
#
|
||||
#######################################
|
||||
|
||||
/* An executable stack is *not* required for these functions. */
|
||||
#ifdef __linux__
|
||||
.section .note.GNU-stack,"",%progbits
|
||||
.previous
|
||||
#endif
|
||||
|
||||
.globl __udivsi3
|
||||
.ent __udivsi3
|
||||
.type __udivsi3,@function
|
||||
|
@ -32,6 +32,12 @@
|
||||
#
|
||||
#######################################
|
||||
|
||||
/* An executable stack is *not* required for these functions. */
|
||||
#ifdef __linux__
|
||||
.section .note.GNU-stack,"",%progbits
|
||||
.previous
|
||||
#endif
|
||||
|
||||
.globl __umodsi3
|
||||
.ent __umodsi3
|
||||
.type __umodsi3,@function
|
||||
|
@ -25,6 +25,12 @@ 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. */
|
||||
#if defined(__ELF__) && defined(__linux__)
|
||||
.section .note.GNU-stack,"",%progbits
|
||||
.previous
|
||||
#endif
|
||||
|
||||
#ifdef pa64
|
||||
.level 2.0w
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user