diff options
author | Maciej W. Rozycki <macro@mips.com> | 2018-05-24 15:31:32 +0100 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2018-05-24 15:31:32 +0100 |
commit | d9f6d7f8b636a2b32004273143d72a77d82b40de (patch) | |
tree | d1591222d271e0a34daa4f4e3cc2a4377da83c5c /gdb | |
parent | da05d921f0b7b9f9f07ac4e78ee228e7ecf847e0 (diff) | |
download | gdb-d9f6d7f8b636a2b32004273143d72a77d82b40de.zip gdb-d9f6d7f8b636a2b32004273143d72a77d82b40de.tar.gz gdb-d9f6d7f8b636a2b32004273143d72a77d82b40de.tar.bz2 |
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 <macro@mips.com>
Pedro Alves <palves@redhat.com>
* gdb.threads/tls-core.c: Include <stdlib.h>
(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.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/testsuite/ChangeLog | 9 | ||||
-rw-r--r-- | gdb/testsuite/gdb.threads/tls-core.c | 2 | ||||
-rw-r--r-- | 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 4b27640..426b438 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,12 @@ +2018-05-24 Maciej W. Rozycki <macro@mips.com> + Pedro Alves <palves@redhat.com> + + * gdb.threads/tls-core.c: Include <stdlib.h> + (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 <tom@tromey.com> * 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 6089ba1..33dd43f 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 <http://www.gnu.org/licenses/>. */ #include <pthread.h> +#include <stdlib.h> 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 730016d..4d2aaeb 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 -# -# Generate corefile. -# -set corefile [standard_output_file gcore.test] -set core_supported [gdb_gcore_cmd "$corefile" "save a corefile"] -if {!$core_supported} { - return 0 -} +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. # -# Restart gdb and load generated corefile. -# -clean_restart ${binfile} +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 + } +} -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 |