X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gas%2Ffrags.c;h=9ff577fc633a1334f4ff113edf4ac4fca0d49903;hb=bb7eff5206e4795ac79c177a80fe9f4630aaf730;hp=fb3c02d3b5d4af868f83ab7f7351d8d8b8cd1294;hpb=8d8385cfb84fae7b0959b77fe287d97795415194;p=deliverable%2Fbinutils-gdb.git diff --git a/gas/frags.c b/gas/frags.c index fb3c02d3b5..9ff577fc63 100644 --- a/gas/frags.c +++ b/gas/frags.c @@ -1,7 +1,5 @@ /* frags.c - manage frags - - Copyright 1987, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, - 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007, 2008, 2009 - Free Software Foundation, Inc. + Copyright (C) 1987-2016 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. @@ -25,7 +23,21 @@ #include "obstack.h" extern fragS zero_address_frag; -extern fragS bss_address_frag; +extern fragS predefined_address_frag; + +static int totalfrags; + +int +get_frag_count (void) +{ + return totalfrags; +} + +void +clear_frag_count (void) +{ + totalfrags = 0; +} /* Initialization for frag routines. */ @@ -33,7 +45,7 @@ void frag_init (void) { zero_address_frag.fr_type = rs_fill; - bss_address_frag.fr_type = rs_fill; + predefined_address_frag.fr_type = rs_fill; } /* Check that we're not trying to assemble into a section that can't @@ -72,6 +84,7 @@ frag_alloc (struct obstack *ob) ptr = (fragS *) obstack_alloc (ob, SIZEOF_STRUCT_FRAG); obstack_alignment_mask (ob) = oalign; memset (ptr, 0, SIZEOF_STRUCT_FRAG); + totalfrags++; return ptr; } @@ -81,12 +94,12 @@ frag_alloc (struct obstack *ob) do not return. Do not set up any fields of *now_frag. */ void -frag_grow (unsigned int nchars) +frag_grow (size_t nchars) { if (obstack_room (&frchain_now->frch_obstack) < nchars) { - long oldc; - long newc; + size_t oldc; + size_t newc; /* Try to allocate a bit more than needed right now. But don't do this if we would waste too much memory. Especially necessary @@ -98,12 +111,14 @@ frag_grow (unsigned int nchars) newc += SIZEOF_STRUCT_FRAG; /* Check for possible overflow. */ - if (newc < 0) - as_fatal (_("can't extend frag %u chars"), nchars); + if (newc < nchars) + as_fatal (_("can't extend frag %lu chars"), (unsigned long) nchars); - /* Force to allocate at least NEWC bytes. */ + /* Force to allocate at least NEWC bytes, but not less than the + default. */ oldc = obstack_chunk_size (&frchain_now->frch_obstack); - obstack_chunk_size (&frchain_now->frch_obstack) = newc; + if (newc > oldc) + obstack_chunk_size (&frchain_now->frch_obstack) = newc; while (obstack_room (&frchain_now->frch_obstack) < nchars) { @@ -137,7 +152,7 @@ frag_grow (unsigned int nchars) of frchain_now. */ void -frag_new (int old_frags_var_max_size +frag_new (size_t old_frags_var_max_size /* Number of chars (already allocated on obstack frags) in variable_length part of frag. */) { @@ -161,7 +176,7 @@ frag_new (int old_frags_var_max_size gas_assert (former_last_fragP == frag_now); frag_now = frag_alloc (&frchP->frch_obstack); - as_where (&frag_now->fr_file, &frag_now->fr_line); + frag_now->fr_file = as_where (&frag_now->fr_line); /* Generally, frag_now->points to an address rounded up to next alignment. However, characters will add to obstack frags @@ -189,23 +204,23 @@ frag_new (int old_frags_var_max_size frag_now_growth past the new chars. */ char * -frag_more (int nchars) +frag_more (size_t nchars) { - register char *retval; + char *retval; 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); - return (retval); + return retval; } /* Close the current frag, setting its fields for a relaxable frag. Start a new frag. */ static void -frag_var_init (relax_stateT type, int max_chars, int var, - relax_substateT subtype, symbolS *symbol, offsetT offset, +frag_var_init (relax_stateT type, size_t max_chars, size_t var, + relax_substateT subtype, symbolS *symbol, offsetT offset, char *opcode) { frag_now->fr_var = var; @@ -222,7 +237,7 @@ frag_var_init (relax_stateT type, int max_chars, int var, #ifdef TC_FRAG_INIT TC_FRAG_INIT (frag_now); #endif - as_where (&frag_now->fr_file, &frag_now->fr_line); + frag_now->fr_file = as_where (&frag_now->fr_line); frag_new (max_chars); } @@ -235,10 +250,11 @@ frag_var_init (relax_stateT type, int max_chars, int var, to write into. */ char * -frag_var (relax_stateT type, int max_chars, int var, relax_substateT subtype, - symbolS *symbol, offsetT offset, char *opcode) +frag_var (relax_stateT type, size_t max_chars, size_t var, + relax_substateT subtype, symbolS *symbol, offsetT offset, + char *opcode) { - register char *retval; + char *retval; frag_grow (max_chars); retval = obstack_next_free (&frchain_now->frch_obstack); @@ -252,11 +268,11 @@ frag_var (relax_stateT type, int max_chars, int var, relax_substateT subtype, No call to frag_grow is done. */ char * -frag_variant (relax_stateT type, int max_chars, int var, +frag_variant (relax_stateT type, size_t max_chars, size_t var, relax_substateT subtype, symbolS *symbol, offsetT offset, char *opcode) { - register char *retval; + char *retval; retval = obstack_next_free (&frchain_now->frch_obstack); frag_var_init (type, max_chars, var, subtype, symbol, offset, opcode); @@ -267,7 +283,7 @@ frag_variant (relax_stateT type, int max_chars, int var, /* Reduce the variable end of a frag to a harmless state. */ void -frag_wane (register fragS *fragP) +frag_wane (fragS *fragP) { fragP->fr_type = rs_fill; fragP->fr_offset = 0; @@ -276,7 +292,7 @@ frag_wane (register fragS *fragP) /* Return the number of bytes by which the current frag can be grown. */ -int +size_t frag_room (void) { return obstack_room (&frchain_now->frch_obstack); @@ -321,7 +337,7 @@ frag_align (int alignment, int fill_character, int max) void frag_align_pattern (int alignment, const char *fill_pattern, - int n_fill, int max) + size_t n_fill, int max) { char *p; @@ -394,10 +410,10 @@ frag_append_1_char (int datum) not already accounted for in the frag FR_ADDRESS. */ bfd_boolean -frag_offset_fixed_p (const fragS *frag1, const fragS *frag2, bfd_vma *offset) +frag_offset_fixed_p (const fragS *frag1, const fragS *frag2, offsetT *offset) { const fragS *frag; - bfd_vma off; + offsetT off; /* Start with offset initialised to difference between the two frags. Prior to assigning frag addresses this will be zero. */