aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gas/ChangeLog3
-rw-r--r--gas/config/tc-alpha.c62
2 files changed, 60 insertions, 5 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 442a9ee..4414d1f 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -7,6 +7,9 @@ Tue Aug 26 09:46:22 1997 Nick Clifton <nickc@cygnus.com>
end-sanitize-v850
Tue Aug 26 12:23:25 1997 Ian Lance Taylor <ian@cygnus.com>
+ * config/tc-alpha.c (load_expression): Check explicitly for O_big,
+ rather than calling abort.
+
* as.h: Don't define alloca if __GNUC__. Just declare it.
* macro.c: Copy alloca handling from as.h.
diff --git a/gas/config/tc-alpha.c b/gas/config/tc-alpha.c
index 9a17444..d15857f 100644
--- a/gas/config/tc-alpha.c
+++ b/gas/config/tc-alpha.c
@@ -372,6 +372,9 @@ static int alpha_current_align;
/* These are exported to ECOFF code. */
unsigned long alpha_gprmask, alpha_fprmask;
+/* Whether the debugging option was seen. */
+static int alpha_debug;
+
#ifdef OBJ_EVAX
/* Collect information about current procedure here. */
static struct {
@@ -806,6 +809,8 @@ md_section_align (seg, size)
/* Equal to MAX_PRECISION in atof-ieee.c */
#define MAX_LITTLENUMS 6
+extern char *vax_md_atof PARAMS ((int, char *, int *));
+
char *
md_atof (type, litP, sizeP)
char type;
@@ -816,7 +821,6 @@ md_atof (type, litP, sizeP)
LITTLENUM_TYPE words[MAX_LITTLENUMS];
LITTLENUM_TYPE *wordP;
char *t;
- char *atof_ieee (), *vax_md_atof ();
switch (type)
{
@@ -883,9 +887,7 @@ md_parse_option (c, arg)
break;
case 'g':
- /* Ignore `-g' so gcc can provide this option to the Digital
- UNIX assembler, which otherwise would throw away info that
- mips-tfile needs. */
+ alpha_debug = 1;
break;
case 'm':
@@ -1426,6 +1428,24 @@ found:
return framereg;
}
+/* This is called before the symbol table is processed. In order to
+ work with gcc when using mips-tfile, we must keep all local labels.
+ However, in other cases, we want to discard them. If we were
+ called with -g, but we didn't see any debugging information, it may
+ mean that gcc is smuggling debugging information through to
+ mips-tfile, in which case we must generate all local labels. */
+
+#ifdef OBJ_ECOFF
+
+void
+alpha_frob_file_before_adjust ()
+{
+ if (alpha_debug != 0
+ && ! ecoff_debugging_seen)
+ flag_keep_locals = 1;
+}
+
+#endif /* OBJ_ECOFF */
/* Parse the arguments to an opcode. */
@@ -2327,6 +2347,12 @@ load_expression (targreg, exp, pbasereg, poffset)
set_tok_const (*poffset, 0);
return 0;
+ case O_big:
+ as_bad ("%s number invalid; zero assumed",
+ exp->X_add_number > 0 ? "bignum" : "floating point");
+ addend = 0;
+ break;
+
default:
abort();
}
@@ -3336,7 +3362,7 @@ s_alpha_comm (ignore)
symbolP = symbol_find_or_make (name);
*p = c;
- if (S_IS_DEFINED (symbolP))
+ if (S_IS_DEFINED (symbolP) && ! S_IS_COMMON (symbolP))
{
as_bad ("Ignoring attempt to re-define symbol");
ignore_rest_of_line ();
@@ -4174,6 +4200,20 @@ alpha_cons_align (size)
alpha_current_align = log_size;
alpha_insn_label = NULL;
}
+
+/* Here come the .uword, .ulong, and .uquad explicitly unaligned
+ pseudos. We just turn off auto-alignment and call down to cons. */
+
+static void
+s_alpha_ucons (bytes)
+ int bytes;
+{
+ int hold = alpha_auto_align_on;
+ alpha_auto_align_on = 0;
+ cons (bytes);
+ alpha_auto_align_on = hold;
+}
+
#ifdef DEBUG1
@@ -4275,6 +4315,18 @@ const pseudo_typeS md_pseudo_table[] =
{"skip", s_alpha_space, 0},
{"zero", s_alpha_space, 0},
+/* Unaligned data pseudos. */
+ {"uword", s_alpha_ucons, 2},
+ {"ulong", s_alpha_ucons, 4},
+ {"uquad", s_alpha_ucons, 8},
+
+#ifdef OBJ_ELF
+/* Dwarf wants these versions of unaligned. */
+ {"2byte", s_alpha_ucons, 2},
+ {"4byte", s_alpha_ucons, 4},
+ {"8byte", s_alpha_ucons, 8},
+#endif
+
/* We don't do any optimizing, so we can safely ignore these. */
{"noalias", s_ignore, 0},
{"alias", s_ignore, 0},