From f55629b89c0e0cbd97068d1680483fce4477bf46 Mon Sep 17 00:00:00 2001 From: Kaz Kojima Date: Fri, 2 Apr 2004 01:39:31 +0000 Subject: [PATCH] [gas] 2004-04-01 Asgari Jinia Dhananjay Deshpande * 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 * 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 | 10 ++++++++++ gas/config/tc-sh.c | 16 +++++++++++++++- gas/doc/c-sh.texi | 5 +++++ gas/testsuite/ChangeLog | 6 ++++++ gas/testsuite/gas/sh/basic.exp | 3 +++ gas/testsuite/gas/sh/renesas-1.d | 11 +++++++++++ gas/testsuite/gas/sh/renesas-1.s | 3 +++ 7 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 gas/testsuite/gas/sh/renesas-1.d create mode 100644 gas/testsuite/gas/sh/renesas-1.s diff --git a/gas/ChangeLog b/gas/ChangeLog index 01cc9b0a8f..ec62add186 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,13 @@ +2004-04-01 Asgari Jinia + Dhananjay Deshpande + + * 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 * 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 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; diff --git a/gas/doc/c-sh.texi b/gas/doc/c-sh.texi index 509106fbb9..b08f325ee0 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 907a2e8621..febbce8948 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2004-04-01 Asgari Jinia + + * 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 * 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 9d16e0eddc..1e72ff1fda 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 0000000000..e1c9247a3b --- /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 : + 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 0000000000..974b5863d6 --- /dev/null +++ b/gas/testsuite/gas/sh/renesas-1.s @@ -0,0 +1,3 @@ + .text + .long foo +foo: -- 2.34.1