diff options
author | Tom Tromey <tromey@redhat.com> | 1998-04-22 06:10:03 +0000 |
---|---|---|
committer | Tom Tromey <tromey@redhat.com> | 1998-04-22 06:10:03 +0000 |
commit | 48401fcf8c8440e57ed0dbc2ade4828b9416090c (patch) | |
tree | 044bb8b9e142bd18f50bfb0311ea9e47736aafc7 /gas/config/tc-sh.c | |
parent | 9d04d6183d792349aaab84ecb1338b9445c0981b (diff) | |
download | gdb-48401fcf8c8440e57ed0dbc2ade4828b9416090c.zip gdb-48401fcf8c8440e57ed0dbc2ade4828b9416090c.tar.gz gdb-48401fcf8c8440e57ed0dbc2ade4828b9416090c.tar.bz2 |
* Many files: Added gettext invocations around user-visible
strings.
* acconfig.h (ENABLE_NLS, HAVE_CATGETS, HAVE_GETTEXT, HAVE_STPCPY,
HAVE_LC_MESSAGES): Define.
* dep-in.sed: Added asintl.h.
* po/Make-in: New file.
* gasp.c (main): Call setlocale, bindtextdomain, and textdomain.
Include "asintl.h".
* read.c (Z_): Renamed from `_'.
* Makefile.am (SUBDIRS): Added po.
(POTFILES): new macro.
(po/POTFILES.in): New target.
($(OBJS)): Added asintl.h.
(HFILES): Likewise.
(INCLUDES): Added -DLOCALEDIR, -I$(top_srcdir)/../intl.
(as_new_LDADD): Added $(INTLLIBS).
(as_new_DEPENDENCIES): Added $(INTLDEPS).
(gasp_new_LDADD): Added $(INTLLIBS).
(gasp_new_DEPENDENCIES): New macro.
* configure, aclocal.m4: Rebuilt.
* configure.in: Call CY_GNU_GETTEXT. Generate po/Makefile.in and
po/Makefile.
(ALL_LINGUAS): Define.
* macro.c: Include "asintl.h".
* as.c (main): Call setlocale, bindtextdomain, and textdomain.
* as.h: Include "asintl.h".
* config/tc-i386.c (ordinal_names): Removed.
(md_assemble): Changed error text to avoid ordinal_names.
(i386_operand): Likewise.
(reloc): Added as_bad to avoid i18n problems.
(tc_gen_reloc): Likewise.
* config/tc-arm.c (bad_args): Now a #define.
(bad_pc): Likewise.
* config/obj-vms.c (VMS_stab_parse): Changed type of
`long_const_msg'.
(global_symbol_directory): Unified strings to avoid i18n
problems.
* config/tc-m68k.c (get_reloc_code): Added some as_bad calls to
avoid i18n problems.
* config/tc-ns32k.c (reloc): Added as_bad to avoid i18n problems.
* config/tc-ppc.c (md_apply_fix3): Added as_bad_where to avoid
i18n problems.
* config/tc-sh.c (md_convert_frag): Added as_bad to avoid i18n
problems.
start-sanitize-v850
* config/tc-v850.c (md_assemble): Changed C++ comment into C
comment.
end-sanitize-v850
* config/tc-vax.c (md_assemble): Added as_warn to avoid i18n
problems.
* as.c (print_version_id): Added an fprintf to avoid i18n
problems.
* cond.c (cond_finish_check): Added as_bad call to avoid i18n
problems.
* expr.c (expr): Added as_warn call to avoid i18n problems.
* messages.c (as_assert): Changed code to avoid i18n problems.
(as_abort): Likewise.
* read.c (pseudo_set): Added as_bad call to avoid i18n problems.
(s_space): Likewise.
* po/Make-in, po/POTFILES.in, po/gas.pot: New files.
Diffstat (limited to 'gas/config/tc-sh.c')
-rw-r--r-- | gas/config/tc-sh.c | 254 |
1 files changed, 208 insertions, 46 deletions
diff --git a/gas/config/tc-sh.c b/gas/config/tc-sh.c index b35dcfe..563b641 100644 --- a/gas/config/tc-sh.c +++ b/gas/config/tc-sh.c @@ -1,5 +1,5 @@ /* tc-sh.c -- Assemble code for the Hitachi Super-H - Copyright (C) 1993, 94, 95, 96, 1997 Free Software Foundation. + Copyright (C) 1993, 94, 95, 96, 1997, 1998 Free Software Foundation. This file is part of GAS, the GNU Assembler. @@ -80,6 +80,10 @@ const pseudo_typeS md_pseudo_table[] = int sh_relax; /* set if -relax seen */ +/* Whether -small was seen. */ + +int sh_small; + const char EXP_CHARS[] = "eE"; /* Chars that mean this number is a floating point constant */ @@ -262,6 +266,18 @@ parse_reg (src, mode, reg) return 3; } + if (src[0] == 's' && src[1] == 'g' && src[2] == 'r' && ! isalnum (src[3])) + { + *mode = A_SGR; + return 3; + } + + if (src[0] == 'd' && src[1] == 'b' && src[2] == 'r' && ! isalnum (src[3])) + { + *mode = A_DBR; + return 3; + } + if (src[0] == 's' && src[1] == 'r' && ! isalnum (src[2])) { *mode = A_SR; @@ -327,6 +343,61 @@ parse_reg (src, mode, reg) return 3; } } + if (src[0] == 'd' && src[1] == 'r') + { + if (src[2] == '1') + { + if (src[3] >= '0' && src[3] <= '4' && ! ((src[3] - '0') & 1) + && ! isalnum (src[4])) + { + *mode = D_REG_N; + *reg = 10 + src[3] - '0'; + return 4; + } + } + if (src[2] >= '0' && src[2] <= '8' && ! ((src[2] - '0') & 1) + && ! isalnum (src[3])) + { + *mode = D_REG_N; + *reg = (src[2] - '0'); + return 3; + } + } + if (src[0] == 'x' && src[1] == 'd') + { + if (src[2] == '1') + { + if (src[3] >= '0' && src[3] <= '4' && ! ((src[3] - '0') & 1) + && ! isalnum (src[4])) + { + *mode = X_REG_N; + *reg = 11 + src[3] - '0'; + return 4; + } + } + if (src[2] >= '0' && src[2] <= '8' && ! ((src[2] - '0') & 1) + && ! isalnum (src[3])) + { + *mode = X_REG_N; + *reg = (src[2] - '0') + 1; + return 3; + } + } + if (src[0] == 'f' && src[1] == 'v') + { + if (src[2] == '1'&& src[3] == '2' && ! isalnum (src[4])) + { + *mode = V_REG_N; + *reg = 12; + return 4; + } + if ((src[2] == '0' || src[2] == '4' || src[2] == '8') && ! isalnum (src[3])) + { + *mode = V_REG_N; + *reg = (src[2] - '0'); + return 3; + } + } if (src[0] == 'f' && src[1] == 'p' && src[2] == 'u' && src[3] == 'l' && ! isalnum (src[4])) { @@ -341,6 +412,13 @@ parse_reg (src, mode, reg) return 5; } + if (src[0] == 'x' && src[1] == 'm' && src[2] == 't' && src[3] == 'r' + && src[4] == 'x' && ! isalnum (src[5])) + { + *mode = XMTRX_M4; + return 5; + } + return 0; } @@ -371,7 +449,7 @@ parse_exp (s) input_line_pointer = s; expression (&immediate); if (immediate.X_op == O_absent) - as_bad ("missing operand"); + as_bad (_("missing operand")); new = input_line_pointer; input_line_pointer = save; return new; @@ -414,7 +492,7 @@ parse_at (src, op) len = parse_reg (src, &mode, &(op->reg)); if (mode != A_REG_N) - as_bad ("illegal register after @-"); + as_bad (_("illegal register after @-")); op->type = A_DEC_N; src += len; @@ -430,7 +508,7 @@ parse_at (src, op) src += len; if (op->reg != 0) { - as_bad ("must be @(r0,...)"); + as_bad (_("must be @(r0,...)")); } if (src[0] == ',') src++; @@ -446,7 +524,7 @@ parse_at (src, op) } else { - as_bad ("syntax error in @(r0,...)"); + as_bad (_("syntax error in @(r0,...)")); } } else @@ -478,17 +556,17 @@ parse_at (src, op) } else { - as_bad ("syntax error in @(disp,[Rn, gbr, pc])"); + as_bad (_("syntax error in @(disp,[Rn, gbr, pc])")); } } else { - as_bad ("syntax error in @(disp,[Rn, gbr, pc])"); + as_bad (_("syntax error in @(disp,[Rn, gbr, pc])")); } } src += len; if (src[0] != ')') - as_bad ("expecting )"); + as_bad (_("expecting )")); else src++; } @@ -497,7 +575,7 @@ parse_at (src, op) src += parse_reg (src, &mode, &(op->reg)); if (mode != A_REG_N) { - as_bad ("illegal register after @"); + as_bad (_("illegal register after @")); } if (src[0] == '+') { @@ -665,6 +743,9 @@ get_specific (opcode, operands) 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: /* Opcode needs rn */ @@ -672,11 +753,23 @@ get_specific (opcode, operands) goto fail; reg_n = user->reg; break; + case FD_REG_N: + if (user->type != F_REG_N && user->type != D_REG_N) + 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_SSR: case A_SPC: + case A_SGR: + case A_DBR: if (user->type != arg) goto fail; break; @@ -700,6 +793,9 @@ get_specific (opcode, operands) 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 */ @@ -707,9 +803,19 @@ get_specific (opcode, operands) 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); + printf (_("unhandled %d\n"), arg); goto fail; } } @@ -730,7 +836,7 @@ check (operand, low, high) || operand->X_add_number < low || operand->X_add_number > high) { - as_bad ("operand must be absolute in range %d..%d", low, high); + as_bad (_("operand must be absolute in range %d..%d"), low, high); } return operand->X_add_number; } @@ -816,6 +922,9 @@ build_Mytes (opcode, operand) case REG_M: nbuf[index] = reg_m; break; + case REG_NM: + nbuf[index] = reg_n | (reg_m >> 2); + break; case REG_B: nbuf[index] = reg_b | 0x08; break; @@ -847,7 +956,7 @@ build_Mytes (opcode, operand) insert (output, BFD_RELOC_SH_PCRELIMM8BY2, 1); break; default: - printf ("failed for %d\n", i); + printf (_("failed for %d\n"), i); } } } @@ -894,14 +1003,14 @@ md_assemble (str) if (nlen == 0) { - as_bad ("can't find opcode "); + as_bad (_("can't find opcode ")); } opcode = (sh_opcode_info *) hash_find (opcode_hash_control, name); if (opcode == NULL) { - as_bad ("unknown opcode"); + as_bad (_("unknown opcode")); return; } @@ -936,7 +1045,7 @@ md_assemble (str) where[0] = 0x0; where[1] = 0x0; - as_bad ("invalid operands for opcode"); + as_bad (_("invalid operands for opcode")); return; } @@ -998,14 +1107,14 @@ void DEFUN (tc_crawl_symbol_chain, (headers), object_headers * headers) { - printf ("call to tc_crawl_symbol_chain \n"); + printf (_("call to tc_crawl_symbol_chain \n")); } void DEFUN (tc_headers_hook, (headers), object_headers * headers) { - printf ("call to tc_headers_hook \n"); + printf (_("call to tc_headers_hook \n")); } #endif @@ -1041,7 +1150,7 @@ md_atof (type, litP, sizeP) default: *sizeP = 0; - return "bad call to md_atof"; + return _("bad call to md_atof"); } t = atof_ieee (input_line_pointer, type, words); @@ -1082,13 +1191,13 @@ s_uses (ignore) expressionS ex; if (! sh_relax) - as_warn (".uses pseudo-op seen when not relaxing"); + 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"); + as_bad (_("bad .uses format")); ignore_rest_of_line (); return; } @@ -1102,10 +1211,12 @@ CONST char *md_shortopts = ""; struct option md_longopts[] = { #define OPTION_RELAX (OPTION_MD_BASE) -#define OPTION_LITTLE (OPTION_MD_BASE+1) +#define OPTION_LITTLE (OPTION_MD_BASE + 1) +#define OPTION_SMALL (OPTION_LITTLE + 1) {"relax", no_argument, NULL, OPTION_RELAX}, {"little", no_argument, NULL, OPTION_LITTLE}, + {"small", no_argument, NULL, OPTION_SMALL}, {NULL, no_argument, NULL, 0} }; size_t md_longopts_size = sizeof(md_longopts); @@ -1120,11 +1231,16 @@ md_parse_option (c, arg) case OPTION_RELAX: sh_relax = 1; break; + case OPTION_LITTLE: shl = 1; target_big_endian = 0; break; + case OPTION_SMALL: + sh_small = 1; + break; + default: return 0; } @@ -1136,10 +1252,11 @@ void md_show_usage (stream) FILE *stream; { - fprintf(stream, "\ + fprintf(stream, _("\ SH options:\n\ -little generate little endian code\n\ --relax alter jump instructions for long displacements\n"); +-relax alter jump instructions for long displacements\n\ +-small align sections to 4 byte boundaries, not 16\n")); } int md_short_jump_size; @@ -1147,7 +1264,7 @@ int md_short_jump_size; void tc_Nout_fix_to_chars () { - printf ("call to tc_Nout_fix_to_chars \n"); + printf (_("call to tc_Nout_fix_to_chars \n")); abort (); } @@ -1159,7 +1276,7 @@ md_create_short_jump (ptr, from_Nddr, to_Nddr, frag, to_symbol) fragS *frag; symbolS *to_symbol; { - as_fatal ("failed sanity check."); + as_fatal (_("failed sanity check.")); } void @@ -1169,7 +1286,7 @@ md_create_long_jump (ptr, from_Nddr, to_Nddr, frag, to_symbol) fragS *frag; symbolS *to_symbol; { - as_fatal ("failed sanity check."); + as_fatal (_("failed sanity check.")); } /* This struct is used to pass arguments to sh_count_relocs through @@ -1254,7 +1371,7 @@ sh_frob_section (abfd, sec, ignore) || 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"); + _(".uses does not refer to a local symbol in the same section")); continue; } @@ -1273,7 +1390,7 @@ sh_frob_section (abfd, sec, ignore) if (fscan == NULL) { as_warn_where (fix->fx_file, fix->fx_line, - "can't find fixup pointed to by .uses"); + _("can't find fixup pointed to by .uses")); continue; } @@ -1296,7 +1413,7 @@ sh_frob_section (abfd, sec, ignore) || 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"); + _(".uses target does not refer to a local symbol in the same section")); continue; } @@ -1391,12 +1508,15 @@ md_convert_frag (headers, seg, fragP) case C (UNCOND_JUMP, UNCOND32): case C (UNCOND_JUMP, UNDEF_WORD_DISP): if (fragP->fr_symbol == NULL) - as_bad ("at 0x%lx, displacement overflows 12-bit field", + as_bad (_("at 0x%lx, displacement overflows 12-bit field"), (unsigned long) fragP->fr_address); + else if (S_IS_DEFINED (fragP->fr_address)) + as_bad (_("at 0x%lx, displacement to defined symbol %s overflows 12-bit field"), + (unsigned long) fragP->fr_address, + S_GET_NAME (fragP->fr_symbol)); else - as_bad ("at 0x%lx, displacement to %sdefined symbol %s overflows 12-bit field", + as_bad (_("at 0x%lx, displacement to undefined symbol %s overflows 12-bit field"), (unsigned long) fragP->fr_address, - S_IS_DEFINED (fragP->fr_symbol) ? "" : "un", S_GET_NAME (fragP->fr_symbol)); #if 0 /* This code works, but generates poor code and the compiler @@ -1482,12 +1602,15 @@ md_convert_frag (headers, seg, fragP) case C (COND_JUMP, COND32): case C (COND_JUMP, UNDEF_WORD_DISP): if (fragP->fr_symbol == NULL) - as_bad ("at 0x%lx, displacement overflows 8-bit field", + as_bad (_("at 0x%lx, displacement overflows 8-bit field"), (unsigned long) fragP->fr_address); - else - as_bad ("at 0x%lx, displacement to %sdefined symbol %s overflows 8-bit field ", + else if (S_IS_DEFINED (fragP->fr_symbol)) + as_bad (_("at 0x%lx, displacement to defined symbol %s overflows 8-bit field "), + (unsigned long) fragP->fr_address, + S_GET_NAME (fragP->fr_symbol)); + else + as_bad (_("at 0x%lx, displacement to undefined symbol %s overflows 8-bit field "), (unsigned long) fragP->fr_address, - S_IS_DEFINED (fragP->fr_symbol) ? "" : "un", S_GET_NAME (fragP->fr_symbol)); #if 0 /* This code works, but generates poor code, and the compiler @@ -1539,7 +1662,7 @@ md_convert_frag (headers, seg, fragP) if (donerelax && !sh_relax) as_warn_where (fragP->fr_file, fragP->fr_line, - "overflow in branch to %s; converted into longer instruction sequence", + _("overflow in branch to %s; converted into longer instruction sequence"), (fragP->fr_symbol != NULL ? S_GET_NAME (fragP->fr_symbol) : "")); @@ -1614,7 +1737,7 @@ sh_cons_align (nbytes) if (now_seg == absolute_section) { if ((abs_section_offset & ((1 << nalign) - 1)) != 0) - as_warn ("misaligned data"); + as_warn (_("misaligned data")); return; } @@ -1642,7 +1765,7 @@ sh_handle_align (frag) if (frag->fr_type == rs_align_code && frag->fr_next->fr_address - frag->fr_address - frag->fr_fix != 0) - as_warn_where (frag->fr_file, frag->fr_line, "misaligned data"); + as_warn_where (frag->fr_file, frag->fr_line, _("misaligned data")); } /* This macro decides whether a particular reloc is an entry in a @@ -1656,6 +1779,7 @@ sh_handle_align (frag) #define SWITCH_TABLE_CONS(fix) \ ((fix)->fx_r_type == 0 \ && ((fix)->fx_size == 2 \ + || (fix)->fx_size == 1 \ || (fix)->fx_size == 4)) #endif @@ -1666,6 +1790,7 @@ sh_handle_align (frag) && 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. @@ -1708,6 +1833,8 @@ md_apply_fix (fixP, val) #ifdef BFD_ASSEMBLER long val = *valp; #endif + long max, min; + int shift; #ifndef BFD_ASSEMBLER if (fixP->fx_r_type == 0) @@ -1717,36 +1844,53 @@ md_apply_fix (fixP, val) 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_SH_IMM8; + 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; @@ -1766,28 +1910,28 @@ md_apply_fix (fixP, val) variable val. */ val = (val + 2) / 4; if (val & ~0xff) - as_bad_where (fixP->fx_file, fixP->fx_line, "pcrel too far"); + 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"); + 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"); + 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"); + as_bad_where (fixP->fx_file, fixP->fx_line, _("pcrel too far")); buf[lowbyte] = val & 0xff; buf[highbyte] |= (val >> 8) & 0xf; break; @@ -1839,6 +1983,19 @@ md_apply_fix (fixP, val) abort (); } + 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")); + #ifdef BFD_ASSEMBLER return 0; #endif @@ -2000,6 +2157,7 @@ static const struct reloc_map coff_reloc_map[] = { 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 }, @@ -2035,7 +2193,7 @@ sh_coff_reloc_mangle (seg, fix, intr, paddr) 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", + _("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; @@ -2046,6 +2204,8 @@ sh_coff_reloc_mangle (seg, fix, intr, paddr) 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 @@ -2146,6 +2306,8 @@ tc_gen_reloc (section, 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 @@ -2166,7 +2328,7 @@ tc_gen_reloc (section, fixp) if (rel->howto == NULL) { as_bad_where (fixp->fx_file, fixp->fx_line, - "Cannot represent relocation type %s", + _("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); |