GAS: Fix CRIS double-error reports caused by recent generic GAS changes.
[deliverable/binutils-gdb.git] / gas / frags.h
index df259b8fe5583dcb779154766f801bd788106d7c..2f9e1b571d295e954ce71aa69d63bab327cbdb4f 100644 (file)
@@ -1,12 +1,11 @@
 /* frags.h - Header file for the frag concept.
 /* frags.h - Header file for the frag concept.
-   Copyright 1987, 1992, 1993, 1994, 1995, 1997, 1998, 1999, 2000, 2001
-   Free Software Foundation, Inc.
+   Copyright (C) 1987-2014 Free Software Foundation, Inc.
 
    This file is part of GAS, the GNU Assembler.
 
    GAS is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 
    This file is part of GAS, the GNU Assembler.
 
    GAS is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
+   the Free Software Foundation; either version 3, or (at your option)
    any later version.
 
    GAS is distributed in the hope that it will be useful,
    any later version.
 
    GAS is distributed in the hope that it will be useful,
 
    You should have received a copy of the GNU General Public License
    along with GAS; see the file COPYING.  If not, write to the Free
 
    You should have received a copy of the GNU General Public License
    along with GAS; see the file COPYING.  If not, write to the Free
-   Software Foundation, 59 Temple Place - Suite 330, Boston, MA
-   02111-1307, USA.  */
+   Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
+   02110-1301, USA.  */
 
 #ifndef FRAGS_H
 #define FRAGS_H
 
 
 #ifndef FRAGS_H
 #define FRAGS_H
 
-#ifdef ANSI_PROTOTYPES
 struct obstack;
 struct obstack;
-#endif
 
 /* A code fragment (frag) is some known number of chars, followed by some
    unknown number of chars. Typically the unknown number of chars is an
 
 /* A code fragment (frag) is some known number of chars, followed by some
    unknown number of chars. Typically the unknown number of chars is an
@@ -38,7 +35,7 @@ struct obstack;
    of a particular frag}+offset.
 
    BUG: it may be smarter to have a single pointer off to various different
    of a particular frag}+offset.
 
    BUG: it may be smarter to have a single pointer off to various different
-   notes for different frag kinds.  See how code pans.   */
+   notes for different frag kinds.  See how code pans.  */
 
 struct frag {
   /* Object file address (as an octet offset).  */
 
 struct frag {
   /* Object file address (as an octet offset).  */
@@ -70,10 +67,19 @@ struct frag {
   struct list_info_struct *line;
 #endif
 
   struct list_info_struct *line;
 #endif
 
+  /* A serial number for a sequence of frags having at most one alignment
+     or org frag, and that at the tail of the sequence.  */
+  unsigned int region:16;
+
   /* Flipped each relax pass so we can easily determine whether
      fr_address has been adjusted.  */
   unsigned int relax_marker:1;
 
   /* Flipped each relax pass so we can easily determine whether
      fr_address has been adjusted.  */
   unsigned int relax_marker:1;
 
+  /* Used to ensure that all insns are emitted on proper address
+     boundaries.  */
+  unsigned int has_code:1;
+  unsigned int insn_addr:6;
+
   /* What state is my tail in? */
   relax_stateT fr_type;
   relax_substateT fr_subtype;
   /* What state is my tail in? */
   relax_stateT fr_type;
   relax_substateT fr_subtype;
@@ -93,6 +99,9 @@ struct frag {
 #ifdef TC_FRAG_TYPE
   TC_FRAG_TYPE tc_frag_data;
 #endif
 #ifdef TC_FRAG_TYPE
   TC_FRAG_TYPE tc_frag_data;
 #endif
+#ifdef OBJ_FRAG_TYPE
+  OBJ_FRAG_TYPE obj_frag_data;
+#endif
 
   /* Data begins here.  */
   char fr_literal[1];
 
   /* Data begins here.  */
   char fr_literal[1];
@@ -106,58 +115,47 @@ struct frag {
    however, included in frchain_now.  The fr_fix field is bogus;
    instead, use frag_now_fix ().  */
 COMMON fragS *frag_now;
    however, included in frchain_now.  The fr_fix field is bogus;
    instead, use frag_now_fix ().  */
 COMMON fragS *frag_now;
-extern addressT frag_now_fix PARAMS ((void));
-extern addressT frag_now_fix_octets PARAMS ((void));
+extern addressT frag_now_fix (void);
+extern addressT frag_now_fix_octets (void);
 
 /* For foreign-segment symbol fixups.  */
 COMMON fragS zero_address_frag;
 
 /* For foreign-segment symbol fixups.  */
 COMMON fragS zero_address_frag;
-/* For local common (N_BSS segment) fixups.  */
-COMMON fragS bss_address_frag;
-
-#if 0
-/* A macro to speed up appending exactly 1 char to current frag.  */
-/* JF changed < 1 to <= 1 to avoid a race conditon.  */
-#define FRAG_APPEND_1_CHAR(datum)                      \
-{                                                      \
-  if (obstack_room (&frags) <= 1)                      \
-    {                                                  \
-      frag_wane (frag_now);                            \
-      frag_new (0);                                    \
-    }                                                  \
-  obstack_1grow (&frags, datum);                       \
-}
-#else
-extern void frag_append_1_char PARAMS ((int));
+COMMON fragS predefined_address_frag;
+
+extern void frag_append_1_char (int);
 #define FRAG_APPEND_1_CHAR(X) frag_append_1_char (X)
 #define FRAG_APPEND_1_CHAR(X) frag_append_1_char (X)
-#endif
 
 
-void frag_init PARAMS ((void));
-fragS *frag_alloc PARAMS ((struct obstack *));
-void frag_grow PARAMS ((unsigned int nchars));
-char *frag_more PARAMS ((int nchars));
-void frag_align PARAMS ((int alignment, int fill_character, int max));
-void frag_align_pattern PARAMS ((int alignment,
-                                const char *fill_pattern,
-                                int n_fill,
-                                int max));
-void frag_align_code PARAMS ((int alignment, int max));
-void frag_new PARAMS ((int old_frags_var_max_size));
-void frag_wane PARAMS ((fragS * fragP));
-
-char *frag_variant PARAMS ((relax_stateT type,
-                           int max_chars,
-                           int var,
-                           relax_substateT subtype,
-                           symbolS * symbol,
-                           offsetT offset,
-                           char *opcode));
-
-char *frag_var PARAMS ((relax_stateT type,
-                       int max_chars,
-                       int var,
-                       relax_substateT subtype,
-                       symbolS * symbol,
-                       offsetT offset,
-                       char *opcode));
+void frag_init (void);
+fragS *frag_alloc (struct obstack *);
+void frag_grow (unsigned int nchars);
+char *frag_more (int nchars);
+void frag_align (int alignment, int fill_character, int max);
+void frag_align_pattern (int alignment, const char *fill_pattern,
+                        int n_fill, int max);
+void frag_align_code (int alignment, int max);
+void frag_new (int old_frags_var_max_size);
+void frag_wane (fragS * fragP);
+int frag_room (void);
+
+char *frag_variant (relax_stateT type,
+                   int max_chars,
+                   int var,
+                   relax_substateT subtype,
+                   symbolS * symbol,
+                   offsetT offset,
+                   char *opcode);
+
+char *frag_var (relax_stateT type,
+               int max_chars,
+               int var,
+               relax_substateT subtype,
+               symbolS * symbol,
+               offsetT offset,
+               char *opcode);
+
+bfd_boolean frag_offset_fixed_p (const fragS *, const fragS *, offsetT *);
+
+int get_frag_count (void);
+void clear_frag_count (void);
 
 #endif /* FRAGS_H */
 
 #endif /* FRAGS_H */
This page took 0.024138 seconds and 4 git commands to generate.