diff options
-rw-r--r-- | gas/ChangeLog | 10 | ||||
-rw-r--r-- | gas/config/tc-sh.c | 16 | ||||
-rw-r--r-- | gas/doc/c-sh.texi | 5 | ||||
-rw-r--r-- | gas/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gas/testsuite/gas/sh/basic.exp | 3 | ||||
-rw-r--r-- | gas/testsuite/gas/sh/renesas-1.d | 11 | ||||
-rw-r--r-- | gas/testsuite/gas/sh/renesas-1.s | 3 |
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: |