From f5ca26042cebde2b192bee7b84a1097cc9f7dafe Mon Sep 17 00:00:00 2001 From: Florian Krohm Date: Thu, 30 Jul 2015 21:49:49 +0000 Subject: [PATCH] In VALGRIND_PRINTF write out the thread name to xml. Patch by Matthias Schwarzott . git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15460 --- NEWS | 1 + coregrind/m_scheduler/scheduler.c | 3 +++ docs/internals/xml-output-protocol4.txt | 6 ++++++ memcheck/tests/threadname.c | 3 ++- memcheck/tests/threadname.stderr.exp | 13 +++++++------ memcheck/tests/threadname_xml.stderr.exp | 6 ++++++ 6 files changed, 25 insertions(+), 7 deletions(-) diff --git a/NEWS b/NEWS index 6d95f9583c..b3e0eebae9 100644 --- a/NEWS +++ b/NEWS @@ -277,6 +277,7 @@ n-i-bz (vex 3098) Avoid generation of Neon insns on non-Neon hosts n-i-bz Enable rt_sigpending syscall on ppc64 linux. n-i-bz mremap did not work properly on shared memory n-i-bz Fix incorrect sizeof expression in syswrap-xen.c reported by Coverity +n-i-bz In VALGRIND_PRINTF write out thread name, if any, to xml Release 3.10.1 (25 November 2014) diff --git a/coregrind/m_scheduler/scheduler.c b/coregrind/m_scheduler/scheduler.c index 62906cac30..7d0ad0ce43 100644 --- a/coregrind/m_scheduler/scheduler.c +++ b/coregrind/m_scheduler/scheduler.c @@ -1814,6 +1814,9 @@ Int print_client_message( ThreadId tid, const HChar *format, VG_(printf_xml)( "\n" ); VG_(printf_xml)( " %d\n", tid ); + const ThreadState *tst = VG_(get_ThreadState)(tid); + if (tst->thread_name) + VG_(printf_xml)(" %s\n", tst->thread_name); VG_(printf_xml)( " " ); count = VG_(vprintf_xml)( xml_format, *vargsp ); VG_(printf_xml)( " \n" ); diff --git a/docs/internals/xml-output-protocol4.txt b/docs/internals/xml-output-protocol4.txt index a147eaa4cb..ccb22b44d6 100644 --- a/docs/internals/xml-output-protocol4.txt +++ b/docs/internals/xml-output-protocol4.txt @@ -719,6 +719,7 @@ Definition: INT + NAME if set ... @@ -726,12 +727,17 @@ OR INT + NAME if set ... STACK * The tag indicates the Valgrind thread number. +* The tag identifies the name of the thread if it was + set by the client application. If no name was set, the tag is + omitted. + * The tag indicates the message as specified in the client request (properly translated to XML). diff --git a/memcheck/tests/threadname.c b/memcheck/tests/threadname.c index c0e0b47e5f..d3f6e44491 100644 --- a/memcheck/tests/threadname.c +++ b/memcheck/tests/threadname.c @@ -11,7 +11,7 @@ #include #include #include - +#include "valgrind.h" static pthread_t children[3]; @@ -49,6 +49,7 @@ void* child_fn_1 ( void* arg ) # endif bad_things(3); + VALGRIND_PRINTF("%s", "I am in child_fn_1\n"); r = pthread_create(&children[2], NULL, child_fn_2, NULL); assert(!r); diff --git a/memcheck/tests/threadname.stderr.exp b/memcheck/tests/threadname.stderr.exp index 3321af761b..60903eee19 100644 --- a/memcheck/tests/threadname.stderr.exp +++ b/memcheck/tests/threadname.stderr.exp @@ -1,20 +1,20 @@ Invalid write of size 1 at 0x........: bad_things (threadname.c:21) - by 0x........: main (threadname.c:81) + by 0x........: main (threadname.c:82) Address 0x........ is 0 bytes after a block of size 1 alloc'd at 0x........: malloc (vg_replace_malloc.c:...) by 0x........: bad_things (threadname.c:20) - by 0x........: main (threadname.c:81) + by 0x........: main (threadname.c:82) Thread 2: Invalid write of size 1 at 0x........: bad_things (threadname.c:21) - by 0x........: child_fn_0 (threadname.c:66) + by 0x........: child_fn_0 (threadname.c:67) ... Address 0x........ is 0 bytes after a block of size 2 alloc'd at 0x........: malloc (vg_replace_malloc.c:...) by 0x........: bad_things (threadname.c:20) - by 0x........: child_fn_0 (threadname.c:66) + by 0x........: child_fn_0 (threadname.c:67) ... Thread 3 try1: @@ -28,6 +28,7 @@ Invalid write of size 1 by 0x........: child_fn_1 (threadname.c:51) ... +I am in child_fn_1 Thread 4 012345678901234: Invalid write of size 1 at 0x........: bad_things (threadname.c:21) @@ -42,9 +43,9 @@ Invalid write of size 1 Thread 1: Invalid write of size 1 at 0x........: bad_things (threadname.c:21) - by 0x........: main (threadname.c:89) + by 0x........: main (threadname.c:90) Address 0x........ is 0 bytes after a block of size 5 alloc'd at 0x........: malloc (vg_replace_malloc.c:...) by 0x........: bad_things (threadname.c:20) - by 0x........: main (threadname.c:89) + by 0x........: main (threadname.c:90) diff --git a/memcheck/tests/threadname_xml.stderr.exp b/memcheck/tests/threadname_xml.stderr.exp index 067b2ff13b..3f9e593e2f 100644 --- a/memcheck/tests/threadname_xml.stderr.exp +++ b/memcheck/tests/threadname_xml.stderr.exp @@ -185,6 +185,12 @@ + + ... + try1 + I am in child_fn_1 + + 0x........ ... -- 2.47.2