[PATCH v5 GCC] libffi/test: Fix compilation for build sysroot

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

[PATCH v5 GCC] libffi/test: Fix compilation for build sysroot

Sourceware - libffi-discuss mailing list
Fix a problem with the libffi testsuite using a method to determine the
compiler to use resulting in the tool being different from one the
library has been built with, and causing a catastrophic failure from the
inability to actually choose any compiler at all in a cross-compilation
configuration.

Address this problem by providing a DejaGNU configuration file defining
the compiler to use, via the CC_FOR_TARGET TCL variable, set from $CC by
autoconf, which will have all the required options set for the target
compiler to build executables in the environment configured, removing
failures like:

FAIL: libffi.call/closure_fn0.c -W -Wall -Wno-psabi -O0 (test for excess errors)
Excess errors:
default_target_compile: No compiler to compile with
UNRESOLVED: libffi.call/closure_fn0.c -W -Wall -Wno-psabi -O0 compilation failed to produce executable

and bringing overall test results for the `riscv64-linux-gnu' target
(here with the `x86_64-linux-gnu' host and RISC-V QEMU in the Linux user
emulation mode as the target board) from:

                === libffi Summary ===

# of unexpected failures 708
# of unresolved testcases 708
# of unsupported tests 30

to:

                === libffi Summary ===

# of expected passes 1934
# of unsupported tests 28

This is a combined backport of the relevant parts of upstream libffi
changes as follows:

- commit 8308984e479e ("[PATCH] Make sure we're running dejagnu tests
  with the right compiler."),

- commit 2d9b3939751b ("[PATCH] Fix for closures with sunpro compiler"),

- commit 0c3824702d3d ("[PATCH] Always set CC_FOR_TARGET for dejagnu, to
  make the testsuite respect $CC"),

- commit 7d698125b1f0 ("[PATCH] Use the proper C++ compiler to run C++
  tests"),

- commit 6b6df1a7bb37 ("[PATCH] Adds `local.exp` to CLEANFILES"),

- commit 6cf0dea78a5a ("[PATCH] Change CLEANFILES to DISTCLEANFILES")

        libffi/
        * Makefile.am (DISTCLEANFILES): New variable.
        * configure.ac: Produce `local.exp'.
        * Makefile.in: Regenerate.
        * configure: Regenerate.
        * testsuite/Makefile.am (EXTRA_DEJAGNU_SITE_CONFIG): New
        variable.
        * testsuite/Makefile.in: Regenerate.
---
Hi,

 As you may recall I have proposed a clean solution for the problem
discussed here, which I posted for inclusion with upstream libffi, with an
intent to have it backported to GCC as soon as it has been accepted by the
maintainer, as a part of patch series that have been archived here:
<https://sourceware.org/pipermail/libffi-discuss/2020/002502.html>.

 I have pinged the series last week:
<https://sourceware.org/pipermail/libffi-discuss/2020/002517.html>,
and then again just now:
<https://sourceware.org/pipermail/libffi-discuss/2020/002518.html>.

 I think with the GCC 10 release about to be rolled out we need a
contingency plan, so I propose that, unless my proposed libffi changes
have been accepted upstream real soon now, such as by the end of this
coming Friday AoE, we include this change instead.

 Therefore, OK to apply once Friday AoE has passed and the upstream libffi
changes have gone nowhere?

  Maciej

[Change log corrected to include history before v4.]

Changes from v4:

- Replace with a backport of the partially complete solution already
  present upstream.

Changes from v3:

- Replace with a backport of a change submitted upstream.

Changes from v2:

- Revert to v1.

- Rename testsuite/libffi-test-support.exp.in to
  testsuite/libffi-site-extra.exp.in.

Changes from v1:

- Remove testsuite/libffi-test-support.exp.in and the associated changes.

- Pass $(CC) via `--tool_exec' in $(AM_RUNTESTFLAGS).
---
 libffi/Makefile.am           |    3 +++
 libffi/Makefile.in           |    4 ++++
 libffi/configure             |    5 +++++
 libffi/configure.ac          |    5 +++++
 libffi/testsuite/Makefile.am |    2 ++
 libffi/testsuite/Makefile.in |    1 +
 6 files changed, 20 insertions(+)

gcc-test-libffi-cc-for-target.diff
Index: gcc/libffi/Makefile.am
===================================================================
--- gcc.orig/libffi/Makefile.am
+++ gcc/libffi/Makefile.am
@@ -15,6 +15,9 @@ EXTRA_DIST = LICENSE ChangeLog.v1 Change
  libffi.xcodeproj/project.pbxproj \
  libtool-ldflags
 
+# local.exp is generated by configure
+DISTCLEANFILES = local.exp
+
 # Automake Documentation:
 # If your package has Texinfo files in many directories, you can use the
 # variable TEXINFO_TEX to tell Automake where to find the canonical
Index: gcc/libffi/Makefile.in
===================================================================
--- gcc.orig/libffi/Makefile.in
+++ gcc/libffi/Makefile.in
@@ -454,6 +454,9 @@ EXTRA_DIST = LICENSE ChangeLog.v1 Change
  libtool-ldflags
 
 
+# local.exp is generated by configure
+DISTCLEANFILES = local.exp
+
 # Automake Documentation:
 # If your package has Texinfo files in many directories, you can use the
 # variable TEXINFO_TEX to tell Automake where to find the canonical
@@ -1674,6 +1677,7 @@ installcheck: installcheck-recursive
  -rm -f src/x86/$(am__dirstamp)
  -rm -f src/xtensa/$(DEPDIR)/$(am__dirstamp)
  -rm -f src/xtensa/$(am__dirstamp)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
 
 maintainer-clean-generic:
  @echo "This command is intended for maintainers to use"
Index: gcc/libffi/configure
===================================================================
--- gcc.orig/libffi/configure
+++ gcc/libffi/configure
@@ -14961,6 +14961,11 @@ _ACEOF
 
 
 
+cat > local.exp <<EOF
+set CC_FOR_TARGET "$CC"
+set CXX_FOR_TARGET "$CXX"
+EOF
+
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5
 $as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
Index: gcc/libffi/configure.ac
===================================================================
--- gcc.orig/libffi/configure.ac
+++ gcc/libffi/configure.ac
@@ -61,6 +61,11 @@ AC_PROG_LIBTOOL
 # Test for 64-bit build.
 AC_CHECK_SIZEOF([size_t])
 
+cat > local.exp <<EOF
+set CC_FOR_TARGET "$CC"
+set CXX_FOR_TARGET "$CXX"
+EOF
+
 AM_MAINTAINER_MODE
 
 AC_CHECK_HEADERS(sys/mman.h)
Index: gcc/libffi/testsuite/Makefile.am
===================================================================
--- gcc.orig/libffi/testsuite/Makefile.am
+++ gcc/libffi/testsuite/Makefile.am
@@ -13,6 +13,8 @@ RUNTEST = `if [ -f $(top_srcdir)/../deja
 
 AM_RUNTESTFLAGS =
 
+EXTRA_DEJAGNU_SITE_CONFIG=../local.exp
+
 CLEANFILES = *.exe core* *.log *.sum
 
 EXTRA_DIST = config/default.exp libffi.call/cls_19byte.c \
Index: gcc/libffi/testsuite/Makefile.in
===================================================================
--- gcc.orig/libffi/testsuite/Makefile.in
+++ gcc/libffi/testsuite/Makefile.in
@@ -279,6 +279,7 @@ RUNTEST = `if [ -f $(top_srcdir)/../deja
        echo $(top_srcdir)/../dejagnu/runtest ; \
     else echo runtest; fi`
 
+EXTRA_DEJAGNU_SITE_CONFIG = ../local.exp
 CLEANFILES = *.exe core* *.log *.sum
 EXTRA_DIST = config/default.exp libffi.call/cls_19byte.c \
 libffi.call/cls_align_longdouble_split.c \
Reply | Threaded
Open this post in threaded view
|

Re: [PATCH v5 GCC] libffi/test: Fix compilation for build sysroot

Sourceware - libffi-discuss mailing list
On Mon, 2020-04-20 at 14:18 +0100, Maciej W. Rozycki wrote:

> Fix a problem with the libffi testsuite using a method to determine the
> compiler to use resulting in the tool being different from one the
> library has been built with, and causing a catastrophic failure from the
> inability to actually choose any compiler at all in a cross-compilation
> configuration.
>
> Address this problem by providing a DejaGNU configuration file defining
> the compiler to use, via the CC_FOR_TARGET TCL variable, set from $CC by
> autoconf, which will have all the required options set for the target
> compiler to build executables in the environment configured, removing
> failures like:
>
> FAIL: libffi.call/closure_fn0.c -W -Wall -Wno-psabi -O0 (test for excess
> errors)
> Excess errors:
> default_target_compile: No compiler to compile with
> UNRESOLVED: libffi.call/closure_fn0.c -W -Wall -Wno-psabi -O0 compilation
> failed to produce executable
>
> and bringing overall test results for the `riscv64-linux-gnu' target
> (here with the `x86_64-linux-gnu' host and RISC-V QEMU in the Linux user
> emulation mode as the target board) from:
>
> === libffi Summary ===
>
> # of unexpected failures 708
> # of unresolved testcases 708
> # of unsupported tests 30
>
> to:
>
> === libffi Summary ===
>
> # of expected passes 1934
> # of unsupported tests 28
>
> This is a combined backport of the relevant parts of upstream libffi
> changes as follows:
>
> - commit 8308984e479e ("[PATCH] Make sure we're running dejagnu tests
>   with the right compiler."),
>
> - commit 2d9b3939751b ("[PATCH] Fix for closures with sunpro compiler"),
>
> - commit 0c3824702d3d ("[PATCH] Always set CC_FOR_TARGET for dejagnu, to
>   make the testsuite respect $CC"),
>
> - commit 7d698125b1f0 ("[PATCH] Use the proper C++ compiler to run C++
>   tests"),
>
> - commit 6b6df1a7bb37 ("[PATCH] Adds `local.exp` to CLEANFILES"),
>
> - commit 6cf0dea78a5a ("[PATCH] Change CLEANFILES to DISTCLEANFILES")
>
> libffi/
> * Makefile.am (DISTCLEANFILES): New variable.
> * configure.ac: Produce `local.exp'.
> * Makefile.in: Regenerate.
> * configure: Regenerate.
> * testsuite/Makefile.am (EXTRA_DEJAGNU_SITE_CONFIG): New
> variable.
> * testsuite/Makefile.in: Regenerate.
OK
jeff
>

Reply | Threaded
Open this post in threaded view
|

Re: [PATCH v5 GCC] libffi/test: Fix compilation for build sysroot

Sourceware - libffi-discuss mailing list
On Wed, 22 Apr 2020, Jeff Law wrote:

> > libffi/
> > * Makefile.am (DISTCLEANFILES): New variable.
> > * configure.ac: Produce `local.exp'.
> > * Makefile.in: Regenerate.
> > * configure: Regenerate.
> > * testsuite/Makefile.am (EXTRA_DEJAGNU_SITE_CONFIG): New
> > variable.
> > * testsuite/Makefile.in: Regenerate.
> OK
> jeff

 Committed now then, according to schedule, thanks for your review.  We
may revisit the backport of improvements I previously proposed when/if the
upstream libffi maintainer decides to accept them.

  Maciej
Reply | Threaded
Open this post in threaded view
|

Re: [PATCH v5 GCC] libffi/test: Fix compilation for build sysroot

Sourceware - libffi-discuss mailing list
On Sat, 2020-04-25 at 21:33 +0100, Maciej W. Rozycki wrote:

> On Wed, 22 Apr 2020, Jeff Law wrote:
>
> > > libffi/
> > > * Makefile.am (DISTCLEANFILES): New variable.
> > > * configure.ac: Produce `local.exp'.
> > > * Makefile.in: Regenerate.
> > > * configure: Regenerate.
> > > * testsuite/Makefile.am (EXTRA_DEJAGNU_SITE_CONFIG): New
> > > variable.
> > > * testsuite/Makefile.in: Regenerate.
> > OK
> > jeff
>
>  Committed now then, according to schedule, thanks for your review.  We
> may revisit the backport of improvements I previously proposed when/if the
> upstream libffi maintainer decides to accept them.
ACK.

FWIW, I'm expecting Florian to be digging into some libffi stuff relatively soon
and once those issues are ironed out, there'll be a push for a libffi upstream
release -- which seems like a good place to re-sync GCC to the upstream libffi
master.

jeff

Reply | Threaded
Open this post in threaded view
|

Re: [PATCH v5 GCC] libffi/test: Fix compilation for build sysroot

Florian Weimer
* Jeff Law via Libffi-discuss:

> FWIW, I'm expecting Florian to be digging into some libffi stuff
> relatively soon and once those issues are ironed out, there'll be a
> push for a libffi upstream release -- which seems like a good place
> to re-sync GCC to the upstream libffi master.

I'm not going to work on the master branch for now, so this should not
impact the release.  The goal is specifically to support more hardware
for legacy binaries with the old libffi.so.6 soname.