diff options
author | obrien <obrien@FreeBSD.org> | 2002-12-02 09:06:04 +0000 |
---|---|---|
committer | obrien <obrien@FreeBSD.org> | 2002-12-02 09:06:04 +0000 |
commit | 4f4b0b5073010ff850cc95a6bd074066eeb7dccb (patch) | |
tree | b6de1df6076881154726637e90c9d9bae94bab79 /contrib/binutils/gas | |
parent | 70d0c6024ff722929b55e70683c5bb4bd3d3b07f (diff) | |
download | FreeBSD-src-4f4b0b5073010ff850cc95a6bd074066eeb7dccb.zip FreeBSD-src-4f4b0b5073010ff850cc95a6bd074066eeb7dccb.tar.gz |
Import of Binutils from the FSF 2.13 branch (just pre-.2 release).
These bits are taken from the FSF anoncvs repo on 27-Oct-2002 21:12:00 EST.
Diffstat (limited to 'contrib/binutils/gas')
-rw-r--r-- | contrib/binutils/gas/ChangeLog | 88 | ||||
-rw-r--r-- | contrib/binutils/gas/config/obj-elf.c | 3 | ||||
-rw-r--r-- | contrib/binutils/gas/config/tc-alpha.c | 86 | ||||
-rw-r--r-- | contrib/binutils/gas/config/tc-alpha.h | 4 | ||||
-rw-r--r-- | contrib/binutils/gas/config/tc-ia64.c | 2 | ||||
-rw-r--r-- | contrib/binutils/gas/config/tc-ppc.c | 25 | ||||
-rw-r--r-- | contrib/binutils/gas/config/tc-s390.c | 93 | ||||
-rw-r--r-- | contrib/binutils/gas/config/tc-s390.h | 10 | ||||
-rw-r--r-- | contrib/binutils/gas/config/tc-sh.c | 4054 | ||||
-rw-r--r-- | contrib/binutils/gas/config/tc-sh.h | 232 | ||||
-rw-r--r-- | contrib/binutils/gas/config/tc-sparc.c | 2 | ||||
-rw-r--r-- | contrib/binutils/gas/config/tc-v850.c | 6 | ||||
-rw-r--r-- | contrib/binutils/gas/config/tc-v850.h | 5 | ||||
-rwxr-xr-x | contrib/binutils/gas/configure | 373 | ||||
-rw-r--r-- | contrib/binutils/gas/configure.in | 10 | ||||
-rw-r--r-- | contrib/binutils/gas/itbl-lex.l | 3 | ||||
-rw-r--r-- | contrib/binutils/gas/itbl-ops.c | 2 | ||||
-rw-r--r-- | contrib/binutils/gas/itbl-parse.y | 1 | ||||
-rw-r--r-- | contrib/binutils/gas/po/gas.pot | 1090 | ||||
-rw-r--r-- | contrib/binutils/gas/write.c | 3 |
20 files changed, 5232 insertions, 860 deletions
diff --git a/contrib/binutils/gas/ChangeLog b/contrib/binutils/gas/ChangeLog index 55fe8f2..94223d0 100644 --- a/contrib/binutils/gas/ChangeLog +++ b/contrib/binutils/gas/ChangeLog @@ -1,3 +1,91 @@ +2002-11-20 Alan Modra <amodra@bigpond.net.au> + + * write.c (adjust_reloc_syms): Don't reduce SEC_MERGE fixups with + fx_subsy non-NULL. + +2002-11-19 Richard Henderson <rth@redhat.com> + + * config/obj-elf.c (obj_elf_visibility): Overwrite only the + visibility portion of st_other. + +2002-11-19 Luke Deller <luked@cse.unsw.edu.au> + + * config/tc-alpha.c (s_alpha_prologue): as_bad when sym is NULL. + +2002-11-13 Alan Modra <amodra@bigpond.net.au> + + Merge from mainline. + 2002-09-04 Alan Modra <amodra@bigpond.net.au> + * config/tc-ppc.c (PPC_HIGHER, PPC_HIGHEST): Fix warning. + (md_parse_option): No -a64 without BFD64. + (ppc_set_cpu): Select appropriate cpu when ppc_obj64. + (ppc_arch): Use bfd_mach_rs6k for bfd_arch_rs6000. + +2002-11-06 Richard Henderson <rth@redhat.com> + + * config/tc-alpha.c (alpha_validate_fix): Move code ... + (alpha_fix_adjustable): ... here. + * config/tc-alpha.h (TC_VALIDATE_FIX): Remove. + +2002-11-05 H.J. Lu <hjl@gnu.org> + + * config/tc-mips.c (support_64bit_objects): Check *l before it + is freed. + +2002-10-31 David O'Brien <obrien@FreeBSD.org> + + * config/tc-ia64.c: Cast dwarf2_directive_file to int. + * config/tc-sparc.c: Likewise. + * config/tc-alpha.c: Cast s_alpha_file to int. + * config/tc-alpha.h (TC_INIT_FIX_DATA): info is of type struct + alpha_reloc_tag. + +2002-10-30 Daniel Jacobowitz <drow@mvista.com> + + * configure.in: Update ARM CPU patterns. + * configure: Regenerated. + +2002-10-30 Daniel Jacobowitz <drow@mvista.com> + + * po/gas.pot: Regenerated. + +2002-10-29 Daniel Jacobowitz <drow@mvista.com> + + * itbl-lex.l: Use #include <> for generated headers. + * itbl-ops.c: Likewise. + +2002-08-24 Andreas Schwab <schwab@suse.de> + + * config/tc-m68k.c (tc_m68k_fix_adjustable): Don't adjust symbols + in merge sections. + +2002-10-28 Daniel Jacobowitz <drow@mvista.com> + + * doc/gasp.texi: Fix typo in last typo fix. + +2002-10-28 Daniel Jacobowitz <drow@mvista.com> + + Merge from mainline: + 2002-10-21 Richard Sandiford <rsandifo@redhat.com> + * config/tc-mips.c (mips_need_elf_addend_fixup): Return true + for relocs against symbols in a merged section. + + Thu Oct 10 14:31:30 2002 J"orn Rennecke <joern.rennecke@superh.com> + * config/tc-sh.c (assemble_ppi): Initialize reg_x / reg_y / reg_n + inside loop. + +2002-10-17 Johannes Stezenbach <js@convergence.de> + + * itbl-parse.y (entry): Provide empty action. + +2002-10-14 Momchil Velikov <velco@fadata.bg> + + * config/tc-v850.c (CHECK_): Remove token pasting operator. + +2002-10-11 David O'Brien <obrien@FreeBSD.org> + + * gas/gasp.texi: Fix typo in noting that gasp is now deprecated. + 2002-10-11 Michel Six <msix@ccr.jussieu.fr> Alan Modra <amodra@bigpond.net.au> diff --git a/contrib/binutils/gas/config/obj-elf.c b/contrib/binutils/gas/config/obj-elf.c index 2266952..bbfbf40 100644 --- a/contrib/binutils/gas/config/obj-elf.c +++ b/contrib/binutils/gas/config/obj-elf.c @@ -547,7 +547,8 @@ obj_elf_visibility (visibility) assert (elfsym); - elfsym->internal_elf_sym.st_other = visibility; + elfsym->internal_elf_sym.st_other &= ~3; + elfsym->internal_elf_sym.st_other |= visibility; if (c == ',') { diff --git a/contrib/binutils/gas/config/tc-alpha.c b/contrib/binutils/gas/config/tc-alpha.c index 6ebd154..b9faadf 100644 --- a/contrib/binutils/gas/config/tc-alpha.c +++ b/contrib/binutils/gas/config/tc-alpha.c @@ -1412,49 +1412,6 @@ alpha_define_label (sym) alpha_insn_label = sym; } -/* If we have a BRSGP reloc to a local symbol, adjust it to BRADDR and - let it get resolved at assembly time. */ - -void -alpha_validate_fix (f) - fixS *f; -{ -#ifdef OBJ_ELF - int offset = 0; - const char *name; - - if (f->fx_r_type != BFD_RELOC_ALPHA_BRSGP) - return; - - if (! S_IS_DEFINED (f->fx_addsy)) - return; - - switch (S_GET_OTHER (f->fx_addsy) & STO_ALPHA_STD_GPLOAD) - { - case STO_ALPHA_NOPV: - break; - case STO_ALPHA_STD_GPLOAD: - offset = 8; - break; - default: - if (S_IS_LOCAL (f->fx_addsy)) - name = "<local>"; - else - name = S_GET_NAME (f->fx_addsy); - as_bad_where (f->fx_file, f->fx_line, - _("!samegp reloc against symbol without .prologue: %s"), - name); - break; - } - - if (! (S_IS_EXTERN (f->fx_addsy) || S_IS_WEAK (f->fx_addsy))) - { - f->fx_r_type = BFD_RELOC_23_PCREL_S2; - f->fx_offset += offset; - } -#endif -} - /* Return true if we must always emit a reloc for a type and false if there is some hope of resolving it at assembly time. */ @@ -1524,7 +1481,6 @@ alpha_fix_adjustable (f) case BFD_RELOC_ALPHA_GPDISP_HI16: case BFD_RELOC_ALPHA_GPDISP_LO16: case BFD_RELOC_ALPHA_GPDISP: - case BFD_RELOC_ALPHA_BRSGP: return 0; case BFD_RELOC_ALPHA_LITERAL: @@ -1562,6 +1518,39 @@ alpha_fix_adjustable (f) we're preventing this in the other assemblers. Follow for now. */ return 0; + case BFD_RELOC_ALPHA_BRSGP: + /* If we have a BRSGP reloc to a local symbol, adjust it to BRADDR and + let it get resolved at assembly time. */ + { + symbolS *sym = f->fx_addsy; + const char *name; + int offset = 0; + + if (! S_IS_DEFINED (sym)) + return 0; + + switch (S_GET_OTHER (sym) & STO_ALPHA_STD_GPLOAD) + { + case STO_ALPHA_NOPV: + break; + case STO_ALPHA_STD_GPLOAD: + offset = 8; + break; + default: + if (S_IS_LOCAL (sym)) + name = "<local>"; + else + name = S_GET_NAME (sym); + as_bad_where (f->fx_file, f->fx_line, + _("!samegp reloc against symbol without .prologue: %s"), + name); + break; + } + f->fx_r_type = BFD_RELOC_23_PCREL_S2; + f->fx_offset += offset; + return 1; + } + default: return 1; } @@ -4537,7 +4526,12 @@ s_alpha_prologue (ignore) sym = ecoff_get_cur_proc_sym (); else sym = alpha_cur_ent_sym; - know (sym != NULL); + + if (sym == NULL) + { + as_bad (_(".prologue directive without a preceding .ent directive")); + return; + } switch (arg) { @@ -5494,7 +5488,7 @@ const pseudo_typeS md_pseudo_table[] = { {"fmask", s_alpha_mask, 1}, {"frame", s_alpha_frame, 0}, {"prologue", s_alpha_prologue, 0}, - {"file", s_alpha_file, 5}, + {"file", (void (*) PARAMS ((int))) s_alpha_file, 5}, {"loc", s_alpha_loc, 9}, {"stabs", s_alpha_stab, 's'}, {"stabn", s_alpha_stab, 'n'}, diff --git a/contrib/binutils/gas/config/tc-alpha.h b/contrib/binutils/gas/config/tc-alpha.h index 247fea6..12146b7 100644 --- a/contrib/binutils/gas/config/tc-alpha.h +++ b/contrib/binutils/gas/config/tc-alpha.h @@ -46,14 +46,12 @@ #define NEED_LITERAL_POOL #define REPEAT_CONS_EXPRESSIONS -extern void alpha_validate_fix PARAMS ((struct fix *)); extern int alpha_force_relocation PARAMS ((struct fix *)); extern int alpha_fix_adjustable PARAMS ((struct fix *)); extern unsigned long alpha_gprmask, alpha_fprmask; extern valueT alpha_gp_value; -#define TC_VALIDATE_FIX(FIXP,SEGTYPE,SKIP) alpha_validate_fix (FIXP) #define TC_FORCE_RELOCATION(FIXP) alpha_force_relocation (FIXP) #define tc_fix_adjustable(FIXP) alpha_fix_adjustable (FIXP) #define RELOC_REQUIRES_SYMBOL @@ -152,7 +150,7 @@ struct alpha_fix_tag #define TC_INIT_FIX_DATA(fixP) \ do { \ fixP->tc_fix_data.next_reloc = (struct fix *)0; \ - fixP->tc_fix_data.info = (struct alpha_literal_tag *)0; \ + fixP->tc_fix_data.info = (struct alpha_reloc_tag *)0; \ } while (0) /* Work with DEBUG5 to print fields in tc_fix_type. */ diff --git a/contrib/binutils/gas/config/tc-ia64.c b/contrib/binutils/gas/config/tc-ia64.c index ae26ada..a634d80 100644 --- a/contrib/binutils/gas/config/tc-ia64.c +++ b/contrib/binutils/gas/config/tc-ia64.c @@ -4827,7 +4827,7 @@ const pseudo_typeS md_pseudo_table[] = { "body", dot_body, 0 }, { "prologue", dot_prologue, 0 }, { "endp", dot_endp, 0 }, - { "file", dwarf2_directive_file, 0 }, + { "file", (void (*) PARAMS ((int))) dwarf2_directive_file, 0 }, { "loc", dwarf2_directive_loc, 0 }, { "fframe", dot_fframe, 0 }, diff --git a/contrib/binutils/gas/config/tc-ppc.c b/contrib/binutils/gas/config/tc-ppc.c index c743c54..d7e8e69 100644 --- a/contrib/binutils/gas/config/tc-ppc.c +++ b/contrib/binutils/gas/config/tc-ppc.c @@ -68,14 +68,14 @@ static int set_target_endian = 0; #define PPC_HA(v) PPC_HI ((v) + 0x8000) /* #higher(value) denotes bits 32 through 47 of the indicated value. */ -#define PPC_HIGHER(v) (((v) >> 32) & 0xffff) +#define PPC_HIGHER(v) (((v) >> 16 >> 16) & 0xffff) /* #highera(value) denotes bits 32 through 47 of the indicated value, compensating for #lo() being treated as a signed number. */ #define PPC_HIGHERA(v) PPC_HIGHER ((v) + 0x8000) /* #highest(value) denotes bits 48 through 63 of the indicated value. */ -#define PPC_HIGHEST(v) (((v) >> 48) & 0xffff) +#define PPC_HIGHEST(v) (((v) >> 24 >> 24) & 0xffff) /* #highesta(value) denotes bits 48 through 63 of the indicated value, compensating for #lo being treated as a signed number. */ @@ -852,7 +852,13 @@ md_parse_option (c, arg) /* a64 and a32 determine whether to use XCOFF64 or XCOFF32. */ case 'a': if (strcmp (arg, "64") == 0) - ppc_obj64 = 1; + { +#ifdef BFD64 + ppc_obj64 = 1; +#else + as_fatal (_("%s unsupported"), "-a64"); +#endif + } else if (strcmp (arg, "32") == 0) ppc_obj64 = 0; else @@ -1062,8 +1068,10 @@ ppc_set_cpu () if (ppc_cpu == 0) { - if (strncmp (default_os, "aix", 3) == 0 - && default_os[3] >= '4' && default_os[3] <= '9') + if (ppc_obj64) + ppc_cpu = PPC_OPCODE_PPC | PPC_OPCODE_64; + else if (strncmp (default_os, "aix", 3) == 0 + && default_os[3] >= '4' && default_os[3] <= '9') ppc_cpu = PPC_OPCODE_COMMON | PPC_OPCODE_32; else if (strncmp (default_os, "aix3", 4) == 0) ppc_cpu = PPC_OPCODE_POWER | PPC_OPCODE_32; @@ -1109,7 +1117,12 @@ ppc_arch () unsigned long ppc_mach () { - return ppc_obj64 ? bfd_mach_ppc64 : bfd_mach_ppc; + if (ppc_obj64) + return bfd_mach_ppc64; + else if (ppc_arch () == bfd_arch_rs6000) + return bfd_mach_rs6k; + else + return bfd_mach_ppc; } extern char* diff --git a/contrib/binutils/gas/config/tc-s390.c b/contrib/binutils/gas/config/tc-s390.c index 4e09ab5..bce0604 100644 --- a/contrib/binutils/gas/config/tc-s390.c +++ b/contrib/binutils/gas/config/tc-s390.c @@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License along with GAS; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA - 02111-1307, USA. */ + 02111-1307, USA. */ #include <stdio.h> #include "as.h" @@ -82,7 +82,7 @@ static void s390_literals PARAMS ((int)); const pseudo_typeS md_pseudo_table[] = { { "align", s_align_bytes, 0 }, - /* Pseudo-ops which must be defined. */ + /* Pseudo-ops which must be defined. */ { "bss", s390_bss, 0 }, { "insn", s390_insn, 0 }, /* Pseudo-ops which must be overridden. */ @@ -121,7 +121,7 @@ struct pd_reg sp has the value 15 lit has the value 12 - The table is sorted. Suitable for searching by a binary search. */ + The table is sorted. Suitable for searching by a binary search. */ static const struct pd_reg pre_defined_registers[] = { @@ -312,7 +312,7 @@ const int md_short_jump_size = 4; const int md_long_jump_size = 4; #endif -CONST char *md_shortopts = "A:m:kVQ:"; +const char *md_shortopts = "A:m:kVQ:"; struct option md_longopts[] = { {NULL, no_argument, NULL, 0} }; @@ -560,7 +560,7 @@ s390_insert_operand (insn, operand, val, file, line) { addressT min, max; - max = (((addressT) 1 << (operand->bits - 1))<<1) - 1; + max = (((addressT) 1 << (operand->bits - 1)) << 1) - 1; min = (offsetT) 0; uval = (addressT) val; /* Length x in an instructions has real length x+1. */ @@ -591,7 +591,7 @@ s390_insert_operand (insn, operand, val, file, line) /* Insert fragments of the operand byte for byte. */ offset = operand->shift + operand->bits; uval <<= (-offset) & 7; - insn += (offset - 1)/8; + insn += (offset - 1) / 8; while (uval != 0) { *insn-- |= uval; @@ -724,7 +724,7 @@ static int lp_count = 0; static int lpe_count = 0; static int -s390_exp_compare(exp1, exp2) +s390_exp_compare (exp1, exp2) expressionS *exp1; expressionS *exp2; { @@ -771,8 +771,8 @@ s390_exp_compare(exp1, exp2) && (exp1->X_op_symbol == exp2->X_op_symbol) && (exp1->X_add_number == exp2->X_add_number); default: - return 0; - } + return 0; + } } /* Test for @lit and if its present make an entry in the literal pool and @@ -852,7 +852,7 @@ s390_lit_suffix (str_p, exp_p, suffix) /* Processing for 'normal' data types. */ for (lpe = lpe_list; lpe != NULL; lpe = lpe->next) if (lpe->nbytes == nbytes && lpe->reloc == reloc - && s390_exp_compare(exp_p, &lpe->ex) != 0) + && s390_exp_compare (exp_p, &lpe->ex) != 0) break; } @@ -866,7 +866,7 @@ s390_lit_suffix (str_p, exp_p, suffix) } else { - lpe = (struct s390_lpe *) xmalloc(sizeof (struct s390_lpe)); + lpe = (struct s390_lpe *) xmalloc (sizeof (struct s390_lpe)); } lpe->ex = *exp_p; @@ -877,7 +877,7 @@ s390_lit_suffix (str_p, exp_p, suffix) lpe->floatnum = generic_floating_point_number; else if (exp_p->X_add_number <= 4) memcpy (lpe->bignum, generic_bignum, - exp_p->X_add_number*sizeof (LITTLENUM_TYPE)); + exp_p->X_add_number * sizeof (LITTLENUM_TYPE)); else as_bad (_("Big number is too big")); } @@ -888,13 +888,13 @@ s390_lit_suffix (str_p, exp_p, suffix) if (lp_sym == NULL) { sprintf (tmp_name, ".L\001%i", lp_count); - lp_sym = symbol_make(tmp_name); + lp_sym = symbol_make (tmp_name); } /* Make name for literal pool entry. */ sprintf (tmp_name, ".L\001%i\002%i", lp_count, lpe_count); lpe_count++; - lpe->sym = symbol_make(tmp_name); + lpe->sym = symbol_make (tmp_name); /* Add to literal pool list. */ lpe->next = NULL; @@ -984,7 +984,7 @@ s390_elf_cons (nbytes) } while (*input_line_pointer++ == ','); - input_line_pointer--; /* Put terminator back into stream. */ + input_line_pointer--; /* Put terminator back into stream. */ demand_empty_rest_of_line (); } @@ -1019,7 +1019,8 @@ md_gather_operands (str, insn, opcode) char *f; int fc, i; - while (ISSPACE (*str)) str++; + while (ISSPACE (*str)) + str++; parentheses = 0; skip_optional = 0; @@ -1047,7 +1048,8 @@ md_gather_operands (str, insn, opcode) hold = input_line_pointer; input_line_pointer = str; - if (! register_name (&ex)) /* parse the operand */ + /* Parse the operand. */ + if (! register_name (&ex)) expression (&ex); str = input_line_pointer; @@ -1397,7 +1399,7 @@ s390_insn (ignore) if (strcmp (opformat->name, "e") != 0 && *input_line_pointer++ != ',') as_bad (_("missing comma after insn constant\n")); - + if ((s = strchr (input_line_pointer, '\n')) != NULL) *s = '\0'; input_line_pointer = md_gather_operands (input_line_pointer, insn, @@ -1453,7 +1455,7 @@ s390_literals (ignore) struct s390_lpe *lpe; if (lp_sym == NULL || lpe_count == 0) - return; /* nothing to be done */ + return; /* Nothing to be done. */ /* Emit symbol for start of literal pool. */ S_SET_SEGMENT (lp_sym, now_seg); @@ -1492,7 +1494,7 @@ s390_literals (ignore) generic_floating_point_number = lpe->floatnum; else memcpy (generic_bignum, lpe->bignum, - lpe->ex.X_add_number*sizeof (LITTLENUM_TYPE)); + lpe->ex.X_add_number * sizeof (LITTLENUM_TYPE)); } emit_expr (&lpe->ex, lpe->nbytes); } @@ -1590,18 +1592,18 @@ symbolS * md_undefined_symbol (name) char *name; { - if (*name == '_' && *(name+1) == 'G' + if (*name == '_' && *(name + 1) == 'G' && strcmp (name, "_GLOBAL_OFFSET_TABLE_") == 0) - { - if (!GOT_symbol) - { - if (symbol_find (name)) - as_bad (_("GOT already in symbol table")); - GOT_symbol = symbol_new (name, undefined_section, - (valueT) 0, &zero_address_frag); - } - return GOT_symbol; - } + { + if (!GOT_symbol) + { + if (symbol_find (name)) + as_bad (_("GOT already in symbol table")); + GOT_symbol = symbol_new (name, undefined_section, + (valueT) 0, &zero_address_frag); + } + return GOT_symbol; + } return 0; } @@ -1623,17 +1625,16 @@ md_pcrel_from_section (fixp, sec) to make sure that the dynamic relocations are done correctly, so in some cases we force the original symbol to be used. */ int -tc_s390_fix_adjustable(fixP) - fixS * fixP; +tc_s390_fix_adjustable (fixP) + fixS *fixP; { /* Prevent all adjustments to global symbols. */ if (S_IS_EXTERN (fixP->fx_addsy)) return 0; if (S_IS_WEAK (fixP->fx_addsy)) return 0; - /* Don't adjust pc-relative references to merge sections. */ - if ((S_GET_SEGMENT(fixP->fx_addsy)->flags & SEC_MERGE) != 0 - && fixP->fx_pcrel) + /* Don't adjust references to merge sections. */ + if ((S_GET_SEGMENT (fixP->fx_addsy)->flags & SEC_MERGE) != 0) return 0; /* adjust_reloc_syms doesn't know about the GOT. */ if ( fixP->fx_r_type == BFD_RELOC_32_GOTOFF @@ -1698,11 +1699,11 @@ md_apply_fix3 (fixP, valP, seg) segT seg; { char *where; - valueT value = * valP; + valueT value = *valP; where = fixP->fx_frag->fr_literal + fixP->fx_where; - if (fixP->fx_subsy != NULL) + if (fixP->fx_subsy != NULL) { if ((fixP->fx_addsy != NULL && S_GET_SEGMENT (fixP->fx_addsy) == S_GET_SEGMENT (fixP->fx_subsy) @@ -1712,24 +1713,24 @@ md_apply_fix3 (fixP, valP, seg) if (!S_IS_DEFINED (fixP->fx_subsy)) as_bad_where (fixP->fx_file, fixP->fx_line, _("unresolved fx_subsy symbol that must be resolved")); - value -= S_GET_VALUE(fixP->fx_subsy); + value -= S_GET_VALUE (fixP->fx_subsy); if (S_GET_SEGMENT (fixP->fx_subsy) == seg && ! fixP->fx_pcrel) value += MD_PCREL_FROM_SECTION (fixP, seg); } - - if (fixP->fx_addsy != NULL) + + if (fixP->fx_addsy != NULL) { if ((fixP->fx_subsy != NULL && S_GET_SEGMENT (fixP->fx_addsy) == S_GET_SEGMENT (fixP->fx_subsy) - && SEG_NORMAL (S_GET_SEGMENT(fixP->fx_addsy))) + && SEG_NORMAL (S_GET_SEGMENT (fixP->fx_addsy))) || (S_GET_SEGMENT (fixP->fx_addsy) == seg && fixP->fx_pcrel && TC_RELOC_RTSYM_LOC_FIXUP (fixP)) - || (!fixP->fx_pcrel + || (!fixP->fx_pcrel && S_GET_SEGMENT (fixP->fx_addsy) == absolute_section) || (S_GET_SEGMENT (fixP->fx_addsy) != undefined_section && !bfd_is_com_section (S_GET_SEGMENT (fixP->fx_addsy)) - && TC_FIX_ADJUSTABLE(fixP))) + && TC_FIX_ADJUSTABLE (fixP))) value -= S_GET_VALUE (fixP->fx_addsy); if (fixP->fx_pcrel) @@ -1965,8 +1966,8 @@ tc_gen_reloc (seg, fixp) if (reloc->howto == NULL) { as_bad_where (fixp->fx_file, fixp->fx_line, - _("cannot represent relocation type %s"), - bfd_get_reloc_code_name (code)); + _("cannot represent relocation type %s"), + bfd_get_reloc_code_name (code)); /* Set howto to a garbage value so that we can keep going. */ reloc->howto = bfd_reloc_type_lookup (stdoutput, BFD_RELOC_32); assert (reloc->howto != NULL); diff --git a/contrib/binutils/gas/config/tc-s390.h b/contrib/binutils/gas/config/tc-s390.h index 1837b1a..48dbeda 100644 --- a/contrib/binutils/gas/config/tc-s390.h +++ b/contrib/binutils/gas/config/tc-s390.h @@ -1,5 +1,5 @@ /* tc-s390.h -- Header file for tc-s390.c. - Copyright 2000, 2001 Free Software Foundation, Inc. + Copyright 2000, 2001, 2002 Free Software Foundation, Inc. Written by Martin Schwidefsky (schwidefsky@de.ibm.com). This file is part of GAS, the GNU Assembler. @@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License along with GAS; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA - 02111-1307, USA. */ + 02111-1307, USA. */ #define TC_S390 @@ -34,7 +34,7 @@ struct fix; are willing to perform this relocation while building the .o file. This is only used for pcrel relocations, so GOTOFF does not need to be checked here. I am not sure if some of the others are ever used with - pcrel, but it is easier to be safe than sorry. */ + pcrel, but it is easier to be safe than sorry. */ #define TC_RELOC_RTSYM_LOC_FIXUP(FIX) \ ((FIX)->fx_r_type != BFD_RELOC_390_GOTENT \ @@ -59,9 +59,9 @@ extern enum bfd_architecture s390_arch PARAMS ((void)); /* The target BFD format. */ #define TARGET_FORMAT s390_target_format() -extern const char * s390_target_format PARAMS ((void)); +extern const char *s390_target_format PARAMS ((void)); -/* Set the endianness we are using. */ +/* Set the endianness we are using. */ #define TARGET_BYTES_BIG_ENDIAN 1 /* Whether or not the target is big endian */ diff --git a/contrib/binutils/gas/config/tc-sh.c b/contrib/binutils/gas/config/tc-sh.c new file mode 100644 index 0000000..1361cb8 --- /dev/null +++ b/contrib/binutils/gas/config/tc-sh.c @@ -0,0 +1,4054 @@ +/* tc-sh.c -- Assemble code for the Hitachi Super-H + Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 + Free Software Foundation, Inc. + + This file is part of GAS, the GNU Assembler. + + GAS is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GAS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GAS; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +/* Written By Steve Chamberlain <sac@cygnus.com> */ + +#include <stdio.h> +#include "as.h" +#include "bfd.h" +#include "subsegs.h" +#define DEFINE_TABLE +#include "opcodes/sh-opc.h" +#include "safe-ctype.h" +#include "struc-symbol.h" + +#ifdef OBJ_ELF +#include "elf/sh.h" +#endif + +#include "dwarf2dbg.h" + +typedef struct + { + sh_arg_type type; + int reg; + expressionS immediate; + } +sh_operand_info; + +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 *)); + +#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 *)); + +symbolS *GOT_symbol; /* Pre-defined "_GLOBAL_OFFSET_TABLE_" */ +#endif + +static void +big (ignore) + int ignore ATTRIBUTE_UNUSED; +{ + if (! target_big_endian) + as_bad (_("directive .big encountered when option -big required")); + + /* Stop further messages. */ + target_big_endian = 1; +} + +static void +little (ignore) + int ignore ATTRIBUTE_UNUSED; +{ + if (target_big_endian) + as_bad (_("directive .little encountered when option -little required")); + + /* Stop further messages. */ + target_big_endian = 0; +} + +/* This table describes all the machine specific pseudo-ops the assembler + has to support. The fields are: + pseudo-op name without dot + function to call to execute this pseudo-op + Integer arg to pass to the function. */ + +const pseudo_typeS md_pseudo_table[] = +{ +#ifdef OBJ_ELF + {"long", sh_elf_cons, 4}, + {"int", sh_elf_cons, 4}, + {"word", sh_elf_cons, 2}, + {"short", sh_elf_cons, 2}, +#else + {"int", cons, 4}, + {"word", cons, 2}, +#endif /* OBJ_ELF */ + {"big", big, 0}, + {"form", listing_psize, 0}, + {"little", little, 0}, + {"heading", listing_title, 0}, + {"import", s_ignore, 0}, + {"page", listing_eject, 0}, + {"program", s_ignore, 0}, + {"uses", s_uses, 0}, + {"uaword", s_uacons, 2}, + {"ualong", s_uacons, 4}, + {"uaquad", s_uacons, 8}, + {"2byte", s_uacons, 2}, + {"4byte", s_uacons, 4}, + {"8byte", s_uacons, 8}, +#ifdef BFD_ASSEMBLER + {"file", dwarf2_directive_file, 0 }, + {"loc", dwarf2_directive_loc, 0 }, +#endif +#ifdef HAVE_SH64 + {"mode", s_sh64_mode, 0 }, + + /* Have the old name too. */ + {"isa", s_sh64_mode, 0 }, + + /* Assert that the right ABI is used. */ + {"abi", s_sh64_abi, 0 }, + + { "vtable_inherit", sh64_vtable_inherit, 0 }, + { "vtable_entry", sh64_vtable_entry, 0 }, +#endif /* HAVE_SH64 */ + {0, 0, 0} +}; + +/*int md_reloc_size; */ + +int sh_relax; /* set if -relax seen */ + +/* Whether -small was seen. */ + +int sh_small; + +/* Whether -dsp was seen. */ + +static int sh_dsp; + +/* The bit mask of architectures that could + accomodate the insns seen so far. */ +static int valid_arch; + +const char EXP_CHARS[] = "eE"; + +/* Chars that mean this number is a floating point constant. */ +/* As in 0f12.456 */ +/* or 0d1.2345e12 */ +const char FLT_CHARS[] = "rRsSfFdDxXpP"; + +#define C(a,b) ENCODE_RELAX(a,b) + +#define ENCODE_RELAX(what,length) (((what) << 4) + (length)) +#define GET_WHAT(x) ((x>>4)) + +/* These are the three types of relaxable instrction. */ +/* These are the types of relaxable instructions; except for END which is + a marker. */ +#define COND_JUMP 1 +#define COND_JUMP_DELAY 2 +#define UNCOND_JUMP 3 + +#ifdef HAVE_SH64 + +/* A 16-bit (times four) pc-relative operand, at most expanded to 32 bits. */ +#define SH64PCREL16_32 4 +/* A 16-bit (times four) pc-relative operand, at most expanded to 64 bits. */ +#define SH64PCREL16_64 5 + +/* Variants of the above for adjusting the insn to PTA or PTB according to + the label. */ +#define SH64PCREL16PT_32 6 +#define SH64PCREL16PT_64 7 + +/* A MOVI expansion, expanding to at most 32 or 64 bits. */ +#define MOVI_IMM_32 8 +#define MOVI_IMM_32_PCREL 9 +#define MOVI_IMM_64 10 +#define MOVI_IMM_64_PCREL 11 +#define END 12 + +#else /* HAVE_SH64 */ + +#define END 4 + +#endif /* HAVE_SH64 */ + +#define UNDEF_DISP 0 +#define COND8 1 +#define COND12 2 +#define COND32 3 +#define UNDEF_WORD_DISP 4 + +#define UNCOND12 1 +#define UNCOND32 2 + +#ifdef HAVE_SH64 +#define UNDEF_SH64PCREL 0 +#define SH64PCREL16 1 +#define SH64PCREL32 2 +#define SH64PCREL48 3 +#define SH64PCREL64 4 +#define SH64PCRELPLT 5 + +#define UNDEF_MOVI 0 +#define MOVI_16 1 +#define MOVI_32 2 +#define MOVI_48 3 +#define MOVI_64 4 +#define MOVI_PLT 5 +#define MOVI_GOTOFF 6 +#define MOVI_GOTPC 7 +#endif /* HAVE_SH64 */ + +/* Branch displacements are from the address of the branch plus + four, thus all minimum and maximum values have 4 added to them. */ +#define COND8_F 258 +#define COND8_M -252 +#define COND8_LENGTH 2 + +/* There is one extra instruction before the branch, so we must add + two more bytes to account for it. */ +#define COND12_F 4100 +#define COND12_M -4090 +#define COND12_LENGTH 6 + +#define COND12_DELAY_LENGTH 4 + +/* ??? The minimum and maximum values are wrong, but this does not matter + since this relocation type is not supported yet. */ +#define COND32_F (1<<30) +#define COND32_M -(1<<30) +#define COND32_LENGTH 14 + +#define UNCOND12_F 4098 +#define UNCOND12_M -4092 +#define UNCOND12_LENGTH 2 + +/* ??? The minimum and maximum values are wrong, but this does not matter + since this relocation type is not supported yet. */ +#define UNCOND32_F (1<<30) +#define UNCOND32_M -(1<<30) +#define UNCOND32_LENGTH 14 + +#ifdef HAVE_SH64 +/* The trivial expansion of a SH64PCREL16 relaxation is just a "PT label, + TRd" as is the current insn, so no extra length. Note that the "reach" + is calculated from the address *after* that insn, but the offset in the + insn is calculated from the beginning of the insn. We also need to + take into account the implicit 1 coded as the "A" in PTA when counting + forward. If PTB reaches an odd address, we trap that as an error + elsewhere, so we don't have to have different relaxation entries. We + don't add a one to the negative range, since PTB would then have the + farthest backward-reaching value skipped, not generated at relaxation. */ +#define SH64PCREL16_F (32767 * 4 - 4 + 1) +#define SH64PCREL16_M (-32768 * 4 - 4) +#define SH64PCREL16_LENGTH 0 + +/* The next step is to change that PT insn into + MOVI ((label - datalabel Ln) >> 16) & 65535, R25 + SHORI (label - datalabel Ln) & 65535, R25 + Ln: + PTREL R25,TRd + which means two extra insns, 8 extra bytes. This is the limit for the + 32-bit ABI. + + The expressions look a bit bad since we have to adjust this to avoid overflow on a + 32-bit host. */ +#define SH64PCREL32_F ((((long) 1 << 30) - 1) * 2 + 1 - 4) +#define SH64PCREL32_LENGTH (2 * 4) + +/* Similarly, we just change the MOVI and add a SHORI for the 48-bit + expansion. */ +#if BFD_HOST_64BIT_LONG +/* The "reach" type is long, so we can only do this for a 64-bit-long + host. */ +#define SH64PCREL32_M (((long) -1 << 30) * 2 - 4) +#define SH64PCREL48_F ((((long) 1 << 47) - 1) - 4) +#define SH64PCREL48_M (((long) -1 << 47) - 4) +#define SH64PCREL48_LENGTH (3 * 4) +#else +/* If the host does not have 64-bit longs, just make this state identical + in reach to the 32-bit state. Note that we have a slightly incorrect + reach, but the correct one above will overflow a 32-bit number. */ +#define SH64PCREL32_M (((long) -1 << 30) * 2) +#define SH64PCREL48_F SH64PCREL32_F +#define SH64PCREL48_M SH64PCREL32_M +#define SH64PCREL48_LENGTH (3 * 4) +#endif /* BFD_HOST_64BIT_LONG */ + +/* And similarly for the 64-bit expansion; a MOVI + SHORI + SHORI + SHORI + + PTREL sequence. */ +#define SH64PCREL64_LENGTH (4 * 4) + +/* For MOVI, we make the MOVI + SHORI... expansion you can see in the + SH64PCREL expansions. The PCREL one is similar, but the other has no + pc-relative reach; it must be fully expanded in + shmedia_md_estimate_size_before_relax. */ +#define MOVI_16_LENGTH 0 +#define MOVI_16_F (32767 - 4) +#define MOVI_16_M (-32768 - 4) +#define MOVI_32_LENGTH 4 +#define MOVI_32_F ((((long) 1 << 30) - 1) * 2 + 1 - 4) +#define MOVI_48_LENGTH 8 + +#if BFD_HOST_64BIT_LONG +/* The "reach" type is long, so we can only do this for a 64-bit-long + host. */ +#define MOVI_32_M (((long) -1 << 30) * 2 - 4) +#define MOVI_48_F ((((long) 1 << 47) - 1) - 4) +#define MOVI_48_M (((long) -1 << 47) - 4) +#else +/* If the host does not have 64-bit longs, just make this state identical + in reach to the 32-bit state. Note that we have a slightly incorrect + reach, but the correct one above will overflow a 32-bit number. */ +#define MOVI_32_M (((long) -1 << 30) * 2) +#define MOVI_48_F MOVI_32_F +#define MOVI_48_M MOVI_32_M +#endif /* BFD_HOST_64BIT_LONG */ + +#define MOVI_64_LENGTH 12 +#endif /* HAVE_SH64 */ + +#define EMPTY { 0, 0, 0, 0 } + +const relax_typeS md_relax_table[C (END, 0)] = { + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, + + EMPTY, + /* C (COND_JUMP, COND8) */ + { COND8_F, COND8_M, COND8_LENGTH, C (COND_JUMP, COND12) }, + /* C (COND_JUMP, COND12) */ + { COND12_F, COND12_M, COND12_LENGTH, C (COND_JUMP, COND32), }, + /* C (COND_JUMP, COND32) */ + { COND32_F, COND32_M, COND32_LENGTH, 0, }, + /* C (COND_JUMP, UNDEF_WORD_DISP) */ + { 0, 0, COND32_LENGTH, 0, }, + EMPTY, EMPTY, EMPTY, + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, + + EMPTY, + /* C (COND_JUMP_DELAY, COND8) */ + { COND8_F, COND8_M, COND8_LENGTH, C (COND_JUMP_DELAY, COND12) }, + /* C (COND_JUMP_DELAY, COND12) */ + { COND12_F, COND12_M, COND12_DELAY_LENGTH, C (COND_JUMP_DELAY, COND32), }, + /* C (COND_JUMP_DELAY, COND32) */ + { COND32_F, COND32_M, COND32_LENGTH, 0, }, + /* C (COND_JUMP_DELAY, UNDEF_WORD_DISP) */ + { 0, 0, COND32_LENGTH, 0, }, + EMPTY, EMPTY, EMPTY, + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, + + EMPTY, + /* C (UNCOND_JUMP, UNCOND12) */ + { UNCOND12_F, UNCOND12_M, UNCOND12_LENGTH, C (UNCOND_JUMP, UNCOND32), }, + /* C (UNCOND_JUMP, UNCOND32) */ + { UNCOND32_F, UNCOND32_M, UNCOND32_LENGTH, 0, }, + EMPTY, + /* C (UNCOND_JUMP, UNDEF_WORD_DISP) */ + { 0, 0, UNCOND32_LENGTH, 0, }, + EMPTY, EMPTY, EMPTY, + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, + +#ifdef HAVE_SH64 + /* C (SH64PCREL16_32, SH64PCREL16) */ + EMPTY, + { SH64PCREL16_F, SH64PCREL16_M, SH64PCREL16_LENGTH, C (SH64PCREL16_32, SH64PCREL32) }, + /* C (SH64PCREL16_32, SH64PCREL32) */ + { 0, 0, SH64PCREL32_LENGTH, 0 }, + EMPTY, EMPTY, + /* C (SH64PCREL16_32, SH64PCRELPLT) */ + { 0, 0, SH64PCREL32_LENGTH, 0 }, + EMPTY, EMPTY, + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, + + /* C (SH64PCREL16_64, SH64PCREL16) */ + EMPTY, + { SH64PCREL16_F, SH64PCREL16_M, SH64PCREL16_LENGTH, C (SH64PCREL16_64, SH64PCREL32) }, + /* C (SH64PCREL16_64, SH64PCREL32) */ + { SH64PCREL32_F, SH64PCREL32_M, SH64PCREL32_LENGTH, C (SH64PCREL16_64, SH64PCREL48) }, + /* C (SH64PCREL16_64, SH64PCREL48) */ + { SH64PCREL48_F, SH64PCREL48_M, SH64PCREL48_LENGTH, C (SH64PCREL16_64, SH64PCREL64) }, + /* C (SH64PCREL16_64, SH64PCREL64) */ + { 0, 0, SH64PCREL64_LENGTH, 0 }, + /* C (SH64PCREL16_64, SH64PCRELPLT) */ + { 0, 0, SH64PCREL64_LENGTH, 0 }, + EMPTY, EMPTY, + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, + + /* C (SH64PCREL16PT_32, SH64PCREL16) */ + EMPTY, + { SH64PCREL16_F, SH64PCREL16_M, SH64PCREL16_LENGTH, C (SH64PCREL16PT_32, SH64PCREL32) }, + /* C (SH64PCREL16PT_32, SH64PCREL32) */ + { 0, 0, SH64PCREL32_LENGTH, 0 }, + EMPTY, EMPTY, + /* C (SH64PCREL16PT_32, SH64PCRELPLT) */ + { 0, 0, SH64PCREL32_LENGTH, 0 }, + EMPTY, EMPTY, + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, + + /* C (SH64PCREL16PT_64, SH64PCREL16) */ + EMPTY, + { SH64PCREL16_F, SH64PCREL16_M, SH64PCREL16_LENGTH, C (SH64PCREL16PT_64, SH64PCREL32) }, + /* C (SH64PCREL16PT_64, SH64PCREL32) */ + { SH64PCREL32_F, + SH64PCREL32_M, + SH64PCREL32_LENGTH, + C (SH64PCREL16PT_64, SH64PCREL48) }, + /* C (SH64PCREL16PT_64, SH64PCREL48) */ + { SH64PCREL48_F, SH64PCREL48_M, SH64PCREL48_LENGTH, C (SH64PCREL16PT_64, SH64PCREL64) }, + /* C (SH64PCREL16PT_64, SH64PCREL64) */ + { 0, 0, SH64PCREL64_LENGTH, 0 }, + /* C (SH64PCREL16PT_64, SH64PCRELPLT) */ + { 0, 0, SH64PCREL64_LENGTH, 0}, + EMPTY, EMPTY, + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, + + /* C (MOVI_IMM_32, UNDEF_MOVI) */ + { 0, 0, MOVI_32_LENGTH, 0 }, + /* C (MOVI_IMM_32, MOVI_16) */ + { MOVI_16_F, MOVI_16_M, MOVI_16_LENGTH, C (MOVI_IMM_32, MOVI_32) }, + /* C (MOVI_IMM_32, MOVI_32) */ + { MOVI_32_F, MOVI_32_M, MOVI_32_LENGTH, 0 }, + EMPTY, EMPTY, EMPTY, + /* C (MOVI_IMM_32, MOVI_GOTOFF) */ + { 0, 0, MOVI_32_LENGTH, 0 }, + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, + + /* C (MOVI_IMM_32_PCREL, MOVI_16) */ + EMPTY, + { MOVI_16_F, MOVI_16_M, MOVI_16_LENGTH, C (MOVI_IMM_32_PCREL, MOVI_32) }, + /* C (MOVI_IMM_32_PCREL, MOVI_32) */ + { 0, 0, MOVI_32_LENGTH, 0 }, + EMPTY, EMPTY, + /* C (MOVI_IMM_32_PCREL, MOVI_PLT) */ + { 0, 0, MOVI_32_LENGTH, 0 }, + EMPTY, + /* C (MOVI_IMM_32_PCREL, MOVI_GOTPC) */ + { 0, 0, MOVI_32_LENGTH, 0 }, + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, + + /* C (MOVI_IMM_64, UNDEF_MOVI) */ + { 0, 0, MOVI_64_LENGTH, 0 }, + /* C (MOVI_IMM_64, MOVI_16) */ + { MOVI_16_F, MOVI_16_M, MOVI_16_LENGTH, C (MOVI_IMM_64, MOVI_32) }, + /* C (MOVI_IMM_64, MOVI_32) */ + { MOVI_32_F, MOVI_32_M, MOVI_32_LENGTH, C (MOVI_IMM_64, MOVI_48) }, + /* C (MOVI_IMM_64, MOVI_48) */ + { MOVI_48_F, MOVI_48_M, MOVI_48_LENGTH, C (MOVI_IMM_64, MOVI_64) }, + /* C (MOVI_IMM_64, MOVI_64) */ + { 0, 0, MOVI_64_LENGTH, 0 }, + EMPTY, + /* C (MOVI_IMM_64, MOVI_GOTOFF) */ + { 0, 0, MOVI_64_LENGTH, 0 }, + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, + + /* C (MOVI_IMM_64_PCREL, MOVI_16) */ + EMPTY, + { MOVI_16_F, MOVI_16_M, MOVI_16_LENGTH, C (MOVI_IMM_64_PCREL, MOVI_32) }, + /* C (MOVI_IMM_64_PCREL, MOVI_32) */ + { MOVI_32_F, MOVI_32_M, MOVI_32_LENGTH, C (MOVI_IMM_64_PCREL, MOVI_48) }, + /* C (MOVI_IMM_64_PCREL, MOVI_48) */ + { MOVI_48_F, MOVI_48_M, MOVI_48_LENGTH, C (MOVI_IMM_64_PCREL, MOVI_64) }, + /* C (MOVI_IMM_64_PCREL, MOVI_64) */ + { 0, 0, MOVI_64_LENGTH, 0 }, + /* C (MOVI_IMM_64_PCREL, MOVI_PLT) */ + { 0, 0, MOVI_64_LENGTH, 0 }, + EMPTY, + /* C (MOVI_IMM_64_PCREL, MOVI_GOTPC) */ + { 0, 0, MOVI_64_LENGTH, 0 }, + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, + +#endif /* HAVE_SH64 */ + +}; + +#undef EMPTY + +static struct hash_control *opcode_hash_control; /* Opcode mnemonics */ + + +#ifdef OBJ_ELF +/* Determinet whether the symbol needs any kind of PIC relocation. */ + +inline static int +sh_PIC_related_p (sym) + symbolS *sym; +{ + expressionS *exp; + + if (! sym) + return 0; + + if (sym == GOT_symbol) + return 1; + +#ifdef HAVE_SH64 + if (sh_PIC_related_p (*symbol_get_tc (sym))) + return 1; +#endif + + exp = symbol_get_value_expression (sym); + + return (exp->X_op == O_PIC_reloc + || sh_PIC_related_p (exp->X_add_symbol) + || sh_PIC_related_p (exp->X_op_symbol)); +} + +/* Determine the relocation type to be used to represent the + 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; +{ + expressionS *exp = main_exp; + + /* This is here for backward-compatibility only. GCC used to generated: + + f@PLT + . - (.LPCS# + 2) + + but we'd rather be able to handle this as a PIC-related reference + plus/minus a symbol. However, gas' parser gives us: + + O_subtract (O_add (f@PLT, .), .LPCS#+2) + + so we attempt to transform this into: + + O_subtract (f@PLT, O_subtract (.LPCS#+2, .)) + + which we can handle simply below. */ + if (exp->X_op == O_subtract) + { + if (sh_PIC_related_p (exp->X_op_symbol)) + return 1; + + exp = symbol_get_value_expression (exp->X_add_symbol); + + if (exp && sh_PIC_related_p (exp->X_op_symbol)) + return 1; + + if (exp && exp->X_op == O_add + && sh_PIC_related_p (exp->X_add_symbol)) + { + symbolS *sym = exp->X_add_symbol; + + exp->X_op = O_subtract; + exp->X_add_symbol = main_exp->X_op_symbol; + + main_exp->X_op_symbol = main_exp->X_add_symbol; + main_exp->X_add_symbol = sym; + + main_exp->X_add_number += exp->X_add_number; + exp->X_add_number = 0; + } + + exp = main_exp; + } + else if (exp->X_op == O_add && sh_PIC_related_p (exp->X_op_symbol)) + return 1; + + if (exp->X_op == O_symbol || exp->X_op == O_add || exp->X_op == O_subtract) + { +#ifdef HAVE_SH64 + if (exp->X_add_symbol + && (exp->X_add_symbol == GOT_symbol + || (GOT_symbol + && *symbol_get_tc (exp->X_add_symbol) == GOT_symbol))) + { + switch (*r_type_p) + { + case BFD_RELOC_SH_IMM_LOW16: + *r_type_p = BFD_RELOC_SH_GOTPC_LOW16; + break; + + case BFD_RELOC_SH_IMM_MEDLOW16: + *r_type_p = BFD_RELOC_SH_GOTPC_MEDLOW16; + break; + + case BFD_RELOC_SH_IMM_MEDHI16: + *r_type_p = BFD_RELOC_SH_GOTPC_MEDHI16; + break; + + case BFD_RELOC_SH_IMM_HI16: + *r_type_p = BFD_RELOC_SH_GOTPC_HI16; + break; + + case BFD_RELOC_NONE: + case BFD_RELOC_UNUSED: + *r_type_p = BFD_RELOC_SH_GOTPC; + break; + + default: + abort (); + } + return 0; + } +#else + if (exp->X_add_symbol && exp->X_add_symbol == GOT_symbol) + { + *r_type_p = BFD_RELOC_SH_GOTPC; + return 0; + } +#endif + exp = symbol_get_value_expression (exp->X_add_symbol); + if (! exp) + return 0; + } + + if (exp->X_op == O_PIC_reloc) + { +#ifdef HAVE_SH64 + switch (*r_type_p) + { + case BFD_RELOC_NONE: + case BFD_RELOC_UNUSED: + *r_type_p = exp->X_md; + break; + + case BFD_RELOC_SH_IMM_LOW16: + switch (exp->X_md) + { + case BFD_RELOC_32_GOTOFF: + *r_type_p = BFD_RELOC_SH_GOTOFF_LOW16; + break; + + case BFD_RELOC_SH_GOTPLT32: + *r_type_p = BFD_RELOC_SH_GOTPLT_LOW16; + break; + + case BFD_RELOC_32_GOT_PCREL: + *r_type_p = BFD_RELOC_SH_GOT_LOW16; + break; + + case BFD_RELOC_32_PLT_PCREL: + *r_type_p = BFD_RELOC_SH_PLT_LOW16; + break; + + default: + abort (); + } + break; + + case BFD_RELOC_SH_IMM_MEDLOW16: + switch (exp->X_md) + { + case BFD_RELOC_32_GOTOFF: + *r_type_p = BFD_RELOC_SH_GOTOFF_MEDLOW16; + break; + + case BFD_RELOC_SH_GOTPLT32: + *r_type_p = BFD_RELOC_SH_GOTPLT_MEDLOW16; + break; + + case BFD_RELOC_32_GOT_PCREL: + *r_type_p = BFD_RELOC_SH_GOT_MEDLOW16; + break; + + case BFD_RELOC_32_PLT_PCREL: + *r_type_p = BFD_RELOC_SH_PLT_MEDLOW16; + break; + + default: + abort (); + } + break; + + case BFD_RELOC_SH_IMM_MEDHI16: + switch (exp->X_md) + { + case BFD_RELOC_32_GOTOFF: + *r_type_p = BFD_RELOC_SH_GOTOFF_MEDHI16; + break; + + case BFD_RELOC_SH_GOTPLT32: + *r_type_p = BFD_RELOC_SH_GOTPLT_MEDHI16; + break; + + case BFD_RELOC_32_GOT_PCREL: + *r_type_p = BFD_RELOC_SH_GOT_MEDHI16; + break; + + case BFD_RELOC_32_PLT_PCREL: + *r_type_p = BFD_RELOC_SH_PLT_MEDHI16; + break; + + default: + abort (); + } + break; + + case BFD_RELOC_SH_IMM_HI16: + switch (exp->X_md) + { + case BFD_RELOC_32_GOTOFF: + *r_type_p = BFD_RELOC_SH_GOTOFF_HI16; + break; + + case BFD_RELOC_SH_GOTPLT32: + *r_type_p = BFD_RELOC_SH_GOTPLT_HI16; + break; + + case BFD_RELOC_32_GOT_PCREL: + *r_type_p = BFD_RELOC_SH_GOT_HI16; + break; + + case BFD_RELOC_32_PLT_PCREL: + *r_type_p = BFD_RELOC_SH_PLT_HI16; + break; + + default: + abort (); + } + break; + + default: + abort (); + } +#else + *r_type_p = exp->X_md; +#endif + if (exp == main_exp) + exp->X_op = O_symbol; + else + { + main_exp->X_add_symbol = exp->X_add_symbol; + main_exp->X_add_number += exp->X_add_number; + } + } + else + return (sh_PIC_related_p (exp->X_add_symbol) + || sh_PIC_related_p (exp->X_op_symbol)); + + return 0; +} + +/* 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; +{ + bfd_reloc_code_real_type r_type = BFD_RELOC_UNUSED; + + if (sh_check_fixup (exp, &r_type)) + as_bad (_("Invalid PIC expression.")); + + if (r_type == BFD_RELOC_UNUSED) + switch (size) + { + case 1: + r_type = BFD_RELOC_8; + break; + + case 2: + r_type = BFD_RELOC_16; + break; + + case 4: + r_type = BFD_RELOC_32; + break; + +#ifdef HAVE_SH64 + case 8: + r_type = BFD_RELOC_64; + break; +#endif + + default: + goto error; + } + else if (size != 4) + { + error: + as_bad (_("unsupported BFD relocation size %u"), size); + r_type = BFD_RELOC_UNUSED; + } + + fix_new_exp (frag, off, size, exp, 0, r_type); +} + +/* The regular cons() function, that reads constants, doesn't support + 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. */ +static void +sh_elf_cons (nbytes) + register int nbytes; /* 1=.byte, 2=.word, 4=.long */ +{ + expressionS exp; + +#ifdef HAVE_SH64 + + /* Update existing range to include a previous insn, if there was one. */ + sh64_update_contents_mark (true); + + /* We need to make sure the contents type is set to data. */ + sh64_flag_output (); + +#endif /* HAVE_SH64 */ + + if (is_it_end_of_statement ()) + { + demand_empty_rest_of_line (); + return; + } + + do + { + expression (&exp); + emit_expr (&exp, (unsigned int) nbytes); + } + while (*input_line_pointer++ == ','); + + input_line_pointer--; /* Put terminator back into stream. */ + if (*input_line_pointer == '#' || *input_line_pointer == '!') + { + while (! is_end_of_line[(unsigned char) *input_line_pointer++]); + } + else + demand_empty_rest_of_line (); +} +#endif /* OBJ_ELF */ + + +/* This function is called once, at assembler startup time. This should + set up all the tables, etc that the MD part of the assembler needs. */ + +void +md_begin () +{ + sh_opcode_info *opcode; + char *prev_name = ""; + int target_arch; + + target_arch = arch_sh1_up & ~(sh_dsp ? arch_sh3e_up : arch_sh_dsp_up); + valid_arch = target_arch; + +#ifdef HAVE_SH64 + shmedia_md_begin (); +#endif + + opcode_hash_control = hash_new (); + + /* Insert unique names into hash table. */ + for (opcode = sh_table; opcode->name; opcode++) + { + if (strcmp (prev_name, opcode->name)) + { + if (! (opcode->arch & target_arch)) + continue; + prev_name = opcode->name; + hash_insert (opcode_hash_control, opcode->name, (char *) opcode); + } + else + { + /* Make all the opcodes with the same name point to the same + string. */ + opcode->name = prev_name; + } + } +} + +static int reg_m; +static int reg_n; +static int reg_x, reg_y; +static int reg_efg; +static int reg_b; + +#define IDENT_CHAR(c) (ISALNUM (c) || (c) == '_') + +/* 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; +{ + char l0 = TOLOWER (src[0]); + char l1 = l0 ? TOLOWER (src[1]) : 0; + + /* We use ! IDENT_CHAR for the next character after the register name, to + make sure that we won't accidentally recognize a symbol name such as + 'sram' or sr_ram as being a reference to the register 'sr'. */ + + if (l0 == 'r') + { + if (l1 == '1') + { + if (src[2] >= '0' && src[2] <= '5' + && ! IDENT_CHAR ((unsigned char) src[3])) + { + *mode = A_REG_N; + *reg = 10 + src[2] - '0'; + return 3; + } + } + if (l1 >= '0' && l1 <= '9' + && ! IDENT_CHAR ((unsigned char) src[2])) + { + *mode = A_REG_N; + *reg = (l1 - '0'); + return 2; + } + if (l1 >= '0' && l1 <= '7' && strncasecmp (&src[2], "_bank", 5) == 0 + && ! IDENT_CHAR ((unsigned char) src[7])) + { + *mode = A_REG_B; + *reg = (l1 - '0'); + return 7; + } + + if (l1 == 'e' && ! IDENT_CHAR ((unsigned char) src[2])) + { + *mode = A_RE; + return 2; + } + if (l1 == 's' && ! IDENT_CHAR ((unsigned char) src[2])) + { + *mode = A_RS; + return 2; + } + } + + if (l0 == 'a') + { + if (l1 == '0') + { + if (! IDENT_CHAR ((unsigned char) src[2])) + { + *mode = DSP_REG_N; + *reg = A_A0_NUM; + return 2; + } + if (TOLOWER (src[2]) == 'g' && ! IDENT_CHAR ((unsigned char) src[3])) + { + *mode = DSP_REG_N; + *reg = A_A0G_NUM; + return 3; + } + } + if (l1 == '1') + { + if (! IDENT_CHAR ((unsigned char) src[2])) + { + *mode = DSP_REG_N; + *reg = A_A1_NUM; + return 2; + } + if (TOLOWER (src[2]) == 'g' && ! IDENT_CHAR ((unsigned char) src[3])) + { + *mode = DSP_REG_N; + *reg = A_A1G_NUM; + return 3; + } + } + + if (l1 == 'x' && src[2] >= '0' && src[2] <= '1' + && ! IDENT_CHAR ((unsigned char) src[3])) + { + *mode = A_REG_N; + *reg = 4 + (l1 - '0'); + return 3; + } + if (l1 == 'y' && src[2] >= '0' && src[2] <= '1' + && ! IDENT_CHAR ((unsigned char) src[3])) + { + *mode = A_REG_N; + *reg = 6 + (l1 - '0'); + return 3; + } + if (l1 == 's' && src[2] >= '0' && src[2] <= '3' + && ! IDENT_CHAR ((unsigned char) src[3])) + { + int n = l1 - '0'; + + *mode = A_REG_N; + *reg = n | ((~n & 2) << 1); + return 3; + } + } + + if (l0 == 'i' && l1 && ! IDENT_CHAR ((unsigned char) src[2])) + { + if (l1 == 's') + { + *mode = A_REG_N; + *reg = 8; + return 2; + } + if (l1 == 'x') + { + *mode = A_REG_N; + *reg = 8; + return 2; + } + if (l1 == 'y') + { + *mode = A_REG_N; + *reg = 9; + return 2; + } + } + + if (l0 == 'x' && l1 >= '0' && l1 <= '1' + && ! IDENT_CHAR ((unsigned char) src[2])) + { + *mode = DSP_REG_N; + *reg = A_X0_NUM + l1 - '0'; + return 2; + } + + if (l0 == 'y' && l1 >= '0' && l1 <= '1' + && ! IDENT_CHAR ((unsigned char) src[2])) + { + *mode = DSP_REG_N; + *reg = A_Y0_NUM + l1 - '0'; + return 2; + } + + if (l0 == 'm' && l1 >= '0' && l1 <= '1' + && ! IDENT_CHAR ((unsigned char) src[2])) + { + *mode = DSP_REG_N; + *reg = l1 == '0' ? A_M0_NUM : A_M1_NUM; + return 2; + } + + if (l0 == 's' + && l1 == 's' + && TOLOWER (src[2]) == 'r' && ! IDENT_CHAR ((unsigned char) src[3])) + { + *mode = A_SSR; + return 3; + } + + if (l0 == 's' && l1 == 'p' && TOLOWER (src[2]) == 'c' + && ! IDENT_CHAR ((unsigned char) src[3])) + { + *mode = A_SPC; + return 3; + } + + if (l0 == 's' && l1 == 'g' && TOLOWER (src[2]) == 'r' + && ! IDENT_CHAR ((unsigned char) src[3])) + { + *mode = A_SGR; + return 3; + } + + if (l0 == 'd' && l1 == 's' && TOLOWER (src[2]) == 'r' + && ! IDENT_CHAR ((unsigned char) src[3])) + { + *mode = A_DSR; + return 3; + } + + if (l0 == 'd' && l1 == 'b' && TOLOWER (src[2]) == 'r' + && ! IDENT_CHAR ((unsigned char) src[3])) + { + *mode = A_DBR; + return 3; + } + + if (l0 == 's' && l1 == 'r' && ! IDENT_CHAR ((unsigned char) src[2])) + { + *mode = A_SR; + return 2; + } + + if (l0 == 's' && l1 == 'p' && ! IDENT_CHAR ((unsigned char) src[2])) + { + *mode = A_REG_N; + *reg = 15; + return 2; + } + + if (l0 == 'p' && l1 == 'r' && ! IDENT_CHAR ((unsigned char) src[2])) + { + *mode = A_PR; + return 2; + } + if (l0 == 'p' && l1 == 'c' && ! IDENT_CHAR ((unsigned char) src[2])) + { + /* Don't use A_DISP_PC here - that would accept stuff like 'mova pc,r0' + and use an uninitialized immediate. */ + *mode = A_PC; + return 2; + } + if (l0 == 'g' && l1 == 'b' && TOLOWER (src[2]) == 'r' + && ! IDENT_CHAR ((unsigned char) src[3])) + { + *mode = A_GBR; + return 3; + } + if (l0 == 'v' && l1 == 'b' && TOLOWER (src[2]) == 'r' + && ! IDENT_CHAR ((unsigned char) src[3])) + { + *mode = A_VBR; + return 3; + } + + if (l0 == 'm' && l1 == 'a' && TOLOWER (src[2]) == 'c' + && ! IDENT_CHAR ((unsigned char) src[4])) + { + if (TOLOWER (src[3]) == 'l') + { + *mode = A_MACL; + return 4; + } + if (TOLOWER (src[3]) == 'h') + { + *mode = A_MACH; + return 4; + } + } + if (l0 == 'm' && l1 == 'o' && TOLOWER (src[2]) == 'd' + && ! IDENT_CHAR ((unsigned char) src[3])) + { + *mode = A_MOD; + return 3; + } + if (l0 == 'f' && l1 == 'r') + { + if (src[2] == '1') + { + if (src[3] >= '0' && src[3] <= '5' + && ! IDENT_CHAR ((unsigned char) src[4])) + { + *mode = F_REG_N; + *reg = 10 + src[3] - '0'; + return 4; + } + } + if (src[2] >= '0' && src[2] <= '9' + && ! IDENT_CHAR ((unsigned char) src[3])) + { + *mode = F_REG_N; + *reg = (src[2] - '0'); + return 3; + } + } + if (l0 == 'd' && l1 == 'r') + { + if (src[2] == '1') + { + if (src[3] >= '0' && src[3] <= '4' && ! ((src[3] - '0') & 1) + && ! IDENT_CHAR ((unsigned char) src[4])) + { + *mode = D_REG_N; + *reg = 10 + src[3] - '0'; + return 4; + } + } + if (src[2] >= '0' && src[2] <= '8' && ! ((src[2] - '0') & 1) + && ! IDENT_CHAR ((unsigned char) src[3])) + { + *mode = D_REG_N; + *reg = (src[2] - '0'); + return 3; + } + } + if (l0 == 'x' && l1 == 'd') + { + if (src[2] == '1') + { + if (src[3] >= '0' && src[3] <= '4' && ! ((src[3] - '0') & 1) + && ! IDENT_CHAR ((unsigned char) src[4])) + { + *mode = X_REG_N; + *reg = 11 + src[3] - '0'; + return 4; + } + } + if (src[2] >= '0' && src[2] <= '8' && ! ((src[2] - '0') & 1) + && ! IDENT_CHAR ((unsigned char) src[3])) + { + *mode = X_REG_N; + *reg = (src[2] - '0') + 1; + return 3; + } + } + if (l0 == 'f' && l1 == 'v') + { + if (src[2] == '1'&& src[3] == '2' && ! IDENT_CHAR ((unsigned char) src[4])) + { + *mode = V_REG_N; + *reg = 12; + return 4; + } + if ((src[2] == '0' || src[2] == '4' || src[2] == '8') + && ! IDENT_CHAR ((unsigned char) src[3])) + { + *mode = V_REG_N; + *reg = (src[2] - '0'); + return 3; + } + } + if (l0 == 'f' && l1 == 'p' && TOLOWER (src[2]) == 'u' + && TOLOWER (src[3]) == 'l' + && ! IDENT_CHAR ((unsigned char) src[4])) + { + *mode = FPUL_N; + return 4; + } + + if (l0 == 'f' && l1 == 'p' && TOLOWER (src[2]) == 's' + && TOLOWER (src[3]) == 'c' + && TOLOWER (src[4]) == 'r' && ! IDENT_CHAR ((unsigned char) src[5])) + { + *mode = FPSCR_N; + return 5; + } + + if (l0 == 'x' && l1 == 'm' && TOLOWER (src[2]) == 't' + && TOLOWER (src[3]) == 'r' + && TOLOWER (src[4]) == 'x' && ! IDENT_CHAR ((unsigned char) src[5])) + { + *mode = XMTRX_M4; + return 5; + } + + return 0; +} + +static char * +parse_exp (s, op) + char *s; + sh_operand_info *op; +{ + char *save; + char *new; + + save = input_line_pointer; + input_line_pointer = s; + expression (&op->immediate); + if (op->immediate.X_op == O_absent) + as_bad (_("missing operand")); +#ifdef OBJ_ELF + else if (op->immediate.X_op == O_PIC_reloc + || sh_PIC_related_p (op->immediate.X_add_symbol) + || sh_PIC_related_p (op->immediate.X_op_symbol)) + as_bad (_("misplaced PIC operand")); +#endif + new = input_line_pointer; + input_line_pointer = save; + return new; +} + +/* The many forms of operand: + + Rn Register direct + @Rn Register indirect + @Rn+ Autoincrement + @-Rn Autodecrement + @(disp:4,Rn) + @(disp:8,GBR) + @(disp:8,PC) + + @(R0,Rn) + @(R0,GBR) + + disp:8 + disp:12 + #imm8 + pr, gbr, vbr, macl, mach + */ + +static char * +parse_at (src, op) + char *src; + sh_operand_info *op; +{ + int len; + int mode; + src++; + if (src[0] == '-') + { + /* Must be predecrement. */ + src++; + + len = parse_reg (src, &mode, &(op->reg)); + if (mode != A_REG_N) + as_bad (_("illegal register after @-")); + + op->type = A_DEC_N; + src += len; + } + else if (src[0] == '(') + { + /* Could be @(disp, rn), @(disp, gbr), @(disp, pc), @(r0, gbr) or + @(r0, rn). */ + src++; + len = parse_reg (src, &mode, &(op->reg)); + if (len && mode == A_REG_N) + { + src += len; + if (op->reg != 0) + { + as_bad (_("must be @(r0,...)")); + } + if (src[0] == ',') + { + src++; + /* Now can be rn or gbr. */ + len = parse_reg (src, &mode, &(op->reg)); + } + else + { + len = 0; + } + if (len) + { + if (mode == A_GBR) + { + op->type = A_R0_GBR; + } + else if (mode == A_REG_N) + { + op->type = A_IND_R0_REG_N; + } + else + { + as_bad (_("syntax error in @(r0,...)")); + } + } + else + { + as_bad (_("syntax error in @(r0...)")); + } + } + else + { + /* Must be an @(disp,.. thing). */ + src = parse_exp (src, op); + if (src[0] == ',') + src++; + /* Now can be rn, gbr or pc. */ + len = parse_reg (src, &mode, &op->reg); + if (len) + { + if (mode == A_REG_N) + { + op->type = A_DISP_REG_N; + } + else if (mode == A_GBR) + { + op->type = A_DISP_GBR; + } + else if (mode == A_PC) + { + /* We want @(expr, pc) to uniformly address . + expr, + no matter if expr is a constant, or a more complex + expression, e.g. sym-. or sym1-sym2. + However, we also used to accept @(sym,pc) + as adressing sym, i.e. meaning the same as plain sym. + Some existing code does use the @(sym,pc) syntax, so + we give it the old semantics for now, but warn about + its use, so that users have some time to fix their code. + + Note that due to this backward compatibility hack, + we'll get unexpected results when @(offset, pc) is used, + and offset is a symbol that is set later to an an address + difference, or an external symbol that is set to an + address difference in another source file, so we want to + eventually remove it. */ + if (op->immediate.X_op == O_symbol) + { + op->type = A_DISP_PC; + as_warn (_("Deprecated syntax.")); + } + else + { + op->type = A_DISP_PC_ABS; + /* Such operands don't get corrected for PC==.+4, so + make the correction here. */ + op->immediate.X_add_number -= 4; + } + } + else + { + as_bad (_("syntax error in @(disp,[Rn, gbr, pc])")); + } + } + else + { + as_bad (_("syntax error in @(disp,[Rn, gbr, pc])")); + } + } + src += len; + if (src[0] != ')') + as_bad (_("expecting )")); + else + src++; + } + else + { + src += parse_reg (src, &mode, &(op->reg)); + if (mode != A_REG_N) + as_bad (_("illegal register after @")); + + if (src[0] == '+') + { + char l0, l1; + + src++; + l0 = TOLOWER (src[0]); + l1 = TOLOWER (src[1]); + + if ((l0 == 'r' && l1 == '8') + || (l0 == 'i' && (l1 == 'x' || l1 == 's'))) + { + src += 2; + op->type = A_PMOD_N; + } + else if ( (l0 == 'r' && l1 == '9') + || (l0 == 'i' && l1 == 'y')) + { + src += 2; + op->type = A_PMODY_N; + } + else + op->type = A_INC_N; + } + else + op->type = A_IND_N; + } + return src; +} + +static void +get_operand (ptr, op) + char **ptr; + sh_operand_info *op; +{ + char *src = *ptr; + int mode = -1; + unsigned int len; + + if (src[0] == '#') + { + src++; + *ptr = parse_exp (src, op); + op->type = A_IMM; + return; + } + + else if (src[0] == '@') + { + *ptr = parse_at (src, op); + return; + } + len = parse_reg (src, &mode, &(op->reg)); + if (len) + { + *ptr = src + len; + op->type = mode; + return; + } + else + { + /* Not a reg, the only thing left is a displacement. */ + *ptr = parse_exp (src, op); + op->type = A_DISP_PC; + return; + } +} + +static char * +get_operands (info, args, operand) + sh_opcode_info *info; + char *args; + sh_operand_info *operand; +{ + char *ptr = args; + if (info->arg[0]) + { + /* The pre-processor will eliminate whitespace in front of '@' + after the first argument; we may be called multiple times + from assemble_ppi, so don't insist on finding whitespace here. */ + if (*ptr == ' ') + ptr++; + + get_operand (&ptr, operand + 0); + if (info->arg[1]) + { + if (*ptr == ',') + { + ptr++; + } + get_operand (&ptr, operand + 1); + /* ??? Hack: psha/pshl have a varying operand number depending on + the type of the first operand. We handle this by having the + three-operand version first and reducing the number of operands + parsed to two if we see that the first operand is an immediate. + This works because no insn with three operands has an immediate + as first operand. */ + if (info->arg[2] && operand[0].type != A_IMM) + { + if (*ptr == ',') + { + ptr++; + } + get_operand (&ptr, operand + 2); + } + else + { + operand[2].type = 0; + } + } + else + { + operand[1].type = 0; + operand[2].type = 0; + } + } + else + { + operand[0].type = 0; + operand[1].type = 0; + operand[2].type = 0; + } + return ptr; +} + +/* Passed a pointer to a list of opcodes which use different + addressing modes, return the opcode which matches the opcodes + provided. */ + +static sh_opcode_info * +get_specific (opcode, operands) + sh_opcode_info *opcode; + sh_operand_info *operands; +{ + sh_opcode_info *this_try = opcode; + char *name = opcode->name; + int n = 0; + + while (opcode->name) + { + this_try = opcode++; + if (this_try->name != name) + { + /* We've looked so far down the table that we've run out of + opcodes with the same name. */ + return 0; + } + + /* Look at both operands needed by the opcodes and provided by + the user - since an arg test will often fail on the same arg + again and again, we'll try and test the last failing arg the + first on each opcode try. */ + for (n = 0; this_try->arg[n]; n++) + { + sh_operand_info *user = operands + n; + sh_arg_type arg = this_try->arg[n]; + + switch (arg) + { + case A_DISP_PC: + if (user->type == A_DISP_PC_ABS) + break; + /* Fall through. */ + case A_IMM: + case A_BDISP12: + case A_BDISP8: + case A_DISP_GBR: + case A_MACH: + case A_PR: + case A_MACL: + if (user->type != arg) + goto fail; + break; + case A_R0: + /* opcode needs r0 */ + if (user->type != A_REG_N || user->reg != 0) + goto fail; + break; + case A_R0_GBR: + if (user->type != A_R0_GBR || user->reg != 0) + goto fail; + break; + case F_FR0: + if (user->type != F_REG_N || user->reg != 0) + goto fail; + break; + + case A_REG_N: + case A_INC_N: + case A_DEC_N: + case A_IND_N: + case A_IND_R0_REG_N: + case A_DISP_REG_N: + case F_REG_N: + case D_REG_N: + case X_REG_N: + case V_REG_N: + case FPUL_N: + case FPSCR_N: + case A_PMOD_N: + case A_PMODY_N: + case DSP_REG_N: + /* Opcode needs rn */ + if (user->type != arg) + goto fail; + reg_n = user->reg; + break; + case DX_REG_N: + if (user->type != D_REG_N && user->type != X_REG_N) + goto fail; + reg_n = user->reg; + break; + case A_GBR: + case A_SR: + case A_VBR: + case A_DSR: + case A_MOD: + case A_RE: + case A_RS: + case A_SSR: + case A_SPC: + case A_SGR: + case A_DBR: + if (user->type != arg) + goto fail; + break; + + case A_REG_B: + if (user->type != arg) + goto fail; + reg_b = user->reg; + break; + + case A_REG_M: + case A_INC_M: + case A_DEC_M: + case A_IND_M: + case A_IND_R0_REG_M: + case A_DISP_REG_M: + case DSP_REG_M: + /* Opcode needs rn */ + if (user->type != arg - A_REG_M + A_REG_N) + goto fail; + reg_m = user->reg; + break; + + case DSP_REG_X: + if (user->type != DSP_REG_N) + goto fail; + switch (user->reg) + { + case A_X0_NUM: + reg_x = 0; + break; + case A_X1_NUM: + reg_x = 1; + break; + case A_A0_NUM: + reg_x = 2; + break; + case A_A1_NUM: + reg_x = 3; + break; + default: + goto fail; + } + break; + + case DSP_REG_Y: + if (user->type != DSP_REG_N) + goto fail; + switch (user->reg) + { + case A_Y0_NUM: + reg_y = 0; + break; + case A_Y1_NUM: + reg_y = 1; + break; + case A_M0_NUM: + reg_y = 2; + break; + case A_M1_NUM: + reg_y = 3; + break; + default: + goto fail; + } + break; + + case DSP_REG_E: + if (user->type != DSP_REG_N) + goto fail; + switch (user->reg) + { + case A_X0_NUM: + reg_efg = 0 << 10; + break; + case A_X1_NUM: + reg_efg = 1 << 10; + break; + case A_Y0_NUM: + reg_efg = 2 << 10; + break; + case A_A1_NUM: + reg_efg = 3 << 10; + break; + default: + goto fail; + } + break; + + case DSP_REG_F: + if (user->type != DSP_REG_N) + goto fail; + switch (user->reg) + { + case A_Y0_NUM: + reg_efg |= 0 << 8; + break; + case A_Y1_NUM: + reg_efg |= 1 << 8; + break; + case A_X0_NUM: + reg_efg |= 2 << 8; + break; + case A_A1_NUM: + reg_efg |= 3 << 8; + break; + default: + goto fail; + } + break; + + case DSP_REG_G: + if (user->type != DSP_REG_N) + goto fail; + switch (user->reg) + { + case A_M0_NUM: + reg_efg |= 0 << 2; + break; + case A_M1_NUM: + reg_efg |= 1 << 2; + break; + case A_A0_NUM: + reg_efg |= 2 << 2; + break; + case A_A1_NUM: + reg_efg |= 3 << 2; + break; + default: + goto fail; + } + break; + + case A_A0: + if (user->type != DSP_REG_N || user->reg != A_A0_NUM) + goto fail; + break; + case A_X0: + if (user->type != DSP_REG_N || user->reg != A_X0_NUM) + goto fail; + break; + case A_X1: + if (user->type != DSP_REG_N || user->reg != A_X1_NUM) + goto fail; + break; + case A_Y0: + if (user->type != DSP_REG_N || user->reg != A_Y0_NUM) + goto fail; + break; + case A_Y1: + if (user->type != DSP_REG_N || user->reg != A_Y1_NUM) + goto fail; + break; + + case F_REG_M: + case D_REG_M: + case X_REG_M: + case V_REG_M: + case FPUL_M: + case FPSCR_M: + /* Opcode needs rn */ + if (user->type != arg - F_REG_M + F_REG_N) + goto fail; + reg_m = user->reg; + break; + case DX_REG_M: + if (user->type != D_REG_N && user->type != X_REG_N) + goto fail; + reg_m = user->reg; + break; + case XMTRX_M4: + if (user->type != XMTRX_M4) + goto fail; + reg_m = 4; + break; + + default: + printf (_("unhandled %d\n"), arg); + goto fail; + } + } + if ( !(valid_arch & this_try->arch)) + goto fail; + valid_arch &= this_try->arch; + return this_try; + fail: + ; + } + + return 0; +} + +static void +insert (where, how, pcrel, op) + char *where; + int how; + int pcrel; + sh_operand_info *op; +{ + fix_new_exp (frag_now, + where - frag_now->fr_literal, + 2, + &op->immediate, + pcrel, + how); +} + +static void +build_relax (opcode, op) + sh_opcode_info *opcode; + sh_operand_info *op; +{ + int high_byte = target_big_endian ? 0 : 1; + char *p; + + if (opcode->arg[0] == A_BDISP8) + { + int what = (opcode->nibbles[1] & 4) ? COND_JUMP_DELAY : COND_JUMP; + p = frag_var (rs_machine_dependent, + md_relax_table[C (what, COND32)].rlx_length, + md_relax_table[C (what, COND8)].rlx_length, + C (what, 0), + op->immediate.X_add_symbol, + op->immediate.X_add_number, + 0); + p[high_byte] = (opcode->nibbles[0] << 4) | (opcode->nibbles[1]); + } + else if (opcode->arg[0] == A_BDISP12) + { + p = frag_var (rs_machine_dependent, + md_relax_table[C (UNCOND_JUMP, UNCOND32)].rlx_length, + md_relax_table[C (UNCOND_JUMP, UNCOND12)].rlx_length, + C (UNCOND_JUMP, 0), + op->immediate.X_add_symbol, + op->immediate.X_add_number, + 0); + p[high_byte] = (opcode->nibbles[0] << 4); + } + +} + +/* Insert ldrs & ldre with fancy relocations that relaxation can recognize. */ + +static char * +insert_loop_bounds (output, operand) + char *output; + sh_operand_info *operand; +{ + char *name; + symbolS *end_sym; + + /* Since the low byte of the opcode will be overwritten by the reloc, we + can just stash the high byte into both bytes and ignore endianness. */ + output[0] = 0x8c; + output[1] = 0x8c; + insert (output, BFD_RELOC_SH_LOOP_START, 1, operand); + insert (output, BFD_RELOC_SH_LOOP_END, 1, operand + 1); + + if (sh_relax) + { + static int count = 0; + + /* If the last loop insn is a two-byte-insn, it is in danger of being + swapped with the insn after it. To prevent this, create a new + symbol - complete with SH_LABEL reloc - after the last loop insn. + If the last loop insn is four bytes long, the symbol will be + right in the middle, but four byte insns are not swapped anyways. */ + /* A REPEAT takes 6 bytes. The SH has a 32 bit address space. + Hence a 9 digit number should be enough to count all REPEATs. */ + name = alloca (11); + sprintf (name, "_R%x", count++ & 0x3fffffff); + end_sym = symbol_new (name, undefined_section, 0, &zero_address_frag); + /* Make this a local symbol. */ +#ifdef OBJ_COFF + SF_SET_LOCAL (end_sym); +#endif /* OBJ_COFF */ + symbol_table_insert (end_sym); + end_sym->sy_value = operand[1].immediate; + end_sym->sy_value.X_add_number += 2; + fix_new (frag_now, frag_now_fix (), 2, end_sym, 0, 1, BFD_RELOC_SH_LABEL); + } + + output = frag_more (2); + output[0] = 0x8e; + output[1] = 0x8e; + insert (output, BFD_RELOC_SH_LOOP_START, 1, operand); + insert (output, BFD_RELOC_SH_LOOP_END, 1, operand + 1); + + return frag_more (2); +} + +/* 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; +{ + int index; + char nbuf[4]; + char *output = frag_more (2); + unsigned int size = 2; + int low_byte = target_big_endian ? 1 : 0; + nbuf[0] = 0; + nbuf[1] = 0; + nbuf[2] = 0; + nbuf[3] = 0; + + for (index = 0; index < 4; index++) + { + sh_nibble_type i = opcode->nibbles[index]; + if (i < 16) + { + nbuf[index] = i; + } + else + { + switch (i) + { + case REG_N: + nbuf[index] = reg_n; + break; + case REG_M: + nbuf[index] = reg_m; + break; + case SDT_REG_N: + if (reg_n < 2 || reg_n > 5) + as_bad (_("Invalid register: 'r%d'"), reg_n); + nbuf[index] = (reg_n & 3) | 4; + break; + case REG_NM: + nbuf[index] = reg_n | (reg_m >> 2); + break; + case REG_B: + nbuf[index] = reg_b | 0x08; + break; + case IMM0_4BY4: + insert (output + low_byte, BFD_RELOC_SH_IMM4BY4, 0, operand); + break; + case IMM0_4BY2: + insert (output + low_byte, BFD_RELOC_SH_IMM4BY2, 0, operand); + break; + case IMM0_4: + insert (output + low_byte, BFD_RELOC_SH_IMM4, 0, operand); + break; + case IMM1_4BY4: + insert (output + low_byte, BFD_RELOC_SH_IMM4BY4, 0, operand + 1); + break; + case IMM1_4BY2: + insert (output + low_byte, BFD_RELOC_SH_IMM4BY2, 0, operand + 1); + break; + case IMM1_4: + insert (output + low_byte, BFD_RELOC_SH_IMM4, 0, operand + 1); + break; + case IMM0_8BY4: + insert (output + low_byte, BFD_RELOC_SH_IMM8BY4, 0, operand); + break; + case IMM0_8BY2: + insert (output + low_byte, BFD_RELOC_SH_IMM8BY2, 0, operand); + break; + case IMM0_8: + insert (output + low_byte, BFD_RELOC_SH_IMM8, 0, operand); + break; + case IMM1_8BY4: + insert (output + low_byte, BFD_RELOC_SH_IMM8BY4, 0, operand + 1); + break; + case IMM1_8BY2: + insert (output + low_byte, BFD_RELOC_SH_IMM8BY2, 0, operand + 1); + break; + case IMM1_8: + insert (output + low_byte, BFD_RELOC_SH_IMM8, 0, operand + 1); + break; + case PCRELIMM_8BY4: + insert (output, BFD_RELOC_SH_PCRELIMM8BY4, + operand->type != A_DISP_PC_ABS, operand); + break; + case PCRELIMM_8BY2: + insert (output, BFD_RELOC_SH_PCRELIMM8BY2, + operand->type != A_DISP_PC_ABS, operand); + break; + case REPEAT: + output = insert_loop_bounds (output, operand); + nbuf[index] = opcode->nibbles[3]; + operand += 2; + break; + default: + printf (_("failed for %d\n"), i); + } + } + } + if (!target_big_endian) + { + output[1] = (nbuf[0] << 4) | (nbuf[1]); + output[0] = (nbuf[2] << 4) | (nbuf[3]); + } + else + { + output[0] = (nbuf[0] << 4) | (nbuf[1]); + output[1] = (nbuf[2] << 4) | (nbuf[3]); + } + return size; +} + +/* Find an opcode at the start of *STR_P in the hash table, and set + *STR_P to the first character after the last one read. */ + +static sh_opcode_info * +find_cooked_opcode (str_p) + char **str_p; +{ + char *str = *str_p; + unsigned char *op_start; + unsigned char *op_end; + char name[20]; + int nlen = 0; + + /* Drop leading whitespace. */ + while (*str == ' ') + str++; + + /* Find the op code end. + The pre-processor will eliminate whitespace in front of + any '@' after the first argument; we may be called from + assemble_ppi, so the opcode might be terminated by an '@'. */ + for (op_start = op_end = (unsigned char *) (str); + *op_end + && nlen < 20 + && !is_end_of_line[*op_end] && *op_end != ' ' && *op_end != '@'; + op_end++) + { + unsigned char c = op_start[nlen]; + + /* The machine independent code will convert CMP/EQ into cmp/EQ + because it thinks the '/' is the end of the symbol. Moreover, + all but the first sub-insn is a parallel processing insn won't + be capitalized. Instead of hacking up the machine independent + code, we just deal with it here. */ + c = TOLOWER (c); + name[nlen] = c; + nlen++; + } + + name[nlen] = 0; + *str_p = op_end; + + if (nlen == 0) + as_bad (_("can't find opcode ")); + + return (sh_opcode_info *) hash_find (opcode_hash_control, name); +} + +/* Assemble a parallel processing insn. */ +#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; +{ + int movx = 0; + int movy = 0; + int cond = 0; + int field_b = 0; + char *output; + int move_code; + unsigned int size; + + for (;;) + { + sh_operand_info operand[3]; + + /* Some insn ignore one or more register fields, e.g. psts machl,a0. + Make sure we encode a defined insn pattern. */ + reg_x = 0; + reg_y = 0; + reg_n = 0; + + if (opcode->arg[0] != A_END) + op_end = get_operands (opcode, op_end, operand); + opcode = get_specific (opcode, operand); + if (opcode == 0) + { + /* Couldn't find an opcode which matched the operands. */ + char *where = frag_more (2); + size = 2; + + where[0] = 0x0; + where[1] = 0x0; + as_bad (_("invalid operands for opcode")); + return size; + } + + if (opcode->nibbles[0] != PPI) + as_bad (_("insn can't be combined with parallel processing insn")); + + switch (opcode->nibbles[1]) + { + + case NOPX: + if (movx) + as_bad (_("multiple movx specifications")); + movx = DDT_BASE; + break; + case NOPY: + if (movy) + as_bad (_("multiple movy specifications")); + movy = DDT_BASE; + break; + + case MOVX: + if (movx) + as_bad (_("multiple movx specifications")); + if (reg_n < 4 || reg_n > 5) + as_bad (_("invalid movx address register")); + if (opcode->nibbles[2] & 8) + { + if (reg_m == A_A1_NUM) + movx = 1 << 7; + else if (reg_m != A_A0_NUM) + as_bad (_("invalid movx dsp register")); + } + else + { + if (reg_x > 1) + as_bad (_("invalid movx dsp register")); + movx = reg_x << 7; + } + movx += ((reg_n - 4) << 9) + (opcode->nibbles[2] << 2) + DDT_BASE; + break; + + case MOVY: + if (movy) + as_bad (_("multiple movy specifications")); + if (opcode->nibbles[2] & 8) + { + /* Bit 3 in nibbles[2] is intended for bit 4 of the opcode, + so add 8 more. */ + movy = 8; + if (reg_m == A_A1_NUM) + movy += 1 << 6; + else if (reg_m != A_A0_NUM) + as_bad (_("invalid movy dsp register")); + } + else + { + if (reg_y > 1) + as_bad (_("invalid movy dsp register")); + movy = reg_y << 6; + } + if (reg_n < 6 || reg_n > 7) + as_bad (_("invalid movy address register")); + movy += ((reg_n - 6) << 8) + opcode->nibbles[2] + DDT_BASE; + break; + + case PSH: + if (operand[0].immediate.X_op != O_constant) + as_bad (_("dsp immediate shift value not constant")); + field_b = ((opcode->nibbles[2] << 12) + | (operand[0].immediate.X_add_number & 127) << 4 + | reg_n); + break; + case PPI3: + if (field_b) + as_bad (_("multiple parallel processing specifications")); + field_b = ((opcode->nibbles[2] << 12) + (opcode->nibbles[3] << 8) + + (reg_x << 6) + (reg_y << 4) + reg_n); + break; + case PDC: + if (cond) + as_bad (_("multiple condition specifications")); + cond = opcode->nibbles[2] << 8; + if (*op_end) + goto skip_cond_check; + break; + case PPIC: + if (field_b) + as_bad (_("multiple parallel processing specifications")); + field_b = ((opcode->nibbles[2] << 12) + (opcode->nibbles[3] << 8) + + cond + (reg_x << 6) + (reg_y << 4) + reg_n); + cond = 0; + break; + case PMUL: + if (field_b) + { + if ((field_b & 0xef00) != 0xa100) + as_bad (_("insn cannot be combined with pmuls")); + field_b -= 0x8100; + switch (field_b & 0xf) + { + case A_X0_NUM: + field_b += 0 - A_X0_NUM; + break; + case A_Y0_NUM: + field_b += 1 - A_Y0_NUM; + break; + case A_A0_NUM: + field_b += 2 - A_A0_NUM; + break; + case A_A1_NUM: + field_b += 3 - A_A1_NUM; + break; + default: + as_bad (_("bad padd / psub pmuls output operand")); + } + /* Generate warning if the destination register for padd / psub + and pmuls is the same ( only for A0 or A1 ). + If the last nibble is 1010 then A0 is used in both + padd / psub and pmuls. If it is 1111 then A1 is used + as destination register in both padd / psub and pmuls. */ + + if ((((field_b | reg_efg) & 0x000F) == 0x000A) + || (((field_b | reg_efg) & 0x000F) == 0x000F)) + as_warn (_("destination register is same for parallel insns")); + } + field_b += 0x4000 + reg_efg; + break; + default: + abort (); + } + if (cond) + { + as_bad (_("condition not followed by conditionalizable insn")); + cond = 0; + } + if (! *op_end) + break; + skip_cond_check: + opcode = find_cooked_opcode (&op_end); + if (opcode == NULL) + { + (as_bad + (_("unrecognized characters at end of parallel processing insn"))); + break; + } + } + + move_code = movx | movy; + if (field_b) + { + /* Parallel processing insn. */ + unsigned long ppi_code = (movx | movy | 0xf800) << 16 | field_b; + + output = frag_more (4); + size = 4; + if (! target_big_endian) + { + output[3] = ppi_code >> 8; + output[2] = ppi_code; + } + else + { + output[2] = ppi_code >> 8; + output[3] = ppi_code; + } + move_code |= 0xf800; + } + else + { + /* Just a double data transfer. */ + output = frag_more (2); + size = 2; + } + if (! target_big_endian) + { + output[1] = move_code >> 8; + output[0] = move_code; + } + else + { + output[0] = move_code >> 8; + output[1] = move_code; + } + return size; +} + +/* This is the guts of the machine-dependent assembler. STR points to a + machine dependent instruction. This function is supposed to emit + the frags/bytes it assembles to. */ + +void +md_assemble (str) + char *str; +{ + unsigned char *op_end; + sh_operand_info operand[3]; + sh_opcode_info *opcode; + unsigned int size = 0; + +#ifdef HAVE_SH64 + if (sh64_isa_mode == sh64_isa_shmedia) + { + shmedia_md_assemble (str); + return; + } + else + { + /* If we've seen pseudo-directives, make sure any emitted data or + frags are marked as data. */ + if (seen_insn == false) + { + sh64_update_contents_mark (true); + sh64_set_contents_type (CRT_SH5_ISA16); + } + + seen_insn = true; + } +#endif /* HAVE_SH64 */ + + opcode = find_cooked_opcode (&str); + op_end = str; + + if (opcode == NULL) + { + as_bad (_("unknown opcode")); + return; + } + + if (sh_relax + && ! seg_info (now_seg)->tc_segment_info_data.in_code) + { + /* Output a CODE reloc to tell the linker that the following + bytes are instructions, not data. */ + fix_new (frag_now, frag_now_fix (), 2, &abs_symbol, 0, 0, + BFD_RELOC_SH_CODE); + seg_info (now_seg)->tc_segment_info_data.in_code = 1; + } + + if (opcode->nibbles[0] == PPI) + { + size = assemble_ppi (op_end, opcode); + } + else + { + if (opcode->arg[0] == A_BDISP12 + || opcode->arg[0] == A_BDISP8) + { + parse_exp (op_end + 1, &operand[0]); + build_relax (opcode, &operand[0]); + } + else + { + if (opcode->arg[0] == A_END) + { + /* Ignore trailing whitespace. If there is any, it has already + been compressed to a single space. */ + if (*op_end == ' ') + op_end++; + } + else + { + op_end = get_operands (opcode, op_end, operand); + } + opcode = get_specific (opcode, operand); + + if (opcode == 0) + { + /* Couldn't find an opcode which matched the operands. */ + char *where = frag_more (2); + size = 2; + + where[0] = 0x0; + where[1] = 0x0; + as_bad (_("invalid operands for opcode")); + } + else + { + if (*op_end) + as_bad (_("excess operands: '%s'"), op_end); + + size = build_Mytes (opcode, operand); + } + } + } + +#ifdef BFD_ASSEMBLER + dwarf2_emit_insn (size); +#endif +} + +/* This routine is called each time a label definition is seen. It + emits a BFD_RELOC_SH_LABEL reloc if necessary. */ + +void +sh_frob_label () +{ + static fragS *last_label_frag; + static int last_label_offset; + + if (sh_relax + && seg_info (now_seg)->tc_segment_info_data.in_code) + { + int offset; + + offset = frag_now_fix (); + if (frag_now != last_label_frag + || offset != last_label_offset) + { + fix_new (frag_now, offset, 2, &abs_symbol, 0, 0, BFD_RELOC_SH_LABEL); + last_label_frag = frag_now; + last_label_offset = offset; + } + } +} + +/* This routine is called when the assembler is about to output some + data. It emits a BFD_RELOC_SH_DATA reloc if necessary. */ + +void +sh_flush_pending_output () +{ + if (sh_relax + && seg_info (now_seg)->tc_segment_info_data.in_code) + { + fix_new (frag_now, frag_now_fix (), 2, &abs_symbol, 0, 0, + BFD_RELOC_SH_DATA); + seg_info (now_seg)->tc_segment_info_data.in_code = 0; + } +} + +symbolS * +md_undefined_symbol (name) + char *name ATTRIBUTE_UNUSED; +{ + return 0; +} + +#ifdef OBJ_COFF +#ifndef BFD_ASSEMBLER + +void +tc_crawl_symbol_chain (headers) + object_headers *headers ATTRIBUTE_UNUSED; +{ + printf (_("call to tc_crawl_symbol_chain \n")); +} + +void +tc_headers_hook (headers) + object_headers *headers ATTRIBUTE_UNUSED; +{ + printf (_("call to tc_headers_hook \n")); +} + +#endif +#endif + +/* Various routines to kill one day. */ +/* Equal to MAX_PRECISION in atof-ieee.c. */ +#define MAX_LITTLENUMS 6 + +/* Turn a string in input_line_pointer into a floating point constant + of type TYPE, and store the appropriate bytes in *LITP. The number + of LITTLENUMS emitted is stored in *SIZEP . An error message is + returned, or NULL on OK. */ + +char * +md_atof (type, litP, sizeP) + int type; + char *litP; + int *sizeP; +{ + int prec; + LITTLENUM_TYPE words[4]; + char *t; + int i; + + switch (type) + { + case 'f': + prec = 2; + break; + + case 'd': + prec = 4; + break; + + default: + *sizeP = 0; + return _("bad call to md_atof"); + } + + t = atof_ieee (input_line_pointer, type, words); + if (t) + input_line_pointer = t; + + *sizeP = prec * 2; + + if (! target_big_endian) + { + for (i = prec - 1; i >= 0; i--) + { + md_number_to_chars (litP, (valueT) words[i], 2); + litP += 2; + } + } + else + { + for (i = 0; i < prec; i++) + { + md_number_to_chars (litP, (valueT) words[i], 2); + litP += 2; + } + } + + return NULL; +} + +/* Handle the .uses pseudo-op. This pseudo-op is used just before a + call instruction. It refers to a label of the instruction which + loads the register which the call uses. We use it to generate a + special reloc for the linker. */ + +static void +s_uses (ignore) + int ignore ATTRIBUTE_UNUSED; +{ + expressionS ex; + + if (! sh_relax) + as_warn (_(".uses pseudo-op seen when not relaxing")); + + expression (&ex); + + if (ex.X_op != O_symbol || ex.X_add_number != 0) + { + as_bad (_("bad .uses format")); + ignore_rest_of_line (); + return; + } + + fix_new_exp (frag_now, frag_now_fix (), 2, &ex, 1, BFD_RELOC_SH_USES); + + demand_empty_rest_of_line (); +} + +const char *md_shortopts = ""; +struct option md_longopts[] = +{ +#define OPTION_RELAX (OPTION_MD_BASE) +#define OPTION_BIG (OPTION_MD_BASE + 1) +#define OPTION_LITTLE (OPTION_BIG + 1) +#define OPTION_SMALL (OPTION_LITTLE + 1) +#define OPTION_DSP (OPTION_SMALL + 1) + + {"relax", no_argument, NULL, OPTION_RELAX}, + {"big", no_argument, NULL, OPTION_BIG}, + {"little", no_argument, NULL, OPTION_LITTLE}, + {"small", no_argument, NULL, OPTION_SMALL}, + {"dsp", no_argument, NULL, OPTION_DSP}, +#ifdef HAVE_SH64 +#define OPTION_ISA (OPTION_DSP + 1) +#define OPTION_ABI (OPTION_ISA + 1) +#define OPTION_NO_MIX (OPTION_ABI + 1) +#define OPTION_SHCOMPACT_CONST_CRANGE (OPTION_NO_MIX + 1) +#define OPTION_NO_EXPAND (OPTION_SHCOMPACT_CONST_CRANGE + 1) +#define OPTION_PT32 (OPTION_NO_EXPAND + 1) + {"isa", required_argument, NULL, OPTION_ISA}, + {"abi", required_argument, NULL, OPTION_ABI}, + {"no-mix", no_argument, NULL, OPTION_NO_MIX}, + {"shcompact-const-crange", no_argument, NULL, OPTION_SHCOMPACT_CONST_CRANGE}, + {"no-expand", no_argument, NULL, OPTION_NO_EXPAND}, + {"expand-pt32", no_argument, NULL, OPTION_PT32}, +#endif /* HAVE_SH64 */ + + {NULL, no_argument, NULL, 0} +}; +size_t md_longopts_size = sizeof (md_longopts); + +int +md_parse_option (c, arg) + int c; + char *arg ATTRIBUTE_UNUSED; +{ + switch (c) + { + case OPTION_RELAX: + sh_relax = 1; + break; + + case OPTION_BIG: + target_big_endian = 1; + break; + + case OPTION_LITTLE: + target_big_endian = 0; + break; + + case OPTION_SMALL: + sh_small = 1; + break; + + case OPTION_DSP: + sh_dsp = 1; + break; + +#ifdef HAVE_SH64 + case OPTION_ISA: + if (strcasecmp (arg, "shmedia") == 0) + { + if (sh64_isa_mode == sh64_isa_shcompact) + as_bad (_("Invalid combination: --isa=SHcompact with --isa=SHmedia")); + sh64_isa_mode = sh64_isa_shmedia; + } + else if (strcasecmp (arg, "shcompact") == 0) + { + if (sh64_isa_mode == sh64_isa_shmedia) + as_bad (_("Invalid combination: --isa=SHmedia with --isa=SHcompact")); + if (sh64_abi == sh64_abi_64) + as_bad (_("Invalid combination: --abi=64 with --isa=SHcompact")); + sh64_isa_mode = sh64_isa_shcompact; + } + else + as_bad ("Invalid argument to --isa option: %s", arg); + break; + + case OPTION_ABI: + if (strcmp (arg, "32") == 0) + { + if (sh64_abi == sh64_abi_64) + as_bad (_("Invalid combination: --abi=32 with --abi=64")); + sh64_abi = sh64_abi_32; + } + else if (strcmp (arg, "64") == 0) + { + if (sh64_abi == sh64_abi_32) + as_bad (_("Invalid combination: --abi=64 with --abi=32")); + if (sh64_isa_mode == sh64_isa_shcompact) + as_bad (_("Invalid combination: --isa=SHcompact with --abi=64")); + sh64_abi = sh64_abi_64; + } + else + as_bad ("Invalid argument to --abi option: %s", arg); + break; + + case OPTION_NO_MIX: + sh64_mix = false; + break; + + case OPTION_SHCOMPACT_CONST_CRANGE: + sh64_shcompact_const_crange = true; + break; + + case OPTION_NO_EXPAND: + sh64_expand = false; + break; + + case OPTION_PT32: + sh64_pt32 = true; + break; +#endif /* HAVE_SH64 */ + + default: + return 0; + } + + return 1; +} + +void +md_show_usage (stream) + FILE *stream; +{ + fprintf (stream, _("\ +SH options:\n\ +-little generate little endian code\n\ +-big generate big endian code\n\ +-relax alter jump instructions for long displacements\n\ +-small align sections to 4 byte boundaries, not 16\n\ +-dsp enable sh-dsp insns, and disable sh3e / sh4 insns.\n")); +#ifdef HAVE_SH64 + fprintf (stream, _("\ +-isa=[shmedia set default instruction set for SH64\n\ + | SHmedia\n\ + | shcompact\n\ + | SHcompact]\n\ +-abi=[32|64] set size of expanded SHmedia operands and object\n\ + file type\n\ +-shcompact-const-crange emit code-range descriptors for constants in\n\ + SHcompact code sections\n\ +-no-mix disallow SHmedia code in the same section as\n\ + constants and SHcompact code\n\ +-no-expand do not expand MOVI, PT, PTA or PTB instructions\n\ +-expand-pt32 with -abi=64, expand PT, PTA and PTB instructions\n\ + to 32 bits only")); +#endif /* HAVE_SH64 */ +} + +/* This struct is used to pass arguments to sh_count_relocs through + bfd_map_over_sections. */ + +struct sh_count_relocs +{ + /* Symbol we are looking for. */ + symbolS *sym; + /* Count of relocs found. */ + int count; +}; + +/* Count the number of fixups in a section which refer to a particular + symbol. When using BFD_ASSEMBLER, this is called via + bfd_map_over_sections. */ + +static void +sh_count_relocs (abfd, sec, data) + bfd *abfd ATTRIBUTE_UNUSED; + segT sec; + PTR data; +{ + struct sh_count_relocs *info = (struct sh_count_relocs *) data; + segment_info_type *seginfo; + symbolS *sym; + fixS *fix; + + seginfo = seg_info (sec); + if (seginfo == NULL) + return; + + sym = info->sym; + for (fix = seginfo->fix_root; fix != NULL; fix = fix->fx_next) + { + if (fix->fx_addsy == sym) + { + ++info->count; + fix->fx_tcbit = 1; + } + } +} + +/* Handle the count relocs for a particular section. When using + 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; +{ + segment_info_type *seginfo; + fixS *fix; + + seginfo = seg_info (sec); + if (seginfo == NULL) + return; + + for (fix = seginfo->fix_root; fix != NULL; fix = fix->fx_next) + { + symbolS *sym; + bfd_vma val; + fixS *fscan; + struct sh_count_relocs info; + + if (fix->fx_r_type != BFD_RELOC_SH_USES) + continue; + + /* The BFD_RELOC_SH_USES reloc should refer to a defined local + symbol in the same section. */ + sym = fix->fx_addsy; + if (sym == NULL + || fix->fx_subsy != NULL + || fix->fx_addnumber != 0 + || S_GET_SEGMENT (sym) != sec +#if ! defined (BFD_ASSEMBLER) && defined (OBJ_COFF) + || S_GET_STORAGE_CLASS (sym) == C_EXT +#endif + || S_IS_EXTERNAL (sym)) + { + as_warn_where (fix->fx_file, fix->fx_line, + _(".uses does not refer to a local symbol in the same section")); + continue; + } + + /* Look through the fixups again, this time looking for one + at the same location as sym. */ + val = S_GET_VALUE (sym); + for (fscan = seginfo->fix_root; + fscan != NULL; + fscan = fscan->fx_next) + if (val == fscan->fx_frag->fr_address + fscan->fx_where + && fscan->fx_r_type != BFD_RELOC_SH_ALIGN + && fscan->fx_r_type != BFD_RELOC_SH_CODE + && fscan->fx_r_type != BFD_RELOC_SH_DATA + && fscan->fx_r_type != BFD_RELOC_SH_LABEL) + break; + if (fscan == NULL) + { + as_warn_where (fix->fx_file, fix->fx_line, + _("can't find fixup pointed to by .uses")); + continue; + } + + if (fscan->fx_tcbit) + { + /* We've already done this one. */ + continue; + } + + /* The variable fscan should also be a fixup to a local symbol + in the same section. */ + sym = fscan->fx_addsy; + if (sym == NULL + || fscan->fx_subsy != NULL + || fscan->fx_addnumber != 0 + || S_GET_SEGMENT (sym) != sec +#if ! defined (BFD_ASSEMBLER) && defined (OBJ_COFF) + || S_GET_STORAGE_CLASS (sym) == C_EXT +#endif + || S_IS_EXTERNAL (sym)) + { + as_warn_where (fix->fx_file, fix->fx_line, + _(".uses target does not refer to a local symbol in the same section")); + continue; + } + + /* Now we look through all the fixups of all the sections, + counting the number of times we find a reference to sym. */ + info.sym = sym; + info.count = 0; +#ifdef BFD_ASSEMBLER + bfd_map_over_sections (stdoutput, sh_count_relocs, (PTR) &info); +#else + { + int iscan; + + for (iscan = SEG_E0; iscan < SEG_UNKNOWN; iscan++) + sh_count_relocs ((bfd *) NULL, iscan, (PTR) &info); + } +#endif + + if (info.count < 1) + abort (); + + /* Generate a BFD_RELOC_SH_COUNT fixup at the location of sym. + We have already adjusted the value of sym to include the + fragment address, so we undo that adjustment here. */ + subseg_change (sec, 0); + fix_new (fscan->fx_frag, + S_GET_VALUE (sym) - fscan->fx_frag->fr_address, + 4, &abs_symbol, info.count, 0, BFD_RELOC_SH_COUNT); + } +} + +/* This function is called after the symbol table has been completed, + but before the relocs or section contents have been written out. + If we have seen any .uses pseudo-ops, they point to an instruction + which loads a register with the address of a function. We look + through the fixups to find where the function address is being + loaded from. We then generate a COUNT reloc giving the number of + times that function address is referred to. The linker uses this + information when doing relaxing, to decide when it can eliminate + the stored function address entirely. */ + +void +sh_frob_file () +{ +#ifdef HAVE_SH64 + shmedia_frob_file_before_adjust (); +#endif + + if (! sh_relax) + return; + +#ifdef BFD_ASSEMBLER + bfd_map_over_sections (stdoutput, sh_frob_section, (PTR) NULL); +#else + { + int iseg; + + for (iseg = SEG_E0; iseg < SEG_UNKNOWN; iseg++) + sh_frob_section ((bfd *) NULL, iseg, (PTR) NULL); + } +#endif +} + +/* Called after relaxing. Set the correct sizes of the fragments, and + 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; +#else + object_headers *headers ATTRIBUTE_UNUSED; +#endif + segT seg; + fragS *fragP; +{ + int donerelax = 0; + + switch (fragP->fr_subtype) + { + case C (COND_JUMP, COND8): + case C (COND_JUMP_DELAY, COND8): + subseg_change (seg, 0); + fix_new (fragP, fragP->fr_fix, 2, fragP->fr_symbol, fragP->fr_offset, + 1, BFD_RELOC_SH_PCDISP8BY2); + fragP->fr_fix += 2; + fragP->fr_var = 0; + break; + + case C (UNCOND_JUMP, UNCOND12): + subseg_change (seg, 0); + fix_new (fragP, fragP->fr_fix, 2, fragP->fr_symbol, fragP->fr_offset, + 1, BFD_RELOC_SH_PCDISP12BY2); + fragP->fr_fix += 2; + fragP->fr_var = 0; + break; + + case C (UNCOND_JUMP, UNCOND32): + case C (UNCOND_JUMP, UNDEF_WORD_DISP): + if (fragP->fr_symbol == NULL) + as_bad_where (fragP->fr_file, fragP->fr_line, + _("displacement overflows 12-bit field")); + else if (S_IS_DEFINED (fragP->fr_symbol)) + as_bad_where (fragP->fr_file, fragP->fr_line, + _("displacement to defined symbol %s overflows 12-bit field"), + S_GET_NAME (fragP->fr_symbol)); + else + as_bad_where (fragP->fr_file, fragP->fr_line, + _("displacement to undefined symbol %s overflows 12-bit field"), + S_GET_NAME (fragP->fr_symbol)); + /* Stabilize this frag, so we don't trip an assert. */ + fragP->fr_fix += fragP->fr_var; + fragP->fr_var = 0; + break; + + case C (COND_JUMP, COND12): + case C (COND_JUMP_DELAY, COND12): + /* A bcond won't fit, so turn it into a b!cond; bra disp; nop. */ + /* I found that a relax failure for gcc.c-torture/execute/930628-1.c + was due to gas incorrectly relaxing an out-of-range conditional + branch with delay slot. It turned: + bf.s L6 (slot mov.l r12,@(44,r0)) + into: + +2c: 8f 01 a0 8b bf.s 32 <_main+32> (slot bra L6) +30: 00 09 nop +32: 10 cb mov.l r12,@(44,r0) + Therefore, branches with delay slots have to be handled + differently from ones without delay slots. */ + { + unsigned char *buffer = + (unsigned char *) (fragP->fr_fix + fragP->fr_literal); + int highbyte = target_big_endian ? 0 : 1; + int lowbyte = target_big_endian ? 1 : 0; + int delay = fragP->fr_subtype == C (COND_JUMP_DELAY, COND12); + + /* Toggle the true/false bit of the bcond. */ + buffer[highbyte] ^= 0x2; + + /* If this is a delayed branch, we may not put the bra in the + slot. So we change it to a non-delayed branch, like that: + b! cond slot_label; bra disp; slot_label: slot_insn + ??? We should try if swapping the conditional branch and + its delay-slot insn already makes the branch reach. */ + + /* Build a relocation to six / four bytes farther on. */ + subseg_change (seg, 0); + fix_new (fragP, fragP->fr_fix, 2, +#ifdef BFD_ASSEMBLER + section_symbol (seg), +#else + seg_info (seg)->dot, +#endif + fragP->fr_address + fragP->fr_fix + (delay ? 4 : 6), + 1, BFD_RELOC_SH_PCDISP8BY2); + + /* Set up a jump instruction. */ + buffer[highbyte + 2] = 0xa0; + buffer[lowbyte + 2] = 0; + fix_new (fragP, fragP->fr_fix + 2, 2, fragP->fr_symbol, + fragP->fr_offset, 1, BFD_RELOC_SH_PCDISP12BY2); + + if (delay) + { + buffer[highbyte] &= ~0x4; /* Removes delay slot from branch. */ + fragP->fr_fix += 4; + } + else + { + /* Fill in a NOP instruction. */ + buffer[highbyte + 4] = 0x0; + buffer[lowbyte + 4] = 0x9; + + fragP->fr_fix += 6; + } + fragP->fr_var = 0; + donerelax = 1; + } + break; + + case C (COND_JUMP, COND32): + case C (COND_JUMP_DELAY, COND32): + case C (COND_JUMP, UNDEF_WORD_DISP): + case C (COND_JUMP_DELAY, UNDEF_WORD_DISP): + if (fragP->fr_symbol == NULL) + as_bad_where (fragP->fr_file, fragP->fr_line, + _("displacement overflows 8-bit field")); + else if (S_IS_DEFINED (fragP->fr_symbol)) + as_bad_where (fragP->fr_file, fragP->fr_line, + _("displacement to defined symbol %s overflows 8-bit field"), + S_GET_NAME (fragP->fr_symbol)); + else + as_bad_where (fragP->fr_file, fragP->fr_line, + _("displacement to undefined symbol %s overflows 8-bit field "), + S_GET_NAME (fragP->fr_symbol)); + /* Stabilize this frag, so we don't trip an assert. */ + fragP->fr_fix += fragP->fr_var; + fragP->fr_var = 0; + break; + + default: +#ifdef HAVE_SH64 + shmedia_md_convert_frag (headers, seg, fragP, true); +#else + abort (); +#endif + } + + if (donerelax && !sh_relax) + as_warn_where (fragP->fr_file, fragP->fr_line, + _("overflow in branch to %s; converted into longer instruction sequence"), + (fragP->fr_symbol != NULL + ? S_GET_NAME (fragP->fr_symbol) + : "")); +} + +valueT +md_section_align (seg, size) + segT seg ATTRIBUTE_UNUSED; + valueT size; +{ +#ifdef BFD_ASSEMBLER +#ifdef OBJ_ELF + return size; +#else /* ! OBJ_ELF */ + return ((size + (1 << bfd_get_section_alignment (stdoutput, seg)) - 1) + & (-1 << bfd_get_section_alignment (stdoutput, seg))); +#endif /* ! OBJ_ELF */ +#else /* ! BFD_ASSEMBLER */ + return ((size + (1 << section_alignment[(int) seg]) - 1) + & (-1 << section_alignment[(int) seg])); +#endif /* ! BFD_ASSEMBLER */ +} + +/* This static variable is set by s_uacons to tell sh_cons_align that + the expession does not need to be aligned. */ + +static int sh_no_align_cons = 0; + +/* This handles the unaligned space allocation pseudo-ops, such as + .uaword. .uaword is just like .word, but the value does not need + to be aligned. */ + +static void +s_uacons (bytes) + int bytes; +{ + /* Tell sh_cons_align not to align this value. */ + sh_no_align_cons = 1; + cons (bytes); +} + +/* If a .word, et. al., pseud-op is seen, warn if the value is not + aligned correctly. Note that this can cause warnings to be issued + when assembling initialized structured which were declared with the + packed attribute. FIXME: Perhaps we should require an option to + enable this warning? */ + +void +sh_cons_align (nbytes) + int nbytes; +{ + int nalign; + char *p; + + if (sh_no_align_cons) + { + /* This is an unaligned pseudo-op. */ + sh_no_align_cons = 0; + return; + } + + nalign = 0; + while ((nbytes & 1) == 0) + { + ++nalign; + nbytes >>= 1; + } + + if (nalign == 0) + return; + + if (now_seg == absolute_section) + { + if ((abs_section_offset & ((1 << nalign) - 1)) != 0) + as_warn (_("misaligned data")); + return; + } + + p = frag_var (rs_align_test, 1, 1, (relax_substateT) 0, + (symbolS *) NULL, (offsetT) nalign, (char *) NULL); + + record_alignment (now_seg, nalign); +} + +/* When relaxing, we need to output a reloc for any .align directive + that requests alignment to a four byte boundary or larger. This is + also where we check for misaligned data. */ + +void +sh_handle_align (frag) + fragS *frag; +{ + int bytes = frag->fr_next->fr_address - frag->fr_address - frag->fr_fix; + + if (frag->fr_type == rs_align_code) + { + static const unsigned char big_nop_pattern[] = { 0x00, 0x09 }; + static const unsigned char little_nop_pattern[] = { 0x09, 0x00 }; + + char *p = frag->fr_literal + frag->fr_fix; + + if (bytes & 1) + { + *p++ = 0; + bytes--; + frag->fr_fix += 1; + } + + if (target_big_endian) + { + memcpy (p, big_nop_pattern, sizeof big_nop_pattern); + frag->fr_var = sizeof big_nop_pattern; + } + else + { + memcpy (p, little_nop_pattern, sizeof little_nop_pattern); + frag->fr_var = sizeof little_nop_pattern; + } + } + else if (frag->fr_type == rs_align_test) + { + if (bytes != 0) + as_warn_where (frag->fr_file, frag->fr_line, _("misaligned data")); + } + + if (sh_relax + && (frag->fr_type == rs_align + || frag->fr_type == rs_align_code) + && frag->fr_address + frag->fr_fix > 0 + && frag->fr_offset > 1 + && now_seg != bss_section) + fix_new (frag, frag->fr_fix, 2, &abs_symbol, frag->fr_offset, 0, + BFD_RELOC_SH_ALIGN); +} + +/* This macro decides whether a particular reloc is an entry in a + switch table. It is used when relaxing, because the linker needs + to know about all such entries so that it can adjust them if + necessary. */ + +#ifdef BFD_ASSEMBLER +#define SWITCH_TABLE_CONS(fix) (0) +#else +#define SWITCH_TABLE_CONS(fix) \ + ((fix)->fx_r_type == 0 \ + && ((fix)->fx_size == 2 \ + || (fix)->fx_size == 1 \ + || (fix)->fx_size == 4)) +#endif + +#define SWITCH_TABLE(fix) \ + ((fix)->fx_addsy != NULL \ + && (fix)->fx_subsy != NULL \ + && S_GET_SEGMENT ((fix)->fx_addsy) == text_section \ + && S_GET_SEGMENT ((fix)->fx_subsy) == text_section \ + && ((fix)->fx_r_type == BFD_RELOC_32 \ + || (fix)->fx_r_type == BFD_RELOC_16 \ + || (fix)->fx_r_type == BFD_RELOC_8 \ + || SWITCH_TABLE_CONS (fix))) + +/* See whether we need to force a relocation into the output file. + This is used to force out switch and PC relative relocations when + relaxing. */ + +int +sh_force_relocation (fix) + fixS *fix; +{ + + if (fix->fx_r_type == BFD_RELOC_VTABLE_INHERIT + || fix->fx_r_type == BFD_RELOC_VTABLE_ENTRY + || fix->fx_r_type == BFD_RELOC_SH_LOOP_START + || fix->fx_r_type == BFD_RELOC_SH_LOOP_END) + return 1; + + if (! sh_relax) + return 0; + + return (fix->fx_pcrel + || SWITCH_TABLE (fix) + || fix->fx_r_type == BFD_RELOC_SH_COUNT + || fix->fx_r_type == BFD_RELOC_SH_ALIGN + || fix->fx_r_type == BFD_RELOC_SH_CODE + || fix->fx_r_type == BFD_RELOC_SH_DATA +#ifdef HAVE_SH64 + || fix->fx_r_type == BFD_RELOC_SH_SHMEDIA_CODE +#endif + || fix->fx_r_type == BFD_RELOC_SH_LABEL); +} + +#ifdef OBJ_ELF +boolean +sh_fix_adjustable (fixP) + fixS *fixP; +{ + + if (fixP->fx_addsy == NULL) + return 1; + + if (fixP->fx_r_type == BFD_RELOC_SH_PCDISP8BY2 + || fixP->fx_r_type == BFD_RELOC_SH_PCDISP12BY2 + || fixP->fx_r_type == BFD_RELOC_SH_PCRELIMM8BY2 + || fixP->fx_r_type == BFD_RELOC_SH_PCRELIMM8BY4 + || fixP->fx_r_type == BFD_RELOC_8_PCREL + || fixP->fx_r_type == BFD_RELOC_SH_SWITCH16 + || fixP->fx_r_type == BFD_RELOC_SH_SWITCH32) + return 1; + + if (! TC_RELOC_RTSYM_LOC_FIXUP (fixP) + || fixP->fx_r_type == BFD_RELOC_RVA) + return 0; + + /* We need the symbol name for the VTABLE entries */ + if (fixP->fx_r_type == BFD_RELOC_VTABLE_INHERIT + || fixP->fx_r_type == BFD_RELOC_VTABLE_ENTRY) + return 0; + + return 1; +} + +void +sh_elf_final_processing () +{ + int val; + + /* Set file-specific flags to indicate if this code needs + a processor with the sh-dsp / sh3e ISA to execute. */ +#ifdef HAVE_SH64 + /* SH5 and above don't know about the valid_arch arch_sh* bits defined + in sh-opc.h, so check SH64 mode before checking valid_arch. */ + if (sh64_isa_mode != sh64_isa_unspecified) + val = EF_SH5; + else +#endif /* HAVE_SH64 */ + if (valid_arch & arch_sh1) + val = EF_SH1; + else if (valid_arch & arch_sh2) + val = EF_SH2; + else if (valid_arch & arch_sh_dsp) + val = EF_SH_DSP; + else if (valid_arch & arch_sh3) + val = EF_SH3; + else if (valid_arch & arch_sh3_dsp) + val = EF_SH_DSP; + else if (valid_arch & arch_sh3e) + val = EF_SH3E; + else if (valid_arch & arch_sh4) + val = EF_SH4; + else + abort (); + + elf_elfheader (stdoutput)->e_flags &= ~EF_SH_MACH_MASK; + elf_elfheader (stdoutput)->e_flags |= val; +} +#endif + +/* Apply a fixup to the object file. */ + +void +md_apply_fix3 (fixP, valP, seg) + 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; + int highbyte = target_big_endian ? 0 : 1; + long val = (long) *valP; + long max, min; + int shift; + +#ifdef BFD_ASSEMBLER + /* A difference between two symbols, the second of which is in the + current section, is transformed in a PC-relative relocation to + the other symbol. We have to adjust the relocation type here. */ + if (fixP->fx_pcrel) + { + switch (fixP->fx_r_type) + { + default: + break; + + case BFD_RELOC_32: + fixP->fx_r_type = BFD_RELOC_32_PCREL; + break; + + /* Currently, we only support 32-bit PCREL relocations. + We'd need a new reloc type to handle 16_PCREL, and + 8_PCREL is already taken for R_SH_SWITCH8, which + apparently does something completely different than what + we need. FIXME. */ + case BFD_RELOC_16: + bfd_set_error (bfd_error_bad_value); + return; + + case BFD_RELOC_8: + bfd_set_error (bfd_error_bad_value); + return; + } + } + + /* The function adjust_reloc_syms won't convert a reloc against a weak + symbol into a reloc against a section, but bfd_install_relocation + will screw up if the symbol is defined, so we have to adjust val here + to avoid the screw up later. + + For ordinary relocs, this does not happen for ELF, since for ELF, + bfd_install_relocation uses the "special function" field of the + howto, and does not execute the code that needs to be undone, as long + as the special function does not return bfd_reloc_continue. + It can happen for GOT- and PLT-type relocs the way they are + described in elf32-sh.c as they use bfd_elf_generic_reloc, but it + doesn't matter here since those relocs don't use VAL; see below. */ + if (OUTPUT_FLAVOR != bfd_target_elf_flavour + && fixP->fx_addsy != NULL + && S_IS_WEAK (fixP->fx_addsy)) + val -= S_GET_VALUE (fixP->fx_addsy); +#endif + +#ifndef BFD_ASSEMBLER + if (fixP->fx_r_type == 0) + { + if (fixP->fx_size == 2) + fixP->fx_r_type = BFD_RELOC_16; + else if (fixP->fx_size == 4) + fixP->fx_r_type = BFD_RELOC_32; + else if (fixP->fx_size == 1) + fixP->fx_r_type = BFD_RELOC_8; + else + abort (); + } +#endif + + max = min = 0; + shift = 0; + switch (fixP->fx_r_type) + { + case BFD_RELOC_SH_IMM4: + max = 0xf; + *buf = (*buf & 0xf0) | (val & 0xf); + break; + + case BFD_RELOC_SH_IMM4BY2: + max = 0xf; + shift = 1; + *buf = (*buf & 0xf0) | ((val >> 1) & 0xf); + break; + + case BFD_RELOC_SH_IMM4BY4: + max = 0xf; + shift = 2; + *buf = (*buf & 0xf0) | ((val >> 2) & 0xf); + break; + + case BFD_RELOC_SH_IMM8BY2: + max = 0xff; + shift = 1; + *buf = val >> 1; + break; + + case BFD_RELOC_SH_IMM8BY4: + max = 0xff; + shift = 2; + *buf = val >> 2; + break; + + case BFD_RELOC_8: + case BFD_RELOC_SH_IMM8: + /* Sometimes the 8 bit value is sign extended (e.g., add) and + sometimes it is not (e.g., and). We permit any 8 bit value. + Note that adding further restrictions may invalidate + reasonable looking assembly code, such as ``and -0x1,r0''. */ + max = 0xff; + min = -0xff; + *buf++ = val; + break; + + case BFD_RELOC_SH_PCRELIMM8BY4: + /* The lower two bits of the PC are cleared before the + displacement is added in. We can assume that the destination + is on a 4 byte bounday. If this instruction is also on a 4 + byte boundary, then we want + (target - here) / 4 + and target - here is a multiple of 4. + Otherwise, we are on a 2 byte boundary, and we want + (target - (here - 2)) / 4 + and target - here is not a multiple of 4. Computing + (target - (here - 2)) / 4 == (target - here + 2) / 4 + works for both cases, since in the first case the addition of + 2 will be removed by the division. target - here is in the + variable val. */ + val = (val + 2) / 4; + if (val & ~0xff) + as_bad_where (fixP->fx_file, fixP->fx_line, _("pcrel too far")); + buf[lowbyte] = val; + break; + + case BFD_RELOC_SH_PCRELIMM8BY2: + val /= 2; + if (val & ~0xff) + as_bad_where (fixP->fx_file, fixP->fx_line, _("pcrel too far")); + buf[lowbyte] = val; + break; + + case BFD_RELOC_SH_PCDISP8BY2: + val /= 2; + if (val < -0x80 || val > 0x7f) + as_bad_where (fixP->fx_file, fixP->fx_line, _("pcrel too far")); + buf[lowbyte] = val; + break; + + case BFD_RELOC_SH_PCDISP12BY2: + val /= 2; + if (val < -0x800 || val > 0x7ff) + as_bad_where (fixP->fx_file, fixP->fx_line, _("pcrel too far")); + buf[lowbyte] = val & 0xff; + buf[highbyte] |= (val >> 8) & 0xf; + break; + + case BFD_RELOC_32: + case BFD_RELOC_32_PCREL: + md_number_to_chars (buf, val, 4); + break; + + case BFD_RELOC_16: + md_number_to_chars (buf, val, 2); + break; + + case BFD_RELOC_SH_USES: + /* Pass the value into sh_coff_reloc_mangle. */ + fixP->fx_addnumber = val; + break; + + case BFD_RELOC_SH_COUNT: + case BFD_RELOC_SH_ALIGN: + case BFD_RELOC_SH_CODE: + case BFD_RELOC_SH_DATA: + case BFD_RELOC_SH_LABEL: + /* Nothing to do here. */ + break; + + case BFD_RELOC_SH_LOOP_START: + case BFD_RELOC_SH_LOOP_END: + + case BFD_RELOC_VTABLE_INHERIT: + case BFD_RELOC_VTABLE_ENTRY: + fixP->fx_done = 0; + return; + +#ifdef OBJ_ELF + case BFD_RELOC_32_PLT_PCREL: + /* Make the jump instruction point to the address of the operand. At + runtime we merely add the offset to the actual PLT entry. */ + * valP = 0xfffffffc; + val = fixP->fx_addnumber; + if (fixP->fx_subsy) + val -= S_GET_VALUE (fixP->fx_subsy); + md_number_to_chars (buf, val, 4); + break; + + case BFD_RELOC_SH_GOTPC: + /* This is tough to explain. We end up with this one if we have + operands that look like "_GLOBAL_OFFSET_TABLE_+[.-.L284]". + The goal here is to obtain the absolute address of the GOT, + and it is strongly preferable from a performance point of + view to avoid using a runtime relocation for this. There are + cases where you have something like: + + .long _GLOBAL_OFFSET_TABLE_+[.-.L66] + + and here no correction would be required. Internally in the + assembler we treat operands of this form as not being pcrel + since the '.' is explicitly mentioned, and I wonder whether + it would simplify matters to do it this way. Who knows. In + earlier versions of the PIC patches, the pcrel_adjust field + was used to store the correction, but since the expression is + not pcrel, I felt it would be confusing to do it this way. */ + * valP -= 1; + md_number_to_chars (buf, val, 4); + break; + + case BFD_RELOC_32_GOT_PCREL: + case BFD_RELOC_SH_GOTPLT32: + * valP = 0; /* Fully resolved at runtime. No addend. */ + md_number_to_chars (buf, 0, 4); + break; + + case BFD_RELOC_32_GOTOFF: + md_number_to_chars (buf, val, 4); + break; +#endif + + default: +#ifdef HAVE_SH64 + shmedia_md_apply_fix3 (fixP, valP); + return; +#else + abort (); +#endif + } + + if (shift != 0) + { + if ((val & ((1 << shift) - 1)) != 0) + as_bad_where (fixP->fx_file, fixP->fx_line, _("misaligned offset")); + if (val >= 0) + val >>= shift; + else + val = ((val >> shift) + | ((long) -1 & ~ ((long) -1 >> shift))); + } + if (max != 0 && (val < min || val > max)) + as_bad_where (fixP->fx_file, fixP->fx_line, _("offset out of range")); + + if (fixP->fx_addsy == NULL && fixP->fx_pcrel == 0) + fixP->fx_done = 1; +} + +/* Called just before address relaxation. Return the length + 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; +{ + int what; + + switch (fragP->fr_subtype) + { + default: +#ifdef HAVE_SH64 + return shmedia_md_estimate_size_before_relax (fragP, segment_type); +#else + abort (); +#endif + + + case C (UNCOND_JUMP, UNDEF_DISP): + /* Used to be a branch to somewhere which was unknown. */ + if (!fragP->fr_symbol) + { + fragP->fr_subtype = C (UNCOND_JUMP, UNCOND12); + } + else if (S_GET_SEGMENT (fragP->fr_symbol) == segment_type) + { + fragP->fr_subtype = C (UNCOND_JUMP, UNCOND12); + } + else + { + fragP->fr_subtype = C (UNCOND_JUMP, UNDEF_WORD_DISP); + } + break; + + case C (COND_JUMP, UNDEF_DISP): + case C (COND_JUMP_DELAY, UNDEF_DISP): + what = GET_WHAT (fragP->fr_subtype); + /* Used to be a branch to somewhere which was unknown. */ + if (fragP->fr_symbol + && S_GET_SEGMENT (fragP->fr_symbol) == segment_type) + { + /* Got a symbol and it's defined in this segment, become byte + sized - maybe it will fix up. */ + fragP->fr_subtype = C (what, COND8); + } + else if (fragP->fr_symbol) + { + /* Its got a segment, but its not ours, so it will always be long. */ + fragP->fr_subtype = C (what, UNDEF_WORD_DISP); + } + else + { + /* We know the abs value. */ + fragP->fr_subtype = C (what, COND8); + } + break; + + case C (UNCOND_JUMP, UNCOND12): + case C (UNCOND_JUMP, UNCOND32): + case C (UNCOND_JUMP, UNDEF_WORD_DISP): + case C (COND_JUMP, COND8): + case C (COND_JUMP, COND12): + case C (COND_JUMP, COND32): + case C (COND_JUMP, UNDEF_WORD_DISP): + case C (COND_JUMP_DELAY, COND8): + case C (COND_JUMP_DELAY, COND12): + case C (COND_JUMP_DELAY, COND32): + case C (COND_JUMP_DELAY, UNDEF_WORD_DISP): + /* When relaxing a section for the second time, we don't need to + do anything besides return the current size. */ + break; + } + + fragP->fr_var = md_relax_table[fragP->fr_subtype].rlx_length; + return fragP->fr_var; +} + +/* Put number into target byte order. */ + +void +md_number_to_chars (ptr, use, nbytes) + char *ptr; + valueT use; + int nbytes; +{ +#ifdef HAVE_SH64 + /* We might need to set the contents type to data. */ + sh64_flag_output (); +#endif + + if (! target_big_endian) + number_to_chars_littleendian (ptr, use, nbytes); + else + number_to_chars_bigendian (ptr, use, nbytes); +} + +/* This version is used in obj-coff.c when not using BFD_ASSEMBLER. + eg for the sh-hms target. */ + +long +md_pcrel_from (fixP) + 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; +{ + if (fixP->fx_addsy != (symbolS *) NULL + && (! S_IS_DEFINED (fixP->fx_addsy) + || S_IS_EXTERN (fixP->fx_addsy) + || S_IS_WEAK (fixP->fx_addsy) + || S_GET_SEGMENT (fixP->fx_addsy) != sec)) + { + /* The symbol is undefined (or is defined but not in this section, + or we're not sure about it being the final definition). Let the + linker figure it out. We need to adjust the subtraction of a + symbol to the position of the relocated data, though. */ + return fixP->fx_subsy ? fixP->fx_where + fixP->fx_frag->fr_address : 0; + } + + return md_pcrel_from (fixP); +} + +#ifdef OBJ_COFF + +int +tc_coff_sizemachdep (frag) + fragS *frag; +{ + return md_relax_table[frag->fr_subtype].rlx_length; +} + +#endif /* OBJ_COFF */ + +#ifndef BFD_ASSEMBLER +#ifdef OBJ_COFF + +/* Map BFD relocs to SH COFF relocs. */ + +struct reloc_map +{ + bfd_reloc_code_real_type bfd_reloc; + int sh_reloc; +}; + +static const struct reloc_map coff_reloc_map[] = +{ + { BFD_RELOC_32, R_SH_IMM32 }, + { BFD_RELOC_16, R_SH_IMM16 }, + { BFD_RELOC_8, R_SH_IMM8 }, + { BFD_RELOC_SH_PCDISP8BY2, R_SH_PCDISP8BY2 }, + { BFD_RELOC_SH_PCDISP12BY2, R_SH_PCDISP }, + { BFD_RELOC_SH_IMM4, R_SH_IMM4 }, + { BFD_RELOC_SH_IMM4BY2, R_SH_IMM4BY2 }, + { BFD_RELOC_SH_IMM4BY4, R_SH_IMM4BY4 }, + { BFD_RELOC_SH_IMM8, R_SH_IMM8 }, + { BFD_RELOC_SH_IMM8BY2, R_SH_IMM8BY2 }, + { BFD_RELOC_SH_IMM8BY4, R_SH_IMM8BY4 }, + { BFD_RELOC_SH_PCRELIMM8BY2, R_SH_PCRELIMM8BY2 }, + { BFD_RELOC_SH_PCRELIMM8BY4, R_SH_PCRELIMM8BY4 }, + { BFD_RELOC_8_PCREL, R_SH_SWITCH8 }, + { BFD_RELOC_SH_SWITCH16, R_SH_SWITCH16 }, + { BFD_RELOC_SH_SWITCH32, R_SH_SWITCH32 }, + { BFD_RELOC_SH_USES, R_SH_USES }, + { BFD_RELOC_SH_COUNT, R_SH_COUNT }, + { BFD_RELOC_SH_ALIGN, R_SH_ALIGN }, + { BFD_RELOC_SH_CODE, R_SH_CODE }, + { BFD_RELOC_SH_DATA, R_SH_DATA }, + { BFD_RELOC_SH_LABEL, R_SH_LABEL }, + { BFD_RELOC_UNUSED, 0 } +}; + +/* Adjust a reloc for the SH. This is similar to the generic code, + 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; +{ + symbolS *symbol_ptr = fix->fx_addsy; + symbolS *dot; + + intr->r_vaddr = paddr + fix->fx_frag->fr_address + fix->fx_where; + + if (! SWITCH_TABLE (fix)) + { + const struct reloc_map *rm; + + for (rm = coff_reloc_map; rm->bfd_reloc != BFD_RELOC_UNUSED; rm++) + if (rm->bfd_reloc == (bfd_reloc_code_real_type) fix->fx_r_type) + break; + if (rm->bfd_reloc == BFD_RELOC_UNUSED) + as_bad_where (fix->fx_file, fix->fx_line, + _("Can not represent %s relocation in this object file format"), + bfd_get_reloc_code_name (fix->fx_r_type)); + intr->r_type = rm->sh_reloc; + intr->r_offset = 0; + } + else + { + know (sh_relax); + + if (fix->fx_r_type == BFD_RELOC_16) + intr->r_type = R_SH_SWITCH16; + else if (fix->fx_r_type == BFD_RELOC_8) + intr->r_type = R_SH_SWITCH8; + else if (fix->fx_r_type == BFD_RELOC_32) + intr->r_type = R_SH_SWITCH32; + else + abort (); + + /* For a switch reloc, we set r_offset to the difference between + the reloc address and the subtrahend. When the linker is + doing relaxing, it can use the determine the starting and + ending points of the switch difference expression. */ + intr->r_offset = intr->r_vaddr - S_GET_VALUE (fix->fx_subsy); + } + + /* PC relative relocs are always against the current section. */ + if (symbol_ptr == NULL) + { + switch (fix->fx_r_type) + { + case BFD_RELOC_SH_PCRELIMM8BY2: + case BFD_RELOC_SH_PCRELIMM8BY4: + case BFD_RELOC_SH_PCDISP8BY2: + case BFD_RELOC_SH_PCDISP12BY2: + case BFD_RELOC_SH_USES: + symbol_ptr = seg->dot; + break; + default: + break; + } + } + + if (fix->fx_r_type == BFD_RELOC_SH_USES) + { + /* We can't store the offset in the object file, since this + reloc does not take up any space, so we store it in r_offset. + The fx_addnumber field was set in md_apply_fix3. */ + intr->r_offset = fix->fx_addnumber; + } + else if (fix->fx_r_type == BFD_RELOC_SH_COUNT) + { + /* We can't store the count in the object file, since this reloc + does not take up any space, so we store it in r_offset. The + fx_offset field was set when the fixup was created in + sh_coff_frob_file. */ + intr->r_offset = fix->fx_offset; + /* This reloc is always absolute. */ + symbol_ptr = NULL; + } + else if (fix->fx_r_type == BFD_RELOC_SH_ALIGN) + { + /* Store the alignment in the r_offset field. */ + intr->r_offset = fix->fx_offset; + /* This reloc is always absolute. */ + symbol_ptr = NULL; + } + else if (fix->fx_r_type == BFD_RELOC_SH_CODE + || fix->fx_r_type == BFD_RELOC_SH_DATA + || fix->fx_r_type == BFD_RELOC_SH_LABEL) + { + /* These relocs are always absolute. */ + symbol_ptr = NULL; + } + + /* Turn the segment of the symbol into an offset. */ + if (symbol_ptr != NULL) + { + dot = segment_info[S_GET_SEGMENT (symbol_ptr)].dot; + if (dot != NULL) + intr->r_symndx = dot->sy_number; + else + intr->r_symndx = symbol_ptr->sy_number; + } + else + intr->r_symndx = -1; +} + +#endif /* OBJ_COFF */ +#endif /* ! BFD_ASSEMBLER */ + +#ifdef BFD_ASSEMBLER + +/* Create a reloc. */ + +arelent * +tc_gen_reloc (section, fixp) + asection *section ATTRIBUTE_UNUSED; + fixS *fixp; +{ + arelent *rel; + bfd_reloc_code_real_type r_type; + + rel = (arelent *) xmalloc (sizeof (arelent)); + rel->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *)); + *rel->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy); + rel->address = fixp->fx_frag->fr_address + fixp->fx_where; + + if (fixp->fx_subsy + && S_GET_SEGMENT (fixp->fx_subsy) == absolute_section) + { + fixp->fx_addnumber -= S_GET_VALUE (fixp->fx_subsy); + fixp->fx_subsy = 0; + } + + r_type = fixp->fx_r_type; + + if (SWITCH_TABLE (fixp)) + { + rel->addend = rel->address - S_GET_VALUE (fixp->fx_subsy); + if (r_type == BFD_RELOC_16) + r_type = BFD_RELOC_SH_SWITCH16; + else if (r_type == BFD_RELOC_8) + r_type = BFD_RELOC_8_PCREL; + else if (r_type == BFD_RELOC_32) + r_type = BFD_RELOC_SH_SWITCH32; + else + abort (); + } + else if (r_type == BFD_RELOC_SH_USES) + rel->addend = fixp->fx_addnumber; + else if (r_type == BFD_RELOC_SH_COUNT) + rel->addend = fixp->fx_offset; + else if (r_type == BFD_RELOC_SH_ALIGN) + rel->addend = fixp->fx_offset; + else if (r_type == BFD_RELOC_VTABLE_INHERIT + || r_type == BFD_RELOC_VTABLE_ENTRY) + rel->addend = fixp->fx_offset; + else if (r_type == BFD_RELOC_SH_LOOP_START + || r_type == BFD_RELOC_SH_LOOP_END) + rel->addend = fixp->fx_offset; + else if (r_type == BFD_RELOC_SH_LABEL && fixp->fx_pcrel) + { + rel->addend = 0; + rel->address = rel->addend = fixp->fx_offset; + } +#ifdef HAVE_SH64 + else if (shmedia_init_reloc (rel, fixp)) + ; +#endif + else if (fixp->fx_pcrel) + rel->addend = fixp->fx_addnumber; + else if (r_type == BFD_RELOC_32 || r_type == BFD_RELOC_32_GOTOFF) + rel->addend = fixp->fx_addnumber; + else + rel->addend = 0; + + rel->howto = bfd_reloc_type_lookup (stdoutput, r_type); + if (rel->howto == NULL || fixp->fx_subsy) + { + as_bad_where (fixp->fx_file, fixp->fx_line, + _("Cannot represent relocation type %s"), + bfd_get_reloc_code_name (r_type)); + /* Set howto to a garbage value so that we can keep going. */ + rel->howto = bfd_reloc_type_lookup (stdoutput, BFD_RELOC_32); + assert (rel->howto != NULL); + } + + return rel; +} + +#ifdef OBJ_ELF +inline static char * +sh_end_of_match (cont, what) + char *cont, *what; +{ + int len = strlen (what); + + if (strncasecmp (cont, what, strlen (what)) == 0 + && ! is_part_of_name (cont[len])) + return cont + len; + + return NULL; +} + +int +sh_parse_name (name, exprP, nextcharP) + char const *name; + expressionS *exprP; + char *nextcharP; +{ + char *next = input_line_pointer; + char *next_end; + int reloc_type; + segT segment; + + exprP->X_op_symbol = NULL; + + if (strcmp (name, GLOBAL_OFFSET_TABLE_NAME) == 0) + { + if (! GOT_symbol) + GOT_symbol = symbol_find_or_make (name); + + exprP->X_add_symbol = GOT_symbol; + no_suffix: + /* If we have an absolute symbol or a reg, then we know its + value now. */ + segment = S_GET_SEGMENT (exprP->X_add_symbol); + if (segment == absolute_section) + { + exprP->X_op = O_constant; + exprP->X_add_number = S_GET_VALUE (exprP->X_add_symbol); + exprP->X_add_symbol = NULL; + } + else if (segment == reg_section) + { + exprP->X_op = O_register; + exprP->X_add_number = S_GET_VALUE (exprP->X_add_symbol); + exprP->X_add_symbol = NULL; + } + else + { + exprP->X_op = O_symbol; + exprP->X_add_number = 0; + } + + return 1; + } + + exprP->X_add_symbol = symbol_find_or_make (name); + + if (*nextcharP != '@') + goto no_suffix; + else if ((next_end = sh_end_of_match (next + 1, "GOTOFF"))) + reloc_type = BFD_RELOC_32_GOTOFF; + else if ((next_end = sh_end_of_match (next + 1, "GOTPLT"))) + reloc_type = BFD_RELOC_SH_GOTPLT32; + else if ((next_end = sh_end_of_match (next + 1, "GOT"))) + reloc_type = BFD_RELOC_32_GOT_PCREL; + else if ((next_end = sh_end_of_match (next + 1, "PLT"))) + reloc_type = BFD_RELOC_32_PLT_PCREL; + else + goto no_suffix; + + *input_line_pointer = *nextcharP; + input_line_pointer = next_end; + *nextcharP = *input_line_pointer; + *input_line_pointer = '\0'; + + exprP->X_op = O_PIC_reloc; + exprP->X_add_number = 0; + exprP->X_md = reloc_type; + + return 1; +} +#endif +#endif /* BFD_ASSEMBLER */ diff --git a/contrib/binutils/gas/config/tc-sh.h b/contrib/binutils/gas/config/tc-sh.h new file mode 100644 index 0000000..ffe948a --- /dev/null +++ b/contrib/binutils/gas/config/tc-sh.h @@ -0,0 +1,232 @@ +/* This file is tc-sh.h + Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 + Free Software Foundation, Inc. + + This file is part of GAS, the GNU Assembler. + + GAS is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GAS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GAS; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#define TC_SH + +#define TARGET_ARCH bfd_arch_sh + +#if ANSI_PROTOTYPES +struct segment_info_struct; +struct internal_reloc; +#endif + +/* Whether -relax was used. */ +extern int sh_relax; + +/* Whether -small was used. */ +extern int sh_small; + +/* Don't try to break words. */ +#define WORKING_DOT_WORD + +/* All SH instructions are multiples of 16 bits. */ +#define DWARF2_LINE_MIN_INSN_LENGTH 2 + +/* 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)); + +/* 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 *)); + +#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) + +/* The type fixS is defined (to struct fix) in write.h, but write.h uses + definitions from this file. To avoid problems with including write.h + after the "right" definitions, don't; just forward-declare struct fix + here. */ +struct fix; +extern int sh_force_relocation PARAMS ((struct fix *)); + +#ifdef OBJ_ELF +#define obj_fix_adjustable(fixP) sh_fix_adjustable(fixP) +struct fix; +extern boolean sh_fix_adjustable PARAMS ((struct fix *)); + +/* This arranges for gas/write.c to not apply a relocation if + obj_fix_adjustable() says it is not adjustable. */ +/* ??? fixups with symbols in SEC_MERGE sections are marked with + obj_fix_adjustable and have a non-section symbol, as in + "vwxyz"+1 in execute/string-opt-6.c . Maybe the test of + (symbol_used_in_reloc_p should be done in the machine-independent code. */ +#define TC_FIX_ADJUSTABLE(fixP) \ + (! symbol_used_in_reloc_p (fixP->fx_addsy) && obj_fix_adjustable (fixP)) +#endif + +#define MD_PCREL_FROM_SECTION(FIXP, SEC) md_pcrel_from_section (FIXP, SEC) +extern long md_pcrel_from_section PARAMS ((struct fix *, segT)); + +#define IGNORE_NONSTANDARD_ESCAPES + +#define LISTING_HEADER \ + (!target_big_endian \ + ? "Hitachi Super-H GAS Little Endian" : "Hitachi Super-H GAS Big Endian") + +#define md_operand(x) + +extern const struct relax_type md_relax_table[]; +#define TC_GENERIC_RELAX_TABLE md_relax_table + +/* We record, for each section, whether we have most recently output a + CODE reloc or a DATA reloc. */ +struct sh_segment_info_type +{ + int in_code : 1; +}; +#define TC_SEGMENT_INFO_TYPE 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)); +#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)); +#define md_flush_pending_output() sh_flush_pending_output () + +#ifdef BFD_ASSEMBLER +#define tc_frob_file_before_adjust sh_frob_file +#else +#define tc_frob_file sh_frob_file +#endif +extern void sh_frob_file PARAMS ((void)); + +#ifdef OBJ_COFF +/* COFF specific definitions. */ + +#define DO_NOT_STRIP 0 + +/* This macro translates between an internal fix and an coff reloc type */ +#define TC_COFF_FIX2RTYPE(fix) ((fix)->fx_r_type) + +#define BFD_ARCH TARGET_ARCH + +#define COFF_MAGIC (!target_big_endian ? SH_ARCH_MAGIC_LITTLE : SH_ARCH_MAGIC_BIG) + +/* We need to write out relocs which have not been completed. */ +#define TC_COUNT_RELOC(fix) ((fix)->fx_addsy != NULL) + +#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)); + +#define tc_coff_symbol_emit_hook(a) ; /* not used */ + +#define NEED_FX_R_TYPE 1 + +#define TC_KEEP_FX_OFFSET 1 + +#define TC_COFF_SIZEMACHDEP(frag) tc_coff_sizemachdep(frag) +extern int tc_coff_sizemachdep PARAMS ((fragS *)); + +#ifdef BFD_ASSEMBLER +#define SEG_NAME(SEG) segment_name (SEG) +#else +#define SEG_NAME(SEG) obj_segment_name (SEG) +#endif + +/* We align most sections to a 16 byte boundary. */ +#define SUB_SEGMENT_ALIGN(SEG, FRCHAIN) \ + (strncmp (SEG_NAME (SEG), ".stabstr", 8) == 0 \ + ? 0 \ + : ((strncmp (SEG_NAME (SEG), ".stab", 5) == 0 \ + || strcmp (SEG_NAME (SEG), ".ctors") == 0 \ + || strcmp (SEG_NAME (SEG), ".dtors") == 0) \ + ? 2 \ + : (sh_small ? 2 : 4))) + +#endif /* OBJ_COFF */ + +#ifdef OBJ_ELF +/* ELF specific definitions. */ + +/* Whether or not the target is big endian */ +extern int target_big_endian; +#ifdef TE_LINUX +#define TARGET_FORMAT (!target_big_endian ? "elf32-sh-linux" : "elf32-shbig-linux") +#elif defined(TE_NetBSD) +#define TARGET_FORMAT (!target_big_endian ? "elf32-shl-nbsd" : "elf32-sh-nbsd") +#else +#define TARGET_FORMAT (!target_big_endian ? "elf32-shl" : "elf32-sh") +#endif + +#define elf_tc_final_processing sh_elf_final_processing +extern void sh_elf_final_processing PARAMS ((void)); + +#define DIFF_EXPR_OK /* foo-. gets turned into PC relative relocs */ + +#define GLOBAL_OFFSET_TABLE_NAME "_GLOBAL_OFFSET_TABLE_" + +/* This is the relocation type for direct references to + GLOBAL_OFFSET_TABLE. It comes up in complicated expressions such + as _GLOBAL_OFFSET_TABLE_+[.-.L284], which cannot be expressed + normally with the regular expressions. The fixup specified here + when used at runtime implies that we should add the address of the + GOT to the specified location, and as a result we have simplified + the expression into something we can use. */ +#define TC_RELOC_GLOBAL_OFFSET_TABLE BFD_RELOC_SH_GOTPC + +/* This expression evaluates to false if the relocation is for a local object + for which we still want to do the relocation at runtime. True if we + are willing to perform this relocation while building the .o file. + This is only used for pcrel relocations, so GOTOFF does not need to be + checked here. I am not sure if some of the others are ever used with + pcrel, but it is easier to be safe than sorry. + + We can't resolve references to the GOT or the PLT when creating the + object file, since these tables are only created by the linker. + Also, if the symbol is global, weak, common or not defined, the + assembler can't compute the appropriate reloc, since its location + can only be determined at link time. */ + +#define TC_RELOC_RTSYM_LOC_FIXUP(FIX) \ + ((FIX)->fx_r_type != BFD_RELOC_32_PLT_PCREL \ + && (FIX)->fx_r_type != BFD_RELOC_32_GOT_PCREL \ + && (FIX)->fx_r_type != BFD_RELOC_SH_GOTPC \ + && ((FIX)->fx_addsy == NULL \ + || (! S_IS_EXTERNAL ((FIX)->fx_addsy) \ + && ! S_IS_WEAK ((FIX)->fx_addsy) \ + && S_IS_DEFINED ((FIX)->fx_addsy) \ + && ! S_IS_COMMON ((FIX)->fx_addsy)))) + +#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)); + +#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 *)); + +/* This is used to construct expressions out of @GOTOFF, @PLT and @GOT + symbols. The relocation type is stored in X_md. */ +#define O_PIC_reloc O_md1 + +#endif /* OBJ_ELF */ diff --git a/contrib/binutils/gas/config/tc-sparc.c b/contrib/binutils/gas/config/tc-sparc.c index 5c610a9..5fa4fe9 100644 --- a/contrib/binutils/gas/config/tc-sparc.c +++ b/contrib/binutils/gas/config/tc-sparc.c @@ -159,7 +159,7 @@ const pseudo_typeS md_pseudo_table[] = {"uaword", s_uacons, 4}, {"uaxword", s_uacons, 8}, #ifdef OBJ_ELF - {"file", dwarf2_directive_file, 0}, + {"file", (void (*) PARAMS ((int))) dwarf2_directive_file, 0}, {"loc", dwarf2_directive_loc, 0}, /* These are specific to sparc/svr4. */ {"2byte", s_uacons, 2}, diff --git a/contrib/binutils/gas/config/tc-v850.c b/contrib/binutils/gas/config/tc-v850.c index e0c4936..e1e5475 100644 --- a/contrib/binutils/gas/config/tc-v850.c +++ b/contrib/binutils/gas/config/tc-v850.c @@ -1086,7 +1086,7 @@ parse_register_list (insn, operand) return NULL; } -CONST char *md_shortopts = "m:"; +const char *md_shortopts = "m:"; struct option md_longopts[] = { {NULL, no_argument, NULL, 0} @@ -1461,7 +1461,7 @@ v850_reloc_prefix (operand) } #define CHECK_(name, reloc) \ - if (strncmp (input_line_pointer, name##"(", strlen (name) + 1) == 0) \ + if (strncmp (input_line_pointer, name "(", strlen (name) + 1) == 0) \ { \ input_line_pointer += strlen (name); \ return reloc; \ @@ -1961,7 +1961,7 @@ md_assemble (str) if (((insn & 0x07e0) == 0x0200) && ex.X_op == O_constant && (ex.X_add_number < (-(1 << (operand->bits - 1))) - || ex.X_add_number > ((1 << operand->bits) - 1))) + || ex.X_add_number > ((1 << (operand->bits - 1)) - 1))) errmsg = _("immediate operand is too large"); } diff --git a/contrib/binutils/gas/config/tc-v850.h b/contrib/binutils/gas/config/tc-v850.h index 3de777c..8257428 100644 --- a/contrib/binutils/gas/config/tc-v850.h +++ b/contrib/binutils/gas/config/tc-v850.h @@ -1,5 +1,6 @@ /* tc-v850.h -- Header file for tc-v850.c. - Copyright 1996, 1997, 1998, 2000, 2001 Free Software Foundation, Inc. + Copyright 1996, 1997, 1998, 2000, 2001, 2002 + Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. @@ -20,7 +21,7 @@ #define TC_V850 -#include <elf/v850.h> +#include "elf/v850.h" #define TARGET_BYTES_BIG_ENDIAN 0 diff --git a/contrib/binutils/gas/configure b/contrib/binutils/gas/configure index 4fcba08..53eb2a4 100755 --- a/contrib/binutils/gas/configure +++ b/contrib/binutils/gas/configure @@ -1647,7 +1647,7 @@ else if { (eval echo configure:1648: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then for file in conftest.*; do case $file in - *.c | *.o | *.obj) ;; + *.$ac_ext | *.c | *.o | *.obj) ;; *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;; esac done @@ -2267,14 +2267,8 @@ for this_target in $target $canon_targets ; do endian= case ${cpu} in alpha*) cpu_type=alpha ;; - armeb) cpu_type=arm endian=big ;; - arm*) cpu_type=arm endian=little ;; - armb*) cpu_type=arm endian=little ;; - armv*l) cpu_type=arm endian=little ;; - armv*b) cpu_type=arm endian=big ;; - xscale*) cpu_type=arm endian=little ;; - strongarm*) cpu_type=arm endian=little ;; - thumb*) cpu_type=arm endian=little ;; + arm*b|xscale*b|strongarm*b) cpu_type=arm endian=big ;; + arm*|xscale*|strongarm*) cpu_type=arm endian=little ;; hppa*) cpu_type=hppa ;; i[3456]86) cpu_type=i386 arch=i386;; x86_64) cpu_type=i386 arch=x86_64;; @@ -3155,7 +3149,7 @@ EOF # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3159: checking for $ac_word" >&5 +echo "configure:3153: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3185,7 +3179,7 @@ if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3189: checking for $ac_word" >&5 +echo "configure:3183: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3236,7 +3230,7 @@ fi # Extract the first word of "cl", so it can be a program name with args. set dummy cl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3240: checking for $ac_word" >&5 +echo "configure:3234: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3268,7 +3262,7 @@ fi fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:3272: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 +echo "configure:3266: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. @@ -3279,12 +3273,12 @@ cross_compiling=$ac_cv_prog_cc_cross cat > conftest.$ac_ext << EOF -#line 3283 "configure" +#line 3277 "configure" #include "confdefs.h" main(){return(0);} EOF -if { (eval echo configure:3288: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3282: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then @@ -3310,12 +3304,12 @@ if test $ac_cv_prog_cc_works = no; then { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -echo "configure:3314: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "configure:3308: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:3319: checking whether we are using GNU C" >&5 +echo "configure:3313: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3324,7 +3318,7 @@ else yes; #endif EOF -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:3328: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then +if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:3322: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no @@ -3343,7 +3337,7 @@ ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 -echo "configure:3347: checking whether ${CC-cc} accepts -g" >&5 +echo "configure:3341: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3380,7 +3374,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3384: checking for $ac_word" >&5 +echo "configure:3378: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_YACC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3411,7 +3405,7 @@ done test -n "$YACC" || YACC="yacc" echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 -echo "configure:3415: checking how to run the C preprocessor" >&5 +echo "configure:3409: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= @@ -3426,13 +3420,13 @@ else # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext <<EOF -#line 3430 "configure" +#line 3424 "configure" #include "confdefs.h" #include <assert.h> Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:3436: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:3430: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -3443,13 +3437,13 @@ else rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext <<EOF -#line 3447 "configure" +#line 3441 "configure" #include "confdefs.h" #include <assert.h> Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:3453: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:3447: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -3460,13 +3454,13 @@ else rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext <<EOF -#line 3464 "configure" +#line 3458 "configure" #include "confdefs.h" #include <assert.h> Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:3470: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:3464: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -3496,7 +3490,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3500: checking for $ac_word" >&5 +echo "configure:3494: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LEX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3529,7 +3523,7 @@ test -n "$LEX" || LEX="$missing_dir/missing flex" # Extract the first word of "flex", so it can be a program name with args. set dummy flex; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3533: checking for $ac_word" >&5 +echo "configure:3527: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LEX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3563,7 +3557,7 @@ then *) ac_lib=l ;; esac echo $ac_n "checking for yywrap in -l$ac_lib""... $ac_c" 1>&6 -echo "configure:3567: checking for yywrap in -l$ac_lib" >&5 +echo "configure:3561: checking for yywrap in -l$ac_lib" >&5 ac_lib_var=`echo $ac_lib'_'yywrap | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -3571,7 +3565,7 @@ else ac_save_LIBS="$LIBS" LIBS="-l$ac_lib $LIBS" cat > conftest.$ac_ext <<EOF -#line 3575 "configure" +#line 3569 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -3582,7 +3576,7 @@ int main() { yywrap() ; return 0; } EOF -if { (eval echo configure:3586: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3580: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -3605,7 +3599,7 @@ fi fi echo $ac_n "checking lex output file root""... $ac_c" 1>&6 -echo "configure:3609: checking lex output file root" >&5 +echo "configure:3603: checking lex output file root" >&5 if eval "test \"`echo '$''{'ac_cv_prog_lex_root'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3626,7 +3620,7 @@ echo "$ac_t""$ac_cv_prog_lex_root" 1>&6 LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root echo $ac_n "checking whether yytext is a pointer""... $ac_c" 1>&6 -echo "configure:3630: checking whether yytext is a pointer" >&5 +echo "configure:3624: checking whether yytext is a pointer" >&5 if eval "test \"`echo '$''{'ac_cv_prog_lex_yytext_pointer'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3638,14 +3632,14 @@ echo 'extern char *yytext;' >>$LEX_OUTPUT_ROOT.c ac_save_LIBS="$LIBS" LIBS="$LIBS $LEXLIB" cat > conftest.$ac_ext <<EOF -#line 3642 "configure" +#line 3636 "configure" #include "confdefs.h" `cat $LEX_OUTPUT_ROOT.c` int main() { ; return 0; } EOF -if { (eval echo configure:3649: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3643: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_prog_lex_yytext_pointer=yes else @@ -3671,7 +3665,7 @@ ALL_LINGUAS="fr tr es" # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3675: checking for $ac_word" >&5 +echo "configure:3669: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3699,12 +3693,12 @@ else fi echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 -echo "configure:3703: checking for ANSI C header files" >&5 +echo "configure:3697: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 3708 "configure" +#line 3702 "configure" #include "confdefs.h" #include <stdlib.h> #include <stdarg.h> @@ -3712,7 +3706,7 @@ else #include <float.h> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:3716: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:3710: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -3729,7 +3723,7 @@ rm -f conftest* if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext <<EOF -#line 3733 "configure" +#line 3727 "configure" #include "confdefs.h" #include <string.h> EOF @@ -3747,7 +3741,7 @@ fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext <<EOF -#line 3751 "configure" +#line 3745 "configure" #include "confdefs.h" #include <stdlib.h> EOF @@ -3768,7 +3762,7 @@ if test "$cross_compiling" = yes; then : else cat > conftest.$ac_ext <<EOF -#line 3772 "configure" +#line 3766 "configure" #include "confdefs.h" #include <ctype.h> #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') @@ -3779,7 +3773,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } EOF -if { (eval echo configure:3783: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3777: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else @@ -3803,12 +3797,12 @@ EOF fi echo $ac_n "checking for working const""... $ac_c" 1>&6 -echo "configure:3807: checking for working const" >&5 +echo "configure:3801: checking for working const" >&5 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 3812 "configure" +#line 3806 "configure" #include "confdefs.h" int main() { @@ -3857,7 +3851,7 @@ ccp = (char const *const *) p; ; return 0; } EOF -if { (eval echo configure:3861: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3855: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else @@ -3878,21 +3872,21 @@ EOF fi echo $ac_n "checking for inline""... $ac_c" 1>&6 -echo "configure:3882: checking for inline" >&5 +echo "configure:3876: checking for inline" >&5 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <<EOF -#line 3889 "configure" +#line 3883 "configure" #include "confdefs.h" int main() { } $ac_kw foo() { ; return 0; } EOF -if { (eval echo configure:3896: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3890: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else @@ -3918,12 +3912,12 @@ EOF esac echo $ac_n "checking for off_t""... $ac_c" 1>&6 -echo "configure:3922: checking for off_t" >&5 +echo "configure:3916: checking for off_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 3927 "configure" +#line 3921 "configure" #include "confdefs.h" #include <sys/types.h> #if STDC_HEADERS @@ -3951,12 +3945,12 @@ EOF fi echo $ac_n "checking for size_t""... $ac_c" 1>&6 -echo "configure:3955: checking for size_t" >&5 +echo "configure:3949: checking for size_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 3960 "configure" +#line 3954 "configure" #include "confdefs.h" #include <sys/types.h> #if STDC_HEADERS @@ -3986,19 +3980,19 @@ fi # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works # for constant arguments. Useless! echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6 -echo "configure:3990: checking for working alloca.h" >&5 +echo "configure:3984: checking for working alloca.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 3995 "configure" +#line 3989 "configure" #include "confdefs.h" #include <alloca.h> int main() { char *p = alloca(2 * sizeof(int)); ; return 0; } EOF -if { (eval echo configure:4002: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3996: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_header_alloca_h=yes else @@ -4019,12 +4013,12 @@ EOF fi echo $ac_n "checking for alloca""... $ac_c" 1>&6 -echo "configure:4023: checking for alloca" >&5 +echo "configure:4017: checking for alloca" >&5 if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 4028 "configure" +#line 4022 "configure" #include "confdefs.h" #ifdef __GNUC__ @@ -4052,7 +4046,7 @@ int main() { char *p = (char *) alloca(1); ; return 0; } EOF -if { (eval echo configure:4056: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4050: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_alloca_works=yes else @@ -4084,12 +4078,12 @@ EOF echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6 -echo "configure:4088: checking whether alloca needs Cray hooks" >&5 +echo "configure:4082: checking whether alloca needs Cray hooks" >&5 if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 4093 "configure" +#line 4087 "configure" #include "confdefs.h" #if defined(CRAY) && ! defined(CRAY2) webecray @@ -4114,12 +4108,12 @@ echo "$ac_t""$ac_cv_os_cray" 1>&6 if test $ac_cv_os_cray = yes; then for ac_func in _getb67 GETB67 getb67; do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:4118: checking for $ac_func" >&5 +echo "configure:4112: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 4123 "configure" +#line 4117 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func(); below. */ @@ -4142,7 +4136,7 @@ $ac_func(); ; return 0; } EOF -if { (eval echo configure:4146: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4140: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -4169,7 +4163,7 @@ done fi echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6 -echo "configure:4173: checking stack direction for C alloca" >&5 +echo "configure:4167: checking stack direction for C alloca" >&5 if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4177,7 +4171,7 @@ else ac_cv_c_stack_direction=0 else cat > conftest.$ac_ext <<EOF -#line 4181 "configure" +#line 4175 "configure" #include "confdefs.h" find_stack_direction () { @@ -4196,7 +4190,7 @@ main () exit (find_stack_direction() < 0); } EOF -if { (eval echo configure:4200: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4194: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_stack_direction=1 else @@ -4217,21 +4211,21 @@ EOF fi -for ac_hdr in stdlib.h unistd.h sys/stat.h sys/types.h +for ac_hdr in unistd.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4225: checking for $ac_hdr" >&5 +echo "configure:4219: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 4230 "configure" +#line 4224 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4235: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4229: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4260,12 +4254,12 @@ done for ac_func in getpagesize do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:4264: checking for $ac_func" >&5 +echo "configure:4258: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 4269 "configure" +#line 4263 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func(); below. */ @@ -4288,7 +4282,7 @@ $ac_func(); ; return 0; } EOF -if { (eval echo configure:4292: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4286: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -4313,7 +4307,7 @@ fi done echo $ac_n "checking for working mmap""... $ac_c" 1>&6 -echo "configure:4317: checking for working mmap" >&5 +echo "configure:4311: checking for working mmap" >&5 if eval "test \"`echo '$''{'ac_cv_func_mmap_fixed_mapped'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4321,7 +4315,7 @@ else ac_cv_func_mmap_fixed_mapped=no else cat > conftest.$ac_ext <<EOF -#line 4325 "configure" +#line 4319 "configure" #include "confdefs.h" /* Thanks to Mike Haertel and Jim Avera for this test. @@ -4349,24 +4343,11 @@ else #include <fcntl.h> #include <sys/mman.h> -#if HAVE_SYS_TYPES_H -# include <sys/types.h> -#endif - -#if HAVE_STDLIB_H -# include <stdlib.h> -#endif - -#if HAVE_SYS_STAT_H -# include <sys/stat.h> -#endif - -#if HAVE_UNISTD_H -# include <unistd.h> -#endif - /* This mess was copied from the GNU getpagesize.h. */ #ifndef HAVE_GETPAGESIZE +# ifdef HAVE_UNISTD_H +# include <unistd.h> +# endif /* Assume that all systems that can run configure have sys/param.h. */ # ifndef HAVE_SYS_PARAM_H @@ -4474,7 +4455,7 @@ main() } EOF -if { (eval echo configure:4478: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4459: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_mmap_fixed_mapped=yes else @@ -4502,17 +4483,17 @@ unistd.h values.h sys/param.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4506: checking for $ac_hdr" >&5 +echo "configure:4487: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 4511 "configure" +#line 4492 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4516: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4497: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4542,12 +4523,12 @@ done __argz_count __argz_stringify __argz_next do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:4546: checking for $ac_func" >&5 +echo "configure:4527: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 4551 "configure" +#line 4532 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func(); below. */ @@ -4570,7 +4551,7 @@ $ac_func(); ; return 0; } EOF -if { (eval echo configure:4574: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4555: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -4599,12 +4580,12 @@ done for ac_func in stpcpy do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:4603: checking for $ac_func" >&5 +echo "configure:4584: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 4608 "configure" +#line 4589 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func(); below. */ @@ -4627,7 +4608,7 @@ $ac_func(); ; return 0; } EOF -if { (eval echo configure:4631: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4612: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -4661,19 +4642,19 @@ EOF if test $ac_cv_header_locale_h = yes; then echo $ac_n "checking for LC_MESSAGES""... $ac_c" 1>&6 -echo "configure:4665: checking for LC_MESSAGES" >&5 +echo "configure:4646: checking for LC_MESSAGES" >&5 if eval "test \"`echo '$''{'am_cv_val_LC_MESSAGES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 4670 "configure" +#line 4651 "configure" #include "confdefs.h" #include <locale.h> int main() { return LC_MESSAGES ; return 0; } EOF -if { (eval echo configure:4677: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4658: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* am_cv_val_LC_MESSAGES=yes else @@ -4694,7 +4675,7 @@ EOF fi fi echo $ac_n "checking whether NLS is requested""... $ac_c" 1>&6 -echo "configure:4698: checking whether NLS is requested" >&5 +echo "configure:4679: checking whether NLS is requested" >&5 # Check whether --enable-nls or --disable-nls was given. if test "${enable_nls+set}" = set; then enableval="$enable_nls" @@ -4714,7 +4695,7 @@ fi EOF echo $ac_n "checking whether included gettext is requested""... $ac_c" 1>&6 -echo "configure:4718: checking whether included gettext is requested" >&5 +echo "configure:4699: checking whether included gettext is requested" >&5 # Check whether --with-included-gettext or --without-included-gettext was given. if test "${with_included_gettext+set}" = set; then withval="$with_included_gettext" @@ -4733,17 +4714,17 @@ fi ac_safe=`echo "libintl.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for libintl.h""... $ac_c" 1>&6 -echo "configure:4737: checking for libintl.h" >&5 +echo "configure:4718: checking for libintl.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 4742 "configure" +#line 4723 "configure" #include "confdefs.h" #include <libintl.h> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4747: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4728: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4760,19 +4741,19 @@ fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 echo $ac_n "checking for gettext in libc""... $ac_c" 1>&6 -echo "configure:4764: checking for gettext in libc" >&5 +echo "configure:4745: checking for gettext in libc" >&5 if eval "test \"`echo '$''{'gt_cv_func_gettext_libc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 4769 "configure" +#line 4750 "configure" #include "confdefs.h" #include <libintl.h> int main() { return (int) gettext ("") ; return 0; } EOF -if { (eval echo configure:4776: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4757: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* gt_cv_func_gettext_libc=yes else @@ -4788,7 +4769,7 @@ echo "$ac_t""$gt_cv_func_gettext_libc" 1>&6 if test "$gt_cv_func_gettext_libc" != "yes"; then echo $ac_n "checking for bindtextdomain in -lintl""... $ac_c" 1>&6 -echo "configure:4792: checking for bindtextdomain in -lintl" >&5 +echo "configure:4773: checking for bindtextdomain in -lintl" >&5 ac_lib_var=`echo intl'_'bindtextdomain | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4796,7 +4777,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lintl $LIBS" cat > conftest.$ac_ext <<EOF -#line 4800 "configure" +#line 4781 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -4807,7 +4788,7 @@ int main() { bindtextdomain() ; return 0; } EOF -if { (eval echo configure:4811: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4792: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4823,19 +4804,19 @@ fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 echo $ac_n "checking for gettext in libintl""... $ac_c" 1>&6 -echo "configure:4827: checking for gettext in libintl" >&5 +echo "configure:4808: checking for gettext in libintl" >&5 if eval "test \"`echo '$''{'gt_cv_func_gettext_libintl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 4832 "configure" +#line 4813 "configure" #include "confdefs.h" int main() { return (int) gettext ("") ; return 0; } EOF -if { (eval echo configure:4839: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4820: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* gt_cv_func_gettext_libintl=yes else @@ -4863,7 +4844,7 @@ EOF # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4867: checking for $ac_word" >&5 +echo "configure:4848: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4897,12 +4878,12 @@ fi for ac_func in dcgettext do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:4901: checking for $ac_func" >&5 +echo "configure:4882: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 4906 "configure" +#line 4887 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func(); below. */ @@ -4925,7 +4906,7 @@ $ac_func(); ; return 0; } EOF -if { (eval echo configure:4929: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4910: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -4952,7 +4933,7 @@ done # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4956: checking for $ac_word" >&5 +echo "configure:4937: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4988,7 +4969,7 @@ fi # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4992: checking for $ac_word" >&5 +echo "configure:4973: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5020,7 +5001,7 @@ else fi cat > conftest.$ac_ext <<EOF -#line 5024 "configure" +#line 5005 "configure" #include "confdefs.h" int main() { @@ -5028,7 +5009,7 @@ extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr ; return 0; } EOF -if { (eval echo configure:5032: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5013: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* CATOBJEXT=.gmo DATADIRNAME=share @@ -5060,7 +5041,7 @@ fi # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5064: checking for $ac_word" >&5 +echo "configure:5045: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5094,7 +5075,7 @@ fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5098: checking for $ac_word" >&5 +echo "configure:5079: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5130,7 +5111,7 @@ fi # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5134: checking for $ac_word" >&5 +echo "configure:5115: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5220,7 +5201,7 @@ fi LINGUAS= else echo $ac_n "checking for catalogs to be installed""... $ac_c" 1>&6 -echo "configure:5224: checking for catalogs to be installed" >&5 +echo "configure:5205: checking for catalogs to be installed" >&5 NEW_LINGUAS= for lang in ${LINGUAS=$ALL_LINGUAS}; do case "$ALL_LINGUAS" in @@ -5248,17 +5229,17 @@ echo "configure:5224: checking for catalogs to be installed" >&5 if test "$CATOBJEXT" = ".cat"; then ac_safe=`echo "linux/version.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for linux/version.h""... $ac_c" 1>&6 -echo "configure:5252: checking for linux/version.h" >&5 +echo "configure:5233: checking for linux/version.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 5257 "configure" +#line 5238 "configure" #include "confdefs.h" #include <linux/version.h> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:5262: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:5243: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -5321,7 +5302,7 @@ fi echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6 -echo "configure:5325: checking whether to enable maintainer-specific portions of Makefiles" >&5 +echo "configure:5306: checking whether to enable maintainer-specific portions of Makefiles" >&5 # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then enableval="$enable_maintainer_mode" @@ -5346,7 +5327,7 @@ fi echo $ac_n "checking for executable suffix""... $ac_c" 1>&6 -echo "configure:5350: checking for executable suffix" >&5 +echo "configure:5331: checking for executable suffix" >&5 if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5356,10 +5337,10 @@ else rm -f conftest* echo 'int main () { return 0; }' > conftest.$ac_ext ac_cv_exeext= - if { (eval echo configure:5360: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then + if { (eval echo configure:5341: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then for file in conftest.*; do case $file in - *.c | *.o | *.obj) ;; + *.$ac_ext | *.c | *.o | *.obj) ;; *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;; esac done @@ -5381,17 +5362,17 @@ for ac_hdr in string.h stdlib.h memory.h strings.h unistd.h stdarg.h varargs.h e do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:5385: checking for $ac_hdr" >&5 +echo "configure:5366: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 5390 "configure" +#line 5371 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:5395: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:5376: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -5421,7 +5402,7 @@ done # Put this here so that autoconf's "cross-compiling" message doesn't confuse # people who are not cross-compiling but are compiling cross-assemblers. echo $ac_n "checking whether compiling a cross-assembler""... $ac_c" 1>&6 -echo "configure:5425: checking whether compiling a cross-assembler" >&5 +echo "configure:5406: checking whether compiling a cross-assembler" >&5 if test "${host}" = "${target}"; then cross_gas=no else @@ -5436,19 +5417,19 @@ echo "$ac_t""$cross_gas" 1>&6 # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works # for constant arguments. Useless! echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6 -echo "configure:5440: checking for working alloca.h" >&5 +echo "configure:5421: checking for working alloca.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 5445 "configure" +#line 5426 "configure" #include "confdefs.h" #include <alloca.h> int main() { char *p = alloca(2 * sizeof(int)); ; return 0; } EOF -if { (eval echo configure:5452: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5433: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_header_alloca_h=yes else @@ -5469,12 +5450,12 @@ EOF fi echo $ac_n "checking for alloca""... $ac_c" 1>&6 -echo "configure:5473: checking for alloca" >&5 +echo "configure:5454: checking for alloca" >&5 if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 5478 "configure" +#line 5459 "configure" #include "confdefs.h" #ifdef __GNUC__ @@ -5502,7 +5483,7 @@ int main() { char *p = (char *) alloca(1); ; return 0; } EOF -if { (eval echo configure:5506: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5487: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_alloca_works=yes else @@ -5534,12 +5515,12 @@ EOF echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6 -echo "configure:5538: checking whether alloca needs Cray hooks" >&5 +echo "configure:5519: checking whether alloca needs Cray hooks" >&5 if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 5543 "configure" +#line 5524 "configure" #include "confdefs.h" #if defined(CRAY) && ! defined(CRAY2) webecray @@ -5564,12 +5545,12 @@ echo "$ac_t""$ac_cv_os_cray" 1>&6 if test $ac_cv_os_cray = yes; then for ac_func in _getb67 GETB67 getb67; do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5568: checking for $ac_func" >&5 +echo "configure:5549: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 5573 "configure" +#line 5554 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func(); below. */ @@ -5592,7 +5573,7 @@ $ac_func(); ; return 0; } EOF -if { (eval echo configure:5596: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5577: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5619,7 +5600,7 @@ done fi echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6 -echo "configure:5623: checking stack direction for C alloca" >&5 +echo "configure:5604: checking stack direction for C alloca" >&5 if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5627,7 +5608,7 @@ else ac_cv_c_stack_direction=0 else cat > conftest.$ac_ext <<EOF -#line 5631 "configure" +#line 5612 "configure" #include "confdefs.h" find_stack_direction () { @@ -5646,7 +5627,7 @@ main () exit (find_stack_direction() < 0); } EOF -if { (eval echo configure:5650: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:5631: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_stack_direction=1 else @@ -5668,21 +5649,21 @@ EOF fi echo $ac_n "checking for inline""... $ac_c" 1>&6 -echo "configure:5672: checking for inline" >&5 +echo "configure:5653: checking for inline" >&5 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <<EOF -#line 5679 "configure" +#line 5660 "configure" #include "confdefs.h" int main() { } $ac_kw foo() { ; return 0; } EOF -if { (eval echo configure:5686: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:5667: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else @@ -5712,12 +5693,12 @@ esac for ac_func in unlink remove do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5716: checking for $ac_func" >&5 +echo "configure:5697: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 5721 "configure" +#line 5702 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func(); below. */ @@ -5740,7 +5721,7 @@ $ac_func(); ; return 0; } EOF -if { (eval echo configure:5744: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5725: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5769,12 +5750,12 @@ done for ac_func in sbrk do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5773: checking for $ac_func" >&5 +echo "configure:5754: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 5778 "configure" +#line 5759 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func(); below. */ @@ -5797,7 +5778,7 @@ $ac_func(); ; return 0; } EOF -if { (eval echo configure:5801: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5782: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5832,7 +5813,7 @@ case $host in ;; *-ncr-sysv4.3*) echo $ac_n "checking for _mwvalidcheckl in -lmw""... $ac_c" 1>&6 -echo "configure:5836: checking for _mwvalidcheckl in -lmw" >&5 +echo "configure:5817: checking for _mwvalidcheckl in -lmw" >&5 ac_lib_var=`echo mw'_'_mwvalidcheckl | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5840,7 +5821,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lmw $LIBS" cat > conftest.$ac_ext <<EOF -#line 5844 "configure" +#line 5825 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -5851,7 +5832,7 @@ int main() { _mwvalidcheckl() ; return 0; } EOF -if { (eval echo configure:5855: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5836: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5872,7 +5853,7 @@ else fi echo $ac_n "checking for main in -lm""... $ac_c" 1>&6 -echo "configure:5876: checking for main in -lm" >&5 +echo "configure:5857: checking for main in -lm" >&5 ac_lib_var=`echo m'_'main | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5880,14 +5861,14 @@ else ac_save_LIBS="$LIBS" LIBS="-lm $LIBS" cat > conftest.$ac_ext <<EOF -#line 5884 "configure" +#line 5865 "configure" #include "confdefs.h" int main() { main() ; return 0; } EOF -if { (eval echo configure:5891: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5872: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5910,7 +5891,7 @@ fi ;; *) echo $ac_n "checking for main in -lm""... $ac_c" 1>&6 -echo "configure:5914: checking for main in -lm" >&5 +echo "configure:5895: checking for main in -lm" >&5 ac_lib_var=`echo m'_'main | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5918,14 +5899,14 @@ else ac_save_LIBS="$LIBS" LIBS="-lm $LIBS" cat > conftest.$ac_ext <<EOF -#line 5922 "configure" +#line 5903 "configure" #include "confdefs.h" int main() { main() ; return 0; } EOF -if { (eval echo configure:5929: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5910: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5956,12 +5937,12 @@ esac # enough, but on some of those systems, the assert macro relies on requoting # working properly! echo $ac_n "checking for working assert macro""... $ac_c" 1>&6 -echo "configure:5960: checking for working assert macro" >&5 +echo "configure:5941: checking for working assert macro" >&5 if eval "test \"`echo '$''{'gas_cv_assert_ok'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 5965 "configure" +#line 5946 "configure" #include "confdefs.h" #include <assert.h> #include <stdio.h> @@ -5977,7 +5958,7 @@ assert (a == b ; return 0; } EOF -if { (eval echo configure:5981: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5962: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* gas_cv_assert_ok=yes else @@ -6018,12 +5999,12 @@ gas_test_headers=" " echo $ac_n "checking whether declaration is required for strstr""... $ac_c" 1>&6 -echo "configure:6022: checking whether declaration is required for strstr" >&5 +echo "configure:6003: checking whether declaration is required for strstr" >&5 if eval "test \"`echo '$''{'gas_cv_decl_needed_strstr'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 6027 "configure" +#line 6008 "configure" #include "confdefs.h" $gas_test_headers int main() { @@ -6034,7 +6015,7 @@ x = (f) strstr; ; return 0; } EOF -if { (eval echo configure:6038: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6019: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* gas_cv_decl_needed_strstr=no else @@ -6055,12 +6036,12 @@ fi echo $ac_n "checking whether declaration is required for malloc""... $ac_c" 1>&6 -echo "configure:6059: checking whether declaration is required for malloc" >&5 +echo "configure:6040: checking whether declaration is required for malloc" >&5 if eval "test \"`echo '$''{'gas_cv_decl_needed_malloc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 6064 "configure" +#line 6045 "configure" #include "confdefs.h" $gas_test_headers int main() { @@ -6071,7 +6052,7 @@ x = (f) malloc; ; return 0; } EOF -if { (eval echo configure:6075: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6056: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* gas_cv_decl_needed_malloc=no else @@ -6092,12 +6073,12 @@ fi echo $ac_n "checking whether declaration is required for free""... $ac_c" 1>&6 -echo "configure:6096: checking whether declaration is required for free" >&5 +echo "configure:6077: checking whether declaration is required for free" >&5 if eval "test \"`echo '$''{'gas_cv_decl_needed_free'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 6101 "configure" +#line 6082 "configure" #include "confdefs.h" $gas_test_headers int main() { @@ -6108,7 +6089,7 @@ x = (f) free; ; return 0; } EOF -if { (eval echo configure:6112: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6093: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* gas_cv_decl_needed_free=no else @@ -6129,12 +6110,12 @@ fi echo $ac_n "checking whether declaration is required for sbrk""... $ac_c" 1>&6 -echo "configure:6133: checking whether declaration is required for sbrk" >&5 +echo "configure:6114: checking whether declaration is required for sbrk" >&5 if eval "test \"`echo '$''{'gas_cv_decl_needed_sbrk'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 6138 "configure" +#line 6119 "configure" #include "confdefs.h" $gas_test_headers int main() { @@ -6145,7 +6126,7 @@ x = (f) sbrk; ; return 0; } EOF -if { (eval echo configure:6149: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6130: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* gas_cv_decl_needed_sbrk=no else @@ -6166,12 +6147,12 @@ fi echo $ac_n "checking whether declaration is required for environ""... $ac_c" 1>&6 -echo "configure:6170: checking whether declaration is required for environ" >&5 +echo "configure:6151: checking whether declaration is required for environ" >&5 if eval "test \"`echo '$''{'gas_cv_decl_needed_environ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 6175 "configure" +#line 6156 "configure" #include "confdefs.h" $gas_test_headers int main() { @@ -6182,7 +6163,7 @@ x = (f) environ; ; return 0; } EOF -if { (eval echo configure:6186: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6167: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* gas_cv_decl_needed_environ=no else @@ -6206,12 +6187,12 @@ fi # for it? echo $ac_n "checking whether declaration is required for errno""... $ac_c" 1>&6 -echo "configure:6210: checking whether declaration is required for errno" >&5 +echo "configure:6191: checking whether declaration is required for errno" >&5 if eval "test \"`echo '$''{'gas_cv_decl_needed_errno'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 6215 "configure" +#line 6196 "configure" #include "confdefs.h" #ifdef HAVE_ERRNO_H @@ -6226,7 +6207,7 @@ x = (f) errno; ; return 0; } EOF -if { (eval echo configure:6230: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6211: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* gas_cv_decl_needed_errno=no else diff --git a/contrib/binutils/gas/configure.in b/contrib/binutils/gas/configure.in index 8f5ab3c..d83516d 100644 --- a/contrib/binutils/gas/configure.in +++ b/contrib/binutils/gas/configure.in @@ -115,14 +115,8 @@ changequote([,])dnl endian= case ${cpu} in alpha*) cpu_type=alpha ;; - armeb) cpu_type=arm endian=big ;; - arm*) cpu_type=arm endian=little ;; - armb*) cpu_type=arm endian=little ;; - armv*l) cpu_type=arm endian=little ;; - armv*b) cpu_type=arm endian=big ;; - xscale*) cpu_type=arm endian=little ;; - strongarm*) cpu_type=arm endian=little ;; - thumb*) cpu_type=arm endian=little ;; + arm*b|xscale*b|strongarm*b) cpu_type=arm endian=big ;; + arm*|xscale*|strongarm*) cpu_type=arm endian=little ;; hppa*) cpu_type=hppa ;; changequote(,)dnl i[3456]86) cpu_type=i386 arch=i386;; diff --git a/contrib/binutils/gas/itbl-lex.l b/contrib/binutils/gas/itbl-lex.l index ed0be64..e924efc 100644 --- a/contrib/binutils/gas/itbl-lex.l +++ b/contrib/binutils/gas/itbl-lex.l @@ -22,7 +22,8 @@ #include <stdio.h> #include <string.h> #include <stdlib.h> -#include "itbl-parse.h" + +#include <itbl-parse.h> #ifdef DEBUG #define DBG(x) printf x diff --git a/contrib/binutils/gas/itbl-ops.c b/contrib/binutils/gas/itbl-ops.c index d67a986..09db9f7 100644 --- a/contrib/binutils/gas/itbl-ops.c +++ b/contrib/binutils/gas/itbl-ops.c @@ -92,7 +92,7 @@ #include <stdlib.h> #include <string.h> #include "itbl-ops.h" -#include "itbl-parse.h" +#include <itbl-parse.h> /* #define DEBUG */ diff --git a/contrib/binutils/gas/itbl-parse.y b/contrib/binutils/gas/itbl-parse.y index c1afdbd..9a0b7c3 100644 --- a/contrib/binutils/gas/itbl-parse.y +++ b/contrib/binutils/gas/itbl-parse.y @@ -321,6 +321,7 @@ entry: insn=itbl_add_insn ($1, $3, $4, sbit, ebit, $6); } fieldspecs NL + {} | NL | error NL ; diff --git a/contrib/binutils/gas/po/gas.pot b/contrib/binutils/gas/po/gas.pot index b13d1da..45a2485 100644 --- a/contrib/binutils/gas/po/gas.pot +++ b/contrib/binutils/gas/po/gas.pot @@ -1,12 +1,13 @@ # SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR Free Software Foundation, Inc. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2002-07-23 15:57-0400\n" +"POT-Creation-Date: 2002-10-30 10:07-0500\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -346,7 +347,7 @@ msgstr "" #. * We have a GROSS internal error. #. * This should never happen. #. -#: atof-generic.c:437 config/tc-m68k.c:2879 +#: atof-generic.c:437 config/tc-m68k.c:2883 msgid "failed sanity check" msgstr "" @@ -443,7 +444,7 @@ msgstr "" msgid "%s: bad type for weak symbol" msgstr "" -#: config/obj-aout.c:458 config/obj-coff.c:2941 write.c:1952 +#: config/obj-aout.c:458 config/obj-coff.c:2941 write.c:1927 #, c-format msgid "%s: global symbols not supported in common sections" msgstr "" @@ -552,12 +553,12 @@ msgstr "" msgid "unsupported section attribute '%c'" msgstr "" -#: config/obj-coff.c:1483 config/obj-coff.c:3755 config/tc-ppc.c:4222 +#: config/obj-coff.c:1483 config/obj-coff.c:3755 config/tc-ppc.c:4243 #, c-format msgid "unknown section attribute '%c'" msgstr "" -#: config/obj-coff.c:1513 config/tc-ppc.c:4240 config/tc-tic54x.c:4339 +#: config/obj-coff.c:1513 config/tc-ppc.c:4261 config/tc-tic54x.c:4339 #: read.c:2560 #, c-format msgid "error setting flags for \"%s\": %s" @@ -640,7 +641,7 @@ msgstr "" #. This is a COBR instruction. They have only a 13-bit #. displacement and are only to be used for local branches: #. flag as error, don't generate relocation. -#: config/obj-coff.c:4416 config/tc-i960.c:3227 write.c:2845 +#: config/obj-coff.c:4416 config/tc-i960.c:3227 write.c:2820 msgid "can't use COBR format with external label" msgstr "" @@ -672,7 +673,7 @@ msgid ".COMMon length (%d.) <0! Ignored." msgstr "" #: config/obj-elf.c:330 ecoff.c:3397 read.c:1403 read.c:1504 read.c:2142 -#: read.c:2231 read.c:2861 read.c:4942 symbols.c:361 symbols.c:460 +#: read.c:2231 read.c:2861 read.c:4951 symbols.c:361 symbols.c:460 #, c-format msgid "symbol `%s' is already defined" msgstr "" @@ -1016,7 +1017,7 @@ msgstr "" #. Probably a memory allocation problem? Give up now. #: config/tc-a29k.c:330 config/tc-dlx.c:369 config/tc-hppa.c:1464 -#: config/tc-mips.c:1063 config/tc-mips.c:1105 config/tc-or32.c:230 +#: config/tc-mips.c:1077 config/tc-mips.c:1119 config/tc-or32.c:230 #: config/tc-sparc.c:853 msgid "Broken assembler. No assembly attempted." msgstr "" @@ -1025,7 +1026,7 @@ msgstr "" #: config/tc-d30v.c:552 config/tc-h8300.c:333 config/tc-h8500.c:284 #: config/tc-mcore.c:655 config/tc-mmix.c:475 config/tc-mn10200.c:940 #: config/tc-mn10300.c:1318 config/tc-or32.c:336 config/tc-or32.c:392 -#: config/tc-ppc.c:2122 config/tc-s390.c:1062 config/tc-sh.c:1272 +#: config/tc-ppc.c:2143 config/tc-s390.c:1062 config/tc-sh.c:1272 #: config/tc-sh64.c:2228 config/tc-tic80.c:283 config/tc-v850.c:1984 #: config/tc-w65.c:241 config/tc-z8k.c:343 msgid "missing operand" @@ -1054,7 +1055,7 @@ msgid "Immediate value of %ld is too large" msgstr "" #: config/tc-a29k.c:543 config/tc-i860.c:340 config/tc-i860.c:832 -#: config/tc-m68k.c:3181 config/tc-m68k.c:3210 config/tc-sparc.c:2550 +#: config/tc-m68k.c:3185 config/tc-m68k.c:3214 config/tc-sparc.c:2550 msgid "failed sanity check." msgstr "" @@ -1090,402 +1091,403 @@ msgstr "" msgid "Invalid register in & expression" msgstr "" -#: config/tc-alpha.c:816 +#: config/tc-alpha.c:822 #, c-format msgid "internal error: can't hash opcode `%s': %s" msgstr "" -#: config/tc-alpha.c:851 +#: config/tc-alpha.c:857 #, c-format msgid "internal error: can't hash macro `%s': %s" msgstr "" -#: config/tc-alpha.c:933 config/tc-i960.c:2702 +#: config/tc-alpha.c:939 config/tc-i960.c:2702 msgid "syntax error" msgstr "" -#: config/tc-alpha.c:1007 config/tc-h8300.c:1426 config/tc-h8500.c:1187 +#: config/tc-alpha.c:1013 config/tc-h8300.c:1426 config/tc-h8500.c:1187 #: config/tc-hppa.c:4019 config/tc-i860.c:931 config/tc-m68hc11.c:500 -#: config/tc-m68k.c:4201 config/tc-m88k.c:1011 config/tc-ns32k.c:1663 +#: config/tc-m68k.c:4205 config/tc-m88k.c:1011 config/tc-ns32k.c:1663 #: config/tc-or32.c:912 config/tc-sparc.c:2837 config/tc-z8k.c:1328 msgid "Bad call to MD_ATOF()" msgstr "" -#: config/tc-alpha.c:1057 +#: config/tc-alpha.c:1063 #, c-format msgid "Unknown CPU identifier `%s'" msgstr "" -#: config/tc-alpha.c:1101 +#: config/tc-alpha.c:1107 msgid "" "Alpha options:\n" "-32addr\t\t\ttreat addresses as 32-bit values\n" "-F\t\t\tlack floating point instructions support\n" -"-mev4 | -mev45 | -mev5 | -mev56 | -mpca56 | -mev6 | -mall\n" +"-mev4 | -mev45 | -mev5 | -mev56 | -mpca56 | -mev6 | -mev67 | -mev68 | -mall\n" "\t\t\tspecify variant of Alpha architecture\n" -"-m21064 | -m21066 | -m21164 | -m21164a | -m21164pc | -m21264\n" +"-m21064 | -m21066 | -m21164 | -m21164a | -m21164pc | -m21264 | -m21264a | -" +"m21264b\n" "\t\t\tthese variants include PALcode opcodes\n" msgstr "" -#: config/tc-alpha.c:1111 +#: config/tc-alpha.c:1117 msgid "" "VMS options:\n" "-+\t\t\thash encode (don't truncate) names longer than 64 characters\n" "-H\t\t\tshow new symbol after hash truncation\n" msgstr "" -#: config/tc-alpha.c:1284 +#: config/tc-alpha.c:1290 #, c-format msgid "unhandled relocation type %s" msgstr "" -#: config/tc-alpha.c:1297 +#: config/tc-alpha.c:1303 msgid "non-absolute expression in constant field" msgstr "" -#: config/tc-alpha.c:1311 +#: config/tc-alpha.c:1317 #, c-format msgid "type %d reloc done?\n" msgstr "" -#: config/tc-alpha.c:1359 config/tc-alpha.c:1366 config/tc-mips.c:8069 +#: config/tc-alpha.c:1365 config/tc-alpha.c:1372 config/tc-mips.c:8156 msgid "Used $at without \".set noat\"" msgstr "" -#: config/tc-alpha.c:1439 +#: config/tc-alpha.c:1445 #, c-format msgid "!samegp reloc against symbol without .prologue: %s" msgstr "" -#: config/tc-alpha.c:1588 +#: config/tc-alpha.c:1594 #, c-format msgid "cannot represent `%s' relocation in object file" msgstr "" -#: config/tc-alpha.c:1595 +#: config/tc-alpha.c:1601 #, c-format msgid "internal error? cannot generate `%s' relocation" msgstr "" -#: config/tc-alpha.c:1651 +#: config/tc-alpha.c:1657 #, c-format msgid "frame reg expected, using $%d." msgstr "" -#: config/tc-alpha.c:1752 +#: config/tc-alpha.c:1758 #, c-format msgid "No !literal!%ld was found" msgstr "" -#: config/tc-alpha.c:1758 +#: config/tc-alpha.c:1764 #, c-format msgid "No !tlsgd!%ld was found" msgstr "" -#: config/tc-alpha.c:1765 +#: config/tc-alpha.c:1771 #, c-format msgid "No !tlsldm!%ld was found" msgstr "" -#: config/tc-alpha.c:1773 +#: config/tc-alpha.c:1779 #, c-format msgid "No ldah !gpdisp!%ld was found" msgstr "" -#: config/tc-alpha.c:1823 +#: config/tc-alpha.c:1829 #, c-format msgid "too many !literal!%ld for %s" msgstr "" -#: config/tc-alpha.c:1853 +#: config/tc-alpha.c:1859 #, c-format msgid "No lda !gpdisp!%ld was found" msgstr "" #. only support one relocation op per insn -#: config/tc-alpha.c:1997 +#: config/tc-alpha.c:2003 msgid "More than one relocation op per insn" msgstr "" -#: config/tc-alpha.c:2013 +#: config/tc-alpha.c:2019 msgid "No relocation operand" msgstr "" -#: config/tc-alpha.c:2023 +#: config/tc-alpha.c:2029 #, c-format msgid "Unknown relocation operand: !%s" msgstr "" -#: config/tc-alpha.c:2033 +#: config/tc-alpha.c:2039 #, c-format msgid "no sequence number after !%s" msgstr "" -#: config/tc-alpha.c:2043 +#: config/tc-alpha.c:2049 #, c-format msgid "!%s does not use a sequence number" msgstr "" -#: config/tc-alpha.c:2053 +#: config/tc-alpha.c:2059 #, c-format msgid "Bad sequence number: !%s!%s" msgstr "" -#: config/tc-alpha.c:2381 +#: config/tc-alpha.c:2387 #, c-format msgid "operand out of range (%s not between %d and %d)" msgstr "" -#: config/tc-alpha.c:2495 config/tc-alpha.c:2519 config/tc-d10v.c:634 +#: config/tc-alpha.c:2501 config/tc-alpha.c:2525 config/tc-d10v.c:634 #: config/tc-d30v.c:640 config/tc-mn10200.c:995 config/tc-mn10300.c:1389 -#: config/tc-ppc.c:2088 config/tc-ppc.c:2269 config/tc-ppc.c:2281 +#: config/tc-ppc.c:2109 config/tc-ppc.c:2290 config/tc-ppc.c:2302 #: config/tc-s390.c:1072 config/tc-s390.c:1129 config/tc-v850.c:1764 #: config/tc-v850.c:1787 config/tc-v850.c:2007 msgid "too many fixups" msgstr "" -#: config/tc-alpha.c:2531 +#: config/tc-alpha.c:2537 msgid "invalid relocation for instruction" msgstr "" -#: config/tc-alpha.c:2542 +#: config/tc-alpha.c:2548 msgid "invalid relocation for field" msgstr "" -#: config/tc-alpha.c:2649 +#: config/tc-alpha.c:2655 #, c-format msgid "too many ldah insns for !gpdisp!%ld" msgstr "" -#: config/tc-alpha.c:2651 config/tc-alpha.c:2663 +#: config/tc-alpha.c:2657 config/tc-alpha.c:2669 #, c-format msgid "both insns for !gpdisp!%ld must be in the same section" msgstr "" -#: config/tc-alpha.c:2661 +#: config/tc-alpha.c:2667 #, c-format msgid "too many lda insns for !gpdisp!%ld" msgstr "" -#: config/tc-alpha.c:2713 +#: config/tc-alpha.c:2719 #, c-format msgid "too many lituse insns for !lituse_tlsgd!%ld" msgstr "" -#: config/tc-alpha.c:2716 +#: config/tc-alpha.c:2722 #, c-format msgid "too many lituse insns for !lituse_tlsldm!%ld" msgstr "" -#: config/tc-alpha.c:2733 +#: config/tc-alpha.c:2739 #, c-format msgid "duplicate !tlsgd!%ld" msgstr "" -#: config/tc-alpha.c:2735 +#: config/tc-alpha.c:2741 #, c-format msgid "sequence number in use for !tlsldm!%ld" msgstr "" -#: config/tc-alpha.c:2749 +#: config/tc-alpha.c:2755 #, c-format msgid "duplicate !tlsldm!%ld" msgstr "" -#: config/tc-alpha.c:2751 +#: config/tc-alpha.c:2757 #, c-format msgid "sequence number in use for !tlsgd!%ld" msgstr "" -#: config/tc-alpha.c:2796 config/tc-alpha.c:2869 +#: config/tc-alpha.c:2802 config/tc-alpha.c:2875 #, c-format msgid "inappropriate arguments for opcode `%s'" msgstr "" -#: config/tc-alpha.c:2798 config/tc-alpha.c:2871 +#: config/tc-alpha.c:2804 config/tc-alpha.c:2877 #, c-format msgid "opcode `%s' not supported for target %s" msgstr "" -#: config/tc-alpha.c:2802 config/tc-alpha.c:2875 config/tc-avr.c:1103 +#: config/tc-alpha.c:2808 config/tc-alpha.c:2881 config/tc-avr.c:1103 #, c-format msgid "unknown opcode `%s'" msgstr "" -#: config/tc-alpha.c:2922 +#: config/tc-alpha.c:2928 msgid "can not resolve expression" msgstr "" -#: config/tc-alpha.c:3066 config/tc-alpha.c:3245 +#: config/tc-alpha.c:3072 config/tc-alpha.c:3251 msgid "overflow in literal (.lita) table" msgstr "" -#: config/tc-alpha.c:3073 config/tc-alpha.c:3096 config/tc-alpha.c:3258 -#: config/tc-alpha.c:3473 config/tc-alpha.c:3518 config/tc-alpha.c:3592 -#: config/tc-alpha.c:3684 config/tc-alpha.c:3933 config/tc-alpha.c:4034 +#: config/tc-alpha.c:3079 config/tc-alpha.c:3102 config/tc-alpha.c:3264 +#: config/tc-alpha.c:3479 config/tc-alpha.c:3524 config/tc-alpha.c:3598 +#: config/tc-alpha.c:3690 config/tc-alpha.c:3939 config/tc-alpha.c:4040 msgid "macro requires $at register while noat in effect" msgstr "" -#: config/tc-alpha.c:3075 config/tc-alpha.c:3098 config/tc-alpha.c:3260 +#: config/tc-alpha.c:3081 config/tc-alpha.c:3104 config/tc-alpha.c:3266 msgid "macro requires $at while $at in use" msgstr "" -#: config/tc-alpha.c:3206 +#: config/tc-alpha.c:3212 msgid "bignum invalid; zero assumed" msgstr "" -#: config/tc-alpha.c:3208 +#: config/tc-alpha.c:3214 msgid "floating point number invalid; zero assumed" msgstr "" -#: config/tc-alpha.c:3213 +#: config/tc-alpha.c:3219 msgid "can't handle expression" msgstr "" -#: config/tc-alpha.c:3251 +#: config/tc-alpha.c:3257 msgid "overflow in literal (.lit8) table" msgstr "" -#: config/tc-alpha.c:4271 config/tc-ppc.c:1569 config/tc-ppc.c:3985 +#: config/tc-alpha.c:4277 config/tc-ppc.c:1582 config/tc-ppc.c:4006 #, c-format msgid ".COMMon length (%ld.) <0! Ignored." msgstr "" -#: config/tc-alpha.c:4300 config/tc-sparc.c:3707 config/tc-v850.c:254 +#: config/tc-alpha.c:4306 config/tc-sparc.c:3707 config/tc-v850.c:254 msgid "Ignoring attempt to re-define symbol" msgstr "" -#: config/tc-alpha.c:4309 config/tc-alpha.c:4318 config/tc-ppc.c:4022 +#: config/tc-alpha.c:4315 config/tc-alpha.c:4324 config/tc-ppc.c:4043 #, c-format msgid "Length of .comm \"%s\" is already %ld. Not changed to %ld." msgstr "" -#: config/tc-alpha.c:4420 ecoff.c:3082 +#: config/tc-alpha.c:4426 ecoff.c:3082 msgid ".ent directive has no name" msgstr "" -#: config/tc-alpha.c:4428 +#: config/tc-alpha.c:4434 msgid "nested .ent directives" msgstr "" -#: config/tc-alpha.c:4464 ecoff.c:3032 +#: config/tc-alpha.c:4470 ecoff.c:3032 msgid ".end directive has no name" msgstr "" -#: config/tc-alpha.c:4473 +#: config/tc-alpha.c:4479 msgid ".end directive names different symbol than .ent" msgstr "" -#: config/tc-alpha.c:4550 +#: config/tc-alpha.c:4556 #, c-format msgid "Invalid argument %d to .prologue." msgstr "" -#: config/tc-alpha.c:4642 +#: config/tc-alpha.c:4648 msgid "ECOFF debugging is disabled." msgstr "" -#: config/tc-alpha.c:4663 +#: config/tc-alpha.c:4669 msgid "Unknown section directive" msgstr "" -#: config/tc-alpha.c:4699 +#: config/tc-alpha.c:4705 msgid ".ent directive has no symbol" msgstr "" -#: config/tc-alpha.c:4726 +#: config/tc-alpha.c:4732 msgid "Bad .frame directive 1./2. param" msgstr "" -#: config/tc-alpha.c:4738 +#: config/tc-alpha.c:4744 msgid "Bad .frame directive 3./4. param" msgstr "" -#: config/tc-alpha.c:4763 +#: config/tc-alpha.c:4769 msgid ".pdesc directive not in link (.link) section" msgstr "" -#: config/tc-alpha.c:4771 +#: config/tc-alpha.c:4777 msgid ".pdesc has no matching .ent" msgstr "" -#: config/tc-alpha.c:4782 +#: config/tc-alpha.c:4788 msgid ".pdesc directive has no entry symbol" msgstr "" -#: config/tc-alpha.c:4795 +#: config/tc-alpha.c:4801 msgid "No comma after .pdesc <entryname>" msgstr "" -#: config/tc-alpha.c:4818 +#: config/tc-alpha.c:4824 msgid "unknown procedure kind" msgstr "" -#: config/tc-alpha.c:4911 +#: config/tc-alpha.c:4917 msgid ".name directive not in link (.link) section" msgstr "" -#: config/tc-alpha.c:4919 +#: config/tc-alpha.c:4925 msgid ".name directive has no symbol" msgstr "" -#: config/tc-alpha.c:4953 +#: config/tc-alpha.c:4959 msgid "No symbol after .linkage" msgstr "" -#: config/tc-alpha.c:4981 +#: config/tc-alpha.c:4987 msgid "No symbol after .code_address" msgstr "" -#: config/tc-alpha.c:5014 +#: config/tc-alpha.c:5020 msgid "Bad .mask directive" msgstr "" -#: config/tc-alpha.c:5035 +#: config/tc-alpha.c:5041 msgid "Bad .fmask directive" msgstr "" -#: config/tc-alpha.c:5205 +#: config/tc-alpha.c:5211 #, c-format msgid "Expected comma after name \"%s\"" msgstr "" #. *symbol_get_obj (symbolP) = (signed char) temp; -#: config/tc-alpha.c:5216 +#: config/tc-alpha.c:5222 #, c-format msgid "unhandled: .proc %s,%d" msgstr "" -#: config/tc-alpha.c:5251 +#: config/tc-alpha.c:5257 #, c-format msgid "Tried to .set unrecognized mode `%s'" msgstr "" #. not fatal, but it might not work in the end -#: config/tc-alpha.c:5268 +#: config/tc-alpha.c:5274 msgid "File overrides no-base-register option." msgstr "" -#: config/tc-alpha.c:5285 +#: config/tc-alpha.c:5291 #, c-format msgid "Bad base register, using $%d." msgstr "" -#: config/tc-alpha.c:5307 +#: config/tc-alpha.c:5313 #, c-format msgid "Alignment too large: %d. assumed" msgstr "" -#: config/tc-alpha.c:5311 config/tc-d30v.c:2214 +#: config/tc-alpha.c:5317 config/tc-d30v.c:2214 msgid "Alignment negative: 0 assumed" msgstr "" -#: config/tc-alpha.c:5623 +#: config/tc-alpha.c:5629 #, c-format msgid "Chose GP value of %lx\n" msgstr "" -#: config/tc-alpha.c:5639 config/tc-ia64.c:958 +#: config/tc-alpha.c:5645 config/tc-ia64.c:958 msgid "Bad .section directive: want a,s,w,x,M,S,G,T in string" msgstr "" @@ -1864,8 +1866,8 @@ msgstr "" #: config/tc-arm.c:5702 config/tc-arm.c:8765 config/tc-arm.c:8865 #: config/tc-avr.c:866 config/tc-cris.c:3006 config/tc-d10v.c:1724 -#: config/tc-d30v.c:1863 config/tc-mips.c:3509 config/tc-mips.c:4523 -#: config/tc-mips.c:5436 config/tc-mips.c:6090 config/tc-ppc.c:5154 +#: config/tc-d30v.c:1863 config/tc-mips.c:3570 config/tc-mips.c:4594 +#: config/tc-mips.c:5505 config/tc-mips.c:6159 config/tc-ppc.c:5175 #: config/tc-v850.c:2287 config/tc-xstormy16.c:479 msgid "expression too complex" msgstr "" @@ -1904,7 +1906,7 @@ msgstr "" #: config/tc-arm.c:6904 config/tc-arm.c:6943 config/tc-arm.c:6956 #: config/tc-arm.c:7017 config/tc-arm.c:7056 config/tc-arm.c:7069 -#: config/tc-mips.c:9255 config/tc-mips.c:9285 +#: config/tc-mips.c:9336 config/tc-mips.c:9366 msgid "invalid register list" msgstr "" @@ -2595,8 +2597,8 @@ msgid "redefinition of mcu type `%s' to `%s'" msgstr "" #: config/tc-avr.c:390 config/tc-d10v.c:319 config/tc-d30v.c:366 -#: config/tc-mips.c:9781 config/tc-mmix.c:2250 config/tc-mn10200.c:361 -#: config/tc-pj.c:357 config/tc-ppc.c:4814 config/tc-sh.c:2536 +#: config/tc-mips.c:9862 config/tc-mmix.c:2250 config/tc-mn10200.c:361 +#: config/tc-pj.c:357 config/tc-ppc.c:4835 config/tc-sh.c:2536 #: config/tc-v850.c:1194 msgid "bad call to md_atof" msgstr "" @@ -2692,7 +2694,7 @@ msgstr "" #: config/tc-avr.c:1073 config/tc-d10v.c:1659 config/tc-d30v.c:1807 #: config/tc-mn10200.c:1240 config/tc-mn10300.c:1781 config/tc-or32.c:1622 -#: config/tc-ppc.c:5538 config/tc-v850.c:2207 +#: config/tc-ppc.c:5573 config/tc-v850.c:2207 #, c-format msgid "reloc %d not supported by object file format" msgstr "" @@ -2947,7 +2949,7 @@ msgid "" msgstr "" #: config/tc-d10v.c:543 config/tc-d30v.c:550 config/tc-mn10200.c:937 -#: config/tc-mn10300.c:1315 config/tc-ppc.c:2120 config/tc-s390.c:1060 +#: config/tc-mn10300.c:1315 config/tc-ppc.c:2141 config/tc-s390.c:1060 #: config/tc-tic80.c:279 config/tc-v850.c:1981 msgid "illegal operand" msgstr "" @@ -3048,7 +3050,7 @@ msgstr "" msgid "bad opcode or operands" msgstr "" -#: config/tc-d10v.c:1503 config/tc-m68k.c:4310 +#: config/tc-d10v.c:1503 config/tc-m68k.c:4314 msgid "value out of range" msgstr "" @@ -3468,7 +3470,7 @@ msgstr "" msgid "invalid operands" msgstr "" -#: config/tc-h8300.c:1300 config/tc-h8500.c:1094 config/tc-mips.c:8834 +#: config/tc-h8300.c:1300 config/tc-h8500.c:1094 config/tc-mips.c:8915 #: config/tc-sh.c:2371 config/tc-sh64.c:2811 config/tc-w65.c:733 #: config/tc-z8k.c:1206 msgid "unknown opcode" @@ -3967,169 +3969,169 @@ msgstr "" msgid "No memory for symbol name." msgstr "" -#: config/tc-i386.c:658 +#: config/tc-i386.c:660 #, c-format msgid "%s shortened to %s" msgstr "" -#: config/tc-i386.c:714 +#: config/tc-i386.c:716 msgid "same type of prefix used twice" msgstr "" -#: config/tc-i386.c:732 +#: config/tc-i386.c:734 msgid "64bit mode not supported on this CPU." msgstr "" -#: config/tc-i386.c:736 +#: config/tc-i386.c:738 msgid "32bit mode not supported on this CPU." msgstr "" -#: config/tc-i386.c:769 +#: config/tc-i386.c:771 msgid "bad argument to syntax directive." msgstr "" -#: config/tc-i386.c:813 +#: config/tc-i386.c:815 #, c-format msgid "no such architecture: `%s'" msgstr "" -#: config/tc-i386.c:818 +#: config/tc-i386.c:820 msgid "missing cpu architecture" msgstr "" -#: config/tc-i386.c:832 +#: config/tc-i386.c:834 #, c-format msgid "no such architecture modifier: `%s'" msgstr "" -#: config/tc-i386.c:849 config/tc-i386.c:4857 +#: config/tc-i386.c:851 config/tc-i386.c:4944 msgid "Unknown architecture" msgstr "" -#: config/tc-i386.c:884 config/tc-i386.c:907 config/tc-m68k.c:3826 +#: config/tc-i386.c:886 config/tc-i386.c:909 config/tc-m68k.c:3830 #, c-format msgid "Internal Error: Can't hash %s: %s" msgstr "" -#: config/tc-i386.c:1150 +#: config/tc-i386.c:1152 msgid "There are no unsigned pc-relative relocations" msgstr "" -#: config/tc-i386.c:1157 config/tc-i386.c:5062 +#: config/tc-i386.c:1159 config/tc-i386.c:5151 #, c-format msgid "can not do %d byte pc-relative relocation" msgstr "" -#: config/tc-i386.c:1174 +#: config/tc-i386.c:1176 #, c-format msgid "can not do %s %d byte relocation" msgstr "" #. UnixWare fsub no args is alias for fsubp, fadd -> faddp, etc. -#: config/tc-i386.c:1386 +#: config/tc-i386.c:1396 #, c-format msgid "translating to `%sp'" msgstr "" -#: config/tc-i386.c:1431 +#: config/tc-i386.c:1441 #, c-format msgid "can't encode register '%%%s' in an instruction requiring REX prefix.\n" msgstr "" -#: config/tc-i386.c:1470 config/tc-i386.c:1565 +#: config/tc-i386.c:1480 config/tc-i386.c:1575 #, c-format msgid "no such instruction: `%s'" msgstr "" -#: config/tc-i386.c:1480 config/tc-i386.c:1597 +#: config/tc-i386.c:1490 config/tc-i386.c:1607 #, c-format msgid "invalid character %s in mnemonic" msgstr "" -#: config/tc-i386.c:1487 +#: config/tc-i386.c:1497 msgid "expecting prefix; got nothing" msgstr "" -#: config/tc-i386.c:1489 +#: config/tc-i386.c:1499 msgid "expecting mnemonic; got nothing" msgstr "" -#: config/tc-i386.c:1508 +#: config/tc-i386.c:1518 #, c-format msgid "redundant %s prefix" msgstr "" -#: config/tc-i386.c:1606 +#: config/tc-i386.c:1616 #, c-format msgid "`%s' is not supported on `%s'" msgstr "" -#: config/tc-i386.c:1611 +#: config/tc-i386.c:1621 msgid "use .code16 to ensure correct addressing mode" msgstr "" -#: config/tc-i386.c:1618 +#: config/tc-i386.c:1628 #, c-format msgid "expecting string instruction after `%s'" msgstr "" -#: config/tc-i386.c:1646 +#: config/tc-i386.c:1656 #, c-format msgid "invalid character %s before operand %d" msgstr "" -#: config/tc-i386.c:1660 +#: config/tc-i386.c:1670 #, c-format msgid "unbalanced parenthesis in operand %d." msgstr "" -#: config/tc-i386.c:1663 +#: config/tc-i386.c:1673 #, c-format msgid "unbalanced brackets in operand %d." msgstr "" -#: config/tc-i386.c:1672 +#: config/tc-i386.c:1682 #, c-format msgid "invalid character %s in operand %d" msgstr "" -#: config/tc-i386.c:1699 +#: config/tc-i386.c:1709 #, c-format msgid "spurious operands; (%d operands/instruction max)" msgstr "" -#: config/tc-i386.c:1722 +#: config/tc-i386.c:1732 msgid "expecting operand after ','; got nothing" msgstr "" -#: config/tc-i386.c:1727 +#: config/tc-i386.c:1737 msgid "expecting operand before ','; got nothing" msgstr "" #. We found no match. -#: config/tc-i386.c:2069 +#: config/tc-i386.c:2079 #, c-format msgid "suffix or operands invalid for `%s'" msgstr "" -#: config/tc-i386.c:2080 +#: config/tc-i386.c:2090 #, c-format msgid "indirect %s without `*'" msgstr "" #. Warn them that a data or address size prefix doesn't #. affect assembly of the next line of code. -#: config/tc-i386.c:2088 +#: config/tc-i386.c:2098 #, c-format msgid "stand-alone `%s' prefix" msgstr "" -#: config/tc-i386.c:2117 config/tc-i386.c:2132 +#: config/tc-i386.c:2127 config/tc-i386.c:2142 #, c-format msgid "`%s' operand %d must use `%%es' segment" msgstr "" -#: config/tc-i386.c:2212 +#: config/tc-i386.c:2222 msgid "" "no instruction mnemonic suffix given and no register operands; can't size " "instruction" @@ -4137,187 +4139,192 @@ msgstr "" #. Prohibit these changes in the 64bit mode, since the #. lowering is more complicated. -#: config/tc-i386.c:2296 config/tc-i386.c:2355 config/tc-i386.c:2372 -#: config/tc-i386.c:2404 config/tc-i386.c:2437 +#: config/tc-i386.c:2306 config/tc-i386.c:2365 config/tc-i386.c:2382 +#: config/tc-i386.c:2414 config/tc-i386.c:2447 #, c-format msgid "Incorrect register `%%%s' used with `%c' suffix" msgstr "" -#: config/tc-i386.c:2304 config/tc-i386.c:2362 config/tc-i386.c:2444 +#: config/tc-i386.c:2314 config/tc-i386.c:2372 config/tc-i386.c:2454 #, c-format msgid "using `%%%s' instead of `%%%s' due to `%c' suffix" msgstr "" -#: config/tc-i386.c:2319 config/tc-i386.c:2340 config/tc-i386.c:2391 -#: config/tc-i386.c:2422 +#: config/tc-i386.c:2329 config/tc-i386.c:2350 config/tc-i386.c:2401 +#: config/tc-i386.c:2432 #, c-format msgid "`%%%s' not allowed with `%s%c'" msgstr "" -#: config/tc-i386.c:2485 +#: config/tc-i386.c:2495 msgid "no instruction mnemonic suffix given; can't determine immediate size" msgstr "" -#: config/tc-i386.c:2518 +#: config/tc-i386.c:2528 #, c-format msgid "" "no instruction mnemonic suffix given; can't determine immediate size %x %c" msgstr "" #. Reversed arguments on faddp, fsubp, etc. -#: config/tc-i386.c:2567 +#: config/tc-i386.c:2577 #, c-format msgid "translating to `%s %%%s,%%%s'" msgstr "" #. Extraneous `l' suffix on fp insn. -#: config/tc-i386.c:2574 +#: config/tc-i386.c:2584 #, c-format msgid "translating to `%s %%%s'" msgstr "" -#: config/tc-i386.c:2593 +#: config/tc-i386.c:2602 #, c-format msgid "you can't `pop %%cs'" msgstr "" -#: config/tc-i386.c:2919 config/tc-i386.c:3012 config/tc-i386.c:3051 +#. lea +#: config/tc-i386.c:2621 +msgid "segment override on `lea' is ineffectual" +msgstr "" + +#: config/tc-i386.c:2930 config/tc-i386.c:3024 config/tc-i386.c:3069 msgid "skipping prefixes on this instruction" msgstr "" -#: config/tc-i386.c:3071 +#: config/tc-i386.c:3089 msgid "16-bit jump out of range" msgstr "" -#: config/tc-i386.c:3080 +#: config/tc-i386.c:3098 #, c-format msgid "can't handle non absolute segment in `%s'" msgstr "" -#: config/tc-i386.c:3418 +#: config/tc-i386.c:3539 #, c-format msgid "@%s reloc is not supported in %s bit mode" msgstr "" -#: config/tc-i386.c:3494 +#: config/tc-i386.c:3615 msgid "only 1 or 2 immediate operands are allowed" msgstr "" -#: config/tc-i386.c:3517 config/tc-i386.c:3708 +#: config/tc-i386.c:3638 config/tc-i386.c:3830 #, c-format msgid "junk `%s' after expression" msgstr "" #. Missing or bad expr becomes absolute 0. -#: config/tc-i386.c:3528 +#: config/tc-i386.c:3649 #, c-format msgid "missing or invalid immediate expression `%s' taken as 0" msgstr "" -#: config/tc-i386.c:3559 config/tc-i386.c:3769 +#: config/tc-i386.c:3681 config/tc-i386.c:3896 #, c-format msgid "unimplemented segment %s in operand" msgstr "" -#: config/tc-i386.c:3561 config/tc-i386.c:3771 +#: config/tc-i386.c:3683 config/tc-i386.c:3898 #, c-format msgid "unimplemented segment type %d in operand" msgstr "" -#: config/tc-i386.c:3605 config/tc-i386.c:5836 +#: config/tc-i386.c:3727 config/tc-i386.c:5925 #, c-format msgid "expecting scale factor of 1, 2, 4, or 8: got `%s'" msgstr "" -#: config/tc-i386.c:3612 +#: config/tc-i386.c:3734 #, c-format msgid "scale factor of %d without an index register" msgstr "" -#: config/tc-i386.c:3728 +#: config/tc-i386.c:3850 #, c-format msgid "bad expression used with @%s" msgstr "" #. Missing or bad expr becomes absolute 0. -#: config/tc-i386.c:3750 +#: config/tc-i386.c:3872 #, c-format msgid "missing or invalid displacement expression `%s' taken as 0" msgstr "" -#: config/tc-i386.c:3869 +#: config/tc-i386.c:3996 #, c-format msgid "`%s' is not a valid base/index expression" msgstr "" -#: config/tc-i386.c:3873 +#: config/tc-i386.c:4000 #, c-format msgid "`%s' is not a valid %s bit base/index expression" msgstr "" -#: config/tc-i386.c:3948 +#: config/tc-i386.c:4075 #, c-format msgid "bad memory operand `%s'" msgstr "" -#: config/tc-i386.c:3963 +#: config/tc-i386.c:4090 #, c-format msgid "junk `%s' after register" msgstr "" -#: config/tc-i386.c:3972 config/tc-i386.c:4087 config/tc-i386.c:4125 +#: config/tc-i386.c:4099 config/tc-i386.c:4214 config/tc-i386.c:4252 #, c-format msgid "bad register name `%s'" msgstr "" -#: config/tc-i386.c:3980 +#: config/tc-i386.c:4107 msgid "immediate operand illegal with absolute jump" msgstr "" -#: config/tc-i386.c:4002 +#: config/tc-i386.c:4129 #, c-format msgid "too many memory references for `%s'" msgstr "" -#: config/tc-i386.c:4080 +#: config/tc-i386.c:4207 #, c-format msgid "expecting `,' or `)' after index register in `%s'" msgstr "" -#: config/tc-i386.c:4104 +#: config/tc-i386.c:4231 #, c-format msgid "expecting `)' after scale factor in `%s'" msgstr "" -#: config/tc-i386.c:4111 +#: config/tc-i386.c:4238 #, c-format msgid "expecting index register or scale factor after `,'; got '%c'" msgstr "" -#: config/tc-i386.c:4118 +#: config/tc-i386.c:4245 #, c-format msgid "expecting `,' or `)' after base register in `%s'" msgstr "" #. It's not a memory operand; argh! -#: config/tc-i386.c:4159 +#: config/tc-i386.c:4286 #, c-format msgid "invalid char %s beginning operand %d `%s'" msgstr "" -#: config/tc-i386.c:4338 +#: config/tc-i386.c:4469 msgid "long jump required" msgstr "" -#: config/tc-i386.c:4646 +#: config/tc-i386.c:4733 msgid "Bad call to md_atof ()" msgstr "" -#: config/tc-i386.c:4810 +#: config/tc-i386.c:4897 msgid "No compiled in support for x86_64" msgstr "" -#: config/tc-i386.c:4831 +#: config/tc-i386.c:4918 msgid "" " -Q ignored\n" " -V print assembler version number\n" @@ -4326,63 +4333,63 @@ msgid "" " -s ignored\n" msgstr "" -#: config/tc-i386.c:4838 +#: config/tc-i386.c:4925 msgid " -q quieten some warnings\n" msgstr "" -#: config/tc-i386.c:4939 config/tc-s390.c:1601 +#: config/tc-i386.c:5026 config/tc-s390.c:1601 msgid "GOT already in symbol table" msgstr "" -#: config/tc-i386.c:5077 +#: config/tc-i386.c:5166 #, c-format msgid "can not do %d byte relocation" msgstr "" -#: config/tc-i386.c:5142 config/tc-s390.c:1969 +#: config/tc-i386.c:5231 config/tc-s390.c:1969 #, c-format msgid "cannot represent relocation type %s" msgstr "" -#: config/tc-i386.c:5438 +#: config/tc-i386.c:5527 #, c-format msgid "too many memory references for '%s'" msgstr "" -#: config/tc-i386.c:5601 +#: config/tc-i386.c:5690 #, c-format msgid "Unknown operand modifier `%s'\n" msgstr "" -#: config/tc-i386.c:5808 +#: config/tc-i386.c:5897 #, c-format msgid "`%s' is not a valid segment register" msgstr "" -#: config/tc-i386.c:5818 config/tc-i386.c:5939 +#: config/tc-i386.c:5907 config/tc-i386.c:6028 msgid "Register scaling only allowed in memory operands." msgstr "" -#: config/tc-i386.c:5849 +#: config/tc-i386.c:5938 msgid "Too many register references in memory operand.\n" msgstr "" -#: config/tc-i386.c:5918 +#: config/tc-i386.c:6007 #, c-format msgid "Syntax error. Expecting a constant. Got `%s'.\n" msgstr "" -#: config/tc-i386.c:5988 +#: config/tc-i386.c:6077 #, c-format msgid "Unrecognized token '%s'" msgstr "" -#: config/tc-i386.c:6005 +#: config/tc-i386.c:6094 #, c-format msgid "Unexpected token `%s'\n" msgstr "" -#: config/tc-i386.c:6149 +#: config/tc-i386.c:6238 #, c-format msgid "Unrecognized token `%s'\n" msgstr "" @@ -4391,7 +4398,7 @@ msgstr "" msgid "Unknown temporary pseudo register" msgstr "" -#: config/tc-i860.c:181 config/tc-mips.c:1060 +#: config/tc-i860.c:181 config/tc-mips.c:1074 #, c-format msgid "internal error: can't hash `%s': %s\n" msgstr "" @@ -4649,7 +4656,7 @@ msgstr "" msgid "option --link-relax is only supported in b.out format" msgstr "" -#: config/tc-i960.c:3218 write.c:2689 +#: config/tc-i960.c:3218 write.c:2664 msgid "callj to difference of two symbols" msgstr "" @@ -4760,7 +4767,7 @@ msgstr "" msgid "--gstabs is not supported for ia64" msgstr "" -#: config/tc-ia64.c:6743 config/tc-mips.c:1049 +#: config/tc-ia64.c:6743 config/tc-mips.c:1063 msgid "Could not set architecture and machine" msgstr "" @@ -4921,7 +4928,7 @@ msgid "" "is this intentional ?" msgstr "" -#: config/tc-m32r.c:1252 config/tc-ppc.c:1561 config/tc-ppc.c:3977 +#: config/tc-m32r.c:1252 config/tc-ppc.c:1574 config/tc-ppc.c:3998 msgid "Expected comma after symbol-name: rest of line ignored." msgstr "" @@ -4930,16 +4937,16 @@ msgstr "" msgid ".SCOMMon length (%ld.) <0! Ignored." msgstr "" -#: config/tc-m32r.c:1276 config/tc-ppc.c:1583 config/tc-ppc.c:2626 -#: config/tc-ppc.c:4001 +#: config/tc-m32r.c:1276 config/tc-ppc.c:1596 config/tc-ppc.c:2647 +#: config/tc-ppc.c:4022 msgid "ignoring bad alignment" msgstr "" -#: config/tc-m32r.c:1288 config/tc-ppc.c:1620 config/tc-v850.c:333 +#: config/tc-m32r.c:1288 config/tc-ppc.c:1633 config/tc-v850.c:333 msgid "Common alignment not a power of 2" msgstr "" -#: config/tc-m32r.c:1303 config/tc-ppc.c:1594 config/tc-ppc.c:4013 +#: config/tc-m32r.c:1303 config/tc-ppc.c:1607 config/tc-ppc.c:4034 #, c-format msgid "Ignoring attempt to re-define symbol `%s'." msgstr "" @@ -5290,326 +5297,326 @@ msgstr "" msgid "Can not do %d byte pic relocation" msgstr "" -#: config/tc-m68k.c:904 +#: config/tc-m68k.c:908 #, c-format msgid "Unable to produce reloc against symbol '%s'" msgstr "" -#: config/tc-m68k.c:948 config/tc-mips.c:12955 config/tc-vax.c:3442 +#: config/tc-m68k.c:952 config/tc-mips.c:13040 config/tc-vax.c:3442 #, c-format msgid "Cannot make %s relocation PC relative" msgstr "" -#: config/tc-m68k.c:1041 config/tc-tahoe.c:1495 config/tc-vax.c:1890 +#: config/tc-m68k.c:1045 config/tc-tahoe.c:1495 config/tc-vax.c:1890 msgid "No operator" msgstr "" -#: config/tc-m68k.c:1071 config/tc-tahoe.c:1512 config/tc-vax.c:1907 +#: config/tc-m68k.c:1075 config/tc-tahoe.c:1512 config/tc-vax.c:1907 msgid "Unknown operator" msgstr "" -#: config/tc-m68k.c:1846 +#: config/tc-m68k.c:1850 msgid "invalid instruction for this architecture; needs " msgstr "" -#: config/tc-m68k.c:1851 +#: config/tc-m68k.c:1855 msgid "fpu (68040, 68060 or 68881/68882)" msgstr "" -#: config/tc-m68k.c:1854 +#: config/tc-m68k.c:1858 msgid "mmu (68030 or 68851)" msgstr "" -#: config/tc-m68k.c:1857 +#: config/tc-m68k.c:1861 msgid "68020 or higher" msgstr "" -#: config/tc-m68k.c:1860 +#: config/tc-m68k.c:1864 msgid "68000 or higher" msgstr "" -#: config/tc-m68k.c:1863 +#: config/tc-m68k.c:1867 msgid "68010 or higher" msgstr "" -#: config/tc-m68k.c:1892 +#: config/tc-m68k.c:1896 msgid "operands mismatch" msgstr "" -#: config/tc-m68k.c:1949 config/tc-m68k.c:1955 config/tc-m68k.c:1961 +#: config/tc-m68k.c:1953 config/tc-m68k.c:1959 config/tc-m68k.c:1965 #: config/tc-mmix.c:2465 config/tc-mmix.c:2489 msgid "operand out of range" msgstr "" -#: config/tc-m68k.c:2018 +#: config/tc-m68k.c:2022 #, c-format msgid "Bignum too big for %c format; truncated" msgstr "" -#: config/tc-m68k.c:2086 +#: config/tc-m68k.c:2090 msgid "displacement too large for this architecture; needs 68020 or higher" msgstr "" -#: config/tc-m68k.c:2196 +#: config/tc-m68k.c:2200 msgid "" "scale factor invalid on this architecture; needs cpu32 or 68020 or higher" msgstr "" -#: config/tc-m68k.c:2201 +#: config/tc-m68k.c:2205 msgid "invalid index size for coldfire" msgstr "" -#: config/tc-m68k.c:2254 +#: config/tc-m68k.c:2258 msgid "Forcing byte displacement" msgstr "" -#: config/tc-m68k.c:2256 +#: config/tc-m68k.c:2260 msgid "byte displacement out of range" msgstr "" -#: config/tc-m68k.c:2303 config/tc-m68k.c:2341 +#: config/tc-m68k.c:2307 config/tc-m68k.c:2345 msgid "invalid operand mode for this architecture; needs 68020 or higher" msgstr "" -#: config/tc-m68k.c:2327 config/tc-m68k.c:2361 +#: config/tc-m68k.c:2331 config/tc-m68k.c:2365 msgid ":b not permitted; defaulting to :w" msgstr "" -#: config/tc-m68k.c:2438 +#: config/tc-m68k.c:2442 msgid "unsupported byte value; use a different suffix" msgstr "" -#: config/tc-m68k.c:2452 +#: config/tc-m68k.c:2456 msgid "unknown/incorrect operand" msgstr "" -#: config/tc-m68k.c:2485 config/tc-m68k.c:2493 config/tc-m68k.c:2500 -#: config/tc-m68k.c:2507 +#: config/tc-m68k.c:2489 config/tc-m68k.c:2497 config/tc-m68k.c:2504 +#: config/tc-m68k.c:2511 msgid "out of range" msgstr "" -#: config/tc-m68k.c:2553 +#: config/tc-m68k.c:2557 msgid "Can't use long branches on 68000/68010/5200" msgstr "" -#: config/tc-m68k.c:2663 +#: config/tc-m68k.c:2667 msgid "Expression out of range, using 0" msgstr "" -#: config/tc-m68k.c:2775 config/tc-m68k.c:2791 +#: config/tc-m68k.c:2779 config/tc-m68k.c:2795 msgid "Floating point register in register list" msgstr "" -#: config/tc-m68k.c:2781 +#: config/tc-m68k.c:2785 msgid "Wrong register in floating-point reglist" msgstr "" -#: config/tc-m68k.c:2797 +#: config/tc-m68k.c:2801 msgid "incorrect register in reglist" msgstr "" -#: config/tc-m68k.c:2803 +#: config/tc-m68k.c:2807 msgid "wrong register in floating-point reglist" msgstr "" #. ERROR -#: config/tc-m68k.c:3244 +#: config/tc-m68k.c:3248 msgid "Extra )" msgstr "" #. ERROR -#: config/tc-m68k.c:3255 +#: config/tc-m68k.c:3259 msgid "Missing )" msgstr "" -#: config/tc-m68k.c:3272 +#: config/tc-m68k.c:3276 msgid "Missing operand" msgstr "" -#: config/tc-m68k.c:3604 +#: config/tc-m68k.c:3608 #, c-format msgid "%s -- statement `%s' ignored" msgstr "" -#: config/tc-m68k.c:3653 +#: config/tc-m68k.c:3657 #, c-format msgid "Don't know how to figure width of %c in md_assemble()" msgstr "" -#: config/tc-m68k.c:3835 config/tc-m68k.c:3873 +#: config/tc-m68k.c:3839 config/tc-m68k.c:3877 #, c-format msgid "Internal Error: Can't find %s in hash table" msgstr "" -#: config/tc-m68k.c:3838 config/tc-m68k.c:3876 +#: config/tc-m68k.c:3842 config/tc-m68k.c:3880 #, c-format msgid "Internal Error: Can't hash %s: %s" msgstr "" -#: config/tc-m68k.c:4002 +#: config/tc-m68k.c:4006 #, c-format msgid "unrecognized default cpu `%s' ???" msgstr "" -#: config/tc-m68k.c:4014 +#: config/tc-m68k.c:4018 msgid "68040 and 68851 specified; mmu instructions may assemble incorrectly" msgstr "" -#: config/tc-m68k.c:4034 +#: config/tc-m68k.c:4038 msgid "options for 68881 and no-68881 both given" msgstr "" -#: config/tc-m68k.c:4036 +#: config/tc-m68k.c:4040 msgid "options for 68851 and no-68851 both given" msgstr "" -#: config/tc-m68k.c:4107 +#: config/tc-m68k.c:4111 #, c-format msgid "text label `%s' aligned to odd boundary" msgstr "" -#: config/tc-m68k.c:4326 +#: config/tc-m68k.c:4330 msgid "invalid byte branch offset" msgstr "" -#: config/tc-m68k.c:4363 +#: config/tc-m68k.c:4367 msgid "short branch with zero offset: use :w" msgstr "" -#: config/tc-m68k.c:4832 config/tc-m68k.c:4843 +#: config/tc-m68k.c:4836 config/tc-m68k.c:4847 msgid "expression out of range: defaulting to 1" msgstr "" -#: config/tc-m68k.c:4875 +#: config/tc-m68k.c:4879 msgid "expression out of range: defaulting to 0" msgstr "" -#: config/tc-m68k.c:4908 config/tc-m68k.c:4920 +#: config/tc-m68k.c:4912 config/tc-m68k.c:4924 #, c-format msgid "Can't deal with expression; defaulting to %ld" msgstr "" -#: config/tc-m68k.c:4934 +#: config/tc-m68k.c:4938 msgid "expression doesn't fit in BYTE" msgstr "" -#: config/tc-m68k.c:4938 +#: config/tc-m68k.c:4942 msgid "expression doesn't fit in WORD" msgstr "" -#: config/tc-m68k.c:5031 +#: config/tc-m68k.c:5035 #, c-format msgid "%s: unrecognized processor name" msgstr "" -#: config/tc-m68k.c:5096 +#: config/tc-m68k.c:5100 msgid "bad coprocessor id" msgstr "" -#: config/tc-m68k.c:5102 +#: config/tc-m68k.c:5106 msgid "unrecognized fopt option" msgstr "" -#: config/tc-m68k.c:5236 +#: config/tc-m68k.c:5240 #, c-format msgid "option `%s' may not be negated" msgstr "" -#: config/tc-m68k.c:5247 +#: config/tc-m68k.c:5251 #, c-format msgid "option `%s' not recognized" msgstr "" -#: config/tc-m68k.c:5280 +#: config/tc-m68k.c:5284 msgid "bad format of OPT NEST=depth" msgstr "" -#: config/tc-m68k.c:5343 +#: config/tc-m68k.c:5347 msgid "missing label" msgstr "" -#: config/tc-m68k.c:5367 config/tc-m68k.c:5396 +#: config/tc-m68k.c:5371 config/tc-m68k.c:5400 msgid "bad register list" msgstr "" -#: config/tc-m68k.c:5369 +#: config/tc-m68k.c:5373 #, c-format msgid "bad register list: %s" msgstr "" -#: config/tc-m68k.c:5467 +#: config/tc-m68k.c:5471 msgid "restore without save" msgstr "" -#: config/tc-m68k.c:5641 config/tc-m68k.c:6028 +#: config/tc-m68k.c:5645 config/tc-m68k.c:6032 msgid "syntax error in structured control directive" msgstr "" -#: config/tc-m68k.c:5690 +#: config/tc-m68k.c:5694 msgid "missing condition code in structured control directive" msgstr "" -#: config/tc-m68k.c:5762 +#: config/tc-m68k.c:5766 #, c-format msgid "" "Condition <%c%c> in structured control directive can not be encoded correctly" msgstr "" -#: config/tc-m68k.c:6071 +#: config/tc-m68k.c:6075 msgid "missing then" msgstr "" -#: config/tc-m68k.c:6153 +#: config/tc-m68k.c:6157 msgid "else without matching if" msgstr "" -#: config/tc-m68k.c:6187 +#: config/tc-m68k.c:6191 msgid "endi without matching if" msgstr "" -#: config/tc-m68k.c:6228 +#: config/tc-m68k.c:6232 msgid "break outside of structured loop" msgstr "" -#: config/tc-m68k.c:6267 +#: config/tc-m68k.c:6271 msgid "next outside of structured loop" msgstr "" -#: config/tc-m68k.c:6319 +#: config/tc-m68k.c:6323 msgid "missing =" msgstr "" -#: config/tc-m68k.c:6357 +#: config/tc-m68k.c:6361 msgid "missing to or downto" msgstr "" -#: config/tc-m68k.c:6393 config/tc-m68k.c:6427 config/tc-m68k.c:6646 +#: config/tc-m68k.c:6397 config/tc-m68k.c:6431 config/tc-m68k.c:6650 msgid "missing do" msgstr "" -#: config/tc-m68k.c:6530 +#: config/tc-m68k.c:6534 msgid "endf without for" msgstr "" -#: config/tc-m68k.c:6586 +#: config/tc-m68k.c:6590 msgid "until without repeat" msgstr "" -#: config/tc-m68k.c:6682 +#: config/tc-m68k.c:6686 msgid "endw without while" msgstr "" -#: config/tc-m68k.c:6806 +#: config/tc-m68k.c:6810 #, c-format msgid "unrecognized option `%s'" msgstr "" -#: config/tc-m68k.c:6851 +#: config/tc-m68k.c:6855 #, c-format msgid "unrecognized architecture specification `%s'" msgstr "" -#: config/tc-m68k.c:6944 +#: config/tc-m68k.c:6948 #, c-format msgid "" "680X0 options:\n" @@ -5623,7 +5630,7 @@ msgid "" "\t\t\t[default yes for 68020, 68030, and cpu32]\n" msgstr "" -#: config/tc-m68k.c:6955 +#: config/tc-m68k.c:6959 msgid "" "-m68851 | -mno-68851\n" "\t\t\ttarget has/lacks memory-management unit coprocessor\n" @@ -5636,7 +5643,7 @@ msgid "" "--bitwise-or\t\tdo not treat `|' as a comment character\n" msgstr "" -#: config/tc-m68k.c:6965 +#: config/tc-m68k.c:6969 msgid "" "--base-size-default-16\tbase reg without size is 16 bits\n" "--base-size-default-32\tbase reg without size is 32 bits (default)\n" @@ -5644,12 +5651,12 @@ msgid "" "--disp-size-default-32\tdisplacement with unknown size is 32 bits (default)\n" msgstr "" -#: config/tc-m68k.c:7000 +#: config/tc-m68k.c:7004 #, c-format msgid "Error %s in %s\n" msgstr "" -#: config/tc-m68k.c:7004 +#: config/tc-m68k.c:7008 #, c-format msgid "Opcode(%d.%s): " msgstr "" @@ -5923,426 +5930,426 @@ msgstr "" msgid "pc-relative" msgstr "" -#: config/tc-mips.c:690 +#: config/tc-mips.c:701 #, c-format msgid "internal Error, line %d, %s" msgstr "" -#: config/tc-mips.c:692 +#: config/tc-mips.c:703 msgid "MIPS internal Error" msgstr "" -#: config/tc-mips.c:1086 +#: config/tc-mips.c:1100 #, c-format msgid "internal: can't hash `%s': %s" msgstr "" -#: config/tc-mips.c:1094 +#: config/tc-mips.c:1108 #, c-format msgid "internal error: bad mips16 opcode: %s %s\n" msgstr "" -#: config/tc-mips.c:1275 +#: config/tc-mips.c:1289 #, c-format msgid "returned from mips_ip(%s) insn_opcode = 0x%x\n" msgstr "" -#: config/tc-mips.c:1830 config/tc-mips.c:13100 +#: config/tc-mips.c:1844 config/tc-mips.c:13185 msgid "extended instruction in delay slot" msgstr "" -#: config/tc-mips.c:1874 config/tc-mips.c:1885 +#: config/tc-mips.c:1888 config/tc-mips.c:1899 #, c-format msgid "jump to misaligned address (0x%lx)" msgstr "" -#: config/tc-mips.c:1878 config/tc-mips.c:1889 +#: config/tc-mips.c:1892 config/tc-mips.c:1903 #, c-format msgid "jump address range overflow (0x%lx)" msgstr "" -#: config/tc-mips.c:2693 config/tc-mips.c:3088 +#: config/tc-mips.c:2707 config/tc-mips.c:3108 msgid "Macro instruction expanded into multiple instructions" msgstr "" -#: config/tc-mips.c:2705 +#: config/tc-mips.c:2719 msgid "" "Macro instruction expanded into multiple instructions in a branch delay slot" msgstr "" -#: config/tc-mips.c:3141 +#: config/tc-mips.c:3143 config/tc-mips.c:7198 config/tc-mips.c:7227 +#: config/tc-mips.c:7297 config/tc-mips.c:7323 +msgid "operand overflow" +msgstr "" + +#: config/tc-mips.c:3170 config/tc-mips.c:6562 config/tc-mips.c:7404 +msgid "Macro used $at after \".set noat\"" +msgstr "" + +#: config/tc-mips.c:3207 msgid "unsupported large constant" msgstr "" -#: config/tc-mips.c:3143 +#: config/tc-mips.c:3209 #, c-format msgid "Instruction %s requires absolute expression" msgstr "" -#: config/tc-mips.c:3292 +#: config/tc-mips.c:3353 #, c-format msgid "Number (0x%lx) larger than 32 bits" msgstr "" -#: config/tc-mips.c:3314 +#: config/tc-mips.c:3375 msgid "Number larger than 64 bits" msgstr "" -#: config/tc-mips.c:3631 config/tc-mips.c:3709 config/tc-mips.c:5637 -#: config/tc-mips.c:5688 config/tc-mips.c:6236 config/tc-mips.c:6295 +#: config/tc-mips.c:3692 config/tc-mips.c:3770 config/tc-mips.c:5706 +#: config/tc-mips.c:5757 config/tc-mips.c:6305 config/tc-mips.c:6364 msgid "PIC code offset overflow (max 16 signed bits)" msgstr "" -#: config/tc-mips.c:3957 +#: config/tc-mips.c:4018 #, c-format msgid "Branch %s is always false (nop)" msgstr "" -#: config/tc-mips.c:3965 +#: config/tc-mips.c:4026 #, c-format msgid "Branch likely %s is always false" msgstr "" -#: config/tc-mips.c:3973 config/tc-mips.c:4042 config/tc-mips.c:4137 -#: config/tc-mips.c:4187 config/tc-mips.c:7426 config/tc-mips.c:7434 -#: config/tc-mips.c:7442 config/tc-mips.c:7551 +#: config/tc-mips.c:4034 config/tc-mips.c:4103 config/tc-mips.c:4198 +#: config/tc-mips.c:4248 config/tc-mips.c:7513 config/tc-mips.c:7521 +#: config/tc-mips.c:7529 config/tc-mips.c:7638 msgid "Unsupported large constant" msgstr "" #. result is always true -#: config/tc-mips.c:4007 +#: config/tc-mips.c:4068 #, c-format msgid "Branch %s is always true" msgstr "" -#: config/tc-mips.c:4259 config/tc-mips.c:4371 +#: config/tc-mips.c:4320 config/tc-mips.c:4432 msgid "Divide by zero." msgstr "" -#: config/tc-mips.c:4460 +#: config/tc-mips.c:4521 msgid "dla used to load 32-bit register" msgstr "" -#: config/tc-mips.c:4463 +#: config/tc-mips.c:4524 msgid "la used to load 64-bit address" msgstr "" -#: config/tc-mips.c:5044 +#: config/tc-mips.c:5115 msgid "MIPS PIC call to register other than $25" msgstr "" -#: config/tc-mips.c:5051 config/tc-mips.c:5062 config/tc-mips.c:5181 -#: config/tc-mips.c:5192 +#: config/tc-mips.c:5122 config/tc-mips.c:5133 config/tc-mips.c:5251 +#: config/tc-mips.c:5262 msgid "No .cprestore pseudo-op used in PIC code" msgstr "" -#: config/tc-mips.c:5056 config/tc-mips.c:5186 +#: config/tc-mips.c:5127 config/tc-mips.c:5256 msgid "No .frame pseudo-op used in PIC code" msgstr "" -#: config/tc-mips.c:5265 config/tc-mips.c:5354 config/tc-mips.c:5985 -#: config/tc-mips.c:6026 config/tc-mips.c:6044 config/tc-mips.c:6759 +#: config/tc-mips.c:5334 config/tc-mips.c:5423 config/tc-mips.c:6054 +#: config/tc-mips.c:6095 config/tc-mips.c:6113 config/tc-mips.c:6846 msgid "opcode not supported on this processor" msgstr "" -#: config/tc-mips.c:6493 config/tc-mips.c:7317 -msgid "Macro used $at after \".set noat\"" -msgstr "" - -#: config/tc-mips.c:6660 config/tc-mips.c:6681 config/tc-mips.c:6722 -#: config/tc-mips.c:6743 +#: config/tc-mips.c:6728 config/tc-mips.c:6755 config/tc-mips.c:6799 +#: config/tc-mips.c:6826 msgid "rotate count too large" msgstr "" -#: config/tc-mips.c:6799 +#: config/tc-mips.c:6886 #, c-format msgid "Instruction %s: result is always false" msgstr "" -#: config/tc-mips.c:6972 +#: config/tc-mips.c:7059 #, c-format msgid "Instruction %s: result is always true" msgstr "" -#: config/tc-mips.c:7111 config/tc-mips.c:7140 config/tc-mips.c:7210 -#: config/tc-mips.c:7236 -msgid "operand overflow" -msgstr "" - #. FIXME: Check if this is one of the itbl macros, since they #. are added dynamically. -#: config/tc-mips.c:7313 +#: config/tc-mips.c:7400 #, c-format msgid "Macro %s not implemented yet" msgstr "" -#: config/tc-mips.c:7584 +#: config/tc-mips.c:7671 #, c-format msgid "internal: bad mips opcode (mask error): %s %s" msgstr "" -#: config/tc-mips.c:7646 +#: config/tc-mips.c:7733 #, c-format msgid "internal: bad mips opcode (unknown operand type `%c'): %s %s" msgstr "" -#: config/tc-mips.c:7653 +#: config/tc-mips.c:7740 #, c-format msgid "internal: bad mips opcode (bits 0x%lx undefined): %s %s" msgstr "" -#: config/tc-mips.c:7767 +#: config/tc-mips.c:7854 #, c-format msgid "opcode not supported on this processor: %s (%s)" msgstr "" -#: config/tc-mips.c:7847 +#: config/tc-mips.c:7934 #, c-format msgid "Improper shift amount (%lu)" msgstr "" -#: config/tc-mips.c:7873 config/tc-mips.c:9187 config/tc-mips.c:9302 +#: config/tc-mips.c:7960 config/tc-mips.c:9268 config/tc-mips.c:9383 #, c-format msgid "Invalid value for `%s' (%lu)" msgstr "" -#: config/tc-mips.c:7891 +#: config/tc-mips.c:7978 #, c-format msgid "Illegal break code (%lu)" msgstr "" -#: config/tc-mips.c:7905 +#: config/tc-mips.c:7992 #, c-format msgid "Illegal lower break code (%lu)" msgstr "" -#: config/tc-mips.c:7918 +#: config/tc-mips.c:8005 #, c-format msgid "Illegal 20-bit code (%lu)" msgstr "" -#: config/tc-mips.c:7930 +#: config/tc-mips.c:8017 #, c-format msgid "Coproccesor code > 25 bits (%lu)" msgstr "" -#: config/tc-mips.c:7943 +#: config/tc-mips.c:8030 #, c-format msgid "Illegal 19-bit code (%lu)" msgstr "" -#: config/tc-mips.c:7955 +#: config/tc-mips.c:8042 #, c-format msgid "Invalid performance register (%lu)" msgstr "" -#: config/tc-mips.c:7992 +#: config/tc-mips.c:8079 #, c-format msgid "Invalid register number (%d)" msgstr "" -#: config/tc-mips.c:8168 +#: config/tc-mips.c:8255 #, c-format msgid "Invalid MDMX Immediate (%ld)" msgstr "" -#: config/tc-mips.c:8211 +#: config/tc-mips.c:8298 #, c-format msgid "Invalid float register number (%d)" msgstr "" -#: config/tc-mips.c:8221 +#: config/tc-mips.c:8308 #, c-format msgid "Float register should be even, was %d" msgstr "" -#: config/tc-mips.c:8260 +#: config/tc-mips.c:8347 #, c-format msgid "Bad element selector %ld" msgstr "" -#: config/tc-mips.c:8267 +#: config/tc-mips.c:8354 #, c-format msgid "Expecting ']' found '%s'" msgstr "" -#: config/tc-mips.c:8309 +#: config/tc-mips.c:8396 msgid "absolute expression required" msgstr "" -#: config/tc-mips.c:8377 +#: config/tc-mips.c:8464 #, c-format msgid "Bad floating point constant: %s" msgstr "" -#: config/tc-mips.c:8505 +#: config/tc-mips.c:8592 msgid "Can't use floating point insn in this section" msgstr "" -#: config/tc-mips.c:8546 config/tc-mips.c:8551 config/tc-mips.c:8682 -#: config/tc-mips.c:8687 +#: config/tc-mips.c:8635 config/tc-mips.c:8640 config/tc-mips.c:8763 +#: config/tc-mips.c:8768 msgid "bad composition of relocations" msgstr "" -#: config/tc-mips.c:8584 +#: config/tc-mips.c:8668 msgid "16 bit expression not in range 0..65535" msgstr "" -#: config/tc-mips.c:8621 +#: config/tc-mips.c:8705 msgid "16 bit expression not in range -32768..32767" msgstr "" -#: config/tc-mips.c:8706 +#: config/tc-mips.c:8787 msgid "lui expression not in range 0..65535" msgstr "" -#: config/tc-mips.c:8730 +#: config/tc-mips.c:8811 #, c-format msgid "invalid condition code register $fcc%d" msgstr "" -#: config/tc-mips.c:8755 +#: config/tc-mips.c:8836 msgid "invalid coprocessor sub-selection value (0-7)" msgstr "" -#: config/tc-mips.c:8760 +#: config/tc-mips.c:8841 #, c-format msgid "bad char = '%c'\n" msgstr "" -#: config/tc-mips.c:8771 config/tc-mips.c:8776 config/tc-mips.c:9327 +#: config/tc-mips.c:8852 config/tc-mips.c:8857 config/tc-mips.c:9408 msgid "illegal operands" msgstr "" -#: config/tc-mips.c:8843 +#: config/tc-mips.c:8924 msgid "unrecognized opcode" msgstr "" -#: config/tc-mips.c:8955 +#: config/tc-mips.c:9036 #, c-format msgid "invalid register number (%d)" msgstr "" -#: config/tc-mips.c:9046 +#: config/tc-mips.c:9127 msgid "used $at without \".set noat\"" msgstr "" -#: config/tc-mips.c:9221 +#: config/tc-mips.c:9302 msgid "can't parse register list" msgstr "" -#: config/tc-mips.c:9453 +#: config/tc-mips.c:9534 msgid "extended operand requested but not required" msgstr "" -#: config/tc-mips.c:9455 +#: config/tc-mips.c:9536 msgid "invalid unextended operand value" msgstr "" -#: config/tc-mips.c:9483 +#: config/tc-mips.c:9564 msgid "operand value out of range for instruction" msgstr "" -#: config/tc-mips.c:9715 +#: config/tc-mips.c:9796 msgid "internal error" msgstr "" -#: config/tc-mips.c:10048 +#: config/tc-mips.c:10129 #, c-format msgid "invalid architecture -mtune=%s" msgstr "" -#: config/tc-mips.c:10051 +#: config/tc-mips.c:10132 #, c-format msgid "invalid architecture -march=%s" msgstr "" -#: config/tc-mips.c:10054 +#: config/tc-mips.c:10135 #, c-format msgid "invalid architecture -mcpu=%s" msgstr "" -#: config/tc-mips.c:10066 +#: config/tc-mips.c:10147 #, c-format msgid "A different -mtune= was already specified, is now -mtune=%s" msgstr "" -#: config/tc-mips.c:10072 +#: config/tc-mips.c:10153 #, c-format msgid "A different -march= was already specified, is now -march=%s" msgstr "" -#: config/tc-mips.c:10078 +#: config/tc-mips.c:10159 #, c-format msgid "A different -mcpu= was already specified, is now -mcpu=%s" msgstr "" -#: config/tc-mips.c:10088 +#: config/tc-mips.c:10169 msgid "A different -march= or -mtune= was already specified, is now -m4650" msgstr "" -#: config/tc-mips.c:10100 +#: config/tc-mips.c:10181 msgid "A different -march= or -mtune= was already specified, is now -m4010" msgstr "" -#: config/tc-mips.c:10112 +#: config/tc-mips.c:10193 msgid "A different -march= or -mtune= was already specified, is now -m4100" msgstr "" -#: config/tc-mips.c:10124 +#: config/tc-mips.c:10205 msgid "A different -march= or -mtune= was already specified, is now -m3900" msgstr "" -#: config/tc-mips.c:10163 +#: config/tc-mips.c:10244 msgid "-G may not be used with embedded PIC code" msgstr "" -#: config/tc-mips.c:10176 +#: config/tc-mips.c:10257 msgid "-call_shared is supported only for ELF format" msgstr "" -#: config/tc-mips.c:10182 config/tc-mips.c:11627 config/tc-mips.c:11837 +#: config/tc-mips.c:10263 config/tc-mips.c:11708 config/tc-mips.c:11918 msgid "-G may not be used with SVR4 PIC code" msgstr "" -#: config/tc-mips.c:10191 +#: config/tc-mips.c:10272 msgid "-non_shared is supported only for ELF format" msgstr "" -#: config/tc-mips.c:10208 +#: config/tc-mips.c:10289 msgid "-G is not supported for this configuration" msgstr "" -#: config/tc-mips.c:10213 +#: config/tc-mips.c:10294 msgid "-G may not be used with SVR4 or embedded PIC code" msgstr "" -#: config/tc-mips.c:10227 +#: config/tc-mips.c:10308 msgid "-32 is supported for ELF format only" msgstr "" -#: config/tc-mips.c:10236 +#: config/tc-mips.c:10317 msgid "-n32 is supported for ELF format only" msgstr "" -#: config/tc-mips.c:10245 +#: config/tc-mips.c:10326 msgid "-64 is supported for ELF format only" msgstr "" -#: config/tc-mips.c:10250 config/tc-mips.c:10289 +#: config/tc-mips.c:10331 config/tc-mips.c:10370 msgid "No compiled in support for 64 bit object file format" msgstr "" -#: config/tc-mips.c:10276 +#: config/tc-mips.c:10357 msgid "-mabi is supported for ELF format only" msgstr "" -#: config/tc-mips.c:10296 +#: config/tc-mips.c:10377 #, c-format msgid "invalid abi -mabi=%s" msgstr "" -#: config/tc-mips.c:10363 +#: config/tc-mips.c:10444 msgid "" "MIPS options:\n" "-membedded-pic\t\tgenerate embedded position independent code\n" @@ -6353,7 +6360,7 @@ msgid "" "\t\t\timplicitly with the gp register [default 8]\n" msgstr "" -#: config/tc-mips.c:10371 +#: config/tc-mips.c:10452 msgid "" "-mips1\t\t\tgenerate MIPS ISA I instructions\n" "-mips2\t\t\tgenerate MIPS ISA II instructions\n" @@ -6365,20 +6372,20 @@ msgid "" "-march=CPU/-mtune=CPU\tgenerate code/schedule for CPU, where CPU is one of:\n" msgstr "" -#: config/tc-mips.c:10407 +#: config/tc-mips.c:10488 msgid "" "-mCPU\t\t\tequivalent to -march=CPU -mtune=CPU. Deprecated.\n" "-no-mCPU\t\tdon't generate code specific to CPU.\n" "\t\t\tFor -mCPU and -no-mCPU, CPU must be one of:\n" msgstr "" -#: config/tc-mips.c:10420 +#: config/tc-mips.c:10501 msgid "" "-mips16\t\t\tgenerate mips16 instructions\n" "-no-mips16\t\tdo not generate mips16 instructions\n" msgstr "" -#: config/tc-mips.c:10423 +#: config/tc-mips.c:10504 msgid "" "-mgp32\t\t\tuse 32-bit GPRs, regardless of the chosen ISA\n" "-mfp32\t\t\tuse 32-bit FPRs, regardless of the chosen ISA\n" @@ -6390,7 +6397,7 @@ msgid "" "--break, --no-trap\tbreak exception on div by 0 and mult overflow\n" msgstr "" -#: config/tc-mips.c:10433 +#: config/tc-mips.c:10514 msgid "" "-KPIC, -call_shared\tgenerate SVR4 position independent code\n" "-non_shared\t\tdo not generate position independent code\n" @@ -6398,223 +6405,223 @@ msgid "" "-mabi=ABI\t\tcreate ABI conformant object file for:\n" msgstr "" -#: config/tc-mips.c:10449 +#: config/tc-mips.c:10530 msgid "" "-32\t\t\tcreate o32 ABI object file (default)\n" "-n32\t\t\tcreate n32 ABI object file\n" "-64\t\t\tcreate 64 ABI object file\n" msgstr "" -#: config/tc-mips.c:10469 +#: config/tc-mips.c:10550 msgid "-G not supported in this configuration." msgstr "" -#: config/tc-mips.c:10488 +#: config/tc-mips.c:10569 msgid "" "The -mcpu option can't be used together with -march. Use -mtune instead of -" "mcpu." msgstr "" -#: config/tc-mips.c:10496 +#: config/tc-mips.c:10577 msgid "" "The -mcpu option can't be used together with -mtune. Use -march instead of -" "mcpu." msgstr "" -#: config/tc-mips.c:10545 config/tc-mips.c:10570 +#: config/tc-mips.c:10626 config/tc-mips.c:10651 msgid "The -mcpu option is deprecated. Please use -march and -mtune instead." msgstr "" #. This really should be an error instead of a warning, but old #. compilers only have -mcpu which sets both arch and tune. For #. now, we discard arch and preserve tune. -#: config/tc-mips.c:10590 +#: config/tc-mips.c:10671 msgid "The -march option is incompatible to -mipsN and therefore ignored." msgstr "" -#: config/tc-mips.c:10642 +#: config/tc-mips.c:10723 msgid "trap exception not supported at ISA 1" msgstr "" -#: config/tc-mips.c:10810 +#: config/tc-mips.c:10891 #, c-format msgid "Unmatched %%hi reloc" msgstr "" -#: config/tc-mips.c:11030 +#: config/tc-mips.c:11111 msgid "Invalid PC relative reloc" msgstr "" -#: config/tc-mips.c:11138 config/tc-sparc.c:3113 config/tc-sparc.c:3120 +#: config/tc-mips.c:11219 config/tc-sparc.c:3113 config/tc-sparc.c:3120 #: config/tc-sparc.c:3127 config/tc-sparc.c:3134 config/tc-sparc.c:3141 #: config/tc-sparc.c:3150 config/tc-sparc.c:3161 config/tc-sparc.c:3183 -#: config/tc-sparc.c:3207 write.c:1041 write.c:1104 +#: config/tc-sparc.c:3207 write.c:1038 write.c:1101 msgid "relocation overflow" msgstr "" -#: config/tc-mips.c:11149 +#: config/tc-mips.c:11230 #, c-format msgid "Branch to odd address (%lx)" msgstr "" -#: config/tc-mips.c:11214 +#: config/tc-mips.c:11295 msgid "Branch out of range" msgstr "" -#: config/tc-mips.c:11322 +#: config/tc-mips.c:11403 #, c-format msgid "%08lx UNDEFINED\n" msgstr "" -#: config/tc-mips.c:11385 +#: config/tc-mips.c:11466 #, c-format msgid "Alignment too large: %d. assumed." msgstr "" -#: config/tc-mips.c:11388 +#: config/tc-mips.c:11469 msgid "Alignment negative: 0 assumed." msgstr "" -#: config/tc-mips.c:11476 +#: config/tc-mips.c:11557 msgid "No read only data section in this object file format" msgstr "" -#: config/tc-mips.c:11499 +#: config/tc-mips.c:11580 msgid "Global pointers not supported; recompile -G 0" msgstr "" -#: config/tc-mips.c:11585 +#: config/tc-mips.c:11666 #, c-format msgid "%s: no such section" msgstr "" -#: config/tc-mips.c:11622 +#: config/tc-mips.c:11703 #, c-format msgid ".option pic%d not supported" msgstr "" -#: config/tc-mips.c:11633 +#: config/tc-mips.c:11714 #, c-format msgid "Unrecognized option \"%s\"" msgstr "" -#: config/tc-mips.c:11696 +#: config/tc-mips.c:11777 msgid "`noreorder' must be set before `nomacro'" msgstr "" -#: config/tc-mips.c:11760 config/tc-mips.c:11774 +#: config/tc-mips.c:11841 config/tc-mips.c:11855 #, c-format msgid "unknown ISA level %s" msgstr "" -#: config/tc-mips.c:11796 +#: config/tc-mips.c:11877 msgid ".set pop with no .set push" msgstr "" -#: config/tc-mips.c:11820 +#: config/tc-mips.c:11901 #, c-format msgid "Tried to set unrecognized symbol: %s\n" msgstr "" -#: config/tc-mips.c:11871 +#: config/tc-mips.c:11952 msgid ".cpload not in noreorder section" msgstr "" -#: config/tc-mips.c:11928 config/tc-mips.c:11947 +#: config/tc-mips.c:12009 config/tc-mips.c:12028 msgid "missing argument separator ',' for .cpsetup" msgstr "" -#: config/tc-mips.c:12128 +#: config/tc-mips.c:12213 msgid "Unsupported use of .gpword" msgstr "" -#: config/tc-mips.c:12263 +#: config/tc-mips.c:12348 msgid "expected `$'" msgstr "" -#: config/tc-mips.c:12271 +#: config/tc-mips.c:12356 msgid "Bad register number" msgstr "" -#: config/tc-mips.c:12319 +#: config/tc-mips.c:12404 msgid "Unrecognized register name" msgstr "" -#: config/tc-mips.c:12505 +#: config/tc-mips.c:12590 msgid "unsupported PC relative reference to different section" msgstr "" -#: config/tc-mips.c:12618 +#: config/tc-mips.c:12703 msgid "unsupported relocation" msgstr "" -#: config/tc-mips.c:12714 +#: config/tc-mips.c:12799 msgid "AT used after \".set noat\" or macro used after \".set nomacro\"" msgstr "" -#: config/tc-mips.c:12784 +#: config/tc-mips.c:12869 msgid "Double check fx_r_type in tc-mips.c:tc_gen_reloc" msgstr "" -#: config/tc-mips.c:12987 config/tc-sh.c:3799 +#: config/tc-mips.c:13072 config/tc-sh.c:3799 #, c-format msgid "Can not represent %s relocation in this object file format" msgstr "" -#: config/tc-mips.c:13338 +#: config/tc-mips.c:13423 msgid "missing .end at end of assembly" msgstr "" -#: config/tc-mips.c:13353 +#: config/tc-mips.c:13438 msgid "expected simple number" msgstr "" -#: config/tc-mips.c:13379 +#: config/tc-mips.c:13464 #, c-format msgid " *input_line_pointer == '%c' 0x%02x\n" msgstr "" -#: config/tc-mips.c:13381 +#: config/tc-mips.c:13466 msgid "invalid number" msgstr "" -#: config/tc-mips.c:13470 +#: config/tc-mips.c:13555 msgid ".end not in text section" msgstr "" -#: config/tc-mips.c:13474 +#: config/tc-mips.c:13559 msgid ".end directive without a preceding .ent directive." msgstr "" -#: config/tc-mips.c:13483 +#: config/tc-mips.c:13568 msgid ".end symbol does not match .ent symbol." msgstr "" -#: config/tc-mips.c:13490 +#: config/tc-mips.c:13575 msgid ".end directive missing or unknown symbol" msgstr "" -#: config/tc-mips.c:13564 +#: config/tc-mips.c:13649 msgid ".ent or .aent not in text section." msgstr "" -#: config/tc-mips.c:13567 +#: config/tc-mips.c:13652 msgid "missing .end" msgstr "" -#: config/tc-mips.c:13609 ecoff.c:3200 +#: config/tc-mips.c:13694 ecoff.c:3200 msgid ".frame outside of .ent" msgstr "" -#: config/tc-mips.c:13620 +#: config/tc-mips.c:13705 msgid "Bad .frame directive" msgstr "" -#: config/tc-mips.c:13653 +#: config/tc-mips.c:13738 msgid ".mask/.fmask outside of .ent" msgstr "" -#: config/tc-mips.c:13660 +#: config/tc-mips.c:13745 msgid "Bad .mask/.fmask directive" msgstr "" @@ -6866,19 +6873,19 @@ msgid "" "none yet\n" msgstr "" -#: config/tc-mn10200.c:793 config/tc-mn10300.c:936 config/tc-ppc.c:1883 +#: config/tc-mn10200.c:793 config/tc-mn10300.c:936 config/tc-ppc.c:1896 #: config/tc-s390.c:1299 config/tc-v850.c:1636 #, c-format msgid "Unrecognized opcode: `%s'" msgstr "" -#: config/tc-mn10200.c:1036 config/tc-mn10300.c:1459 config/tc-ppc.c:2318 +#: config/tc-mn10200.c:1036 config/tc-mn10300.c:1459 config/tc-ppc.c:2339 #: config/tc-s390.c:1224 config/tc-v850.c:2060 #, c-format msgid "junk at end of line: `%s'" msgstr "" -#: config/tc-mn10200.c:1349 config/tc-mn10300.c:2083 config/tc-ppc.c:1290 +#: config/tc-mn10200.c:1349 config/tc-mn10300.c:2083 config/tc-ppc.c:1303 #: config/tc-v850.c:1565 #, c-format msgid "operand out of range (%s not between %ld and %ld)" @@ -7196,216 +7203,216 @@ msgid "" "-Qy, -Qn\t\tignored\n" msgstr "" -#: config/tc-ppc.c:1075 +#: config/tc-ppc.c:1080 #, c-format msgid "Unknown default cpu = %s, os = %s" msgstr "" -#: config/tc-ppc.c:1100 +#: config/tc-ppc.c:1105 msgid "Neither Power nor PowerPC opcodes were selected." msgstr "" -#: config/tc-ppc.c:1181 config/tc-s390.c:477 +#: config/tc-ppc.c:1194 config/tc-s390.c:477 #, c-format msgid "Internal assembler error for instruction %s" msgstr "" -#: config/tc-ppc.c:1201 +#: config/tc-ppc.c:1214 #, c-format msgid "Internal assembler error for macro %s" msgstr "" -#: config/tc-ppc.c:1428 +#: config/tc-ppc.c:1441 msgid "identifier+constant@got means identifier@got+constant" msgstr "" -#: config/tc-ppc.c:1495 +#: config/tc-ppc.c:1508 #, c-format msgid "%s relocations do not fit in %d bytes\n" msgstr "" -#: config/tc-ppc.c:1602 +#: config/tc-ppc.c:1615 #, c-format msgid "Length of .lcomm \"%s\" is already %ld. Not changed to %ld." msgstr "" -#: config/tc-ppc.c:1684 +#: config/tc-ppc.c:1697 msgid "Relocation cannot be done when using -mrelocatable" msgstr "" -#: config/tc-ppc.c:1810 +#: config/tc-ppc.c:1823 #, c-format msgid "syntax error: invalid toc specifier `%s'" msgstr "" -#: config/tc-ppc.c:1824 +#: config/tc-ppc.c:1837 #, c-format msgid "syntax error: expected `]', found `%c'" msgstr "" -#: config/tc-ppc.c:2060 +#: config/tc-ppc.c:2081 msgid "[tocv] symbol is not a toc symbol" msgstr "" -#: config/tc-ppc.c:2071 +#: config/tc-ppc.c:2092 msgid "Unimplemented toc32 expression modifier" msgstr "" -#: config/tc-ppc.c:2076 +#: config/tc-ppc.c:2097 msgid "Unimplemented toc64 expression modifier" msgstr "" -#: config/tc-ppc.c:2080 +#: config/tc-ppc.c:2101 #, c-format msgid "Unexpected return value [%d] from parse_toc_entry!\n" msgstr "" -#: config/tc-ppc.c:2262 +#: config/tc-ppc.c:2283 msgid "unsupported relocation for DS offset field" msgstr "" -#: config/tc-ppc.c:2306 +#: config/tc-ppc.c:2327 #, c-format msgid "syntax error; found `%c' but expected `%c'" msgstr "" -#: config/tc-ppc.c:2430 +#: config/tc-ppc.c:2451 msgid "wrong number of operands" msgstr "" -#: config/tc-ppc.c:2486 +#: config/tc-ppc.c:2507 msgid "Bad .section directive: want a,e,w,x,M,S,G,T in string" msgstr "" -#: config/tc-ppc.c:2601 +#: config/tc-ppc.c:2622 msgid "missing size" msgstr "" -#: config/tc-ppc.c:2610 +#: config/tc-ppc.c:2631 msgid "negative size" msgstr "" -#: config/tc-ppc.c:2647 +#: config/tc-ppc.c:2668 msgid "missing real symbol name" msgstr "" -#: config/tc-ppc.c:2668 +#: config/tc-ppc.c:2689 msgid "attempt to redefine symbol" msgstr "" -#: config/tc-ppc.c:2902 +#: config/tc-ppc.c:2923 msgid "The XCOFF file format does not support arbitrary sections" msgstr "" -#: config/tc-ppc.c:2979 +#: config/tc-ppc.c:3000 msgid "missing rename string" msgstr "" -#: config/tc-ppc.c:3010 config/tc-ppc.c:3565 read.c:3058 +#: config/tc-ppc.c:3031 config/tc-ppc.c:3586 read.c:3058 msgid "missing value" msgstr "" -#: config/tc-ppc.c:3028 +#: config/tc-ppc.c:3049 msgid "illegal .stabx expression; zero assumed" msgstr "" -#: config/tc-ppc.c:3060 +#: config/tc-ppc.c:3081 msgid "missing class" msgstr "" -#: config/tc-ppc.c:3069 +#: config/tc-ppc.c:3090 msgid "missing type" msgstr "" -#: config/tc-ppc.c:3150 +#: config/tc-ppc.c:3171 msgid "missing symbol name" msgstr "" -#: config/tc-ppc.c:3344 +#: config/tc-ppc.c:3365 msgid "nested .bs blocks" msgstr "" -#: config/tc-ppc.c:3377 +#: config/tc-ppc.c:3398 msgid ".es without preceding .bs" msgstr "" -#: config/tc-ppc.c:3557 +#: config/tc-ppc.c:3578 msgid "non-constant byte count" msgstr "" -#: config/tc-ppc.c:3605 +#: config/tc-ppc.c:3626 msgid ".tc not in .toc section" msgstr "" -#: config/tc-ppc.c:3624 +#: config/tc-ppc.c:3645 msgid ".tc with no label" msgstr "" -#: config/tc-ppc.c:3735 +#: config/tc-ppc.c:3756 msgid "No previous section to return to. Directive ignored." msgstr "" #. Section Contents #. unknown -#: config/tc-ppc.c:4152 +#: config/tc-ppc.c:4173 msgid "Unsupported section attribute -- 'a'" msgstr "" -#: config/tc-ppc.c:4341 +#: config/tc-ppc.c:4362 msgid "bad symbol suffix" msgstr "" -#: config/tc-ppc.c:4434 +#: config/tc-ppc.c:4455 msgid "Unrecognized symbol suffix" msgstr "" -#: config/tc-ppc.c:4516 +#: config/tc-ppc.c:4537 msgid "two .function pseudo-ops with no intervening .ef" msgstr "" -#: config/tc-ppc.c:4529 +#: config/tc-ppc.c:4550 msgid ".ef with no preceding .function" msgstr "" -#: config/tc-ppc.c:4657 +#: config/tc-ppc.c:4678 #, c-format msgid "warning: symbol %s has no csect" msgstr "" -#: config/tc-ppc.c:4957 +#: config/tc-ppc.c:4978 msgid "symbol in .toc does not match any .tc" msgstr "" -#: config/tc-ppc.c:5256 config/tc-s390.c:1809 config/tc-v850.c:2331 +#: config/tc-ppc.c:5291 config/tc-s390.c:1809 config/tc-v850.c:2331 #: config/tc-xstormy16.c:536 msgid "unresolved expression that must be resolved" msgstr "" -#: config/tc-ppc.c:5259 +#: config/tc-ppc.c:5294 #, c-format msgid "unsupported relocation against %s" msgstr "" -#: config/tc-ppc.c:5334 +#: config/tc-ppc.c:5369 #, c-format msgid "cannot emit PC relative %s relocation against %s" msgstr "" -#: config/tc-ppc.c:5339 +#: config/tc-ppc.c:5374 #, c-format msgid "cannot emit PC relative %s relocation" msgstr "" -#: config/tc-ppc.c:5460 +#: config/tc-ppc.c:5495 msgid "must branch to an address a multiple of 4" msgstr "" -#: config/tc-ppc.c:5464 +#: config/tc-ppc.c:5499 #, c-format msgid "@local or @plt branch destination is too far away, %ld bytes" msgstr "" -#: config/tc-ppc.c:5495 +#: config/tc-ppc.c:5530 #, c-format msgid "Gas failure, reloc value %d\n" msgstr "" @@ -8114,6 +8121,7 @@ msgid ": asr number must be between 0 and 31" msgstr "" #: config/tc-sparc.c:1658 +#, c-format msgid ": expecting %asrN" msgstr "" @@ -9532,7 +9540,7 @@ msgstr "" msgid "unassigned file number %ld" msgstr "" -#: dwarf2dbg.c:1311 dwarf2dbg.c:1319 dwarf2dbg.c:1327 dwarf2dbg.c:1347 +#: dwarf2dbg.c:1329 dwarf2dbg.c:1337 dwarf2dbg.c:1345 dwarf2dbg.c:1365 msgid "dwarf2 is not supported for this object file format" msgstr "" @@ -10567,7 +10575,7 @@ msgstr "" msgid "zero assumed for missing expression" msgstr "" -#: read.c:3571 read.c:4470 write.c:293 +#: read.c:3571 read.c:4470 write.c:290 msgid "register value used as expression" msgstr "" @@ -10614,79 +10622,83 @@ msgstr "" msgid "floating point constant too large" msgstr "" -#: read.c:4612 +#: read.c:4571 +msgid "strings must be placed into a section" +msgstr "" + +#: read.c:4621 msgid "expected <nn>" msgstr "" #. To be compatible with BSD 4.2 as: give the luser a linefeed!! -#: read.c:4645 read.c:4731 +#: read.c:4654 read.c:4740 msgid "unterminated string; newline inserted" msgstr "" -#: read.c:4739 +#: read.c:4748 msgid "bad escaped character in string" msgstr "" -#: read.c:4765 +#: read.c:4774 msgid "expected address expression" msgstr "" -#: read.c:4785 +#: read.c:4794 #, c-format msgid "symbol \"%s\" undefined; zero assumed" msgstr "" -#: read.c:4788 +#: read.c:4797 msgid "some symbol undefined; zero assumed" msgstr "" -#: read.c:4806 +#: read.c:4815 msgid "bad or irreducible absolute expression" msgstr "" -#: read.c:4841 +#: read.c:4850 msgid "this string may not contain '\\0'" msgstr "" -#: read.c:4878 +#: read.c:4887 msgid "missing string" msgstr "" -#: read.c:5001 +#: read.c:5010 #, c-format msgid ".incbin count zero, ignoring `%s'" msgstr "" -#: read.c:5027 +#: read.c:5036 #, c-format msgid "file not found: %s" msgstr "" -#: read.c:5041 +#: read.c:5050 #, c-format msgid "seek to end of .incbin file failed `%s'" msgstr "" -#: read.c:5052 +#: read.c:5061 #, c-format msgid "skip (%ld) + count (%ld) larger than file size (%ld)" msgstr "" -#: read.c:5059 +#: read.c:5068 #, c-format msgid "could not skip to %ld in file `%s'" msgstr "" -#: read.c:5068 +#: read.c:5077 #, c-format msgid "truncated file `%s', %ld of %ld bytes read" msgstr "" -#: read.c:5231 +#: read.c:5240 msgid "missing .func" msgstr "" -#: read.c:5248 +#: read.c:5257 msgid ".endfunc missing for previous .func" msgstr "" @@ -10751,7 +10763,7 @@ msgstr "" msgid "division by zero when setting `%s'" msgstr "" -#: symbols.c:1225 write.c:2028 +#: symbols.c:1225 write.c:2003 #, c-format msgid "can't resolve value for symbol `%s'" msgstr "" @@ -10770,102 +10782,102 @@ msgstr "" msgid "section symbols are already global" msgstr "" -#: write.c:179 +#: write.c:176 #, c-format msgid "field fx_size too small to hold %d" msgstr "" -#: write.c:320 +#: write.c:317 msgid "rva not supported" msgstr "" -#: write.c:528 +#: write.c:525 #, c-format msgid "attempt to .org/.space backwards? (%ld)" msgstr "" -#: write.c:1044 +#: write.c:1041 msgid "relocation out of range" msgstr "" -#: write.c:1047 +#: write.c:1044 #, c-format msgid "%s:%u: bad return from bfd_install_relocation: %x" msgstr "" -#: write.c:1091 +#: write.c:1088 msgid "internal error: fixup not contained within frag" msgstr "" -#: write.c:1107 +#: write.c:1104 #, c-format msgid "%s:%u: bad return from bfd_install_relocation" msgstr "" -#: write.c:1194 write.c:1218 +#: write.c:1191 write.c:1215 #, c-format msgid "FATAL: Can't write %s" msgstr "" -#: write.c:1250 +#: write.c:1247 msgid "cannot write to output file" msgstr "" -#: write.c:1503 +#: write.c:1486 #, c-format msgid "%d error%s, %d warning%s, generating bad object file" msgstr "" -#: write.c:1510 +#: write.c:1493 #, c-format msgid "%d error%s, %d warning%s, no object file generated" msgstr "" -#: write.c:1966 +#: write.c:1941 #, c-format msgid "local label `%s' is not defined" msgstr "" -#: write.c:2264 +#: write.c:2239 #, c-format msgid "alignment padding (%lu bytes) not a multiple of %ld" msgstr "" -#: write.c:2381 +#: write.c:2356 #, c-format msgid ".word %s-%s+%s didn't fit" msgstr "" -#: write.c:2466 +#: write.c:2441 msgid "attempt to .org backwards" msgstr "" -#: write.c:2494 +#: write.c:2469 msgid ".space specifies non-absolute value" msgstr "" -#: write.c:2501 +#: write.c:2476 msgid ".space or .fill with negative value, ignored" msgstr "" -#: write.c:2675 +#: write.c:2650 #, c-format msgid "negative of non-absolute symbol `%s'" msgstr "" -#: write.c:2769 +#: write.c:2744 #, c-format msgid "" "subtraction of two symbols in different sections `%s' {%s section} - `%s' {%" "s section} at file address %s" msgstr "" -#: write.c:2905 +#: write.c:2880 #, c-format msgid "value of %s too large for field of %d bytes at %s" msgstr "" -#: write.c:2917 +#: write.c:2892 #, c-format msgid "signed .word overflow; switch may be too large; %ld at 0x%lx" msgstr "" diff --git a/contrib/binutils/gas/write.c b/contrib/binutils/gas/write.c index 323b95f..f8120cb 100644 --- a/contrib/binutils/gas/write.c +++ b/contrib/binutils/gas/write.c @@ -881,7 +881,8 @@ adjust_reloc_syms (abfd, sec, xxx) /* Never adjust a reloc against local symbol in a merge section with non-zero addend. */ - if ((symsec->flags & SEC_MERGE) && fixp->fx_offset) + if ((symsec->flags & SEC_MERGE) != 0 + && (fixp->fx_offset != 0 || fixp->fx_subsy != NULL)) { symbol_mark_used_in_reloc (fixp->fx_addsy); goto done; |