> I'll pre-approve that change, but I'll also defer to any other > maintainer who has a solution they prefer.
How about this one? 2006-05-15 DJ Delorie <[EMAIL PROTECTED]> * crtstuff.c (__dso_handle): Set section from TARGET_LBIGCC_SDATA_SECTION if defined. * doc/tm.text (TARGET_LIBGCC_SDATA_SECTION): Document. * config/mips/mips.h (TARGET_LIBGCC_SDATA_SECTION): Define. Index: crtstuff.c =================================================================== --- crtstuff.c (revision 113799) +++ crtstuff.c (working copy) @@ -225,6 +225,9 @@ STATIC void *__JCR_LIST__[] in one DSO or the main program is not used in another object. The dynamic linker takes care of this. */ +#ifdef TARGET_LIBGCC_SDATA_SECTION +extern void *__dso_handle __attribute__ ((__section__ (TARGET_LIBGCC_SDATA_SECTION))); +#endif #ifdef HAVE_GAS_HIDDEN extern void *__dso_handle __attribute__ ((__visibility__ ("hidden"))); #endif Index: doc/tm.texi =================================================================== --- doc/tm.texi (revision 113799) +++ doc/tm.texi (working copy) @@ -6217,6 +6217,18 @@ registers initialized in the function pr constant pools don't end up too far way in the text section. @end defmac [EMAIL PROTECTED] TARGET_LIBGCC_SDATA_SECTION +If defined, a string which names the section into which small +variables defined in crtstuff and libgcc should go. This is useful +when the target has options for optimizing access to small data, and +you want the crtstuff and libgcc routines to be conservative in what +they expect of your application yet liberal in what your application +expects. For example, for targets with a @code{.sdata} section (like +MIPS), you could compile crtstuff with @code{-G 0} so that it doesn't +require small data support from your application, but use this macro +to put small data into @code{.sdata} so that your application can +access these variables whether it uses small data or not. + @defmac FORCE_CODE_SECTION_ALIGN If defined, an ASM statement that aligns a code section to some arbitrary boundary. This is used to force all fragments of the Index: config/mips/mips.h =================================================================== --- config/mips/mips.h (revision 113799) +++ config/mips/mips.h (working copy) @@ -466,6 +466,8 @@ extern const struct mips_rtx_cost_data * #endif #endif /* IN_LIBGCC2 */ +#define TARGET_LIBGCC_SDATA_SECTION ".sdata" + #ifndef MULTILIB_ENDIAN_DEFAULT #if TARGET_ENDIAN_DEFAULT == 0 #define MULTILIB_ENDIAN_DEFAULT "EL"