RISC-V: Add new option -mrelax/-mno-relax.

gas/
	* config/tc-riscv.c (options): Add OPTION_RELAX and
	OPTION_NO_RELAX.
	(md_longopts): New option -mrelax and -mno-relax.
	(md_parse_option): Handle -mrelax and -mno-relax.
	* doc/c-riscv.texi: Document for -mrelax and -mno-relax.
	* testsuite/gas/riscv/no-relax-reloc.d: New.
	* testsuite/gas/riscv/no-relax-reloc.s: New.
	* testsuite/gas/riscv/relax-reloc.d: New.
	* testsuite/gas/riscv/relax-reloc.s: New.
This commit is contained in:
Jim Wilson 2018-04-20 15:30:18 -07:00
parent 5c8f23cdab
commit 7106056554
7 changed files with 80 additions and 0 deletions

View File

@ -1,3 +1,15 @@
2018-04-20 Kito Cheng <kito.cheng@gmail.com>
* config/tc-riscv.c (options): Add OPTION_RELAX and
OPTION_NO_RELAX.
(md_longopts): New option -mrelax and -mno-relax.
(md_parse_option): Handle -mrelax and -mno-relax.
* doc/c-riscv.texi: Document for -mrelax and -mno-relax.
* testsuite/gas/riscv/no-relax-reloc.d: New.
* testsuite/gas/riscv/no-relax-reloc.s: New.
* testsuite/gas/riscv/relax-reloc.d: New.
* testsuite/gas/riscv/relax-reloc.s: New.
2018-04-20 Nick Clifton <nickc@redhat.com>
* po/es.po: Updated Spanish translation.

View File

@ -2136,6 +2136,8 @@ enum options
OPTION_PIC,
OPTION_NO_PIC,
OPTION_MABI,
OPTION_RELAX,
OPTION_NO_RELAX,
OPTION_END_OF_ENUM
};
@ -2146,6 +2148,8 @@ struct option md_longopts[] =
{"fpic", no_argument, NULL, OPTION_PIC},
{"fno-pic", no_argument, NULL, OPTION_NO_PIC},
{"mabi", required_argument, NULL, OPTION_MABI},
{"mrelax", no_argument, NULL, OPTION_RELAX},
{"mno-relax", no_argument, NULL, OPTION_NO_RELAX},
{NULL, no_argument, NULL, 0}
};
@ -2205,6 +2209,14 @@ md_parse_option (int c, const char *arg)
return 0;
break;
case OPTION_RELAX:
riscv_opts.relax = TRUE;
break;
case OPTION_NO_RELAX:
riscv_opts.relax = FALSE;
break;
default:
return 0;
}
@ -2921,6 +2933,8 @@ RISC-V options:\n\
-fno-pic don't generate position-independent code (default)\n\
-march=ISA set the RISC-V architecture\n\
-mabi=ABI set the RISC-V ABI\n\
-mrelax enable relax (default)\n\
-mno-relax disable relax\n\
"));
}

View File

@ -48,6 +48,15 @@ by "f", "d", or "q" to indicate single-precision, double-precision, or
quad-precision floating-point calling convention, or none to indicate
the soft-float calling convention.
@cindex @samp{-mrelax} option, RISC-V
@item -mrelax
Take advantage of linker relaxations to reduce the number of instructions
required to materialize symbol addresses. (default)
@cindex @samp{-mno-relax} option, RISC-V
@item -mno-relax
Don't do linker relaxations.
@end table
@c man end

View File

@ -0,0 +1,12 @@
#as: -mno-relax
#objdump: -r
.*:[ ]+file format .*
RELOCATION RECORDS FOR .*
.*
0+0 R_RISCV_HI20.*
0+4 R_RISCV_LO12_I.*
0+8 R_RISCV_PCREL_HI20.*
0+c R_RISCV_PCREL_LO12_I.*
0+10 R_RISCV_CALL.*

View File

@ -0,0 +1,8 @@
target:
lui a5,%hi(target)
lw a5,%lo(target)(a5)
.LA0: auipc a5,%pcrel_hi(bar)
lw a0,%pcrel_lo(.LA0)(a5)
call target

View File

@ -0,0 +1,17 @@
#as:
#objdump: -r
.*:[ ]+file format .*
RELOCATION RECORDS FOR .*
.*
0+0 R_RISCV_HI20.*
0+0 R_RISCV_RELAX.*
0+4 R_RISCV_LO12_I.*
0+4 R_RISCV_RELAX.*
0+8 R_RISCV_PCREL_HI20.*
0+8 R_RISCV_RELAX.*
0+c R_RISCV_PCREL_LO12_I.*
0+c R_RISCV_RELAX.*
0+10 R_RISCV_CALL.*
0+10 R_RISCV_RELAX.*

View File

@ -0,0 +1,8 @@
target:
lui a5,%hi(target)
lw a5,%lo(target)(a5)
.LA0: auipc a5,%pcrel_hi(bar)
lw a0,%pcrel_lo(.LA0)(a5)
call target