diff options
Diffstat (limited to 'gas/as.c')
-rw-r--r-- | gas/as.c | 40 |
1 files changed, 39 insertions, 1 deletions
@@ -469,10 +469,12 @@ parse_args (int * pargc, char *** pargv) OPTION_EMULATION, OPTION_DEBUG_PREFIX_MAP, OPTION_DEFSYM, +#ifndef NO_LISTING OPTION_LISTING_LHS_WIDTH, OPTION_LISTING_LHS_WIDTH2, /* = STD_BASE + 10 */ OPTION_LISTING_RHS_WIDTH, OPTION_LISTING_CONT_LINES, +#endif OPTION_DEPFILE, OPTION_GSTABS, OPTION_GSTABS_PLUS, @@ -484,6 +486,7 @@ parse_args (int * pargc, char *** pargv) OPTION_GDWARF_CIE_VERSION, OPTION_GCODEVIEW, OPTION_STRIP_LOCAL_ABSOLUTE, + OPTION_EMIT_LOCAL_ABSOLUTE, OPTION_TRADITIONAL_FORMAT, OPTION_WARN, OPTION_TARGET_HELP, @@ -573,10 +576,12 @@ parse_args (int * pargc, char *** pargv) ports use -k to enable PIC assembly. */ ,{"keep-locals", no_argument, NULL, 'L'} ,{"keep-locals", no_argument, NULL, 'L'} +#ifndef NO_LISTING ,{"listing-lhs-width", required_argument, NULL, OPTION_LISTING_LHS_WIDTH} ,{"listing-lhs-width2", required_argument, NULL, OPTION_LISTING_LHS_WIDTH2} ,{"listing-rhs-width", required_argument, NULL, OPTION_LISTING_RHS_WIDTH} ,{"listing-cont-lines", required_argument, NULL, OPTION_LISTING_CONT_LINES} +#endif ,{"MD", required_argument, NULL, OPTION_DEPFILE} ,{"mri", no_argument, NULL, 'M'} ,{"nocpp", no_argument, NULL, OPTION_NOCPP} @@ -586,6 +591,7 @@ parse_args (int * pargc, char *** pargv) ,{"reduce-memory-overheads", no_argument, NULL, OPTION_REDUCE_MEMORY_OVERHEADS} ,{"statistics", no_argument, NULL, OPTION_STATISTICS} ,{"strip-local-absolute", no_argument, NULL, OPTION_STRIP_LOCAL_ABSOLUTE} + ,{"emit-local-absolute", no_argument, NULL, OPTION_EMIT_LOCAL_ABSOLUTE} ,{"version", no_argument, NULL, OPTION_VERSION} ,{"verbose", no_argument, NULL, 'v'} ,{"target-help", no_argument, NULL, OPTION_TARGET_HELP} @@ -684,6 +690,10 @@ parse_args (int * pargc, char *** pargv) flag_strip_local_absolute = 1; break; + case OPTION_EMIT_LOCAL_ABSOLUTE: + flag_strip_local_absolute = -1; + break; + case OPTION_TRADITIONAL_FORMAT: flag_traditional_format = 1; break; @@ -918,6 +928,7 @@ This program has absolutely no warranty.\n")); flag_keep_locals = 1; break; +#ifndef NO_LISTING case OPTION_LISTING_LHS_WIDTH: listing_lhs_width = atoi (optarg); if (listing_lhs_width_second < listing_lhs_width) @@ -925,7 +936,7 @@ This program has absolutely no warranty.\n")); break; case OPTION_LISTING_LHS_WIDTH2: { - int tmp = atoi (optarg); + unsigned int tmp = atoi (optarg); if (tmp > listing_lhs_width) listing_lhs_width_second = tmp; @@ -937,6 +948,7 @@ This program has absolutely no warranty.\n")); case OPTION_LISTING_CONT_LINES: listing_lhs_cont_lines = atoi (optarg); break; +#endif /* NO_LISTING */ case 'M': flag_mri = 1; @@ -1157,6 +1169,26 @@ This program has absolutely no warranty.\n")); #endif } +/* Pre-define a symbol with its name derived from TMPL (wrapping in + GAS(...)), to value VAL. */ + +void +predefine_symbol (const char *tmpl, valueT val) +{ + char *name = xasprintf ("GAS(%s)", tmpl); + symbolS *s; + + /* Also put the symbol in the symbol table, if requested. */ + if (flag_strip_local_absolute < 0) + s = symbol_new (name, absolute_section, &zero_address_frag, val); + else + s = symbol_create (name, absolute_section, &zero_address_frag, val); + S_CLEAR_EXTERNAL (s); + symbol_table_insert (s); + + xfree (name); +} + static void dump_statistics (void) { @@ -1199,6 +1231,10 @@ perform_an_assembly_pass (int argc, char ** argv) subseg_set (text_section, 0); #endif + predefine_symbol ("version", BFD_VERSION); + if (strstr (BFD_VERSION_STRING, "." XSTRING (BFD_VERSION_DATE)) != NULL) + predefine_symbol ("date", BFD_VERSION_DATE); + /* This may add symbol table entries, which requires having an open BFD, and sections already created. */ md_begin (); @@ -1382,7 +1418,9 @@ gas_init (void) int main (int argc, char ** argv) { +#ifndef NO_LISTING char ** argv_orig = argv; +#endif struct stat sob; gas_early_init (&argc, &argv); |