/* 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. */
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 */