Commit de10fca0 by Sandra Loosemore Committed by Sandra Loosemore

nios2.c: Include xregex.h.

2017-10-26  Sandra Loosemore  <sandra@codesourcery.com>

	gcc/
	* config/nios2/nios2.c: Include xregex.h.
	(nios2_gprel_sec_regex): New.
	(nios2_option_overide): Initialize it.  Don't allow GP-relative 
	addressing with PIC.
	(nios2_small_section_name_p): Check for regex match.
	* config/nios2/nios2.opt (mgprel-sec=): New option.
	* doc/invoke.texi (Option Summary): Add -mgprel-sec.
	(Nios II Options): Document -mgprel-sec.

	gcc/testsuite/
	* gcc.target/nios2/gpopt-gprel-sec.c: New.

From-SVN: r254123
parent 31498bee
2017-10-26 Sandra Loosemore <sandra@codesourcery.com>
* config/nios2/nios2.c: Include xregex.h.
(nios2_gprel_sec_regex): New.
(nios2_option_overide): Initialize it. Don't allow GP-relative
addressing with PIC.
(nios2_small_section_name_p): Check for regex match.
* config/nios2/nios2.opt (mgprel-sec=): New option.
* doc/invoke.texi (Option Summary): Add -mgprel-sec.
(Nios II Options): Document -mgprel-sec.
2017-10-26 Jim Wilson <wilson@tuliptree.org>
* doc/invoke.texi (-fdebug-prefix-map): Expand documentation.
......@@ -49,6 +49,7 @@
#include "stor-layout.h"
#include "builtins.h"
#include "tree-pass.h"
#include "xregex.h"
/* This file should be included last. */
#include "target-def.h"
......@@ -103,6 +104,9 @@ static int custom_code_index[256];
/* Set to true if any conflicts (re-use of a code between 0-255) are found. */
static bool custom_code_conflict = false;
/* State for command-line options. */
regex_t nios2_gprel_sec_regex;
/* Definition of builtin function types for nios2. */
......@@ -1371,6 +1375,23 @@ nios2_option_override (void)
nios2_gpopt_option = gpopt_local;
}
/* GP-relative addressing doesn't make sense for PIC. */
if (flag_pic)
{
if (nios2_gpopt_option != gpopt_none)
error ("-mgpopt not supported with PIC.");
if (nios2_gprel_sec)
error ("-mgprel-sec= not supported with PIC.");
}
/* Process -mgprel-sec=. */
if (nios2_gprel_sec)
{
if (regcomp (&nios2_gprel_sec_regex, nios2_gprel_sec,
REG_EXTENDED | REG_NOSUB))
error ("-mgprel-sec= argument is not a valid regular expression.");
}
/* If we don't have mul, we don't have mulx either! */
if (!TARGET_HAS_MUL && TARGET_HAS_MULX)
target_flags &= ~MASK_HAS_MULX;
......@@ -2268,7 +2289,9 @@ nios2_small_section_name_p (const char *section)
return (strcmp (section, ".sbss") == 0
|| strncmp (section, ".sbss.", 6) == 0
|| strcmp (section, ".sdata") == 0
|| strncmp (section, ".sdata.", 7) == 0);
|| strncmp (section, ".sdata.", 7) == 0
|| (nios2_gprel_sec
&& regexec (&nios2_gprel_sec_regex, section, 0, NULL, 0) == 0));
}
/* Return true if EXP should be placed in the small data section. */
......
......@@ -586,3 +586,7 @@ Enable generation of R2 BMX instructions.
mcdx
Target Report Mask(HAS_CDX)
Enable generation of R2 CDX instructions.
mgprel-sec=
Target RejectNegative Joined Var(nios2_gprel_sec) Init(NULL)
Regular expression matching additional GP-addressible small-data section names.
......@@ -948,6 +948,7 @@ Objective-C and Objective-C++ Dialects}.
@emph{Nios II Options}
@gccoptlist{-G @var{num} -mgpopt=@var{option} -mgpopt -mno-gpopt @gol
-mgprel-sec=@var{regexp} @gol
-mel -meb @gol
-mno-bypass-cache -mbypass-cache @gol
-mno-cache-volatile -mcache-volatile @gol
......@@ -21171,6 +21172,18 @@ GOT data sections. In this case, the 16-bit offset for GP-relative
addressing may not be large enough to allow access to the entire
small data section.
@item -mgprel-sec=@var{regexp}
@opindex mgprel-sec
This option specifies additional section names that can be accessed via
GP-relative addressing. It is most useful in conjunction with
@code{section} attributes on variable declarations
(@pxref{Common Variable Attributes}) and a custom linker script.
The @var{regexp} is a POSIX Extended Regular Expression.
This option does not affect the behavior of the @option{-G} option, and
and the specified sections are in addition to the standard @code{.sdata}
and @code{.sbss} small-data sections that are recognized by @option{-mgpopt}.
@item -mel
@itemx -meb
@opindex mel
2017-10-26 Sandra Loosemore <sandra@codesourcery.com>
* gcc.target/nios2/gpopt-gprel-sec.c: New.
2017-10-26 Olga Makhotina <olga.makhotina@intel.com>
* gcc.target/i386/avx512f-vcmpps-1.c (_mm512_cmpeq_ps_mask,
......
/* { dg-do compile } */
/* { dg-options "-O -mgpopt=local -mgprel-sec=\\.frog.+" } */
extern int a __attribute__ ((section (".frog1")));
static volatile int b __attribute__ ((section (".frog2"))) = 1;
extern int c __attribute__ ((section (".data")));
static volatile int d __attribute__ ((section (".data"))) = 2;
extern int e;
static volatile int f = 3;
volatile int g __attribute__ ((weak)) = 4;
extern int h[100];
static int i[100];
static int j[100] __attribute__ ((section (".sdata")));
typedef int (*ftype) (int);
extern int foo (int);
extern int bar (int, int*, int*, int*, ftype);
int baz (void)
{
return bar (a + b + c + d + e + f + g, h, i, j, foo);
}
/* { dg-final { scan-assembler "%gprel\\(a\\)" } } */
/* { dg-final { scan-assembler "%gprel\\(b\\)" } } */
/* { dg-final { scan-assembler-not "%gprel\\(c\\)" } } */
/* { dg-final { scan-assembler-not "%gprel\\(d\\)" } } */
/* { dg-final { scan-assembler-not "%gprel\\(e\\)" } } */
/* { dg-final { scan-assembler "%gprel\\(f\\)" } } */
/* { dg-final { scan-assembler-not "%gprel\\(g\\)" } } */
/* { dg-final { scan-assembler-not "%gprel\\(h\\)" } } */
/* { dg-final { scan-assembler-not "%gprel\\(i\\)" } } */
/* { dg-final { scan-assembler "%gprel\\(j\\)" } } */
/* { dg-final { scan-assembler-not "%gprel\\(foo\\)" } } */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment