This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RE: [PATCH] btrace: avoid tp != NULL assertion


> -----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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]