* 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:
Kaz Kojima 2003-10-11 13:40:21 +00:00
parent c783cbd61e
commit 8edc77b9b4
5 changed files with 182 additions and 353 deletions

View file

@ -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.

View file

@ -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;

View file

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

View file

@ -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;
}

View file

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