[PATCH] testsuite: Extend TLS core file testing with an OS-generated dump

Pedro Alves palves@redhat.com
Wed May 23 17:33:00 GMT 2018


On 05/23/2018 01:42 PM, Maciej W. Rozycki wrote:
> On Wed, 23 May 2018, Pedro Alves wrote:
> 
>>> to gdbserver testing.  The latter is because we'd have to handle core 
>>> file copying from the remote system and then cleaning up with a possibly 
>>> variable name of the core file created.  This code has been based on 
>>> gdb.base/auxv.exp, which does not do it either.
>>
>> Hmm, that sounds like an outdated testcase to copy.  See
>> gdb.threads/corethreads.exp, for example, and the use of the core_find
>> procedure.  Can we use that procedure here too?
> 
>  Possibly.  The test case is skipped with all my testing, native or 
> native-gdbserver, due to the use of `![isnative]' (I have $build != 
> $host; the native compiler I have on the host machine is too old to 
> build GDB these days), so I didn't even notice it there.
> 
>> I also don't see why (gdbserver && !is_remote) testing can't work, such as
>> with --target=native-gdbserver and --target=native-extended-gdbserver boards.
>> It works for gdb.threads/corethreads.exp, for example.
> 
>  Acknowledged.  Given the current situation I cannot afford investing 
> any further work into this change, so let's ditch it (and a change to 
> gdb.base/auxv.exp to use `use_gdb_stub' I planned to submit next).  If I 
> find some time after all, then I can revisit the decision later on.
I understand.  Let me take it over then.  Below's a version using
core_find.

I also simplified the patch a bit:

- Removed the rlimit bits, since it seems that no other core-related test
  does that (so it seems to me that if needed, it would better be done
  separately and to several testcases at once).

- Removed the test message parameters from tls_core_test,
  and switched to using with_test_prefix instead

- Extended tls_core_test's description a bit to mention the
  SUPPORTED parameter.

This gives an all pass for me on native, native-gdbserver,
and native-extended-gdbserver (x86-64 GNU/Linux).

As a local hack, I flipped the logic in:
 set core_supported [expr {$corefile != ""}]
to make sure that the expected UNSUPPORTED messages come out.

Let me know what you think.

Thanks,
Pedro Alves

>From 154986d31cc124486e28076e0902065f054dff12 Mon Sep 17 00:00:00 2001
From: "Maciej W. Rozycki" <macro@mips.com>
Date: Wed, 23 May 2018 15:33:55 +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 adds:

 PASS: gdb.threads/tls-core.exp: set cwd to temporary directory for core dumps
 PASS: gdb.threads/tls-core.exp: continue to signal
 PASS: gdb.threads/tls-core.exp: continue to termination
 PASS: gdb.threads/tls-core.exp: generate native core dump
 PASS: gdb.threads/tls-core.exp: load native corefile
 PASS: gdb.threads/tls-core.exp: print thread-local storage variable from native corefile

to local testing and:

 UNSUPPORTED: gdb.threads/tls-core.exp: generate native core dump
 UNSUPPORTED: gdb.threads/tls-core.exp: load native corefile
 UNSUPPORTED: gdb.threads/tls-core.exp: print thread-local storage variable from native corefile

to remote testing, or for testing on ports that don't supports cores.

gdb/testsuite/ChangeLog:
2018-05-23  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.
---
 gdb/testsuite/gdb.threads/tls-core.c   |  2 ++
 gdb/testsuite/gdb.threads/tls-core.exp | 63 ++++++++++++++++++++++------------
 2 files changed, 44 insertions(+), 21 deletions(-)

diff --git a/gdb/testsuite/gdb.threads/tls-core.c b/gdb/testsuite/gdb.threads/tls-core.c
index 6089ba116ea..33dd43fb49a 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 730016d3bcf..4d2aaeb2989 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
-- 
2.14.3



More information about the Gdb-patches mailing list