diff mbox

[ARC] Define _REENTRANT when -pthread is passed.

Message ID 1490613193-22311-1-git-send-email-claziss@synopsys.com
State New
Headers show

Commit Message

Claudiu Zissulescu March 27, 2017, 11:13 a.m. UTC
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  <claziss@synopsys.com>
	    Thomas Petazzoni <thomas.petazzoni@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.
---
 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(-)

Comments

Andrew Burgess March 27, 2017, 8 p.m. UTC | #1
* Claudiu Zissulescu <Claudiu.Zissulescu@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  <claziss@synopsys.com>
> 	    Thomas Petazzoni <thomas.petazzoni@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
>
Claudiu Zissulescu March 28, 2017, 8:58 a.m. UTC | #2
Thank you Andrew. The patch is committed,
Claudiu

P.S. Thomas can you mark fixed the Bugzilla entry for this patch. Thanks!
diff mbox

Patch

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} \
+"