diff mbox

[i386,Android] -mandroid support for i386 target

Message ID CAMbmDYZV5krDj8riR9=c01jn8P5YDxWNuycHqbfR8iaN2z24gw@mail.gmail.com
State New
Headers show

Commit Message

Ilya Enkovich Feb. 24, 2012, 3:17 p.m. UTC
> On Wed, Feb 22, 2012 at 6:54 AM, Ilya Enkovich <enkovich.gnu@gmail.com> wrote:
>> Hello,
>>
>> This patch adds -mandroid support to i386 target. OK for trunk?
>>
>> Thanks,
>> Ilya
>> --
>>
>> 2012-02-22  Enkovich Ilya  <ilya.enkovich@intel.com>
>>
>>        * config/i386/gnu-user.h (LINUX_TARGET_CC1_SPEC): New.
>
> I don't think you should define LINUX_* in gnu-user.h.
>
>>        (CC1_SPEC): Use LINUX_OR_ANDROID_CC.
>>        (CC1PLUS_SPEC): Likewise.
>>        (LINUX_TARGET_LINK_SPEC): New.
>>        (LINK_SPEC): Support LINUX_OR_ANDROID_LD.
>>        (LIB_SPEC): New.
>>        (STARTFILE_SPEC): New.
>>        (LINUX_TARGET_ENDFILE_SPEC): New.
>>        (ENDFILE_SPEC): Support LINUX_OR_ANDROID_LD.
>
> There is a feedback at
>
> http://gcc.gnu.org/ml/gcc-patches/2011-12/msg01283.html
>
> to my earlier patch to define GNU_USER_TARGET_* in gnu-user.h
> and use them in linux.h.
>

Thanks for the link. I fixed patch according to this feedback.

>>        * config/linux-android.h (ANDROID_STARTFILE_SPEC): Use
>>        crtbegin_so%O%s for -shared.
>>        (ANDROID_ENDFILE_SPEC): Use crtend_so%O%s for -shared.
>>
>>
>
> I think you should separate this part similar to
>
> http://gcc.gnu.org/ml/gcc-patches/2011-12/msg01109.html

I removed this part from the patch.

>
>
> --
> H.J.

Here is a new patch version. Does it look better?

Thanks,
Ilya
--

2012-02-24  Enkovich Ilya  <ilya.enkovich@intel.com>

	* gcc/config/i386/gnu-user.h (CC1_SPEC): Rename to ...
	(GNU_USER_TARGET_CC1_SPEC): ... this.
	(LINK_SPEC): Rename to ...
	(GNU_USER_TARGET_LINK_SPEC): ... this.
	(ENDFILE_SPEC): Delete.
	(GNU_USER_TARGET_MATHFILE_SPEC): New.

	* gcc/config/i386/linux.h (CC1_SPEC): New.
	(LINK_SPEC): New.
	(LIB_SPEC): New.
	(STARTFILE_SPEC): New.
	(ENDFILE_SPEC): New.

Comments

H.J. Lu Feb. 24, 2012, 3:24 p.m. UTC | #1
On Fri, Feb 24, 2012 at 7:17 AM, Ilya Enkovich <enkovich.gnu@gmail.com> wrote:
>> On Wed, Feb 22, 2012 at 6:54 AM, Ilya Enkovich <enkovich.gnu@gmail.com> wrote:
>>> Hello,
>>>
>>> This patch adds -mandroid support to i386 target. OK for trunk?
>>>
>>> Thanks,
>>> Ilya
>>> --
>>>
>>> 2012-02-22  Enkovich Ilya  <ilya.enkovich@intel.com>
>>>
>>>        * config/i386/gnu-user.h (LINUX_TARGET_CC1_SPEC): New.
>>
>> I don't think you should define LINUX_* in gnu-user.h.
>>
>>>        (CC1_SPEC): Use LINUX_OR_ANDROID_CC.
>>>        (CC1PLUS_SPEC): Likewise.
>>>        (LINUX_TARGET_LINK_SPEC): New.
>>>        (LINK_SPEC): Support LINUX_OR_ANDROID_LD.
>>>        (LIB_SPEC): New.
>>>        (STARTFILE_SPEC): New.
>>>        (LINUX_TARGET_ENDFILE_SPEC): New.
>>>        (ENDFILE_SPEC): Support LINUX_OR_ANDROID_LD.
>>
>> There is a feedback at
>>
>> http://gcc.gnu.org/ml/gcc-patches/2011-12/msg01283.html
>>
>> to my earlier patch to define GNU_USER_TARGET_* in gnu-user.h
>> and use them in linux.h.
>>
>
> Thanks for the link. I fixed patch according to this feedback.
>
>>>        * config/linux-android.h (ANDROID_STARTFILE_SPEC): Use
>>>        crtbegin_so%O%s for -shared.
>>>        (ANDROID_ENDFILE_SPEC): Use crtend_so%O%s for -shared.
>>>
>>>
>>
>> I think you should separate this part similar to
>>
>> http://gcc.gnu.org/ml/gcc-patches/2011-12/msg01109.html
>
> I removed this part from the patch.
>
>>
>>
>> --
>> H.J.
>
> Here is a new patch version. Does it look better?
>
> Thanks,
> Ilya
> --
>
> 2012-02-24  Enkovich Ilya  <ilya.enkovich@intel.com>
>
>        * gcc/config/i386/gnu-user.h (CC1_SPEC): Rename to ...
>        (GNU_USER_TARGET_CC1_SPEC): ... this.
>        (LINK_SPEC): Rename to ...
>        (GNU_USER_TARGET_LINK_SPEC): ... this.
>        (ENDFILE_SPEC): Delete.
>        (GNU_USER_TARGET_MATHFILE_SPEC): New.
>

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.
diff mbox

Patch

diff --git a/gcc/config/i386/gnu-user.h b/gcc/config/i386/gnu-user.h
index 98d0a25..59d7062 100644
--- a/gcc/config/i386/gnu-user.h
+++ b/gcc/config/i386/gnu-user.h
@@ -77,8 +77,8 @@  along with GCC; see the file COPYING3.  If not see
 #undef CPP_SPEC
 #define CPP_SPEC "%{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}"

-#undef CC1_SPEC
-#define CC1_SPEC "%(cc1_cpu) %{profile:-p}"
+#undef GNU_USER_TARGET_CC1_SPEC
+#define GNU_USER_TARGET_CC1_SPEC "%(cc1_cpu) %{profile:-p}"

 /* 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,8 +97,8 @@  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} \
@@ -106,13 +106,11 @@  along with GCC; see the file COPYING3.  If not see
       %{static:-static}}"

 /* 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}"

 /* 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
@@ -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)