aboutsummaryrefslogtreecommitdiff
path: root/gcc/config
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/config
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/config')
-rw-r--r--gcc/config/sh/vxworks.h15
1 files changed, 14 insertions, 1 deletions
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