From patchwork Fri Apr 20 01:34:37 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Fu, Chao-Ying" X-Patchwork-Id: 153902 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) by ozlabs.org (Postfix) with SMTP id C876BB7014 for ; Fri, 20 Apr 2012 11:35:13 +1000 (EST) Comment: DKIM? See http://www.dkim.org DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=gcc.gnu.org; s=default; x=1335490515; h=Comment: DomainKey-Signature:Received:Received:Received:Received:Received: From:To:CC:Subject:Date:Message-ID:Content-Type: Content-Transfer-Encoding:MIME-Version:Mailing-List:Precedence: List-Id:List-Unsubscribe:List-Archive:List-Post:List-Help:Sender: Delivered-To; bh=aqdrjlaczoew7/2M1CAfGPKfPbA=; b=KdjiCXcXhgxW4/v cXtQAa7JlpXL+TX+DUvovnlir4ya8UNY4ySY+eap5qmn4pP2pHa6jF1dPIVhCmv6 d//j8rPQBN2nhlJdev1C6c78d3VZ3qOombCgmWHLZLIPal6wX3c1GjOSfxNRIz8x lalH+CRtqHyyTS3gmi8RiF2sKwgc= Comment: DomainKeys? See http://antispam.yahoo.com/domainkeys DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=default; d=gcc.gnu.org; h=Received:Received:X-SWARE-Spam-Status:X-Spam-Check-By:Received:Received:Received:From:To:CC:Subject:Date:Message-ID:x-ems-proccessed:x-ems-stamp:Content-Type:Content-Transfer-Encoding:MIME-Version:X-IsSubscribed:Mailing-List:Precedence:List-Id:List-Unsubscribe:List-Archive:List-Post:List-Help:Sender:Delivered-To; b=uwbUhfDAvhq0YcQRG6u1bet8kkywCInK/TcnizvfmfpP8EE9KVY7NpvPoQBbkp vLRhbjSf9EXN74+ufWPvl/3M33UiTJthgpHPq2BUSgGn3VMK/+7aRKAFf5IW2OjR /BTMJ0yR5ixf2mvDhPcd7caGBjwFKTnPGF989FuDFE3Do=; Received: (qmail 3687 invoked by alias); 20 Apr 2012 01:35:05 -0000 Received: (qmail 3480 invoked by uid 22791); 20 Apr 2012 01:35:02 -0000 X-SWARE-Spam-Status: No, hits=-2.0 required=5.0 tests=AWL, BAYES_00, T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from dns0.mips.com (HELO dns0.mips.com) (12.201.5.70) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 20 Apr 2012 01:34:45 +0000 Received: from exchdb01.mips.com (exchhub01.mips.com [192.168.36.84]) by dns0.mips.com (8.13.8/8.13.8) with ESMTP id q3K1YeHp006629; Thu, 19 Apr 2012 18:34:40 -0700 Received: from EXCHDB03.MIPS.com ([fe80::6df1:ae84:797e:9076]) by exchhub01.mips.com ([::1]) with mapi id 14.01.0270.001; Thu, 19 Apr 2012 18:34:38 -0700 From: "Fu, Chao-Ying" To: Maxim Kuvyrkov , Richard Sandiford CC: gcc-patches Patches Subject: MIPS Android patch Date: Fri, 20 Apr 2012 01:34:37 +0000 Message-ID: <7C6479EB2BF52547AC332FD6034646DA01448CB550@exchdb03.mips.com> x-ems-proccessed: 6LP3oGfGVdcdb8o1aBnt6w== x-ems-stamp: uOItohS0fadcg28y5u7PLw== MIME-Version: 1.0 X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org 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 * unwind-dw2-fde-dip.c: Define USE_PT_GNU_EH_FRAME for BIONIC. gcc/ChangeLog 2012-04-19 Chao-ying Fu * 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 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 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}}" +#undef LIB_SPEC +#define LIB_SPEC GNU_USER_TARGET_LIB_SPEC -#undef LINK_SPEC -#define LINK_SPEC "\ +#undef GNU_USER_TARGET_LINK_SPEC +#define GNU_USER_TARGET_LINK_SPEC "\ %{G*} %{EB} %{EL} %{mips1} %{mips2} %{mips3} %{mips4} \ %{shared} \ %(endian_spec) \ @@ -49,6 +51,8 @@ %{mabi=n32:-m" GNU_USER_LINK_EMULATIONN32 "} \ %{mabi=64:-m" GNU_USER_LINK_EMULATION64 "} \ %{mabi=32:-m" GNU_USER_LINK_EMULATION32 "}" +#undef LINK_SPEC +#define LINK_SPEC GNU_USER_TARGET_LINK_SPEC #undef LOCAL_LABEL_PREFIX #define LOCAL_LABEL_PREFIX (TARGET_OLDABI ? "$" : ".") Index: gcc/config/mips/linux-common.h =================================================================== --- gcc/config/mips/linux-common.h (revision 0) +++ gcc/config/mips/linux-common.h (revision 0) @@ -0,0 +1,58 @@ +/* Definitions for MIPS running Linux-based GNU systems with ELF format. + Copyright (C) 2012 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3, or (at your option) +any later version. + +GCC is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING3. If not see +. */ + +#undef TARGET_OS_CPP_BUILTINS +#define TARGET_OS_CPP_BUILTINS() \ + do { \ + GNU_USER_TARGET_OS_CPP_BUILTINS(); \ + /* The GNU C++ standard library requires this. */ \ + if (c_dialect_cxx ()) \ + builtin_define ("_GNU_SOURCE"); \ + ANDROID_TARGET_OS_CPP_BUILTINS(); \ + } while (0) + +#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_MATHFILE_SPEC " " \ + GNU_USER_TARGET_ENDFILE_SPEC, \ + GNU_USER_TARGET_MATHFILE_SPEC " " \ + ANDROID_ENDFILE_SPEC)