(struct fix): Fields fx_offset and fx_addnumber are now type valueT.
authorKen Raeburn <raeburn@cygnus>
Wed, 7 Jul 1993 16:39:13 +0000 (16:39 +0000)
committerKen Raeburn <raeburn@cygnus>
Wed, 7 Jul 1993 16:39:13 +0000 (16:39 +0000)
(fix_new): Argument offset is now type offsetT.

gas/write.h

index b14a25eabed91bea1a8bc1e02b9e79eedd838260..12bdebc1caf9f666dbf7ea2b9c337cd252764bc3 100644 (file)
@@ -1,6 +1,6 @@
 /* write.h
 
-   Copyright (C) 1987, 1992 Free Software Foundation, Inc.
+   Copyright (C) 1987, 1992, 1993 Free Software Foundation, Inc.
 
    This file is part of GAS, the GNU Assembler.
 
 
 struct fix
   {
+    /* These small fields are grouped together for compactness of
+       this structure, and efficiency of access on some architectures.  */
+    char fx_pcrel_adjust;      /* pc-relative offset adjust */
+    unsigned fx_pcrel : 1;     /* TRUE: pc-relative. */
+    unsigned fx_im_disp : 1;   /* TRUE: value is a displacement */
+    unsigned fx_bsr : 1;       /* sequent-hack */
+    /* TRUE if target is a 'callj' (used by i960) */
+    unsigned fx_callj : 1;
+    short int fx_size;         /* How many bytes are involved? */
+
     fragS *fx_frag;            /* Which frag? */
     long fx_where;             /* Where is the 1st byte to fix up? */
     symbolS *fx_addsy;         /* NULL or Symbol whose value we add in. */
     symbolS *fx_subsy;         /* NULL or Symbol whose value we subtract. */
-    long fx_offset;            /* Absolute number we add in. */
+    valueT fx_offset;          /* Absolute number we add in. */
     struct fix *fx_next;       /* NULL or -> next fixS. */
-    short int fx_size;         /* How many bytes are involved? */
-    char fx_pcrel;             /* TRUE: pc-relative. */
-    char fx_pcrel_adjust;      /* pc-relative offset adjust */
-    char fx_im_disp;           /* TRUE: value is a displacement */
     bit_fixS *fx_bit_fixP;     /* IF NULL no bitfix's to do */
-    char fx_bsr;               /* sequent-hack */
-#if defined(TC_SPARC) || defined(TC_A29K) || defined(NEED_FX_R_TYPE)
-    /* Hacks for machines where the type of reloc can't be
-          worked out by looking at how big it is */
-
+#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
-    char fx_callj;             /* TRUE if target is a 'callj' (used by i960) */
-    long fx_addnumber;
+#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
+       do anything but initialize it to zero.  The use of it does need to
+       be coordinated between the cpu and format files, though.  E.g., some
+       coff targets pass the `addend' field from the cpu file via this
+       field.  I don't know why the `fx_offset' field above can't be used
+       for that; investigate later and document. KR  */
+    valueT fx_addnumber;
   };
 
 typedef struct fix fixS;
 
-COMMON char *next_object_file_charP;
+#ifndef BFD_ASSEMBLER
+extern char *next_object_file_charP;
 
 #ifndef MANY_SEGMENTS
 COMMON fixS *text_fix_root, *text_fix_tail;    /* Chains fixSs. */
@@ -75,40 +91,26 @@ COMMON fixS *data_fix_root, *data_fix_tail; /* Chains fixSs. */
 COMMON fixS *bss_fix_root, *bss_fix_tail;      /* Chains fixSs. */
 #endif
 COMMON fixS **seg_fix_rootP, **seg_fix_tailP;  /* -> one of above. */
+#endif
+
 extern long string_byte_count;
 extern int section_alignment[];
 
-#if __STDC__ == 1
-
-bit_fixS *bit_fix_new (int size, int offset, long base_type, long base_adj, long min, long max, long add);
-void append (char **charPP, char *fromP, unsigned long length);
-void record_alignment (segT seg, int align);
-void write_object_file (void);
-
-fixS *fix_new (fragS * frag,
-              int where,
-              int size,
-              symbolS * add_symbol,
-              symbolS * sub_symbol,
-              long offset,
-              int pcrel,
-              int r_type);
-
-#else /* not __STDC__ */
-
-bit_fixS *bit_fix_new ();
-fixS *fix_new ();
-void append ();
-void record_alignment ();
-void write_object_file ();
-
-#endif /* not __STDC__ */
-
-/*
- * Local Variables:
- * comment-column: 0
- * fill-column: 131
- * End:
- */
+bit_fixS *bit_fix_new PARAMS ((int size, int offset, long base_type,
+                              long base_adj, long min, long max, long add));
+void append PARAMS ((char **charPP, char *fromP, unsigned long length));
+void record_alignment PARAMS ((segT seg, int align));
+void write_object_file PARAMS ((void));
+
+#ifdef BFD_ASSEMBLER
+fixS *fix_new PARAMS ((fragS * frag, int where, int size,
+                      symbolS * add_symbol, symbolS * sub_symbol,
+                      offsetT offset, int pcrel,
+                      bfd_reloc_code_real_type r_type));
+#else
+fixS *fix_new PARAMS ((fragS * frag, int where, int size,
+                      symbolS * add_symbol, symbolS * sub_symbol,
+                      long offset, int pcrel, int r_type));
+#endif
 
 /* end of write.h */