* config/tc-sh.c: Convert to ISO C90. Remove unnecessary
prototypes and casts. * config/tc-sh.h: Likewise. * config/tc-sh64.c: Likewise. * config/tc-sh64.h: Likewise.
This commit is contained in:
parent
c783cbd61e
commit
8edc77b9b4
5 changed files with 182 additions and 353 deletions
|
@ -1,3 +1,11 @@
|
|||
2003-10-11 Kaz Kojima <kkojima@rr.iij4u.or.jp>
|
||||
|
||||
* config/tc-sh.c: Convert to ISO C90. Remove unnecessary
|
||||
prototypes and casts.
|
||||
* config/tc-sh.h: Likewise.
|
||||
* config/tc-sh64.c: Likewise.
|
||||
* config/tc-sh64.h: Likewise.
|
||||
|
||||
2003-10-08 Dave Brolley <brolley@redhat.com>
|
||||
|
||||
* config/tc-frv.c (fr550_check_insn_acc_range): New function.
|
||||
|
|
|
@ -48,44 +48,17 @@ const char comment_chars[] = "!";
|
|||
const char line_separator_chars[] = ";";
|
||||
const char line_comment_chars[] = "!#";
|
||||
|
||||
static void s_uses PARAMS ((int));
|
||||
|
||||
static void sh_count_relocs PARAMS ((bfd *, segT, PTR));
|
||||
static void sh_frob_section PARAMS ((bfd *, segT, PTR));
|
||||
|
||||
static void s_uacons PARAMS ((int));
|
||||
static sh_opcode_info *find_cooked_opcode PARAMS ((char **));
|
||||
static unsigned int assemble_ppi PARAMS ((char *, sh_opcode_info *));
|
||||
static void little PARAMS ((int));
|
||||
static void big PARAMS ((int));
|
||||
static int parse_reg PARAMS ((char *, int *, int *));
|
||||
static char *parse_exp PARAMS ((char *, sh_operand_info *));
|
||||
static char *parse_at PARAMS ((char *, sh_operand_info *));
|
||||
static void get_operand PARAMS ((char **, sh_operand_info *));
|
||||
static char *get_operands
|
||||
PARAMS ((sh_opcode_info *, char *, sh_operand_info *));
|
||||
static sh_opcode_info *get_specific
|
||||
PARAMS ((sh_opcode_info *, sh_operand_info *));
|
||||
static void insert PARAMS ((char *, int, int, sh_operand_info *));
|
||||
static void build_relax PARAMS ((sh_opcode_info *, sh_operand_info *));
|
||||
static char *insert_loop_bounds PARAMS ((char *, sh_operand_info *));
|
||||
static unsigned int build_Mytes
|
||||
PARAMS ((sh_opcode_info *, sh_operand_info *));
|
||||
static bfd_boolean sh_local_pcrel PARAMS ((fixS *fix));
|
||||
static void s_uses (int);
|
||||
static void s_uacons (int);
|
||||
|
||||
#ifdef OBJ_ELF
|
||||
static void sh_elf_cons PARAMS ((int));
|
||||
|
||||
inline static int sh_PIC_related_p PARAMS ((symbolS *));
|
||||
static int sh_check_fixup PARAMS ((expressionS *, bfd_reloc_code_real_type *));
|
||||
inline static char *sh_end_of_match PARAMS ((char *, char *));
|
||||
static void sh_elf_cons (int);
|
||||
|
||||
symbolS *GOT_symbol; /* Pre-defined "_GLOBAL_OFFSET_TABLE_" */
|
||||
#endif
|
||||
|
||||
static void
|
||||
big (ignore)
|
||||
int ignore ATTRIBUTE_UNUSED;
|
||||
big (int ignore ATTRIBUTE_UNUSED)
|
||||
{
|
||||
if (! target_big_endian)
|
||||
as_bad (_("directive .big encountered when option -big required"));
|
||||
|
@ -95,8 +68,7 @@ big (ignore)
|
|||
}
|
||||
|
||||
static void
|
||||
little (ignore)
|
||||
int ignore ATTRIBUTE_UNUSED;
|
||||
little (int ignore ATTRIBUTE_UNUSED)
|
||||
{
|
||||
if (target_big_endian)
|
||||
as_bad (_("directive .little encountered when option -little required"));
|
||||
|
@ -510,8 +482,7 @@ static struct hash_control *opcode_hash_control; /* Opcode mnemonics */
|
|||
/* Determinet whether the symbol needs any kind of PIC relocation. */
|
||||
|
||||
inline static int
|
||||
sh_PIC_related_p (sym)
|
||||
symbolS *sym;
|
||||
sh_PIC_related_p (symbolS *sym)
|
||||
{
|
||||
expressionS *exp;
|
||||
|
||||
|
@ -537,9 +508,7 @@ sh_PIC_related_p (sym)
|
|||
expression, that may be rearranged. */
|
||||
|
||||
static int
|
||||
sh_check_fixup (main_exp, r_type_p)
|
||||
expressionS *main_exp;
|
||||
bfd_reloc_code_real_type *r_type_p;
|
||||
sh_check_fixup (expressionS *main_exp, bfd_reloc_code_real_type *r_type_p)
|
||||
{
|
||||
expressionS *exp = main_exp;
|
||||
|
||||
|
@ -765,10 +734,7 @@ sh_check_fixup (main_exp, r_type_p)
|
|||
/* Add expression EXP of SIZE bytes to offset OFF of fragment FRAG. */
|
||||
|
||||
void
|
||||
sh_cons_fix_new (frag, off, size, exp)
|
||||
fragS *frag;
|
||||
int off, size;
|
||||
expressionS *exp;
|
||||
sh_cons_fix_new (fragS *frag, int off, int size, expressionS *exp)
|
||||
{
|
||||
bfd_reloc_code_real_type r_type = BFD_RELOC_UNUSED;
|
||||
|
||||
|
@ -813,9 +779,9 @@ sh_cons_fix_new (frag, off, size, exp)
|
|||
suffixes such as @GOT, @GOTOFF and @PLT, that generate
|
||||
machine-specific relocation types. So we must define it here. */
|
||||
/* Clobbers input_line_pointer, checks end-of-line. */
|
||||
/* NBYTES 1=.byte, 2=.word, 4=.long */
|
||||
static void
|
||||
sh_elf_cons (nbytes)
|
||||
register int nbytes; /* 1=.byte, 2=.word, 4=.long */
|
||||
sh_elf_cons (register int nbytes)
|
||||
{
|
||||
expressionS exp;
|
||||
|
||||
|
@ -857,7 +823,7 @@ sh_elf_cons (nbytes)
|
|||
set up all the tables, etc that the MD part of the assembler needs. */
|
||||
|
||||
void
|
||||
md_begin ()
|
||||
md_begin (void)
|
||||
{
|
||||
const sh_opcode_info *opcode;
|
||||
char *prev_name = "";
|
||||
|
@ -897,10 +863,7 @@ static int reg_b;
|
|||
/* Try to parse a reg name. Return the number of chars consumed. */
|
||||
|
||||
static int
|
||||
parse_reg (src, mode, reg)
|
||||
char *src;
|
||||
int *mode;
|
||||
int *reg;
|
||||
parse_reg (char *src, int *mode, int *reg)
|
||||
{
|
||||
char l0 = TOLOWER (src[0]);
|
||||
char l1 = l0 ? TOLOWER (src[1]) : 0;
|
||||
|
@ -1250,9 +1213,7 @@ parse_reg (src, mode, reg)
|
|||
}
|
||||
|
||||
static char *
|
||||
parse_exp (s, op)
|
||||
char *s;
|
||||
sh_operand_info *op;
|
||||
parse_exp (char *s, sh_operand_info *op)
|
||||
{
|
||||
char *save;
|
||||
char *new;
|
||||
|
@ -1293,9 +1254,7 @@ parse_exp (s, op)
|
|||
*/
|
||||
|
||||
static char *
|
||||
parse_at (src, op)
|
||||
char *src;
|
||||
sh_operand_info *op;
|
||||
parse_at (char *src, sh_operand_info *op)
|
||||
{
|
||||
int len;
|
||||
int mode;
|
||||
|
@ -1455,9 +1414,7 @@ parse_at (src, op)
|
|||
}
|
||||
|
||||
static void
|
||||
get_operand (ptr, op)
|
||||
char **ptr;
|
||||
sh_operand_info *op;
|
||||
get_operand (char **ptr, sh_operand_info *op)
|
||||
{
|
||||
char *src = *ptr;
|
||||
int mode = -1;
|
||||
|
@ -1493,10 +1450,7 @@ get_operand (ptr, op)
|
|||
}
|
||||
|
||||
static char *
|
||||
get_operands (info, args, operand)
|
||||
sh_opcode_info *info;
|
||||
char *args;
|
||||
sh_operand_info *operand;
|
||||
get_operands (sh_opcode_info *info, char *args, sh_operand_info *operand)
|
||||
{
|
||||
char *ptr = args;
|
||||
if (info->arg[0])
|
||||
|
@ -1554,9 +1508,7 @@ get_operands (info, args, operand)
|
|||
provided. */
|
||||
|
||||
static sh_opcode_info *
|
||||
get_specific (opcode, operands)
|
||||
sh_opcode_info *opcode;
|
||||
sh_operand_info *operands;
|
||||
get_specific (sh_opcode_info *opcode, sh_operand_info *operands)
|
||||
{
|
||||
sh_opcode_info *this_try = opcode;
|
||||
char *name = opcode->name;
|
||||
|
@ -1840,11 +1792,7 @@ get_specific (opcode, operands)
|
|||
}
|
||||
|
||||
static void
|
||||
insert (where, how, pcrel, op)
|
||||
char *where;
|
||||
int how;
|
||||
int pcrel;
|
||||
sh_operand_info *op;
|
||||
insert (char *where, int how, int pcrel, sh_operand_info *op)
|
||||
{
|
||||
fix_new_exp (frag_now,
|
||||
where - frag_now->fr_literal,
|
||||
|
@ -1855,9 +1803,7 @@ insert (where, how, pcrel, op)
|
|||
}
|
||||
|
||||
static void
|
||||
build_relax (opcode, op)
|
||||
sh_opcode_info *opcode;
|
||||
sh_operand_info *op;
|
||||
build_relax (sh_opcode_info *opcode, sh_operand_info *op)
|
||||
{
|
||||
int high_byte = target_big_endian ? 0 : 1;
|
||||
char *p;
|
||||
|
@ -1891,9 +1837,7 @@ build_relax (opcode, op)
|
|||
/* Insert ldrs & ldre with fancy relocations that relaxation can recognize. */
|
||||
|
||||
static char *
|
||||
insert_loop_bounds (output, operand)
|
||||
char *output;
|
||||
sh_operand_info *operand;
|
||||
insert_loop_bounds (char *output, sh_operand_info *operand)
|
||||
{
|
||||
char *name;
|
||||
symbolS *end_sym;
|
||||
|
@ -1941,9 +1885,7 @@ insert_loop_bounds (output, operand)
|
|||
/* Now we know what sort of opcodes it is, let's build the bytes. */
|
||||
|
||||
static unsigned int
|
||||
build_Mytes (opcode, operand)
|
||||
sh_opcode_info *opcode;
|
||||
sh_operand_info *operand;
|
||||
build_Mytes (sh_opcode_info *opcode, sh_operand_info *operand)
|
||||
{
|
||||
int index;
|
||||
char nbuf[4];
|
||||
|
@ -2054,8 +1996,7 @@ build_Mytes (opcode, operand)
|
|||
*STR_P to the first character after the last one read. */
|
||||
|
||||
static sh_opcode_info *
|
||||
find_cooked_opcode (str_p)
|
||||
char **str_p;
|
||||
find_cooked_opcode (char **str_p)
|
||||
{
|
||||
char *str = *str_p;
|
||||
unsigned char *op_start;
|
||||
|
@ -2102,9 +2043,7 @@ find_cooked_opcode (str_p)
|
|||
#define DDT_BASE 0xf000 /* Base value for double data transfer insns */
|
||||
|
||||
static unsigned int
|
||||
assemble_ppi (op_end, opcode)
|
||||
char *op_end;
|
||||
sh_opcode_info *opcode;
|
||||
assemble_ppi (char *op_end, sh_opcode_info *opcode)
|
||||
{
|
||||
int movx = 0;
|
||||
int movy = 0;
|
||||
|
@ -2327,8 +2266,7 @@ assemble_ppi (op_end, opcode)
|
|||
the frags/bytes it assembles to. */
|
||||
|
||||
void
|
||||
md_assemble (str)
|
||||
char *str;
|
||||
md_assemble (char *str)
|
||||
{
|
||||
unsigned char *op_end;
|
||||
sh_operand_info operand[3];
|
||||
|
@ -2436,7 +2374,7 @@ md_assemble (str)
|
|||
emits a BFD_RELOC_SH_LABEL reloc if necessary. */
|
||||
|
||||
void
|
||||
sh_frob_label ()
|
||||
sh_frob_label (void)
|
||||
{
|
||||
static fragS *last_label_frag;
|
||||
static int last_label_offset;
|
||||
|
@ -2461,7 +2399,7 @@ sh_frob_label ()
|
|||
data. It emits a BFD_RELOC_SH_DATA reloc if necessary. */
|
||||
|
||||
void
|
||||
sh_flush_pending_output ()
|
||||
sh_flush_pending_output (void)
|
||||
{
|
||||
if (sh_relax
|
||||
&& seg_info (now_seg)->tc_segment_info_data.in_code)
|
||||
|
@ -2473,8 +2411,7 @@ sh_flush_pending_output ()
|
|||
}
|
||||
|
||||
symbolS *
|
||||
md_undefined_symbol (name)
|
||||
char *name ATTRIBUTE_UNUSED;
|
||||
md_undefined_symbol (char *name ATTRIBUTE_UNUSED)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
@ -2483,15 +2420,13 @@ md_undefined_symbol (name)
|
|||
#ifndef BFD_ASSEMBLER
|
||||
|
||||
void
|
||||
tc_crawl_symbol_chain (headers)
|
||||
object_headers *headers ATTRIBUTE_UNUSED;
|
||||
tc_crawl_symbol_chain (object_headers *headers ATTRIBUTE_UNUSED)
|
||||
{
|
||||
printf (_("call to tc_crawl_symbol_chain \n"));
|
||||
}
|
||||
|
||||
void
|
||||
tc_headers_hook (headers)
|
||||
object_headers *headers ATTRIBUTE_UNUSED;
|
||||
tc_headers_hook (object_headers *headers ATTRIBUTE_UNUSED)
|
||||
{
|
||||
printf (_("call to tc_headers_hook \n"));
|
||||
}
|
||||
|
@ -2509,10 +2444,7 @@ tc_headers_hook (headers)
|
|||
returned, or NULL on OK. */
|
||||
|
||||
char *
|
||||
md_atof (type, litP, sizeP)
|
||||
int type;
|
||||
char *litP;
|
||||
int *sizeP;
|
||||
md_atof (int type, char *litP, int *sizeP)
|
||||
{
|
||||
int prec;
|
||||
LITTLENUM_TYPE words[4];
|
||||
|
@ -2566,8 +2498,7 @@ md_atof (type, litP, sizeP)
|
|||
special reloc for the linker. */
|
||||
|
||||
static void
|
||||
s_uses (ignore)
|
||||
int ignore ATTRIBUTE_UNUSED;
|
||||
s_uses (int ignore ATTRIBUTE_UNUSED)
|
||||
{
|
||||
expressionS ex;
|
||||
|
||||
|
@ -2622,9 +2553,7 @@ struct option md_longopts[] =
|
|||
size_t md_longopts_size = sizeof (md_longopts);
|
||||
|
||||
int
|
||||
md_parse_option (c, arg)
|
||||
int c;
|
||||
char *arg ATTRIBUTE_UNUSED;
|
||||
md_parse_option (int c, char *arg ATTRIBUTE_UNUSED)
|
||||
{
|
||||
switch (c)
|
||||
{
|
||||
|
@ -2718,8 +2647,7 @@ md_parse_option (c, arg)
|
|||
}
|
||||
|
||||
void
|
||||
md_show_usage (stream)
|
||||
FILE *stream;
|
||||
md_show_usage (FILE *stream)
|
||||
{
|
||||
fprintf (stream, _("\
|
||||
SH options:\n\
|
||||
|
@ -2762,10 +2690,7 @@ struct sh_count_relocs
|
|||
bfd_map_over_sections. */
|
||||
|
||||
static void
|
||||
sh_count_relocs (abfd, sec, data)
|
||||
bfd *abfd ATTRIBUTE_UNUSED;
|
||||
segT sec;
|
||||
PTR data;
|
||||
sh_count_relocs (bfd *abfd ATTRIBUTE_UNUSED, segT sec, void *data)
|
||||
{
|
||||
struct sh_count_relocs *info = (struct sh_count_relocs *) data;
|
||||
segment_info_type *seginfo;
|
||||
|
@ -2791,10 +2716,8 @@ sh_count_relocs (abfd, sec, data)
|
|||
BFD_ASSEMBLER, this is called via bfd_map_over_sections. */
|
||||
|
||||
static void
|
||||
sh_frob_section (abfd, sec, ignore)
|
||||
bfd *abfd ATTRIBUTE_UNUSED;
|
||||
segT sec;
|
||||
PTR ignore ATTRIBUTE_UNUSED;
|
||||
sh_frob_section (bfd *abfd ATTRIBUTE_UNUSED, segT sec,
|
||||
void *ignore ATTRIBUTE_UNUSED)
|
||||
{
|
||||
segment_info_type *seginfo;
|
||||
fixS *fix;
|
||||
|
@ -2877,13 +2800,13 @@ sh_frob_section (abfd, sec, ignore)
|
|||
info.sym = sym;
|
||||
info.count = 0;
|
||||
#ifdef BFD_ASSEMBLER
|
||||
bfd_map_over_sections (stdoutput, sh_count_relocs, (PTR) &info);
|
||||
bfd_map_over_sections (stdoutput, sh_count_relocs, &info);
|
||||
#else
|
||||
{
|
||||
int iscan;
|
||||
|
||||
for (iscan = SEG_E0; iscan < SEG_UNKNOWN; iscan++)
|
||||
sh_count_relocs ((bfd *) NULL, iscan, (PTR) &info);
|
||||
sh_count_relocs ((bfd *) NULL, iscan, &info);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -2911,7 +2834,7 @@ sh_frob_section (abfd, sec, ignore)
|
|||
the stored function address entirely. */
|
||||
|
||||
void
|
||||
sh_frob_file ()
|
||||
sh_frob_file (void)
|
||||
{
|
||||
#ifdef HAVE_SH64
|
||||
shmedia_frob_file_before_adjust ();
|
||||
|
@ -2921,13 +2844,13 @@ sh_frob_file ()
|
|||
return;
|
||||
|
||||
#ifdef BFD_ASSEMBLER
|
||||
bfd_map_over_sections (stdoutput, sh_frob_section, (PTR) NULL);
|
||||
bfd_map_over_sections (stdoutput, sh_frob_section, NULL);
|
||||
#else
|
||||
{
|
||||
int iseg;
|
||||
|
||||
for (iseg = SEG_E0; iseg < SEG_UNKNOWN; iseg++)
|
||||
sh_frob_section ((bfd *) NULL, iseg, (PTR) NULL);
|
||||
sh_frob_section ((bfd *) NULL, iseg, NULL);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -2936,14 +2859,12 @@ sh_frob_file ()
|
|||
create relocs so that md_apply_fix3 will fill in the correct values. */
|
||||
|
||||
void
|
||||
md_convert_frag (headers, seg, fragP)
|
||||
#ifdef BFD_ASSEMBLER
|
||||
bfd *headers ATTRIBUTE_UNUSED;
|
||||
md_convert_frag (bfd *headers ATTRIBUTE_UNUSED, segT seg, fragS *fragP)
|
||||
#else
|
||||
object_headers *headers ATTRIBUTE_UNUSED;
|
||||
md_convert_frag (object_headers *headers ATTRIBUTE_UNUSED, segT seg,
|
||||
fragS *fragP)
|
||||
#endif
|
||||
segT seg;
|
||||
fragS *fragP;
|
||||
{
|
||||
int donerelax = 0;
|
||||
|
||||
|
@ -3086,9 +3007,7 @@ md_convert_frag (headers, seg, fragP)
|
|||
}
|
||||
|
||||
valueT
|
||||
md_section_align (seg, size)
|
||||
segT seg ATTRIBUTE_UNUSED;
|
||||
valueT size;
|
||||
md_section_align (segT seg ATTRIBUTE_UNUSED, valueT size)
|
||||
{
|
||||
#ifdef BFD_ASSEMBLER
|
||||
#ifdef OBJ_ELF
|
||||
|
@ -3113,8 +3032,7 @@ static int sh_no_align_cons = 0;
|
|||
to be aligned. */
|
||||
|
||||
static void
|
||||
s_uacons (bytes)
|
||||
int bytes;
|
||||
s_uacons (int bytes)
|
||||
{
|
||||
/* Tell sh_cons_align not to align this value. */
|
||||
sh_no_align_cons = 1;
|
||||
|
@ -3128,8 +3046,7 @@ s_uacons (bytes)
|
|||
enable this warning? */
|
||||
|
||||
void
|
||||
sh_cons_align (nbytes)
|
||||
int nbytes;
|
||||
sh_cons_align (int nbytes)
|
||||
{
|
||||
int nalign;
|
||||
char *p;
|
||||
|
@ -3169,8 +3086,7 @@ sh_cons_align (nbytes)
|
|||
also where we check for misaligned data. */
|
||||
|
||||
void
|
||||
sh_handle_align (frag)
|
||||
fragS *frag;
|
||||
sh_handle_align (fragS *frag)
|
||||
{
|
||||
int bytes = frag->fr_next->fr_address - frag->fr_address - frag->fr_fix;
|
||||
|
||||
|
@ -3218,8 +3134,7 @@ sh_handle_align (frag)
|
|||
/* See whether the relocation should be resolved locally. */
|
||||
|
||||
static bfd_boolean
|
||||
sh_local_pcrel (fix)
|
||||
fixS *fix;
|
||||
sh_local_pcrel (fixS *fix)
|
||||
{
|
||||
return (! sh_relax
|
||||
&& (fix->fx_r_type == BFD_RELOC_SH_PCDISP8BY2
|
||||
|
@ -3236,8 +3151,7 @@ sh_local_pcrel (fix)
|
|||
relaxing. */
|
||||
|
||||
int
|
||||
sh_force_relocation (fix)
|
||||
fixS *fix;
|
||||
sh_force_relocation (fixS *fix)
|
||||
{
|
||||
/* These relocations can't make it into a DSO, so no use forcing
|
||||
them for global symbols. */
|
||||
|
@ -3272,8 +3186,7 @@ sh_force_relocation (fix)
|
|||
|
||||
#ifdef OBJ_ELF
|
||||
bfd_boolean
|
||||
sh_fix_adjustable (fixP)
|
||||
fixS *fixP;
|
||||
sh_fix_adjustable (fixS *fixP)
|
||||
{
|
||||
if (fixP->fx_r_type == BFD_RELOC_32_PLT_PCREL
|
||||
|| fixP->fx_r_type == BFD_RELOC_32_GOT_PCREL
|
||||
|
@ -3290,7 +3203,7 @@ sh_fix_adjustable (fixP)
|
|||
}
|
||||
|
||||
void
|
||||
sh_elf_final_processing ()
|
||||
sh_elf_final_processing (void)
|
||||
{
|
||||
int val;
|
||||
|
||||
|
@ -3330,10 +3243,7 @@ sh_elf_final_processing ()
|
|||
/* Apply a fixup to the object file. */
|
||||
|
||||
void
|
||||
md_apply_fix3 (fixP, valP, seg)
|
||||
fixS * fixP;
|
||||
valueT * valP;
|
||||
segT seg ATTRIBUTE_UNUSED;
|
||||
md_apply_fix3 (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
|
||||
{
|
||||
char *buf = fixP->fx_where + fixP->fx_frag->fr_literal;
|
||||
int lowbyte = target_big_endian ? 1 : 0;
|
||||
|
@ -3606,9 +3516,7 @@ md_apply_fix3 (fixP, valP, seg)
|
|||
by which a fragment must grow to reach it's destination. */
|
||||
|
||||
int
|
||||
md_estimate_size_before_relax (fragP, segment_type)
|
||||
register fragS *fragP;
|
||||
register segT segment_type;
|
||||
md_estimate_size_before_relax (fragS *fragP, segT segment_type)
|
||||
{
|
||||
int what;
|
||||
|
||||
|
@ -3684,10 +3592,7 @@ md_estimate_size_before_relax (fragP, segment_type)
|
|||
/* Put number into target byte order. */
|
||||
|
||||
void
|
||||
md_number_to_chars (ptr, use, nbytes)
|
||||
char *ptr;
|
||||
valueT use;
|
||||
int nbytes;
|
||||
md_number_to_chars (char *ptr, valueT use, int nbytes)
|
||||
{
|
||||
#ifdef HAVE_SH64
|
||||
/* We might need to set the contents type to data. */
|
||||
|
@ -3704,16 +3609,13 @@ md_number_to_chars (ptr, use, nbytes)
|
|||
eg for the sh-hms target. */
|
||||
|
||||
long
|
||||
md_pcrel_from (fixP)
|
||||
fixS *fixP;
|
||||
md_pcrel_from (fixS *fixP)
|
||||
{
|
||||
return fixP->fx_size + fixP->fx_where + fixP->fx_frag->fr_address + 2;
|
||||
}
|
||||
|
||||
long
|
||||
md_pcrel_from_section (fixP, sec)
|
||||
fixS *fixP;
|
||||
segT sec;
|
||||
md_pcrel_from_section (fixS *fixP, segT sec)
|
||||
{
|
||||
if (! sh_local_pcrel (fixP)
|
||||
&& fixP->fx_addsy != (symbolS *) NULL
|
||||
|
@ -3733,8 +3635,7 @@ md_pcrel_from_section (fixP, sec)
|
|||
#ifdef OBJ_COFF
|
||||
|
||||
int
|
||||
tc_coff_sizemachdep (frag)
|
||||
fragS *frag;
|
||||
tc_coff_sizemachdep (fragS *frag)
|
||||
{
|
||||
return md_relax_table[frag->fr_subtype].rlx_length;
|
||||
}
|
||||
|
@ -3783,11 +3684,8 @@ static const struct reloc_map coff_reloc_map[] =
|
|||
but does some minor tweaking. */
|
||||
|
||||
void
|
||||
sh_coff_reloc_mangle (seg, fix, intr, paddr)
|
||||
segment_info_type *seg;
|
||||
fixS *fix;
|
||||
struct internal_reloc *intr;
|
||||
unsigned int paddr;
|
||||
sh_coff_reloc_mangle (segment_info_type *seg, fixS *fix,
|
||||
struct internal_reloc *intr, unsigned int paddr)
|
||||
{
|
||||
symbolS *symbol_ptr = fix->fx_addsy;
|
||||
symbolS *dot;
|
||||
|
@ -3898,9 +3796,7 @@ sh_coff_reloc_mangle (seg, fix, intr, paddr)
|
|||
/* Create a reloc. */
|
||||
|
||||
arelent *
|
||||
tc_gen_reloc (section, fixp)
|
||||
asection *section ATTRIBUTE_UNUSED;
|
||||
fixS *fixp;
|
||||
tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, fixS *fixp)
|
||||
{
|
||||
arelent *rel;
|
||||
bfd_reloc_code_real_type r_type;
|
||||
|
@ -3973,8 +3869,7 @@ tc_gen_reloc (section, fixp)
|
|||
|
||||
#ifdef OBJ_ELF
|
||||
inline static char *
|
||||
sh_end_of_match (cont, what)
|
||||
char *cont, *what;
|
||||
sh_end_of_match (char *cont, char *what)
|
||||
{
|
||||
int len = strlen (what);
|
||||
|
||||
|
@ -3986,10 +3881,7 @@ sh_end_of_match (cont, what)
|
|||
}
|
||||
|
||||
int
|
||||
sh_parse_name (name, exprP, nextcharP)
|
||||
char const *name;
|
||||
expressionS *exprP;
|
||||
char *nextcharP;
|
||||
sh_parse_name (char const *name, expressionS *exprP, char *nextcharP)
|
||||
{
|
||||
char *next = input_line_pointer;
|
||||
char *next_end;
|
||||
|
|
|
@ -47,18 +47,18 @@ extern int sh_small;
|
|||
|
||||
/* We require .long, et. al., to be aligned correctly. */
|
||||
#define md_cons_align(nbytes) sh_cons_align (nbytes)
|
||||
extern void sh_cons_align PARAMS ((int));
|
||||
extern void sh_cons_align (int);
|
||||
|
||||
/* When relaxing, we need to generate relocations for alignment
|
||||
directives. */
|
||||
#define HANDLE_ALIGN(frag) sh_handle_align (frag)
|
||||
extern void sh_handle_align PARAMS ((fragS *));
|
||||
extern void sh_handle_align (fragS *);
|
||||
|
||||
#define MAX_MEM_FOR_RS_ALIGN_CODE (1 + 2)
|
||||
|
||||
/* We need to force out some relocations when relaxing. */
|
||||
#define TC_FORCE_RELOCATION(fix) sh_force_relocation (fix)
|
||||
extern int sh_force_relocation PARAMS ((struct fix *));
|
||||
extern int sh_force_relocation (struct fix *);
|
||||
|
||||
/* This macro decides whether a particular reloc is an entry in a
|
||||
switch table. It is used when relaxing, because the linker needs
|
||||
|
@ -95,7 +95,7 @@ extern int sh_force_relocation PARAMS ((struct fix *));
|
|||
(sh_relax && SWITCH_TABLE (FIX))
|
||||
|
||||
#define MD_PCREL_FROM_SECTION(FIX, SEC) md_pcrel_from_section (FIX, SEC)
|
||||
extern long md_pcrel_from_section PARAMS ((struct fix *, segT));
|
||||
extern long md_pcrel_from_section (struct fix *, segT);
|
||||
|
||||
#define IGNORE_NONSTANDARD_ESCAPES
|
||||
|
||||
|
@ -119,12 +119,12 @@ struct sh_segment_info_type
|
|||
|
||||
/* We call a routine to emit a reloc for a label, so that the linker
|
||||
can align loads and stores without crossing a label. */
|
||||
extern void sh_frob_label PARAMS ((void));
|
||||
extern void sh_frob_label (void);
|
||||
#define tc_frob_label(sym) sh_frob_label ()
|
||||
|
||||
/* We call a routine to flush pending output in order to output a DATA
|
||||
reloc when required. */
|
||||
extern void sh_flush_pending_output PARAMS ((void));
|
||||
extern void sh_flush_pending_output (void);
|
||||
#define md_flush_pending_output() sh_flush_pending_output ()
|
||||
|
||||
#ifdef BFD_ASSEMBLER
|
||||
|
@ -132,7 +132,7 @@ extern void sh_flush_pending_output PARAMS ((void));
|
|||
#else
|
||||
#define tc_frob_file sh_frob_file
|
||||
#endif
|
||||
extern void sh_frob_file PARAMS ((void));
|
||||
extern void sh_frob_file (void);
|
||||
|
||||
|
||||
#ifdef OBJ_COFF
|
||||
|
@ -153,8 +153,8 @@ extern void sh_frob_file PARAMS ((void));
|
|||
#define TC_RELOC_MANGLE(seg, fix, int, paddr) \
|
||||
sh_coff_reloc_mangle ((seg), (fix), (int), (paddr))
|
||||
extern void sh_coff_reloc_mangle
|
||||
PARAMS ((struct segment_info_struct *, struct fix *,
|
||||
struct internal_reloc *, unsigned int));
|
||||
(struct segment_info_struct *, struct fix *,
|
||||
struct internal_reloc *, unsigned int));
|
||||
|
||||
#define tc_coff_symbol_emit_hook(a) ; /* not used */
|
||||
|
||||
|
@ -163,7 +163,7 @@ extern void sh_coff_reloc_mangle
|
|||
#define TC_KEEP_FX_OFFSET 1
|
||||
|
||||
#define TC_COFF_SIZEMACHDEP(frag) tc_coff_sizemachdep(frag)
|
||||
extern int tc_coff_sizemachdep PARAMS ((fragS *));
|
||||
extern int tc_coff_sizemachdep (fragS *);
|
||||
|
||||
#ifdef BFD_ASSEMBLER
|
||||
#define SEG_NAME(SEG) segment_name (SEG)
|
||||
|
@ -197,7 +197,7 @@ extern int target_big_endian;
|
|||
#endif
|
||||
|
||||
#define elf_tc_final_processing sh_elf_final_processing
|
||||
extern void sh_elf_final_processing PARAMS ((void));
|
||||
extern void sh_elf_final_processing (void);
|
||||
|
||||
#define DIFF_EXPR_OK /* foo-. gets turned into PC relative relocs */
|
||||
|
||||
|
@ -213,7 +213,7 @@ extern void sh_elf_final_processing PARAMS ((void));
|
|||
#define TC_RELOC_GLOBAL_OFFSET_TABLE BFD_RELOC_SH_GOTPC
|
||||
|
||||
#define tc_fix_adjustable(FIX) sh_fix_adjustable(FIX)
|
||||
extern bfd_boolean sh_fix_adjustable PARAMS ((struct fix *));
|
||||
extern bfd_boolean sh_fix_adjustable (struct fix *);
|
||||
|
||||
/* Values passed to md_apply_fix3 don't include symbol values. */
|
||||
#define MD_APPLY_SYM_VALUE(FIX) 0
|
||||
|
@ -251,13 +251,11 @@ extern bfd_boolean sh_fix_adjustable PARAMS ((struct fix *));
|
|||
|
||||
#define md_parse_name(name, exprP, nextcharP) \
|
||||
sh_parse_name ((name), (exprP), (nextcharP))
|
||||
int sh_parse_name PARAMS ((char const *name,
|
||||
expressionS *exprP,
|
||||
char *nextchar));
|
||||
int sh_parse_name (char const *name, expressionS *exprP, char *nextchar);
|
||||
|
||||
#define TC_CONS_FIX_NEW(FRAG, OFF, LEN, EXP) \
|
||||
sh_cons_fix_new ((FRAG), (OFF), (LEN), (EXP))
|
||||
void sh_cons_fix_new PARAMS ((fragS *, int, int, expressionS *));
|
||||
void sh_cons_fix_new (fragS *, int, int, expressionS *);
|
||||
|
||||
/* This is used to construct expressions out of @GOTOFF, @PLT and @GOT
|
||||
symbols. The relocation type is stored in X_md. */
|
||||
|
|
|
@ -133,63 +133,43 @@ static const unsigned char shmedia_little_nop_pattern[4] =
|
|||
(SHMEDIA_NOP_OPC >> 16) & 255, (SHMEDIA_NOP_OPC >> 24) & 255
|
||||
};
|
||||
|
||||
static void shmedia_md_begin
|
||||
PARAMS ((void));
|
||||
static int shmedia_parse_reg
|
||||
PARAMS ((char *, int *, int *, shmedia_arg_type));
|
||||
static void shmedia_md_assemble
|
||||
PARAMS ((char *));
|
||||
static void shmedia_md_apply_fix3
|
||||
PARAMS ((fixS *, valueT *));
|
||||
static int shmedia_md_estimate_size_before_relax
|
||||
PARAMS ((fragS *, segT));
|
||||
static int shmedia_init_reloc
|
||||
PARAMS ((arelent *, fixS *));
|
||||
static char *shmedia_get_operands
|
||||
PARAMS ((shmedia_opcode_info *, char *, shmedia_operands_info *));
|
||||
static void s_sh64_mode
|
||||
PARAMS ((int));
|
||||
static void s_sh64_abi
|
||||
PARAMS ((int));
|
||||
static void shmedia_md_convert_frag
|
||||
PARAMS ((bfd *, segT, fragS *, bfd_boolean));
|
||||
static void shmedia_check_limits
|
||||
PARAMS ((offsetT *, bfd_reloc_code_real_type, fixS *));
|
||||
static void sh64_set_contents_type
|
||||
PARAMS ((enum sh64_elf_cr_type));
|
||||
static void shmedia_get_operand
|
||||
PARAMS ((char **, shmedia_operand_info *, shmedia_arg_type));
|
||||
static unsigned long shmedia_immediate_op
|
||||
PARAMS ((char *, shmedia_operand_info *, int, bfd_reloc_code_real_type));
|
||||
static char *shmedia_parse_exp
|
||||
PARAMS ((char *, shmedia_operand_info *));
|
||||
static void shmedia_frob_file_before_adjust
|
||||
PARAMS ((void));
|
||||
static void sh64_emit_crange
|
||||
PARAMS ((symbolS *, symbolS *, enum sh64_elf_cr_type));
|
||||
static void sh64_flush_last_crange
|
||||
PARAMS ((bfd *, asection *, PTR));
|
||||
static void sh64_flag_output
|
||||
PARAMS ((void));
|
||||
static void sh64_update_contents_mark
|
||||
PARAMS ((bfd_boolean));
|
||||
static void sh64_vtable_entry
|
||||
PARAMS ((int));
|
||||
static void sh64_vtable_inherit
|
||||
PARAMS ((int));
|
||||
static char * strip_datalabels
|
||||
PARAMS ((void));
|
||||
static int shmedia_build_Mytes
|
||||
PARAMS ((shmedia_opcode_info *, shmedia_operands_info *));
|
||||
static shmedia_opcode_info * shmedia_find_cooked_opcode
|
||||
PARAMS ((char **));
|
||||
static unsigned long shmedia_mask_number
|
||||
PARAMS ((unsigned long, bfd_reloc_code_real_type));
|
||||
static void shmedia_md_begin (void);
|
||||
static int shmedia_parse_reg (char *, int *, int *, shmedia_arg_type);
|
||||
static void shmedia_md_assemble (char *);
|
||||
static void shmedia_md_apply_fix3 (fixS *, valueT *);
|
||||
static int shmedia_md_estimate_size_before_relax (fragS *, segT);
|
||||
static int shmedia_init_reloc (arelent *, fixS *);
|
||||
static char *shmedia_get_operands (shmedia_opcode_info *, char *,
|
||||
shmedia_operands_info *);
|
||||
static void s_sh64_mode (int);
|
||||
static void s_sh64_abi (int);
|
||||
static void shmedia_md_convert_frag (bfd *, segT, fragS *, bfd_boolean);
|
||||
static void shmedia_check_limits (offsetT *, bfd_reloc_code_real_type,
|
||||
fixS *);
|
||||
static void sh64_set_contents_type (enum sh64_elf_cr_type);
|
||||
static void shmedia_get_operand (char **, shmedia_operand_info *,
|
||||
shmedia_arg_type);
|
||||
static unsigned long shmedia_immediate_op (char *, shmedia_operand_info *,
|
||||
int, bfd_reloc_code_real_type);
|
||||
static char *shmedia_parse_exp (char *, shmedia_operand_info *);
|
||||
static void shmedia_frob_file_before_adjust (void);
|
||||
static void sh64_emit_crange (symbolS *, symbolS *, enum sh64_elf_cr_type);
|
||||
static void sh64_flush_last_crange (bfd *, asection *, void *);
|
||||
static void sh64_flag_output (void);
|
||||
static void sh64_update_contents_mark (bfd_boolean);
|
||||
static void sh64_vtable_entry (int);
|
||||
static void sh64_vtable_inherit (int);
|
||||
static char *strip_datalabels (void);
|
||||
static int shmedia_build_Mytes (shmedia_opcode_info *,
|
||||
shmedia_operands_info *);
|
||||
static shmedia_opcode_info *shmedia_find_cooked_opcode (char **);
|
||||
static unsigned long shmedia_mask_number (unsigned long,
|
||||
bfd_reloc_code_real_type);
|
||||
|
||||
#include "tc-sh.c"
|
||||
|
||||
void
|
||||
shmedia_md_end ()
|
||||
shmedia_md_end (void)
|
||||
{
|
||||
symbolS *symp;
|
||||
|
||||
|
@ -295,7 +275,7 @@ shmedia_md_end ()
|
|||
+ offset" value. */
|
||||
|
||||
static void
|
||||
shmedia_frob_file_before_adjust ()
|
||||
shmedia_frob_file_before_adjust (void)
|
||||
{
|
||||
symbolS *symp;
|
||||
for (symp = symbol_rootP; symp != NULL; symp = symp->sy_next)
|
||||
|
@ -334,11 +314,7 @@ shmedia_frob_file_before_adjust ()
|
|||
static in read.c. That solution was discarded a too kludgy. */
|
||||
|
||||
void
|
||||
sh64_do_align (n, fill, len, max)
|
||||
int n;
|
||||
const char *fill;
|
||||
int len;
|
||||
int max;
|
||||
sh64_do_align (int n, const char *fill, int len, int max)
|
||||
{
|
||||
/* Update region, or put a data region in front. */
|
||||
sh64_update_contents_mark (TRUE);
|
||||
|
@ -371,7 +347,7 @@ sh64_do_align (n, fill, len, max)
|
|||
assembly). */
|
||||
|
||||
int
|
||||
sh64_max_mem_for_rs_align_code ()
|
||||
sh64_max_mem_for_rs_align_code (void)
|
||||
{
|
||||
segment_info_type *seginfo;
|
||||
fragS *mode_start_frag;
|
||||
|
@ -403,8 +379,7 @@ sh64_max_mem_for_rs_align_code ()
|
|||
/* Put in SHmedia NOP:s if the alignment was created when in SHmedia mode. */
|
||||
|
||||
void
|
||||
sh64_handle_align (frag)
|
||||
fragS * frag;
|
||||
sh64_handle_align (fragS * frag)
|
||||
{
|
||||
int bytes = frag->fr_next->fr_address - frag->fr_address - frag->fr_fix;
|
||||
char * p = frag->fr_literal + frag->fr_fix;
|
||||
|
@ -440,8 +415,7 @@ sh64_handle_align (frag)
|
|||
/* Set SEC_SH64_ISA32 for SHmedia sections. */
|
||||
|
||||
void
|
||||
shmedia_frob_section_type (sec)
|
||||
asection *sec;
|
||||
shmedia_frob_section_type (asection *sec)
|
||||
{
|
||||
segment_info_type *seginfo;
|
||||
seginfo = seg_info (sec);
|
||||
|
@ -486,7 +460,7 @@ shmedia_frob_section_type (sec)
|
|||
seems too much for little benefit. */
|
||||
|
||||
void
|
||||
sh64_adjust_symtab ()
|
||||
sh64_adjust_symtab (void)
|
||||
{
|
||||
symbolS *symp;
|
||||
|
||||
|
@ -534,9 +508,7 @@ sh64_adjust_symtab ()
|
|||
/* Fill-in an allocated arelent. */
|
||||
|
||||
static int
|
||||
shmedia_init_reloc (rel, fixP)
|
||||
arelent *rel;
|
||||
fixS *fixP;
|
||||
shmedia_init_reloc (arelent *rel, fixS *fixP)
|
||||
{
|
||||
/* Adjust parts of *relp according to *fixp, and tell that it has been
|
||||
done, so default initializations will not happen. */
|
||||
|
@ -608,9 +580,7 @@ shmedia_init_reloc (rel, fixP)
|
|||
/* Hook called from md_apply_fix3 in tc-sh.c. */
|
||||
|
||||
static void
|
||||
shmedia_md_apply_fix3 (fixP, valp)
|
||||
fixS *fixP;
|
||||
valueT *valp;
|
||||
shmedia_md_apply_fix3 (fixS *fixP, valueT *valp)
|
||||
{
|
||||
offsetT val = *valp;
|
||||
char *buf = fixP->fx_where + fixP->fx_frag->fr_literal;
|
||||
|
@ -823,11 +793,9 @@ shmedia_md_apply_fix3 (fixP, valp)
|
|||
/* Hook called from md_convert_frag in tc-sh.c. */
|
||||
|
||||
static void
|
||||
shmedia_md_convert_frag (output_bfd, seg, fragP, final)
|
||||
bfd *output_bfd ATTRIBUTE_UNUSED;
|
||||
segT seg ATTRIBUTE_UNUSED;
|
||||
fragS *fragP;
|
||||
bfd_boolean final;
|
||||
shmedia_md_convert_frag (bfd *output_bfd ATTRIBUTE_UNUSED,
|
||||
segT seg ATTRIBUTE_UNUSED, fragS *fragP,
|
||||
bfd_boolean final)
|
||||
{
|
||||
/* Pointer to first byte in variable-sized part of the frag. */
|
||||
char *var_partp;
|
||||
|
@ -1447,9 +1415,7 @@ shmedia_md_convert_frag (output_bfd, seg, fragP, final)
|
|||
reloc. */
|
||||
|
||||
static unsigned long
|
||||
shmedia_mask_number (number, how)
|
||||
unsigned long number;
|
||||
bfd_reloc_code_real_type how;
|
||||
shmedia_mask_number (unsigned long number, bfd_reloc_code_real_type how)
|
||||
{
|
||||
switch (how)
|
||||
{
|
||||
|
@ -1498,10 +1464,8 @@ shmedia_mask_number (number, how)
|
|||
non-NULL, as_bad otherwise. */
|
||||
|
||||
static void
|
||||
shmedia_check_limits (valp, reloc, fixp)
|
||||
offsetT *valp;
|
||||
bfd_reloc_code_real_type reloc;
|
||||
fixS *fixp;
|
||||
shmedia_check_limits (offsetT *valp, bfd_reloc_code_real_type reloc,
|
||||
fixS *fixp)
|
||||
{
|
||||
offsetT val = *valp;
|
||||
|
||||
|
@ -1611,11 +1575,8 @@ shmedia_check_limits (valp, reloc, fixp)
|
|||
"or" into the opcode (non-zero if the value was a constant number). */
|
||||
|
||||
static unsigned long
|
||||
shmedia_immediate_op (where, op, pcrel, how)
|
||||
char *where;
|
||||
shmedia_operand_info *op;
|
||||
int pcrel;
|
||||
bfd_reloc_code_real_type how;
|
||||
shmedia_immediate_op (char *where, shmedia_operand_info *op, int pcrel,
|
||||
bfd_reloc_code_real_type how)
|
||||
{
|
||||
unsigned long retval = 0;
|
||||
|
||||
|
@ -1646,11 +1607,7 @@ shmedia_immediate_op (where, op, pcrel, how)
|
|||
chars consumed. */
|
||||
|
||||
static int
|
||||
shmedia_parse_reg (src, mode, reg, argtype)
|
||||
char *src;
|
||||
int *mode;
|
||||
int *reg;
|
||||
shmedia_arg_type argtype;
|
||||
shmedia_parse_reg (char *src, int *mode, int *reg, shmedia_arg_type argtype)
|
||||
{
|
||||
int l0 = TOLOWER (src[0]);
|
||||
int l1 = l0 ? TOLOWER (src[1]) : 0;
|
||||
|
@ -1933,9 +1890,8 @@ shmedia_parse_reg (src, mode, reg, argtype)
|
|||
/* Called from md_estimate_size_before_relax in tc-sh.c */
|
||||
|
||||
static int
|
||||
shmedia_md_estimate_size_before_relax (fragP, segment_type)
|
||||
fragS *fragP;
|
||||
segT segment_type ATTRIBUTE_UNUSED;
|
||||
shmedia_md_estimate_size_before_relax (fragS *fragP,
|
||||
segT segment_type ATTRIBUTE_UNUSED)
|
||||
{
|
||||
int old_fr_fix;
|
||||
expressionS *exp;
|
||||
|
@ -2240,9 +2196,7 @@ shmedia_md_estimate_size_before_relax (fragP, segment_type)
|
|||
datatypes adjusted. */
|
||||
|
||||
static char *
|
||||
shmedia_parse_exp (s, op)
|
||||
char *s;
|
||||
shmedia_operand_info *op;
|
||||
shmedia_parse_exp (char *s, shmedia_operand_info *op)
|
||||
{
|
||||
char *save;
|
||||
char *new;
|
||||
|
@ -2260,10 +2214,8 @@ shmedia_parse_exp (s, op)
|
|||
/* Parse an operand. Store pointer to next character in *PTR. */
|
||||
|
||||
static void
|
||||
shmedia_get_operand (ptr, op, argtype)
|
||||
char **ptr;
|
||||
shmedia_operand_info *op;
|
||||
shmedia_arg_type argtype;
|
||||
shmedia_get_operand (char **ptr, shmedia_operand_info *op,
|
||||
shmedia_arg_type argtype)
|
||||
{
|
||||
char *src = *ptr;
|
||||
int mode = -1;
|
||||
|
@ -2291,10 +2243,8 @@ shmedia_get_operand (ptr, op, argtype)
|
|||
how much text was consumed. */
|
||||
|
||||
static char *
|
||||
shmedia_get_operands (info, args, operands)
|
||||
shmedia_opcode_info *info;
|
||||
char *args;
|
||||
shmedia_operands_info *operands;
|
||||
shmedia_get_operands (shmedia_opcode_info *info, char *args,
|
||||
shmedia_operands_info *operands)
|
||||
{
|
||||
char *ptr = args;
|
||||
int i;
|
||||
|
@ -2484,8 +2434,7 @@ shmedia_get_operands (info, args, operands)
|
|||
*STR_P to the first character after the last one read. */
|
||||
|
||||
static shmedia_opcode_info *
|
||||
shmedia_find_cooked_opcode (str_p)
|
||||
char **str_p;
|
||||
shmedia_find_cooked_opcode (char **str_p)
|
||||
{
|
||||
char *str = *str_p;
|
||||
char *op_start;
|
||||
|
@ -2530,9 +2479,8 @@ shmedia_find_cooked_opcode (str_p)
|
|||
/* Build up an instruction, including allocating the frag. */
|
||||
|
||||
static int
|
||||
shmedia_build_Mytes (opcode, operands)
|
||||
shmedia_opcode_info *opcode;
|
||||
shmedia_operands_info *operands;
|
||||
shmedia_build_Mytes (shmedia_opcode_info *opcode,
|
||||
shmedia_operands_info *operands)
|
||||
{
|
||||
unsigned long insn = opcode->opcode_base;
|
||||
int i, j;
|
||||
|
@ -2821,8 +2769,7 @@ shmedia_build_Mytes (opcode, operands)
|
|||
/* Assemble a SHmedia instruction. */
|
||||
|
||||
static void
|
||||
shmedia_md_assemble (str)
|
||||
char *str;
|
||||
shmedia_md_assemble (char *str)
|
||||
{
|
||||
char *op_end;
|
||||
shmedia_opcode_info *opcode;
|
||||
|
@ -2869,7 +2816,7 @@ shmedia_md_assemble (str)
|
|||
/* Hook called from md_begin in tc-sh.c. */
|
||||
|
||||
void
|
||||
shmedia_md_begin ()
|
||||
shmedia_md_begin (void)
|
||||
{
|
||||
const shmedia_opcode_info *shmedia_opcode;
|
||||
shmedia_opcode_hash_control = hash_new ();
|
||||
|
@ -2886,8 +2833,7 @@ shmedia_md_begin ()
|
|||
options was specified. */
|
||||
|
||||
static void
|
||||
s_sh64_mode (ignore)
|
||||
int ignore ATTRIBUTE_UNUSED;
|
||||
s_sh64_mode (int ignore ATTRIBUTE_UNUSED)
|
||||
{
|
||||
char *name = input_line_pointer, ch;
|
||||
|
||||
|
@ -2929,8 +2875,7 @@ s_sh64_mode (ignore)
|
|||
--abi options was specified. */
|
||||
|
||||
static void
|
||||
s_sh64_abi (ignore)
|
||||
int ignore ATTRIBUTE_UNUSED;
|
||||
s_sh64_abi (int ignore ATTRIBUTE_UNUSED)
|
||||
{
|
||||
char *name = input_line_pointer, ch;
|
||||
|
||||
|
@ -2968,7 +2913,7 @@ s_sh64_abi (ignore)
|
|||
when options were being parsed. */
|
||||
|
||||
const char *
|
||||
sh64_target_format ()
|
||||
sh64_target_format (void)
|
||||
{
|
||||
#ifdef TE_NetBSD
|
||||
/* For NetBSD, if the ISA is unspecified, always use SHmedia. */
|
||||
|
@ -3052,7 +2997,7 @@ sh64_target_format ()
|
|||
/* The worker function of TARGET_MACH. */
|
||||
|
||||
int
|
||||
sh64_target_mach ()
|
||||
sh64_target_mach (void)
|
||||
{
|
||||
/* We need to explicitly set bfd_mach_sh5 instead of the default 0. But
|
||||
we only do this for the 64-bit ABI: if we do it for the 32-bit ABI,
|
||||
|
@ -3077,9 +3022,7 @@ sh64_target_mach ()
|
|||
md_pcrel_from (in tc-sh.c). */
|
||||
|
||||
valueT
|
||||
shmedia_md_pcrel_from_section (fixP, sec)
|
||||
struct fix *fixP;
|
||||
segT sec ATTRIBUTE_UNUSED;
|
||||
shmedia_md_pcrel_from_section (struct fix *fixP, segT sec ATTRIBUTE_UNUSED)
|
||||
{
|
||||
know (fixP->fx_frag->fr_type == rs_machine_dependent);
|
||||
|
||||
|
@ -3128,10 +3071,8 @@ shmedia_md_pcrel_from_section (fixP, sec)
|
|||
and ENDSYM marking end, and CR_TYPE specifying the type. */
|
||||
|
||||
static void
|
||||
sh64_emit_crange (startsym, endsym, cr_type)
|
||||
symbolS *startsym;
|
||||
symbolS *endsym;
|
||||
enum sh64_elf_cr_type cr_type;
|
||||
sh64_emit_crange (symbolS *startsym, symbolS *endsym,
|
||||
enum sh64_elf_cr_type cr_type)
|
||||
{
|
||||
expressionS exp;
|
||||
segT current_seg = now_seg;
|
||||
|
@ -3176,8 +3117,7 @@ sh64_emit_crange (startsym, endsym, cr_type)
|
|||
function isn't called. */
|
||||
|
||||
static void
|
||||
sh64_set_contents_type (new_contents_type)
|
||||
enum sh64_elf_cr_type new_contents_type;
|
||||
sh64_set_contents_type (enum sh64_elf_cr_type new_contents_type)
|
||||
{
|
||||
segment_info_type *seginfo;
|
||||
|
||||
|
@ -3275,8 +3215,7 @@ _("SHmedia code not allowed in same section as constants and SHcompact code"));
|
|||
doesn't matter whether or not an assembled opcode is nearby. */
|
||||
|
||||
void
|
||||
sh64_frob_label (symp)
|
||||
symbolS *symp;
|
||||
sh64_frob_label (symbolS *symp)
|
||||
{
|
||||
segT seg = S_GET_SEGMENT (symp);
|
||||
static const symbolS *null = NULL;
|
||||
|
@ -3294,11 +3233,8 @@ sh64_frob_label (symp)
|
|||
symbol hook. */
|
||||
|
||||
int
|
||||
sh64_consume_datalabel (name, exp, cp, operandf)
|
||||
const char *name;
|
||||
expressionS *exp;
|
||||
char *cp;
|
||||
segT (*operandf) PARAMS ((expressionS *));
|
||||
sh64_consume_datalabel (const char *name, expressionS *exp, char *cp,
|
||||
segT (*operandf) (expressionS *))
|
||||
{
|
||||
static int parsing_datalabel = 0;
|
||||
|
||||
|
@ -3397,8 +3333,7 @@ sh64_consume_datalabel (name, exp, cp, operandf)
|
|||
then we need not output the main symbol. */
|
||||
|
||||
int
|
||||
sh64_exclude_symbol (symp)
|
||||
symbolS *symp;
|
||||
sh64_exclude_symbol (symbolS *symp)
|
||||
{
|
||||
symbolS *main_symbol = *symbol_get_tc (symp);
|
||||
|
||||
|
@ -3412,8 +3347,7 @@ sh64_exclude_symbol (symp)
|
|||
a new region if needed. */
|
||||
|
||||
static void
|
||||
sh64_update_contents_mark (update_type)
|
||||
bfd_boolean update_type;
|
||||
sh64_update_contents_mark (bfd_boolean update_type)
|
||||
{
|
||||
segment_info_type *seginfo;
|
||||
seginfo = seg_info (now_seg);
|
||||
|
@ -3466,7 +3400,7 @@ sh64_update_contents_mark (update_type)
|
|||
just switching segments. */
|
||||
|
||||
void
|
||||
sh64_flush_pending_output ()
|
||||
sh64_flush_pending_output (void)
|
||||
{
|
||||
sh64_update_contents_mark (TRUE);
|
||||
sh_flush_pending_output ();
|
||||
|
@ -3475,10 +3409,8 @@ sh64_flush_pending_output ()
|
|||
/* Flush out the last crange descriptor after all insns have been emitted. */
|
||||
|
||||
static void
|
||||
sh64_flush_last_crange (abfd, seg, countparg)
|
||||
bfd *abfd ATTRIBUTE_UNUSED;
|
||||
asection *seg;
|
||||
PTR countparg ATTRIBUTE_UNUSED;
|
||||
sh64_flush_last_crange (bfd *abfd ATTRIBUTE_UNUSED, asection *seg,
|
||||
void *countparg ATTRIBUTE_UNUSED)
|
||||
{
|
||||
segment_info_type *seginfo;
|
||||
|
||||
|
@ -3517,7 +3449,7 @@ sh64_flush_last_crange (abfd, seg, countparg)
|
|||
descriptors. */
|
||||
|
||||
static void
|
||||
sh64_flag_output ()
|
||||
sh64_flag_output (void)
|
||||
{
|
||||
if (sh64_isa_mode != sh64_isa_unspecified
|
||||
&& !seen_insn
|
||||
|
@ -3533,7 +3465,7 @@ sh64_flag_output ()
|
|||
any we find. */
|
||||
|
||||
static char *
|
||||
strip_datalabels ()
|
||||
strip_datalabels (void)
|
||||
{
|
||||
char *src, *dest, *start=input_line_pointer;
|
||||
|
||||
|
@ -3553,8 +3485,7 @@ strip_datalabels ()
|
|||
}
|
||||
|
||||
static void
|
||||
sh64_vtable_entry (ignore)
|
||||
int ignore ATTRIBUTE_UNUSED;
|
||||
sh64_vtable_entry (int ignore ATTRIBUTE_UNUSED)
|
||||
{
|
||||
char *eol = strip_datalabels ();
|
||||
|
||||
|
@ -3563,11 +3494,11 @@ sh64_vtable_entry (ignore)
|
|||
}
|
||||
|
||||
static void
|
||||
sh64_vtable_inherit (ignore)
|
||||
int ignore ATTRIBUTE_UNUSED;
|
||||
sh64_vtable_inherit (int ignore ATTRIBUTE_UNUSED)
|
||||
{
|
||||
char *eol = strip_datalabels ();
|
||||
|
||||
obj_elf_vtable_inherit (0);
|
||||
input_line_pointer = eol;
|
||||
}
|
||||
|
||||
|
|
|
@ -28,11 +28,11 @@
|
|||
SHcompact NOP:s. */
|
||||
#undef HANDLE_ALIGN
|
||||
#define HANDLE_ALIGN(frag) sh64_handle_align (frag)
|
||||
extern void sh64_handle_align PARAMS ((fragS *));
|
||||
extern void sh64_handle_align (fragS *);
|
||||
|
||||
#undef MAX_MEM_FOR_RS_ALIGN_CODE
|
||||
#define MAX_MEM_FOR_RS_ALIGN_CODE sh64_max_mem_for_rs_align_code ()
|
||||
extern int sh64_max_mem_for_rs_align_code PARAMS ((void));
|
||||
extern int sh64_max_mem_for_rs_align_code (void);
|
||||
|
||||
#undef LISTING_HEADER
|
||||
#define LISTING_HEADER \
|
||||
|
@ -41,7 +41,7 @@ extern int sh64_max_mem_for_rs_align_code PARAMS ((void));
|
|||
: "SuperH SHcompact/SHmedia Little Endian GAS")
|
||||
|
||||
/* We need to record the new frag position after an .align. */
|
||||
extern void sh64_do_align PARAMS ((int, const char *, int, int));
|
||||
extern void sh64_do_align (int, const char *, int, int);
|
||||
#define md_do_align(n, fill, len, max, l) \
|
||||
do { sh64_do_align (n, fill, len, max); goto l; } while (0)
|
||||
|
||||
|
@ -71,10 +71,10 @@ struct sh64_segment_info_type
|
|||
|
||||
#undef TARGET_FORMAT
|
||||
#define TARGET_FORMAT sh64_target_format ()
|
||||
extern const char *sh64_target_format PARAMS ((void));
|
||||
extern const char *sh64_target_format (void);
|
||||
|
||||
#define TARGET_MACH sh64_target_mach ()
|
||||
extern int sh64_target_mach PARAMS ((void));
|
||||
extern int sh64_target_mach (void);
|
||||
|
||||
#undef TC_FORCE_RELOCATION_LOCAL
|
||||
#define TC_FORCE_RELOCATION_LOCAL(FIX) \
|
||||
|
@ -126,8 +126,8 @@ extern int sh64_target_mach PARAMS ((void));
|
|||
#undef md_parse_name
|
||||
#define md_parse_name(NAME, EXP, CP) \
|
||||
sh64_consume_datalabel (NAME, EXP, CP, operand)
|
||||
extern int sh64_consume_datalabel
|
||||
PARAMS ((const char *, expressionS *, char *, segT (*) (expressionS *)));
|
||||
extern int sh64_consume_datalabel (const char *, expressionS *, char *,
|
||||
segT (*) (expressionS *));
|
||||
|
||||
/* Saying "$" is the same as saying ".". */
|
||||
#define DOLLAR_DOT
|
||||
|
@ -136,11 +136,11 @@ extern int sh64_consume_datalabel
|
|||
#define MD_PCREL_FROM_SECTION(FIX, SEC) \
|
||||
shmedia_md_pcrel_from_section (FIX, SEC)
|
||||
|
||||
extern valueT shmedia_md_pcrel_from_section PARAMS ((struct fix *, segT));
|
||||
extern valueT shmedia_md_pcrel_from_section (struct fix *, segT);
|
||||
|
||||
/* We need to mark this symbol as a BranchTarget; setting st_other for it
|
||||
and adding 1 to its value (temporarily). */
|
||||
extern void sh64_frob_label PARAMS ((symbolS *));
|
||||
extern void sh64_frob_label (symbolS *);
|
||||
|
||||
#undef tc_frob_label
|
||||
#define tc_frob_label(sym) \
|
||||
|
@ -160,19 +160,19 @@ extern void sh64_frob_label PARAMS ((symbolS *));
|
|||
} \
|
||||
while (0)
|
||||
|
||||
extern int sh64_exclude_symbol PARAMS ((symbolS *));
|
||||
extern int sh64_exclude_symbol (symbolS *);
|
||||
|
||||
extern void sh64_adjust_symtab PARAMS ((void));
|
||||
extern void sh64_adjust_symtab (void);
|
||||
#define tc_adjust_symtab sh64_adjust_symtab
|
||||
|
||||
#undef md_flush_pending_output
|
||||
#define md_flush_pending_output() sh64_flush_pending_output ()
|
||||
extern void sh64_flush_pending_output PARAMS ((void));
|
||||
extern void sh64_flush_pending_output (void);
|
||||
|
||||
/* Note that tc-sh.c has a sh_frob_section, but it's called from
|
||||
tc_frob_file_before_adjust. */
|
||||
#define tc_frob_section(sec) shmedia_frob_section_type (sec)
|
||||
extern void shmedia_frob_section_type PARAMS ((asection *));
|
||||
extern void shmedia_frob_section_type (asection *);
|
||||
|
||||
/* We need to emit fixups relative to the frag in which the instruction
|
||||
resides. Safest way without calculating max fragment growth or making
|
||||
|
@ -215,7 +215,7 @@ extern enum sh64_isa_values sh64_isa_mode;
|
|||
extern fragS *sh64_last_insn_frag;
|
||||
|
||||
#define md_end() shmedia_md_end ()
|
||||
void shmedia_md_end PARAMS ((void));
|
||||
void shmedia_md_end (void);
|
||||
|
||||
/* Because we make .debug_line hold the SHmedia instruction address | 1,
|
||||
we have to say we only have minimum byte-size insns. */
|
||||
|
|
Loading…
Reference in a new issue