vxworks.h (SUBTARGET_OVERRIDE_OPTIONS): Reject -mrelax unless compiling RTP PIC.

gcc/
	* config/sh/vxworks.h (SUBTARGET_OVERRIDE_OPTIONS): Reject -mrelax
	unless compiling RTP PIC.

gcc/testsuite/
	* gcc.dg/sh-relax.c: Skip for VxWorks if non-PIC.
	* gcc.dg/sh-relax-vxworks.c: New test.

From-SVN: r126317
This commit is contained in:
Richard Sandiford 2007-07-04 13:01:33 +00:00 committed by Richard Sandiford
parent 7d8c27ffa2
commit f0025c1ff5
5 changed files with 30 additions and 2 deletions

View File

@ -1,3 +1,8 @@
2007-07-04 Richard Sandiford <richard@codesourcery.com>
* config/sh/vxworks.h (SUBTARGET_OVERRIDE_OPTIONS): Reject -mrelax
unless compiling RTP PIC.
2007-07-04 Richard Guenther <rguenther@suse.de>
PR tree-optimization/32482

View File

@ -30,7 +30,20 @@ Boston, MA 02110-1301, USA. */
while (0)
#undef SUBTARGET_OVERRIDE_OPTIONS
#define SUBTARGET_OVERRIDE_OPTIONS VXWORKS_OVERRIDE_OPTIONS
#define SUBTARGET_OVERRIDE_OPTIONS \
do \
{ \
VXWORKS_OVERRIDE_OPTIONS; \
/* The kernel loader cannot handle the relaxation \
relocations, so it cannot load kernel modules \
(which are ET_REL) or RTP executables (which are \
linked with --emit-relocs). No relaxation relocations \
appear in shared libraries, so relaxation is OK \
for RTP PIC. */ \
if (TARGET_RELAX && !(TARGET_VXWORKS_RTP && flag_pic)) \
error ("-mrelax is only supported for RTP PIC"); \
} \
while (0)
#undef SUBTARGET_CPP_SPEC
#define SUBTARGET_CPP_SPEC VXWORKS_ADDITIONAL_CPP_SPEC

View File

@ -1,3 +1,8 @@
2007-07-04 Richard Sandiford <richard@codesourcery.com>
* gcc.dg/sh-relax.c: Skip for VxWorks if non-PIC.
* gcc.dg/sh-relax-vxworks.c: New test.
2007-07-04 Richard Guenther <rguenther@suse.de>
PR tree-optimization/32500

View File

@ -0,0 +1,5 @@
/* Check that -mrelax produces the correct error message. */
/* { dg-do compile { target { sh-*-vxworks* && nonpic } } } */
/* { dg-error "-mrelax is only supported for RTP PIC" "" { target *-*-* } 0 } */
/* { dg-options "-O1 -mrelax" } */
int x;

View File

@ -1,5 +1,5 @@
/* Check that -mrelax works. */
/* { dg-do run { target sh-*-* sh?-*-* } } */
/* { dg-do run { target { { sh-*-* sh?-*-* } && { ! { sh*-*-vxworks* && nonpic } } } } } */
/* { dg-options "-O1 -mrelax" } */
extern void abort (void);