Based on a patch from Ian.Dall@dsto.defence.gov.au.
* as.h (struct frag, frag support): Moved from here. * frags.h: To here. (struct frag, member tc_frag_data): New member if TC_FRAG_TYPE is defined. (struct frag, member fr_cgen): Renamed from fr_targ.cgen. * cgen.c (cgen_asm_finish_insn): Update. * config/tc-m32r.c (md_estimate_size_before_relax): Update. * config/tc-m32r.h (TC_FRAG_INIT): Renamed from md_init_frag. (md_convert_frag): Ditto. * config/tc-ns32k.h (TC_FRAG_TYPE): Define. (frag_opcode_frag,frag_opcode_offset,frag_bsr): Update. (TC_FRAG_INIT): Update.
This commit is contained in:
parent
269bbc74e0
commit
070937ba64
@ -1,3 +1,19 @@
|
||||
Wed Nov 5 10:51:49 1997 Doug Evans <devans@canuck.cygnus.com>
|
||||
|
||||
Based on a patch from Ian.Dall@dsto.defence.gov.au.
|
||||
* as.h (struct frag, frag support): Moved from here.
|
||||
* frags.h: To here.
|
||||
(struct frag, member tc_frag_data): New member if TC_FRAG_TYPE
|
||||
is defined.
|
||||
(struct frag, member fr_cgen): Renamed from fr_targ.cgen.
|
||||
* cgen.c (cgen_asm_finish_insn): Update.
|
||||
* config/tc-m32r.c (md_estimate_size_before_relax): Update.
|
||||
* config/tc-m32r.h (TC_FRAG_INIT): Renamed from md_init_frag.
|
||||
(md_convert_frag): Ditto.
|
||||
* config/tc-ns32k.h (TC_FRAG_TYPE): Define.
|
||||
(frag_opcode_frag,frag_opcode_offset,frag_bsr): Update.
|
||||
(TC_FRAG_INIT): Update.
|
||||
|
||||
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
|
||||
|
112
gas/frags.h
112
gas/frags.h
@ -1,6 +1,5 @@
|
||||
/* frags.h - Header file for the frag concept.
|
||||
|
||||
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.
|
||||
|
||||
@ -15,15 +14,92 @@
|
||||
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. */
|
||||
|
||||
extern struct obstack frags;
|
||||
/* Frags ONLY live in this obstack. */
|
||||
/* We use obstack_next_free() macro */
|
||||
/* so please don't put any other objects */
|
||||
/* on this stack! */
|
||||
#ifdef ANSI_PROTOTYPES
|
||||
struct obstack;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* A code fragment (frag) is some known number of chars, followed by some
|
||||
* unknown number of chars. Typically the unknown number of chars is an
|
||||
* instruction address whose size is yet unknown. We always know the greatest
|
||||
* possible size the unknown number of chars may become, and reserve that
|
||||
* much room at the end of the frag.
|
||||
* Once created, frags do not change address during assembly.
|
||||
* We chain the frags in (a) forward-linked list(s). The object-file address
|
||||
* of the 1st char of a frag is generally not known until after relax().
|
||||
* Many things at assembly time describe an address by {object-file-address
|
||||
* of a particular frag}+offset.
|
||||
|
||||
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. */
|
||||
addressT fr_address;
|
||||
/* Chain forward; ascending address order. Rooted in frch_root. */
|
||||
struct frag *fr_next;
|
||||
|
||||
/* (Fixed) number of chars we know we have. May be 0. */
|
||||
offsetT fr_fix;
|
||||
/* (Variable) number of chars after above. May be 0. */
|
||||
offsetT fr_var;
|
||||
/* For variable-length tail. */
|
||||
struct symbol *fr_symbol;
|
||||
/* For variable-length tail. */
|
||||
offsetT fr_offset;
|
||||
/* Points to opcode low addr byte, for relaxation. */
|
||||
char *fr_opcode;
|
||||
|
||||
#ifndef NO_LISTING
|
||||
struct list_info_struct *line;
|
||||
#endif
|
||||
|
||||
/* What state is my tail in? */
|
||||
relax_stateT fr_type;
|
||||
relax_substateT fr_subtype;
|
||||
|
||||
#ifdef USING_CGEN
|
||||
/* Don't include this unless using CGEN to keep frag size down. */
|
||||
struct {
|
||||
const struct cgen_insn *insn;
|
||||
unsigned char opindex, opinfo;
|
||||
} fr_cgen;
|
||||
#endif
|
||||
|
||||
#ifdef TC_FRAG_TYPE
|
||||
TC_FRAG_TYPE tc_frag_data;
|
||||
#endif
|
||||
|
||||
/* Where the frag was created, or where it became a variant frag. */
|
||||
char *fr_file;
|
||||
unsigned int fr_line;
|
||||
|
||||
/* Data begins here. */
|
||||
char fr_literal[1];
|
||||
};
|
||||
|
||||
#define SIZEOF_STRUCT_FRAG \
|
||||
((char *)zero_address_frag.fr_literal-(char *)&zero_address_frag)
|
||||
/* We want to say fr_literal[0] above. */
|
||||
|
||||
/* 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));
|
||||
|
||||
/* For foreign-segment symbol fixups. */
|
||||
COMMON fragS zero_address_frag;
|
||||
/* For local common (N_BSS segment) fixups. */
|
||||
COMMON fragS bss_address_frag;
|
||||
|
||||
#if 0
|
||||
/*
|
||||
* A macro to speed up appending exactly 1 char
|
||||
* to current frag.
|
||||
@ -37,15 +113,21 @@ extern struct obstack frags;
|
||||
} \
|
||||
obstack_1grow( &frags, datum ); \
|
||||
}
|
||||
#else
|
||||
extern void frag_append_1_char PARAMS ((int));
|
||||
#define FRAG_APPEND_1_CHAR(X) frag_append_1_char (X)
|
||||
#endif
|
||||
|
||||
|
||||
void frag_init PARAMS ((void));
|
||||
fragS *frag_alloc PARAMS ((struct obstack *));
|
||||
void frag_grow PARAMS ((unsigned int nchars));
|
||||
char *frag_more PARAMS ((int nchars));
|
||||
void frag_align PARAMS ((int alignment, int fill_character));
|
||||
void frag_align PARAMS ((int alignment, int fill_character, int max));
|
||||
void frag_align_pattern PARAMS ((int alignment,
|
||||
const char *fill_pattern,
|
||||
int n_fill));
|
||||
int n_fill,
|
||||
int max));
|
||||
void frag_new PARAMS ((int old_frags_var_max_size));
|
||||
void frag_wane PARAMS ((fragS * fragP));
|
||||
|
||||
@ -54,17 +136,15 @@ char *frag_variant PARAMS ((relax_stateT type,
|
||||
int var,
|
||||
relax_substateT subtype,
|
||||
symbolS * symbol,
|
||||
long offset,
|
||||
char *opcode,
|
||||
int pcrel_adjust,
|
||||
int bsr));
|
||||
offsetT offset,
|
||||
char *opcode));
|
||||
|
||||
char *frag_var PARAMS ((relax_stateT type,
|
||||
int max_chars,
|
||||
int var,
|
||||
relax_substateT subtype,
|
||||
symbolS * symbol,
|
||||
long offset,
|
||||
offsetT offset,
|
||||
char *opcode));
|
||||
|
||||
/* end of frags.h */
|
||||
|
Loading…
Reference in New Issue
Block a user