X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gas%2Fas.c;h=badeac9bee329d9ab9f0e5580f98039b722fcd5e;hb=b42e9fa8cc214f0fa94598da86aa112713a9b192;hp=32459a875e02f40adab4a8ef32ee84d3a5847ffb;hpb=85024cd8bcb93f4112470ecdbd6c10fc2aea724f;p=deliverable%2Fbinutils-gdb.git diff --git a/gas/as.c b/gas/as.c index 32459a875e..badeac9bee 100644 --- a/gas/as.c +++ b/gas/as.c @@ -1,5 +1,5 @@ /* as.c - GAS main program. - Copyright (C) 1987-2014 Free Software Foundation, Inc. + Copyright (C) 1987-2016 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. @@ -96,6 +96,10 @@ int debug_memory = 0; /* Enable verbose mode. */ int verbose = 0; +#if defined OBJ_ELF || defined OBJ_MAYBE_ELF +int flag_use_elf_stt_common = DEFAULT_GENERATE_ELF_STT_COMMON; +#endif + /* Keep the output file. */ static int keep_it = 0; @@ -142,7 +146,8 @@ static void select_emulation_mode (int argc, char **argv) { int i; - char *p, *em = 0; + char *p; + const char *em = NULL; for (i = 1; i < argc; i++) if (!strncmp ("--em", argv[i], 4)) @@ -224,6 +229,11 @@ print_version_id (void) VERSION, TARGET_ALIAS, BFD_VERSION_STRING); } +#ifdef DEFAULT_FLAG_COMPRESS_DEBUG +enum compressed_debug_section_type flag_compress_debug + = COMPRESS_DEBUG_GABI_ZLIB; +#endif + static void show_usage (FILE * stream) { @@ -245,14 +255,21 @@ Options:\n\ fprintf (stream, _("\ --alternate initially turn on alternate macro syntax\n")); -#ifdef HAVE_ZLIB_H +#ifdef DEFAULT_FLAG_COMPRESS_DEBUG fprintf (stream, _("\ - --compress-debug-sections\n\ - compress DWARF debug sections using zlib\n")); + --compress-debug-sections[={none|zlib|zlib-gnu|zlib-gabi}]\n\ + compress DWARF debug sections using zlib [default]\n")); fprintf (stream, _("\ --nocompress-debug-sections\n\ don't compress DWARF debug sections\n")); -#endif /* HAVE_ZLIB_H */ +#else + fprintf (stream, _("\ + --compress-debug-sections[={none|zlib|zlib-gnu|zlib-gabi}]\n\ + compress DWARF debug sections using zlib\n")); + fprintf (stream, _("\ + --nocompress-debug-sections\n\ + don't compress DWARF debug sections [default]\n")); +#endif fprintf (stream, _("\ -D produce assembler debugging messages\n")); fprintf (stream, _("\ @@ -263,7 +280,7 @@ Options:\n\ #ifdef USE_EMULATIONS { int i; - char *def_em; + const char *def_em; fprintf (stream, "\ --em=["); @@ -286,6 +303,11 @@ Options:\n\ fprintf (stream, _("\ --size-check=[error|warning]\n\ ELF .size directive check (default --size-check=error)\n")); + fprintf (stream, _("\ + --elf-stt-common=[no|yes]\n\ + generate ELF common symbols with STT_COMMON type\n")); + fprintf (stream, _("\ + --sectname-subst enable section name substitution sequences\n")); #endif fprintf (stream, _("\ -f skip whitespace and comment preprocessing\n")); @@ -449,6 +471,8 @@ parse_args (int * pargc, char *** pargv) OPTION_EXECSTACK, OPTION_NOEXECSTACK, OPTION_SIZE_CHECK, + OPTION_ELF_STT_COMMON, + OPTION_SECTNAME_SUBST, OPTION_ALTERNATE, OPTION_AL, OPTION_HASH_TABLE_SIZE, @@ -473,7 +497,7 @@ parse_args (int * pargc, char *** pargv) ,{"a", optional_argument, NULL, 'a'} /* Handle -al=. */ ,{"al", optional_argument, NULL, OPTION_AL} - ,{"compress-debug-sections", no_argument, NULL, OPTION_COMPRESS_DEBUG} + ,{"compress-debug-sections", optional_argument, NULL, OPTION_COMPRESS_DEBUG} ,{"nocompress-debug-sections", no_argument, NULL, OPTION_NOCOMPRESS_DEBUG} ,{"debug-prefix-map", required_argument, NULL, OPTION_DEBUG_PREFIX_MAP} ,{"defsym", required_argument, NULL, OPTION_DEFSYM} @@ -483,6 +507,8 @@ parse_args (int * pargc, char *** pargv) ,{"execstack", no_argument, NULL, OPTION_EXECSTACK} ,{"noexecstack", no_argument, NULL, OPTION_NOEXECSTACK} ,{"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} #endif ,{"fatal-warnings", no_argument, NULL, OPTION_WARN_FATAL} ,{"gdwarf-2", no_argument, NULL, OPTION_GDWARF2} @@ -543,7 +569,7 @@ parse_args (int * pargc, char *** pargv) old_argv = *pargv; /* Initialize a new argv that contains no options. */ - new_argv = (char **) xmalloc (sizeof (char *) * (old_argc + 1)); + new_argv = XNEWVEC (char *, old_argc + 1); new_argv[0] = old_argv[0]; new_argc = 1; new_argv[new_argc] = NULL; @@ -595,7 +621,7 @@ parse_args (int * pargc, char *** pargv) case 1: /* File name. */ if (!strcmp (optarg, "-")) - optarg = ""; + optarg = (char *) ""; new_argv[new_argc++] = optarg; new_argv[new_argc] = NULL; break; @@ -626,7 +652,7 @@ parse_args (int * pargc, char *** pargv) case OPTION_VERSION: /* This output is intended to follow the GNU standards document. */ printf (_("GNU assembler %s\n"), BFD_VERSION_STRING); - printf (_("Copyright (C) 2014 Free Software Foundation, Inc.\n")); + printf (_("Copyright (C) 2016 Free Software Foundation, Inc.\n")); printf (_("\ This program is free software; you may redistribute it under the terms of\n\ the GNU General Public License version 3 or later.\n\ @@ -657,15 +683,31 @@ This program has absolutely no warranty.\n")); exit (EXIT_SUCCESS); case OPTION_COMPRESS_DEBUG: -#ifdef HAVE_ZLIB_H - flag_compress_debug = 1; + if (optarg) + { +#if defined OBJ_ELF || defined OBJ_MAYBE_ELF + if (strcasecmp (optarg, "none") == 0) + flag_compress_debug = COMPRESS_DEBUG_NONE; + else if (strcasecmp (optarg, "zlib") == 0) + flag_compress_debug = COMPRESS_DEBUG_GABI_ZLIB; + else if (strcasecmp (optarg, "zlib-gnu") == 0) + flag_compress_debug = COMPRESS_DEBUG_GNU_ZLIB; + else if (strcasecmp (optarg, "zlib-gabi") == 0) + flag_compress_debug = COMPRESS_DEBUG_GABI_ZLIB; + else + as_fatal (_("Invalid --compress-debug-sections option: `%s'"), + optarg); #else - as_warn (_("cannot compress debug sections (zlib not installed)")); -#endif /* HAVE_ZLIB_H */ + as_fatal (_("--compress-debug-sections=%s is unsupported"), + optarg); +#endif + } + else + flag_compress_debug = COMPRESS_DEBUG_GABI_ZLIB; break; case OPTION_NOCOMPRESS_DEBUG: - flag_compress_debug = 0; + flag_compress_debug = COMPRESS_DEBUG_NONE; break; case OPTION_DEBUG_PREFIX_MAP: @@ -684,7 +726,7 @@ This program has absolutely no warranty.\n")); as_fatal (_("bad defsym; format is --defsym name=value")); *s++ = '\0'; i = bfd_scan_vma (s, (const char **) NULL, 0); - n = (struct defsym_list *) xmalloc (sizeof *n); + n = XNEW (struct defsym_list); n->next = defsyms; n->name = optarg; n->value = i; @@ -705,7 +747,7 @@ This program has absolutely no warranty.\n")); break; } - n = xmalloc (sizeof * n); + n = XNEW (struct itbl_file_list); n->next = itbl_files; n->name = optarg; itbl_files = n; @@ -828,12 +870,26 @@ This program has absolutely no warranty.\n")); case OPTION_SIZE_CHECK: if (strcasecmp (optarg, "error") == 0) - flag_size_check = size_check_error; + flag_allow_nonconst_size = FALSE; else if (strcasecmp (optarg, "warning") == 0) - flag_size_check = size_check_warning; + flag_allow_nonconst_size = TRUE; else as_fatal (_("Invalid --size-check= option: `%s'"), optarg); break; + + case OPTION_ELF_STT_COMMON: + if (strcasecmp (optarg, "no") == 0) + flag_use_elf_stt_common = 0; + else if (strcasecmp (optarg, "yes") == 0) + flag_use_elf_stt_common = 1; + else + as_fatal (_("Invalid --elf-stt-common= option: `%s'"), + optarg); + break; + + case OPTION_SECTNAME_SUBST: + flag_sectname_subst = 1; + break; #endif case 'Z': flag_always_generate_output = 1; @@ -1107,32 +1163,6 @@ perform_an_assembly_pass (int argc, char ** argv) read_a_source_file (""); } -#ifdef OBJ_ELF -static void -create_obj_attrs_section (void) -{ - segT s; - char *p; - offsetT size; - const char *name; - - size = bfd_elf_obj_attr_size (stdoutput); - if (size) - { - name = get_elf_backend_data (stdoutput)->obj_attrs_section; - if (!name) - name = ".gnu.attributes"; - s = subseg_new (name, 0); - elf_section_type (s) - = get_elf_backend_data (stdoutput)->obj_attrs_section_type; - bfd_set_section_flags (stdoutput, s, SEC_READONLY | SEC_DATA); - frag_now_fix (); - p = frag_more (size); - bfd_elf_set_obj_attr_contents (stdoutput, (bfd_byte *)p, size); - } -} -#endif - int main (int argc, char ** argv) @@ -1257,11 +1287,6 @@ main (int argc, char ** argv) md_end (); #endif -#ifdef OBJ_ELF - if (IS_ELF) - create_obj_attrs_section (); -#endif - #if defined OBJ_ELF || defined OBJ_MAYBE_ELF if ((flag_execstack || flag_noexecstack) && OUTPUT_FLAVOR == bfd_target_elf_flavour)