* write.c (print_fixup): Use TC_FIX_DATA_PRINT (if defined) to
authorDoug Evans <dje@google.com>
Wed, 5 Nov 1997 00:45:23 +0000 (00:45 +0000)
committerDoug Evans <dje@google.com>
Wed, 5 Nov 1997 00:45:23 +0000 (00:45 +0000)
print out MD fields of fix.
* frags.c (frag_var, frag_variant): Use TC_FRAG_INIT macro (if
  defined) to initialize MD fields in frag.
* as.h (struct frag, ns32k support): Rename ns32k to fr_ns32k.
Delete pcrel_adjust.  Add fr_opcode_fragP, fr_opcode_offset.
* config/tc-ns32k.h: Add comments. Remove obsolete
  BFD_FAST_SECTION_FILL definition, change prototypes for
  fix_new_ns32k and fix_new_ns32k_exp to add new arguments
  opcode_frag and opcode_offset and remove pcrel_adjust.
(TC_FIX_TYPE): add opcode_fragP and opcode_offset fields.
(TC_FIX_DATA_PRINT): new macro to print out TC_FIX_TYPE.
(TC_FRAG_INIT): new macro to initialize machine dependent field in
  frags.
(frag_opcode_frag, frag_opcode_offset, frag_bsr): macros to access
  MD fields in frag structure.
(fix_im_disp, fix_bit_fixP, fix_opcode_frag, fix_opcode_offset,
  fix_bsr): macros to access MD fields in fix structure.
* config/tc-ns32k.c: Avoid overlength lines. Align comments.  Don't
  use struct opcode_location as these fields are now in the frag
structure.
(convert_iif): Call frag_more as it is needed instead
  of trying to allocate for the whole insn. Avoid call of frag_more
  with negative argument.
(md_pcrel_adjust, md_fix_pcrel_adjust, md_apply_fix,
md_estimate_size_before_relax, md_pcrel_from,
tc_aout_fix_to_chars): use accessor macros to get md fields in fix
  and frag structures.
(fix_new_ns32k, fix_new_ns32k_exp): add new arguments opcode_frag and
opcode_offset and remove pcrel_adjust.
(convert_iif, cons_fix_new_ns32k): call fix_new_ns32k,
  fix_new_ns32k_exp with changed arguments.

gas/ChangeLog
gas/as.h
gas/config/tc-ns32k.h

index 71ca2bf..388a3af 100644 (file)
@@ -1,10 +1,45 @@
+Tue Nov  4 16:35:57 1997  Ian Dall  <Ian.Dall@dsto.defence.gov.au>
+
+       * write.c (print_fixup): Use TC_FIX_DATA_PRINT (if defined) to
+       print out MD fields of fix.
+       * frags.c (frag_var, frag_variant): Use TC_FRAG_INIT macro (if
+       defined) to initialize MD fields in frag.
+       * as.h (struct frag, ns32k support): Rename ns32k to fr_ns32k.
+       Delete pcrel_adjust.  Add fr_opcode_fragP, fr_opcode_offset.
+       * config/tc-ns32k.h: Add comments. Remove obsolete
+       BFD_FAST_SECTION_FILL definition, change prototypes for
+       fix_new_ns32k and fix_new_ns32k_exp to add new arguments
+       opcode_frag and opcode_offset and remove pcrel_adjust.
+       (TC_FIX_TYPE): add opcode_fragP and opcode_offset fields.
+       (TC_FIX_DATA_PRINT): new macro to print out TC_FIX_TYPE.
+       (TC_FRAG_INIT): new macro to initialize machine dependent field in
+       frags.
+       (frag_opcode_frag, frag_opcode_offset, frag_bsr): macros to access
+       MD fields in frag structure.
+       (fix_im_disp, fix_bit_fixP, fix_opcode_frag, fix_opcode_offset,
+       fix_bsr): macros to access MD fields in fix structure.
+       * config/tc-ns32k.c: Avoid overlength lines. Align comments.  Don't
+       use struct opcode_location as these fields are now in the frag
+       structure.
+       (convert_iif): Call frag_more as it is needed instead
+       of trying to allocate for the whole insn. Avoid call of frag_more
+       with negative argument.
+       (md_pcrel_adjust, md_fix_pcrel_adjust, md_apply_fix,
+       md_estimate_size_before_relax, md_pcrel_from,
+       tc_aout_fix_to_chars): use accessor macros to get md fields in fix
+       and frag structures.
+       (fix_new_ns32k, fix_new_ns32k_exp): add new arguments opcode_frag and
+       opcode_offset and remove pcrel_adjust.
+       (convert_iif, cons_fix_new_ns32k): call fix_new_ns32k,
+       fix_new_ns32k_exp with changed arguments.
+
 Mon Nov  3 13:30:17 1997  Gavin Koch  <gavin@cygnus.com>
 
-          * tc-mips.c (md_begin): Reorganize setting of default values so
-          that mips_cpu depends on TARGET_CPU, and mips_opts.isa depends on
-          mips_cpu.
-          (md_parse_option): Remove all code that sets defaults; md_begin
-          handles all of this now.
+       * tc-mips.c (md_begin): Reorganize setting of default values so
+       that mips_cpu depends on TARGET_CPU, and mips_opts.isa depends on
+       mips_cpu.
+       (md_parse_option): Remove all code that sets defaults; md_begin
+       handles all of this now.
 
 Sun Nov  2 14:46:09 1997  Ian Lance Taylor  <ian@cygnus.com>
 
index 0196d06..46b58a8 100644 (file)
--- a/gas/as.h
+++ b/gas/as.h
 
 /* AIX requires this to be the first thing in the file.  */
 #ifdef __GNUC__
-#ifdef __STDC__
+# ifndef alloca
+#  ifdef __STDC__
 extern void *alloca ();
-#else
+#  else
 extern char *alloca ();
-#endif
+#  endif
+# endif
 #else
 # if HAVE_ALLOCA_H
 #  include <alloca.h>
@@ -410,6 +412,7 @@ typedef addressT relax_addressT;
  BUG: it may be smarter to have a single pointer off to various different
  notes for different frag kinds. See how code pans
  */
+
 struct frag
 {
   /* Object file address. */
@@ -442,8 +445,10 @@ struct frag
        we can't really conditionalize it.  This code should be
        rearranged a bit to make that possible.  */
     struct {
-      char pcrel_adjust, bsr;
-    } ns32k;
+      struct frag *fr_opcode_fragP;
+      unsigned int fr_opcode_offset;
+      char fr_bsr;
+    } fr_ns32k;
 #ifdef USING_CGEN
     /* Don't include this unless using CGEN to keep frag size down.  */
     struct {
@@ -467,9 +472,9 @@ struct frag
 
 typedef struct frag fragS;
 
-/* Current frag we are building.  This frag is incomplete.  It is, however,
-   included in frchain_now.  The fr_fix field is bogus; instead, use:
-   obstack_next_free(&frags)-frag_now->fr_literal.  */
+/* Current frag we are building.  This frag is incomplete.  It is,
+   however, included in frchain_now.  The fr_fix field is bogus;
+   instead, use frag_now_fix ().  */
 COMMON fragS *frag_now;
 extern int frag_now_fix PARAMS ((void));
 
@@ -623,7 +628,7 @@ void do_scrub_begin PARAMS ((int));
 void input_scrub_begin PARAMS ((void));
 void input_scrub_close PARAMS ((void));
 void input_scrub_end PARAMS ((void));
-void new_logical_line PARAMS ((char *fname, int line_number));
+int new_logical_line PARAMS ((char *fname, int line_number));
 void subsegs_begin PARAMS ((void));
 void subseg_change PARAMS ((segT seg, int subseg));
 segT subseg_new PARAMS ((const char *name, subsegT subseg));
index e37236f..6b89482 100644 (file)
@@ -1,22 +1,48 @@
 /* tc-ns32k.h -- Opcode table for National Semi 32k processor
-   Copyright (C) 1987, 1992 Free Software Foundation, Inc.
-   
+   Copyright (C) 1987, 92, 93, 94, 95, 1997 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)
    any later version.
-   
+
    GAS is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-   
+
    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, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+   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.  */
+
+#define TC_NS32K
+
+#define TARGET_BYTES_BIG_ENDIAN        0
 
+#define TC_PCREL_ADJUST(F) md_pcrel_adjust(F)
+
+#ifdef BFD_ASSEMBLER
+#define NO_RELOC BFD_RELOC_NONE
+
+#define TARGET_ARCH            bfd_arch_ns32k
+
+#ifndef TARGET_FORMAT          /* Maybe defined in te-*.h */
+#define TARGET_FORMAT          "a.out-pc532-mach"
+#endif
+#else
+#define NO_RELOC 0
+#endif
+
+#define LOCAL_LABELS_FB 1
+
+#include "bit_fix.h"
+
+#define tc_aout_pre_write_hook(x)      {;}     /* not used */
+#define tc_crawl_symbol_chain(a)       {;}     /* not used */
+#define tc_headers_hook(a)             {;}     /* not used */
 
 #ifdef SEQUENT_COMPATABILITY
 #define DEF_MODEC 20
 #define MAX_ARGS 4
 #define ARG_LEN 50
 
-#if __STDC__ == 1
+#define TC_CONS_FIX_NEW cons_fix_new_ns32k
+extern void fix_new_ns32k_exp PARAMS((fragS *frag,
+                                  int where,
+                                  int size,
+                                  expressionS *exp,
+                                  int pcrel,
+                                  int im_disp,
+                                  bit_fixS *bit_fixP,  /* really bit_fixS */
+                                  int bsr,
+                                  fragS *opcode_frag,
+                                  unsigned int opcode_offset));
+
+
+extern void fix_new_ns32k PARAMS ((fragS *frag,
+                                  int where,
+                                  int size,
+                                  struct symbol *add_symbol,
+                                  long offset,
+                                  int pcrel,
+                                  int im_disp,
+                                  bit_fixS *bit_fixP,  /* really bit_fixS */
+                                  int bsr,
+                                  fragS *opcode_frag,
+                                  unsigned int opcode_offset));
+
+extern void cons_fix_new_ns32k PARAMS ((fragS *frag,
+                                       int where,
+                                       int size,
+                                       expressionS *exp));
+
+/* the NS32x32 has a non 0 nop instruction which should be used in aligns */
+#define NOP_OPCODE 0xa2
+
+#define md_operand(x)
+
+extern const struct relax_type md_relax_table[];
+#define TC_GENERIC_RELAX_TABLE md_relax_table
+
 
-void fix_new_ns32k(fragS *frag,
-                  int where,
-                  void *add_symbol, /* really symbolS */
-                  void *sub_symbol, /* really symbolS */
-                  long offset,
-                  int pcrel,
-                  int pcrel_adjust,
-                  int im_disp,
-                  void *bit_fixP, /* really bit_fixS */
-                  int bsr);
+#define TC_FRAG_INIT(X)                                \
+  do                                           \
+     {                                         \
+       frag_opcode_frag(X) = NULL;             \
+       frag_opcode_offset(X) = 0;              \
+       frag_bsr(X) = 0;                                \
+     }                                         \
+  while(0)
 
-#else /* not __STDC__ */
+/* Accessor macros for things which may move around */
+#define frag_opcode_frag(X) (X)->fr_targ.fr_ns32k.fr_opcode_fragP
+#define frag_opcode_offset(X) (X)->fr_targ.fr_ns32k.fr_opcode_offset
+#define frag_bsr(X) (X)->fr_targ.fr_ns32k.fr_bsr
 
-void fix_new_ns32k();
+#define TC_FIX_TYPE                            \
+struct                                         \
+{                                              \
+  fragS *opcode_fragP;                         \
+  unsigned int opcode_offset;                  \
+  unsigned int bsr : 1;                                \
+}
 
-#endif /* not __STDC__ */
+/* Accessor macros for things which may move around.
+   See comments in write.h.  */
+#define fix_im_disp(X)  (X)->fx_im_disp
+#define fix_bit_fixP(X) (X)->fx_bit_fixP
+#define fix_opcode_frag(X) (X)->tc_fix_data.opcode_fragP
+#define fix_opcode_offset(X) (X)->tc_fix_data.opcode_offset
+#define fix_bsr(X) (X)->tc_fix_data.bsr
 
+#define TC_INIT_FIX_DATA(X)                    \
+  do                                           \
+     {                                         \
+       fix_opcode_frag(X) = NULL;              \
+       fix_opcode_offset(X) = 0;               \
+       fix_bsr(X) = 0;                         \
+     }                                         \
+  while(0)
 
-/* end of tc-ns32k.h */
+#define TC_FIX_DATA_PRINT(FILE, FIXP)                                  \
+  do                                                                   \
+    {                                                                  \
+      fprintf((FILE), "opcode_frag=%ld, operand offset=%d, bsr=%d\n",  \
+             (unsigned long) fix_opcode_frag (FIXP),                   \
+             fix_opcode_offset (FIXP),                                 \
+             fix_bsr (FIXP));                                          \
+    }                                                                  \
+  while(0)