diff mbox

[google/integration] Add support for powerpc64-grtev2-linux-gnu (issue5659050)

Message ID 20120214024133.B436520C00@atree.mtv.corp.google.com
State New
Headers show

Commit Message

Doug Kwan (關振德) Feb. 14, 2012, 2:41 a.m. UTC
Hi,

This patch adds support for powerpc*-grtev2-linux-gnu.  The changes
include:

1. Relocating the dynamic linker using a run-time root prefix.
2. Using different library setting in static linking.

This is tested by building PowerPC64 and PowerPC toolchains and ran
some tests with the resulting toolchain.

This is used by Google and is not meant to be sent to trunk.

-Doug

2012-02-13   Doug Kwan  <dougkwan@google.com>

	* gcc/config.gcc (powerpc*-*-linux): Pull in GRTEv2 spec changes if
	target matches *-grtev2-*.
	* gcc/config/rs6000/linux64.h (GLIB_DYNAMIC_LINKER{32,64}): Add
	runtime root prefix to glibc's dynamic linker.
	* gcc/config/rs6000/linux-grtev2.h: New file.
	* gcc/config/rs6000/sysv4.h (GLIB_DYNAMIC_LINKER): Add
	runtime root prefix to glibc's dynamic linker.
	(LINUX_GRTE_EXTRA_SPECS): Define to be empty if no definition found.
	(SUBTARGET_EXTRA_SPECS): Include LINUX_GRTE_EXTRA_SPECS.


--
This patch is available for review at http://codereview.appspot.com/5659050

Comments

Andrew Pinski Feb. 14, 2012, 2:45 a.m. UTC | #1
On Mon, Feb 13, 2012 at 6:41 PM, Doug Kwan <dougkwan@google.com> wrote:
> Hi,
>
> This patch adds support for powerpc*-grtev2-linux-gnu.  The changes
> include:
>
> 1. Relocating the dynamic linker using a run-time root prefix.
> 2. Using different library setting in static linking.
>
> This is tested by building PowerPC64 and PowerPC toolchains and ran
> some tests with the resulting toolchain.
>
> This is used by Google and is not meant to be sent to trunk.
>
> -Doug
>
> 2012-02-13   Doug Kwan  <dougkwan@google.com>
>
>        * gcc/config.gcc (powerpc*-*-linux): Pull in GRTEv2 spec changes if
>        target matches *-grtev2-*.
>        * gcc/config/rs6000/linux64.h (GLIB_DYNAMIC_LINKER{32,64}): Add
>        runtime root prefix to glibc's dynamic linker.
>        * gcc/config/rs6000/linux-grtev2.h: New file.
>        * gcc/config/rs6000/sysv4.h (GLIB_DYNAMIC_LINKER): Add
>        runtime root prefix to glibc's dynamic linker.
>        (LINUX_GRTE_EXTRA_SPECS): Define to be empty if no definition found.
>        (SUBTARGET_EXTRA_SPECS): Include LINUX_GRTE_EXTRA_SPECS.
>
> Index: gcc/config.gcc
> ===================================================================
> --- gcc/config.gcc      (revision 184150)
> +++ gcc/config.gcc      (working copy)
> @@ -2040,6 +2040,12 @@ powerpc-*-linux* | powerpc64-*-linux*)
>        if test x${enable_secureplt} = xyes; then
>                tm_file="rs6000/secureplt.h ${tm_file}"
>        fi
> +       # Pull in spec changes for GRTEv2 configurations.
> +       case ${target} in
> +       *-grtev2-*)
> +           tm_file="${tm_file} rs6000/linux-grtev2.h"
> +           ;;
> +       esac
>        ;;
>  powerpc-wrs-vxworks|powerpc-wrs-vxworksae)
>        tm_file="${tm_file} elfos.h freebsd-spec.h rs6000/sysv4.h"
> Index: gcc/config/rs6000/linux64.h
> ===================================================================
> --- gcc/config/rs6000/linux64.h (revision 184150)
> +++ gcc/config/rs6000/linux64.h (working copy)
> @@ -367,8 +367,8 @@ extern int dot_symbols;
>  #undef LINK_OS_DEFAULT_SPEC
>  #define LINK_OS_DEFAULT_SPEC "%(link_os_linux)"
>
> -#define GLIBC_DYNAMIC_LINKER32 "/lib/ld.so.1"
> -#define GLIBC_DYNAMIC_LINKER64 "/lib64/ld64.so.1"
> +#define GLIBC_DYNAMIC_LINKER32 RUNTIME_ROOT_PREFIX "/lib/ld.so.1"
> +#define GLIBC_DYNAMIC_LINKER64 RUNTIME_ROOT_PREFIX "/lib64/ld64.so.1"
>  #define UCLIBC_DYNAMIC_LINKER32 "/lib/ld-uClibc.so.0"
>  #define UCLIBC_DYNAMIC_LINKER64 "/lib/ld64-uClibc.so.0"
>  #if DEFAULT_LIBC == LIBC_UCLIBC
> Index: gcc/config/rs6000/linux-grtev2.h
> ===================================================================
> --- gcc/config/rs6000/linux-grtev2.h    (revision 0)
> +++ gcc/config/rs6000/linux-grtev2.h    (revision 0)
> @@ -0,0 +1,43 @@
> +/* Definitions for Linux-based GRTE (Google RunTime Environment) version 2.
> +   Copyright (C) 2009,2010,2011,2012 Free Software Foundation, Inc.
> +   Contributed by Chris Demetriou and Ollie Wild.
> +
> +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.
> +
> +Under Section 7 of GPL version 3, you are granted additional
> +permissions described in the GCC Runtime Library Exception, version
> +3.1, as published by the Free Software Foundation.
> +
> +You should have received a copy of the GNU General Public License and
> +a copy of the GCC Runtime Library Exception along with this program;
> +see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
> +<http://www.gnu.org/licenses/>.  */
> +
> +/* Overrides LIB_LINUX_SPEC from sysv4.h.  */
> +#undef LIB_LINUX_SPEC
> +#define LIB_LINUX_SPEC \
> +  "%{pthread:-lpthread} \
> +   %{shared:-lc} \
> +   %{!shared:%{mieee-fp:-lieee} %{profile:%(libc_p)}%{!profile:%(libc)}}"
> +
> +/* When GRTE links statically, it needs its NSS and resolver libraries
> +   linked in as well.  Note that when linking statically, these are
> +   enclosed in a group by LINK_GCC_C_SEQUENCE_SPEC.  */
> +#undef LINUX_GRTE_EXTRA_SPECS
> +#define LINUX_GRTE_EXTRA_SPECS \
> +  { "libc", "%{static:%(libc_static);:-lc}" }, \
> +  { "libc_p", "%{static:%(libc_p_static);:-lc_p}" }, \
> +  { "libc_static", \
> +    "-lc -lnss_borg -lnss_cache -lnss_dns -lnss_files -lresolv" }, \
> +  { "libc_p_static", \
> +    "-lc_p -lnss_borg_p -lnss_cache_p -lnss_dns_p -lnss_files_p -lresolv_p" },

Really can't you fix glibc so that libnss.a is not needed.
See http://sourceware.org/bugzilla/show_bug.cgi?id=6528 for those fixes.

Thanks,
Andrew Pinski


> Index: gcc/config/rs6000/sysv4.h
> ===================================================================
> --- gcc/config/rs6000/sysv4.h   (revision 184150)
> +++ gcc/config/rs6000/sysv4.h   (working copy)
> @@ -803,7 +803,10 @@ extern int fixuplabelno;
>
>  #define LINK_START_LINUX_SPEC ""
>
> -#define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1"
> +#ifndef RUNTIME_ROOT_PREFIX
> +#define RUNTIME_ROOT_PREFIX ""
> +#endif
> +#define GLIBC_DYNAMIC_LINKER RUNTIME_ROOT_PREFIX "/lib/ld.so.1"
>  #define UCLIBC_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
>  #if DEFAULT_LIBC == LIBC_UCLIBC
>  #define CHOOSE_DYNAMIC_LINKER(G, U) "%{mglibc:" G ";:" U "}"
> @@ -881,6 +884,11 @@ ncrtn.o%s"
>  #define CPP_OS_OPENBSD_SPEC "%{posix:-D_POSIX_SOURCE} %{pthread:-D_POSIX_THREADS}"
>  #endif
>
> +/* These may be provided by rs6000/linux-grtev2.h.  */
> +#ifndef LINUX_GRTE_EXTRA_SPECS
> +#define LINUX_GRTE_EXTRA_SPECS
> +#endif
> +
>  /* Define any extra SPECS that the compiler needs to generate.  */
>  /* Override rs6000.h definition.  */
>  #undef SUBTARGET_EXTRA_SPECS
> @@ -949,6 +957,7 @@ ncrtn.o%s"
>   { "cpp_os_openbsd",          CPP_OS_OPENBSD_SPEC },                  \
>   { "cpp_os_default",          CPP_OS_DEFAULT_SPEC },                  \
>   { "fbsd_dynamic_linker",     FBSD_DYNAMIC_LINKER },                  \
> +  LINUX_GRTE_EXTRA_SPECS                                               \
>   SUBSUBTARGET_EXTRA_SPECS
>
>  #define        SUBSUBTARGET_EXTRA_SPECS
>
> --
> This patch is available for review at http://codereview.appspot.com/5659050
Doug Kwan (關振德) Feb. 14, 2012, 2:57 a.m. UTC | #2
Thanks Andrew.  I will take a look at that.

-Doug

On Mon, Feb 13, 2012 at 6:45 PM, Andrew Pinski <pinskia@gmail.com> wrote:
> On Mon, Feb 13, 2012 at 6:41 PM, Doug Kwan <dougkwan@google.com> wrote:
>> Hi,
>>
>> This patch adds support for powerpc*-grtev2-linux-gnu.  The changes
>> include:
>>
>> 1. Relocating the dynamic linker using a run-time root prefix.
>> 2. Using different library setting in static linking.
>>
>> This is tested by building PowerPC64 and PowerPC toolchains and ran
>> some tests with the resulting toolchain.
>>
>> This is used by Google and is not meant to be sent to trunk.
>>
>> -Doug
>>
>> 2012-02-13   Doug Kwan  <dougkwan@google.com>
>>
>>        * gcc/config.gcc (powerpc*-*-linux): Pull in GRTEv2 spec changes if
>>        target matches *-grtev2-*.
>>        * gcc/config/rs6000/linux64.h (GLIB_DYNAMIC_LINKER{32,64}): Add
>>        runtime root prefix to glibc's dynamic linker.
>>        * gcc/config/rs6000/linux-grtev2.h: New file.
>>        * gcc/config/rs6000/sysv4.h (GLIB_DYNAMIC_LINKER): Add
>>        runtime root prefix to glibc's dynamic linker.
>>        (LINUX_GRTE_EXTRA_SPECS): Define to be empty if no definition found.
>>        (SUBTARGET_EXTRA_SPECS): Include LINUX_GRTE_EXTRA_SPECS.
>>
>> Index: gcc/config.gcc
>> ===================================================================
>> --- gcc/config.gcc      (revision 184150)
>> +++ gcc/config.gcc      (working copy)
>> @@ -2040,6 +2040,12 @@ powerpc-*-linux* | powerpc64-*-linux*)
>>        if test x${enable_secureplt} = xyes; then
>>                tm_file="rs6000/secureplt.h ${tm_file}"
>>        fi
>> +       # Pull in spec changes for GRTEv2 configurations.
>> +       case ${target} in
>> +       *-grtev2-*)
>> +           tm_file="${tm_file} rs6000/linux-grtev2.h"
>> +           ;;
>> +       esac
>>        ;;
>>  powerpc-wrs-vxworks|powerpc-wrs-vxworksae)
>>        tm_file="${tm_file} elfos.h freebsd-spec.h rs6000/sysv4.h"
>> Index: gcc/config/rs6000/linux64.h
>> ===================================================================
>> --- gcc/config/rs6000/linux64.h (revision 184150)
>> +++ gcc/config/rs6000/linux64.h (working copy)
>> @@ -367,8 +367,8 @@ extern int dot_symbols;
>>  #undef LINK_OS_DEFAULT_SPEC
>>  #define LINK_OS_DEFAULT_SPEC "%(link_os_linux)"
>>
>> -#define GLIBC_DYNAMIC_LINKER32 "/lib/ld.so.1"
>> -#define GLIBC_DYNAMIC_LINKER64 "/lib64/ld64.so.1"
>> +#define GLIBC_DYNAMIC_LINKER32 RUNTIME_ROOT_PREFIX "/lib/ld.so.1"
>> +#define GLIBC_DYNAMIC_LINKER64 RUNTIME_ROOT_PREFIX "/lib64/ld64.so.1"
>>  #define UCLIBC_DYNAMIC_LINKER32 "/lib/ld-uClibc.so.0"
>>  #define UCLIBC_DYNAMIC_LINKER64 "/lib/ld64-uClibc.so.0"
>>  #if DEFAULT_LIBC == LIBC_UCLIBC
>> Index: gcc/config/rs6000/linux-grtev2.h
>> ===================================================================
>> --- gcc/config/rs6000/linux-grtev2.h    (revision 0)
>> +++ gcc/config/rs6000/linux-grtev2.h    (revision 0)
>> @@ -0,0 +1,43 @@
>> +/* Definitions for Linux-based GRTE (Google RunTime Environment) version 2.
>> +   Copyright (C) 2009,2010,2011,2012 Free Software Foundation, Inc.
>> +   Contributed by Chris Demetriou and Ollie Wild.
>> +
>> +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.
>> +
>> +Under Section 7 of GPL version 3, you are granted additional
>> +permissions described in the GCC Runtime Library Exception, version
>> +3.1, as published by the Free Software Foundation.
>> +
>> +You should have received a copy of the GNU General Public License and
>> +a copy of the GCC Runtime Library Exception along with this program;
>> +see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
>> +<http://www.gnu.org/licenses/>.  */
>> +
>> +/* Overrides LIB_LINUX_SPEC from sysv4.h.  */
>> +#undef LIB_LINUX_SPEC
>> +#define LIB_LINUX_SPEC \
>> +  "%{pthread:-lpthread} \
>> +   %{shared:-lc} \
>> +   %{!shared:%{mieee-fp:-lieee} %{profile:%(libc_p)}%{!profile:%(libc)}}"
>> +
>> +/* When GRTE links statically, it needs its NSS and resolver libraries
>> +   linked in as well.  Note that when linking statically, these are
>> +   enclosed in a group by LINK_GCC_C_SEQUENCE_SPEC.  */
>> +#undef LINUX_GRTE_EXTRA_SPECS
>> +#define LINUX_GRTE_EXTRA_SPECS \
>> +  { "libc", "%{static:%(libc_static);:-lc}" }, \
>> +  { "libc_p", "%{static:%(libc_p_static);:-lc_p}" }, \
>> +  { "libc_static", \
>> +    "-lc -lnss_borg -lnss_cache -lnss_dns -lnss_files -lresolv" }, \
>> +  { "libc_p_static", \
>> +    "-lc_p -lnss_borg_p -lnss_cache_p -lnss_dns_p -lnss_files_p -lresolv_p" },
>
> Really can't you fix glibc so that libnss.a is not needed.
> See http://sourceware.org/bugzilla/show_bug.cgi?id=6528 for those fixes.
>
> Thanks,
> Andrew Pinski
>
>
>> Index: gcc/config/rs6000/sysv4.h
>> ===================================================================
>> --- gcc/config/rs6000/sysv4.h   (revision 184150)
>> +++ gcc/config/rs6000/sysv4.h   (working copy)
>> @@ -803,7 +803,10 @@ extern int fixuplabelno;
>>
>>  #define LINK_START_LINUX_SPEC ""
>>
>> -#define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1"
>> +#ifndef RUNTIME_ROOT_PREFIX
>> +#define RUNTIME_ROOT_PREFIX ""
>> +#endif
>> +#define GLIBC_DYNAMIC_LINKER RUNTIME_ROOT_PREFIX "/lib/ld.so.1"
>>  #define UCLIBC_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
>>  #if DEFAULT_LIBC == LIBC_UCLIBC
>>  #define CHOOSE_DYNAMIC_LINKER(G, U) "%{mglibc:" G ";:" U "}"
>> @@ -881,6 +884,11 @@ ncrtn.o%s"
>>  #define CPP_OS_OPENBSD_SPEC "%{posix:-D_POSIX_SOURCE} %{pthread:-D_POSIX_THREADS}"
>>  #endif
>>
>> +/* These may be provided by rs6000/linux-grtev2.h.  */
>> +#ifndef LINUX_GRTE_EXTRA_SPECS
>> +#define LINUX_GRTE_EXTRA_SPECS
>> +#endif
>> +
>>  /* Define any extra SPECS that the compiler needs to generate.  */
>>  /* Override rs6000.h definition.  */
>>  #undef SUBTARGET_EXTRA_SPECS
>> @@ -949,6 +957,7 @@ ncrtn.o%s"
>>   { "cpp_os_openbsd",          CPP_OS_OPENBSD_SPEC },                  \
>>   { "cpp_os_default",          CPP_OS_DEFAULT_SPEC },                  \
>>   { "fbsd_dynamic_linker",     FBSD_DYNAMIC_LINKER },                  \
>> +  LINUX_GRTE_EXTRA_SPECS                                               \
>>   SUBSUBTARGET_EXTRA_SPECS
>>
>>  #define        SUBSUBTARGET_EXTRA_SPECS
>>
>> --
>> This patch is available for review at http://codereview.appspot.com/5659050
Doug Kwan (關振德) Feb. 17, 2012, 1 a.m. UTC | #3
Hi Diego & Ollie,

    Could you guys take a look?

-Doug

On Mon, Feb 13, 2012 at 6:41 PM, Doug Kwan <dougkwan@google.com> wrote:
> Hi,
>
> This patch adds support for powerpc*-grtev2-linux-gnu.  The changes
> include:
>
> 1. Relocating the dynamic linker using a run-time root prefix.
> 2. Using different library setting in static linking.
>
> This is tested by building PowerPC64 and PowerPC toolchains and ran
> some tests with the resulting toolchain.
>
> This is used by Google and is not meant to be sent to trunk.
>
> -Doug
>
> 2012-02-13   Doug Kwan  <dougkwan@google.com>
>
>        * gcc/config.gcc (powerpc*-*-linux): Pull in GRTEv2 spec changes if
>        target matches *-grtev2-*.
>        * gcc/config/rs6000/linux64.h (GLIB_DYNAMIC_LINKER{32,64}): Add
>        runtime root prefix to glibc's dynamic linker.
>        * gcc/config/rs6000/linux-grtev2.h: New file.
>        * gcc/config/rs6000/sysv4.h (GLIB_DYNAMIC_LINKER): Add
>        runtime root prefix to glibc's dynamic linker.
>        (LINUX_GRTE_EXTRA_SPECS): Define to be empty if no definition found.
>        (SUBTARGET_EXTRA_SPECS): Include LINUX_GRTE_EXTRA_SPECS.
>
> Index: gcc/config.gcc
> ===================================================================
> --- gcc/config.gcc      (revision 184150)
> +++ gcc/config.gcc      (working copy)
> @@ -2040,6 +2040,12 @@ powerpc-*-linux* | powerpc64-*-linux*)
>        if test x${enable_secureplt} = xyes; then
>                tm_file="rs6000/secureplt.h ${tm_file}"
>        fi
> +       # Pull in spec changes for GRTEv2 configurations.
> +       case ${target} in
> +       *-grtev2-*)
> +           tm_file="${tm_file} rs6000/linux-grtev2.h"
> +           ;;
> +       esac
>        ;;
>  powerpc-wrs-vxworks|powerpc-wrs-vxworksae)
>        tm_file="${tm_file} elfos.h freebsd-spec.h rs6000/sysv4.h"
> Index: gcc/config/rs6000/linux64.h
> ===================================================================
> --- gcc/config/rs6000/linux64.h (revision 184150)
> +++ gcc/config/rs6000/linux64.h (working copy)
> @@ -367,8 +367,8 @@ extern int dot_symbols;
>  #undef LINK_OS_DEFAULT_SPEC
>  #define LINK_OS_DEFAULT_SPEC "%(link_os_linux)"
>
> -#define GLIBC_DYNAMIC_LINKER32 "/lib/ld.so.1"
> -#define GLIBC_DYNAMIC_LINKER64 "/lib64/ld64.so.1"
> +#define GLIBC_DYNAMIC_LINKER32 RUNTIME_ROOT_PREFIX "/lib/ld.so.1"
> +#define GLIBC_DYNAMIC_LINKER64 RUNTIME_ROOT_PREFIX "/lib64/ld64.so.1"
>  #define UCLIBC_DYNAMIC_LINKER32 "/lib/ld-uClibc.so.0"
>  #define UCLIBC_DYNAMIC_LINKER64 "/lib/ld64-uClibc.so.0"
>  #if DEFAULT_LIBC == LIBC_UCLIBC
> Index: gcc/config/rs6000/linux-grtev2.h
> ===================================================================
> --- gcc/config/rs6000/linux-grtev2.h    (revision 0)
> +++ gcc/config/rs6000/linux-grtev2.h    (revision 0)
> @@ -0,0 +1,43 @@
> +/* Definitions for Linux-based GRTE (Google RunTime Environment) version 2.
> +   Copyright (C) 2009,2010,2011,2012 Free Software Foundation, Inc.
> +   Contributed by Chris Demetriou and Ollie Wild.
> +
> +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.
> +
> +Under Section 7 of GPL version 3, you are granted additional
> +permissions described in the GCC Runtime Library Exception, version
> +3.1, as published by the Free Software Foundation.
> +
> +You should have received a copy of the GNU General Public License and
> +a copy of the GCC Runtime Library Exception along with this program;
> +see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
> +<http://www.gnu.org/licenses/>.  */
> +
> +/* Overrides LIB_LINUX_SPEC from sysv4.h.  */
> +#undef LIB_LINUX_SPEC
> +#define LIB_LINUX_SPEC \
> +  "%{pthread:-lpthread} \
> +   %{shared:-lc} \
> +   %{!shared:%{mieee-fp:-lieee} %{profile:%(libc_p)}%{!profile:%(libc)}}"
> +
> +/* When GRTE links statically, it needs its NSS and resolver libraries
> +   linked in as well.  Note that when linking statically, these are
> +   enclosed in a group by LINK_GCC_C_SEQUENCE_SPEC.  */
> +#undef LINUX_GRTE_EXTRA_SPECS
> +#define LINUX_GRTE_EXTRA_SPECS \
> +  { "libc", "%{static:%(libc_static);:-lc}" }, \
> +  { "libc_p", "%{static:%(libc_p_static);:-lc_p}" }, \
> +  { "libc_static", \
> +    "-lc -lnss_borg -lnss_cache -lnss_dns -lnss_files -lresolv" }, \
> +  { "libc_p_static", \
> +    "-lc_p -lnss_borg_p -lnss_cache_p -lnss_dns_p -lnss_files_p -lresolv_p" },
> Index: gcc/config/rs6000/sysv4.h
> ===================================================================
> --- gcc/config/rs6000/sysv4.h   (revision 184150)
> +++ gcc/config/rs6000/sysv4.h   (working copy)
> @@ -803,7 +803,10 @@ extern int fixuplabelno;
>
>  #define LINK_START_LINUX_SPEC ""
>
> -#define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1"
> +#ifndef RUNTIME_ROOT_PREFIX
> +#define RUNTIME_ROOT_PREFIX ""
> +#endif
> +#define GLIBC_DYNAMIC_LINKER RUNTIME_ROOT_PREFIX "/lib/ld.so.1"
>  #define UCLIBC_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
>  #if DEFAULT_LIBC == LIBC_UCLIBC
>  #define CHOOSE_DYNAMIC_LINKER(G, U) "%{mglibc:" G ";:" U "}"
> @@ -881,6 +884,11 @@ ncrtn.o%s"
>  #define CPP_OS_OPENBSD_SPEC "%{posix:-D_POSIX_SOURCE} %{pthread:-D_POSIX_THREADS}"
>  #endif
>
> +/* These may be provided by rs6000/linux-grtev2.h.  */
> +#ifndef LINUX_GRTE_EXTRA_SPECS
> +#define LINUX_GRTE_EXTRA_SPECS
> +#endif
> +
>  /* Define any extra SPECS that the compiler needs to generate.  */
>  /* Override rs6000.h definition.  */
>  #undef SUBTARGET_EXTRA_SPECS
> @@ -949,6 +957,7 @@ ncrtn.o%s"
>   { "cpp_os_openbsd",          CPP_OS_OPENBSD_SPEC },                  \
>   { "cpp_os_default",          CPP_OS_DEFAULT_SPEC },                  \
>   { "fbsd_dynamic_linker",     FBSD_DYNAMIC_LINKER },                  \
> +  LINUX_GRTE_EXTRA_SPECS                                               \
>   SUBSUBTARGET_EXTRA_SPECS
>
>  #define        SUBSUBTARGET_EXTRA_SPECS
>
> --
> This patch is available for review at http://codereview.appspot.com/5659050
Diego Novillo Feb. 17, 2012, 12:55 p.m. UTC | #4
On 16/02/12 20:00 , Doug Kwan (關振德) wrote:
> Hi Diego&  Ollie,
>
>      Could you guys take a look?
>
> -Doug
>
> On Mon, Feb 13, 2012 at 6:41 PM, Doug Kwan<dougkwan@google.com>  wrote:
>> Hi,
>>
>> This patch adds support for powerpc*-grtev2-linux-gnu.  The changes
>> include:
>>
>> 1. Relocating the dynamic linker using a run-time root prefix.
>> 2. Using different library setting in static linking.
>>
>> This is tested by building PowerPC64 and PowerPC toolchains and ran
>> some tests with the resulting toolchain.
>>
>> This is used by Google and is not meant to be sent to trunk.
>>
>> -Doug
>>
>> 2012-02-13   Doug Kwan<dougkwan@google.com>
>>
>>         * gcc/config.gcc (powerpc*-*-linux): Pull in GRTEv2 spec changes if
>>         target matches *-grtev2-*.
>>         * gcc/config/rs6000/linux64.h (GLIB_DYNAMIC_LINKER{32,64}): Add
>>         runtime root prefix to glibc's dynamic linker.
>>         * gcc/config/rs6000/linux-grtev2.h: New file.
>>         * gcc/config/rs6000/sysv4.h (GLIB_DYNAMIC_LINKER): Add
>>         runtime root prefix to glibc's dynamic linker.
>>         (LINUX_GRTE_EXTRA_SPECS): Define to be empty if no definition found.
>>         (SUBTARGET_EXTRA_SPECS): Include LINUX_GRTE_EXTRA_SPECS.

OK for google/integration.  Thanks.


Diego.
diff mbox

Patch

Index: gcc/config.gcc
===================================================================
--- gcc/config.gcc	(revision 184150)
+++ gcc/config.gcc	(working copy)
@@ -2040,6 +2040,12 @@  powerpc-*-linux* | powerpc64-*-linux*)
 	if test x${enable_secureplt} = xyes; then
 		tm_file="rs6000/secureplt.h ${tm_file}"
 	fi
+	# Pull in spec changes for GRTEv2 configurations.
+	case ${target} in
+	*-grtev2-*)
+	    tm_file="${tm_file} rs6000/linux-grtev2.h"
+	    ;;
+	esac
 	;;
 powerpc-wrs-vxworks|powerpc-wrs-vxworksae)
 	tm_file="${tm_file} elfos.h freebsd-spec.h rs6000/sysv4.h"
Index: gcc/config/rs6000/linux64.h
===================================================================
--- gcc/config/rs6000/linux64.h	(revision 184150)
+++ gcc/config/rs6000/linux64.h	(working copy)
@@ -367,8 +367,8 @@  extern int dot_symbols;
 #undef	LINK_OS_DEFAULT_SPEC
 #define LINK_OS_DEFAULT_SPEC "%(link_os_linux)"
 
-#define GLIBC_DYNAMIC_LINKER32 "/lib/ld.so.1"
-#define GLIBC_DYNAMIC_LINKER64 "/lib64/ld64.so.1"
+#define GLIBC_DYNAMIC_LINKER32 RUNTIME_ROOT_PREFIX "/lib/ld.so.1"
+#define GLIBC_DYNAMIC_LINKER64 RUNTIME_ROOT_PREFIX "/lib64/ld64.so.1"
 #define UCLIBC_DYNAMIC_LINKER32 "/lib/ld-uClibc.so.0"
 #define UCLIBC_DYNAMIC_LINKER64 "/lib/ld64-uClibc.so.0"
 #if DEFAULT_LIBC == LIBC_UCLIBC
Index: gcc/config/rs6000/linux-grtev2.h
===================================================================
--- gcc/config/rs6000/linux-grtev2.h	(revision 0)
+++ gcc/config/rs6000/linux-grtev2.h	(revision 0)
@@ -0,0 +1,43 @@ 
+/* Definitions for Linux-based GRTE (Google RunTime Environment) version 2.
+   Copyright (C) 2009,2010,2011,2012 Free Software Foundation, Inc.
+   Contributed by Chris Demetriou and Ollie Wild.
+
+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.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+/* Overrides LIB_LINUX_SPEC from sysv4.h.  */
+#undef	LIB_LINUX_SPEC
+#define LIB_LINUX_SPEC \
+  "%{pthread:-lpthread} \
+   %{shared:-lc} \
+   %{!shared:%{mieee-fp:-lieee} %{profile:%(libc_p)}%{!profile:%(libc)}}"
+
+/* When GRTE links statically, it needs its NSS and resolver libraries
+   linked in as well.  Note that when linking statically, these are
+   enclosed in a group by LINK_GCC_C_SEQUENCE_SPEC.  */
+#undef LINUX_GRTE_EXTRA_SPECS
+#define LINUX_GRTE_EXTRA_SPECS \
+  { "libc", "%{static:%(libc_static);:-lc}" }, \
+  { "libc_p", "%{static:%(libc_p_static);:-lc_p}" }, \
+  { "libc_static", \
+    "-lc -lnss_borg -lnss_cache -lnss_dns -lnss_files -lresolv" }, \
+  { "libc_p_static", \
+    "-lc_p -lnss_borg_p -lnss_cache_p -lnss_dns_p -lnss_files_p -lresolv_p" },
Index: gcc/config/rs6000/sysv4.h
===================================================================
--- gcc/config/rs6000/sysv4.h	(revision 184150)
+++ gcc/config/rs6000/sysv4.h	(working copy)
@@ -803,7 +803,10 @@  extern int fixuplabelno;
 
 #define LINK_START_LINUX_SPEC ""
 
-#define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1"
+#ifndef RUNTIME_ROOT_PREFIX
+#define RUNTIME_ROOT_PREFIX ""
+#endif
+#define GLIBC_DYNAMIC_LINKER RUNTIME_ROOT_PREFIX "/lib/ld.so.1"
 #define UCLIBC_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
 #if DEFAULT_LIBC == LIBC_UCLIBC
 #define CHOOSE_DYNAMIC_LINKER(G, U) "%{mglibc:" G ";:" U "}"
@@ -881,6 +884,11 @@  ncrtn.o%s"
 #define CPP_OS_OPENBSD_SPEC "%{posix:-D_POSIX_SOURCE} %{pthread:-D_POSIX_THREADS}"
 #endif
 
+/* These may be provided by rs6000/linux-grtev2.h.  */
+#ifndef LINUX_GRTE_EXTRA_SPECS
+#define LINUX_GRTE_EXTRA_SPECS
+#endif
+
 /* Define any extra SPECS that the compiler needs to generate.  */
 /* Override rs6000.h definition.  */
 #undef	SUBTARGET_EXTRA_SPECS
@@ -949,6 +957,7 @@  ncrtn.o%s"
   { "cpp_os_openbsd",		CPP_OS_OPENBSD_SPEC },			\
   { "cpp_os_default",		CPP_OS_DEFAULT_SPEC },			\
   { "fbsd_dynamic_linker",	FBSD_DYNAMIC_LINKER },			\
+  LINUX_GRTE_EXTRA_SPECS						\
   SUBSUBTARGET_EXTRA_SPECS
 
 #define	SUBSUBTARGET_EXTRA_SPECS