aboutsummaryrefslogtreecommitdiff
path: root/gas/as.c
diff options
context:
space:
mode:
Diffstat (limited to 'gas/as.c')
-rw-r--r--gas/as.c32
1 files changed, 31 insertions, 1 deletions
diff --git a/gas/as.c b/gas/as.c
index 7edac57..c7de3a9 100644
--- a/gas/as.c
+++ b/gas/as.c
@@ -486,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,
@@ -590,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}
@@ -688,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;
@@ -930,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;
@@ -1163,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)
{
@@ -1205,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 ();