X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdbserver%2Fnto-low.cc;h=a88ad02f6454fc87335deaf4fb7be2deb5aea81a;hb=refs%2Fheads%2Fconcurrent-displaced-stepping-2020-04-01;hp=d56f247acb4155cebc12e2878cb432734ab324de;hpb=e2558df32b83c2e3b41829d46c0b3d09732d7176;p=deliverable%2Fbinutils-gdb.git diff --git a/gdbserver/nto-low.cc b/gdbserver/nto-low.cc index d56f247acb..a88ad02f64 100644 --- a/gdbserver/nto-low.cc +++ b/gdbserver/nto-low.cc @@ -357,7 +357,6 @@ nto_process_target::create_inferior (const char *program, struct inheritance inherit; pid_t pid; sigset_t set; - std::string str_program_args = stringify_argv (program_args); TRACE ("%s %s\n", __func__, program); /* Clear any pending SIGUSR1's but keep the behavior the same. */ @@ -371,7 +370,7 @@ nto_process_target::create_inferior (const char *program, inherit.flags |= SPAWN_SETGROUP | SPAWN_HOLD; inherit.pgroup = SPAWN_NEWPGROUP; pid = spawnp (program, 0, NULL, &inherit, - (char *) str_program_args.c_str (), 0); + program_args.data (), 0); sigprocmask (SIG_BLOCK, &set, NULL); if (pid == -1) @@ -746,8 +745,8 @@ nto_process_target::write_memory (CORE_ADDR memaddr, /* Stop inferior. We always stop all threads. */ -static void -nto_request_interrupt (void) +void +nto_process_target::request_interrupt () { TRACE ("%s\n", __func__); nto_set_thread (ptid_t (nto_inferior.pid, 1, 0)); @@ -755,14 +754,21 @@ nto_request_interrupt (void) TRACE ("Error stopping inferior.\n"); } +bool +nto_process_target::supports_read_auxv () +{ + return true; +} + /* Read auxiliary vector from inferior's memory into gdbserver's buffer MYADDR. We always read whole auxv. Return number of bytes stored in MYADDR buffer, 0 if OFFSET > 0 or -1 on error. */ -static int -nto_read_auxv (CORE_ADDR offset, unsigned char *myaddr, unsigned int len) +int +nto_process_target::read_auxv (CORE_ADDR offset, unsigned char *myaddr, + unsigned int len) { int err; CORE_ADDR initial_stack; @@ -782,8 +788,8 @@ nto_read_auxv (CORE_ADDR offset, unsigned char *myaddr, unsigned int len) return nto_read_auxv_from_initial_stack (initial_stack, myaddr, len); } -static int -nto_supports_z_point_type (char z_type) +bool +nto_process_target::supports_z_point_type (char z_type) { switch (z_type) { @@ -792,17 +798,17 @@ nto_supports_z_point_type (char z_type) case Z_PACKET_WRITE_WP: case Z_PACKET_READ_WP: case Z_PACKET_ACCESS_WP: - return 1; + return true; default: - return 0; + return false; } } /* Insert {break/watch}point at address ADDR. SIZE is not used. */ -static int -nto_insert_point (enum raw_bkpt_type type, CORE_ADDR addr, - int size, struct raw_breakpoint *bp) +int +nto_process_target::insert_point (enum raw_bkpt_type type, CORE_ADDR addr, + int size, raw_breakpoint *bp) { int wtype = _DEBUG_BREAK_HW; /* Always request HW. */ @@ -832,9 +838,9 @@ nto_insert_point (enum raw_bkpt_type type, CORE_ADDR addr, /* Remove {break/watch}point at address ADDR. SIZE is not used. */ -static int -nto_remove_point (enum raw_bkpt_type type, CORE_ADDR addr, - int size, struct raw_breakpoint *bp) +int +nto_process_target::remove_point (enum raw_bkpt_type type, CORE_ADDR addr, + int size, raw_breakpoint *bp) { int wtype = _DEBUG_BREAK_HW; /* Always request HW. */ @@ -862,15 +868,21 @@ nto_remove_point (enum raw_bkpt_type type, CORE_ADDR addr, return nto_breakpoint (addr, wtype, -1); } +bool +nto_process_target::supports_hardware_single_step () +{ + return true; +} + /* Check if the reason of stop for current thread (CURRENT_INFERIOR) is a watchpoint. - Return 1 if stopped by watchpoint, 0 otherwise. */ + Return true if stopped by watchpoint, false otherwise. */ -static int -nto_stopped_by_watchpoint (void) +bool +nto_process_target::stopped_by_watchpoint () { - int ret = 0; + bool ret = false; TRACE ("%s\n", __func__); if (nto_inferior.ctl_fd != -1 && current_thread != NULL) @@ -886,7 +898,7 @@ nto_stopped_by_watchpoint (void) err = devctl (nto_inferior.ctl_fd, DCMD_PROC_STATUS, &status, sizeof (status), 0); if (err == EOK && (status.flags & watchmask)) - ret = 1; + ret = true; } } TRACE ("%s: %s\n", __func__, ret ? "yes" : "no"); @@ -897,8 +909,8 @@ nto_stopped_by_watchpoint (void) Return inferior's instruction pointer value, or 0 on error. */ -static CORE_ADDR -nto_stopped_data_address (void) +CORE_ADDR +nto_process_target::stopped_data_address () { CORE_ADDR ret = (CORE_ADDR)0; @@ -920,19 +932,10 @@ nto_stopped_data_address (void) return ret; } -/* We do not currently support non-stop. */ - -static int -nto_supports_non_stop (void) -{ - TRACE ("%s\n", __func__); - 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) +const gdb_byte * +nto_process_target::sw_breakpoint_from_kind (int kind, int *size) { *size = the_low_target.breakpoint_len; return the_low_target.breakpoint; @@ -942,72 +945,6 @@ nto_sw_breakpoint_from_kind (int kind, int *size) static nto_process_target the_nto_target; -static process_stratum_target nto_target_ops = { - NULL, /* nto_look_up_symbols */ - nto_request_interrupt, - nto_read_auxv, - nto_supports_z_point_type, - nto_insert_point, - nto_remove_point, - NULL, /* stopped_by_sw_breakpoint */ - NULL, /* supports_stopped_by_sw_breakpoint */ - NULL, /* stopped_by_hw_breakpoint */ - NULL, /* supports_stopped_by_hw_breakpoint */ - target_can_do_hardware_single_step, - nto_stopped_by_watchpoint, - nto_stopped_data_address, - NULL, /* nto_read_offsets */ - NULL, /* thread_db_set_tls_address */ - hostio_last_error_from_errno, - NULL, /* nto_qxfer_osdata */ - NULL, /* xfer_siginfo */ - nto_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, /* 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, - NULL, /* thread_name */ - NULL, /* breakpoint_kind_from_current_state */ - NULL, /* supports_software_single_step */ - NULL, /* supports_catch_syscall */ - NULL, /* get_ipa_tdesc_idx */ - NULL, /* thread_handle */ - &the_nto_target, -}; - - /* Global function called by server.c. Initializes QNX Neutrino gdbserver. */ @@ -1017,7 +954,7 @@ initialize_low (void) sigset_t set; TRACE ("%s\n", __func__); - set_target_ops (&nto_target_ops); + set_target_ops (&the_nto_target); /* We use SIGUSR1 to gain control after we block waiting for a process. We use sigwaitevent to wait. */