aboutsummaryrefslogtreecommitdiff
path: root/gas/as.c
diff options
context:
space:
mode:
Diffstat (limited to 'gas/as.c')
-rw-r--r--gas/as.c40
1 files changed, 39 insertions, 1 deletions
diff --git a/gas/as.c b/gas/as.c
index 449167d..c7de3a9 100644
--- a/gas/as.c
+++ b/gas/as.c
@@ -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);