Fix nto,spu and win32 builds of GDBServer.

This patch fixes the build that was broken by :
https://sourceware.org/ml/gdb-patches/2015-10/msg00369.html

It implements the sw_breakpoint_from_kind operation on these targets and removes
the calls to set_breakpoint_data.

Compiliation tested on win32.

Not tested : nto, spu.

gdb/gdbserver/ChangeLog:

	* nto-low.c (nto_sw_breakpoint_from_kind): New function.
	(struct target_ops) <sw_breakpoint_from_kind>: Initialize.
	(initialize_low): Remove set_breakpoint_data call.
	* spu-low.c (spu_sw_breakpoint_from_kind): New function.
	(struct target_ops) <sw_breakpoint_from_kind>: Iniitalize.
	(initialize_low): Remove set_breakpoint_data call.
	* win32-low.c (win32_sw_breakpoint_from_kind): New function.
	(struct target_ops) <sw_breakpoint_from_kind>: Initialize.
	(initialize_low): Remove set_breakpoint_data call.
This commit is contained in:
Antoine Tremblay 2015-10-23 13:20:39 -04:00
parent 2e6ee069ae
commit fb78e89c56
4 changed files with 139 additions and 10 deletions

View File

@ -1,3 +1,15 @@
2015-10-23 Antoine Tremblay <antoine.tremblay@ericsson.com>
* nto-low.c (nto_sw_breakpoint_from_kind): New function.
(struct target_ops) <sw_breakpoint_from_kind>: Initialize.
(initialize_low): Remove set_breakpoint_data call.
* spu-low.c (spu_sw_breakpoint_from_kind): New function.
(struct target_ops) <sw_breakpoint_from_kind>: Iniitalize.
(initialize_low): Remove set_breakpoint_data call.
* win32-low.c (win32_sw_breakpoint_from_kind): New function.
(struct target_ops) <sw_breakpoint_from_kind>: Initialize.
(initialize_low): Remove set_breakpoint_data call.
2015-10-23 Antoine Tremblay <antoine.tremblay@ericsson.com>
* linux-low.c (default_breakpoint_kind_from_pc): Move to target.c.

View File

@ -921,6 +921,14 @@ nto_supports_non_stop (void)
return 0;
}
/* Implementation of the target_ops method "sw_breakpoint_from_kind". */
static const gdb_byte *
nto_sw_breakpoint_from_kind (int kind, int *size)
{
*size = the_low_target.breakpoint_len;
return the_low_target.breakpoint;
}
static struct target_ops nto_target_ops = {
@ -961,7 +969,42 @@ static struct target_ops nto_target_ops = {
NULL, /* xfer_siginfo */
nto_supports_non_stop,
NULL, /* async */
NULL /* start_non_stop */
NULL, /* start_non_stop */
NULL, /* supports_multi_process */
NULL, /* supports_fork_events */
NULL, /* supports_vfork_events */
NULL, /* supports_exec_events */
NULL, /* handle_new_gdb_connection */
NULL, /* handle_monitor_command */
NULL, /* core_of_thread */
NULL, /* read_loadmap */
NULL, /* process_qsupported */
NULL, /* supports_tracepoints */
NULL, /* read_pc */
NULL, /* write_pc */
NULL, /* thread_stopped */
NULL, /* get_tib_address */
NULL, /* pause_all */
NULL, /* unpause_all */
NULL, /* stabilize_threads */
NULL, /* install_fast_tracepoint_jump_pad */
NULL, /* emit_ops */
NULL, /* supports_disable_randomization */
NULL, /* get_min_fast_tracepoint_insn_len */
NULL, /* qxfer_libraries_svr4 */
NULL, /* support_agent */
NULL, /* support_btrace */
NULL, /* enable_btrace */
NULL, /* disable_btrace */
NULL, /* read_btrace */
NULL, /* read_btrace_conf */
NULL, /* supports_range_stepping */
NULL, /* pid_to_exec_file */
NULL, /* multifs_open */
NULL, /* multifs_unlink */
NULL, /* multifs_readlink */
NULL, /* breakpoint_kind_from_pc */
nto_sw_breakpoint_from_kind,
};
@ -975,8 +1018,6 @@ initialize_low (void)
TRACE ("%s\n", __func__);
set_target_ops (&nto_target_ops);
set_breakpoint_data (the_low_target.breakpoint,
the_low_target.breakpoint_len);
/* We use SIGUSR1 to gain control after we block waiting for a process.
We use sigwaitevent to wait. */

View File

@ -56,6 +56,9 @@ int using_threads = 0;
void init_registers_spu (void);
extern const struct target_desc *tdesc_spu;
/* Software breakpoint instruction. */
static const gdb_byte breakpoint[] = { 0x00, 0x00, 0x3f, 0xff };
/* Fetch PPU register REGNO. */
static CORE_ADDR
fetch_ppc_register (int regno)
@ -639,6 +642,15 @@ spu_request_interrupt (void)
syscall (SYS_tkill, lwpid_of (thr), SIGINT);
}
/* Implementation of the target_ops method "sw_breakpoint_from_kind". */
static const gdb_byte *
spu_sw_breakpoint_from_kind (int kind, int *size)
{
*size = sizeof breakpoint;
return breakpoint;
}
static struct target_ops spu_target_ops = {
spu_create_inferior,
NULL, /* arch_setup */
@ -673,14 +685,51 @@ static struct target_ops spu_target_ops = {
NULL,
spu_proc_xfer_spu,
hostio_last_error_from_errno,
NULL, /* qxfer_osdata */
NULL, /* qxfer_siginfo */
NULL, /* supports_non_stop */
NULL, /* async */
NULL, /* start_non_stop */
NULL, /* supports_multi_process */
NULL, /* supports_fork_events */
NULL, /* supports_vfork_events */
NULL, /* supports_exec_events */
NULL, /* handle_new_gdb_connection */
NULL, /* handle_monitor_command */
NULL, /* core_of_thread */
NULL, /* read_loadmap */
NULL, /* process_qsupported */
NULL, /* supports_tracepoints */
NULL, /* read_pc */
NULL, /* write_pc */
NULL, /* thread_stopped */
NULL, /* get_tib_address */
NULL, /* pause_all */
NULL, /* unpause_all */
NULL, /* stabilize_threads */
NULL, /* install_fast_tracepoint_jump_pad */
NULL, /* emit_ops */
NULL, /* supports_disable_randomization */
NULL, /* get_min_fast_tracepoint_insn_len */
NULL, /* qxfer_libraries_svr4 */
NULL, /* support_agent */
NULL, /* support_btrace */
NULL, /* enable_btrace */
NULL, /* disable_btrace */
NULL, /* read_btrace */
NULL, /* read_btrace_conf */
NULL, /* supports_range_stepping */
NULL, /* pid_to_exec_file */
NULL, /* multifs_open */
NULL, /* multifs_unlink */
NULL, /* multifs_readlink */
NULL, /* breakpoint_kind_from_pc */
spu_sw_breakpoint_from_kind,
};
void
initialize_low (void)
{
static const unsigned char breakpoint[] = { 0x00, 0x00, 0x3f, 0xff };
set_target_ops (&spu_target_ops);
set_breakpoint_data (breakpoint, sizeof breakpoint);
init_registers_spu ();
}

View File

@ -1783,6 +1783,15 @@ win32_get_tib_address (ptid_t ptid, CORE_ADDR *addr)
return 1;
}
/* Implementation of the target_ops method "sw_breakpoint_from_kind". */
static const gdb_byte *
win32_sw_breakpoint_from_kind (int kind, int *size)
{
*size = the_low_target.breakpoint_len;
return the_low_target.breakpoint;
}
static struct target_ops win32_target_ops = {
win32_create_inferior,
NULL, /* arch_setup */
@ -1839,7 +1848,28 @@ static struct target_ops win32_target_ops = {
NULL, /* read_pc */
NULL, /* write_pc */
NULL, /* thread_stopped */
win32_get_tib_address
win32_get_tib_address,
NULL, /* pause_all */
NULL, /* unpause_all */
NULL, /* stabilize_threads */
NULL, /* install_fast_tracepoint_jump_pad */
NULL, /* emit_ops */
NULL, /* supports_disable_randomization */
NULL, /* get_min_fast_tracepoint_insn_len */
NULL, /* qxfer_libraries_svr4 */
NULL, /* support_agent */
NULL, /* support_btrace */
NULL, /* enable_btrace */
NULL, /* disable_btrace */
NULL, /* read_btrace */
NULL, /* read_btrace_conf */
NULL, /* supports_range_stepping */
NULL, /* pid_to_exec_file */
NULL, /* multifs_open */
NULL, /* multifs_unlink */
NULL, /* multifs_readlink */
NULL, /* breakpoint_kind_from_pc */
win32_sw_breakpoint_from_kind,
};
/* Initialize the Win32 backend. */
@ -1847,8 +1877,5 @@ void
initialize_low (void)
{
set_target_ops (&win32_target_ops);
if (the_low_target.breakpoint != NULL)
set_breakpoint_data (the_low_target.breakpoint,
the_low_target.breakpoint_len);
the_low_target.arch_setup ();
}