fprintf (stream, _("\
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"));
{"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. */
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;
bfd_set_error_program_name (myname);
#endif
-#ifdef TARGET_USE_CFIPOP
- tc_cfi_init ();
-#endif
-
#ifdef USE_EMULATIONS
select_emulation_mode (argc, argv);
#endif
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 ();
-#ifdef TARGET_USE_CFIPOP
+ /* If we constructed dwarf2 .eh_frame info, either via .cfi
+ directives from the user or by the backend, emit it now. */
cfi_finish ();
-#endif
if (seen_at_least_1_file ()
&& (flag_always_generate_output || had_errors () == 0))