summaryrefslogtreecommitdiff
path: root/gas/config/tc-sh.c
diff options
context:
space:
mode:
authorKaz Kojima <kkojima@rr.iij4u.or.jp>2004-04-02 01:39:31 +0000
committerKaz Kojima <kkojima@rr.iij4u.or.jp>2004-04-02 01:39:31 +0000
commit5588bae6aad63d6e7d74491f154df275d44b92dd (patch)
tree83f45bea48b7508a4dea0acaf62b124ae6ac9263 /gas/config/tc-sh.c
parentb42a17d76f1e995f1f51003647e82d4a716ddbaa (diff)
downloadbinutils-redhat-5588bae6aad63d6e7d74491f154df275d44b92dd.tar.gz
[gas]
2004-04-01 Asgari Jinia <asgarij@kpitcummins.com> Dhananjay Deshpande <dhananjayd@kpitcummins.com> * config/tc-sh.c (dont_adjust_reloc_32): New variable. (sh_fix_adjustable): Avoid adjusting BFD_RELOC_32 when dont_adjust_reloc_32 is set. (md_longopts): Add option -renesas. (md_parse_option, md_show_usage): Likewise. * doc/c-sh.texi: Likewise. [gas/testsuite] 2004-04-01 Asgari Jinia <asgarij@kpitcummins.com> * gas/sh/renesas-1.s, gas/sh/renesas-1.d: New test for -renesas option. * gas/sh/basic.exp: Run the new test.
Diffstat (limited to 'gas/config/tc-sh.c')
-rw-r--r--gas/config/tc-sh.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/gas/config/tc-sh.c b/gas/config/tc-sh.c
index 76f669be77..04f06ff7e1 100644
--- a/gas/config/tc-sh.c
+++ b/gas/config/tc-sh.c
@@ -132,6 +132,10 @@ int sh_relax; /* set if -relax seen */
int sh_small;
+/* Flag to generate relocations against symbol values for local symbols. */
+
+static int dont_adjust_reloc_32;
+
/* preset architecture set, if given; zero otherwise. */
static int preset_target_arch;
@@ -2883,6 +2887,7 @@ struct option md_longopts[] =
#define OPTION_SMALL (OPTION_LITTLE + 1)
#define OPTION_DSP (OPTION_SMALL + 1)
#define OPTION_ISA (OPTION_DSP + 1)
+#define OPTION_RENESAS (OPTION_ISA + 1)
{"relax", no_argument, NULL, OPTION_RELAX},
{"big", no_argument, NULL, OPTION_BIG},
@@ -2890,8 +2895,10 @@ struct option md_longopts[] =
{"small", no_argument, NULL, OPTION_SMALL},
{"dsp", no_argument, NULL, OPTION_DSP},
{"isa", required_argument, NULL, OPTION_ISA},
+ {"renesas", no_argument, NULL, OPTION_RENESAS},
+
#ifdef HAVE_SH64
-#define OPTION_ABI (OPTION_ISA + 1)
+#define OPTION_ABI (OPTION_RENESAS + 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)
@@ -2932,6 +2939,10 @@ md_parse_option (int c, char *arg ATTRIBUTE_UNUSED)
preset_target_arch = arch_sh1_up & ~arch_sh2e_up;
break;
+ case OPTION_RENESAS:
+ dont_adjust_reloc_32 = 1;
+ break;
+
case OPTION_ISA:
if (strcasecmp (arg, "sh4") == 0)
preset_target_arch = arch_sh4;
@@ -3019,6 +3030,8 @@ SH options:\n\
-little generate little endian code\n\
-big generate big endian code\n\
-relax alter jump instructions for long displacements\n\
+-renesas disable optimization with section symbol for\n\
+ compatibility with Renesas assembler.\n\
-small align sections to 4 byte boundaries, not 16\n\
-dsp enable sh-dsp insns, and disable floating-point ISAs.\n\
-isa=[sh4\n\
@@ -3564,6 +3577,7 @@ sh_fix_adjustable (fixS *fixP)
if (fixP->fx_r_type == BFD_RELOC_32_PLT_PCREL
|| fixP->fx_r_type == BFD_RELOC_32_GOT_PCREL
|| fixP->fx_r_type == BFD_RELOC_SH_GOTPC
+ || ((fixP->fx_r_type == BFD_RELOC_32) && dont_adjust_reloc_32)
|| fixP->fx_r_type == BFD_RELOC_RVA)
return 0;