aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Sandiford <richard@codesourcery.com>2007-07-04 13:01:33 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2007-07-04 13:01:33 +0000
commitf0025c1ff517c6e041dfdf3b9d1afbd6bf8a9ff1 (patch)
tree6a2113dc552ef9ac00d4f41f482003467af4fc1c /gcc
parent7d8c27ffa274c9dcaecc29421e3dbec08077be72 (diff)
downloadgcc-f0025c1ff517c6e041dfdf3b9d1afbd6bf8a9ff1.zip
gcc-f0025c1ff517c6e041dfdf3b9d1afbd6bf8a9ff1.tar.gz
gcc-f0025c1ff517c6e041dfdf3b9d1afbd6bf8a9ff1.tar.bz2
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/sh/vxworks.h15
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/sh-relax-vxworks.c5
-rw-r--r--gcc/testsuite/gcc.dg/sh-relax.c2
5 files changed, 30 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a294920..af67cfb 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/config/sh/vxworks.h b/gcc/config/sh/vxworks.h
index 63f2bbf..82b32f1 100644
--- a/gcc/config/sh/vxworks.h
+++ b/gcc/config/sh/vxworks.h
@@ -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
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 261286e..30516ad6 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
diff --git a/gcc/testsuite/gcc.dg/sh-relax-vxworks.c b/gcc/testsuite/gcc.dg/sh-relax-vxworks.c
new file mode 100644
index 0000000..f8c2ffe
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/sh-relax-vxworks.c
@@ -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;
diff --git a/gcc/testsuite/gcc.dg/sh-relax.c b/gcc/testsuite/gcc.dg/sh-relax.c
index e204f06..54422de 100644
--- a/gcc/testsuite/gcc.dg/sh-relax.c
+++ b/gcc/testsuite/gcc.dg/sh-relax.c
@@ -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);