This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
RE: [PATCH] btrace: avoid tp != NULL assertion
- From: "Metzger, Markus T" <markus dot t dot metzger at intel dot com>
- To: Pedro Alves <palves at redhat dot com>
- Cc: "gdb-patches at sourceware dot org" <gdb-patches at sourceware dot org>
- Date: Tue, 3 Mar 2015 10:49:11 +0000
- Subject: RE: [PATCH] btrace: avoid tp != NULL assertion
- Authentication-results: sourceware.org; auth=none
- References: <1423473902-2286-1-git-send-email-markus dot t dot metzger at intel dot com> <54F4DF9D dot 3060400 at redhat dot com>
> -----Original Message-----
> From: gdb-patches-owner@sourceware.org [mailto:gdb-patches-
> owner@sourceware.org] On Behalf Of Pedro Alves
> Sent: Monday, March 2, 2015 11:10 PM
> To: Metzger, Markus T
> Cc: gdb-patches@sourceware.org
> Subject: Re: [PATCH] btrace: avoid tp != NULL assertion
>
> On 02/09/2015 09:25 AM, Markus Metzger wrote:
> > On some targets, I see the LWP field patched out of INFERIOR_PTID before
> > calling record_btrace_fetch_registers. Looking to the respective linux-nat
> > versions, they use the PID field if the LWP field is zero.
>
> Sorry, I'm not sold on this one. Please give more detail.
>
> Which targets? What's the backtrace like?
I saw this on a 32-bit Fedora 20 running on i5-4250U.
When I debug it using a conditional breakpoint on the assert, I get:
(gdb) rec b
(gdb) n
Breakpoint 1, record_btrace_fetch_registers (ops=0x974bfc0 <record_btrace_ops>,
regcache=0x9a0a798, regno=8) at gdb/record-btrace.c:1202
1202 gdb_assert (tp != NULL);
(gdb) bt
#0 record_btrace_fetch_registers (ops=0x974bfc0 <record_btrace_ops>, regcache=0x9a0a798, regno=8)
at gdb/record-btrace.c:1202
#1 0x083f4ee2 in delegate_fetch_registers (self=0x974bfc0 <record_btrace_ops>, arg1=0x9a0a798,
arg2=8) at gdb/target-delegates.c:149
#2 0x08406562 in target_fetch_registers (regcache=0x9a0a798, regno=8)
at gdb/target.c:3279
#3 0x08355255 in regcache_raw_read (regcache=0x9a0a798, regnum=8,
buf=0xbfffe6c0 "¨\003\222\tÀ8kIøæÿ¿HO5\b\035]")
at gdb/regcache.c:643
....
(gdb) up 3
#3 0x08355255 in regcache_raw_read (regcache=0x9a0a798, regnum=8,
buf=0xbfffe6c0 "¨\003\222\tÀ8kIøæÿ¿HO5\b\035]") at gdb/regcache.c:643
643 target_fetch_registers (regcache, regnum);
(gdb) l
638 && regcache_register_status (regcache, regnum) == REG_UNKNOWN)
639 {
640 struct cleanup *old_chain = save_inferior_ptid ();
641
642 inferior_ptid = regcache->ptid;
643 target_fetch_registers (regcache, regnum);
644 do_cleanups (old_chain);
645
646 /* A number of targets can't access the whole set of raw
647 registers (because the debug API provides no means to get at
(gdb) p regcache->ptid
$3 = {pid = 23856, lwp = 0, tid = 0}
(gdb) p *cleanup_chain
$12 = {next = 0x9a25820, function = 0x83b9ebd <restore_inferior_ptid>, free_arg = 0x0,
arg = 0x9a76088}
(gdb) p *(ptid_t *)cleanup_chain->arg
$13 = {pid = 23856, lwp = 23856, tid = 0}
(gdb)
I have no idea how regcache->ptid ended up with lwp=0.
Here's the full backtrace in case it helps.
(gdb) bt
#0 record_btrace_fetch_registers (ops=0x974bfc0 <record_btrace_ops>, regcache=0x9a0a798, regno=8)
at gdb/record-btrace.c:1202
#1 0x083f4ee2 in delegate_fetch_registers (self=0x974bfc0 <record_btrace_ops>, arg1=0x9a0a798,
arg2=8) at gdb/target-delegates.c:149
#2 0x08406562 in target_fetch_registers (regcache=0x9a0a798, regno=8)
at gdb/target.c:3279
#3 0x08355255 in regcache_raw_read (regcache=0x9a0a798, regnum=8,
buf=0xbfffe6c0 "¨\003\222\tÀ8kIøæÿ¿HO5\b\035]")
at gdb/regcache.c:643
#4 0x083558a7 in regcache_cooked_read (regcache=0x9a0a798, regnum=8,
buf=0xbfffe6c0 "¨\003\222\tÀ8kIøæÿ¿HO5\b\035]")
at gdb/regcache.c:734
#5 0x08355de3 in regcache_cooked_read_unsigned (regcache=0x9a0a798, regnum=8, val=0xbfffe738)
at gdb/regcache.c:838
#6 0x0827a106 in i386_linux_resume (ops=0x9737ca0 <linux_ops_saved>, ptid=..., step=1,
signal=GDB_SIGNAL_0) at gdb/i386-linux-nat.c:670
#7 0x08280c12 in linux_resume_one_lwp (lp=0x9a0a5b8, step=1, signo=GDB_SIGNAL_0)
at gdb/linux-nat.c:1529
#8 0x08281281 in linux_nat_resume (ops=0x98da608, ptid=..., step=1, signo=GDB_SIGNAL_0)
at gdb/linux-nat.c:1708
#9 0x0850738e in record_btrace_resume (ops=0x98da608, ptid=..., step=1, signal=GDB_SIGNAL_0)
at gdb/record-btrace.c:1760
#10 0x083f4b3d in delegate_resume (self=0x974bfc0 <record_btrace_ops>, arg1=..., arg2=1,
arg3=GDB_SIGNAL_0) at gdb/target-delegates.c:87
#11 0x08404b79 in target_resume (ptid=..., step=1, signal=GDB_SIGNAL_0)
at gdb/target.c:2231
#12 0x083b0ecd in resume (step=1, sig=GDB_SIGNAL_0)
at gdb/infrun.c:2387
#13 0x083b16fe in proceed (addr=18446744073709551615, siggnal=GDB_SIGNAL_DEFAULT, step=1)
at gdb/infrun.c:2731
#14 0x083a9d84 in step_once (skip_subroutines=1, single_inst=0, count=1, thread=1)
at gdb/infcmd.c:1121
#15 0x083a9a2f in step_1 (skip_subroutines=1, single_inst=0, count_string=0x0)
at gdb/infcmd.c:977
#16 0x083a97a0 in next_command (count_string=0x0, from_tty=1)
at gdb/infcmd.c:885
#17 0x082bda38 in do_cfunc (c=0x990a3e8, args=0x0, from_tty=1)
at gdb/cli/cli-decode.c:105
#18 0x082c03a1 in cmd_func (cmd=0x990a3e8, args=0x0, from_tty=1)
at gdb/cli/cli-decode.c:1893
#19 0x084c8768 in execute_command (p=0x9772ce1 "", from_tty=1)
at gdb/top.c:476
#20 0x083d1f80 in command_handler (command=0x9772ce0 "n")
at gdb/event-top.c:494
#21 0x083d249b in command_line_handler (rl=0x9a25ab8 "n")
at gdb/event-top.c:692
#22 0x08528ae7 in rl_callback_read_char () at readline/callback.c:220
#23 0x083d1aa7 in rl_callback_read_char_wrapper (client_data=0x0)
at gdb/event-top.c:171
#24 0x083d1ea3 in stdin_event_handler (error=0, client_data=0x0)
at gdb/event-top.c:432
#25 0x083d0ff8 in handle_file_event (file_ptr=0x9a25638, ready_mask=1)
at gdb/event-loop.c:657
#26 0x083d127b in gdb_wait_for_event (block=1) at gdb/event-loop.c:772
#27 0x083d0726 in gdb_do_one_event () at gdb/event-loop.c:309
#28 0x083d0777 in start_event_loop () at gdb/event-loop.c:334
#29 0x083d1ad0 in cli_command_loop (data=0x0) at gdb/event-top.c:186
#30 0x083c95a3 in current_interp_command_loop () at gdb/interps.c:317
#31 0x083ca72b in captured_command_loop (data=0x0) at gdb/main.c:321
#32 0x083c698f in catch_errors (func=0x83ca716 <captured_command_loop>, func_args=0x0,
errstring=0x8c65769 "", mask=RETURN_MASK_ALL)
at gdb/exceptions.c:235
#33 0x083cba17 in captured_main (data=0xbfffef54) at gdb/main.c:1148
#34 0x083c698f in catch_errors (func=0x83caac1 <captured_main>, func_args=0xbfffef54,
errstring=0x8c65769 "", mask=RETURN_MASK_ALL)
at gdb/exceptions.c:235
#35 0x083cba42 in gdb_main (args=0xbfffef54) at gdb/main.c:1156
#36 0x080c7097 in main (argc=2, argv=0xbffff004) at gdb/gdb.c:32
(gdb)
Regards,
Markus.
Intel GmbH
Dornacher Strasse 1
85622 Feldkirchen/Muenchen, Deutschland
Sitz der Gesellschaft: Feldkirchen bei Muenchen
Geschaeftsfuehrer: Christian Lamprechter, Hannes Schwaderer, Douglas Lusk
Registergericht: Muenchen HRB 47456
Ust.-IdNr./VAT Registration No.: DE129385895
Citibank Frankfurt a.M. (BLZ 502 109 00) 600119052