[gas]
authorKaz Kojima <kkojima@rr.iij4u.or.jp>
Fri, 2 Apr 2004 01:39:31 +0000 (01:39 +0000)
committerKaz Kojima <kkojima@rr.iij4u.or.jp>
Fri, 2 Apr 2004 01:39:31 +0000 (01:39 +0000)
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.

gas/ChangeLog
gas/config/tc-sh.c
gas/doc/c-sh.texi
gas/testsuite/ChangeLog
gas/testsuite/gas/sh/basic.exp
gas/testsuite/gas/sh/renesas-1.d [new file with mode: 0644]
gas/testsuite/gas/sh/renesas-1.s [new file with mode: 0644]

index 01cc9b0a8fceb15607a10c250a30426f705546f0..ec62add186686a9df996b7a1f2a203075e1ef3dc 100644 (file)
@@ -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
index 76f669be776536cc673438890c955fa6e4e2f156..04f06ff7e1fb03293bd85812228c0152ae4b7811 100644 (file)
@@ -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;
 
index 509106fbb95523af6c016800c245a9f65f27d118..b08f325ee08e06b03867c8d8fcee874d450679da 100644 (file)
@@ -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
index 907a2e862193fce3f3bc3e8c426100e7d4e85662..febbce89481be7ab54ee8641fbf5be2a26d5750d 100644 (file)
@@ -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.
index 9d16e0eddc733e6d9002af31875262467e81295e..1e72ff1fdacaae51594ae4f48d58cc7a2b7a0510 100644 (file)
@@ -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 (file)
index 0000000..e1c9247
--- /dev/null
@@ -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 (file)
index 0000000..974b586
--- /dev/null
@@ -0,0 +1,3 @@
+       .text
+       .long   foo
+foo: