* frags.c (frag_more): Move segment checks to..
authorAlan Modra <amodra@gmail.com>
Tue, 15 Jul 2003 01:33:54 +0000 (01:33 +0000)
committerAlan Modra <amodra@gmail.com>
Tue, 15 Jul 2003 01:33:54 +0000 (01:33 +0000)
(frag_alloc_check): ..here.  New function.
(frag_append_1_char): Call frag_alloc_check.

gas/ChangeLog
gas/frags.c

index a85ec0c01b662133eb4a2e0ff88927140654110b..62e0987a9764e9019f725e6874bd7fc4ea7373c1 100644 (file)
@@ -1,3 +1,9 @@
+2003-07-15  Alan Modra  <amodra@bigpond.net.au>
+
+       * frags.c (frag_more): Move segment checks to..
+       (frag_alloc_check): ..here.  New function.
+       (frag_append_1_char): Call frag_alloc_check.
+
 2003-07-14  Nick Clifton  <nickc@redhat.com>
 
        * po/tr.po: Update with latest version.
        (relax_and_size_all_segments): Likewise.
        (relax_frag): Likewise.
        (relax_segment): Likewise.
-       
+
 2003-06-23  Mark Mitchell  <mark@codesourcery.com>
 
        * config/tc-ppc.c (ppc_cleanup): Use bytes to count APUinfo slots.
        (get_operand): For CLASS_IR remember register size in mode struct.
        (get_specific): Handle new CLASS_IRO type.  Add register size
        checks for CLASS_IR and CLASS_IRO.
-        (md_apply_fix3): Fix undefined usage of buf.
+       (md_apply_fix3): Fix undefined usage of buf.
 
 2003-06-19  Alan Modra  <amodra@bigpond.net.au>
 
index 8d7ed2f58ab455b9aa8a19f7666fd4dcf0fe2c48..47f828a02ba3aa8f79335482fe2202b5c8222313 100644 (file)
@@ -1,6 +1,6 @@
 /* frags.c - manage frags -
    Copyright 1987, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
-   1999, 2000
+   1999, 2000, 2001, 2003
    Free Software Foundation, Inc.
 
    This file is part of GAS, the GNU Assembler.
@@ -36,6 +36,26 @@ frag_init ()
   bss_address_frag.fr_type = rs_fill;
 }
 \f
+/* Check that we're not trying to assemble into a section that can't
+   allocate frags (currently, this is only possible in the absolute
+   section), or into an mri common.  */
+
+static void
+frag_alloc_check (const struct obstack *ob)
+{
+  if (ob->chunk_size == 0)
+    {
+      as_bad (_("attempt to allocate data in absolute section"));
+      subseg_set (text_section, 0);
+    }
+
+  if (mri_common_symbol != NULL)
+    {
+      as_bad (_("attempt to allocate data in common section"));
+      mri_common_symbol = NULL;
+    }
+}
+
 /* Allocate a frag on the specified obstack.
    Call this routine from everywhere else, so that all the weird alignment
    hackery can be done in just one place.  */
@@ -163,18 +183,7 @@ frag_more (nchars)
 {
   register char *retval;
 
-  if (now_seg == absolute_section)
-    {
-      as_bad (_("attempt to allocate data in absolute section"));
-      subseg_set (text_section, 0);
-    }
-
-  if (mri_common_symbol != NULL)
-    {
-      as_bad (_("attempt to allocate data in common section"));
-      mri_common_symbol = NULL;
-    }
-
+  frag_alloc_check (&frchain_now->frch_obstack);
   frag_grow (nchars);
   retval = obstack_next_free (&frchain_now->frch_obstack);
   obstack_blank_fast (&frchain_now->frch_obstack, nchars);
@@ -376,6 +385,7 @@ void
 frag_append_1_char (datum)
      int datum;
 {
+  frag_alloc_check (&frchain_now->frch_obstack);
   if (obstack_room (&frchain_now->frch_obstack) <= 1)
     {
       frag_wane (frag_now);