* Claudiu Zissulescu <claudiu.zissule...@synopsys.com> [2017-03-27 13:13:13 +0200]:
> Hi Andrew, > > This is a patch which originally has been made by Thomas. As I did > arange it, I cannot push it. > > Original patch message: > > The compiler is supposed to have the builtin defined _REENTRANT defined > when -pthread is passed, which wasn't done on the ARC architecture. > > When _REENTRANT is not passed, the C library will not use reentrant > functions, and the latest version of ax_pthread.m4 from the > autoconf-archive will no longer detect that thread support is > available (see https://savannah.gnu.org/patch/?8186). > > gcc/ > 2017-03-02 Claudiu Zissulescu <claz...@synopsys.com> > Thomas Petazzoni <thomas.petazz...@free-electrons.com> > > * config/arc/arc.h (CPP_SPEC): Add subtarget_cpp_spec. > (EXTRA_SPECS): Define. > (SUBTARGET_EXTRA_SPECS): Likewise. > (SUBTARGET_CPP_SPEC): Likewise. > * config/arc/elf.h (EXTRA_SPECS): Renamed to > SUBTARGET_EXTRA_SPECS. > * config/arc/linux.h (SUBTARGET_CPP_SPEC): Define. Looks good. Thanks, Andrew > --- > gcc/config/arc/arc.h | 24 +++++++++++++++++++++++- > gcc/config/arc/elf.h | 3 ++- > gcc/config/arc/linux.h | 5 +++++ > 3 files changed, 30 insertions(+), 2 deletions(-) > > diff --git a/gcc/config/arc/arc.h b/gcc/config/arc/arc.h > index d515eb0..24c2346 100644 > --- a/gcc/config/arc/arc.h > +++ b/gcc/config/arc/arc.h > @@ -61,7 +61,8 @@ along with GCC; see the file COPYING3. If not see > %{mmac-d16:-D__Xxmac_d16} %{mmac-24:-D__Xxmac_24} \ > %{mdsp-packa:-D__Xdsp_packa} %{mcrc:-D__Xcrc} %{mdvbf:-D__Xdvbf} \ > %{mtelephony:-D__Xtelephony} %{mxy:-D__Xxy} %{mmul64: -D__Xmult32} \ > -%{mlock:-D__Xlock} %{mswape:-D__Xswape} %{mrtsc:-D__Xrtsc}" > +%{mlock:-D__Xlock} %{mswape:-D__Xswape} %{mrtsc:-D__Xrtsc} \ > +%(subtarget_cpp_spec)" > > #undef CC1_SPEC > #define CC1_SPEC "\ > @@ -73,6 +74,27 @@ extern const char *arc_cpu_to_as (int argc, const char > **argv); > #define EXTRA_SPEC_FUNCTIONS \ > { "cpu_to_as", arc_cpu_to_as }, > > +/* This macro defines names of additional specifications to put in the specs > + that can be used in various specifications like CC1_SPEC. Its definition > + is an initializer with a subgrouping for each command option. > + > + Each subgrouping contains a string constant, that defines the > + specification name, and a string constant that used by the GCC driver > + program. > + > + Do not define this macro if it does not need to do anything. */ > +#define EXTRA_SPECS \ > + { "subtarget_cpp_spec", SUBTARGET_CPP_SPEC }, \ > + SUBTARGET_EXTRA_SPECS > + > +#ifndef SUBTARGET_EXTRA_SPECS > +#define SUBTARGET_EXTRA_SPECS > +#endif > + > +#ifndef SUBTARGET_CPP_SPEC > +#define SUBTARGET_CPP_SPEC "" > +#endif > + > #undef ASM_SPEC > #define ASM_SPEC "%{mbig-endian|EB:-EB} %{EL} " \ > "%:cpu_to_as(%{mcpu=*:%*}) %{mspfp*} %{mdpfp*} %{mfpu=fpuda*:-mfpuda}" > diff --git a/gcc/config/arc/elf.h b/gcc/config/arc/elf.h > index 2b572a5..c5794f8 100644 > --- a/gcc/config/arc/elf.h > +++ b/gcc/config/arc/elf.h > @@ -26,7 +26,8 @@ along with GCC; see the file COPYING3. If not see > > #define ARC_TLS_EXTRA_START_SPEC "crttls.o%s" > > -#define EXTRA_SPECS \ > +#undef SUBTARGET_EXTRA_SPECS > +#define SUBTARGET_EXTRA_SPECS \ > { "arc_tls_extra_start_spec", ARC_TLS_EXTRA_START_SPEC }, \ > > #undef STARTFILE_SPEC > diff --git a/gcc/config/arc/linux.h b/gcc/config/arc/linux.h > index 6e1a96e..83e5a1d 100644 > --- a/gcc/config/arc/linux.h > +++ b/gcc/config/arc/linux.h > @@ -78,3 +78,8 @@ along with GCC; see the file COPYING3. If not see > /* Linux toolchains use r25 as the thread pointer register. */ > #undef TARGET_ARC_TP_REGNO_DEFAULT > #define TARGET_ARC_TP_REGNO_DEFAULT 25 > + > +#undef SUBTARGET_CPP_SPEC > +#define SUBTARGET_CPP_SPEC "\ > + %{pthread:-D_REENTRANT} \ > +" > -- > 1.9.1 >