Allow bogus .stabd with 4 arguments for PowerPC Solaris
authorMichael Meissner <gnu@the-meissners.org>
Thu, 23 May 1996 21:49:18 +0000 (21:49 +0000)
committerMichael Meissner <gnu@the-meissners.org>
Thu, 23 May 1996 21:49:18 +0000 (21:49 +0000)
gas/ChangeLog
gas/stabs.c

index 115b3ea..7f612f1 100644 (file)
@@ -1,3 +1,33 @@
+Thu May 23 17:34:24 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * stabs.c (s_stab_generic): For PowerPC ELF, allow .stabd to take
+       4 arguments, providing the 4th argument is 0, to allow
+       compatibility with the Solaris assembler.
+
+Thu May 16 15:51:48 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * config/tc-sh.h (struct sh_segment_info_type): Define.
+       (TC_SEGMENT_INFO_TYPE): Define.
+       (sh_frob_label): Declare.
+       (tc_frob_label): Define.
+       (sh_flush_pending_output): Declare.
+       (md_flush_pending_output): Define.
+       * config/tc-sh.c (md_assemble): If relaxing, emit a R_SH_CODE
+       reloc before the instruction if necessary.
+       (sh_frob_label): New function.
+       (sh_flush_pending_output): New function.
+       (sh_coff_frob_file): Ignore ALIGN, CODE, DATA, and LABEL relocs
+       when looking for the reloc for the target of .uses.
+       (md_convert_frag): Fix printf format (%0xlx to 0x%lx).
+       (sh_force_relocation): Force CODE, DATA, and LABEL relocs to be
+       emitted.
+       (md_apply_fix): Ignore CODE, DATA, and LABEL relocs.
+       (sh_coff_reloc_mangle): Force CODE, DATA, and LABEL relocs to use
+       the absolute symbol.
+
+       * subsegs.h (segment_info_type): Add tc_segment_info_data field if
+       TC_SEGMENT_INFO_TYPE is defined.
+
 Wed May 15 12:23:53 1996  Ian Lance Taylor  <ian@cygnus.com>
 
        * config/tc-i386.c (md_assemble): Make sure the opcode suffix
index 38ef846..2b56894 100644 (file)
@@ -224,6 +224,52 @@ s_stab_generic (what, stab_secname, stabstr_secname)
       SKIP_WHITESPACE ();
     }
 
+#ifdef TC_PPC
+#ifdef OBJ_ELF
+  /* Solaris on PowerPC has decided that .stabd takes 4 arguments, so emulate it.  */
+  else if (what == 'd')
+    {
+      char *save_location = input_line_pointer;
+
+      SKIP_WHITESPACE ();
+      if (*input_line_pointer == ',')
+       {
+         int dummy;
+
+         input_line_pointer++;
+         SKIP_WHITESPACE ();
+
+         dummy = get_absolute_expression ();
+         if (dummy != 0)
+           {
+             as_warn (".stabd: Fourth field must be 0");
+             ignore_rest_of_line ();
+             return;
+           }
+         SKIP_WHITESPACE ();
+       }
+      else
+       input_line_pointer = save_location;
+    }
+#endif /* OBJ_ELF */
+#endif /* TC_PPC */
+
+#ifndef NO_LISTING
+  if (listing)
+    {
+      switch (type)
+       {
+       case N_SLINE:
+         listing_source_line ((unsigned int) desc);
+         break;
+       case N_SO:
+       case N_SOL:
+         listing_source_file (string);
+         break;
+       }
+    }
+#endif /* ! NO_LISTING */
+
   /* We have now gathered the type, other, and desc information.  For
      .stabs or .stabn, input_line_pointer is now pointing at the
      value.  */
@@ -310,7 +356,7 @@ s_stab_generic (what, stab_secname, stabstr_secname)
        }
 
 #ifdef OBJ_PROCESS_STAB
-      OBJ_PROCESS_STAB (seg, what, string + stroff, type, other, desc);
+      OBJ_PROCESS_STAB (seg, what, string, type, other, desc);
 #endif
 
       subseg_set (saved_seg, saved_subseg);
@@ -324,22 +370,6 @@ s_stab_generic (what, stab_secname, stabstr_secname)
 #endif
     }
 
-#ifndef NO_LISTING
-  if (listing)
-    {
-      switch (type)
-       {
-       case N_SLINE:
-         listing_source_line ((unsigned int) desc);
-         break;
-       case N_SO:
-       case N_SOL:
-         listing_source_file (string);
-         break;
-       }
-    }
-#endif /* ! NO_LISTING */
-
   demand_empty_rest_of_line ();
 }