rs6000: -mreadonly-in-sdata (PR82411)
authorSegher Boessenkool <segher@kernel.crashing.org>
Wed, 7 Mar 2018 20:27:11 +0000 (21:27 +0100)
committerSegher Boessenkool <segher@gcc.gnu.org>
Wed, 7 Mar 2018 20:27:11 +0000 (21:27 +0100)
This adds a new option -mreadonly-in-sdata (on by default) that
controls whether readonly data can be put in sdata.  (For EABI this
does nothing, readonly data is put in sdata2 as usual).

PR target/82411
* config/rs6000/rs6000.c (rs6000_elf_in_small_data_p): Don't put
readonly data in sdata, if that is disabled.
* config/rs6000/sysv4.opt (mreadonly-in-sdata): New option.
* doc/invoke.texi (RS/6000 and PowerPC Options): Document
-mreadonly-in-sdata option.

gcc/testsuite/
PR target/82411
* gcc.target/powerpc/ppc-sdata-2.c: Skip if -mno-readonly-in-sdata.

From-SVN: r258340

gcc/ChangeLog
gcc/config/rs6000/rs6000.c
gcc/config/rs6000/sysv4.opt
gcc/doc/invoke.texi
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/powerpc/ppc-sdata-2.c

index 1e988ed719927844fc707e42286c4983bbadbb51..666985ef00234dde199a92349c2b122c1acda9bd 100644 (file)
@@ -1,3 +1,12 @@
+2018-03-07  Segher Boessenkool  <segher@kernel.crashing.org>
+
+       PR target/82411
+       * config/rs6000/rs6000.c (rs6000_elf_in_small_data_p): Don't put
+       readonly data in sdata, if that is disabled.
+       * config/rs6000/sysv4.opt (mreadonly-in-sdata): New option.
+       * doc/invoke.texi (RS/6000 and PowerPC Options): Document
+       -mreadonly-in-sdata option.
+
 2018-03-07  Martin Sebor  <msebor@redhat.com>
 
        PR tree-optimization/84468
index 9c8c0c8393437eaf49e43a1566f561cc3207b359..63f62d47e8b04addb282fe243039a648b48c0209 100644 (file)
@@ -33259,6 +33259,11 @@ rs6000_elf_in_small_data_p (const_tree decl)
     }
   else
     {
+      /* If we are told not to put readonly data in sdata, then don't.  */
+      if (TREE_READONLY (decl) && rs6000_sdata != SDATA_EABI
+         && !rs6000_readonly_in_sdata)
+       return false;
+
       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (decl));
 
       if (size > 0
index 9534c1ce2824859b499f672ce55dfb70e4876033..fb03c0ac80ae861b74009122cc0a77268a1d6029 100644 (file)
@@ -27,6 +27,10 @@ msdata=
 Target RejectNegative Joined Var(rs6000_sdata_name)
 Select method for sdata handling.
 
+mreadonly-in-sdata
+Target Report Var(rs6000_readonly_in_sdata) Init(1) Save
+Allow readonly data in sdata.
+
 mtls-size=
 Target RejectNegative Joined Var(rs6000_tls_size) Enum(rs6000_tls_size)
 Specify bit size of immediate TLS offsets.
index 80e4efffe11d7f3d610f104e1d207fa9d3006e3f..2492148b30f2d5c5c7ab4e2131e71506546910ad 100644 (file)
@@ -1087,7 +1087,7 @@ See RS/6000 and PowerPC Options.
 -mdlmzb  -mno-dlmzb @gol
 -mprototype  -mno-prototype @gol
 -msim  -mmvme  -mads  -myellowknife  -memb  -msdata @gol
--msdata=@var{opt}  -mvxworks  -G @var{num} @gol
+-msdata=@var{opt}  -mreadonly-in-sdata  -mvxworks  -G @var{num} @gol
 -mrecip  -mrecip=@var{opt}  -mno-recip  -mrecip-precision @gol
 -mno-recip-precision @gol
 -mveclibabi=@var{type}  -mfriz  -mno-friz @gol
@@ -24114,6 +24114,13 @@ On embedded PowerPC systems, put all initialized global and static data
 in the @code{.data} section, and all uninitialized data in the
 @code{.bss} section.
 
+@item -mreadonly-in-sdata
+@itemx -mreadonly-in-sdata
+@opindex mreadonly-in-sdata
+@opindex mno-readonly-in-sdata
+Put read-only objects in the @code{.sdata} section as well.  This is the
+default.
+
 @item -mblock-move-inline-limit=@var{num}
 @opindex mblock-move-inline-limit
 Inline all block moves (such as calls to @code{memcpy} or structure
index 8e273c6bf6ce709e2fa179cf22dbf89c9151fc7e..080164d421a4ca83ed8ce32882e5b8c1bba55a0b 100644 (file)
@@ -1,3 +1,8 @@
+2018-03-07  Segher Boessenkool  <segher@kernel.crashing.org>
+
+       PR target/82411
+       * gcc.target/powerpc/ppc-sdata-2.c: Skip if -mno-readonly-in-sdata.
+
 2018-03-07  Martin Sebor  <msebor@redhat.com>
 
        PR tree-optimization/84468
index 570c81f7e33033d2cce3bb362877dbce4851b660..ee77456ca4ff95271ea97d760c7b26930d33aa15 100644 (file)
@@ -5,6 +5,7 @@
 /* { dg-final { scan-assembler-not "\\.section\[ \t\]\\.sdata2," } } */
 /* { dg-final { scan-assembler "sdat@sdarel\\(13\\)" } } */
 /* { dg-final { scan-assembler "sdat2@sdarel\\(13\\)" } } */
+/* { dg-skip-if "" { *-*-* } { "-mno-readonly-in-sdata" } { "" } } */
 
 
 int sdat = 2;