diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5d702fd9cc6..d4ae2b5c200 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2007-03-07 Richard Sandiford + + * config/vxworks.h (vxworks_override_options): Declare. + (VXWORKS_OVERRIDE_OPTIONS): Use it. + * config/vxworks.c: Include target.h and toplev.h. + (vxworks_override_options): New function. + * config/t-vxworks (vxworks.o): Depend on $(TARGET_H) and toplev.h. + 2007-03-07 Andreas Krebbel * config/s390/s390.c (override_options): Don't emit an error when diff --git a/gcc/config/t-vxworks b/gcc/config/t-vxworks index 3741581d3a7..c9d69e0edce 100644 --- a/gcc/config/t-vxworks +++ b/gcc/config/t-vxworks @@ -33,5 +33,5 @@ LIMITS_H_TEST = true EXTRA_MULTILIB_PARTS = vxworks.o: $(srcdir)/config/vxworks.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \ - output.h $(TM_H) + $(TARGET_H) toplev.h output.h $(TM_H) $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $< diff --git a/gcc/config/vxworks.c b/gcc/config/vxworks.c index 4ac33ab6c3e..16dbc092bff 100644 --- a/gcc/config/vxworks.c +++ b/gcc/config/vxworks.c @@ -23,6 +23,8 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA #include "config.h" #include "system.h" #include "coretypes.h" +#include "target.h" +#include "toplev.h" #include "output.h" #include "tm.h" @@ -54,3 +56,16 @@ vxworks_asm_out_destructor (rtx symbol, int priority) /*constructor_p=*/false); assemble_addr_to_section (symbol, sec); } + +/* Do VxWorks-specific parts of OVERRIDE_OPTIONS. */ + +void +vxworks_override_options (void) +{ + /* We can use .ctors/.dtors sections only in RTP mode. */ + targetm.have_ctors_dtors = TARGET_VXWORKS_RTP; + + /* PIC is only supported for RTPs. */ + if (flag_pic && !TARGET_VXWORKS_RTP) + error ("PIC is only supported for RTPs"); +} diff --git a/gcc/config/vxworks.h b/gcc/config/vxworks.h index 055bf09813b..2d8bfbd8c86 100644 --- a/gcc/config/vxworks.h +++ b/gcc/config/vxworks.h @@ -82,13 +82,10 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA #define VXWORKS_STARTFILE_SPEC "%{mrtp:%{!shared:crt0.o%s}}" #define VXWORKS_ENDFILE_SPEC "" -/* We can use .ctors/.dtors sections only in RTP mode. - Unfortunately this must be an integer constant expression; - fix up in override_options. */ +/* Do VxWorks-specific parts of OVERRIDE_OPTIONS. */ #undef VXWORKS_OVERRIDE_OPTIONS -#define VXWORKS_OVERRIDE_OPTIONS do { \ - targetm.have_ctors_dtors = TARGET_VXWORKS_RTP; \ -} while (0) +#define VXWORKS_OVERRIDE_OPTIONS vxworks_override_options () +extern void vxworks_override_options (void); /* VxWorks requires special handling of constructors and destructors. All VxWorks configurations must use these functions. */