From 0df8ad28f0f727fab3a696d6c98b9a8a77ee1024 Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Thu, 26 Apr 2018 15:12:42 +0100 Subject: Extend the assembler so that it can automatically generate GNU Build attribute notes if none are present in the input files. gas * as.c (flag_generate_build_notes): New variable. (show_usage): Add entry for --generate-missing-build-notes. (parse_args): Parse --generate-missing-build-notes. * as.h: Export flag_generate_build_notes. * symbols.c (save_symbol_name): Ensure that the name parameter is not NULL. * write.c (create_obj_attrs_section): Reformat. (create_note_reloc): New function - creates a relocation for a field in a GNU Build attribute note. (maybe_generate_build_notes): New function - created GNU Build attribute notes if none are present in the output file. (write_object_file): Call maybe_generate_build_notes. * configure.ac (--enable-generate-build-notes): New option. * NEWS: Announce the new feature. * doc/as.textinfo: Document the new option. * config.in: Regenerate. * configure: Regenerate. binutils* readelf.c (is_32bit_abs_reloc): Support R_PARISC_DIR32 as a 32-bit absolute reloc for the HPPA target. * testsuite/binutils-all/note-5.d: New test. * testsuite/binutils-all/note-5.s: Source file for new test. * testsuite/binutils-all/objcopy.exp: Run new test. --- gas/as.c | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) (limited to 'gas/as.c') diff --git a/gas/as.c b/gas/as.c index 6e8ec56..cdf8cfe 100644 --- a/gas/as.c +++ b/gas/as.c @@ -97,6 +97,7 @@ int verbose = 0; #if defined OBJ_ELF || defined OBJ_MAYBE_ELF int flag_use_elf_stt_common = DEFAULT_GENERATE_ELF_STT_COMMON; +bfd_boolean flag_generate_build_notes = DEFAULT_GENERATE_BUILD_NOTES; #endif /* Keep the output file. */ @@ -304,8 +305,19 @@ Options:\n\ generate ELF common symbols with STT_COMMON type\n")); fprintf (stream, _("\ --sectname-subst enable section name substitution sequences\n")); + + fprintf (stream, _("\ + --generate-missing-build-notes=[no|yes] ")); +#if DEFAULT_GENERATE_BUILD_NOTES + fprintf (stream, _("(default: yes)\n")); +#else + fprintf (stream, _("(default: no)\n")); #endif fprintf (stream, _("\ + generate GNU Build notes if none are present in the input\n")); +#endif /* OBJ_ELF */ + + fprintf (stream, _("\ -f skip whitespace and comment preprocessing\n")); fprintf (stream, _("\ -g --gen-debug generate debugging information\n")); @@ -470,6 +482,7 @@ parse_args (int * pargc, char *** pargv) OPTION_NOEXECSTACK, OPTION_SIZE_CHECK, OPTION_ELF_STT_COMMON, + OPTION_ELF_BUILD_NOTES, OPTION_SECTNAME_SUBST, OPTION_ALTERNATE, OPTION_AL, @@ -508,6 +521,7 @@ parse_args (int * pargc, char *** pargv) ,{"size-check", required_argument, NULL, OPTION_SIZE_CHECK} ,{"elf-stt-common", required_argument, NULL, OPTION_ELF_STT_COMMON} ,{"sectname-subst", no_argument, NULL, OPTION_SECTNAME_SUBST} + ,{"generate-missing-build-notes", required_argument, NULL, OPTION_ELF_BUILD_NOTES} #endif ,{"fatal-warnings", no_argument, NULL, OPTION_WARN_FATAL} ,{"gdwarf-2", no_argument, NULL, OPTION_GDWARF2} @@ -900,7 +914,19 @@ This program has absolutely no warranty.\n")); case OPTION_SECTNAME_SUBST: flag_sectname_subst = 1; break; -#endif + + case OPTION_ELF_BUILD_NOTES: + if (strcasecmp (optarg, "no") == 0) + flag_generate_build_notes = FALSE; + else if (strcasecmp (optarg, "yes") == 0) + flag_generate_build_notes = TRUE; + else + as_fatal (_("Invalid --generate-missing-build-notes option: `%s'"), + optarg); + break; + +#endif /* OBJ_ELF */ + case 'Z': flag_always_generate_output = 1; break; -- cgit v1.1