From patchwork Tue Apr 24 00:54:24 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: 154561 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 B847FB6EF3 for ; Tue, 24 Apr 2012 10:54:53 +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=1335833695; h=Comment: DomainKey-Signature:Received:Received:Received:Received:Received: From:To:CC:Subject:Date:Message-ID:References:In-Reply-To: Content-Type:Content-Transfer-Encoding:MIME-Version:Mailing-List: Precedence:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:Sender:Delivered-To; bh=2g+sDX2dBcGfuiYtxR6yCkfbqrI=; b=nq/whBtSHdopkyAXywRt8hm/StNAIsDWpcCLadpPhtMY70y5CcLd1KNIU+s9tj 6Mc5/J7OhSpywXjO1ZRGqKq4TQNW8oeqXVRoOqpd9Vu8k8btyD8pc13OMIPuMKUK irCdb8DvVVKZN3EhpmY0lufrnZcz8Kdj/k+NvXzlhwe8k= 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:References:In-Reply-To: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=wZGiWxLcjsMgIBU7z6mgZAOfbvlpew+3oBh+HSuUUZtRZb4Rq5CQqTavHLgx37 L3hbqfHFDAVMZNoohXoaNrT6DgrlDS+bi/lDPyvDCTdVYGmtcHEegVefdueBTrL4 kbjOIXRhpJacR2wbpaWeNKQFWX7V07vznKtpdY+wCrxvo=; Received: (qmail 18190 invoked by alias); 24 Apr 2012 00:54:49 -0000 Received: (qmail 18179 invoked by uid 22791); 24 Apr 2012 00:54:48 -0000 X-SWARE-Spam-Status: No, hits=-2.8 required=5.0 tests=AWL, BAYES_00, KHOP_THREADED, 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; Tue, 24 Apr 2012 00:54:34 +0000 Received: from exchdb01.mips.com (exchdb01.mips.com [192.168.36.67]) by dns0.mips.com (8.13.8/8.13.8) with ESMTP id q3O0sTiK003284; Mon, 23 Apr 2012 17:54:29 -0700 Received: from EXCHDB03.MIPS.com ([fe80::6df1:ae84:797e:9076]) by exchdb01.mips.com ([fe80::2897:a30d:a923:303%16]) with mapi id 14.01.0270.001; Mon, 23 Apr 2012 17:54:25 -0700 From: "Fu, Chao-Ying" To: Richard Sandiford , Maxim Kuvyrkov CC: gcc-patches Patches Subject: RE: MIPS Android patch Date: Tue, 24 Apr 2012 00:54:24 +0000 Message-ID: <7C6479EB2BF52547AC332FD6034646DA01448CE405@exchdb03.mips.com> References: <7C6479EB2BF52547AC332FD6034646DA01448CB550@exchdb03.mips.com> In-Reply-To: x-ems-proccessed: 6LP3oGfGVdcdb8o1aBnt6w== x-ems-stamp: /8+dg4QZ2XJa53KUKKPNIw== 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 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 * 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) @@ -46,7 +46,7 @@ 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}" +#define SUBTARGET_CC1_SPEC GNU_USER_TARGET_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 +54,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 +63,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 \ @@ -90,11 +92,7 @@ #undef ASM_OUTPUT_REG_POP #undef LIB_SPEC -#define LIB_SPEC "\ -%{pthread:-lpthread} \ -%{shared:-lc} \ -%{!shared: \ - %{profile:-lc_p} %{!profile:-lc}}" +#define LIB_SPEC GNU_USER_TARGET_LIB_SPEC #ifdef HAVE_AS_NO_SHARED /* Default to -mno-shared for non-PIC. */ @@ -133,7 +131,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: config/mips/gnu-user64.h =================================================================== --- config/mips/gnu-user64.h (revision 186728) +++ config/mips/gnu-user64.h (working copy) @@ -27,15 +27,8 @@ " %{!EB:%{!EL:%(endian_spec)}}" \ " %{!mabi=*: -" MULTILIB_ABI_DEFAULT "}" -#undef LIB_SPEC -#define LIB_SPEC "\ -%{pthread:-lpthread} \ -%{shared:-lc} \ -%{!shared: \ - %{profile:-lc_p} %{!profile:-lc}}" - -#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 +42,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: config/mips/linux-common.h =================================================================== --- config/mips/linux-common.h (revision 0) +++ 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_TARGET_CC1_SPEC, \ + GNU_USER_TARGET_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)