aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gas/ChangeLog10
-rw-r--r--gas/config/tc-sh.c16
-rw-r--r--gas/doc/c-sh.texi5
-rw-r--r--gas/testsuite/ChangeLog6
-rw-r--r--gas/testsuite/gas/sh/basic.exp3
-rw-r--r--gas/testsuite/gas/sh/renesas-1.d11
-rw-r--r--gas/testsuite/gas/sh/renesas-1.s3
7 files changed, 53 insertions, 1 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 01cc9b0..ec62add 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,13 @@
+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.
+
2004-04-01 Dave Korn <dk@artimi.com>
* config/tc-dlx.c (md_assemble): set fx_no_overflow flag for
diff --git a/gas/config/tc-sh.c b/gas/config/tc-sh.c
index 76f669b..04f06ff 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;
diff --git a/gas/doc/c-sh.texi b/gas/doc/c-sh.texi
index 509106f..b08f325 100644
--- a/gas/doc/c-sh.texi
+++ b/gas/doc/c-sh.texi
@@ -29,6 +29,7 @@
@kindex -relax
@kindex -small
@kindex -dsp
+@kindex -renesas
@item -little
Generate little endian code.
@@ -45,6 +46,10 @@ Align sections to 4 byte boundaries, not 16.
@item -dsp
Enable sh-dsp insns, and disable sh3e / sh4 insns.
+@item -renesas
+Disable optimization with section symbol for compatibility with
+Renesas assembler.
+
@item -isa=sh4 | sh4a
Specify the sh4 or sh4a instruction set.
@item -isa=dsp
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog
index 907a2e8..febbce8 100644
--- a/gas/testsuite/ChangeLog
+++ b/gas/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+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.
+
2004-04-01 Dave Korn <dk@artimi.com>
* gas/dlx/alltests.exp: Execute new lohi test.
diff --git a/gas/testsuite/gas/sh/basic.exp b/gas/testsuite/gas/sh/basic.exp
index 9d16e0e..1e72ff1 100644
--- a/gas/testsuite/gas/sh/basic.exp
+++ b/gas/testsuite/gas/sh/basic.exp
@@ -157,6 +157,9 @@ if [istarget sh*-*-*] then {
run_dump_test "tlspic"
run_dump_test "tlsnopic"
+
+ # Test -renesas.
+ run_dump_test "renesas-1"
}
}
diff --git a/gas/testsuite/gas/sh/renesas-1.d b/gas/testsuite/gas/sh/renesas-1.d
new file mode 100644
index 0000000..e1c9247
--- /dev/null
+++ b/gas/testsuite/gas/sh/renesas-1.d
@@ -0,0 +1,11 @@
+#objdump: -dr
+#as: -renesas
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <foo-0x4>:
+ 0: 00 00 [ ]*\.word 0x0000
+[ ]+0: R_SH_DIR32 foo
+ \.\.\.
diff --git a/gas/testsuite/gas/sh/renesas-1.s b/gas/testsuite/gas/sh/renesas-1.s
new file mode 100644
index 0000000..974b586
--- /dev/null
+++ b/gas/testsuite/gas/sh/renesas-1.s
@@ -0,0 +1,3 @@
+ .text
+ .long foo
+foo: