From patchwork Fri Oct 6 11:03:23 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Djordje Todorovic X-Patchwork-Id: 23370 Received: (qmail 7494 invoked by alias); 6 Oct 2017 11:03:33 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 7262 invoked by uid 89); 6 Oct 2017 11:03:32 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-24.6 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_LAZY_DOMAIN_SECURITY, RCVD_IN_DNSWL_NONE, RP_MATCHES_RCVD autolearn=ham version=3.3.2 spammy= X-Spam-User: qpsmtpd, 2 recipients X-HELO: mail.rt-rk.com Received: from mx2.rt-rk.com (HELO mail.rt-rk.com) (89.216.37.149) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 06 Oct 2017 11:03:26 +0000 Received: from localhost (localhost [127.0.0.1]) by mail.rt-rk.com (Postfix) with ESMTP id 280CD1A2044; Fri, 6 Oct 2017 13:03:23 +0200 (CEST) Received: from [10.10.13.94] (unknown [10.10.13.94]) by mail.rt-rk.com (Postfix) with ESMTPSA id 0EE0D1A1DEC; Fri, 6 Oct 2017 13:03:23 +0200 (CEST) From: Djordje Todorovic Subject: [PATCH 1/4] GDB: Add test for fetching TLS from core file To: "Maciej W. Rozycki" Cc: binutils@sourceware.org, gdb-patches@sourceware.org, "nemanja.popov@rt-rk.com" , petar.jovanovic@rt-rk.com, "Ananthakrishna Sowda (asowda)" , Nikola Prica Message-ID: <91b1e434-d27a-9a65-0e56-cd16bfc89bfd@rt-rk.com> Date: Fri, 6 Oct 2017 13:03:23 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.3.0 MIME-Version: 1.0 GDB needs correct PID information in order to read value of TLS variable from core file, so the test for it looks as following: From abfa8dcddc8f3c70ac141f223646a74c787c055a Mon Sep 17 00:00:00 2001 From: Djordje Todorovic Date: Wed, 4 Oct 2017 14:27:54 +0200 Subject: [PATCH 1/4] GDB: Add test for fetching TLS from core file gdb/testsuite: * gdb.threads/tls-core.c: New file. * gdb.threads/tls-core.exp: Likewise. --- gdb/testsuite/gdb.threads/tls-core.c | 48 +++++++++++++++++++++++++++ gdb/testsuite/gdb.threads/tls-core.exp | 60 ++++++++++++++++++++++++++++++++++ 2 files changed, 108 insertions(+) create mode 100644 gdb/testsuite/gdb.threads/tls-core.c create mode 100644 gdb/testsuite/gdb.threads/tls-core.exp diff --git a/gdb/testsuite/gdb.threads/tls-core.c b/gdb/testsuite/gdb.threads/tls-core.c new file mode 100644 index 0000000..186fdac --- /dev/null +++ b/gdb/testsuite/gdb.threads/tls-core.c @@ -0,0 +1,48 @@ +/* This test is part of GDB, the GNU debugger. + + Copyright 2017 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include +#include +#include +#include + +#define NUMBER_OF_THREADS 5 + +int __thread foo = 0xdeadbeef; + +void * +thread (void *in) +{ + int *tmp = (int *) in; + int value = *tmp; + foo += *tmp; + while (1) + { + sleep (10); + } +} + +int +main (void) +{ + pthread_t threads[NUMBER_OF_THREADS]; + int i; + for (i = 0; i < NUMBER_OF_THREADS; i++) + { + pthread_create (&threads[i], NULL, thread, &i); + } +} diff --git a/gdb/testsuite/gdb.threads/tls-core.exp b/gdb/testsuite/gdb.threads/tls-core.exp new file mode 100644 index 0000000..c0c7469 --- /dev/null +++ b/gdb/testsuite/gdb.threads/tls-core.exp @@ -0,0 +1,60 @@ +# Copyright 2017 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +standard_testfile + +if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" \ + executable { debug }] != "" } { + return -1 +} + + +clean_restart ${binfile} + +# +# Set breakpoint at line 27. +# +gdb_breakpoint 27 +gdb_test "run" "Starting program: .*" + +# +# Generate corefile. +# +set corefile [standard_output_file gcore.test] +set core_supported [gdb_gcore_cmd "$corefile" "save a corefile"] +if {!$core_supported} { + return -1 +} + +gdb_exit + +# +# Restart gdb and load generated corefile. +# +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${binfile} + +set core_loaded [gdb_core_cmd "$corefile" "load generated corefile"] +if { $core_loaded == -1 } { + # No use proceeding from here. + return +} + +gdb_test "p/x foo" \ + "\\$\[0-9]+ = 0xdeadbeef" \ + "Printing thread-local storage variable." + +gdb_exit