* subsegs.c: Renamed non-BFD_ASSEMBLER subseg_new to subseg_set.
[binutils-gdb.git] / gas / as.h
index 6b797ab029ba78893844f00b16af9ba09047cc2a..72c9bca327ff93ed55728a65b8d82d406588ded4 100644 (file)
--- a/gas/as.h
+++ b/gas/as.h
 #include "host.h"
 #include "flonum.h"
 
+/* Make Saber happier on obstack.h.  */
+#ifdef SABER
+#undef  __PTR_TO_INT
+#define __PTR_TO_INT(P) ((int)(P))
+#undef  __INT_TO_PTR
+#define __INT_TO_PTR(P) ((char *)(P))
+#endif
+
 #ifndef __LINE__
 #define __LINE__ "unknown"
 #endif /* __LINE__ */
 #define __FILE__ "unknown"
 #endif /* __FILE__ */
 
+#ifndef __STDC__
+#ifndef const
+#define const
+#endif
+#ifndef volatile
+#define volatile
+#endif
+#endif /* ! __STDC__ */
+
 #define obstack_chunk_alloc xmalloc
 #define obstack_chunk_free xfree
 
 #define xfree free
 
-#define BAD_CASE(value) \
+#define BAD_CASE(val) \
 { \
-      as_fatal("Case value %d unexpected at line %d of file \"%s\"\n", \
-              value, __LINE__, __FILE__); \
+      as_fatal("Case value %ld unexpected at line %d of file \"%s\"\n", \
+              (long) val, __LINE__, __FILE__); \
           }
 \f
 
 
 #ifdef BFD_ASSEMBLER
 extern bfd *stdoutput;
+typedef bfd_vma addressT;
+typedef bfd_signed_vma offsetT;
+#else
+typedef unsigned long addressT;
+typedef long offsetT;
 #endif
 
+/* Type of symbol value, etc.  For use in prototypes.  */
+typedef addressT valueT;
+
 #ifndef COMMON
 #ifdef TEST
 #define COMMON                 /* declare our COMMONs storage here. */
@@ -115,35 +140,6 @@ extern bfd *stdoutput;
 /* subsegs.c     Sub-segments. Also, segment(=expression type)s.*/
 
 #ifndef BFD_ASSEMBLER
-/*
- * This table describes the use of segments as EXPRESSION types.
- *
- *     X_seg   X_add_symbol  X_subtract_symbol X_add_number
- * SEG_ABSENT                                          no (legal) expression
- * SEG_PASS1                                           no (defined) "
- * SEG_BIG                                     *       > 32 bits const.
- * SEG_ABSOLUTE                                        0
- * SEG_DATA            *                       0
- * SEG_TEXT            *                       0
- * SEG_BSS             *                       0
- * SEG_UNKNOWN         *                       0
- * SEG_DIFFERENCE      0               *       0
- * SEG_REGISTER                                        *
- *
- * The blank fields MUST be 0, and are nugatory.
- * The '0' fields MAY be 0. The '*' fields MAY NOT be 0.
- *
- * SEG_BIG: X_add_number is < 0 if the result is in
- *     generic_floating_point_number.  The value is -'c' where c is the
- *     character that introduced the constant.  e.g. "0f6.9" will have  -'f'
- *     as a X_add_number value.
- *     X_add_number > 0 is a count of how many littlenums it took to
- *     represent a bignum.
- * SEG_DIFFERENCE:
- * If segments of both symbols are known, they are the same segment.
- * X_add_symbol != X_sub_symbol (then we just cancel them, => SEG_ABSOLUTE).
- */
-
 
 #ifdef MANY_SEGMENTS
 #include "bfd.h"
@@ -164,17 +160,14 @@ typedef enum _segT
     SEG_ABSOLUTE = 0,
     SEG_LIST,
     SEG_UNKNOWN,
-    SEG_ABSENT,                        /* Mythical Segment (absent): NO expression seen. */
-    SEG_PASS1,                 /* Mythical Segment: Need another pass. */
     SEG_GOOF,                  /* Only happens if AS has a logic error. */
     /* Invented so we don't crash printing */
     /* error message involving weird segment. */
-    SEG_BIG,                   /* Bigger than 32 bits constant. */
-    SEG_DIFFERENCE,            /* Mythical Segment: absolute difference. */
+    SEG_EXPR,                  /* Intermediate expression values. */
     SEG_DEBUG,                 /* Debug segment */
     SEG_NTV,                   /* Transfert vector preload segment */
     SEG_PTV,                   /* Transfert vector postload segment */
-    SEG_REGISTER,              /* Mythical: a register-valued expression */
+    SEG_REGISTER               /* Mythical: a register-valued expression */
   } segT;
 
 #define SEG_MAXIMUM_ORDINAL (SEG_REGISTER)
@@ -182,11 +175,8 @@ typedef enum _segT
 typedef asection *segT;
 #define SEG_NORMAL(SEG)                ((SEG) != absolute_section      \
                                 && (SEG) != undefined_section  \
-                                && (SEG) != big_section        \
                                 && (SEG) != reg_section        \
-                                && (SEG) != pass1_section      \
-                                && (SEG) != diff_section       \
-                                && (SEG) != absent_section)
+                                && (SEG) != expr_section)
 #endif
 typedef int subsegT;
 
@@ -199,7 +189,7 @@ COMMON segT now_seg;
 #ifdef BFD_ASSEMBLER
 #define segment_name(SEG)      bfd_get_section_name (stdoutput, SEG)
 #else
-extern char *CONST seg_name[];
+extern char *const seg_name[];
 #define segment_name(SEG)      seg_name[(int) (SEG)]
 #endif
 
@@ -208,18 +198,14 @@ extern int section_alignment[];
 #endif
 
 #ifdef BFD_ASSEMBLER
-extern segT big_section, reg_section, pass1_section;
-extern segT diff_section, absent_section;
+extern segT reg_section, expr_section;
 /* Shouldn't these be eliminated someday?  */
 extern segT text_section, data_section, bss_section;
 #define absolute_section       (&bfd_abs_section)
 #define undefined_section      (&bfd_und_section)
 #else
-#define big_section            SEG_BIG
 #define reg_section            SEG_REGISTER
-#define pass1_section          SEG_PASS1
-#define diff_section           SEG_DIFFERENCE
-#define absent_section         SEG_ABSENT
+#define expr_section           SEG_EXPR
 #define text_section           SEG_TEXT
 #define data_section           SEG_DATA
 #define bss_section            SEG_BSS
@@ -243,11 +229,11 @@ typedef enum _relax_state
        character. */
     rs_org,
 
-    rs_machine_dependent,
+    rs_machine_dependent
 
 #ifndef WORKING_DOT_WORD
     /* JF: gunpoint */
-    rs_broken_word,
+      , rs_broken_word
 #endif
   } relax_stateT;
 
@@ -258,7 +244,7 @@ typedef unsigned long relax_substateT;
 
 /* Enough bits for address, but still an integer type.
    Could be a problem, cross-assembling for 64-bit machines.  */
-typedef unsigned long relax_addressT;
+typedef addressT relax_addressT;
 \f
 
 /* frags.c */
@@ -281,18 +267,18 @@ typedef unsigned long relax_addressT;
 struct frag
 {
   /* Object file address. */
-  unsigned long fr_address;
+  addressT fr_address;
   /* Chain forward; ascending address order.  Rooted in frch_root. */
   struct frag *fr_next;
 
   /* (Fixed) number of chars we know we have.  May be 0. */
-  long fr_fix;
+  offsetT fr_fix;
   /* (Variable) number of chars after above.  May be 0. */
-  long fr_var;
+  offsetT fr_var;
   /* For variable-length tail. */
   struct symbol *fr_symbol;
   /* For variable-length tail. */
-  long fr_offset;
+  offsetT fr_offset;
   /* Points to opcode low addr byte, for relaxation.  */
   char *fr_opcode;
 
@@ -323,7 +309,7 @@ typedef struct frag fragS;
    included in frchain_now.  The fr_fix field is bogus; instead, use:
    obstack_next_free(&frags)-frag_now->fr_literal.  */
 COMMON fragS *frag_now;
-#define frag_now_fix() (obstack_next_free (&frags) - frag_now->fr_literal)
+#define frag_now_fix() ((char*)obstack_next_free (&frags) - frag_now->fr_literal)
 
 /* For foreign-segment symbol fixups. */
 COMMON fragS zero_address_frag;
@@ -353,7 +339,7 @@ struct _pseudo_type
     /* assembler mnemonic, lower case, no '.' */
     char *poc_name;
     /* Do the work */
-    void (*poc_handler) ();
+    void (*poc_handler) PARAMS ((int));
     /* Value to pass to handler */
     int poc_val;
   };
@@ -387,27 +373,29 @@ PRINTF_LIKE (as_bad);
 PRINTF_LIKE (as_fatal);
 PRINTF_LIKE (as_tsktsk);
 PRINTF_LIKE (as_warn);
+void fprint_value PARAMS ((FILE *file, addressT value));
+void sprint_value PARAMS ((char *buf, addressT value));
 
 int had_errors PARAMS ((void));
 int had_warnings PARAMS ((void));
 
+void print_version_id PARAMS ((void));
 char *app_push PARAMS ((void));
 char *atof_ieee PARAMS ((char *str, int what_kind, LITTLENUM_TYPE * words));
 char *input_scrub_include_file PARAMS ((char *filename, char *position));
 char *input_scrub_new_file PARAMS ((char *filename));
 char *input_scrub_next_buffer PARAMS ((char **bufp));
+#if 0 /* incompatible with solaris 2 native cc */
 char *strstr PARAMS ((const char *s, const char *wanted));
-char *xmalloc PARAMS ((long size));
-char *xrealloc PARAMS ((char *ptr, long n));
-int do_scrub_next_char PARAMS ((int (*get) (), void (*unget) ()));
+#endif
+char *xmalloc PARAMS ((unsigned long size));
+char *xrealloc PARAMS ((char *ptr, unsigned long n));
+int do_scrub_next_char PARAMS ((int (*get) (void), void (*unget) (int)));
 int gen_to_words PARAMS ((LITTLENUM_TYPE * words, int precision,
                          long exponent_bits));
 int had_err PARAMS ((void));
-int had_errors PARAMS ((void));
-int had_warnings PARAMS ((void));
 int ignore_input PARAMS ((void));
 int scrub_from_file PARAMS ((void));
-int scrub_from_file PARAMS ((void));
 int scrub_from_string PARAMS ((void));
 int seen_at_least_1_file PARAMS ((void));
 void app_pop PARAMS ((char *arg));
@@ -425,21 +413,15 @@ void scrub_to_file PARAMS ((int ch));
 void scrub_to_string PARAMS ((int ch));
 void subsegs_begin PARAMS ((void));
 void subseg_change PARAMS ((segT seg, int subseg));
-#ifdef BFD_ASSEMBLER
-segT subseg_new PARAMS ((char *name, subsegT subseg));
+segT subseg_new PARAMS ((const char *name, subsegT subseg));
 void subseg_set PARAMS ((segT seg, subsegT subseg));
-#else
-void subseg_new PARAMS ((segT seg, subsegT subseg));
-#endif
 
 /* this one starts the chain of target dependant headers */
 #include "targ-env.h"
 
-/* these define types needed by the interfaces */
+#include "expr.h"
 #include "struc-symbol.h"
-
 #include "write.h"
-#include "expr.h"
 #include "frags.h"
 #include "hash.h"
 #include "read.h"
@@ -450,4 +432,20 @@ void subseg_new PARAMS ((segT seg, subsegT subseg));
 
 #include "listing.h"
 
+#ifdef BFD_ASSEMBLER
+/* Someday perhaps this will be selectable at run-time.  */
+#if defined (OBJ_AOUT) || defined (OBJ_BOUT)
+#define OUTPUT_FLAVOR bfd_target_aout_flavour
+#endif
+#ifdef OBJ_COFF
+#define OUTPUT_FLAVOR bfd_target_coff_flavour
+#endif
+#ifdef OBJ_ECOFF
+#define OUTPUT_FLAVOR bfd_target_ecoff_flavour
+#endif
+#ifdef OBJ_ELF
+#define OUTPUT_FLAVOR bfd_target_elf_flavour
+#endif
+#endif /* BFD_ASSEMBLER */
+
 /* end of as.h */