On 28/02/2012, at 3:41 AM, Ilya Enkovich wrote: >> You should keep those *_SPEC and define them with new >> GNU_*_SPEC in gnu-user.h since gnu-user.h is also used >> by other non-linux targets. In linux.h, you undef *_SPEC >> before defining them. >> >> >> -- >> H.J. > > Thanks for the note. Here is fixed version. Is it OK now?
This version looks mostly OK, but still needs a bit of work and testing. How did you test this patch? You should have built before- and after-patch compilers for both Linux and Android and run regression testsuites at least for Linux, and make sure there are no new failures. As is, it appears this patch did not see much testing, I'm pretty sure it breaks building shared libraries and PIE executable for Linux. > > Thanks, > Ilya > -- > 2012-02-27 Enkovich Ilya <ilya.enkov...@intel.com> > > * gcc/config/i386/gnu-user.h (GNU_USER_TARGET_CC1_SPEC): New. > (CC1_SPEC): Use GNU_USER_TARGET_CC1_SPEC. > (GNU_USER_TARGET_LINK_SPEC): New. > (LINK_SPEC): Use GNU_USER_TARGET_LINK_SPEC. > (GNU_USER_TARGET_MATHFILE_SPEC): New. > (ENDFILE_SPEC): Use GNU_USER_TARGET_MATHFILE_SPEC. > > * gcc/config/i386/linux.h (CC1_SPEC): New. > (LINK_SPEC): New. > (LIB_SPEC): New. > (STARTFILE_SPEC): New. > (ENDFILE_SPEC): New. > > > diff --git a/gcc/config/i386/gnu-user.h b/gcc/config/i386/gnu-user.h > index 98d0a25..33ceab7 100644 > --- a/gcc/config/i386/gnu-user.h > +++ b/gcc/config/i386/gnu-user.h > @@ -77,8 +77,11 @@ along with GCC; see the file COPYING3. If not see > #undef CPP_SPEC > #define CPP_SPEC "%{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}" > > +#undef GNU_USER_TARGET_CC1_SPEC > +#define GNU_USER_TARGET_CC1_SPEC "%(cc1_cpu) %{profile:-p}" Here and in other instances below you use "GNU_USER_TARGET_" prefix. I would prefer using a shorter "GNU_USER_" instead unless there is a good reason to add "TARGET" too. > + > #undef CC1_SPEC > -#define CC1_SPEC "%(cc1_cpu) %{profile:-p}" > +#define CC1_SPEC GNU_USER_TARGET_CC1_SPEC > > /* Provide a LINK_SPEC appropriate for GNU userspace. Here we provide support > for the special GCC options -static and -shared, which allow us to > @@ -97,22 +100,28 @@ along with GCC; see the file COPYING3. If not see > { "link_emulation", GNU_USER_LINK_EMULATION },\ > { "dynamic_linker", GNU_USER_DYNAMIC_LINKER } > > -#undef LINK_SPEC > -#define LINK_SPEC "-m %(link_emulation) %{shared:-shared} \ > +#define GNU_USER_TARGET_LINK_SPEC \ > + "-m %(link_emulation) %{shared:-shared} \ > %{!shared: \ > %{!static: \ > %{rdynamic:-export-dynamic} \ > -dynamic-linker %(dynamic_linker)} \ > %{static:-static}}" > > +#undef LINK_SPEC > +#define LINK_SPEC GNU_USER_TARGET_LINK_SPEC > + > /* Similar to standard GNU userspace, but adding -ffast-math support. */ > -#undef ENDFILE_SPEC > -#define ENDFILE_SPEC \ > +#define GNU_USER_TARGET_MATHFILE_SPEC \ > "%{Ofast|ffast-math|funsafe-math-optimizations:crtfastmath.o%s} \ > %{mpc32:crtprec32.o%s} \ > %{mpc64:crtprec64.o%s} \ > - %{mpc80:crtprec80.o%s} \ > - %{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s" > + %{mpc80:crtprec80.o%s}" > + > +#undef ENDFILE_SPEC > +#define ENDFILE_SPEC \ > + GNU_USER_TARGET_MATHFILE_SPEC " " \ > + GNU_USER_TARGET_ENDFILE_SPEC Here you remove "%{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s". Presumably, you are moving that to GNU_USER[_TARGET]_ENDFILE_SPEC, but you never define it. > > /* A C statement (sans semicolon) to output to the stdio stream > FILE the assembler definition of uninitialized global DECL named > diff --git a/gcc/config/i386/linux.h b/gcc/config/i386/linux.h > index 73681fe..a832ddc 100644 > --- a/gcc/config/i386/linux.h > +++ b/gcc/config/i386/linux.h i386/linux.h is used only for simple x86 32-bit builds; i386/linux64.h is used for multilib-enabled x86 toolchains. Placing below definitions in i386/linux.h will not allow adding an Android as an additional multilib to -m32/-m64 x86 builds. I improve on this situation I suggest: - rename i386/linux.h to i386/linux32.h (with corresponding change to config.gcc), - put below definitions to new i386/linux.h (remember to add license notice header to the new file), - include i386/linux.h from both i386/linux32.h and i386/linux64.h. > @@ -22,3 +22,30 @@ along with GCC; see the file COPYING3. If not see > > #define GNU_USER_LINK_EMULATION "elf_i386" > #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2" > + > +#undef CC1_SPEC > +#define CC1_SPEC \ > + LINUX_OR_ANDROID_CC (GNU_USER_TARGET_CC1_SPEC, \ > + GNU_USER_TARGET_CC1_SPEC " " ANDROID_CC1_SPEC) > + > +#undef LINK_SPEC > +#define LINK_SPEC \ > + LINUX_OR_ANDROID_LD (GNU_USER_TARGET_LINK_SPEC, \ > + GNU_USER_TARGET_LINK_SPEC " " ANDROID_LINK_SPEC) > + > +#undef LIB_SPEC > +#define LIB_SPEC \ > + LINUX_OR_ANDROID_LD (GNU_USER_TARGET_LIB_SPEC, \ > + GNU_USER_TARGET_LIB_SPEC " " ANDROID_LIB_SPEC) > + > +#undef STARTFILE_SPEC > +#define STARTFILE_SPEC \ > + LINUX_OR_ANDROID_LD (GNU_USER_TARGET_STARTFILE_SPEC, \ > + ANDROID_STARTFILE_SPEC) > + > +#undef ENDFILE_SPEC > +#define ENDFILE_SPEC \ > + LINUX_OR_ANDROID_LD (GNU_USER_TARGET_MATHFILE_SPEC " " \ > + GNU_USER_TARGET_ENDFILE_SPEC, \ > + GNU_USER_TARGET_MATHFILE_SPEC " " \ > + ANDROID_ENDFILE_SPEC) -- Maxim Kuvyrkov CodeSourcery / Mentor Graphics