RE: PATCH: PR bootstrap/54209: [4.8 Regression] Failed to build gcc for Android/x86

2012-08-09 Thread Fu, Chao-Ying
 
 Where does mips link.h come from?  I didn't see it in AOSP 
 Bionic C library.
 
 -- 
 H.J.
 

 It's from development/ndk/platforms/android-9/arch-mips/include/link.h from 
AOSP checkout.

Regards,
Chao-ying


RE: MIPS Android patch

2012-04-23 Thread Fu, Chao-Ying
Richard Sandiford wrote:

  Index: gcc/config/mips/gnu-user.h
  ===
  --- gcc/config/mips/gnu-user.h  (revision 186580)
  +++ gcc/config/mips/gnu-user.h  (working copy)
  @@ -45,8 +45,10 @@
   /* A standard GNU/Linux mapping.  On most targets, it is 
 included in
  CC1_SPEC itself by config/linux.h, but mips.h overrides CC1_SPEC
  and provides this hook instead.  */
  +#undef GNU_USER_SUBTARGET_CC1_SPEC
  +#define GNU_USER_SUBTARGET_CC1_SPEC %{profile:-p}
 
 This is the default GNU_USER_TARGET_CC1_SPEC, so let's remove these
 two lines and use GNU_USER_TARGET_CC1_SPEC...
 
  -#define SUBTARGET_CC1_SPEC %{profile:-p}
  +#define SUBTARGET_CC1_SPEC GNU_USER_SUBTARGET_CC1_SPEC
 
 ...here.

  Yes.

 
  @@ -89,12 +93,14 @@
   #undef ASM_OUTPUT_REG_PUSH
   #undef ASM_OUTPUT_REG_POP
   
  -#undef LIB_SPEC
  -#define LIB_SPEC \
  +#undef GNU_USER_TARGET_LIB_SPEC
  +#define GNU_USER_TARGET_LIB_SPEC \
   %{pthread:-lpthread} \
   %{shared:-lc} \
   %{!shared: \
 %{profile:-lc_p} %{!profile:-lc}}
 
 This is the default GNU_USER_TARGET_LIB_SPEC, except that the default
 one has an -mieee-fp rule that would be unnecessary but 
 harmless on MIPS.
 Let's remove this definition entirely and just have:
 
  +#undef LIB_SPEC
  +#define LIB_SPEC GNU_USER_TARGET_LIB_SPEC
 
 ...this bit.

  Yes.

 
  @@ -133,7 +139,10 @@
 LINUX_DRIVER_SELF_SPECS
   
   /* Similar to standard Linux, but adding -ffast-math support.  */
  +#undef GNU_USER_TARGET_MATHFILE_SPEC
  +#define GNU_USER_TARGET_MATHFILE_SPEC \
  +  %{Ofast|ffast-math|funsafe-math-optimizations:crtfastmath.o%s}
   #undef  ENDFILE_SPEC
   #define ENDFILE_SPEC \
  -  %{Ofast|ffast-math|funsafe-math-optimizations:crtfastmath.o%s} \
  -   %{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s
  +  GNU_USER_TARGET_MATHFILE_SPEC   \
  +  GNU_USER_TARGET_ENDFILE_SPEC
 
 Nice reuse of GNU_USER_TARGET_ENDFILE_SPEC.  More cut--paste 
 gone. :-)
 
  Index: gcc/config/mips/gnu-user64.h
  ===
  --- gcc/config/mips/gnu-user64.h(revision 186580)
  +++ gcc/config/mips/gnu-user64.h(working copy)
  @@ -27,15 +27,17 @@
  %{!EB:%{!EL:%(endian_spec)}} \
  %{!mabi=*: - MULTILIB_ABI_DEFAULT }
   
  -#undef LIB_SPEC
  -#define LIB_SPEC \
  +#undef GNU_USER_TARGET_LIB_SPEC
  +#define GNU_USER_TARGET_LIB_SPEC \
   %{pthread:-lpthread} \
   %{shared:-lc} \
   %{!shared: \
 %{profile:-lc_p} %{!profile:-lc}}
 
 gnu-user64.h has to be included after gnu-user.h, so it looks like
 this code was already redundant before your patch.  Let's 
 just remove it.

  Yes.

 
 The config/mips parts are OK from my POV with those changes.  And with
 those changes this is a nice cleanup in its own right, thanks.
 

  Here is the revised patch without unwind-dw2-fde-dip.c.  I will check in this 
patch
and the 2nd patch for unwinding soon.  Thanks a lot!

Regards,
Chao-ying

gcc/ChangeLog
2012-04-23  Chao-ying Fu  f...@mips.com

* config.gcc (mips64*-*-linux*): Append mips/linux-common.h to tm_file.
(mips*-*-linux*): Append mips/linux-common.h to tm_file.
* config/mips/gnu-user.h
(SUBTARGET_CC1_SPEC): Use GNU_USER_TARGET_CC1_SPEC directly.
(GNU_USER_TARGET_LINK_SPEC): New define.
(LINK_SPEC): Use GNU_USER_TARGET_LINK_SPEC.
(LIB_SPEC): Use GNU_USER_TARGET_LIB_SPEC directly.
(GNU_USER_TARGET_MATHFILE_SPEC): New define.
(ENDFILE_SPEC): Use GNU_USER_TARGET_MATHFILE_SPEC and 
GNU_USER_TARGET_ENDFILE_SPEC.
* config/mips/gnu-user64.h (LIB_SPEC): Remove.
(LINK_SPEC): Use GNU_USER_TARGET_LINK_SPEC.
(GNU_USER_TARGET_LIB_SPEC): New define.
* config/mips/linux-common.h: New file.

Index: config.gcc
===
--- config.gcc  (revision 186728)
+++ config.gcc  (working copy)
@@ -1712,7 +1712,7 @@
extra_options=${extra_options} netbsd.opt netbsd-elf.opt
;;
 mips64*-*-linux* | mipsisa64*-*-linux*)
-   tm_file=dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h ${tm_file} 
mips/gnu-user.h mips/gnu-user64.h mips/linux64.h
+   tm_file=dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h ${tm_file} 
mips/gnu-user.h mips/gnu-user64.h mips/linux64.h mips/linux-common.h
tmake_file=${tmake_file} mips/t-linux64
tm_defines=${tm_defines} MIPS_ABI_DEFAULT=ABI_N32
case ${target} in
@@ -1738,6 +1738,7 @@
tm_file=${tm_file} mips/gnu-user64.h mips/linux64.h
tmake_file=${tmake_file} mips/t-linux64
fi
+   tm_file=${tm_file} mips/linux-common.h
case ${target} in
 mipsisa32r2*)
tm_defines=${tm_defines} MIPS_ISA_DEFAULT=33
Index: config/mips/gnu-user.h
===
--- config/mips/gnu-user.h  (revision 186728)
+++ config/mips/gnu-user.h  (working copy)

MIPS Android patch

2012-04-19 Thread Fu, Chao-Ying
Hi Maxim, Richard,

  I built cross-toolchains for 3 different targets as follows.
1. mips-linux-gnu
2. mips-linux-gnu --enable-targets=all
3. mips64-linux-gnu

  These targets are affected by this MIPS Android patch.

  Then, I checked the output from gcc -dumpspecs before and after applying 
the patch.
The specs have 6 places of differences for Android due to new defines in 
linux-common.h.
I am also building GCC natively, and will test GCC natively later.
Any feedback?  Thanks!

Regards,
Chao-ying

libgcc/ChangeLog
2012-04-19  Chao-ying Fu  f...@mips.com

* unwind-dw2-fde-dip.c: Define USE_PT_GNU_EH_FRAME for BIONIC.

gcc/ChangeLog
2012-04-19  Chao-ying Fu  f...@mips.com

* config.gcc (mips64*-*-linux*): Append mips/linux-common.h to tm_file.
(mips*-*-linux*): Append mips/linux-common.h to tm_file.
* config/mips/gnu-user.h (GNU_USER_SUBTARGET_CC1_SPEC): New define.
(SUBTARGET_CC1_SPEC): Use GNU_USER_SUBTARGET_CC1_SPEC.
(GNU_USER_TARGET_LINK_SPEC): New define.
(LINK_SPEC): Use GNU_USER_TARGET_LINK_SPEC.
(GNU_USER_TARGET_LIB_SPEC): New define.
(LIB_SPEC): Use GNU_USER_TARGET_LIB_SPEC.
(GNU_USER_TARGET_MATHFILE_SPEC): New define.
(ENDFILE_SPEC): Use GNU_USER_TARGET_MATHFILE_SPEC and 
GNU_USER_TARGET_ENDFILE_SPEC.
* config/mips/gnu-user64.h (GNU_USER_TARGET_LIB_SPEC): New define.
(LIB_SPEC): Use GNU_USER_TARGET_LIB_SPEC.
(LINK_SPEC): Use GNU_USER_TARGET_LINK_SPEC.
(GNU_USER_TARGET_LIB_SPEC): New define.
* config/mips/linux-common.h: New file.

Index: libgcc/unwind-dw2-fde-dip.c
===
--- libgcc/unwind-dw2-fde-dip.c (revision 186580)
+++ libgcc/unwind-dw2-fde-dip.c (working copy)
@@ -54,6 +54,11 @@
 #endif
 
 #if !defined(inhibit_libc)  defined(HAVE_LD_EH_FRAME_HDR) \
+ defined(__BIONIC__)
+# define USE_PT_GNU_EH_FRAME
+#endif
+
+#if !defined(inhibit_libc)  defined(HAVE_LD_EH_FRAME_HDR) \
  defined(__FreeBSD__)  __FreeBSD__ = 7
 # define ElfW __ElfN
 # define USE_PT_GNU_EH_FRAME
Index: gcc/config.gcc
===
--- gcc/config.gcc  (revision 186580)
+++ gcc/config.gcc  (working copy)
@@ -1712,7 +1712,7 @@
extra_options=${extra_options} netbsd.opt netbsd-elf.opt
;;
 mips64*-*-linux* | mipsisa64*-*-linux*)
-   tm_file=dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h ${tm_file} 
mips/gnu-user.h mips/gnu-user64.h mips/linux64.h
+   tm_file=dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h ${tm_file} 
mips/gnu-user.h mips/gnu-user64.h mips/linux64.h mips/linux-common.h
tmake_file=${tmake_file} mips/t-linux64
tm_defines=${tm_defines} MIPS_ABI_DEFAULT=ABI_N32
case ${target} in
@@ -1738,6 +1738,7 @@
tm_file=${tm_file} mips/gnu-user64.h mips/linux64.h
tmake_file=${tmake_file} mips/t-linux64
fi
+   tm_file=${tm_file} mips/linux-common.h
case ${target} in
 mipsisa32r2*)
tm_defines=${tm_defines} MIPS_ISA_DEFAULT=33
Index: gcc/config/mips/gnu-user.h
===
--- gcc/config/mips/gnu-user.h  (revision 186580)
+++ gcc/config/mips/gnu-user.h  (working copy)
@@ -45,8 +45,10 @@
 /* A standard GNU/Linux mapping.  On most targets, it is included in
CC1_SPEC itself by config/linux.h, but mips.h overrides CC1_SPEC
and provides this hook instead.  */
+#undef GNU_USER_SUBTARGET_CC1_SPEC
+#define GNU_USER_SUBTARGET_CC1_SPEC %{profile:-p}
 #undef SUBTARGET_CC1_SPEC
-#define SUBTARGET_CC1_SPEC %{profile:-p}
+#define SUBTARGET_CC1_SPEC GNU_USER_SUBTARGET_CC1_SPEC
 
 /* -G is incompatible with -KPIC which is the default, so only allow objects
in the small data section if the user explicitly asks for it.  */
@@ -54,8 +56,8 @@
 #define MIPS_DEFAULT_GVALUE 0
 
 /* Borrowed from sparc/linux.h */
-#undef LINK_SPEC
-#define LINK_SPEC \
+#undef GNU_USER_TARGET_LINK_SPEC
+#define GNU_USER_TARGET_LINK_SPEC \
  %(endian_spec) \
   %{shared:-shared} \
   %{!shared: \
@@ -63,6 +65,8 @@
   %{rdynamic:-export-dynamic} \
   -dynamic-linker  GNU_USER_DYNAMIC_LINKER } \
   %{static:-static}}
+#undef LINK_SPEC
+#define LINK_SPEC GNU_USER_TARGET_LINK_SPEC
 
 #undef SUBTARGET_ASM_SPEC
 #define SUBTARGET_ASM_SPEC \
@@ -89,12 +93,14 @@
 #undef ASM_OUTPUT_REG_PUSH
 #undef ASM_OUTPUT_REG_POP
 
-#undef LIB_SPEC
-#define LIB_SPEC \
+#undef GNU_USER_TARGET_LIB_SPEC
+#define GNU_USER_TARGET_LIB_SPEC \
 %{pthread:-lpthread} \
 %{shared:-lc} \
 %{!shared: \
   %{profile:-lc_p} %{!profile:-lc}}
+#undef LIB_SPEC
+#define LIB_SPEC GNU_USER_TARGET_LIB_SPEC
 
 #ifdef HAVE_AS_NO_SHARED
 /* Default to -mno-shared for non-PIC.  */
@@ -133,7 +139,10 @@
   LINUX_DRIVER_SELF_SPECS
 
 /* Similar to standard Linux, but adding -ffast-math support.  */
+#undef GNU_USER_TARGET_MATHFILE_SPEC
+#define 

RE: [PATCH, Android] MIPS support

2012-04-17 Thread Fu, Chao-Ying
Maxim Kuvyrkov wrote:

  
  For now, two MIPS changes in gnu-user.h and 
 unwind-dw2-fde-dip.c can be posted for comment.
  (I didn't tested this patch, though.)
 
 You need to test your patches before posting them for review. 
  Below are a couple of comments on your current version.

  I can test if this patch doesn't break existing MIPS Linux GCC build.

 
  After starting to build toolchains for Android with 
 Bionic, we may find new files to
  patch.  Ex: Comment out getpagesize() for bionic.
  
  Any comment?  Thanks a lot!
  
  Regards,
  Chao-ying
  
  Index: gcc/gcc/config/mips/gnu-user.h
  ===
  --- gcc.orig/gcc/config/mips/gnu-user.h2012-04-03 
 17:39:50.0 -0700
  +++ gcc/gcc/config/mips/gnu-user.h 2012-04-04 
 14:31:50.804236000 -0700
  @@ -45,8 +45,8 @@ along with GCC; see the file COPYING3.  
  /* A standard GNU/Linux mapping.  On most targets, it is 
 included in
CC1_SPEC itself by config/linux.h, but mips.h overrides CC1_SPEC
and provides this hook instead.  */
  -#undef SUBTARGET_CC1_SPEC
  -#define SUBTARGET_CC1_SPEC %{profile:-p}
  +#undef GNU_USER_SUBTARGET_CC1_SPEC
  +#define GNU_USER_SUBTARGET_CC1_SPEC %{profile:-p}
  
  /* -G is incompatible with -KPIC which is the default, so 
 only allow objects
in the small data section if the user explicitly asks for it.  */
  @@ -54,8 +54,8 @@ along with GCC; see the file COPYING3.  
  #define MIPS_DEFAULT_GVALUE 0
  
  /* Borrowed from sparc/linux.h */
  -#undef LINK_SPEC
  -#define LINK_SPEC \
  +#undef GNU_USER_TARGET_LINK_SPEC
  +#define GNU_USER_TARGET_LINK_SPEC \
  %(endian_spec) \
   %{shared:-shared} \
   %{!shared: \
  @@ -89,8 +89,8 @@ along with GCC; see the file COPYING3.  
  #undef ASM_OUTPUT_REG_PUSH
  #undef ASM_OUTPUT_REG_POP
  
  -#undef LIB_SPEC
  -#define LIB_SPEC \
  +#undef GNU_USER_TARGET_LIB_SPEC
  +#define GNU_USER_TARGET_LIB_SPEC \
  %{pthread:-lpthread} \
  %{shared:-lc} \
  %{!shared: \
  @@ -133,7 +133,34 @@ extern const char *host_detect_local_cpu
   LINUX_DRIVER_SELF_SPECS
  
  /* Similar to standard Linux, but adding -ffast-math support.  */
  -#undef  ENDFILE_SPEC
  -#define ENDFILE_SPEC \
  +#undef  GNU_USER_TARGET_ENDFILE_SPEC
  +#define GNN_USER_TARGET_ENDFILE_SPEC \
   %{Ofast|ffast-math|funsafe-math-optimizations:crtfastmath.o%s} \
%{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s
 
 Above definitions are OK.

  Thanks!

 
  +
  +#undef  LINK_SPEC
  +#define LINK_SPEC 
   \
  +  LINUX_OR_ANDROID_LD (GNU_USER_TARGET_LINK_SPEC, 
   \
  + GNU_USER_TARGET_LINK_SPEC   ANDROID_LINK_SPEC)
  +
  +#undef  SUBTARGET_CC1_SPEC
  +#define SUBTARGET_CC1_SPEC
   \
  +  LINUX_OR_ANDROID_CC (GNU_USER_SUBTARGET_CC1_SPEC,   
   \
  + GNU_USER_SUBTARGET_CC1_SPEC   ANDROID_CC1_SPEC)
  +
  +#undef  CC1PLUS_SPEC
  +#define CC1PLUS_SPEC  
   \
  +  LINUX_OR_ANDROID_CC (, ANDROID_CC1PLUS_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_ENDFILE_SPEC, 
 ANDROID_ENDFILE_SPEC)
 
 The LINUX_OR_ANDROID_* definitions should be moved out of 
 gnu-user.h, as this header is used for systems besides Linux, 
 e.g., kFreeBSD and Hurd.  Please move these definitions to 
 mips/linux-common.h, which will be a new file, similarly as 
 i386 did in http://gcc.gnu.org/ml/gcc-patches/2012-04/msg00944.html .

  I will check this message.

 
  Index: gcc/libgcc/unwind-dw2-fde-dip.c
  ===
  --- gcc.orig/libgcc/unwind-dw2-fde-dip.c   2012-04-03 
 17:07:28.0 -0700
  +++ gcc/libgcc/unwind-dw2-fde-dip.c2012-04-04 
 14:51:01.338074000 -0700
  @@ -48,8 +48,9 @@
  #include gthr.h
  
  #if !defined(inhibit_libc)  defined(HAVE_LD_EH_FRAME_HDR) \
  - (__GLIBC__  2 || (__GLIBC__ == 2  __GLIBC_MINOR__  2) \
  -  || (__GLIBC__ == 2  __GLIBC_MINOR__ == 2  
 defined(DT_CONFIG)))
  + ((defined(__BIONIC__)  (defined(mips) || 
 defined(__mips__))) \
  +|| (__GLIBC__  2 || (__GLIBC__ == 2  
 __GLIBC_MINOR__  2) \
  +  || (__GLIBC__ == 2  __GLIBC_MINOR__ == 2  
 defined(DT_CONFIG
  # define USE_PT_GNU_EH_FRAME
  #endif
 
 What is this change for?

  For stack unwinding, MIPS needs supporting functions in libgcc to 
work with eh_frame for Android.
(Note that ARM has its own 

RE: [PATCH] [MIPS] fix mips_prepend insn.

2012-02-03 Thread Fu, Chao-Ying
Liu [pro...@gmail.com] wrote:

 OK, I get.
 But, sorry, my mips64dspr2 patch has be done...
 Should I summit it?

  I just wonder what version of the MIPS64 DSP/DSPr2 spec that you implemented. 
 Do you have a target CPU that has these MIPS64 DSP/DSPr2 instructions?  My 
concern is that the latest spec removed a lot of new instructions.  Thanks!

Regards,
Chao-ying


RE: [PATCH] [MIPS] fix mips_prepend insn.

2012-02-02 Thread Fu, Chao-Ying
Richard Sandiford [rdsandif...@googlemail.com] wrote:

 This pattern maps directly to __builtin_mips_prepend, which is defined
 to take and return an SI type, so :SI is the correct choice here.

 I agree it might be nice to have a function that operates on 64-bit
 values for 64-bit targets though.  For compatibility reasons,
 we'd probably have to define both a new function and a new pattern
 (or at least an iterator version of the current pattern).
 There's currently no way of generating PREPENDD or PREPENDW either.

 I consider this API to be owned by MTI, so we'd need to coordinate
 with them.  Chao-Ying, what do you think?  Do you already have
 something like this internally?

  As there is no MIPS64 core with dsp/dspr2 in the market, we haven't 
tested/ported these built-in functions to MIPS64.

  I think it's better to keep the current prototype of __builtin_mips_prepend 
to return an SI type.
We may need to add new built-in functions for instructions involving 
accumulators and for new MIPS64 dsp/dspr2 instructions to MIPS64.
For existing built-in functions involving only integer registers/immediates, we 
may not change them.
For Liu, is this solution suitable for you?   Thanks!

Regards,
Chao-ying