mirror of
https://github.com/Zenithsiz/ftmemsim-valgrind.git
synced 2026-02-03 01:51:29 +00:00
Fix 191069 Exiting due to signal not reported in XML output
Patch from Matthias Schwarzott (slightly modified) git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15747
This commit is contained in:
parent
bcea2454f3
commit
21ec256b95
1
NEWS
1
NEWS
@ -39,6 +39,7 @@ To see details of a given bug, visit
|
||||
https://bugs.kde.org/show_bug.cgi?id=XXXXXX
|
||||
where XXXXXX is the bug number as listed below.
|
||||
|
||||
191069 report fatal signal in XML output
|
||||
278744 cvtps2pd with redundant RexW
|
||||
353083 arm64 doesn't implement various xattr system calls
|
||||
353084 arm64 doesn't support sigpending system call
|
||||
|
||||
@ -1740,14 +1740,26 @@ static void default_action(const vki_siginfo_t *info, ThreadId tid)
|
||||
core = False;
|
||||
}
|
||||
|
||||
if ( (VG_(clo_verbosity) >= 1 ||
|
||||
(could_core && is_signal_from_kernel(tid, sigNo, info->si_code))
|
||||
) &&
|
||||
!VG_(clo_xml) ) {
|
||||
VG_(umsg)(
|
||||
"\n"
|
||||
"Process terminating with default action of signal %d (%s)%s\n",
|
||||
sigNo, VG_(signame)(sigNo), core ? ": dumping core" : "");
|
||||
if ( VG_(clo_verbosity) >= 1
|
||||
|| (could_core && is_signal_from_kernel(tid, sigNo, info->si_code))
|
||||
|| VG_(clo_xml) ) {
|
||||
if (VG_(clo_xml)) {
|
||||
VG_(printf_xml)("<fatal_signal>\n");
|
||||
VG_(printf_xml)(" <tid>%d</tid>\n", tid);
|
||||
ThreadState* tst = VG_(get_ThreadState)(tid);
|
||||
if (tst->thread_name) {
|
||||
VG_(printf_xml)(" <threadname>%s</threadname>\n",
|
||||
tst->thread_name);
|
||||
}
|
||||
VG_(printf_xml)(" <signo>%d</signo>\n", sigNo);
|
||||
VG_(printf_xml)(" <signame>%s</signame>\n", VG_(signame)(sigNo));
|
||||
VG_(printf_xml)(" <sicode>%d</sicode>\n", info->si_code);
|
||||
} else {
|
||||
VG_(umsg)(
|
||||
"\n"
|
||||
"Process terminating with default action of signal %d (%s)%s\n",
|
||||
sigNo, VG_(signame)(sigNo), core ? ": dumping core" : "");
|
||||
}
|
||||
|
||||
/* Be helpful - decode some more details about this fault */
|
||||
if (is_signal_from_kernel(tid, sigNo, info->si_code)) {
|
||||
@ -1820,13 +1832,21 @@ static void default_action(const vki_siginfo_t *info, ThreadId tid)
|
||||
break;
|
||||
} /* switch (sigNo) */
|
||||
|
||||
if (event != NULL) {
|
||||
if (haveaddr)
|
||||
VG_(umsg)(" %s at address %p\n",
|
||||
event, info->VKI_SIGINFO_si_addr);
|
||||
else
|
||||
VG_(umsg)(" %s\n", event);
|
||||
}
|
||||
if (VG_(clo_xml)) {
|
||||
if (event != NULL)
|
||||
VG_(printf_xml)(" <event>%s</event>\n", event);
|
||||
if (haveaddr)
|
||||
VG_(printf_xml)(" <siaddr>%p</siaddr>\n",
|
||||
info->VKI_SIGINFO_si_addr);
|
||||
} else {
|
||||
if (event != NULL) {
|
||||
if (haveaddr)
|
||||
VG_(umsg)(" %s at address %p\n",
|
||||
event, info->VKI_SIGINFO_si_addr);
|
||||
else
|
||||
VG_(umsg)(" %s\n", event);
|
||||
}
|
||||
}
|
||||
}
|
||||
/* Print a stack trace. Be cautious if the thread's SP is in an
|
||||
obviously stupid place (not mapped readable) that would
|
||||
@ -1845,8 +1865,8 @@ static void default_action(const vki_siginfo_t *info, ThreadId tid)
|
||||
if (tid == 1) { // main thread
|
||||
Addr esp = VG_(get_SP)(tid);
|
||||
Addr base = VG_PGROUNDDN(esp - VG_STACK_REDZONE_SZB);
|
||||
if (VG_(am_addr_is_in_extensible_client_stack)(base) &&
|
||||
VG_(extend_stack)(tid, base)) {
|
||||
if (VG_(am_addr_is_in_extensible_client_stack)(base)
|
||||
&& VG_(extend_stack)(tid, base)) {
|
||||
if (VG_(clo_trace_signals))
|
||||
VG_(dmsg)(" -> extended stack base to %#lx\n",
|
||||
VG_PGROUNDDN(esp));
|
||||
@ -1889,6 +1909,11 @@ static void default_action(const vki_siginfo_t *info, ThreadId tid)
|
||||
VG_(threads)[1].client_stack_szB);
|
||||
}
|
||||
}
|
||||
if (VG_(clo_xml)) {
|
||||
/* postamble */
|
||||
VG_(printf_xml)("</fatal_signal>\n");
|
||||
VG_(printf_xml)("\n");
|
||||
}
|
||||
}
|
||||
|
||||
if (VG_(clo_vgdb) != Vg_VgdbNo
|
||||
@ -2683,8 +2708,8 @@ static Bool extend_stack_if_appropriate(ThreadId tid, vki_siginfo_t* info)
|
||||
then extend the stack segment.
|
||||
*/
|
||||
Addr base = VG_PGROUNDDN(esp - VG_STACK_REDZONE_SZB);
|
||||
if (VG_(am_addr_is_in_extensible_client_stack)(base) &&
|
||||
VG_(extend_stack)(tid, base)) {
|
||||
if (VG_(am_addr_is_in_extensible_client_stack)(base)
|
||||
&& VG_(extend_stack)(tid, base)) {
|
||||
if (VG_(clo_trace_signals))
|
||||
VG_(dmsg)(" -> extended stack base to %#lx\n",
|
||||
VG_PGROUNDDN(fault));
|
||||
@ -2783,11 +2808,11 @@ void sync_signalhandler ( Int sigNo,
|
||||
|
||||
vg_assert(info != NULL);
|
||||
vg_assert(info->si_signo == sigNo);
|
||||
vg_assert(sigNo == VKI_SIGSEGV ||
|
||||
sigNo == VKI_SIGBUS ||
|
||||
sigNo == VKI_SIGFPE ||
|
||||
sigNo == VKI_SIGILL ||
|
||||
sigNo == VKI_SIGTRAP);
|
||||
vg_assert(sigNo == VKI_SIGSEGV
|
||||
|| sigNo == VKI_SIGBUS
|
||||
|| sigNo == VKI_SIGFPE
|
||||
|| sigNo == VKI_SIGILL
|
||||
|| sigNo == VKI_SIGTRAP);
|
||||
|
||||
info->si_code = sanitize_si_code(info->si_code);
|
||||
|
||||
|
||||
@ -743,3 +743,53 @@ OR
|
||||
|
||||
* STACK is only present in case of VALGRIND_PRINTF_BACKTRACE. See above
|
||||
for a definition of STACK.
|
||||
|
||||
====================================================================
|
||||
|
||||
FATAL_SIGNAL
|
||||
|
||||
FATAL_SIGNAL defines a message that was caused by a signal that killed them
|
||||
process.
|
||||
|
||||
Definition:
|
||||
|
||||
<fatal_signal>
|
||||
<tid>INT</tid>
|
||||
<threadname>NAME</threadname> if set
|
||||
|
||||
<signo>INT</signo>
|
||||
<signame>NAME</signame>
|
||||
|
||||
<sicode>INT</sicode>
|
||||
<event>NAME</event>
|
||||
<siaddr>ADDR</siaddr>
|
||||
|
||||
STACK
|
||||
|
||||
</fatal_signal>
|
||||
|
||||
* The <tid> tag indicates the Valgrind thread number. This value
|
||||
is arbitrary but may be used to determine which threads produced
|
||||
which errors (at least, the first instance of each error).
|
||||
|
||||
* The <threadname> 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 <signo> tag indicates signo value from struct siginfo.
|
||||
|
||||
* In <signame> tag there is the decoded name of signo.
|
||||
|
||||
* The <sicode> tag contains the sicode from struct siginfo.
|
||||
|
||||
* The <event> tag indicates the decoded name of the sicode. If sicode
|
||||
has no name, the tag is omitted.
|
||||
|
||||
* The <siaddr> tag indicates the address that is the reason
|
||||
why the signal was triggered. This can be an unaligned pointer value or
|
||||
just the address of not mapped memory that is accessed nevertheless.
|
||||
If the signal reason is not related to an address, the tag is omitted.
|
||||
|
||||
* STACK is defined above and shows where the thread was when it
|
||||
catched the signal. When sending the signal to itself using raise,
|
||||
then raise is visible in this stack.
|
||||
|
||||
@ -297,7 +297,8 @@ EXTRA_DIST = \
|
||||
writev1.stderr.exp writev1.stderr.exp-solaris writev1.vgtest \
|
||||
xml1.stderr.exp xml1.stdout.exp xml1.vgtest xml1.stderr.exp-s390x-mvc \
|
||||
threadname.vgtest threadname.stderr.exp \
|
||||
threadname_xml.vgtest threadname_xml.stderr.exp
|
||||
threadname_xml.vgtest threadname_xml.stderr.exp \
|
||||
gone_abrt_xml.vgtest gone_abrt_xml.stderr.exp
|
||||
|
||||
check_PROGRAMS = \
|
||||
accounting \
|
||||
|
||||
63
memcheck/tests/gone_abrt_xml.stderr.exp
Normal file
63
memcheck/tests/gone_abrt_xml.stderr.exp
Normal file
@ -0,0 +1,63 @@
|
||||
<?xml version="1.0"?>
|
||||
|
||||
<valgrindoutput>
|
||||
|
||||
<protocolversion>4</protocolversion>
|
||||
<protocoltool>memcheck</protocoltool>
|
||||
|
||||
<preamble>
|
||||
<line>...</line>
|
||||
<line>...</line>
|
||||
<line>...</line>
|
||||
<line>...</line>
|
||||
</preamble>
|
||||
|
||||
<pid>...</pid>
|
||||
<ppid>...</ppid>
|
||||
<tool>memcheck</tool>
|
||||
|
||||
<args>
|
||||
<vargv>...</vargv>
|
||||
<argv>
|
||||
<exe>./../../gdbserver_tests/gone</exe>
|
||||
<arg>abort</arg>
|
||||
</argv>
|
||||
</args>
|
||||
|
||||
<status>
|
||||
<state>RUNNING</state>
|
||||
<time>...</time>
|
||||
</status>
|
||||
|
||||
starting ...
|
||||
aborting ...
|
||||
<fatal_signal>
|
||||
<tid>...</tid>
|
||||
<signo>6</signo>
|
||||
<signame>SIGABRT</signame>
|
||||
<sicode>0</sicode>
|
||||
<stack>
|
||||
<frame>
|
||||
<ip>0x........</ip>
|
||||
<obj>...</obj>
|
||||
<fn>main</fn>
|
||||
<dir>...</dir>
|
||||
<file>gone.c</file>
|
||||
<line>...</line>
|
||||
</frame>
|
||||
</stack>
|
||||
</fatal_signal>
|
||||
|
||||
|
||||
<status>
|
||||
<state>FINISHED</state>
|
||||
<time>...</time>
|
||||
</status>
|
||||
|
||||
<errorcounts>
|
||||
</errorcounts>
|
||||
|
||||
<suppcounts>...</suppcounts>
|
||||
|
||||
</valgrindoutput>
|
||||
|
||||
5
memcheck/tests/gone_abrt_xml.vgtest
Normal file
5
memcheck/tests/gone_abrt_xml.vgtest
Normal file
@ -0,0 +1,5 @@
|
||||
prog: ../../gdbserver_tests/gone
|
||||
args: abort
|
||||
vgopts: --xml=yes --xml-fd=2 --log-file=/dev/null
|
||||
stderr_filter: filter_xml
|
||||
cleanup: rm -f vgcore.*
|
||||
Loading…
x
Reference in New Issue
Block a user