CodeSourcery is gearing up to submit support for the VxWorks RTP PIC model. Six targets are affected: arm, i386, mips, rs6000, sh and sparc. All this code is conditional on TARGET_VXWORKS_RTP being true and refers to two other macros: VXWORKS_GOTT_BASE and VXWORKS_GOTT_INDEX.
Before submitting patches, I just wanted to ask how this code should be integrated into the surrounding non-VxWorks code. Some obvious alternatives are: 1) Wrap it in #ifdef TARGET_VXWORKS_RTP. 2) Provide an always-false definition of TARGET_VXWORKS_RTP in arm.h, i386.h, etc. Also provide dummy definitions of the VXWORKS_GOTT_* macros. 3) Provide an always-false definition of TARGET_VXWORKS_RTP in defaults.h. Also provide dummy definitions of the VXWORKS_GOTT_* macros. 4) Like (3), but provide the real VxWorks default values of the VXWORKS_GOTT_* macros (rather than dummy ones). but I'm open to others. FWIW, I've attached a proto-patch for (4) below. One good thing about (4) is that it seems to be the least redundant option. One bad thing is that it leaks OS-specific stuff into the main part of the compiler. I suppose we do have some precedent for that with the ELF-related code, but I can see that it's not something we want to encourage. Richard gcc/ * defaults.h (TARGET_VXWORKS_RTP, VXWORKS_GOTT_BASE) (VXWORKS_GOTT_INDEX): Define. * config/vxworks.h (VXWORKS_GOTT_BASE, VXWORKS_GOTT_INDEX): Delete. * doc/tm.texi (TARGET_VXWORKS_RTP, VXWORKS_GOTT_BASE (VXWORKS_GOTT_INDEX): Document. Index: gcc/defaults.h =================================================================== --- gcc/defaults.h (revision 122476) +++ gcc/defaults.h (working copy) @@ -906,4 +906,14 @@ #define HARD_REGNO_NREGS_HAS_PADDING(REG #define HARD_REGNO_NREGS_WITH_PADDING(REGNO, MODE) -1 #endif +#ifndef TARGET_VXWORKS_RTP +#define TARGET_VXWORKS_RTP false +#endif +#ifndef VXWORKS_GOTT_BASE +#define VXWORKS_GOTT_BASE "__GOTT_BASE__" +#endif +#ifndef VXWORKS_GOTT_INDEX +#define VXWORKS_GOTT_INDEX "__GOTT_INDEX__" +#endif + #endif /* ! GCC_DEFAULTS_H */ Index: gcc/config/vxworks.h =================================================================== --- gcc/config/vxworks.h (revision 122473) +++ gcc/config/vxworks.h (working copy) @@ -97,11 +97,4 @@ #define TARGET_ASM_DESTRUCTOR vxworks_as extern void vxworks_asm_out_constructor (rtx symbol, int priority); extern void vxworks_asm_out_destructor (rtx symbol, int priority); -/* The name of the symbol for the table of GOTs in a particular - RTP. */ -#define VXWORKS_GOTT_BASE "__GOTT_BASE__" -/* The name of the symbol for the index into the table of GOTs for the - GOT associated with the current shared library. */ -#define VXWORKS_GOTT_INDEX "__GOTT_INDEX__" - #define VXWORKS_KIND VXWORKS_KIND_NORMAL Index: gcc/doc/tm.texi =================================================================== --- gcc/doc/tm.texi (revision 122473) +++ gcc/doc/tm.texi (working copy) @@ -53,6 +53,7 @@ through the macros defined in the @file{ * MIPS Coprocessors:: MIPS coprocessor support and how to customize it. * PCH Target:: Validity checking for precompiled headers. * C++ ABI:: Controlling C++ ABI changes. +* VxWorks:: VxWorks-specific macros. * Misc:: Everything else. @end menu @@ -9176,6 +9177,29 @@ defined. Use this hook to make adjustme visibility or perform any other required target modifications). @end deftypefn [EMAIL PROTECTED] VxWorks [EMAIL PROTECTED] VxWorks-specific Parameters [EMAIL PROTECTED] VxWorks + +Several backends have code to support the VxWorks PIC model. +Rather than hide this code in preprocessor conditions, it is +convenient to ensure that certain cross-target macros are always +defined. + [EMAIL PROTECTED] TARGET_VXWORKS_RTP +True if generating code for a VxWorks RTP. [EMAIL PROTECTED] defmac + [EMAIL PROTECTED] VXWORKS_GOTT_BASE +A symbol that points to the table of GOTs used in RTP PIC. +The default is @code{__GOTT_BASE__}. [EMAIL PROTECTED] defmac + [EMAIL PROTECTED] VXWORKS_GOTT_INDEX +A symbol that gives the index of the current module's GOT in [EMAIL PROTECTED] The default is @code{__GOTT_INDEX__}. [EMAIL PROTECTED] defmac + @node Misc @section Miscellaneous Parameters @cindex parameters, miscellaneous