OSDN Git Service

gcc/
authorrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 4 Jul 2007 13:01:33 +0000 (13:01 +0000)
committerrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 4 Jul 2007 13:01:33 +0000 (13:01 +0000)
* 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

gcc/ChangeLog
gcc/config/sh/vxworks.h
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/sh-relax-vxworks.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/sh-relax.c

index a294920..af67cfb 100644 (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
 2007-07-04  Richard Guenther  <rguenther@suse.de>
 
        PR tree-optimization/32482
index 63f2bbf..82b32f1 100644 (file)
@@ -30,7 +30,20 @@ Boston, MA 02110-1301, USA.  */
   while (0)
 
 #undef SUBTARGET_OVERRIDE_OPTIONS
   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
 
 #undef SUBTARGET_CPP_SPEC
 #define SUBTARGET_CPP_SPEC VXWORKS_ADDITIONAL_CPP_SPEC
index 261286e..30516ad 100644 (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
 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 (file)
index 0000000..f8c2ffe
--- /dev/null
@@ -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;
index e204f06..54422de 100644 (file)
@@ -1,5 +1,5 @@
 /* Check that -mrelax works.  */
 /* 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);
 /* { dg-options "-O1 -mrelax" } */
 
 extern void abort (void);