Enable no-exec stacks for more targets using the Linux kernel.
commitcb442ed3eb7ae6452258fe9c0e75b7dc820dc398
authorjsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 26 Sep 2017 16:35:53 +0000 (26 16:35 +0000)
committerjsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 26 Sep 2017 16:35:53 +0000 (26 16:35 +0000)
treeee16574d02eab6903c55199d5f7d94c9e4221315
parentcb44892e54dbd9cb50a26df9537f21516ced356a
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@253204 138bc75d-0d04-0410-961f-82ee72b054a4
17 files changed:
gcc/ChangeLog
gcc/config/microblaze/linux.h
gcc/config/pa/pa-linux.h
gcc/config/pa/pa.c
gcc/config/pa/pa.h
libgcc/ChangeLog
libgcc/config/microblaze/crti.S
libgcc/config/microblaze/crtn.S
libgcc/config/microblaze/divsi3.S
libgcc/config/microblaze/moddi3.S
libgcc/config/microblaze/modsi3.S
libgcc/config/microblaze/muldi3_hard.S
libgcc/config/microblaze/mulsi3.S
libgcc/config/microblaze/stack_overflow_exit.S
libgcc/config/microblaze/udivsi3.S
libgcc/config/microblaze/umodsi3.S
libgcc/config/pa/milli64.S