Sync toplevel with GCC, merge.
[deliverable/binutils-gdb.git] / gas / write.h
index f2e3cf21fb0ca398f0e61afa8a899988c2cfaaa6..d5fe6791d0b411d827a9f13bd84a9265d0190079 100644 (file)
@@ -1,12 +1,13 @@
 /* write.h
    Copyright 1987, 1992, 1993, 1994, 1995, 1996, 1997, 1999, 2000, 2001,
-   2002, 2003 Free Software Foundation, Inc.
+   2002, 2003, 2005, 2006, 2007
+   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
-   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,
 #ifndef __write_h__
 #define __write_h__
 
-#ifndef TC_I960
-#ifdef hpux
-#define EXEC_MACHINE_TYPE HP9000S200_ID
-#endif
-#endif /* TC_I960 */
-
-#ifndef BFD_ASSEMBLER
-
-#ifndef LOCAL_LABEL
-#define LOCAL_LABEL(name) (name [0] == 'L' )
-#endif
-
-#define S_LOCAL_NAME(s) (LOCAL_LABEL (S_GET_NAME (s)))
-
-#endif /* ! BFD_ASSEMBLER */
-
 /* This is the name of a fake symbol which will never appear in the
    assembler output.  S_IS_LOCAL detects it because of the \001.  */
 #ifndef FAKE_LABEL_NAME
@@ -55,29 +40,16 @@ struct fix
   /* These small fields are grouped together for compactness of
      this structure, and efficiency of access on some architectures.  */
 
-  /* pc-relative offset adjust (only used by m68k) */
-  char fx_pcrel_adjust;
-
-  /* How many bytes are involved? */
-  unsigned char fx_size;
-
   /* Is this a pc-relative relocation?  */
   unsigned fx_pcrel : 1;
 
-  /* Is this a relocation to a procedure linkage table entry?  If so,
-     some of the reductions we try to apply are invalid.  A better way
-     might be to represent PLT entries with different kinds of
-     symbols, and use normal relocations (with undefined symbols);
-     look into it for version 2.6.  */
-  unsigned fx_plt : 1;
-
   /* Is this value an immediate displacement?  */
-  /* Only used on i960 and ns32k; merge it into TC_FIX_TYPE sometime.  */
+  /* Only used on ns32k; merge it into TC_FIX_TYPE sometime.  */
   unsigned fx_im_disp : 2;
 
-  /* A bit for the CPU specific code.
-     This probably can be folded into tc_fix_data, below.  */
+  /* Some bits for the CPU specific code.  */
   unsigned fx_tcbit : 1;
+  unsigned fx_tcbit2 : 1;
 
   /* Has this relocation already been applied?  */
   unsigned fx_done : 1;
@@ -92,6 +64,12 @@ struct fix
   /* The value is signed when checking for overflow.  */
   unsigned fx_signed : 1;
 
+  /* pc-relative offset adjust (only used by m68k and m68hc11) */
+  char fx_pcrel_adjust;
+
+  /* How many bytes are involved? */
+  unsigned char fx_size;
+
   /* Which frag does this fix apply to?  */
   fragS *fx_frag;
 
@@ -120,15 +98,7 @@ struct fix
      processing.  */
   bit_fixS *fx_bit_fixP;
 
-#ifdef BFD_ASSEMBLER
   bfd_reloc_code_real_type fx_r_type;
-#else
-#ifdef NEED_FX_R_TYPE
-  /* Hack for machines where the type of reloc can't be
-     worked out by looking at how big it is.  */
-  int fx_r_type;
-#endif
-#endif
 
   /* This field is sort of misnamed.  It appears to be a sort of random
      scratch field, for use by the back ends.  The main gas code doesn't
@@ -150,6 +120,10 @@ struct fix
     const struct cgen_insn *insn;
     /* Target specific data, usually reloc number.  */
     int opinfo;
+    /* Which ifield this fixup applies to. */
+    struct cgen_maybe_multi_ifield * field;
+    /* is this field is the MSB field in a set? */
+    int msb_field_p;
   } fx_cgen;
 #endif
 
@@ -162,25 +136,33 @@ struct fix
 
 typedef struct fix fixS;
 
+struct reloc_list
+{
+  struct reloc_list *next;
+  union
+  {
+    struct
+    {
+      symbolS *offset_sym;
+      reloc_howto_type *howto;
+      symbolS *sym;
+      bfd_vma addend;
+    } a;
+    struct
+    {
+      asection *sec;
+      asymbol *s;
+      arelent r;
+    } b;
+  } u;
+  char *file;
+  unsigned int line;
+};
+
 extern int finalize_syms;
 extern symbolS *abs_section_sym;
 extern addressT dot_value;
-
-#ifndef BFD_ASSEMBLER
-extern char *next_object_file_charP;
-
-#ifndef MANY_SEGMENTS
-COMMON fixS *text_fix_root, *text_fix_tail;    /* Chains fixSs.  */
-COMMON fixS *data_fix_root, *data_fix_tail;    /* Chains fixSs.  */
-COMMON fixS *bss_fix_root, *bss_fix_tail;      /* Chains fixSs.  */
-extern struct frag *text_last_frag;            /* Last frag in segment.  */
-extern struct frag *data_last_frag;            /* Last frag in segment.  */
-#endif
-COMMON fixS **seg_fix_rootP, **seg_fix_tailP;  /* -> one of above.  */
-#endif
-
-extern long string_byte_count;
-extern int section_alignment[];
+extern struct reloc_list* reloc_list;
 
 extern void append (char **charPP, char *fromP, unsigned long length);
 extern void record_alignment (segT seg, int align);
@@ -188,27 +170,15 @@ extern int get_recorded_alignment (segT seg);
 extern void subsegs_finish (void);
 extern void write_object_file (void);
 extern long relax_frag (segT, fragS *, long);
-extern int relax_segment (struct frag * seg_frag_root, segT seg_type);
-
+extern int relax_segment (struct frag *, segT, int);
 extern void number_to_chars_littleendian (char *, valueT, int);
 extern void number_to_chars_bigendian (char *, valueT, int);
-
-#ifdef BFD_ASSEMBLER
 extern fixS *fix_new
   (fragS * frag, int where, int size, symbolS * add_symbol,
    offsetT offset, int pcrel, bfd_reloc_code_real_type r_type);
 extern fixS *fix_new_exp
   (fragS * frag, int where, int size, expressionS *exp, int pcrel,
    bfd_reloc_code_real_type r_type);
-#else
-extern fixS *fix_new
-  (fragS * frag, int where, int size, symbolS * add_symbol,
-   offsetT offset, int pcrel, int r_type);
-extern fixS *fix_new_exp
-  (fragS * frag, int where, int size, expressionS *exp, int pcrel,
-   int r_type);
-#endif
-
 extern void write_print_statistics (FILE *);
 
 #endif /* __write_h__ */
This page took 0.026195 seconds and 4 git commands to generate.