From d9f6d7f8b636a2b32004273143d72a77d82b40de Mon Sep 17 00:00:00 2001 From: "Maciej W. Rozycki" Date: Thu, 24 May 2018 15:31:32 +0100 Subject: [PATCH] testsuite: Extend TLS core file testing with an OS-generated dump Complementing commit 280ca31f4d60 ("Add test for fetching TLS from core file") extend gdb.threads/tls-core.exp with an OS-generated dump where supported. This verifies not only that our core dump interpreter is consistent with our producer, but that it matches the OS verified as well, avoiding a possible case where our interpreter would be bug-compatible with our producer but not the OS and it would go unnoticed in testing. This results in: PASS: gdb.threads/tls-core.exp: native: load core file PASS: gdb.threads/tls-core.exp: native: print thread-local storage variable PASS: gdb.threads/tls-core.exp: gcore: load core file PASS: gdb.threads/tls-core.exp: gcore: print thread-local storage variable with local testing and: UNSUPPORTED: gdb.threads/tls-core.exp: native: load core file UNSUPPORTED: gdb.threads/tls-core.exp: native: print thread-local storage variable PASS: gdb.threads/tls-core.exp: gcore: load core file PASS: gdb.threads/tls-core.exp: gcore: print thread-local storage variable with remote testing, or for testing on ports that don't supports cores. gdb/testsuite/ChangeLog: 2018-05-24 Maciej W. Rozycki Pedro Alves * gdb.threads/tls-core.c: Include (thread_proc): Call `abort'. * gdb.threads/tls-core.exp: Generate a core with core_find too. (tls_core_test): New procedure, bits factored out from ... (top level): ... here. Test both native cores and gcore cores. --- gdb/testsuite/ChangeLog | 9 ++++ gdb/testsuite/gdb.threads/tls-core.c | 2 + gdb/testsuite/gdb.threads/tls-core.exp | 63 +++++++++++++++++--------- 3 files changed, 53 insertions(+), 21 deletions(-) diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 4b27640ccb..426b43823b 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,12 @@ +2018-05-24 Maciej W. Rozycki + Pedro Alves + + * gdb.threads/tls-core.c: Include + (thread_proc): Call `abort'. + * gdb.threads/tls-core.exp: Generate a core with core_find too. + (tls_core_test): New procedure, bits factored out from ... + (top level): ... here. Test both native cores and gcore cores. + 2018-05-23 Tom Tromey * gdb.gdb/complaints.exp (test_initial_complaints): Simplify. diff --git a/gdb/testsuite/gdb.threads/tls-core.c b/gdb/testsuite/gdb.threads/tls-core.c index 6089ba116e..33dd43fb49 100644 --- a/gdb/testsuite/gdb.threads/tls-core.c +++ b/gdb/testsuite/gdb.threads/tls-core.c @@ -16,12 +16,14 @@ along with this program. If not, see . */ #include +#include int __thread foo = 0xdeadbeef; static void * thread_proc (void *arg) { + abort (); return arg; } diff --git a/gdb/testsuite/gdb.threads/tls-core.exp b/gdb/testsuite/gdb.threads/tls-core.exp index 730016d3bc..4d2aaeb298 100644 --- a/gdb/testsuite/gdb.threads/tls-core.exp +++ b/gdb/testsuite/gdb.threads/tls-core.exp @@ -20,37 +20,58 @@ if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" \ return -1 } +# Generate a native core file. + +set corefile [core_find $binfile] +set core_supported [expr {$corefile != ""}] + +# Generate a core file with "gcore". clean_restart ${binfile} runto thread_proc +set gcorefile [standard_output_file gcore.test] +set gcore_supported [gdb_gcore_cmd "$gcorefile" "gcore"] + +# Restart gdb and load COREFILE as a core file. SUPPORTED is true iff +# the core was generated successfully; otherwise, the tests are marked +# unsupported. # -# Generate corefile. -# -set corefile [standard_output_file gcore.test] -set core_supported [gdb_gcore_cmd "$corefile" "save a corefile"] -if {!$core_supported} { - return 0 +proc tls_core_test {supported corefile} { + upvar target_triplet target_triplet + upvar host_triplet host_triplet + upvar binfile binfile + + clean_restart ${binfile} + + set test "load core file" + if {$supported} { + set core_loaded [gdb_core_cmd $corefile $test] + } else { + set core_loaded 0 + unsupported $test + } + + set test "print thread-local storage variable" + if { $core_loaded == 1 } { + # This fails in cross-debugging due to the use of native + # `libthread_db'. + if {![string match $host_triplet $target_triplet]} { + setup_kfail "threads/22381" "*-*-*" + } + gdb_test "p/x foo" "\\$\[0-9]+ = 0xdeadbeef" $test + } else { + unsupported $test + } } -# -# Restart gdb and load generated corefile. -# -clean_restart ${binfile} - -set core_loaded [gdb_core_cmd "$corefile" "load generated corefile"] -if { $core_loaded != 1 } { - # No use proceeding from here. - return 0 +with_test_prefix "native" { + tls_core_test $core_supported $corefile } -# This fails in cross-debugging due to the use of native `libthread_db'. -if {![string match $host_triplet $target_triplet]} { - setup_kfail "threads/22381" "*-*-*" +with_test_prefix "gcore" { + tls_core_test $gcore_supported $gcorefile } -gdb_test "p/x foo" \ - "\\$\[0-9]+ = 0xdeadbeef" \ - "print thread-local storage variable" gdb_exit