Patchwork [testsuite] Clean up gdb.trace results

login
register
mail settings
Submitter Sandra Loosemore
Date Oct. 7, 2018, 1:09 a.m.
Message ID <3f5d484c-d001-0447-ebb9-9e906218a5f7@codesourcery.com>
Download mbox | patch
Permalink /patch/29667/
State Under Review
Headers show

Comments

Sandra Loosemore - Oct. 7, 2018, 1:09 a.m.
Continuing through my pile of testsuite problems found while working on 
cleaning up nios2 test results....

I found that the results for the gdb.trace tests were really messy on 
targets that don't support the trace features.  The trouble affected 
various other embedded targets I tried, not just nios2.  Specific 
problems included:

* The header file trace-common.h that is used by most of the test 
programs in this directory causes multiple compilation errors (not just 
the obvious preprocessor #error) on architectures it doesn't know about, 
and the checks in the .exp files for successful compilation of the test 
case didn't distinguish between failures for missing arch support 
(should have "unsupported" status) and failures due to unknown causes 
(should be "untested").  My understanding is that adding arch support to 
trace-common.h won't do anything useful without implementing the 
underlying fast tracepoint support too.

* Several test cases depend on linking with/loading a shared library for 
in-process trace without checking for shared library support on the target.

* The signal.exp test case didn't test for signal support.

* The tspeed.c test case was failing to compile due to a missing 
#include, and its .exp file did not test for runtime target support in gdb.

Anyway....  here's an attempt to fix all this.  I added an early test 
for arch support to the .exp files so that most tests report 
"unsupported" immediately when they cannot possibly work, and fixed up 
the other problems as needed.

OK to check in?

-Sandra
Simon Marchi - Oct. 8, 2018, 2:24 a.m.
On 2018-10-06 21:09, Sandra Loosemore wrote:
> Continuing through my pile of testsuite problems found while working
> on cleaning up nios2 test results....
> 
> I found that the results for the gdb.trace tests were really messy on
> targets that don't support the trace features.  The trouble affected
> various other embedded targets I tried, not just nios2.  Specific
> problems included:
> 
> * The header file trace-common.h that is used by most of the test
> programs in this directory causes multiple compilation errors (not
> just the obvious preprocessor #error) on architectures it doesn't know
> about, and the checks in the .exp files for successful compilation of
> the test case didn't distinguish between failures for missing arch
> support (should have "unsupported" status) and failures due to unknown
> causes (should be "untested").  My understanding is that adding arch
> support to trace-common.h won't do anything useful without
> implementing the underlying fast tracepoint support too.
> 
> * Several test cases depend on linking with/loading a shared library
> for in-process trace without checking for shared library support on
> the target.
> 
> * The signal.exp test case didn't test for signal support.
> 
> * The tspeed.c test case was failing to compile due to a missing
> #include, and its .exp file did not test for runtime target support in
> gdb.
> 
> Anyway....  here's an attempt to fix all this.  I added an early test
> for arch support to the .exp files so that most tests report
> "unsupported" immediately when they cannot possibly work, and fixed up
> the other problems as needed.
> 
> OK to check in?
> 
> -Sandra

Hi Sandra,

Thanks for this, fixes to make the testsuite run more cleanly is always 
appreciated.

I just did a quick smoke check, and noticed some errors when running on 
x86:

   Running 
/home/emaisin/src/binutils-gdb/gdb/testsuite/gdb.trace/signal.exp ...
   ERROR: no fileid for elxacz23q12

(elxacz23q12 is my hostname)

This looks like a check done a bit too early.  Can you make sure that 
these tests:

$ make check TESTS="gdb.trace/*.exp"
$ make check TESTS="gdb.trace/*.exp" 
RUNTESTFLAGS="--target_board=native-gdbserver"
$ make check TESTS="gdb.trace/*.exp" 
RUNTESTFLAGS="--target_board=native-extended-gdbserver"

Don't have significant differences before/after your patch (on 
x86/Linux)?  If you don't see any difference, maybe the problem is on my 
side, then I'll look into it.

Simon

Patch

commit 3ee7bc05bf62a66507a7f674cfff72db6a33f71c
Author: Sandra Loosemore <sandra@codesourcery.com>
Date:   Sat Oct 6 18:05:09 2018 -0700

    Clean up gdb.trace test results on targets that don't support this feature.
    
    2018-10-06  Sandra Loosemore  <sandra@codesourcery.com>
    
    	gdb/testsuite/
    	* gdb.trace/actions-changed.exp: Check for arch support.
    	* gdb.trace/actions.exp: Likewise.
    	* gdb.trace/ax.exp: Likewise.
    	* gdb.trace/backtrace.exp: Likewise.
    	* gdb.trace/change-loc.exp: Likewise.
    	* gdb.trace/deltrace.exp: Likewise.
    	* gdb.trace/ftrace-lock.exp: Check for shlib and arch support.
    	* gdb.trace/ftrace.exp: Likewise.
    	* gdb.trace/infotrace.exp: Check for arch support.
    	* gdb.trace/mi-trace-frame-collected.exp: Likewise.
    	* gdb.trace/mi-tracepoint-changed.exp: Likewise.
    	* gdb.trace/mi-tsv-changed.exp: Likewise.
    	* gdb.trace/packetlen.exp: Likewise.
    	* gdb.trace/passc-dyn.exp: Likewise.
    	* gdb.trace/passcount.exp: Likewise.
    	* gdb.trace/pending.exp: Likewise.
    	* gdb.trace/range-stepping.exp: Check for shlib support.
    	* gdb.trace/report.exp: Check for arch support.
    	* gdb.trace/save-trace.exp: Likewise.
    	* gdb.trace/signal.exp: Check for signal and arch support.
    	* gdb.trace/tfind.exp: Check for arch support.
    	* gdb.trace/trace-break.exp: Check for arch and shlib support.
    	* gdb.trace/trace-common.h: Add comment.
    	* gdb.trace/trace-condition.exp: Check for shlib and arch support.
    	* gdb.trace/trace-enable-disable.exp: Likewise.
    	* gdb.trace/trace-mt.exp: Likewise.  Remove redundant untested call.
    	* gdb.trace/tracecmd.exp: Check for arch support.
    	* gdb.trace/tspeed.c: Add missing header for sleep.
    	* gdb.trace/tspeed.exp: Check for shlib, target, and arch support.
    	* gdb.trace/tstatus.exp: Check for arch support.
    	* gdb.trace/tsv.exp: Likewise.
    	* gdb.trace/while-dyn.exp: Likewise.
    	* gdb.trace/while-stepping.exp: Likewise.
    	* lib/trace-support.exp (gdb_trace_common_supports_arch): New.

diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index c78c09a..6484411 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,40 @@ 
+2018-10-06  Sandra Loosemore  <sandra@codesourcery.com>
+
+	* gdb.trace/actions-changed.exp: Check for arch support.
+	* gdb.trace/actions.exp: Likewise.
+	* gdb.trace/ax.exp: Likewise.
+	* gdb.trace/backtrace.exp: Likewise.
+	* gdb.trace/change-loc.exp: Likewise.
+	* gdb.trace/deltrace.exp: Likewise.
+	* gdb.trace/ftrace-lock.exp: Check for shlib and arch support.
+	* gdb.trace/ftrace.exp: Likewise.
+	* gdb.trace/infotrace.exp: Check for arch support.
+	* gdb.trace/mi-trace-frame-collected.exp: Likewise.
+	* gdb.trace/mi-tracepoint-changed.exp: Likewise.
+	* gdb.trace/mi-tsv-changed.exp: Likewise.
+	* gdb.trace/packetlen.exp: Likewise.
+	* gdb.trace/passc-dyn.exp: Likewise.
+	* gdb.trace/passcount.exp: Likewise.
+	* gdb.trace/pending.exp: Likewise.
+	* gdb.trace/range-stepping.exp: Check for shlib support.
+	* gdb.trace/report.exp: Check for arch support.
+	* gdb.trace/save-trace.exp: Likewise.
+	* gdb.trace/signal.exp: Check for signal and arch support.
+	* gdb.trace/tfind.exp: Check for arch support.
+	* gdb.trace/trace-break.exp: Check for arch and shlib support.
+	* gdb.trace/trace-common.h: Add comment.
+	* gdb.trace/trace-condition.exp: Check for shlib and arch support.
+	* gdb.trace/trace-enable-disable.exp: Likewise.
+	* gdb.trace/trace-mt.exp: Likewise.  Remove redundant untested call.
+	* gdb.trace/tracecmd.exp: Check for arch support.
+	* gdb.trace/tspeed.c: Add missing header for sleep.
+	* gdb.trace/tspeed.exp: Check for shlib, target, and arch support.
+	* gdb.trace/tstatus.exp: Check for arch support.
+	* gdb.trace/tsv.exp: Likewise.
+	* gdb.trace/while-dyn.exp: Likewise.
+	* gdb.trace/while-stepping.exp: Likewise.
+	* lib/trace-support.exp (gdb_trace_common_supports_arch): New.
+
 2018-10-06  Sergio Durigan Junior  <sergiodj@redhat.com>
 
 	* gdb.base/info-proc.exp: Update string expected from "help info
diff --git a/gdb/testsuite/gdb.trace/actions-changed.exp b/gdb/testsuite/gdb.trace/actions-changed.exp
index 102f04f..34b0ce9 100644
--- a/gdb/testsuite/gdb.trace/actions-changed.exp
+++ b/gdb/testsuite/gdb.trace/actions-changed.exp
@@ -17,6 +17,11 @@  load_lib trace-support.exp
 
 standard_testfile
 
+if ![gdb_trace_common_supports_arch] {
+    unsupported "no trace-common.h support for arch"
+    return -1
+}
+
 if {[prepare_for_testing "failed to prepare" $testfile $srcfile debug]} {
     return -1
 }
diff --git a/gdb/testsuite/gdb.trace/actions.exp b/gdb/testsuite/gdb.trace/actions.exp
index ea02031..4f4e254 100644
--- a/gdb/testsuite/gdb.trace/actions.exp
+++ b/gdb/testsuite/gdb.trace/actions.exp
@@ -22,6 +22,10 @@  gdb_exit
 gdb_start
 
 standard_testfile
+if ![gdb_trace_common_supports_arch] {
+    unsupported "no trace-common.h support for arch"
+    return -1
+}
 if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
 	  executable {debug nowarnings}] != "" } {
     untested "failed to compile"
diff --git a/gdb/testsuite/gdb.trace/ax.exp b/gdb/testsuite/gdb.trace/ax.exp
index 8156a0c..3d1a11a 100644
--- a/gdb/testsuite/gdb.trace/ax.exp
+++ b/gdb/testsuite/gdb.trace/ax.exp
@@ -24,6 +24,12 @@  load_lib "trace-support.exp"
 gdb_exit
 gdb_start
 standard_testfile actions.c
+
+if ![gdb_trace_common_supports_arch] {
+    unsupported "no trace-common.h support for arch"
+    return -1
+}
+
 if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
 	  executable {debug nowarnings}] != "" } {
     untested "failed to compile"
diff --git a/gdb/testsuite/gdb.trace/backtrace.exp b/gdb/testsuite/gdb.trace/backtrace.exp
index 6b41f89..de4c8fe 100644
--- a/gdb/testsuite/gdb.trace/backtrace.exp
+++ b/gdb/testsuite/gdb.trace/backtrace.exp
@@ -21,6 +21,11 @@  standard_testfile actions.c
 set executable $testfile
 set expfile $testfile.exp
 
+if ![gdb_trace_common_supports_arch] {
+    unsupported "no trace-common.h support for arch"
+    return -1
+}
+
 if [prepare_for_testing "failed to prepare" $executable $srcfile \
 	[list debug nowarnings]] {
     return -1
diff --git a/gdb/testsuite/gdb.trace/change-loc.exp b/gdb/testsuite/gdb.trace/change-loc.exp
index 052f421..603dd14 100644
--- a/gdb/testsuite/gdb.trace/change-loc.exp
+++ b/gdb/testsuite/gdb.trace/change-loc.exp
@@ -18,6 +18,11 @@  if {[skip_shlib_tests]} {
     return 0
 }
 
+if ![gdb_trace_common_supports_arch] {
+    unsupported "no trace-common.h support for arch"
+    return -1
+}
+
 standard_testfile
 set libfile1 "change-loc-1"
 set libfile2 "change-loc-2"
diff --git a/gdb/testsuite/gdb.trace/deltrace.exp b/gdb/testsuite/gdb.trace/deltrace.exp
index f4ff474..c18df57 100644
--- a/gdb/testsuite/gdb.trace/deltrace.exp
+++ b/gdb/testsuite/gdb.trace/deltrace.exp
@@ -22,6 +22,12 @@  gdb_exit
 gdb_start
 
 standard_testfile actions.c
+
+if ![gdb_trace_common_supports_arch] {
+    unsupported "no trace-common.h support for arch"
+    return -1
+}
+
 if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
 	  executable {debug nowarnings}] != "" } {
     untested "failed to compile"
diff --git a/gdb/testsuite/gdb.trace/ftrace-lock.exp b/gdb/testsuite/gdb.trace/ftrace-lock.exp
index 3e5f0b8..619bd23 100644
--- a/gdb/testsuite/gdb.trace/ftrace-lock.exp
+++ b/gdb/testsuite/gdb.trace/ftrace-lock.exp
@@ -14,6 +14,10 @@ 
 
 load_lib "trace-support.exp"
 
+if {[skip_shlib_tests]} {
+    return 0
+}
+
 standard_testfile
 set executable $testfile
 set expfile $testfile.exp
@@ -29,6 +33,10 @@  set options [list debug [gdb_target_symbol_prefix_flags] \
 	     additional_flags=-DNUM_THREADS=$NUM_THREADS]
 
 # Check that the target supports trace.
+if ![gdb_trace_common_supports_arch] {
+    unsupported "no trace-common.h support for arch"
+    return -1
+}
 if { [gdb_compile_pthreads "$srcdir/$subdir/$srcfile" $binfile executable $options] != "" } {
     untested "failed to compile"
     return -1
diff --git a/gdb/testsuite/gdb.trace/ftrace.exp b/gdb/testsuite/gdb.trace/ftrace.exp
index 5c494c6..959e2af 100644
--- a/gdb/testsuite/gdb.trace/ftrace.exp
+++ b/gdb/testsuite/gdb.trace/ftrace.exp
@@ -14,6 +14,10 @@ 
 
 load_lib "trace-support.exp"
 
+if {[skip_shlib_tests]} {
+    return 0
+}
+
 standard_testfile
 set executable $testfile
 set expfile $testfile.exp
@@ -21,6 +25,11 @@  set expfile $testfile.exp
 # Some targets have leading underscores on assembly symbols.
 set additional_flags [gdb_target_symbol_prefix_flags]
 
+if ![gdb_trace_common_supports_arch] {
+    unsupported "no trace-common.h support for arch"
+    return -1
+}
+
 if [prepare_for_testing "failed to prepare" $executable $srcfile \
 	[list debug $additional_flags]] {
     return -1
diff --git a/gdb/testsuite/gdb.trace/infotrace.exp b/gdb/testsuite/gdb.trace/infotrace.exp
index b013658..1e33db3 100644
--- a/gdb/testsuite/gdb.trace/infotrace.exp
+++ b/gdb/testsuite/gdb.trace/infotrace.exp
@@ -22,6 +22,12 @@  gdb_exit
 gdb_start
 
 standard_testfile actions.c
+
+if ![gdb_trace_common_supports_arch] {
+    unsupported "no trace-common.h support for arch"
+    return -1
+}
+
 if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
 	  executable {debug nowarnings}] != "" } {
     untested "failed to compile"
diff --git a/gdb/testsuite/gdb.trace/mi-trace-frame-collected.exp b/gdb/testsuite/gdb.trace/mi-trace-frame-collected.exp
index 09e9a47..56936cc 100644
--- a/gdb/testsuite/gdb.trace/mi-trace-frame-collected.exp
+++ b/gdb/testsuite/gdb.trace/mi-trace-frame-collected.exp
@@ -17,6 +17,11 @@  load_lib trace-support.exp
 
 standard_testfile actions.c
 
+if ![gdb_trace_common_supports_arch] {
+    unsupported "no trace-common.h support for arch"
+    return -1
+}
+
 if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} {debug}] } {
     return -1
 }
diff --git a/gdb/testsuite/gdb.trace/mi-tracepoint-changed.exp b/gdb/testsuite/gdb.trace/mi-tracepoint-changed.exp
index de7ae40..9808b40 100644
--- a/gdb/testsuite/gdb.trace/mi-tracepoint-changed.exp
+++ b/gdb/testsuite/gdb.trace/mi-tracepoint-changed.exp
@@ -18,6 +18,10 @@  load_lib trace-support.exp
 if {[skip_shlib_tests]} {
     return 0
 }
+if ![gdb_trace_common_supports_arch] {
+    unsupported "no trace-common.h support for arch"
+    return -1
+}
 
 standard_testfile pending.c
 set libfile1 "pendshr1"
diff --git a/gdb/testsuite/gdb.trace/mi-tsv-changed.exp b/gdb/testsuite/gdb.trace/mi-tsv-changed.exp
index 56dcd34..382a052 100644
--- a/gdb/testsuite/gdb.trace/mi-tsv-changed.exp
+++ b/gdb/testsuite/gdb.trace/mi-tsv-changed.exp
@@ -17,6 +17,12 @@  load_lib trace-support.exp
 load_lib mi-support.exp
 
 standard_testfile actions.c
+
+if ![gdb_trace_common_supports_arch] {
+    unsupported "no trace-common.h support for arch"
+    return -1
+}
+
 if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
 	  executable {debug nowarnings}] != "" } {
     untested "failed to compile"
diff --git a/gdb/testsuite/gdb.trace/packetlen.exp b/gdb/testsuite/gdb.trace/packetlen.exp
index ca54cfe..2322900 100644
--- a/gdb/testsuite/gdb.trace/packetlen.exp
+++ b/gdb/testsuite/gdb.trace/packetlen.exp
@@ -22,6 +22,10 @@  gdb_exit
 gdb_start
 
 standard_testfile actions.c
+if ![gdb_trace_common_supports_arch] {
+    unsupported "no trace-common.h support for arch"
+    return -1
+}
 if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
 	  executable {debug nowarnings}] != "" } {
     untested "failed to compile"
diff --git a/gdb/testsuite/gdb.trace/passc-dyn.exp b/gdb/testsuite/gdb.trace/passc-dyn.exp
index 1738b46..9457826 100644
--- a/gdb/testsuite/gdb.trace/passc-dyn.exp
+++ b/gdb/testsuite/gdb.trace/passc-dyn.exp
@@ -21,6 +21,10 @@  load_lib "trace-support.exp"
 gdb_exit
 gdb_start
 standard_testfile actions.c
+if ![gdb_trace_common_supports_arch] {
+    unsupported "no trace-common.h support for arch"
+    return -1
+}
 if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
 	  executable {debug nowarnings}] != "" } {
     untested "failed to compile"
diff --git a/gdb/testsuite/gdb.trace/passcount.exp b/gdb/testsuite/gdb.trace/passcount.exp
index 055020f..733c2de 100644
--- a/gdb/testsuite/gdb.trace/passcount.exp
+++ b/gdb/testsuite/gdb.trace/passcount.exp
@@ -21,6 +21,10 @@  load_lib "trace-support.exp"
 gdb_exit
 gdb_start
 standard_testfile actions.c
+if ![gdb_trace_common_supports_arch] {
+    unsupported "no trace-common.h support for arch"
+    return -1
+}
 if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
 	  executable {debug nowarnings}] != "" } {
     untested "failed to compile"
diff --git a/gdb/testsuite/gdb.trace/pending.exp b/gdb/testsuite/gdb.trace/pending.exp
index bb039df..fbb1c4d 100644
--- a/gdb/testsuite/gdb.trace/pending.exp
+++ b/gdb/testsuite/gdb.trace/pending.exp
@@ -18,6 +18,11 @@  if {[skip_shlib_tests]} {
     return 0
 }
 
+if ![gdb_trace_common_supports_arch] {
+    unsupported "no trace-common.h support for arch"
+    return -1
+}
+
 standard_testfile
 set libfile1 "pendshr1"
 set libfile2 "pendshr2"
diff --git a/gdb/testsuite/gdb.trace/range-stepping.exp b/gdb/testsuite/gdb.trace/range-stepping.exp
index 0277032..1bc0cc7 100644
--- a/gdb/testsuite/gdb.trace/range-stepping.exp
+++ b/gdb/testsuite/gdb.trace/range-stepping.exp
@@ -66,6 +66,10 @@  proc range_stepping_with_tracepoint { type } {
 
 range_stepping_with_tracepoint "trace"
 
+if {[skip_shlib_tests]} {
+    return 0
+}
+
 set libipa [get_in_proc_agent]
 set remote_libipa [gdb_load_shlib $libipa]
 
diff --git a/gdb/testsuite/gdb.trace/report.exp b/gdb/testsuite/gdb.trace/report.exp
index 5155165..4b50e12 100644
--- a/gdb/testsuite/gdb.trace/report.exp
+++ b/gdb/testsuite/gdb.trace/report.exp
@@ -22,6 +22,10 @@  gdb_exit
 gdb_start
 
 standard_testfile actions.c
+if ![gdb_trace_common_supports_arch] {
+    unsupported "no trace-common.h support for arch"
+    return -1
+}
 if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
 	  executable {debug nowarnings}] != "" } {
     untested "failed to compile"
diff --git a/gdb/testsuite/gdb.trace/save-trace.exp b/gdb/testsuite/gdb.trace/save-trace.exp
index fe34d3f..3665778 100644
--- a/gdb/testsuite/gdb.trace/save-trace.exp
+++ b/gdb/testsuite/gdb.trace/save-trace.exp
@@ -22,6 +22,10 @@  gdb_exit
 gdb_start
 
 standard_testfile actions.c
+if ![gdb_trace_common_supports_arch] {
+    unsupported "no trace-common.h support for arch"
+    return -1
+}
 if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
 	  executable {debug nowarnings}] != "" } {
     untested "failed to compile"
diff --git a/gdb/testsuite/gdb.trace/signal.exp b/gdb/testsuite/gdb.trace/signal.exp
index b860b12..e54ca1f 100644
--- a/gdb/testsuite/gdb.trace/signal.exp
+++ b/gdb/testsuite/gdb.trace/signal.exp
@@ -28,19 +28,24 @@ 
 
 load_lib "trace-support.exp"
 
+if [target_info exists gdb,nosignals] {
+    verbose "Skipping signal.exp because of nosignals."
+    return -1
+}
+
 standard_testfile
 
-if {[prepare_for_testing "failed to prepare" $testfile $srcfile debug]} {
+if ![gdb_target_supports_trace] {
+    unsupported "target does not support trace"
     return -1
 }
 
-if ![runto_main] {
-    fail "can't run to main to check for trace support"
+if {[prepare_for_testing "failed to prepare" $testfile $srcfile debug]} {
     return -1
 }
 
-if ![gdb_target_supports_trace] {
-    unsupported "target does not support trace"
+if ![runto_main] {
+    fail "can't run to main to check for trace support"
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.trace/tfind.exp b/gdb/testsuite/gdb.trace/tfind.exp
index bbb7ec8..ec6a70c 100644
--- a/gdb/testsuite/gdb.trace/tfind.exp
+++ b/gdb/testsuite/gdb.trace/tfind.exp
@@ -23,6 +23,11 @@  gdb_start
 
 standard_testfile actions.c
 
+if ![gdb_trace_common_supports_arch] {
+    unsupported "no trace-common.h support for arch"
+    return -1
+}
+
 if { [gdb_compile "$srcdir/$subdir/$srcfile" "$binfile" \
 	  executable {debug nowarnings}] != "" } {
     untested "failed to compile"
diff --git a/gdb/testsuite/gdb.trace/trace-break.exp b/gdb/testsuite/gdb.trace/trace-break.exp
index 84c4780..c4895f9 100644
--- a/gdb/testsuite/gdb.trace/trace-break.exp
+++ b/gdb/testsuite/gdb.trace/trace-break.exp
@@ -21,6 +21,11 @@  set expfile $testfile.exp
 # Some targets have leading underscores on assembly symbols.
 set additional_flags [gdb_target_symbol_prefix_flags]
 
+if ![gdb_trace_common_supports_arch] {
+    unsupported "no trace-common.h support for arch"
+    return -1
+}
+
 if [prepare_for_testing "failed to prepare" $executable $srcfile \
 	[list debug $additional_flags]] {
     return -1
@@ -347,6 +352,10 @@  foreach at_first_loc { "1" "0" } {
 break_trace_same_addr_6 "trace" "enable" "trace" "disable"
 break_trace_same_addr_6 "trace" "disable" "trace" "enable"
 
+if {[skip_shlib_tests]} {
+    return 0
+}
+
 set libipa [get_in_proc_agent]
 set remote_libipa [gdb_load_shlib $libipa]
 
diff --git a/gdb/testsuite/gdb.trace/trace-common.h b/gdb/testsuite/gdb.trace/trace-common.h
index 9f60d7f..eb34b5c 100644
--- a/gdb/testsuite/gdb.trace/trace-common.h
+++ b/gdb/testsuite/gdb.trace/trace-common.h
@@ -25,6 +25,9 @@ 
    a fast tracepoint jump.  The parameter is the label where we'll set
    tracepoints and breakpoints.  */
 
+/* Please keep gdb_trace_common_supports_arch in lib/trace-support.exp
+   in sync when adding new targets to this file.  */
+
 #if (defined __x86_64__ || defined __i386__)
 
 static void
diff --git a/gdb/testsuite/gdb.trace/trace-condition.exp b/gdb/testsuite/gdb.trace/trace-condition.exp
index d23e6a3..c7fafd7 100644
--- a/gdb/testsuite/gdb.trace/trace-condition.exp
+++ b/gdb/testsuite/gdb.trace/trace-condition.exp
@@ -14,6 +14,10 @@ 
 
 load_lib "trace-support.exp"
 
+if {[skip_shlib_tests]} {
+    return 0
+}
+
 standard_testfile
 set executable $testfile
 set expfile $testfile.exp
@@ -21,6 +25,11 @@  set expfile $testfile.exp
 # Some targets have leading underscores on assembly symbols.
 set additional_flags [gdb_target_symbol_prefix_flags]
 
+if ![gdb_trace_common_supports_arch] {
+    unsupported "no trace-common.h support for arch"
+    return -1
+}
+
 if [prepare_for_testing "failed to prepare" $executable $srcfile \
 	[list debug $additional_flags]] {
     return -1
diff --git a/gdb/testsuite/gdb.trace/trace-enable-disable.exp b/gdb/testsuite/gdb.trace/trace-enable-disable.exp
index 1b3ba0b..01147cc 100644
--- a/gdb/testsuite/gdb.trace/trace-enable-disable.exp
+++ b/gdb/testsuite/gdb.trace/trace-enable-disable.exp
@@ -14,6 +14,10 @@ 
 
 load_lib "trace-support.exp"
 
+if {[skip_shlib_tests]} {
+    return 0
+}
+
 standard_testfile
 set executable $testfile
 set expfile $testfile.exp
@@ -22,6 +26,10 @@  set expfile $testfile.exp
 set options [list debug [gdb_target_symbol_prefix_flags]]
 
 # Check that the target supports trace.
+if ![gdb_trace_common_supports_arch] {
+    unsupported "no trace-common.h support for arch"
+    return -1
+}
 if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile executable $options] != "" } {
     untested "failed to compile"
     return -1
diff --git a/gdb/testsuite/gdb.trace/trace-mt.exp b/gdb/testsuite/gdb.trace/trace-mt.exp
index 6e18666..dae85a9 100644
--- a/gdb/testsuite/gdb.trace/trace-mt.exp
+++ b/gdb/testsuite/gdb.trace/trace-mt.exp
@@ -21,9 +21,14 @@  set expfile $testfile.exp
 # Some targets have leading underscores on assembly symbols.
 set additional_flags [gdb_target_symbol_prefix_flags]
 
+if ![gdb_trace_common_supports_arch] {
+    unsupported "no trace-common.h support for arch"
+    return -1
+}
+
 if { [gdb_compile_pthreads "$srcdir/$subdir/$srcfile" $binfile \
 	  executable [list debug $additional_flags] ] != "" } {
-    untested "failed to compile"
+    # gdb_compile_pthreads provides an appropriate unsupported message.
     return -1
 }
 
@@ -106,6 +111,10 @@  foreach break_always_inserted { "on" "off" } {
 
 step_over_tracepoint "trace"
 
+if {[skip_shlib_tests]} {
+    return 0
+}
+
 set libipa [get_in_proc_agent]
 set remote_libipa [gdb_load_shlib $libipa]
 
diff --git a/gdb/testsuite/gdb.trace/tracecmd.exp b/gdb/testsuite/gdb.trace/tracecmd.exp
index 6a5d664..de3de8a 100644
--- a/gdb/testsuite/gdb.trace/tracecmd.exp
+++ b/gdb/testsuite/gdb.trace/tracecmd.exp
@@ -21,6 +21,10 @@  load_lib "trace-support.exp"
 gdb_exit
 gdb_start
 standard_testfile actions.c
+if ![gdb_trace_common_supports_arch] {
+    unsupported "no trace-common.h support for arch"
+    return -1
+}
 if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
 	  executable {debug nowarnings}] != "" } {
     untested "failed to compile"
diff --git a/gdb/testsuite/gdb.trace/tspeed.c b/gdb/testsuite/gdb.trace/tspeed.c
index b084d6a..3c60663 100644
--- a/gdb/testsuite/gdb.trace/tspeed.c
+++ b/gdb/testsuite/gdb.trace/tspeed.c
@@ -28,6 +28,7 @@ 
 #include <time.h>
 #include <sys/time.h>
 #include <sys/resource.h>
+#include <unistd.h>
 
 int trace_speed_test (void);
 
diff --git a/gdb/testsuite/gdb.trace/tspeed.exp b/gdb/testsuite/gdb.trace/tspeed.exp
index 47a8250..b2dcc79 100644
--- a/gdb/testsuite/gdb.trace/tspeed.exp
+++ b/gdb/testsuite/gdb.trace/tspeed.exp
@@ -15,9 +15,32 @@ 
 
 load_lib "trace-support.exp"
 
+if {[skip_shlib_tests]} {
+    return 0
+}
+
+if ![gdb_target_supports_trace] {
+    unsupported "target does not support trace"
+    return -1
+}
+
 standard_testfile
 set executable $testfile
 
+# Check that the target supports trace.
+if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile executable $options] != "" } {
+    untested "failed to compile"
+    return -1
+}
+
+clean_restart ${testfile}
+
+if ![runto_main] {
+    fail "can't run to main to check for trace support"
+    return -1
+}
+
+# Compile the test case with the in-process agent library.
 set ipalib [get_in_proc_agent]
 
 if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
diff --git a/gdb/testsuite/gdb.trace/tstatus.exp b/gdb/testsuite/gdb.trace/tstatus.exp
index 3498b1c..44e599c 100644
--- a/gdb/testsuite/gdb.trace/tstatus.exp
+++ b/gdb/testsuite/gdb.trace/tstatus.exp
@@ -18,6 +18,11 @@  standard_testfile actions.c
 set executable $testfile
 set expfile tstatus.exp
 
+if ![gdb_trace_common_supports_arch] {
+    unsupported "no trace-common.h support for arch"
+    return -1
+}
+
 if [prepare_for_testing "failed to prepare" $executable $srcfile \
 	[list debug]] {
     return -1
diff --git a/gdb/testsuite/gdb.trace/tsv.exp b/gdb/testsuite/gdb.trace/tsv.exp
index a86919a..a8ec8d4 100644
--- a/gdb/testsuite/gdb.trace/tsv.exp
+++ b/gdb/testsuite/gdb.trace/tsv.exp
@@ -19,6 +19,10 @@  load_lib "trace-support.exp"
 gdb_exit
 gdb_start
 standard_testfile actions.c
+if ![gdb_trace_common_supports_arch] {
+    unsupported "no trace-common.h support for arch"
+    return -1
+}
 if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
 	  executable {debug nowarnings}] != "" } {
     untested "failed to compile"
diff --git a/gdb/testsuite/gdb.trace/while-dyn.exp b/gdb/testsuite/gdb.trace/while-dyn.exp
index 0fb6b47..9571879 100644
--- a/gdb/testsuite/gdb.trace/while-dyn.exp
+++ b/gdb/testsuite/gdb.trace/while-dyn.exp
@@ -23,6 +23,10 @@  gdb_start
 
 standard_testfile actions.c
 set executable $testfile
+if ![gdb_trace_common_supports_arch] {
+    unsupported "no trace-common.h support for arch"
+    return -1
+}
 if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
 	  executable {debug nowarnings}] != "" } {
     untested "failed to compile"
diff --git a/gdb/testsuite/gdb.trace/while-stepping.exp b/gdb/testsuite/gdb.trace/while-stepping.exp
index 29bdf2d..45d1620 100644
--- a/gdb/testsuite/gdb.trace/while-stepping.exp
+++ b/gdb/testsuite/gdb.trace/while-stepping.exp
@@ -22,6 +22,10 @@  gdb_exit
 gdb_start
 
 standard_testfile actions.c
+if ![gdb_trace_common_supports_arch] {
+    unsupported "no trace-common.h support for arch"
+    return -1
+}
 if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" $binfile \
 	  executable {debug nowarnings}] != "" } {
     untested "failed to compile"
diff --git a/gdb/testsuite/lib/trace-support.exp b/gdb/testsuite/lib/trace-support.exp
index 547da37..e5603d4 100644
--- a/gdb/testsuite/lib/trace-support.exp
+++ b/gdb/testsuite/lib/trace-support.exp
@@ -51,6 +51,25 @@  if [is_amd64_regs_target] {
 }
 
 #
+# Procedure: gdb_trace_common_supports_arch
+# Returns true if gdb.trace/trace-common.h knows about this target.
+# Allows skipping tests that depend on being able to include this file.
+# Please keep this in sync with the supported targets in the header.
+#
+
+proc gdb_trace_common_supports_arch { } {
+  if { [istarget "x86_64*-*-*"]
+	|| [istarget "i386*-*-*"]
+	|| [istarget "aarch64*-*-*"]
+	|| [istarget "powerpc*-*-*"]
+	|| [istarget "s390*-*-*"] } {
+	return 1
+    } else {
+	return 0
+    }
+}
+
+#
 # Procedure: gdb_target_supports_trace
 # Returns true if GDB is connected to a target that supports tracing.
 # Allows tests to abort early if not running on a trace-aware target.