* 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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@126317
138bc75d-0d04-0410-961f-
82ee72b054a4
+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
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
+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
--- /dev/null
+/* 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;
/* 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);