powerpc: Support z-point type in gdbserver.

Support z-point, so tracepoints and breakpoints can be inserted at the same
location.

gdb/gdbserver/ChangeLog:

2016-02-24  Wei-cheng Wang  <cole945@gmail.com>

	* linux-ppc-low.c (ppc_supports_z_point_type): New function:
	(ppc_insert_point, ppc_remove_point): Insert/remove z-packet breakpoints.
	(ppc64_emit_ops_vector): Add target ops - ppc_supports_z_point_type,
	ppc_insert_point, ppc_remove_point.
This commit is contained in:
Wei-cheng Wang 2015-06-28 00:21:39 +08:00 committed by Marcin Kościelnicki
parent 92d77487b3
commit 657f9cde9d
2 changed files with 73 additions and 3 deletions

View File

@ -1,3 +1,10 @@
2016-02-24 Wei-cheng Wang <cole945@gmail.com>
* linux-ppc-low.c (ppc_supports_z_point_type): New function:
(ppc_insert_point, ppc_remove_point): Insert/remove z-packet breakpoints.
(ppc64_emit_ops_vector): Add target ops - ppc_supports_z_point_type,
ppc_insert_point, ppc_remove_point.
2016-02-17 Marcin Kościelnicki <koriakin@0x04.net>
* linux-s390-low.c (s390_supports_z_point_type): New function.

View File

@ -423,6 +423,69 @@ ppc_breakpoint_at (CORE_ADDR where)
return 0;
}
/* Implement supports_z_point_type target-ops.
Returns true if type Z_TYPE breakpoint is supported.
Handling software breakpoint at server side, so tracepoints
and breakpoints can be inserted at the same location. */
static int
ppc_supports_z_point_type (char z_type)
{
switch (z_type)
{
case Z_PACKET_SW_BP:
return 1;
case Z_PACKET_HW_BP:
case Z_PACKET_WRITE_WP:
case Z_PACKET_ACCESS_WP:
default:
return 0;
}
}
/* Implement insert_point target-ops.
Returns 0 on success, -1 on failure and 1 on unsupported. */
static int
ppc_insert_point (enum raw_bkpt_type type, CORE_ADDR addr,
int size, struct raw_breakpoint *bp)
{
switch (type)
{
case raw_bkpt_type_sw:
return insert_memory_breakpoint (bp);
case raw_bkpt_type_hw:
case raw_bkpt_type_write_wp:
case raw_bkpt_type_access_wp:
default:
/* Unsupported. */
return 1;
}
}
/* Implement remove_point target-ops.
Returns 0 on success, -1 on failure and 1 on unsupported. */
static int
ppc_remove_point (enum raw_bkpt_type type, CORE_ADDR addr,
int size, struct raw_breakpoint *bp)
{
switch (type)
{
case raw_bkpt_type_sw:
return remove_memory_breakpoint (bp);
case raw_bkpt_type_hw:
case raw_bkpt_type_write_wp:
case raw_bkpt_type_access_wp:
default:
/* Unsupported. */
return 1;
}
}
/* Provide only a fill function for the general register set. ps_lgetregs
will use this for NPTL support. */
@ -706,9 +769,9 @@ struct linux_target_ops the_low_target = {
NULL,
0,
ppc_breakpoint_at,
NULL, /* supports_z_point_type */
NULL,
NULL,
ppc_supports_z_point_type,
ppc_insert_point,
ppc_remove_point,
NULL,
NULL,
ppc_collect_ptrace_register,