]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
* config/tc-alpha.c (load_expression): Check explicitly for O_big,
authorIan Lance Taylor <ian@airs.com>
Tue, 26 Aug 1997 19:12:10 +0000 (19:12 +0000)
committerIan Lance Taylor <ian@airs.com>
Tue, 26 Aug 1997 19:12:10 +0000 (19:12 +0000)
rather than calling abort.

gas/ChangeLog
gas/config/tc-alpha.c

index 442a9eef642c726275440d8e04ff24df8fd279b1..4414d1f0bbabf0ec1072f33944e51e410fb43676 100644 (file)
@@ -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.
 
index 9a1744451c9d3b1f2321edd069215d96bc597701..d15857ff2734d4c8d894efa277e8da1848fe9f34 100644 (file)
@@ -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 */
 \f
 /* 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;
+}
+
 \f
 
 #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},