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] Let gdbserver doesn't tell GDB it support target-side breakpoint conditions and commands if it doesn't support 'Z' packet


On 10/21/2013 11:30 AM, Hui Zhu wrote:
> We found that in powerpc arch board, it cannot pass some dprintf test:
> FAIL: gdb.base/dprintf.exp: dprintf info 2 (pattern 6)
> FAIL: gdb.mi/mi-dprintf.exp: mi expect stop (unknown output after running)
> FAIL: gdb.mi/mi-dprintf.exp: mi 1st dprintf, agent (unknown output after running)
> 
> This because the gdbserver will always tell GDB that it support target-side breakpoint conditions and commands.  So "set dprintf-style agent" will always got success.
> But target-side breakpoint conditions and commands are depend on 'Z' packet because GDB just can post target-side breakpoint conditions and commands with 'Z' packet.
> The test will check if "set dprintf-style agent" success or not.  Because it will always succes.  So GDB change the commands to agent-printf that will make test get fail.

There happens to be a single "the_low_target.insert_point" entry
point in gdbserver for all sorts of Z packets.  But Z0, Z1, Z2, etc.,
they're all different packets (software breakpoints, hardware breakpoints,
watchpoints, etc.).  A target might well support Z1 but not Z0.  Or it
may support Z2/Z3/Z4, but not Z0..Z1 -- that's the case of MIPS gdbserver.

So, having a "the_low_target.insert_point" hook installed does not
actually mean that dprintf will work.  (Consider what the patch
would need to do if instead of a single "the_low_target.insert_point"
entry point, we had one for each Zx packet.)

In the general case, gdbserver can't possibly know what packet GDB
will want to send with target conditions or target commands in.  GDB
could end up sending either a Z0, or a Z1.  The target might support
Z1, but not Z0, leaving gdb to handle memory breakpoints.
The concept of target-side conditions and commands is broader
than dprintf.

I think that first, GDB should be taught to handle this scenario
itself.  That is, if we try this against gdbserver:

 (gdb) set dprintf-style agent
 (gdb) set remote Z-packet off
 (gdb) dprint main,"foo"
 Dprintf 1 at 0x410776: file foo.c, line 10.
 (gdb) c

GDB should realize that the dprintf won't work, right
at insertion time, but, it currently does not.

-- 
Pedro Alves


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