diff options
author | Jakub Jelinek <jakub@redhat.com> | 2003-06-04 16:54:45 +0000 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2003-06-04 16:54:45 +0000 |
commit | 68d55fe3f008459534e270cc7b54f122846466f9 (patch) | |
tree | 458470a157a612fad7f94e850c86aba03ae3f221 /gas/as.c | |
parent | b21fd293ac00e7804f1d576440e5bd2e38f1a2a3 (diff) | |
download | gdb-68d55fe3f008459534e270cc7b54f122846466f9.zip gdb-68d55fe3f008459534e270cc7b54f122846466f9.tar.gz gdb-68d55fe3f008459534e270cc7b54f122846466f9.tar.bz2 |
* as.c (show_usage): Document --execstack and --noexecstack.
(parse_args): Add --execstack and --noexecstack.
(main): Create .note.GNU-stack section if --execstack or
--noexecstack was given on comand line, set its SHF_EXECINSTR bit.
* as.h (flag_execstack, flag_noexecstack): New.
Diffstat (limited to 'gas/as.c')
-rw-r--r-- | gas/as.c | 39 |
1 files changed, 38 insertions, 1 deletions
@@ -268,6 +268,12 @@ Options:\n\ emulate output (default %s)\n"), def_em); } #endif +#if defined BFD_ASSEMBLER && (defined OBJ_ELF || defined OBJ_MAYBE_ELF) + fprintf (stream, _("\ + --execstack require executable stack for this object\n")); + fprintf (stream, _("\ + --noexecstack don't require executable stack for this object\n")); +#endif fprintf (stream, _("\ -f skip whitespace and comment preprocessing\n")); fprintf (stream, _("\ @@ -437,7 +443,13 @@ parse_args (pargc, pargv) {"warn", no_argument, NULL, OPTION_WARN}, #define OPTION_TARGET_HELP (OPTION_STD_BASE + 19) {"target-help", no_argument, NULL, OPTION_TARGET_HELP}, -#define OPTION_WARN_FATAL (OPTION_STD_BASE + 20) +#if defined BFD_ASSEMBLER && (defined OBJ_ELF || defined OBJ_MAYBE_ELF) +#define OPTION_EXECSTACK (OPTION_STD_BASE + 20) + {"execstack", no_argument, NULL, OPTION_EXECSTACK}, +#define OPTION_NOEXECSTACK (OPTION_STD_BASE + 21) + {"noexecstack", no_argument, NULL, OPTION_NOEXECSTACK}, +#endif +#define OPTION_WARN_FATAL (OPTION_STD_BASE + 22) {"fatal-warnings", no_argument, NULL, OPTION_WARN_FATAL} /* When you add options here, check that they do not collide with OPTION_MD_BASE. See as.h. */ @@ -698,6 +710,18 @@ the GNU General Public License. This program has absolutely no warranty.\n")); flag_fatal_warnings = 1; break; +#if defined BFD_ASSEMBLER && (defined OBJ_ELF || defined OBJ_MAYBE_ELF) + case OPTION_EXECSTACK: + flag_execstack = 1; + flag_noexecstack = 0; + break; + + case OPTION_NOEXECSTACK: + flag_noexecstack = 1; + flag_execstack = 0; + break; +#endif + case 'Z': flag_always_generate_output = 1; break; @@ -907,6 +931,19 @@ main (argc, argv) md_end (); #endif +#if defined BFD_ASSEMBLER && (defined OBJ_ELF || defined OBJ_MAYBE_ELF) + if ((flag_execstack || flag_noexecstack) + && OUTPUT_FLAVOR == bfd_target_elf_flavour) + { + segT gnustack; + + gnustack = subseg_new (".note.GNU-stack", 0); + bfd_set_section_flags (stdoutput, gnustack, + SEC_READONLY | (flag_execstack ? SEC_CODE : 0)); + + } +#endif + /* If we've been collecting dwarf2 .debug_line info, either for assembly debugging or on behalf of the compiler, emit it now. */ dwarf2_finish (); |