public inbox for binutils-cvs@sourceware.org
 help / color / mirror / Atom feed
* [binutils-gdb] libctf, tests: do not assume host and target have identical field offsets
@ 2023-04-08 15:49 Nick Alcock
  0 siblings, 0 replies; only message in thread
From: Nick Alcock @ 2023-04-08 15:49 UTC (permalink / raw)
  To: bfd-cvs, gdb-cvs

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=30a794e9f1db2de9099ed4c494d917d4e86de0fd

commit 30a794e9f1db2de9099ed4c494d917d4e86de0fd
Author: Nick Alcock <nick.alcock@oracle.com>
Date:   Wed Apr 5 16:36:45 2023 +0100

    libctf, tests: do not assume host and target have identical field offsets
    
    The newly-introduced libctf-lookup unnamed-field-info test checks
    C compiler-observed field offsets against libctf-computed ones
    by #including the testcase in the lookup runner as well as
    generating CTF for it.  This only works if the host, on which
    the lookup runner is compiled and executed, is the same architecture as
    the target, for which the CTF is generated: when crossing, the trick
    may fail.
    
    So pass down an indication of whether this is a cross into the
    testsuite, and add a new no_cross flag to .lk files that is used to
    suppress test execution when a cross-compiler is being tested.
    
    libctf/
            * Makefile.am (check_DEJAGNU): Pass down TEST_CROSS.
            * Makefile.in: Regenerated.
            * testsuite/lib/ctf-lib.exp (run_lookup_test): Use it to
            implement the new no_cross option.
            * testsuite/libctf-lookup/unnamed-field-info.lk: Mark as
            no_cross.

Diff:
---
 libctf/Makefile.am                                   |  7 ++++++-
 libctf/Makefile.in                                   |  7 ++++++-
 libctf/testsuite/lib/ctf-lib.exp                     | 12 +++++++++++-
 libctf/testsuite/libctf-lookup/unnamed-field-info.lk |  1 +
 4 files changed, 24 insertions(+), 3 deletions(-)

diff --git a/libctf/Makefile.am b/libctf/Makefile.am
index c959b09e492..b1dbc2f6ba4 100644
--- a/libctf/Makefile.am
+++ b/libctf/Makefile.am
@@ -92,10 +92,15 @@ check-DEJAGNU: site.exp development.exp
 	r=`pwd`; export r; \
 	LC_ALL=C; export LC_ALL; \
 	EXPECT=$(EXPECT); export EXPECT; \
+	if [ "@host@" = "@target@" ] ; then \
+	  TEST_CROSS=no; \
+	else \
+	  TEST_CROSS=yes; \
+	fi; \
 	runtest=$(RUNTEST); \
 	if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \
 	  $$runtest --tool $(DEJATOOL) --srcdir $${srcroot}/testsuite \
-		CC="$(CC)" CC_FOR_TARGET="$(CC_FOR_TARGET)" \
+		CC="$(CC)" CC_FOR_TARGET="$(CC_FOR_TARGET)" TEST_CROSS="$${TEST_CROSS}" \
 		CFLAGS="$(CFLAGS) -I$(INCDIR) -I$(srcdir) -I$(builddir) -I$(builddir)/../bfd $(ZLIBINC)" \
 		LIBS="$(libctf_nobfd_la_LIBADD) $(LIBS)" $(RUNTESTFLAGS); \
 	else echo "WARNING: could not find \`runtest'" 1>&2; :;\
diff --git a/libctf/Makefile.in b/libctf/Makefile.in
index c6cb55c9768..3d2696bcc47 100644
--- a/libctf/Makefile.in
+++ b/libctf/Makefile.in
@@ -1678,10 +1678,15 @@ check-DEJAGNU: site.exp development.exp
 	r=`pwd`; export r; \
 	LC_ALL=C; export LC_ALL; \
 	EXPECT=$(EXPECT); export EXPECT; \
+	if [ "@host@" = "@target@" ] ; then \
+	  TEST_CROSS=no; \
+	else \
+	  TEST_CROSS=yes; \
+	fi; \
 	runtest=$(RUNTEST); \
 	if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \
 	  $$runtest --tool $(DEJATOOL) --srcdir $${srcroot}/testsuite \
-		CC="$(CC)" CC_FOR_TARGET="$(CC_FOR_TARGET)" \
+		CC="$(CC)" CC_FOR_TARGET="$(CC_FOR_TARGET)" TEST_CROSS="$${TEST_CROSS}" \
 		CFLAGS="$(CFLAGS) -I$(INCDIR) -I$(srcdir) -I$(builddir) -I$(builddir)/../bfd $(ZLIBINC)" \
 		LIBS="$(libctf_nobfd_la_LIBADD) $(LIBS)" $(RUNTESTFLAGS); \
 	else echo "WARNING: could not find \`runtest'" 1>&2; :;\
diff --git a/libctf/testsuite/lib/ctf-lib.exp b/libctf/testsuite/lib/ctf-lib.exp
index 3ee82a00a33..73b67b45e34 100644
--- a/libctf/testsuite/lib/ctf-lib.exp
+++ b/libctf/testsuite/lib/ctf-lib.exp
@@ -103,6 +103,9 @@ proc compile_link_one_host_cc { src output additional_args } {
 #   xfail: GLOB|PROC ...
 #	This test is expected to fail on a specified list of targets.
 #
+#   no_cross:
+#       If set, do not run this test when host != target.
+#
 # Each option may occur at most once unless otherwise mentioned.
 #
 # After the option lines come regexp lines.  run_lookup_test calls
@@ -110,7 +113,7 @@ proc compile_link_one_host_cc { src output additional_args } {
 # regexps in FILE.d.
 #
 proc run_lookup_test { name } {
-    global CC_FOR_TARGET CFLAGS_FOR_TARGET LIBS
+    global CC_FOR_TARGET CFLAGS_FOR_TARGET LIBS TEST_CROSS
     global copyfile env runtests srcdir subdir verbose
 
     if ![runtest_file_p $runtests $name] then {
@@ -139,6 +142,7 @@ proc run_lookup_test { name } {
     set opts(name) {}
     set opts(source) {}
     set opts(xfail) {}
+    set opts(no_cross) {}
 
     foreach i $opt_array {
 	set opt_name [lindex $i 0]
@@ -156,6 +160,12 @@ proc run_lookup_test { name } {
 	set opts($opt_name) [concat $opts($opt_name) $opt_val]
     }
 
+    if { [llength $opts(no_cross)] != 0
+	 && "$TEST_CROSS" eq "yes" } {
+	untested "$subdir/$name not tested when cross-compiling"
+	return
+    }
+
     if { [llength $opts(lookup)] == 0 } {
 	set opts(lookup) "$file.c"
     } else {
diff --git a/libctf/testsuite/libctf-lookup/unnamed-field-info.lk b/libctf/testsuite/libctf-lookup/unnamed-field-info.lk
index eae6a517d50..680b8e0a4ca 100644
--- a/libctf/testsuite/libctf-lookup/unnamed-field-info.lk
+++ b/libctf/testsuite/libctf-lookup/unnamed-field-info.lk
@@ -1,2 +1,3 @@
 # source: unnamed-field-info-ctf.c
+# no_cross: yes
 Offset validation complete.

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2023-04-08 15:49 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-04-08 15:49 [binutils-gdb] libctf, tests: do not assume host and target have identical field offsets Nick Alcock

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).