* 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.
This commit is contained in:
Doug Evans 1997-11-05 00:45:23 +00:00
parent 86cb8d868d
commit d57d82d7e5
3 changed files with 173 additions and 41 deletions

View 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>

View File

@ -52,11 +52,13 @@
/* 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));

View 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. */
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, 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
@ -34,24 +60,90 @@
#define MAX_ARGS 4
#define ARG_LEN 50
#if __STDC__ == 1
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);
#else /* not __STDC__ */
void fix_new_ns32k();
#endif /* not __STDC__ */
#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));
/* end of tc-ns32k.h */
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
#define TC_FRAG_INIT(X) \
do \
{ \
frag_opcode_frag(X) = NULL; \
frag_opcode_offset(X) = 0; \
frag_bsr(X) = 0; \
} \
while(0)
/* 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
#define TC_FIX_TYPE \
struct \
{ \
fragS *opcode_fragP; \
unsigned int opcode_offset; \
unsigned int bsr : 1; \
}
/* 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)
#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)