public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] lto-plugin: Add path to libatomic for riscv64
@ 2022-07-04 11:32 Martin Liška
  2022-07-04 12:28 ` Richard Biener
  0 siblings, 1 reply; 10+ messages in thread
From: Martin Liška @ 2022-07-04 11:32 UTC (permalink / raw)
  To: gcc-patches; +Cc: Kito Cheng, jim.wilson.gcc

Similarly to libgo, we need to provide -L for targets where
libpthread does depends on libatomic.

Ready for master?

	PR bootstrap/106156

lto-plugin/ChangeLog:

	* Makefile.am: Use PTHREAD_CFLAGS.
	* Makefile.in: Regenerate.
	* configure.ac: Detect if PTHREAD_CFLAGS should contain path
	to libatomic.
	* configure: Regenerate.
---
 lto-plugin/Makefile.am  |  2 +-
 lto-plugin/Makefile.in  |  3 ++-
 lto-plugin/configure    | 34 ++++++++++++++++++++++++++++++++--
 lto-plugin/configure.ac | 17 +++++++++++++++++
 4 files changed, 52 insertions(+), 4 deletions(-)

diff --git a/lto-plugin/Makefile.am b/lto-plugin/Makefile.am
index 81362eafc36..64a6bc8c943 100644
--- a/lto-plugin/Makefile.am
+++ b/lto-plugin/Makefile.am
@@ -10,7 +10,7 @@ libexecsubdir := $(libexecdir)/gcc/$(real_target_noncanonical)/$(gcc_version)$(a
 AM_CPPFLAGS = -I$(top_srcdir)/../include $(DEFS)
 AM_CFLAGS = @ac_lto_plugin_warn_cflags@ $(CET_HOST_FLAGS)
 # The plug-in depends on pthreads.
-AM_LDFLAGS = -pthread @ac_lto_plugin_ldflags@
+AM_LDFLAGS = $(PTHREAD_CFLAGS) @ac_lto_plugin_ldflags@
 AM_LIBTOOLFLAGS = --tag=disable-static
 override CFLAGS := $(filter-out -fsanitize=address -fsanitize=hwaddress,$(CFLAGS))
 override LDFLAGS := $(filter-out -fsanitize=address -fsanitize=hwaddress,$(LDFLAGS))
diff --git a/lto-plugin/Makefile.in b/lto-plugin/Makefile.in
index 2033dd9b7c2..de19c8873de 100644
--- a/lto-plugin/Makefile.in
+++ b/lto-plugin/Makefile.in
@@ -264,6 +264,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
@@ -345,7 +346,7 @@ libexecsubdir := $(libexecdir)/gcc/$(real_target_noncanonical)/$(gcc_version)$(a
 AM_CPPFLAGS = -I$(top_srcdir)/../include $(DEFS)
 AM_CFLAGS = @ac_lto_plugin_warn_cflags@ $(CET_HOST_FLAGS)
 # The plug-in depends on pthreads.
-AM_LDFLAGS = -pthread @ac_lto_plugin_ldflags@
+AM_LDFLAGS = $(PTHREAD_CFLAGS) @ac_lto_plugin_ldflags@
 AM_LIBTOOLFLAGS = --tag=disable-static
 libexecsub_LTLIBRARIES = liblto_plugin.la
 in_gcc_libs = $(foreach lib, $(libexecsub_LTLIBRARIES), $(gcc_build_dir)/$(lib))
diff --git a/lto-plugin/configure b/lto-plugin/configure
index aaa91a63623..aa35bd94b3f 100755
--- a/lto-plugin/configure
+++ b/lto-plugin/configure
@@ -650,6 +650,7 @@ LD
 FGREP
 SED
 LIBTOOL
+PTHREAD_CFLAGS
 LTO_PLUGIN_USE_SYMVER_SUN_FALSE
 LTO_PLUGIN_USE_SYMVER_SUN_TRUE
 LTO_PLUGIN_USE_SYMVER_GNU_FALSE
@@ -6020,6 +6021,35 @@ fi
 
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -pthread is supported" >&5
+$as_echo_n "checking whether -pthread is supported... " >&6; }
+if ${lto_plugin_cv_lib_pthread+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  CFLAGS_hold=$CFLAGS
+CFLAGS="$CFLAGS -pthread -L../$build/libatomic/.libs"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+int i;
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  lto_plugin_cv_lib_pthread=yes
+else
+  lto_plugin_cv_lib_pthread=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+CFLAGS=$CFLAGS_hold
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lto_plugin_cv_lib_pthread" >&5
+$as_echo "$lto_plugin_cv_lib_pthread" >&6; }
+PTHREAD_CFLAGS=
+if test "$libgo_cv_lib_pthread" = yes; then
+  # RISC-V apparently adds -latomic when using -pthread.
+  PTHREAD_CFLAGS="-pthread -L../$build/libatomic/.libs"
+fi
+
+
+
 case `pwd` in
   *\ * | *\	*)
     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
@@ -12091,7 +12121,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 12094 "configure"
+#line 12124 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -12197,7 +12227,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 12200 "configure"
+#line 12230 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
diff --git a/lto-plugin/configure.ac b/lto-plugin/configure.ac
index c2ec512880f..ba34a5d0ca1 100644
--- a/lto-plugin/configure.ac
+++ b/lto-plugin/configure.ac
@@ -91,6 +91,23 @@ AM_CONDITIONAL(LTO_PLUGIN_USE_SYMVER_SUN, [test "x$lto_plugin_use_symver" = xsun
 AC_CHECK_HEADER(pthread.h,
   [AC_DEFINE(HAVE_PTHREAD_H, 1, [Define to 1 if pthread.h is present.])])
 
+dnl Test whether the compiler supports the -pthread option.
+AC_CACHE_CHECK([whether -pthread is supported],
+[lto_plugin_cv_lib_pthread],
+[CFLAGS_hold=$CFLAGS
+CFLAGS="$CFLAGS -pthread -L../$build/libatomic/.libs"
+AC_COMPILE_IFELSE([AC_LANG_SOURCE([int i;])],
+[lto_plugin_cv_lib_pthread=yes],
+[lto_plugin_cv_lib_pthread=no])
+CFLAGS=$CFLAGS_hold])
+PTHREAD_CFLAGS=
+if test "$libgo_cv_lib_pthread" = yes; then
+  # RISC-V apparently adds -latomic when using -pthread.
+  PTHREAD_CFLAGS="-pthread -L../$build/libatomic/.libs"
+fi
+AC_SUBST(PTHREAD_CFLAGS)
+
+
 AM_PROG_LIBTOOL
 ACX_LT_HOST_FLAGS
 AC_SUBST(target_noncanonical)
-- 
2.36.1


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] lto-plugin: Add path to libatomic for riscv64
  2022-07-04 11:32 [PATCH] lto-plugin: Add path to libatomic for riscv64 Martin Liška
@ 2022-07-04 12:28 ` Richard Biener
  2022-07-04 12:28   ` Richard Biener
  0 siblings, 1 reply; 10+ messages in thread
From: Richard Biener @ 2022-07-04 12:28 UTC (permalink / raw)
  To: Martin Liška; +Cc: GCC Patches, Kito Cheng

On Mon, Jul 4, 2022 at 1:32 PM Martin Liška <mliska@suse.cz> wrote:
>
> Similarly to libgo, we need to provide -L for targets where
> libpthread does depends on libatomic.
>
> Ready for master?

OK

>         PR bootstrap/106156
>
> lto-plugin/ChangeLog:
>
>         * Makefile.am: Use PTHREAD_CFLAGS.
>         * Makefile.in: Regenerate.
>         * configure.ac: Detect if PTHREAD_CFLAGS should contain path
>         to libatomic.
>         * configure: Regenerate.
> ---
>  lto-plugin/Makefile.am  |  2 +-
>  lto-plugin/Makefile.in  |  3 ++-
>  lto-plugin/configure    | 34 ++++++++++++++++++++++++++++++++--
>  lto-plugin/configure.ac | 17 +++++++++++++++++
>  4 files changed, 52 insertions(+), 4 deletions(-)
>
> diff --git a/lto-plugin/Makefile.am b/lto-plugin/Makefile.am
> index 81362eafc36..64a6bc8c943 100644
> --- a/lto-plugin/Makefile.am
> +++ b/lto-plugin/Makefile.am
> @@ -10,7 +10,7 @@ libexecsubdir := $(libexecdir)/gcc/$(real_target_noncanonical)/$(gcc_version)$(a
>  AM_CPPFLAGS = -I$(top_srcdir)/../include $(DEFS)
>  AM_CFLAGS = @ac_lto_plugin_warn_cflags@ $(CET_HOST_FLAGS)
>  # The plug-in depends on pthreads.
> -AM_LDFLAGS = -pthread @ac_lto_plugin_ldflags@
> +AM_LDFLAGS = $(PTHREAD_CFLAGS) @ac_lto_plugin_ldflags@
>  AM_LIBTOOLFLAGS = --tag=disable-static
>  override CFLAGS := $(filter-out -fsanitize=address -fsanitize=hwaddress,$(CFLAGS))
>  override LDFLAGS := $(filter-out -fsanitize=address -fsanitize=hwaddress,$(LDFLAGS))
> diff --git a/lto-plugin/Makefile.in b/lto-plugin/Makefile.in
> index 2033dd9b7c2..de19c8873de 100644
> --- a/lto-plugin/Makefile.in
> +++ b/lto-plugin/Makefile.in
> @@ -264,6 +264,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
>  PACKAGE_URL = @PACKAGE_URL@
>  PACKAGE_VERSION = @PACKAGE_VERSION@
>  PATH_SEPARATOR = @PATH_SEPARATOR@
> +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
>  RANLIB = @RANLIB@
>  SED = @SED@
>  SET_MAKE = @SET_MAKE@
> @@ -345,7 +346,7 @@ libexecsubdir := $(libexecdir)/gcc/$(real_target_noncanonical)/$(gcc_version)$(a
>  AM_CPPFLAGS = -I$(top_srcdir)/../include $(DEFS)
>  AM_CFLAGS = @ac_lto_plugin_warn_cflags@ $(CET_HOST_FLAGS)
>  # The plug-in depends on pthreads.
> -AM_LDFLAGS = -pthread @ac_lto_plugin_ldflags@
> +AM_LDFLAGS = $(PTHREAD_CFLAGS) @ac_lto_plugin_ldflags@
>  AM_LIBTOOLFLAGS = --tag=disable-static
>  libexecsub_LTLIBRARIES = liblto_plugin.la
>  in_gcc_libs = $(foreach lib, $(libexecsub_LTLIBRARIES), $(gcc_build_dir)/$(lib))
> diff --git a/lto-plugin/configure b/lto-plugin/configure
> index aaa91a63623..aa35bd94b3f 100755
> --- a/lto-plugin/configure
> +++ b/lto-plugin/configure
> @@ -650,6 +650,7 @@ LD
>  FGREP
>  SED
>  LIBTOOL
> +PTHREAD_CFLAGS
>  LTO_PLUGIN_USE_SYMVER_SUN_FALSE
>  LTO_PLUGIN_USE_SYMVER_SUN_TRUE
>  LTO_PLUGIN_USE_SYMVER_GNU_FALSE
> @@ -6020,6 +6021,35 @@ fi
>
>
>
> +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -pthread is supported" >&5
> +$as_echo_n "checking whether -pthread is supported... " >&6; }
> +if ${lto_plugin_cv_lib_pthread+:} false; then :
> +  $as_echo_n "(cached) " >&6
> +else
> +  CFLAGS_hold=$CFLAGS
> +CFLAGS="$CFLAGS -pthread -L../$build/libatomic/.libs"
> +cat confdefs.h - <<_ACEOF >conftest.$ac_ext
> +/* end confdefs.h.  */
> +int i;
> +_ACEOF
> +if ac_fn_c_try_compile "$LINENO"; then :
> +  lto_plugin_cv_lib_pthread=yes
> +else
> +  lto_plugin_cv_lib_pthread=no
> +fi
> +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
> +CFLAGS=$CFLAGS_hold
> +fi
> +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lto_plugin_cv_lib_pthread" >&5
> +$as_echo "$lto_plugin_cv_lib_pthread" >&6; }
> +PTHREAD_CFLAGS=
> +if test "$libgo_cv_lib_pthread" = yes; then
> +  # RISC-V apparently adds -latomic when using -pthread.
> +  PTHREAD_CFLAGS="-pthread -L../$build/libatomic/.libs"
> +fi
> +
> +
> +
>  case `pwd` in
>    *\ * | *\    *)
>      { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
> @@ -12091,7 +12121,7 @@ else
>    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
>    lt_status=$lt_dlunknown
>    cat > conftest.$ac_ext <<_LT_EOF
> -#line 12094 "configure"
> +#line 12124 "configure"
>  #include "confdefs.h"
>
>  #if HAVE_DLFCN_H
> @@ -12197,7 +12227,7 @@ else
>    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
>    lt_status=$lt_dlunknown
>    cat > conftest.$ac_ext <<_LT_EOF
> -#line 12200 "configure"
> +#line 12230 "configure"
>  #include "confdefs.h"
>
>  #if HAVE_DLFCN_H
> diff --git a/lto-plugin/configure.ac b/lto-plugin/configure.ac
> index c2ec512880f..ba34a5d0ca1 100644
> --- a/lto-plugin/configure.ac
> +++ b/lto-plugin/configure.ac
> @@ -91,6 +91,23 @@ AM_CONDITIONAL(LTO_PLUGIN_USE_SYMVER_SUN, [test "x$lto_plugin_use_symver" = xsun
>  AC_CHECK_HEADER(pthread.h,
>    [AC_DEFINE(HAVE_PTHREAD_H, 1, [Define to 1 if pthread.h is present.])])
>
> +dnl Test whether the compiler supports the -pthread option.
> +AC_CACHE_CHECK([whether -pthread is supported],
> +[lto_plugin_cv_lib_pthread],
> +[CFLAGS_hold=$CFLAGS
> +CFLAGS="$CFLAGS -pthread -L../$build/libatomic/.libs"
> +AC_COMPILE_IFELSE([AC_LANG_SOURCE([int i;])],
> +[lto_plugin_cv_lib_pthread=yes],
> +[lto_plugin_cv_lib_pthread=no])
> +CFLAGS=$CFLAGS_hold])
> +PTHREAD_CFLAGS=
> +if test "$libgo_cv_lib_pthread" = yes; then
> +  # RISC-V apparently adds -latomic when using -pthread.
> +  PTHREAD_CFLAGS="-pthread -L../$build/libatomic/.libs"
> +fi
> +AC_SUBST(PTHREAD_CFLAGS)
> +
> +
>  AM_PROG_LIBTOOL
>  ACX_LT_HOST_FLAGS
>  AC_SUBST(target_noncanonical)
> --
> 2.36.1
>

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] lto-plugin: Add path to libatomic for riscv64
  2022-07-04 12:28 ` Richard Biener
@ 2022-07-04 12:28   ` Richard Biener
  2022-07-04 13:09     ` Martin Liška
  0 siblings, 1 reply; 10+ messages in thread
From: Richard Biener @ 2022-07-04 12:28 UTC (permalink / raw)
  To: Martin Liška; +Cc: GCC Patches, Kito Cheng

On Mon, Jul 4, 2022 at 2:28 PM Richard Biener
<richard.guenther@gmail.com> wrote:
>
> On Mon, Jul 4, 2022 at 1:32 PM Martin Liška <mliska@suse.cz> wrote:
> >
> > Similarly to libgo, we need to provide -L for targets where
> > libpthread does depends on libatomic.
> >
> > Ready for master?
>
> OK

... but ... is libatomic properly built for the host?  libgo is a
target library.
>
> >         PR bootstrap/106156
> >
> > lto-plugin/ChangeLog:
> >
> >         * Makefile.am: Use PTHREAD_CFLAGS.
> >         * Makefile.in: Regenerate.
> >         * configure.ac: Detect if PTHREAD_CFLAGS should contain path
> >         to libatomic.
> >         * configure: Regenerate.
> > ---
> >  lto-plugin/Makefile.am  |  2 +-
> >  lto-plugin/Makefile.in  |  3 ++-
> >  lto-plugin/configure    | 34 ++++++++++++++++++++++++++++++++--
> >  lto-plugin/configure.ac | 17 +++++++++++++++++
> >  4 files changed, 52 insertions(+), 4 deletions(-)
> >
> > diff --git a/lto-plugin/Makefile.am b/lto-plugin/Makefile.am
> > index 81362eafc36..64a6bc8c943 100644
> > --- a/lto-plugin/Makefile.am
> > +++ b/lto-plugin/Makefile.am
> > @@ -10,7 +10,7 @@ libexecsubdir := $(libexecdir)/gcc/$(real_target_noncanonical)/$(gcc_version)$(a
> >  AM_CPPFLAGS = -I$(top_srcdir)/../include $(DEFS)
> >  AM_CFLAGS = @ac_lto_plugin_warn_cflags@ $(CET_HOST_FLAGS)
> >  # The plug-in depends on pthreads.
> > -AM_LDFLAGS = -pthread @ac_lto_plugin_ldflags@
> > +AM_LDFLAGS = $(PTHREAD_CFLAGS) @ac_lto_plugin_ldflags@
> >  AM_LIBTOOLFLAGS = --tag=disable-static
> >  override CFLAGS := $(filter-out -fsanitize=address -fsanitize=hwaddress,$(CFLAGS))
> >  override LDFLAGS := $(filter-out -fsanitize=address -fsanitize=hwaddress,$(LDFLAGS))
> > diff --git a/lto-plugin/Makefile.in b/lto-plugin/Makefile.in
> > index 2033dd9b7c2..de19c8873de 100644
> > --- a/lto-plugin/Makefile.in
> > +++ b/lto-plugin/Makefile.in
> > @@ -264,6 +264,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
> >  PACKAGE_URL = @PACKAGE_URL@
> >  PACKAGE_VERSION = @PACKAGE_VERSION@
> >  PATH_SEPARATOR = @PATH_SEPARATOR@
> > +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
> >  RANLIB = @RANLIB@
> >  SED = @SED@
> >  SET_MAKE = @SET_MAKE@
> > @@ -345,7 +346,7 @@ libexecsubdir := $(libexecdir)/gcc/$(real_target_noncanonical)/$(gcc_version)$(a
> >  AM_CPPFLAGS = -I$(top_srcdir)/../include $(DEFS)
> >  AM_CFLAGS = @ac_lto_plugin_warn_cflags@ $(CET_HOST_FLAGS)
> >  # The plug-in depends on pthreads.
> > -AM_LDFLAGS = -pthread @ac_lto_plugin_ldflags@
> > +AM_LDFLAGS = $(PTHREAD_CFLAGS) @ac_lto_plugin_ldflags@
> >  AM_LIBTOOLFLAGS = --tag=disable-static
> >  libexecsub_LTLIBRARIES = liblto_plugin.la
> >  in_gcc_libs = $(foreach lib, $(libexecsub_LTLIBRARIES), $(gcc_build_dir)/$(lib))
> > diff --git a/lto-plugin/configure b/lto-plugin/configure
> > index aaa91a63623..aa35bd94b3f 100755
> > --- a/lto-plugin/configure
> > +++ b/lto-plugin/configure
> > @@ -650,6 +650,7 @@ LD
> >  FGREP
> >  SED
> >  LIBTOOL
> > +PTHREAD_CFLAGS
> >  LTO_PLUGIN_USE_SYMVER_SUN_FALSE
> >  LTO_PLUGIN_USE_SYMVER_SUN_TRUE
> >  LTO_PLUGIN_USE_SYMVER_GNU_FALSE
> > @@ -6020,6 +6021,35 @@ fi
> >
> >
> >
> > +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -pthread is supported" >&5
> > +$as_echo_n "checking whether -pthread is supported... " >&6; }
> > +if ${lto_plugin_cv_lib_pthread+:} false; then :
> > +  $as_echo_n "(cached) " >&6
> > +else
> > +  CFLAGS_hold=$CFLAGS
> > +CFLAGS="$CFLAGS -pthread -L../$build/libatomic/.libs"
> > +cat confdefs.h - <<_ACEOF >conftest.$ac_ext
> > +/* end confdefs.h.  */
> > +int i;
> > +_ACEOF
> > +if ac_fn_c_try_compile "$LINENO"; then :
> > +  lto_plugin_cv_lib_pthread=yes
> > +else
> > +  lto_plugin_cv_lib_pthread=no
> > +fi
> > +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
> > +CFLAGS=$CFLAGS_hold
> > +fi
> > +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lto_plugin_cv_lib_pthread" >&5
> > +$as_echo "$lto_plugin_cv_lib_pthread" >&6; }
> > +PTHREAD_CFLAGS=
> > +if test "$libgo_cv_lib_pthread" = yes; then
> > +  # RISC-V apparently adds -latomic when using -pthread.
> > +  PTHREAD_CFLAGS="-pthread -L../$build/libatomic/.libs"
> > +fi
> > +
> > +
> > +
> >  case `pwd` in
> >    *\ * | *\    *)
> >      { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
> > @@ -12091,7 +12121,7 @@ else
> >    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
> >    lt_status=$lt_dlunknown
> >    cat > conftest.$ac_ext <<_LT_EOF
> > -#line 12094 "configure"
> > +#line 12124 "configure"
> >  #include "confdefs.h"
> >
> >  #if HAVE_DLFCN_H
> > @@ -12197,7 +12227,7 @@ else
> >    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
> >    lt_status=$lt_dlunknown
> >    cat > conftest.$ac_ext <<_LT_EOF
> > -#line 12200 "configure"
> > +#line 12230 "configure"
> >  #include "confdefs.h"
> >
> >  #if HAVE_DLFCN_H
> > diff --git a/lto-plugin/configure.ac b/lto-plugin/configure.ac
> > index c2ec512880f..ba34a5d0ca1 100644
> > --- a/lto-plugin/configure.ac
> > +++ b/lto-plugin/configure.ac
> > @@ -91,6 +91,23 @@ AM_CONDITIONAL(LTO_PLUGIN_USE_SYMVER_SUN, [test "x$lto_plugin_use_symver" = xsun
> >  AC_CHECK_HEADER(pthread.h,
> >    [AC_DEFINE(HAVE_PTHREAD_H, 1, [Define to 1 if pthread.h is present.])])
> >
> > +dnl Test whether the compiler supports the -pthread option.
> > +AC_CACHE_CHECK([whether -pthread is supported],
> > +[lto_plugin_cv_lib_pthread],
> > +[CFLAGS_hold=$CFLAGS
> > +CFLAGS="$CFLAGS -pthread -L../$build/libatomic/.libs"
> > +AC_COMPILE_IFELSE([AC_LANG_SOURCE([int i;])],
> > +[lto_plugin_cv_lib_pthread=yes],
> > +[lto_plugin_cv_lib_pthread=no])
> > +CFLAGS=$CFLAGS_hold])
> > +PTHREAD_CFLAGS=
> > +if test "$libgo_cv_lib_pthread" = yes; then
> > +  # RISC-V apparently adds -latomic when using -pthread.
> > +  PTHREAD_CFLAGS="-pthread -L../$build/libatomic/.libs"
> > +fi
> > +AC_SUBST(PTHREAD_CFLAGS)
> > +
> > +
> >  AM_PROG_LIBTOOL
> >  ACX_LT_HOST_FLAGS
> >  AC_SUBST(target_noncanonical)
> > --
> > 2.36.1
> >

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] lto-plugin: Add path to libatomic for riscv64
  2022-07-04 12:28   ` Richard Biener
@ 2022-07-04 13:09     ` Martin Liška
  2022-07-05  7:27       ` Richard Biener
  0 siblings, 1 reply; 10+ messages in thread
From: Martin Liška @ 2022-07-04 13:09 UTC (permalink / raw)
  To: Richard Biener; +Cc: GCC Patches, Kito Cheng

On 7/4/22 14:28, Richard Biener wrote:
> ... but ... is libatomic properly built for the host?  libgo is a
> target library.

You're correct.

Well, so the host library should be taken, which works for stage1 lto-plugin:

[  668s] libtool: link: gcc -shared  -fPIC -DPIC  .libs/lto-plugin.o    -pthread -static-libgcc -Wl,--version-script=../../lto-plugin/lto-plugin.map -static-libstdc++ -static-libgcc ../libiberty/pic/libiberty.a   -pthread -Wl,-soname -Wl,liblto_plugin.so -o .libs/liblto_p

while it fails in stage2:

[ 7129s] libtool: link:  /home/abuild/rpmbuild/BUILD/gcc-13.0.0+git194120/obj-riscv64-suse-linux/./prev-gcc/xgcc -B/home/abuild/rpmbuild/BUILD/gcc-13.0.0+git194120/obj-riscv64-suse-linux/./prev-gcc/ -B/usr/riscv64-suse-linux/bin/ -B/usr/riscv64-suse-linux/bin/ -B/usr/riscv64-suse-linux/lib/ -isystem /usr/riscv64-suse-linux/include -isystem /usr/riscv64-suse-linux/sys-include   -fno-checking -shared  -fPIC -DPIC  .libs/lto-plugin.o    -pthread -static-libgcc -Wl,--version-script=../../lto-plugin/lto-plugin.map -static-libstdc++ -static-libgcc ../libiberty/pic/libiberty.a   -pthread -Wl,-soname -Wl,liblto_plugin.so -o .libs/liblto_plugin.so

Where the system compiler takes the library from:
/usr/lib/gcc/riscv64-linux-gnu/11/libatomic.so

that points to system library location:
ls -l /usr/lib/gcc/riscv64-linux-gnu/11/libatomic.so
lrwxrwxrwx 1 root root 41 Mar 24 14:22 /usr/lib/gcc/riscv64-linux-gnu/11/libatomic.so -> ../../../riscv64-linux-gnu/libatomic.so.1

So the question is how to fix that?

Martin


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] lto-plugin: Add path to libatomic for riscv64
  2022-07-04 13:09     ` Martin Liška
@ 2022-07-05  7:27       ` Richard Biener
  2022-07-07 11:43         ` [PATCH] lto-plugin: use locking only for selected targets Martin Liška
  0 siblings, 1 reply; 10+ messages in thread
From: Richard Biener @ 2022-07-05  7:27 UTC (permalink / raw)
  To: Martin Liška; +Cc: GCC Patches, Kito Cheng

On Mon, Jul 4, 2022 at 3:09 PM Martin Liška <mliska@suse.cz> wrote:
>
> On 7/4/22 14:28, Richard Biener wrote:
> > ... but ... is libatomic properly built for the host?  libgo is a
> > target library.
>
> You're correct.
>
> Well, so the host library should be taken, which works for stage1 lto-plugin:
>
> [  668s] libtool: link: gcc -shared  -fPIC -DPIC  .libs/lto-plugin.o    -pthread -static-libgcc -Wl,--version-script=../../lto-plugin/lto-plugin.map -static-libstdc++ -static-libgcc ../libiberty/pic/libiberty.a   -pthread -Wl,-soname -Wl,liblto_plugin.so -o .libs/liblto_p
>
> while it fails in stage2:
>
> [ 7129s] libtool: link:  /home/abuild/rpmbuild/BUILD/gcc-13.0.0+git194120/obj-riscv64-suse-linux/./prev-gcc/xgcc -B/home/abuild/rpmbuild/BUILD/gcc-13.0.0+git194120/obj-riscv64-suse-linux/./prev-gcc/ -B/usr/riscv64-suse-linux/bin/ -B/usr/riscv64-suse-linux/bin/ -B/usr/riscv64-suse-linux/lib/ -isystem /usr/riscv64-suse-linux/include -isystem /usr/riscv64-suse-linux/sys-include   -fno-checking -shared  -fPIC -DPIC  .libs/lto-plugin.o    -pthread -static-libgcc -Wl,--version-script=../../lto-plugin/lto-plugin.map -static-libstdc++ -static-libgcc ../libiberty/pic/libiberty.a   -pthread -Wl,-soname -Wl,liblto_plugin.so -o .libs/liblto_plugin.so
>
> Where the system compiler takes the library from:
> /usr/lib/gcc/riscv64-linux-gnu/11/libatomic.so
>
> that points to system library location:
> ls -l /usr/lib/gcc/riscv64-linux-gnu/11/libatomic.so
> lrwxrwxrwx 1 root root 41 Mar 24 14:22 /usr/lib/gcc/riscv64-linux-gnu/11/libatomic.so -> ../../../riscv64-linux-gnu/libatomic.so.1
>
> So the question is how to fix that?

We'd need to add libatomic as host_module in Makefile.def and also
bootstrap that (since lto-plugin is bootstrapped), plus adding
the required dependency.  At least for the targets that need this.

Or give up and use better means of serialization or use a whitelist
for now (via lto-plugin configury) and leave
all not covered targets not thread-safe (see also the mingw bugreport).

Richard.

>
> Martin
>

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH] lto-plugin: use locking only for selected targets
  2022-07-05  7:27       ` Richard Biener
@ 2022-07-07 11:43         ` Martin Liška
  2022-07-07 11:46           ` Richard Biener
  0 siblings, 1 reply; 10+ messages in thread
From: Martin Liška @ 2022-07-07 11:43 UTC (permalink / raw)
  To: gcc-patches

For now, support locking only for linux targets that are different from
riscv* where the target depends on libatomic (and fails during
bootstrap).

Patch can bootstrap on x86_64-linux-gnu and survives regression tests.

Ready to be installed?
Thanks,
Martin

	PR lto/106170

lto-plugin/ChangeLog:

	* configure.ac: Configure HAVE_PTHREAD_LOCKING.
	* lto-plugin.c (LOCK_SECTION): New.
	(UNLOCK_SECTION): New.
	(claim_file_handler): Use the newly added macros.
	(onload): Likewise.
	* config.h.in: Regenerate.
	* configure: Regenerate.
---
 lto-plugin/config.h.in  |  4 ++--
 lto-plugin/configure    | 20 ++++++++++++++------
 lto-plugin/configure.ac | 17 +++++++++++++++--
 lto-plugin/lto-plugin.c | 30 ++++++++++++++++++++----------
 4 files changed, 51 insertions(+), 20 deletions(-)

diff --git a/lto-plugin/config.h.in b/lto-plugin/config.h.in
index 029e782f1ee..bf269f000d2 100644
--- a/lto-plugin/config.h.in
+++ b/lto-plugin/config.h.in
@@ -9,8 +9,8 @@
 /* Define to 1 if you have the <memory.h> header file. */
 #undef HAVE_MEMORY_H
 
-/* Define to 1 if pthread.h is present. */
-#undef HAVE_PTHREAD_H
+/* Define if the system-provided pthread locking mechanism. */
+#undef HAVE_PTHREAD_LOCKING
 
 /* Define to 1 if you have the <stdint.h> header file. */
 #undef HAVE_STDINT_H
diff --git a/lto-plugin/configure b/lto-plugin/configure
index aaa91a63623..7ea54e6008f 100755
--- a/lto-plugin/configure
+++ b/lto-plugin/configure
@@ -6011,14 +6011,22 @@ fi
 
 
 # Check for thread headers.
-ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default"
-if test "x$ac_cv_header_pthread_h" = xyes; then :
+use_locking=no
 
-$as_echo "#define HAVE_PTHREAD_H 1" >>confdefs.h
+case $target in
+  riscv*)
+    # do not use locking as pthread depends on libatomic
+    ;;
+  *-linux*)
+    use_locking=yes
+    ;;
+esac
 
-fi
+if test x$use_locking = xyes; then
 
+$as_echo "#define HAVE_PTHREAD_LOCKING 1" >>confdefs.h
 
+fi
 
 case `pwd` in
   *\ * | *\	*)
@@ -12091,7 +12099,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 12094 "configure"
+#line 12102 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -12197,7 +12205,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 12200 "configure"
+#line 12208 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
diff --git a/lto-plugin/configure.ac b/lto-plugin/configure.ac
index c2ec512880f..69bc5139193 100644
--- a/lto-plugin/configure.ac
+++ b/lto-plugin/configure.ac
@@ -88,8 +88,21 @@ AM_CONDITIONAL(LTO_PLUGIN_USE_SYMVER_GNU, [test "x$lto_plugin_use_symver" = xgnu
 AM_CONDITIONAL(LTO_PLUGIN_USE_SYMVER_SUN, [test "x$lto_plugin_use_symver" = xsun])
 
 # Check for thread headers.
-AC_CHECK_HEADER(pthread.h,
-  [AC_DEFINE(HAVE_PTHREAD_H, 1, [Define to 1 if pthread.h is present.])])
+use_locking=no
+
+case $target in
+  riscv*)
+    # do not use locking as pthread depends on libatomic
+    ;;
+  *-linux*)
+    use_locking=yes
+    ;;
+esac
+
+if test x$use_locking = xyes; then
+  AC_DEFINE(HAVE_PTHREAD_LOCKING, 1,
+  	    [Define if the system-provided pthread locking mechanism.])
+fi
 
 AM_PROG_LIBTOOL
 ACX_LT_HOST_FLAGS
diff --git a/lto-plugin/lto-plugin.c b/lto-plugin/lto-plugin.c
index 635e126946b..cba58f5999b 100644
--- a/lto-plugin/lto-plugin.c
+++ b/lto-plugin/lto-plugin.c
@@ -40,11 +40,7 @@ along with this program; see the file COPYING3.  If not see
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
-#if !HAVE_PTHREAD_H
-#error POSIX threads are mandatory dependency
 #endif
-#endif
-
 #if HAVE_STDINT_H
 #include <stdint.h>
 #endif
@@ -59,7 +55,9 @@ along with this program; see the file COPYING3.  If not see
 #include <unistd.h>
 #include <fcntl.h>
 #include <sys/types.h>
+#if HAVE_PTHREAD_LOCKING
 #include <pthread.h>
+#endif
 #ifdef HAVE_SYS_WAIT_H
 #include <sys/wait.h>
 #endif
@@ -162,9 +160,18 @@ enum symbol_style
   ss_uscore,	/* Underscore prefix all symbols.  */
 };
 
+#if HAVE_PTHREAD_LOCKING
 /* Plug-in mutex.  */
 static pthread_mutex_t plugin_lock;
 
+#define LOCK_SECTION pthread_mutex_lock (&plugin_lock)
+#define UNLOCK_SECTION pthread_mutex_unlock (&plugin_lock)
+#else
+
+#define LOCK_SECTION
+#define UNLOCK_SECTION
+#endif
+
 static char *arguments_file_name;
 static ld_plugin_register_claim_file register_claim_file;
 static ld_plugin_register_all_symbols_read register_all_symbols_read;
@@ -1270,18 +1277,18 @@ claim_file_handler (const struct ld_plugin_input_file *file, int *claimed)
 			      lto_file.symtab.syms);
       check (status == LDPS_OK, LDPL_FATAL, "could not add symbols");
 
-      pthread_mutex_lock (&plugin_lock);
+      LOCK_SECTION;
       num_claimed_files++;
       claimed_files =
 	xrealloc (claimed_files,
 		  num_claimed_files * sizeof (struct plugin_file_info));
       claimed_files[num_claimed_files - 1] = lto_file;
-      pthread_mutex_unlock (&plugin_lock);
+      UNLOCK_SECTION;
 
       *claimed = 1;
     }
 
-  pthread_mutex_lock (&plugin_lock);
+  LOCK_SECTION;
   if (offload_files == NULL)
     {
       /* Add dummy item to the start of the list.  */
@@ -1344,14 +1351,15 @@ claim_file_handler (const struct ld_plugin_input_file *file, int *claimed)
 	offload_files_last_lto = ofld;
       num_offload_files++;
     }
-  pthread_mutex_unlock (&plugin_lock);
+
+  UNLOCK_SECTION;
 
   goto cleanup;
 
  err:
-  pthread_mutex_lock (&plugin_lock);
+  LOCK_SECTION;
   non_claimed_files++;
-  pthread_mutex_unlock (&plugin_lock);
+  UNLOCK_SECTION;
   free (lto_file.name);
 
  cleanup:
@@ -1429,11 +1437,13 @@ onload (struct ld_plugin_tv *tv)
   struct ld_plugin_tv *p;
   enum ld_plugin_status status;
 
+#if HAVE_PTHREAD_LOCKING
   if (pthread_mutex_init (&plugin_lock, NULL) != 0)
     {
       fprintf (stderr, "mutex init failed\n");
       abort ();
     }
+#endif
 
   p = tv;
   while (p->tv_tag)
-- 
2.36.1


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] lto-plugin: use locking only for selected targets
  2022-07-07 11:43         ` [PATCH] lto-plugin: use locking only for selected targets Martin Liška
@ 2022-07-07 11:46           ` Richard Biener
  2022-07-07 11:52             ` Rainer Orth
  2022-07-07 13:18             ` Martin Liška
  0 siblings, 2 replies; 10+ messages in thread
From: Richard Biener @ 2022-07-07 11:46 UTC (permalink / raw)
  To: Martin Liška; +Cc: GCC Patches

On Thu, Jul 7, 2022 at 1:43 PM Martin Liška <mliska@suse.cz> wrote:
>
> For now, support locking only for linux targets that are different from
> riscv* where the target depends on libatomic (and fails during
> bootstrap).
>
> Patch can bootstrap on x86_64-linux-gnu and survives regression tests.
>
> Ready to be installed?

OK - that also resolves the mingw issue, correct?  I suppose we need
to be careful to not advertise v1 API (which includes threadsafeness)
when not HAVE_PTHREAD_LOCKING.

Thanks,
Richard.

> Thanks,
> Martin
>
>         PR lto/106170
>
> lto-plugin/ChangeLog:
>
>         * configure.ac: Configure HAVE_PTHREAD_LOCKING.
>         * lto-plugin.c (LOCK_SECTION): New.
>         (UNLOCK_SECTION): New.
>         (claim_file_handler): Use the newly added macros.
>         (onload): Likewise.
>         * config.h.in: Regenerate.
>         * configure: Regenerate.
> ---
>  lto-plugin/config.h.in  |  4 ++--
>  lto-plugin/configure    | 20 ++++++++++++++------
>  lto-plugin/configure.ac | 17 +++++++++++++++--
>  lto-plugin/lto-plugin.c | 30 ++++++++++++++++++++----------
>  4 files changed, 51 insertions(+), 20 deletions(-)
>
> diff --git a/lto-plugin/config.h.in b/lto-plugin/config.h.in
> index 029e782f1ee..bf269f000d2 100644
> --- a/lto-plugin/config.h.in
> +++ b/lto-plugin/config.h.in
> @@ -9,8 +9,8 @@
>  /* Define to 1 if you have the <memory.h> header file. */
>  #undef HAVE_MEMORY_H
>
> -/* Define to 1 if pthread.h is present. */
> -#undef HAVE_PTHREAD_H
> +/* Define if the system-provided pthread locking mechanism. */
> +#undef HAVE_PTHREAD_LOCKING
>
>  /* Define to 1 if you have the <stdint.h> header file. */
>  #undef HAVE_STDINT_H
> diff --git a/lto-plugin/configure b/lto-plugin/configure
> index aaa91a63623..7ea54e6008f 100755
> --- a/lto-plugin/configure
> +++ b/lto-plugin/configure
> @@ -6011,14 +6011,22 @@ fi
>
>
>  # Check for thread headers.
> -ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default"
> -if test "x$ac_cv_header_pthread_h" = xyes; then :
> +use_locking=no
>
> -$as_echo "#define HAVE_PTHREAD_H 1" >>confdefs.h
> +case $target in
> +  riscv*)
> +    # do not use locking as pthread depends on libatomic
> +    ;;
> +  *-linux*)
> +    use_locking=yes
> +    ;;
> +esac
>
> -fi
> +if test x$use_locking = xyes; then
>
> +$as_echo "#define HAVE_PTHREAD_LOCKING 1" >>confdefs.h
>
> +fi
>
>  case `pwd` in
>    *\ * | *\    *)
> @@ -12091,7 +12099,7 @@ else
>    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
>    lt_status=$lt_dlunknown
>    cat > conftest.$ac_ext <<_LT_EOF
> -#line 12094 "configure"
> +#line 12102 "configure"
>  #include "confdefs.h"
>
>  #if HAVE_DLFCN_H
> @@ -12197,7 +12205,7 @@ else
>    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
>    lt_status=$lt_dlunknown
>    cat > conftest.$ac_ext <<_LT_EOF
> -#line 12200 "configure"
> +#line 12208 "configure"
>  #include "confdefs.h"
>
>  #if HAVE_DLFCN_H
> diff --git a/lto-plugin/configure.ac b/lto-plugin/configure.ac
> index c2ec512880f..69bc5139193 100644
> --- a/lto-plugin/configure.ac
> +++ b/lto-plugin/configure.ac
> @@ -88,8 +88,21 @@ AM_CONDITIONAL(LTO_PLUGIN_USE_SYMVER_GNU, [test "x$lto_plugin_use_symver" = xgnu
>  AM_CONDITIONAL(LTO_PLUGIN_USE_SYMVER_SUN, [test "x$lto_plugin_use_symver" = xsun])
>
>  # Check for thread headers.
> -AC_CHECK_HEADER(pthread.h,
> -  [AC_DEFINE(HAVE_PTHREAD_H, 1, [Define to 1 if pthread.h is present.])])
> +use_locking=no
> +
> +case $target in
> +  riscv*)
> +    # do not use locking as pthread depends on libatomic
> +    ;;
> +  *-linux*)
> +    use_locking=yes
> +    ;;
> +esac
> +
> +if test x$use_locking = xyes; then
> +  AC_DEFINE(HAVE_PTHREAD_LOCKING, 1,
> +           [Define if the system-provided pthread locking mechanism.])
> +fi
>
>  AM_PROG_LIBTOOL
>  ACX_LT_HOST_FLAGS
> diff --git a/lto-plugin/lto-plugin.c b/lto-plugin/lto-plugin.c
> index 635e126946b..cba58f5999b 100644
> --- a/lto-plugin/lto-plugin.c
> +++ b/lto-plugin/lto-plugin.c
> @@ -40,11 +40,7 @@ along with this program; see the file COPYING3.  If not see
>
>  #ifdef HAVE_CONFIG_H
>  #include "config.h"
> -#if !HAVE_PTHREAD_H
> -#error POSIX threads are mandatory dependency
>  #endif
> -#endif
> -
>  #if HAVE_STDINT_H
>  #include <stdint.h>
>  #endif
> @@ -59,7 +55,9 @@ along with this program; see the file COPYING3.  If not see
>  #include <unistd.h>
>  #include <fcntl.h>
>  #include <sys/types.h>
> +#if HAVE_PTHREAD_LOCKING
>  #include <pthread.h>
> +#endif
>  #ifdef HAVE_SYS_WAIT_H
>  #include <sys/wait.h>
>  #endif
> @@ -162,9 +160,18 @@ enum symbol_style
>    ss_uscore,   /* Underscore prefix all symbols.  */
>  };
>
> +#if HAVE_PTHREAD_LOCKING
>  /* Plug-in mutex.  */
>  static pthread_mutex_t plugin_lock;
>
> +#define LOCK_SECTION pthread_mutex_lock (&plugin_lock)
> +#define UNLOCK_SECTION pthread_mutex_unlock (&plugin_lock)
> +#else
> +
> +#define LOCK_SECTION
> +#define UNLOCK_SECTION
> +#endif
> +
>  static char *arguments_file_name;
>  static ld_plugin_register_claim_file register_claim_file;
>  static ld_plugin_register_all_symbols_read register_all_symbols_read;
> @@ -1270,18 +1277,18 @@ claim_file_handler (const struct ld_plugin_input_file *file, int *claimed)
>                               lto_file.symtab.syms);
>        check (status == LDPS_OK, LDPL_FATAL, "could not add symbols");
>
> -      pthread_mutex_lock (&plugin_lock);
> +      LOCK_SECTION;
>        num_claimed_files++;
>        claimed_files =
>         xrealloc (claimed_files,
>                   num_claimed_files * sizeof (struct plugin_file_info));
>        claimed_files[num_claimed_files - 1] = lto_file;
> -      pthread_mutex_unlock (&plugin_lock);
> +      UNLOCK_SECTION;
>
>        *claimed = 1;
>      }
>
> -  pthread_mutex_lock (&plugin_lock);
> +  LOCK_SECTION;
>    if (offload_files == NULL)
>      {
>        /* Add dummy item to the start of the list.  */
> @@ -1344,14 +1351,15 @@ claim_file_handler (const struct ld_plugin_input_file *file, int *claimed)
>         offload_files_last_lto = ofld;
>        num_offload_files++;
>      }
> -  pthread_mutex_unlock (&plugin_lock);
> +
> +  UNLOCK_SECTION;
>
>    goto cleanup;
>
>   err:
> -  pthread_mutex_lock (&plugin_lock);
> +  LOCK_SECTION;
>    non_claimed_files++;
> -  pthread_mutex_unlock (&plugin_lock);
> +  UNLOCK_SECTION;
>    free (lto_file.name);
>
>   cleanup:
> @@ -1429,11 +1437,13 @@ onload (struct ld_plugin_tv *tv)
>    struct ld_plugin_tv *p;
>    enum ld_plugin_status status;
>
> +#if HAVE_PTHREAD_LOCKING
>    if (pthread_mutex_init (&plugin_lock, NULL) != 0)
>      {
>        fprintf (stderr, "mutex init failed\n");
>        abort ();
>      }
> +#endif
>
>    p = tv;
>    while (p->tv_tag)
> --
> 2.36.1
>

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] lto-plugin: use locking only for selected targets
  2022-07-07 11:46           ` Richard Biener
@ 2022-07-07 11:52             ` Rainer Orth
  2022-07-07 13:18               ` Martin Liška
  2022-07-07 13:18             ` Martin Liška
  1 sibling, 1 reply; 10+ messages in thread
From: Rainer Orth @ 2022-07-07 11:52 UTC (permalink / raw)
  To: Richard Biener via Gcc-patches

Richard Biener via Gcc-patches <gcc-patches@gcc.gnu.org> writes:

>> +if test x$use_locking = xyes; then
>> +  AC_DEFINE(HAVE_PTHREAD_LOCKING, 1,
>> +           [Define if the system-provided pthread locking mechanism.])

This isn't even a sentence.  At least I cannot parse it.  Besides, it
seems to be misnamed since the test doesn't check if pthread_mutex_lock
and friends are present on the target, but if they should be used.

	Rainer

-- 
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] lto-plugin: use locking only for selected targets
  2022-07-07 11:52             ` Rainer Orth
@ 2022-07-07 13:18               ` Martin Liška
  0 siblings, 0 replies; 10+ messages in thread
From: Martin Liška @ 2022-07-07 13:18 UTC (permalink / raw)
  To: Rainer Orth, Richard Biener via Gcc-patches

[-- Attachment #1: Type: text/plain, Size: 536 bytes --]

On 7/7/22 13:52, Rainer Orth wrote:
> Richard Biener via Gcc-patches <gcc-patches@gcc.gnu.org> writes:
> 
>>> +if test x$use_locking = xyes; then
>>> +  AC_DEFINE(HAVE_PTHREAD_LOCKING, 1,
>>> +           [Define if the system-provided pthread locking mechanism.])
> 
> This isn't even a sentence.  At least I cannot parse it.  Besides, it
> seems to be misnamed since the test doesn't check if pthread_mutex_lock
> and friends are present on the target, but if they should be used.

You are right, fixed in v2.

Martin

> 
> 	Rainer
> 

[-- Attachment #2: 0001-lto-plugin-use-locking-only-for-selected-targets.patch --]
[-- Type: text/x-patch, Size: 6208 bytes --]

From 0c3380e64dc769b4bc00568395468bdf02e74f6f Mon Sep 17 00:00:00 2001
From: Martin Liska <mliska@suse.cz>
Date: Thu, 7 Jul 2022 12:15:28 +0200
Subject: [PATCH] lto-plugin: use locking only for selected targets

For now, support locking only for linux targets that are different from
riscv* where the target depends on libatomic (and fails during
bootstrap).

	PR lto/106170

lto-plugin/ChangeLog:

	* configure.ac: Configure HAVE_PTHREAD_LOCKING.
	* lto-plugin.c (LOCK_SECTION): New.
	(UNLOCK_SECTION): New.
	(claim_file_handler): Use the newly added macros.
	(onload): Likewise.
	* config.h.in: Regenerate.
	* configure: Regenerate.
---
 lto-plugin/config.h.in  |  4 ++--
 lto-plugin/configure    | 21 +++++++++++++++++----
 lto-plugin/configure.ac | 17 +++++++++++++++--
 lto-plugin/lto-plugin.c | 29 +++++++++++++++++++----------
 4 files changed, 53 insertions(+), 18 deletions(-)

diff --git a/lto-plugin/config.h.in b/lto-plugin/config.h.in
index 029e782f1ee..8eb9c8aa47d 100644
--- a/lto-plugin/config.h.in
+++ b/lto-plugin/config.h.in
@@ -9,8 +9,8 @@
 /* Define to 1 if you have the <memory.h> header file. */
 #undef HAVE_MEMORY_H
 
-/* Define to 1 if pthread.h is present. */
-#undef HAVE_PTHREAD_H
+/* Define if the system provides pthread locking mechanism. */
+#undef HAVE_PTHREAD_LOCKING
 
 /* Define to 1 if you have the <stdint.h> header file. */
 #undef HAVE_STDINT_H
diff --git a/lto-plugin/configure b/lto-plugin/configure
index aaa91a63623..870e49b2e62 100755
--- a/lto-plugin/configure
+++ b/lto-plugin/configure
@@ -6011,14 +6011,27 @@ fi
 
 
 # Check for thread headers.
-ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default"
+use_locking=no
+
+case $target in
+  riscv*)
+    # do not use locking as pthread depends on libatomic
+    ;;
+  *-linux*)
+    use_locking=yes
+    ;;
+esac
+
+if test x$use_locking = xyes; then
+  ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default"
 if test "x$ac_cv_header_pthread_h" = xyes; then :
 
-$as_echo "#define HAVE_PTHREAD_H 1" >>confdefs.h
+$as_echo "#define HAVE_PTHREAD_LOCKING 1" >>confdefs.h
 
 fi
 
 
+fi
 
 case `pwd` in
   *\ * | *\	*)
@@ -12091,7 +12104,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 12094 "configure"
+#line 12107 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -12197,7 +12210,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 12200 "configure"
+#line 12213 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
diff --git a/lto-plugin/configure.ac b/lto-plugin/configure.ac
index c2ec512880f..18eb4f60b0a 100644
--- a/lto-plugin/configure.ac
+++ b/lto-plugin/configure.ac
@@ -88,8 +88,21 @@ AM_CONDITIONAL(LTO_PLUGIN_USE_SYMVER_GNU, [test "x$lto_plugin_use_symver" = xgnu
 AM_CONDITIONAL(LTO_PLUGIN_USE_SYMVER_SUN, [test "x$lto_plugin_use_symver" = xsun])
 
 # Check for thread headers.
-AC_CHECK_HEADER(pthread.h,
-  [AC_DEFINE(HAVE_PTHREAD_H, 1, [Define to 1 if pthread.h is present.])])
+use_locking=no
+
+case $target in
+  riscv*)
+    # do not use locking as pthread depends on libatomic
+    ;;
+  *-linux*)
+    use_locking=yes
+    ;;
+esac
+
+if test x$use_locking = xyes; then
+  AC_CHECK_HEADER(pthread.h,
+    [AC_DEFINE(HAVE_PTHREAD_LOCKING, 1, [Define if the system provides pthread locking mechanism.])])
+fi
 
 AM_PROG_LIBTOOL
 ACX_LT_HOST_FLAGS
diff --git a/lto-plugin/lto-plugin.c b/lto-plugin/lto-plugin.c
index 635e126946b..7927dca60a4 100644
--- a/lto-plugin/lto-plugin.c
+++ b/lto-plugin/lto-plugin.c
@@ -40,11 +40,7 @@ along with this program; see the file COPYING3.  If not see
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
-#if !HAVE_PTHREAD_H
-#error POSIX threads are mandatory dependency
 #endif
-#endif
-
 #if HAVE_STDINT_H
 #include <stdint.h>
 #endif
@@ -59,7 +55,9 @@ along with this program; see the file COPYING3.  If not see
 #include <unistd.h>
 #include <fcntl.h>
 #include <sys/types.h>
+#if HAVE_PTHREAD_LOCKING
 #include <pthread.h>
+#endif
 #ifdef HAVE_SYS_WAIT_H
 #include <sys/wait.h>
 #endif
@@ -162,9 +160,17 @@ enum symbol_style
   ss_uscore,	/* Underscore prefix all symbols.  */
 };
 
+#if HAVE_PTHREAD_LOCKING
 /* Plug-in mutex.  */
 static pthread_mutex_t plugin_lock;
 
+#define LOCK_SECTION pthread_mutex_lock (&plugin_lock)
+#define UNLOCK_SECTION pthread_mutex_unlock (&plugin_lock)
+#else
+#define LOCK_SECTION
+#define UNLOCK_SECTION
+#endif
+
 static char *arguments_file_name;
 static ld_plugin_register_claim_file register_claim_file;
 static ld_plugin_register_all_symbols_read register_all_symbols_read;
@@ -1270,18 +1276,18 @@ claim_file_handler (const struct ld_plugin_input_file *file, int *claimed)
 			      lto_file.symtab.syms);
       check (status == LDPS_OK, LDPL_FATAL, "could not add symbols");
 
-      pthread_mutex_lock (&plugin_lock);
+      LOCK_SECTION;
       num_claimed_files++;
       claimed_files =
 	xrealloc (claimed_files,
 		  num_claimed_files * sizeof (struct plugin_file_info));
       claimed_files[num_claimed_files - 1] = lto_file;
-      pthread_mutex_unlock (&plugin_lock);
+      UNLOCK_SECTION;
 
       *claimed = 1;
     }
 
-  pthread_mutex_lock (&plugin_lock);
+  LOCK_SECTION;
   if (offload_files == NULL)
     {
       /* Add dummy item to the start of the list.  */
@@ -1344,14 +1350,15 @@ claim_file_handler (const struct ld_plugin_input_file *file, int *claimed)
 	offload_files_last_lto = ofld;
       num_offload_files++;
     }
-  pthread_mutex_unlock (&plugin_lock);
+
+  UNLOCK_SECTION;
 
   goto cleanup;
 
  err:
-  pthread_mutex_lock (&plugin_lock);
+  LOCK_SECTION;
   non_claimed_files++;
-  pthread_mutex_unlock (&plugin_lock);
+  UNLOCK_SECTION;
   free (lto_file.name);
 
  cleanup:
@@ -1429,11 +1436,13 @@ onload (struct ld_plugin_tv *tv)
   struct ld_plugin_tv *p;
   enum ld_plugin_status status;
 
+#if HAVE_PTHREAD_LOCKING
   if (pthread_mutex_init (&plugin_lock, NULL) != 0)
     {
       fprintf (stderr, "mutex init failed\n");
       abort ();
     }
+#endif
 
   p = tv;
   while (p->tv_tag)
-- 
2.36.1


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] lto-plugin: use locking only for selected targets
  2022-07-07 11:46           ` Richard Biener
  2022-07-07 11:52             ` Rainer Orth
@ 2022-07-07 13:18             ` Martin Liška
  1 sibling, 0 replies; 10+ messages in thread
From: Martin Liška @ 2022-07-07 13:18 UTC (permalink / raw)
  To: Richard Biener; +Cc: GCC Patches

On 7/7/22 13:46, Richard Biener wrote:
> OK - that also resolves the mingw issue, correct?  I suppose we need

Yes.

> to be careful to not advertise v1 API (which includes threadsafeness)
> when not HAVE_PTHREAD_LOCKING.

Will reflect that in the patch.

I'm going to push it now.

Martin

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2022-07-07 13:18 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-07-04 11:32 [PATCH] lto-plugin: Add path to libatomic for riscv64 Martin Liška
2022-07-04 12:28 ` Richard Biener
2022-07-04 12:28   ` Richard Biener
2022-07-04 13:09     ` Martin Liška
2022-07-05  7:27       ` Richard Biener
2022-07-07 11:43         ` [PATCH] lto-plugin: use locking only for selected targets Martin Liška
2022-07-07 11:46           ` Richard Biener
2022-07-07 11:52             ` Rainer Orth
2022-07-07 13:18               ` Martin Liška
2022-07-07 13:18             ` Martin Liška

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).