From e85ca5bb794d1fc2b3e94ff443a88683cc630822 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Tue, 15 Jul 2003 01:33:54 +0000 Subject: [PATCH] * frags.c (frag_more): Move segment checks to.. (frag_alloc_check): ..here. New function. (frag_append_1_char): Call frag_alloc_check. --- gas/ChangeLog | 10 ++++++++-- gas/frags.c | 36 +++++++++++++++++++++++------------- 2 files changed, 31 insertions(+), 15 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index a85ec0c01b6..62e0987a976 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,9 @@ +2003-07-15 Alan Modra + + * 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 * po/tr.po: Update with latest version. @@ -216,7 +222,7 @@ (relax_and_size_all_segments): Likewise. (relax_frag): Likewise. (relax_segment): Likewise. - + 2003-06-23 Mark Mitchell * config/tc-ppc.c (ppc_cleanup): Use bytes to count APUinfo slots. @@ -258,7 +264,7 @@ (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 diff --git a/gas/frags.c b/gas/frags.c index 8d7ed2f58ab..47f828a02ba 100644 --- a/gas/frags.c +++ b/gas/frags.c @@ -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; } +/* 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); -- 2.30.2