2003-06-10 16:37:04 +02:00
|
|
|
|
/* Remote File-I/O communications
|
|
|
|
|
|
2018-01-01 05:43:02 +01:00
|
|
|
|
Copyright (C) 2003-2018 Free Software Foundation, Inc.
|
2003-06-10 16:37:04 +02:00
|
|
|
|
|
|
|
|
|
This file is part of GDB.
|
|
|
|
|
|
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
|
|
|
it under the terms of the GNU General Public License as published by
|
2007-08-23 20:08:50 +02:00
|
|
|
|
the Free Software Foundation; either version 3 of the License, or
|
2003-06-10 16:37:04 +02:00
|
|
|
|
(at your option) any later version.
|
|
|
|
|
|
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
GNU General Public License for more details.
|
|
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
2007-08-23 20:08:50 +02:00
|
|
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
2003-06-10 16:37:04 +02:00
|
|
|
|
|
2011-01-10 21:38:51 +01:00
|
|
|
|
/* See the GDB User Guide for details of the GDB remote protocol. */
|
2003-06-10 16:37:04 +02:00
|
|
|
|
|
|
|
|
|
#include "defs.h"
|
|
|
|
|
#include "gdbcmd.h"
|
|
|
|
|
#include "remote.h"
|
2003-06-10 21:29:57 +02:00
|
|
|
|
#include "gdb_wait.h"
|
remove gdb_stat.h
This patch is purely mechanical. It removes gdb_stat.h and changes
the code to use sys/stat.h.
2013-11-18 Tom Tromey <tromey@redhat.com>
* common/gdb_stat.h: Remove.
* ada-lang.c: Use sys/stat.h, not gdb_stat.h.
* common/filestuff.c: Use sys/stat.h, not gdb_stat.h.
* common/linux-osdata.c: Use sys/stat.h, not gdb_stat.h.
* corefile.c: Use sys/stat.h, not gdb_stat.h.
* ctf.c: Use sys/stat.h, not gdb_stat.h.
* darwin-nat.c: Use sys/stat.h, not gdb_stat.h.
* dbxread.c: Use sys/stat.h, not gdb_stat.h.
* dwarf2read.c: Use sys/stat.h, not gdb_stat.h.
* exec.c: Use sys/stat.h, not gdb_stat.h.
* gdbserver/linux-low.c: Use sys/stat.h, not gdb_stat.h.
* gdbserver/remote-utils.c: Use sys/stat.h, not gdb_stat.h.
* inf-child.c: Use sys/stat.h, not gdb_stat.h.
* jit.c: Use sys/stat.h, not gdb_stat.h.
* linux-nat.c: Use sys/stat.h, not gdb_stat.h.
* m68klinux-nat.c: Use sys/stat.h, not gdb_stat.h.
* main.c: Use sys/stat.h, not gdb_stat.h.
* mdebugread.c: Use sys/stat.h, not gdb_stat.h.
* mi/mi-cmd-env.c: Use sys/stat.h, not gdb_stat.h.
* nto-tdep.c: Use sys/stat.h, not gdb_stat.h.
* objfiles.c: Use sys/stat.h, not gdb_stat.h.
* procfs.c: Use sys/stat.h, not gdb_stat.h.
* remote-fileio.c: Use sys/stat.h, not gdb_stat.h.
* remote-mips.c: Use sys/stat.h, not gdb_stat.h.
* remote.c: Use sys/stat.h, not gdb_stat.h.
* rs6000-nat.c: Use sys/stat.h, not gdb_stat.h.
* sol-thread.c: Use sys/stat.h, not gdb_stat.h.
* solib-spu.c: Use sys/stat.h, not gdb_stat.h.
* source.c: Use sys/stat.h, not gdb_stat.h.
* symfile.c: Use sys/stat.h, not gdb_stat.h.
* symmisc.c: Use sys/stat.h, not gdb_stat.h.
* symtab.c: Use sys/stat.h, not gdb_stat.h.
* top.c: Use sys/stat.h, not gdb_stat.h.
* xcoffread.c: Use sys/stat.h, not gdb_stat.h.
2013-11-06 15:55:51 +01:00
|
|
|
|
#include <sys/stat.h>
|
2003-06-11 15:50:11 +02:00
|
|
|
|
#include "remote-fileio.h"
|
2008-03-05 18:21:10 +01:00
|
|
|
|
#include "event-loop.h"
|
2011-01-25 12:54:00 +01:00
|
|
|
|
#include "target.h"
|
2011-03-23 19:23:56 +01:00
|
|
|
|
#include "filenames.h"
|
PR gdb/7912:
* Makefile.in (SFILES): Add filestuff.c
(COMMON_OBS): Add filestuff.o.
(filestuff.o): New target.
* auto-load.c (auto_load_objfile_script_1): Use
gdb_fopen_cloexec.
* auxv.c (procfs_xfer_auxv): Use gdb_open_cloexec.
* cli/cli-cmds.c (shell_escape): Call close_most_fds.
* cli/cli-dump.c (fopen_with_cleanup): Use gdb_fopen_cloexec.
* common/agent.c (gdb_connect_sync_socket): Use
gdb_socket_cloexec.
* common/filestuff.c: New file.
* common/filestuff.h: New file.
* common/linux-osdata.c (linux_common_core_of_thread)
(command_from_pid, commandline_from_pid, print_source_lines)
(linux_xfer_osdata_shm, linux_xfer_osdata_sem)
(linux_xfer_osdata_msg, linux_xfer_osdata_modules): Use
gdb_fopen_cloexec.
* common/linux-procfs.c (linux_proc_get_int)
(linux_proc_pid_has_state): Use gdb_fopen_cloexec.
* config.in, configure: Rebuild.
* configure.ac: Don't check for sys/socket.h. Check for
fdwalk, pipe2.
* corelow.c (core_open): Use gdb_open_cloexec.
* dwarf2read.c (write_psymtabs_to_index): Use gdb_fopen_cloexec.
* fork-child.c (fork_inferior): Call close_most_fds.
* gdb_bfd.c (gdb_bfd_open): Use gdb_open_cloexec.
* inf-child.c (inf_child_fileio_readlink): Use gdb_open_cloexec.
* linux-nat.c (linux_nat_thread_name, linux_proc_pending_signals):
Use gdb_fopen_cloexec.
(linux_proc_xfer_partial, linux_proc_xfer_spu): Use
gdb_open_cloexec.
(linux_async_pipe): Use gdb_pipe_cloexec.
* remote-fileio.c (remote_fileio_func_open): Use
gdb_open_cloexec.
* remote.c (remote_file_put, remote_file_get): Use
gdb_fopen_cloexec.
* ser-pipe.c (pipe_open): Use gdb_socketpair_cloexec,
close_most_fds.
* ser-tcp.c (net_open): Use gdb_socket_cloexec.
* ser-unix.c (hardwire_open): Use gdb_open_cloexec.
* solib.c (solib_find): Use gdb_open_cloexec.
* source.c (openp, find_and_open_source): Use gdb_open_cloexec.
* tracepoint.c (tfile_start): Use gdb_fopen_cloexec.
(tfile_open): Use gdb_open_cloexec.
* tui/tui-io.c (tui_initialize_io): Use gdb_pipe_cloexec.
* ui-file.c (gdb_fopen): Use gdb_fopen_cloexec.
* xml-support.c (xml_fetch_content_from_file): Use
gdb_fopen_cloexec.
* main.c (captured_main): Call notice_open_fds.
gdbserver
* Makefile.in (SFILES): Add filestuff.c.
(OBS): Add filestuff.o.
(filestuff.o): New target.
* config.in, configure: Rebuild.
* configure.ac: Check for fdwalk, pipe2.
2013-04-22 18:46:15 +02:00
|
|
|
|
#include "filestuff.h"
|
2003-06-10 16:37:04 +02:00
|
|
|
|
|
|
|
|
|
#include <fcntl.h>
|
2015-08-24 19:50:55 +02:00
|
|
|
|
#include "gdb_sys_time.h"
|
2003-06-10 16:37:04 +02:00
|
|
|
|
#ifdef __CYGWIN__
|
2011-04-08 00:24:17 +02:00
|
|
|
|
#include <sys/cygwin.h> /* For cygwin_conv_path. */
|
2003-06-10 16:37:04 +02:00
|
|
|
|
#endif
|
|
|
|
|
#include <signal.h>
|
|
|
|
|
|
|
|
|
|
static struct {
|
|
|
|
|
int *fd_map;
|
|
|
|
|
int fd_map_size;
|
|
|
|
|
} remote_fio_data;
|
|
|
|
|
|
|
|
|
|
#define FIO_FD_INVALID -1
|
|
|
|
|
#define FIO_FD_CONSOLE_IN -2
|
|
|
|
|
#define FIO_FD_CONSOLE_OUT -3
|
|
|
|
|
|
|
|
|
|
static int remote_fio_system_call_allowed = 0;
|
|
|
|
|
|
|
|
|
|
static int
|
2003-06-11 12:24:53 +02:00
|
|
|
|
remote_fileio_init_fd_map (void)
|
2003-06-10 16:37:04 +02:00
|
|
|
|
{
|
|
|
|
|
int i;
|
|
|
|
|
|
|
|
|
|
if (!remote_fio_data.fd_map)
|
|
|
|
|
{
|
Replace some xmalloc-family functions with XNEW-family ones
This patch is part of the make-gdb-buildable-in-C++ effort. The idea is
to change some calls to the xmalloc family of functions to calls to the
equivalents in the XNEW family. This avoids adding an explicit cast, so
it keeps the code a bit more readable. Some of them also map relatively
well to a C++ equivalent (XNEW (struct foo) -> new foo), so it will be
possible to do scripted replacements if needed.
I only changed calls that were obviously allocating memory for one or
multiple "objects". Allocation of variable sizes (such as strings or
buffer handling) will be for later (and won't use XNEW).
- xmalloc (sizeof (struct foo)) -> XNEW (struct foo)
- xmalloc (num * sizeof (struct foo)) -> XNEWVEC (struct foo, num)
- xcalloc (1, sizeof (struct foo)) -> XCNEW (struct foo)
- xcalloc (num, sizeof (struct foo)) -> XCNEWVEC (struct foo, num)
- xrealloc (p, num * sizeof (struct foo) -> XRESIZEVEC (struct foo, p, num)
- obstack_alloc (ob, sizeof (struct foo)) -> XOBNEW (ob, struct foo)
- obstack_alloc (ob, num * sizeof (struct foo)) -> XOBNEWVEC (ob, struct foo, num)
- alloca (sizeof (struct foo)) -> XALLOCA (struct foo)
- alloca (num * sizeof (struct foo)) -> XALLOCAVEC (struct foo, num)
Some instances of xmalloc followed by memset to zero the buffer were
replaced by XCNEW or XCNEWVEC.
I regtested on x86-64, Ubuntu 14.04, but the patch touches many
architecture-specific files. For those I'll have to rely on the
buildbot or people complaining that I broke their gdb.
gdb/ChangeLog:
* aarch64-linux-nat.c (aarch64_add_process): Likewise.
* aarch64-tdep.c (aarch64_gdbarch_init): Likewise.
* ada-exp.y (write_ambiguous_var): Likewise.
* ada-lang.c (resolve_subexp): Likewise.
(user_select_syms): Likewise.
(assign_aggregate): Likewise.
(ada_evaluate_subexp): Likewise.
(cache_symbol): Likewise.
* addrmap.c (allocate_key): Likewise.
(addrmap_create_mutable): Likewise.
* aix-thread.c (sync_threadlists): Likewise.
* alpha-tdep.c (alpha_push_dummy_call): Likewise.
(alpha_gdbarch_init): Likewise.
* amd64-windows-tdep.c (amd64_windows_push_arguments): Likewise.
* arm-linux-nat.c (arm_linux_add_process): Likewise.
* arm-linux-tdep.c (arm_linux_displaced_step_copy_insn): Likewise.
* arm-tdep.c (push_stack_item): Likewise.
(arm_displaced_step_copy_insn): Likewise.
(arm_gdbarch_init): Likewise.
(_initialize_arm_tdep): Likewise.
* avr-tdep.c (push_stack_item): Likewise.
* ax-general.c (new_agent_expr): Likewise.
* block.c (block_initialize_namespace): Likewise.
* breakpoint.c (alloc_counted_command_line): Likewise.
(update_dprintf_command_list): Likewise.
(parse_breakpoint_sals): Likewise.
(decode_static_tracepoint_spec): Likewise.
(until_break_command): Likewise.
(clear_command): Likewise.
(update_global_location_list): Likewise.
(get_breakpoint_objfile_data) Likewise.
* btrace.c (ftrace_new_function): Likewise.
(btrace_set_insn_history): Likewise.
(btrace_set_call_history): Likewise.
* buildsym.c (add_symbol_to_list): Likewise.
(record_pending_block): Likewise.
(start_subfile): Likewise.
(start_buildsym_compunit): Likewise.
(push_subfile): Likewise.
(end_symtab_get_static_block): Likewise.
(buildsym_init): Likewise.
* cli/cli-cmds.c (source_command): Likewise.
* cli/cli-decode.c (add_cmd): Likewise.
* cli/cli-script.c (build_command_line): Likewise.
(setup_user_args): Likewise.
(realloc_body_list): Likewise.
(process_next_line): Likewise.
(copy_command_lines): Likewise.
* cli/cli-setshow.c (do_set_command): Likewise.
* coff-pe-read.c (read_pe_exported_syms): Likewise.
* coffread.c (coff_locate_sections): Likewise.
(coff_symtab_read): Likewise.
(coff_read_struct_type): Likewise.
* common/cleanups.c (make_my_cleanup2): Likewise.
* common/common-exceptions.c (throw_it): Likewise.
* common/filestuff.c (make_cleanup_close): Likewise.
* common/format.c (parse_format_string): Likewise.
* common/queue.h (DEFINE_QUEUE_P): Likewise.
* compile/compile-object-load.c (munmap_list_add): Likewise.
(compile_object_load): Likewise.
* compile/compile-object-run.c (compile_object_run): Likewise.
* compile/compile.c (append_args): Likewise.
* corefile.c (specify_exec_file_hook): Likewise.
* cp-support.c (make_symbol_overload_list): Likewise.
* cris-tdep.c (push_stack_item): Likewise.
(cris_gdbarch_init): Likewise.
* ctf.c (ctf_trace_file_writer_new): Likewise.
* dbxread.c (init_header_files): Likewise.
(add_new_header_file): Likewise.
(init_bincl_list): Likewise.
(dbx_end_psymtab): Likewise.
(start_psymtab): Likewise.
(dbx_end_psymtab): Likewise.
* dcache.c (dcache_init): Likewise.
* dictionary.c (dict_create_hashed): Likewise.
(dict_create_hashed_expandable): Likewise.
(dict_create_linear): Likewise.
(dict_create_linear_expandable): Likewise.
* dtrace-probe.c (dtrace_process_dof_probe): Likewise.
* dummy-frame.c (register_dummy_frame_dtor): Likewise.
* dwarf2-frame-tailcall.c (cache_new_ref1): Likewise.
* dwarf2-frame.c (dwarf2_build_frame_info): Likewise.
(decode_frame_entry_1): Likewise.
* dwarf2expr.c (new_dwarf_expr_context): Likewise.
* dwarf2loc.c (dwarf2_compile_expr_to_ax): Likewise.
* dwarf2read.c (dwarf2_has_info): Likewise.
(create_signatured_type_table_from_index): Likewise.
(dwarf2_read_index): Likewise.
(dw2_get_file_names_reader): Likewise.
(create_all_type_units): Likewise.
(read_cutu_die_from_dwo): Likewise.
(init_tu_and_read_dwo_dies): Likewise.
(init_cutu_and_read_dies): Likewise.
(create_all_comp_units): Likewise.
(queue_comp_unit): Likewise.
(inherit_abstract_dies): Likewise.
(read_call_site_scope): Likewise.
(dwarf2_add_field): Likewise.
(dwarf2_add_typedef): Likewise.
(dwarf2_add_member_fn): Likewise.
(attr_to_dynamic_prop): Likewise.
(abbrev_table_alloc_abbrev): Likewise.
(abbrev_table_read_table): Likewise.
(add_include_dir): Likewise.
(add_file_name): Likewise.
(dwarf_decode_line_header): Likewise.
(dwarf2_const_value_attr): Likewise.
(dwarf_alloc_block): Likewise.
(parse_macro_definition): Likewise.
(set_die_type): Likewise.
(write_psymtabs_to_index): Likewise.
(create_cus_from_index): Likewise.
(dwarf2_create_include_psymtab): Likewise.
(process_psymtab_comp_unit_reader): Likewise.
(build_type_psymtab_dependencies): Likewise.
(read_comp_units_from_section): Likewise.
(compute_compunit_symtab_includes): Likewise.
(create_dwo_unit_in_dwp_v1): Likewise.
(create_dwo_unit_in_dwp_v2): Likewise.
(read_func_scope): Likewise.
(process_structure_scope): Likewise.
(mark_common_block_symbol_computed): Likewise.
(load_partial_dies): Likewise.
(dwarf2_symbol_mark_computed): Likewise.
* elfread.c (elf_symfile_segments): Likewise.
(elf_read_minimal_symbols): Likewise.
* environ.c (make_environ): Likewise.
* eval.c (evaluate_subexp_standard): Likewise.
* event-loop.c (create_file_handler): Likewise.
(create_async_signal_handler): Likewise.
(create_async_event_handler): Likewise.
(create_timer): Likewise.
* exec.c (build_section_table): Likewise.
* fbsd-nat.c (fbsd_remember_child): Likewise.
* fork-child.c (fork_inferior): Likewise.
* frv-tdep.c (new_variant): Likewise.
* gdbarch.sh (gdbarch_alloc): Likewise.
(append_name): Likewise.
* gdbtypes.c (rank_function): Likewise.
(copy_type_recursive): Likewise.
(add_dyn_prop): Likewise.
* gnu-nat.c (make_proc): Likewise.
(make_inf): Likewise.
(gnu_write_inferior): Likewise.
* gnu-v3-abi.c (build_gdb_vtable_type): Likewise.
(build_std_type_info_type): Likewise.
* guile/scm-param.c (compute_enum_list): Likewise.
* guile/scm-utils.c (gdbscm_parse_function_args): Likewise.
* guile/scm-value.c (gdbscm_value_call): Likewise.
* h8300-tdep.c (h8300_gdbarch_init): Likewise.
* hppa-tdep.c (hppa_init_objfile_priv_data): Likewise.
(read_unwind_info): Likewise.
* ia64-tdep.c (ia64_gdbarch_init): Likewise.
* infcall.c (dummy_frame_context_saver_setup): Likewise.
(call_function_by_hand_dummy): Likewise.
* infcmd.c (step_once): Likewise.
(finish_forward): Likewise.
(attach_command): Likewise.
(notice_new_inferior): Likewise.
* inferior.c (add_inferior_silent): Likewise.
* infrun.c (add_displaced_stepping_state): Likewise.
(save_infcall_control_state): Likewise.
(save_inferior_ptid): Likewise.
(_initialize_infrun): Likewise.
* jit.c (bfd_open_from_target_memory): Likewise.
(jit_gdbarch_data_init): Likewise.
* language.c (add_language): Likewise.
* linespec.c (decode_line_2): Likewise.
* linux-nat.c (add_to_pid_list): Likewise.
(add_initial_lwp): Likewise.
* linux-thread-db.c (add_thread_db_info): Likewise.
(record_thread): Likewise.
(info_auto_load_libthread_db): Likewise.
* m32c-tdep.c (m32c_gdbarch_init): Likewise.
* m68hc11-tdep.c (m68hc11_gdbarch_init): Likewise.
* m68k-tdep.c (m68k_gdbarch_init): Likewise.
* m88k-tdep.c (m88k_analyze_prologue): Likewise.
* macrocmd.c (macro_define_command): Likewise.
* macroexp.c (gather_arguments): Likewise.
* macroscope.c (sal_macro_scope): Likewise.
* macrotab.c (new_macro_table): Likewise.
* mdebugread.c (push_parse_stack): Likewise.
(parse_partial_symbols): Likewise.
(parse_symbol): Likewise.
(psymtab_to_symtab_1): Likewise.
(new_block): Likewise.
(new_psymtab): Likewise.
(mdebug_build_psymtabs): Likewise.
(add_pending): Likewise.
(elfmdebug_build_psymtabs): Likewise.
* mep-tdep.c (mep_gdbarch_init): Likewise.
* mi/mi-main.c (mi_execute_command): Likewise.
* mi/mi-parse.c (mi_parse_argv): Likewise.
* minidebug.c (lzma_open): Likewise.
* minsyms.c (terminate_minimal_symbol_table): Likewise.
* mips-linux-nat.c (mips_linux_insert_watchpoint): Likewise.
* mips-tdep.c (mips_gdbarch_init): Likewise.
* mn10300-tdep.c (mn10300_gdbarch_init): Likewise.
* msp430-tdep.c (msp430_gdbarch_init): Likewise.
* mt-tdep.c (mt_registers_info): Likewise.
* nat/aarch64-linux.c (aarch64_linux_new_thread): Likewise.
* nat/linux-btrace.c (linux_enable_bts): Likewise.
(linux_enable_pt): Likewise.
* nat/linux-osdata.c (linux_xfer_osdata_processes): Likewise.
(linux_xfer_osdata_processgroups): Likewise.
* nios2-tdep.c (nios2_gdbarch_init): Likewise.
* nto-procfs.c (procfs_meminfo): Likewise.
* objc-lang.c (start_msglist): Likewise.
(selectors_info): Likewise.
(classes_info): Likewise.
(find_methods): Likewise.
* objfiles.c (allocate_objfile): Likewise.
(update_section_map): Likewise.
* osabi.c (gdbarch_register_osabi): Likewise.
(gdbarch_register_osabi_sniffer): Likewise.
* parse.c (start_arglist): Likewise.
* ppc-linux-nat.c (hwdebug_find_thread_points_by_tid): Likewise.
(hwdebug_insert_point): Likewise.
* printcmd.c (display_command): Likewise.
(ui_printf): Likewise.
* procfs.c (create_procinfo): Likewise.
(load_syscalls): Likewise.
(proc_get_LDT_entry): Likewise.
(proc_update_threads): Likewise.
* prologue-value.c (make_pv_area): Likewise.
(pv_area_store): Likewise.
* psymtab.c (extend_psymbol_list): Likewise.
(init_psymbol_list): Likewise.
(allocate_psymtab): Likewise.
* python/py-inferior.c (add_thread_object): Likewise.
* python/py-param.c (compute_enum_values): Likewise.
* python/py-value.c (valpy_call): Likewise.
* python/py-varobj.c (py_varobj_iter_next): Likewise.
* python/python.c (ensure_python_env): Likewise.
* record-btrace.c (record_btrace_start_replaying): Likewise.
* record-full.c (record_full_reg_alloc): Likewise.
(record_full_mem_alloc): Likewise.
(record_full_end_alloc): Likewise.
(record_full_core_xfer_partial): Likewise.
* regcache.c (get_thread_arch_aspace_regcache): Likewise.
* remote-fileio.c (remote_fileio_init_fd_map): Likewise.
* remote-notif.c (remote_notif_state_allocate): Likewise.
* remote.c (demand_private_info): Likewise.
(remote_notif_stop_alloc_reply): Likewise.
(remote_enable_btrace): Likewise.
* reverse.c (save_bookmark_command): Likewise.
* rl78-tdep.c (rl78_gdbarch_init): Likewise.
* rx-tdep.c (rx_gdbarch_init): Likewise.
* s390-linux-nat.c (s390_insert_watchpoint): Likewise.
* ser-go32.c (dos_get_tty_state): Likewise.
(dos_copy_tty_state): Likewise.
* ser-mingw.c (ser_windows_open): Likewise.
(ser_console_wait_handle): Likewise.
(ser_console_get_tty_state): Likewise.
(make_pipe_state): Likewise.
(net_windows_open): Likewise.
* ser-unix.c (hardwire_get_tty_state): Likewise.
(hardwire_copy_tty_state): Likewise.
* solib-aix.c (solib_aix_new_lm_info): Likewise.
* solib-dsbt.c (dsbt_current_sos): Likewise.
(dsbt_relocate_main_executable): Likewise.
* solib-frv.c (frv_current_sos): Likewise.
(frv_relocate_main_executable): Likewise.
* solib-spu.c (spu_bfd_fopen): Likewise.
* solib-svr4.c (lm_info_read): Likewise.
(svr4_copy_library_list): Likewise.
(svr4_default_sos): Likewise.
* source.c (find_source_lines): Likewise.
(line_info): Likewise.
(add_substitute_path_rule): Likewise.
* spu-linux-nat.c (spu_bfd_open): Likewise.
* spu-tdep.c (info_spu_dma_cmdlist): Likewise.
* stabsread.c (dbx_lookup_type): Likewise.
(read_type): Likewise.
(read_member_functions): Likewise.
(read_struct_fields): Likewise.
(read_baseclasses): Likewise.
(read_args): Likewise.
(_initialize_stabsread): Likewise.
* stack.c (func_command): Likewise.
* stap-probe.c (handle_stap_probe): Likewise.
* symfile.c (addrs_section_sort): Likewise.
(addr_info_make_relative): Likewise.
(load_section_callback): Likewise.
(add_symbol_file_command): Likewise.
(init_filename_language_table): Likewise.
* symtab.c (create_filename_seen_cache): Likewise.
(sort_search_symbols_remove_dups): Likewise.
(search_symbols): Likewise.
* target.c (make_cleanup_restore_target_terminal): Likewise.
* thread.c (new_thread): Likewise.
(enable_thread_stack_temporaries): Likewise.
(make_cleanup_restore_current_thread): Likewise.
(thread_apply_all_command): Likewise.
* tic6x-tdep.c (tic6x_gdbarch_init): Likewise.
* top.c (gdb_readline_wrapper): Likewise.
* tracefile-tfile.c (tfile_trace_file_writer_new): Likewise.
* tracepoint.c (trace_find_line_command): Likewise.
(all_tracepoint_actions_and_cleanup): Likewise.
(make_cleanup_restore_current_traceframe): Likewise.
(get_uploaded_tp): Likewise.
(get_uploaded_tsv): Likewise.
* tui/tui-data.c (tui_alloc_generic_win_info): Likewise.
(tui_alloc_win_info): Likewise.
(tui_alloc_content): Likewise.
(tui_add_content_elements): Likewise.
* tui/tui-disasm.c (tui_find_disassembly_address): Likewise.
(tui_set_disassem_content): Likewise.
* ui-file.c (ui_file_new): Likewise.
(stdio_file_new): Likewise.
(tee_file_new): Likewise.
* utils.c (make_cleanup_restore_integer): Likewise.
(add_internal_problem_command): Likewise.
* v850-tdep.c (v850_gdbarch_init): Likewise.
* valops.c (find_oload_champ): Likewise.
* value.c (allocate_value_lazy): Likewise.
(record_latest_value): Likewise.
(create_internalvar): Likewise.
* varobj.c (install_variable): Likewise.
(new_variable): Likewise.
(new_root_variable): Likewise.
(cppush): Likewise.
(_initialize_varobj): Likewise.
* windows-nat.c (windows_make_so): Likewise.
* x86-nat.c (x86_add_process): Likewise.
* xcoffread.c (arrange_linetable): Likewise.
(allocate_include_entry): Likewise.
(process_linenos): Likewise.
(SYMBOL_DUP): Likewise.
(xcoff_start_psymtab): Likewise.
(xcoff_end_psymtab): Likewise.
* xml-support.c (gdb_xml_parse_attr_ulongest): Likewise.
* xtensa-tdep.c (xtensa_register_type): Likewise.
* gdbarch.c: Regenerate.
* gdbarch.h: Regenerate.
gdb/gdbserver/ChangeLog:
* ax.c (gdb_parse_agent_expr): Likewise.
(compile_bytecodes): Likewise.
* dll.c (loaded_dll): Likewise.
* event-loop.c (append_callback_event): Likewise.
(create_file_handler): Likewise.
(create_file_event): Likewise.
* hostio.c (handle_open): Likewise.
* inferiors.c (add_thread): Likewise.
(add_process): Likewise.
* linux-aarch64-low.c (aarch64_linux_new_process): Likewise.
* linux-arm-low.c (arm_new_process): Likewise.
(arm_new_thread): Likewise.
* linux-low.c (add_to_pid_list): Likewise.
(linux_add_process): Likewise.
(handle_extended_wait): Likewise.
(add_lwp): Likewise.
(enqueue_one_deferred_signal): Likewise.
(enqueue_pending_signal): Likewise.
(linux_resume_one_lwp_throw): Likewise.
(linux_resume_one_thread): Likewise.
(linux_read_memory): Likewise.
(linux_write_memory): Likewise.
* linux-mips-low.c (mips_linux_new_process): Likewise.
(mips_linux_new_thread): Likewise.
(mips_add_watchpoint): Likewise.
* linux-x86-low.c (initialize_low_arch): Likewise.
* lynx-low.c (lynx_add_process): Likewise.
* mem-break.c (set_raw_breakpoint_at): Likewise.
(set_breakpoint): Likewise.
(add_condition_to_breakpoint): Likewise.
(add_commands_to_breakpoint): Likewise.
(clone_agent_expr): Likewise.
(clone_one_breakpoint): Likewise.
* regcache.c (new_register_cache): Likewise.
* remote-utils.c (look_up_one_symbol): Likewise.
* server.c (queue_stop_reply): Likewise.
(start_inferior): Likewise.
(queue_stop_reply_callback): Likewise.
(handle_target_event): Likewise.
* spu-low.c (fetch_ppc_memory): Likewise.
(store_ppc_memory): Likewise.
* target.c (set_target_ops): Likewise.
* thread-db.c (thread_db_load_search): Likewise.
(try_thread_db_load_1): Likewise.
* tracepoint.c (add_tracepoint): Likewise.
(add_tracepoint_action): Likewise.
(create_trace_state_variable): Likewise.
(cmd_qtdpsrc): Likewise.
(cmd_qtro): Likewise.
(add_while_stepping_state): Likewise.
* win32-low.c (child_add_thread): Likewise.
(get_image_name): Likewise.
2015-08-26 23:16:07 +02:00
|
|
|
|
remote_fio_data.fd_map = XNEWVEC (int, 10);
|
2003-06-10 16:37:04 +02:00
|
|
|
|
remote_fio_data.fd_map_size = 10;
|
|
|
|
|
remote_fio_data.fd_map[0] = FIO_FD_CONSOLE_IN;
|
|
|
|
|
remote_fio_data.fd_map[1] = FIO_FD_CONSOLE_OUT;
|
|
|
|
|
remote_fio_data.fd_map[2] = FIO_FD_CONSOLE_OUT;
|
|
|
|
|
for (i = 3; i < 10; ++i)
|
|
|
|
|
remote_fio_data.fd_map[i] = FIO_FD_INVALID;
|
|
|
|
|
}
|
|
|
|
|
return 3;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int
|
2003-06-11 12:24:53 +02:00
|
|
|
|
remote_fileio_resize_fd_map (void)
|
2003-06-10 16:37:04 +02:00
|
|
|
|
{
|
2007-08-10 19:49:48 +02:00
|
|
|
|
int i = remote_fio_data.fd_map_size;
|
|
|
|
|
|
2003-06-10 16:37:04 +02:00
|
|
|
|
if (!remote_fio_data.fd_map)
|
|
|
|
|
return remote_fileio_init_fd_map ();
|
|
|
|
|
remote_fio_data.fd_map_size += 10;
|
|
|
|
|
remote_fio_data.fd_map =
|
|
|
|
|
(int *) xrealloc (remote_fio_data.fd_map,
|
|
|
|
|
remote_fio_data.fd_map_size * sizeof (int));
|
2007-08-10 19:49:48 +02:00
|
|
|
|
for (; i < remote_fio_data.fd_map_size; i++)
|
|
|
|
|
remote_fio_data.fd_map[i] = FIO_FD_INVALID;
|
2003-06-10 16:37:04 +02:00
|
|
|
|
return remote_fio_data.fd_map_size - 10;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int
|
2003-06-11 12:24:53 +02:00
|
|
|
|
remote_fileio_next_free_fd (void)
|
2003-06-10 16:37:04 +02:00
|
|
|
|
{
|
|
|
|
|
int i;
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < remote_fio_data.fd_map_size; ++i)
|
|
|
|
|
if (remote_fio_data.fd_map[i] == FIO_FD_INVALID)
|
|
|
|
|
return i;
|
|
|
|
|
return remote_fileio_resize_fd_map ();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int
|
|
|
|
|
remote_fileio_fd_to_targetfd (int fd)
|
|
|
|
|
{
|
|
|
|
|
int target_fd = remote_fileio_next_free_fd ();
|
2010-05-16 23:11:14 +02:00
|
|
|
|
|
2003-06-10 16:37:04 +02:00
|
|
|
|
remote_fio_data.fd_map[target_fd] = fd;
|
|
|
|
|
return target_fd;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int
|
|
|
|
|
remote_fileio_map_fd (int target_fd)
|
|
|
|
|
{
|
|
|
|
|
remote_fileio_init_fd_map ();
|
|
|
|
|
if (target_fd < 0 || target_fd >= remote_fio_data.fd_map_size)
|
|
|
|
|
return FIO_FD_INVALID;
|
|
|
|
|
return remote_fio_data.fd_map[target_fd];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
remote_fileio_close_target_fd (int target_fd)
|
|
|
|
|
{
|
|
|
|
|
remote_fileio_init_fd_map ();
|
|
|
|
|
if (target_fd >= 0 && target_fd < remote_fio_data.fd_map_size)
|
|
|
|
|
remote_fio_data.fd_map[target_fd] = FIO_FD_INVALID;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int
|
|
|
|
|
remote_fileio_oflags_to_host (long flags)
|
|
|
|
|
{
|
|
|
|
|
int hflags = 0;
|
|
|
|
|
|
|
|
|
|
if (flags & FILEIO_O_CREAT)
|
|
|
|
|
hflags |= O_CREAT;
|
|
|
|
|
if (flags & FILEIO_O_EXCL)
|
|
|
|
|
hflags |= O_EXCL;
|
|
|
|
|
if (flags & FILEIO_O_TRUNC)
|
|
|
|
|
hflags |= O_TRUNC;
|
|
|
|
|
if (flags & FILEIO_O_APPEND)
|
|
|
|
|
hflags |= O_APPEND;
|
|
|
|
|
if (flags & FILEIO_O_RDONLY)
|
|
|
|
|
hflags |= O_RDONLY;
|
|
|
|
|
if (flags & FILEIO_O_WRONLY)
|
|
|
|
|
hflags |= O_WRONLY;
|
|
|
|
|
if (flags & FILEIO_O_RDWR)
|
|
|
|
|
hflags |= O_RDWR;
|
|
|
|
|
/* On systems supporting binary and text mode, always open files in
|
2011-01-10 21:38:51 +01:00
|
|
|
|
binary mode. */
|
2003-06-10 16:37:04 +02:00
|
|
|
|
#ifdef O_BINARY
|
|
|
|
|
hflags |= O_BINARY;
|
|
|
|
|
#endif
|
|
|
|
|
return hflags;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static mode_t
|
|
|
|
|
remote_fileio_mode_to_host (long mode, int open_call)
|
|
|
|
|
{
|
|
|
|
|
mode_t hmode = 0;
|
|
|
|
|
|
|
|
|
|
if (!open_call)
|
|
|
|
|
{
|
|
|
|
|
if (mode & FILEIO_S_IFREG)
|
|
|
|
|
hmode |= S_IFREG;
|
|
|
|
|
if (mode & FILEIO_S_IFDIR)
|
|
|
|
|
hmode |= S_IFDIR;
|
|
|
|
|
if (mode & FILEIO_S_IFCHR)
|
|
|
|
|
hmode |= S_IFCHR;
|
|
|
|
|
}
|
|
|
|
|
if (mode & FILEIO_S_IRUSR)
|
|
|
|
|
hmode |= S_IRUSR;
|
|
|
|
|
if (mode & FILEIO_S_IWUSR)
|
|
|
|
|
hmode |= S_IWUSR;
|
|
|
|
|
if (mode & FILEIO_S_IXUSR)
|
|
|
|
|
hmode |= S_IXUSR;
|
2005-03-16 16:58:41 +01:00
|
|
|
|
#ifdef S_IRGRP
|
2003-06-10 16:37:04 +02:00
|
|
|
|
if (mode & FILEIO_S_IRGRP)
|
|
|
|
|
hmode |= S_IRGRP;
|
2005-03-16 16:58:41 +01:00
|
|
|
|
#endif
|
|
|
|
|
#ifdef S_IWGRP
|
2003-06-10 16:37:04 +02:00
|
|
|
|
if (mode & FILEIO_S_IWGRP)
|
|
|
|
|
hmode |= S_IWGRP;
|
2005-03-16 16:58:41 +01:00
|
|
|
|
#endif
|
|
|
|
|
#ifdef S_IXGRP
|
2003-06-10 16:37:04 +02:00
|
|
|
|
if (mode & FILEIO_S_IXGRP)
|
|
|
|
|
hmode |= S_IXGRP;
|
2005-03-16 16:58:41 +01:00
|
|
|
|
#endif
|
2003-06-10 16:37:04 +02:00
|
|
|
|
if (mode & FILEIO_S_IROTH)
|
|
|
|
|
hmode |= S_IROTH;
|
2005-03-16 16:58:41 +01:00
|
|
|
|
#ifdef S_IWOTH
|
2003-06-10 16:37:04 +02:00
|
|
|
|
if (mode & FILEIO_S_IWOTH)
|
|
|
|
|
hmode |= S_IWOTH;
|
2005-03-16 16:58:41 +01:00
|
|
|
|
#endif
|
|
|
|
|
#ifdef S_IXOTH
|
2003-06-10 16:37:04 +02:00
|
|
|
|
if (mode & FILEIO_S_IXOTH)
|
|
|
|
|
hmode |= S_IXOTH;
|
2005-03-16 16:58:41 +01:00
|
|
|
|
#endif
|
2003-06-10 16:37:04 +02:00
|
|
|
|
return hmode;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int
|
|
|
|
|
remote_fileio_seek_flag_to_host (long num, int *flag)
|
|
|
|
|
{
|
|
|
|
|
if (!flag)
|
|
|
|
|
return 0;
|
|
|
|
|
switch (num)
|
|
|
|
|
{
|
|
|
|
|
case FILEIO_SEEK_SET:
|
|
|
|
|
*flag = SEEK_SET;
|
|
|
|
|
break;
|
|
|
|
|
case FILEIO_SEEK_CUR:
|
|
|
|
|
*flag = SEEK_CUR;
|
|
|
|
|
break;
|
|
|
|
|
case FILEIO_SEEK_END:
|
|
|
|
|
*flag = SEEK_END;
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int
|
2003-06-11 12:24:53 +02:00
|
|
|
|
remote_fileio_extract_long (char **buf, LONGEST *retlong)
|
2003-06-10 16:37:04 +02:00
|
|
|
|
{
|
|
|
|
|
char *c;
|
|
|
|
|
int sign = 1;
|
|
|
|
|
|
|
|
|
|
if (!buf || !*buf || !**buf || !retlong)
|
|
|
|
|
return -1;
|
|
|
|
|
c = strchr (*buf, ',');
|
|
|
|
|
if (c)
|
|
|
|
|
*c++ = '\0';
|
|
|
|
|
else
|
|
|
|
|
c = strchr (*buf, '\0');
|
|
|
|
|
while (strchr ("+-", **buf))
|
|
|
|
|
{
|
|
|
|
|
if (**buf == '-')
|
|
|
|
|
sign = -sign;
|
|
|
|
|
++*buf;
|
|
|
|
|
}
|
|
|
|
|
for (*retlong = 0; **buf; ++*buf)
|
|
|
|
|
{
|
|
|
|
|
*retlong <<= 4;
|
|
|
|
|
if (**buf >= '0' && **buf <= '9')
|
|
|
|
|
*retlong += **buf - '0';
|
|
|
|
|
else if (**buf >= 'a' && **buf <= 'f')
|
|
|
|
|
*retlong += **buf - 'a' + 10;
|
|
|
|
|
else if (**buf >= 'A' && **buf <= 'F')
|
|
|
|
|
*retlong += **buf - 'A' + 10;
|
|
|
|
|
else
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
*retlong *= sign;
|
|
|
|
|
*buf = c;
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int
|
|
|
|
|
remote_fileio_extract_int (char **buf, long *retint)
|
|
|
|
|
{
|
|
|
|
|
int ret;
|
2003-06-11 12:24:53 +02:00
|
|
|
|
LONGEST retlong;
|
2003-06-10 16:37:04 +02:00
|
|
|
|
|
|
|
|
|
if (!retint)
|
|
|
|
|
return -1;
|
2003-06-11 12:24:53 +02:00
|
|
|
|
ret = remote_fileio_extract_long (buf, &retlong);
|
|
|
|
|
if (!ret)
|
2003-06-10 16:37:04 +02:00
|
|
|
|
*retint = (long) retlong;
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int
|
|
|
|
|
remote_fileio_extract_ptr_w_len (char **buf, CORE_ADDR *ptrval, int *length)
|
|
|
|
|
{
|
|
|
|
|
char *c;
|
2003-06-11 12:24:53 +02:00
|
|
|
|
LONGEST retlong;
|
2003-06-10 16:37:04 +02:00
|
|
|
|
|
|
|
|
|
if (!buf || !*buf || !**buf || !ptrval || !length)
|
|
|
|
|
return -1;
|
|
|
|
|
c = strchr (*buf, '/');
|
|
|
|
|
if (!c)
|
|
|
|
|
return -1;
|
|
|
|
|
*c++ = '\0';
|
|
|
|
|
if (remote_fileio_extract_long (buf, &retlong))
|
|
|
|
|
return -1;
|
|
|
|
|
*ptrval = (CORE_ADDR) retlong;
|
|
|
|
|
*buf = c;
|
|
|
|
|
if (remote_fileio_extract_long (buf, &retlong))
|
|
|
|
|
return -1;
|
|
|
|
|
*length = (int) retlong;
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
2003-06-11 12:24:53 +02:00
|
|
|
|
remote_fileio_to_fio_long (LONGEST num, fio_long_t fnum)
|
2003-06-10 16:37:04 +02:00
|
|
|
|
{
|
2015-04-09 15:22:56 +02:00
|
|
|
|
host_to_bigendian (num, (char *) fnum, 8);
|
2003-06-10 16:37:04 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
remote_fileio_to_fio_timeval (struct timeval *tv, struct fio_timeval *ftv)
|
|
|
|
|
{
|
2015-04-09 15:22:56 +02:00
|
|
|
|
host_to_fileio_time (tv->tv_sec, ftv->ftv_sec);
|
2003-06-10 16:37:04 +02:00
|
|
|
|
remote_fileio_to_fio_long (tv->tv_usec, ftv->ftv_usec);
|
|
|
|
|
}
|
|
|
|
|
|
gdb/remote-fileio.c: Eliminate custom SIGINT signal handler
... and fix Ctrl-C races.
The current remote-fileio.c SIGINT/EINTR code can lose Ctrl-C --
there's a period where SIG_IGN is installed as signal handler, for
example.
Since:
- remote.c no longer installs a custom SIGINT handler;
- The current remote-fileio.c SIGINT handler is basically the same as
the default SIGINT handler (event-top.c:handle_sigint), in
principle, except that instead of setting the quit flag, it sets a
separate flag.
I think we should be able to completely remove the remote-fileio.c
SIGINT handler, and centralize on the quit flag, thus fixing the
Ctrl-C race.
gdb/ChangeLog:
yyyy-mm-dd Pedro Alves <palves@redhat.com>
* remote-fileio.c (remote_fio_ctrl_c_flag, remote_fio_sa)
(remote_fio_osa)
(remote_fio_ofunc, remote_fileio_sig_init, remote_fileio_sig_set)
(remote_fileio_sig_exit, remote_fileio_ctrl_c_signal_handler):
Delete.
(remote_fileio_o_quit_handler): New global.
(remote_fileio_quit_handler): New function.
(remote_fileio_reply): Check the quit flag instead of the custom
'remote_fio_ctrl_c_flag' flag. Restore the quit handler instead
of changing the SIGINT handler.
(do_remote_fileio_request): Override the quit handler instead of
changing the SIGINT handler.
2016-06-01 17:34:49 +02:00
|
|
|
|
/* The quit handler originally installed. */
|
|
|
|
|
static quit_handler_ftype *remote_fileio_o_quit_handler;
|
2003-06-10 16:37:04 +02:00
|
|
|
|
|
gdb/remote-fileio.c: Eliminate custom SIGINT signal handler
... and fix Ctrl-C races.
The current remote-fileio.c SIGINT/EINTR code can lose Ctrl-C --
there's a period where SIG_IGN is installed as signal handler, for
example.
Since:
- remote.c no longer installs a custom SIGINT handler;
- The current remote-fileio.c SIGINT handler is basically the same as
the default SIGINT handler (event-top.c:handle_sigint), in
principle, except that instead of setting the quit flag, it sets a
separate flag.
I think we should be able to completely remove the remote-fileio.c
SIGINT handler, and centralize on the quit flag, thus fixing the
Ctrl-C race.
gdb/ChangeLog:
yyyy-mm-dd Pedro Alves <palves@redhat.com>
* remote-fileio.c (remote_fio_ctrl_c_flag, remote_fio_sa)
(remote_fio_osa)
(remote_fio_ofunc, remote_fileio_sig_init, remote_fileio_sig_set)
(remote_fileio_sig_exit, remote_fileio_ctrl_c_signal_handler):
Delete.
(remote_fileio_o_quit_handler): New global.
(remote_fileio_quit_handler): New function.
(remote_fileio_reply): Check the quit flag instead of the custom
'remote_fio_ctrl_c_flag' flag. Restore the quit handler instead
of changing the SIGINT handler.
(do_remote_fileio_request): Override the quit handler instead of
changing the SIGINT handler.
2016-06-01 17:34:49 +02:00
|
|
|
|
/* What to do on a QUIT call while handling a file I/O request. We
|
|
|
|
|
throw a quit exception, which is caught by remote_fileio_request
|
|
|
|
|
and translated to an EINTR reply back to the target. */
|
2003-06-10 16:37:04 +02:00
|
|
|
|
|
|
|
|
|
static void
|
gdb/remote-fileio.c: Eliminate custom SIGINT signal handler
... and fix Ctrl-C races.
The current remote-fileio.c SIGINT/EINTR code can lose Ctrl-C --
there's a period where SIG_IGN is installed as signal handler, for
example.
Since:
- remote.c no longer installs a custom SIGINT handler;
- The current remote-fileio.c SIGINT handler is basically the same as
the default SIGINT handler (event-top.c:handle_sigint), in
principle, except that instead of setting the quit flag, it sets a
separate flag.
I think we should be able to completely remove the remote-fileio.c
SIGINT handler, and centralize on the quit flag, thus fixing the
Ctrl-C race.
gdb/ChangeLog:
yyyy-mm-dd Pedro Alves <palves@redhat.com>
* remote-fileio.c (remote_fio_ctrl_c_flag, remote_fio_sa)
(remote_fio_osa)
(remote_fio_ofunc, remote_fileio_sig_init, remote_fileio_sig_set)
(remote_fileio_sig_exit, remote_fileio_ctrl_c_signal_handler):
Delete.
(remote_fileio_o_quit_handler): New global.
(remote_fileio_quit_handler): New function.
(remote_fileio_reply): Check the quit flag instead of the custom
'remote_fio_ctrl_c_flag' flag. Restore the quit handler instead
of changing the SIGINT handler.
(do_remote_fileio_request): Override the quit handler instead of
changing the SIGINT handler.
2016-06-01 17:34:49 +02:00
|
|
|
|
remote_fileio_quit_handler (void)
|
2003-06-10 16:37:04 +02:00
|
|
|
|
{
|
2016-08-05 20:54:11 +02:00
|
|
|
|
if (check_quit_flag ())
|
|
|
|
|
quit ();
|
2003-06-10 16:37:04 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
remote_fileio_reply (int retcode, int error)
|
|
|
|
|
{
|
|
|
|
|
char buf[32];
|
gdb/remote-fileio.c: Eliminate custom SIGINT signal handler
... and fix Ctrl-C races.
The current remote-fileio.c SIGINT/EINTR code can lose Ctrl-C --
there's a period where SIG_IGN is installed as signal handler, for
example.
Since:
- remote.c no longer installs a custom SIGINT handler;
- The current remote-fileio.c SIGINT handler is basically the same as
the default SIGINT handler (event-top.c:handle_sigint), in
principle, except that instead of setting the quit flag, it sets a
separate flag.
I think we should be able to completely remove the remote-fileio.c
SIGINT handler, and centralize on the quit flag, thus fixing the
Ctrl-C race.
gdb/ChangeLog:
yyyy-mm-dd Pedro Alves <palves@redhat.com>
* remote-fileio.c (remote_fio_ctrl_c_flag, remote_fio_sa)
(remote_fio_osa)
(remote_fio_ofunc, remote_fileio_sig_init, remote_fileio_sig_set)
(remote_fileio_sig_exit, remote_fileio_ctrl_c_signal_handler):
Delete.
(remote_fileio_o_quit_handler): New global.
(remote_fileio_quit_handler): New function.
(remote_fileio_reply): Check the quit flag instead of the custom
'remote_fio_ctrl_c_flag' flag. Restore the quit handler instead
of changing the SIGINT handler.
(do_remote_fileio_request): Override the quit handler instead of
changing the SIGINT handler.
2016-06-01 17:34:49 +02:00
|
|
|
|
int ctrl_c = check_quit_flag ();
|
2003-06-10 16:37:04 +02:00
|
|
|
|
|
|
|
|
|
strcpy (buf, "F");
|
|
|
|
|
if (retcode < 0)
|
|
|
|
|
{
|
|
|
|
|
strcat (buf, "-");
|
|
|
|
|
retcode = -retcode;
|
|
|
|
|
}
|
|
|
|
|
sprintf (buf + strlen (buf), "%x", retcode);
|
gdb/remote-fileio.c: Eliminate custom SIGINT signal handler
... and fix Ctrl-C races.
The current remote-fileio.c SIGINT/EINTR code can lose Ctrl-C --
there's a period where SIG_IGN is installed as signal handler, for
example.
Since:
- remote.c no longer installs a custom SIGINT handler;
- The current remote-fileio.c SIGINT handler is basically the same as
the default SIGINT handler (event-top.c:handle_sigint), in
principle, except that instead of setting the quit flag, it sets a
separate flag.
I think we should be able to completely remove the remote-fileio.c
SIGINT handler, and centralize on the quit flag, thus fixing the
Ctrl-C race.
gdb/ChangeLog:
yyyy-mm-dd Pedro Alves <palves@redhat.com>
* remote-fileio.c (remote_fio_ctrl_c_flag, remote_fio_sa)
(remote_fio_osa)
(remote_fio_ofunc, remote_fileio_sig_init, remote_fileio_sig_set)
(remote_fileio_sig_exit, remote_fileio_ctrl_c_signal_handler):
Delete.
(remote_fileio_o_quit_handler): New global.
(remote_fileio_quit_handler): New function.
(remote_fileio_reply): Check the quit flag instead of the custom
'remote_fio_ctrl_c_flag' flag. Restore the quit handler instead
of changing the SIGINT handler.
(do_remote_fileio_request): Override the quit handler instead of
changing the SIGINT handler.
2016-06-01 17:34:49 +02:00
|
|
|
|
if (error || ctrl_c)
|
2003-06-10 16:37:04 +02:00
|
|
|
|
{
|
gdb/remote-fileio.c: Eliminate custom SIGINT signal handler
... and fix Ctrl-C races.
The current remote-fileio.c SIGINT/EINTR code can lose Ctrl-C --
there's a period where SIG_IGN is installed as signal handler, for
example.
Since:
- remote.c no longer installs a custom SIGINT handler;
- The current remote-fileio.c SIGINT handler is basically the same as
the default SIGINT handler (event-top.c:handle_sigint), in
principle, except that instead of setting the quit flag, it sets a
separate flag.
I think we should be able to completely remove the remote-fileio.c
SIGINT handler, and centralize on the quit flag, thus fixing the
Ctrl-C race.
gdb/ChangeLog:
yyyy-mm-dd Pedro Alves <palves@redhat.com>
* remote-fileio.c (remote_fio_ctrl_c_flag, remote_fio_sa)
(remote_fio_osa)
(remote_fio_ofunc, remote_fileio_sig_init, remote_fileio_sig_set)
(remote_fileio_sig_exit, remote_fileio_ctrl_c_signal_handler):
Delete.
(remote_fileio_o_quit_handler): New global.
(remote_fileio_quit_handler): New function.
(remote_fileio_reply): Check the quit flag instead of the custom
'remote_fio_ctrl_c_flag' flag. Restore the quit handler instead
of changing the SIGINT handler.
(do_remote_fileio_request): Override the quit handler instead of
changing the SIGINT handler.
2016-06-01 17:34:49 +02:00
|
|
|
|
if (error && ctrl_c)
|
2003-06-10 16:37:04 +02:00
|
|
|
|
error = FILEIO_EINTR;
|
|
|
|
|
if (error < 0)
|
|
|
|
|
{
|
|
|
|
|
strcat (buf, "-");
|
|
|
|
|
error = -error;
|
|
|
|
|
}
|
|
|
|
|
sprintf (buf + strlen (buf), ",%x", error);
|
gdb/remote-fileio.c: Eliminate custom SIGINT signal handler
... and fix Ctrl-C races.
The current remote-fileio.c SIGINT/EINTR code can lose Ctrl-C --
there's a period where SIG_IGN is installed as signal handler, for
example.
Since:
- remote.c no longer installs a custom SIGINT handler;
- The current remote-fileio.c SIGINT handler is basically the same as
the default SIGINT handler (event-top.c:handle_sigint), in
principle, except that instead of setting the quit flag, it sets a
separate flag.
I think we should be able to completely remove the remote-fileio.c
SIGINT handler, and centralize on the quit flag, thus fixing the
Ctrl-C race.
gdb/ChangeLog:
yyyy-mm-dd Pedro Alves <palves@redhat.com>
* remote-fileio.c (remote_fio_ctrl_c_flag, remote_fio_sa)
(remote_fio_osa)
(remote_fio_ofunc, remote_fileio_sig_init, remote_fileio_sig_set)
(remote_fileio_sig_exit, remote_fileio_ctrl_c_signal_handler):
Delete.
(remote_fileio_o_quit_handler): New global.
(remote_fileio_quit_handler): New function.
(remote_fileio_reply): Check the quit flag instead of the custom
'remote_fio_ctrl_c_flag' flag. Restore the quit handler instead
of changing the SIGINT handler.
(do_remote_fileio_request): Override the quit handler instead of
changing the SIGINT handler.
2016-06-01 17:34:49 +02:00
|
|
|
|
if (ctrl_c)
|
2003-06-10 16:37:04 +02:00
|
|
|
|
strcat (buf, ",C");
|
|
|
|
|
}
|
gdb/remote-fileio.c: Eliminate custom SIGINT signal handler
... and fix Ctrl-C races.
The current remote-fileio.c SIGINT/EINTR code can lose Ctrl-C --
there's a period where SIG_IGN is installed as signal handler, for
example.
Since:
- remote.c no longer installs a custom SIGINT handler;
- The current remote-fileio.c SIGINT handler is basically the same as
the default SIGINT handler (event-top.c:handle_sigint), in
principle, except that instead of setting the quit flag, it sets a
separate flag.
I think we should be able to completely remove the remote-fileio.c
SIGINT handler, and centralize on the quit flag, thus fixing the
Ctrl-C race.
gdb/ChangeLog:
yyyy-mm-dd Pedro Alves <palves@redhat.com>
* remote-fileio.c (remote_fio_ctrl_c_flag, remote_fio_sa)
(remote_fio_osa)
(remote_fio_ofunc, remote_fileio_sig_init, remote_fileio_sig_set)
(remote_fileio_sig_exit, remote_fileio_ctrl_c_signal_handler):
Delete.
(remote_fileio_o_quit_handler): New global.
(remote_fileio_quit_handler): New function.
(remote_fileio_reply): Check the quit flag instead of the custom
'remote_fio_ctrl_c_flag' flag. Restore the quit handler instead
of changing the SIGINT handler.
(do_remote_fileio_request): Override the quit handler instead of
changing the SIGINT handler.
2016-06-01 17:34:49 +02:00
|
|
|
|
quit_handler = remote_fileio_o_quit_handler;
|
2003-06-10 16:37:04 +02:00
|
|
|
|
putpkt (buf);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
2003-06-11 12:24:53 +02:00
|
|
|
|
remote_fileio_ioerror (void)
|
2003-06-10 16:37:04 +02:00
|
|
|
|
{
|
|
|
|
|
remote_fileio_reply (-1, FILEIO_EIO);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
2003-06-11 12:24:53 +02:00
|
|
|
|
remote_fileio_badfd (void)
|
2003-06-10 16:37:04 +02:00
|
|
|
|
{
|
|
|
|
|
remote_fileio_reply (-1, FILEIO_EBADF);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
remote_fileio_return_errno (int retcode)
|
|
|
|
|
{
|
2011-01-05 23:22:53 +01:00
|
|
|
|
remote_fileio_reply (retcode, retcode < 0
|
2015-04-09 15:22:56 +02:00
|
|
|
|
? host_to_fileio_error (errno) : 0);
|
2003-06-10 16:37:04 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
remote_fileio_return_success (int retcode)
|
|
|
|
|
{
|
|
|
|
|
remote_fileio_reply (retcode, 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
remote_fileio_func_open (char *buf)
|
|
|
|
|
{
|
|
|
|
|
CORE_ADDR ptrval;
|
2011-01-25 12:54:00 +01:00
|
|
|
|
int length;
|
2003-06-10 16:37:04 +02:00
|
|
|
|
long num;
|
|
|
|
|
int flags, fd;
|
|
|
|
|
mode_t mode;
|
|
|
|
|
char *pathname;
|
|
|
|
|
struct stat st;
|
|
|
|
|
|
2011-01-10 21:38:51 +01:00
|
|
|
|
/* 1. Parameter: Ptr to pathname / length incl. trailing zero. */
|
2003-06-10 16:37:04 +02:00
|
|
|
|
if (remote_fileio_extract_ptr_w_len (&buf, &ptrval, &length))
|
|
|
|
|
{
|
|
|
|
|
remote_fileio_ioerror ();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
/* 2. Parameter: open flags */
|
|
|
|
|
if (remote_fileio_extract_int (&buf, &num))
|
|
|
|
|
{
|
|
|
|
|
remote_fileio_ioerror ();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
flags = remote_fileio_oflags_to_host (num);
|
|
|
|
|
/* 3. Parameter: open mode */
|
|
|
|
|
if (remote_fileio_extract_int (&buf, &num))
|
|
|
|
|
{
|
|
|
|
|
remote_fileio_ioerror ();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
mode = remote_fileio_mode_to_host (num, 1);
|
|
|
|
|
|
2011-01-25 12:54:00 +01:00
|
|
|
|
/* Request pathname. */
|
2015-09-25 20:08:06 +02:00
|
|
|
|
pathname = (char *) alloca (length);
|
2011-01-25 12:54:00 +01:00
|
|
|
|
if (target_read_memory (ptrval, (gdb_byte *) pathname, length) != 0)
|
2003-06-10 16:37:04 +02:00
|
|
|
|
{
|
|
|
|
|
remote_fileio_ioerror ();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Check if pathname exists and is not a regular file or directory. If so,
|
|
|
|
|
return an appropriate error code. Same for trying to open directories
|
2011-01-10 21:38:51 +01:00
|
|
|
|
for writing. */
|
2003-06-10 16:37:04 +02:00
|
|
|
|
if (!stat (pathname, &st))
|
|
|
|
|
{
|
|
|
|
|
if (!S_ISREG (st.st_mode) && !S_ISDIR (st.st_mode))
|
|
|
|
|
{
|
|
|
|
|
remote_fileio_reply (-1, FILEIO_ENODEV);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (S_ISDIR (st.st_mode)
|
|
|
|
|
&& ((flags & O_WRONLY) == O_WRONLY || (flags & O_RDWR) == O_RDWR))
|
|
|
|
|
{
|
|
|
|
|
remote_fileio_reply (-1, FILEIO_EISDIR);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
PR gdb/7912:
* Makefile.in (SFILES): Add filestuff.c
(COMMON_OBS): Add filestuff.o.
(filestuff.o): New target.
* auto-load.c (auto_load_objfile_script_1): Use
gdb_fopen_cloexec.
* auxv.c (procfs_xfer_auxv): Use gdb_open_cloexec.
* cli/cli-cmds.c (shell_escape): Call close_most_fds.
* cli/cli-dump.c (fopen_with_cleanup): Use gdb_fopen_cloexec.
* common/agent.c (gdb_connect_sync_socket): Use
gdb_socket_cloexec.
* common/filestuff.c: New file.
* common/filestuff.h: New file.
* common/linux-osdata.c (linux_common_core_of_thread)
(command_from_pid, commandline_from_pid, print_source_lines)
(linux_xfer_osdata_shm, linux_xfer_osdata_sem)
(linux_xfer_osdata_msg, linux_xfer_osdata_modules): Use
gdb_fopen_cloexec.
* common/linux-procfs.c (linux_proc_get_int)
(linux_proc_pid_has_state): Use gdb_fopen_cloexec.
* config.in, configure: Rebuild.
* configure.ac: Don't check for sys/socket.h. Check for
fdwalk, pipe2.
* corelow.c (core_open): Use gdb_open_cloexec.
* dwarf2read.c (write_psymtabs_to_index): Use gdb_fopen_cloexec.
* fork-child.c (fork_inferior): Call close_most_fds.
* gdb_bfd.c (gdb_bfd_open): Use gdb_open_cloexec.
* inf-child.c (inf_child_fileio_readlink): Use gdb_open_cloexec.
* linux-nat.c (linux_nat_thread_name, linux_proc_pending_signals):
Use gdb_fopen_cloexec.
(linux_proc_xfer_partial, linux_proc_xfer_spu): Use
gdb_open_cloexec.
(linux_async_pipe): Use gdb_pipe_cloexec.
* remote-fileio.c (remote_fileio_func_open): Use
gdb_open_cloexec.
* remote.c (remote_file_put, remote_file_get): Use
gdb_fopen_cloexec.
* ser-pipe.c (pipe_open): Use gdb_socketpair_cloexec,
close_most_fds.
* ser-tcp.c (net_open): Use gdb_socket_cloexec.
* ser-unix.c (hardwire_open): Use gdb_open_cloexec.
* solib.c (solib_find): Use gdb_open_cloexec.
* source.c (openp, find_and_open_source): Use gdb_open_cloexec.
* tracepoint.c (tfile_start): Use gdb_fopen_cloexec.
(tfile_open): Use gdb_open_cloexec.
* tui/tui-io.c (tui_initialize_io): Use gdb_pipe_cloexec.
* ui-file.c (gdb_fopen): Use gdb_fopen_cloexec.
* xml-support.c (xml_fetch_content_from_file): Use
gdb_fopen_cloexec.
* main.c (captured_main): Call notice_open_fds.
gdbserver
* Makefile.in (SFILES): Add filestuff.c.
(OBS): Add filestuff.o.
(filestuff.o): New target.
* config.in, configure: Rebuild.
* configure.ac: Check for fdwalk, pipe2.
2013-04-22 18:46:15 +02:00
|
|
|
|
fd = gdb_open_cloexec (pathname, flags, mode);
|
2003-06-10 16:37:04 +02:00
|
|
|
|
if (fd < 0)
|
|
|
|
|
{
|
|
|
|
|
remote_fileio_return_errno (-1);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fd = remote_fileio_fd_to_targetfd (fd);
|
|
|
|
|
remote_fileio_return_success (fd);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
remote_fileio_func_close (char *buf)
|
|
|
|
|
{
|
|
|
|
|
long num;
|
|
|
|
|
int fd;
|
|
|
|
|
|
|
|
|
|
/* Parameter: file descriptor */
|
|
|
|
|
if (remote_fileio_extract_int (&buf, &num))
|
|
|
|
|
{
|
|
|
|
|
remote_fileio_ioerror ();
|
|
|
|
|
return;
|
|
|
|
|
}
|
2003-06-11 12:24:53 +02:00
|
|
|
|
fd = remote_fileio_map_fd ((int) num);
|
|
|
|
|
if (fd == FIO_FD_INVALID)
|
2003-06-10 16:37:04 +02:00
|
|
|
|
{
|
|
|
|
|
remote_fileio_badfd ();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (fd != FIO_FD_CONSOLE_IN && fd != FIO_FD_CONSOLE_OUT && close (fd))
|
|
|
|
|
remote_fileio_return_errno (-1);
|
|
|
|
|
remote_fileio_close_target_fd ((int) num);
|
|
|
|
|
remote_fileio_return_success (0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
remote_fileio_func_read (char *buf)
|
|
|
|
|
{
|
|
|
|
|
long target_fd, num;
|
2003-06-11 12:24:53 +02:00
|
|
|
|
LONGEST lnum;
|
2003-06-10 16:37:04 +02:00
|
|
|
|
CORE_ADDR ptrval;
|
2012-05-18 23:02:52 +02:00
|
|
|
|
int fd, ret;
|
2006-01-17 15:11:16 +01:00
|
|
|
|
gdb_byte *buffer;
|
2003-06-10 16:37:04 +02:00
|
|
|
|
size_t length;
|
|
|
|
|
off_t old_offset, new_offset;
|
|
|
|
|
|
|
|
|
|
/* 1. Parameter: file descriptor */
|
|
|
|
|
if (remote_fileio_extract_int (&buf, &target_fd))
|
|
|
|
|
{
|
|
|
|
|
remote_fileio_ioerror ();
|
|
|
|
|
return;
|
|
|
|
|
}
|
2003-06-11 12:24:53 +02:00
|
|
|
|
fd = remote_fileio_map_fd ((int) target_fd);
|
|
|
|
|
if (fd == FIO_FD_INVALID)
|
2003-06-10 16:37:04 +02:00
|
|
|
|
{
|
|
|
|
|
remote_fileio_badfd ();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
/* 2. Parameter: buffer pointer */
|
|
|
|
|
if (remote_fileio_extract_long (&buf, &lnum))
|
|
|
|
|
{
|
|
|
|
|
remote_fileio_ioerror ();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
ptrval = (CORE_ADDR) lnum;
|
|
|
|
|
/* 3. Parameter: buffer length */
|
|
|
|
|
if (remote_fileio_extract_int (&buf, &num))
|
|
|
|
|
{
|
|
|
|
|
remote_fileio_ioerror ();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
length = (size_t) num;
|
|
|
|
|
|
|
|
|
|
switch (fd)
|
|
|
|
|
{
|
|
|
|
|
case FIO_FD_CONSOLE_OUT:
|
|
|
|
|
remote_fileio_badfd ();
|
|
|
|
|
return;
|
|
|
|
|
case FIO_FD_CONSOLE_IN:
|
|
|
|
|
{
|
|
|
|
|
static char *remaining_buf = NULL;
|
|
|
|
|
static int remaining_length = 0;
|
|
|
|
|
|
2009-11-12 22:01:00 +01:00
|
|
|
|
buffer = (gdb_byte *) xmalloc (16384);
|
2003-06-10 16:37:04 +02:00
|
|
|
|
if (remaining_buf)
|
|
|
|
|
{
|
|
|
|
|
if (remaining_length > length)
|
|
|
|
|
{
|
|
|
|
|
memcpy (buffer, remaining_buf, length);
|
|
|
|
|
memmove (remaining_buf, remaining_buf + length,
|
|
|
|
|
remaining_length - length);
|
|
|
|
|
remaining_length -= length;
|
|
|
|
|
ret = length;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
memcpy (buffer, remaining_buf, remaining_length);
|
|
|
|
|
xfree (remaining_buf);
|
|
|
|
|
remaining_buf = NULL;
|
|
|
|
|
ret = remaining_length;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2009-11-12 22:01:00 +01:00
|
|
|
|
/* Windows (at least XP and Server 2003) has difficulty
|
|
|
|
|
with large reads from consoles. If a handle is
|
|
|
|
|
backed by a real console device, overly large reads
|
|
|
|
|
from the handle will fail and set errno == ENOMEM.
|
|
|
|
|
On a Windows Server 2003 system where I tested,
|
|
|
|
|
reading 26608 bytes from the console was OK, but
|
|
|
|
|
anything above 26609 bytes would fail. The limit has
|
|
|
|
|
been observed to vary on different systems. So, we
|
|
|
|
|
limit this read to something smaller than that - by a
|
|
|
|
|
safe margin, in case the limit depends on system
|
|
|
|
|
resources or version. */
|
|
|
|
|
ret = ui_file_read (gdb_stdtargin, (char *) buffer, 16383);
|
2003-06-10 16:37:04 +02:00
|
|
|
|
if (ret > 0 && (size_t)ret > length)
|
|
|
|
|
{
|
|
|
|
|
remaining_buf = (char *) xmalloc (ret - length);
|
|
|
|
|
remaining_length = ret - length;
|
|
|
|
|
memcpy (remaining_buf, buffer + length, remaining_length);
|
|
|
|
|
ret = length;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
default:
|
2006-01-17 15:11:16 +01:00
|
|
|
|
buffer = (gdb_byte *) xmalloc (length);
|
2003-06-10 16:37:04 +02:00
|
|
|
|
/* POSIX defines EINTR behaviour of read in a weird way. It's allowed
|
|
|
|
|
for read() to return -1 even if "some" bytes have been read. It
|
|
|
|
|
has been corrected in SUSv2 but that doesn't help us much...
|
|
|
|
|
Therefore a complete solution must check how many bytes have been
|
|
|
|
|
read on EINTR to return a more reliable value to the target */
|
|
|
|
|
old_offset = lseek (fd, 0, SEEK_CUR);
|
|
|
|
|
ret = read (fd, buffer, length);
|
|
|
|
|
if (ret < 0 && errno == EINTR)
|
|
|
|
|
{
|
|
|
|
|
new_offset = lseek (fd, 0, SEEK_CUR);
|
|
|
|
|
/* If some data has been read, return the number of bytes read.
|
2011-01-10 21:38:51 +01:00
|
|
|
|
The Ctrl-C flag is set in remote_fileio_reply() anyway. */
|
2003-06-10 16:37:04 +02:00
|
|
|
|
if (old_offset != new_offset)
|
|
|
|
|
ret = new_offset - old_offset;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (ret > 0)
|
|
|
|
|
{
|
2011-01-25 12:54:00 +01:00
|
|
|
|
errno = target_write_memory (ptrval, buffer, ret);
|
|
|
|
|
if (errno != 0)
|
|
|
|
|
ret = -1;
|
2003-06-10 16:37:04 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (ret < 0)
|
|
|
|
|
remote_fileio_return_errno (-1);
|
|
|
|
|
else
|
|
|
|
|
remote_fileio_return_success (ret);
|
|
|
|
|
|
|
|
|
|
xfree (buffer);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
remote_fileio_func_write (char *buf)
|
|
|
|
|
{
|
|
|
|
|
long target_fd, num;
|
2003-06-11 12:24:53 +02:00
|
|
|
|
LONGEST lnum;
|
2003-06-10 16:37:04 +02:00
|
|
|
|
CORE_ADDR ptrval;
|
2011-01-25 12:54:00 +01:00
|
|
|
|
int fd, ret;
|
2006-01-17 15:11:16 +01:00
|
|
|
|
gdb_byte *buffer;
|
2003-06-10 16:37:04 +02:00
|
|
|
|
size_t length;
|
|
|
|
|
|
|
|
|
|
/* 1. Parameter: file descriptor */
|
|
|
|
|
if (remote_fileio_extract_int (&buf, &target_fd))
|
|
|
|
|
{
|
|
|
|
|
remote_fileio_ioerror ();
|
|
|
|
|
return;
|
|
|
|
|
}
|
2003-06-11 12:24:53 +02:00
|
|
|
|
fd = remote_fileio_map_fd ((int) target_fd);
|
|
|
|
|
if (fd == FIO_FD_INVALID)
|
2003-06-10 16:37:04 +02:00
|
|
|
|
{
|
|
|
|
|
remote_fileio_badfd ();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
/* 2. Parameter: buffer pointer */
|
|
|
|
|
if (remote_fileio_extract_long (&buf, &lnum))
|
|
|
|
|
{
|
|
|
|
|
remote_fileio_ioerror ();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
ptrval = (CORE_ADDR) lnum;
|
|
|
|
|
/* 3. Parameter: buffer length */
|
|
|
|
|
if (remote_fileio_extract_int (&buf, &num))
|
|
|
|
|
{
|
|
|
|
|
remote_fileio_ioerror ();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
length = (size_t) num;
|
|
|
|
|
|
2006-01-17 15:11:16 +01:00
|
|
|
|
buffer = (gdb_byte *) xmalloc (length);
|
2011-01-25 12:54:00 +01:00
|
|
|
|
if (target_read_memory (ptrval, buffer, length) != 0)
|
2003-06-10 16:37:04 +02:00
|
|
|
|
{
|
|
|
|
|
xfree (buffer);
|
|
|
|
|
remote_fileio_ioerror ();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
switch (fd)
|
|
|
|
|
{
|
|
|
|
|
case FIO_FD_CONSOLE_IN:
|
|
|
|
|
remote_fileio_badfd ();
|
2007-08-05 03:04:31 +02:00
|
|
|
|
xfree (buffer);
|
2003-06-10 16:37:04 +02:00
|
|
|
|
return;
|
|
|
|
|
case FIO_FD_CONSOLE_OUT:
|
2006-01-17 15:11:16 +01:00
|
|
|
|
ui_file_write (target_fd == 1 ? gdb_stdtarg : gdb_stdtargerr,
|
|
|
|
|
(char *) buffer, length);
|
2003-06-10 16:37:04 +02:00
|
|
|
|
gdb_flush (target_fd == 1 ? gdb_stdtarg : gdb_stdtargerr);
|
|
|
|
|
ret = length;
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
ret = write (fd, buffer, length);
|
|
|
|
|
if (ret < 0 && errno == EACCES)
|
2011-01-05 23:22:53 +01:00
|
|
|
|
errno = EBADF; /* Cygwin returns EACCESS when writing to a
|
2011-01-10 21:38:51 +01:00
|
|
|
|
R/O file. */
|
2003-06-10 16:37:04 +02:00
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (ret < 0)
|
|
|
|
|
remote_fileio_return_errno (-1);
|
|
|
|
|
else
|
|
|
|
|
remote_fileio_return_success (ret);
|
|
|
|
|
|
|
|
|
|
xfree (buffer);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
remote_fileio_func_lseek (char *buf)
|
|
|
|
|
{
|
|
|
|
|
long num;
|
2003-06-11 12:24:53 +02:00
|
|
|
|
LONGEST lnum;
|
2003-06-10 16:37:04 +02:00
|
|
|
|
int fd, flag;
|
|
|
|
|
off_t offset, ret;
|
|
|
|
|
|
|
|
|
|
/* 1. Parameter: file descriptor */
|
|
|
|
|
if (remote_fileio_extract_int (&buf, &num))
|
|
|
|
|
{
|
|
|
|
|
remote_fileio_ioerror ();
|
|
|
|
|
return;
|
|
|
|
|
}
|
2003-06-11 12:24:53 +02:00
|
|
|
|
fd = remote_fileio_map_fd ((int) num);
|
|
|
|
|
if (fd == FIO_FD_INVALID)
|
2003-06-10 16:37:04 +02:00
|
|
|
|
{
|
|
|
|
|
remote_fileio_badfd ();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
else if (fd == FIO_FD_CONSOLE_IN || fd == FIO_FD_CONSOLE_OUT)
|
|
|
|
|
{
|
|
|
|
|
remote_fileio_reply (-1, FILEIO_ESPIPE);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 2. Parameter: offset */
|
|
|
|
|
if (remote_fileio_extract_long (&buf, &lnum))
|
|
|
|
|
{
|
|
|
|
|
remote_fileio_ioerror ();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
offset = (off_t) lnum;
|
|
|
|
|
/* 3. Parameter: flag */
|
|
|
|
|
if (remote_fileio_extract_int (&buf, &num))
|
|
|
|
|
{
|
|
|
|
|
remote_fileio_ioerror ();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (remote_fileio_seek_flag_to_host (num, &flag))
|
|
|
|
|
{
|
|
|
|
|
remote_fileio_reply (-1, FILEIO_EINVAL);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ret = lseek (fd, offset, flag);
|
|
|
|
|
|
|
|
|
|
if (ret == (off_t) -1)
|
|
|
|
|
remote_fileio_return_errno (-1);
|
|
|
|
|
else
|
|
|
|
|
remote_fileio_return_success (ret);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
remote_fileio_func_rename (char *buf)
|
|
|
|
|
{
|
2006-07-19 08:21:23 +02:00
|
|
|
|
CORE_ADDR old_ptr, new_ptr;
|
2011-01-25 12:54:00 +01:00
|
|
|
|
int old_len, new_len;
|
2003-06-10 16:37:04 +02:00
|
|
|
|
char *oldpath, *newpath;
|
|
|
|
|
int ret, of, nf;
|
|
|
|
|
struct stat ost, nst;
|
|
|
|
|
|
|
|
|
|
/* 1. Parameter: Ptr to oldpath / length incl. trailing zero */
|
2006-07-19 08:21:23 +02:00
|
|
|
|
if (remote_fileio_extract_ptr_w_len (&buf, &old_ptr, &old_len))
|
2003-06-10 16:37:04 +02:00
|
|
|
|
{
|
|
|
|
|
remote_fileio_ioerror ();
|
|
|
|
|
return;
|
|
|
|
|
}
|
2006-07-19 08:21:23 +02:00
|
|
|
|
|
|
|
|
|
/* 2. Parameter: Ptr to newpath / length incl. trailing zero */
|
|
|
|
|
if (remote_fileio_extract_ptr_w_len (&buf, &new_ptr, &new_len))
|
2003-06-10 16:37:04 +02:00
|
|
|
|
{
|
|
|
|
|
remote_fileio_ioerror ();
|
|
|
|
|
return;
|
|
|
|
|
}
|
2006-07-19 08:21:23 +02:00
|
|
|
|
|
|
|
|
|
/* Request oldpath using 'm' packet */
|
2015-09-25 20:08:06 +02:00
|
|
|
|
oldpath = (char *) alloca (old_len);
|
2011-01-25 12:54:00 +01:00
|
|
|
|
if (target_read_memory (old_ptr, (gdb_byte *) oldpath, old_len) != 0)
|
2003-06-10 16:37:04 +02:00
|
|
|
|
{
|
|
|
|
|
remote_fileio_ioerror ();
|
|
|
|
|
return;
|
|
|
|
|
}
|
2006-07-19 08:21:23 +02:00
|
|
|
|
|
2003-06-10 16:37:04 +02:00
|
|
|
|
/* Request newpath using 'm' packet */
|
2015-09-25 20:08:06 +02:00
|
|
|
|
newpath = (char *) alloca (new_len);
|
2011-01-25 12:54:00 +01:00
|
|
|
|
if (target_read_memory (new_ptr, (gdb_byte *) newpath, new_len) != 0)
|
2003-06-10 16:37:04 +02:00
|
|
|
|
{
|
|
|
|
|
remote_fileio_ioerror ();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2011-01-10 21:38:51 +01:00
|
|
|
|
/* Only operate on regular files and directories. */
|
2003-06-11 12:24:53 +02:00
|
|
|
|
of = stat (oldpath, &ost);
|
|
|
|
|
nf = stat (newpath, &nst);
|
|
|
|
|
if ((!of && !S_ISREG (ost.st_mode) && !S_ISDIR (ost.st_mode))
|
|
|
|
|
|| (!nf && !S_ISREG (nst.st_mode) && !S_ISDIR (nst.st_mode)))
|
2003-06-10 16:37:04 +02:00
|
|
|
|
{
|
|
|
|
|
remote_fileio_reply (-1, FILEIO_EACCES);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ret = rename (oldpath, newpath);
|
|
|
|
|
|
|
|
|
|
if (ret == -1)
|
|
|
|
|
{
|
|
|
|
|
/* Special case: newpath is a non-empty directory. Some systems
|
|
|
|
|
return ENOTEMPTY, some return EEXIST. We coerce that to be
|
2011-01-10 21:38:51 +01:00
|
|
|
|
always EEXIST. */
|
2003-06-10 16:37:04 +02:00
|
|
|
|
if (errno == ENOTEMPTY)
|
|
|
|
|
errno = EEXIST;
|
|
|
|
|
#ifdef __CYGWIN__
|
2011-01-10 21:38:51 +01:00
|
|
|
|
/* Workaround some Cygwin problems with correct errnos. */
|
2003-06-10 16:37:04 +02:00
|
|
|
|
if (errno == EACCES)
|
|
|
|
|
{
|
|
|
|
|
if (!of && !nf && S_ISDIR (nst.st_mode))
|
|
|
|
|
{
|
|
|
|
|
if (S_ISREG (ost.st_mode))
|
|
|
|
|
errno = EISDIR;
|
|
|
|
|
else
|
|
|
|
|
{
|
2010-03-01 10:09:24 +01:00
|
|
|
|
char oldfullpath[PATH_MAX];
|
|
|
|
|
char newfullpath[PATH_MAX];
|
2003-06-10 16:37:04 +02:00
|
|
|
|
int len;
|
|
|
|
|
|
2010-03-01 10:09:24 +01:00
|
|
|
|
cygwin_conv_path (CCP_WIN_A_TO_POSIX, oldpath, oldfullpath,
|
|
|
|
|
PATH_MAX);
|
|
|
|
|
cygwin_conv_path (CCP_WIN_A_TO_POSIX, newpath, newfullpath,
|
|
|
|
|
PATH_MAX);
|
2003-06-10 16:37:04 +02:00
|
|
|
|
len = strlen (oldfullpath);
|
2011-03-23 19:23:56 +01:00
|
|
|
|
if (IS_DIR_SEPARATOR (newfullpath[len])
|
|
|
|
|
&& !filename_ncmp (oldfullpath, newfullpath, len))
|
2003-06-10 16:37:04 +02:00
|
|
|
|
errno = EINVAL;
|
|
|
|
|
else
|
|
|
|
|
errno = EEXIST;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
remote_fileio_return_errno (-1);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
remote_fileio_return_success (ret);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
remote_fileio_func_unlink (char *buf)
|
|
|
|
|
{
|
|
|
|
|
CORE_ADDR ptrval;
|
2011-01-25 12:54:00 +01:00
|
|
|
|
int length;
|
2003-06-10 16:37:04 +02:00
|
|
|
|
char *pathname;
|
|
|
|
|
int ret;
|
|
|
|
|
struct stat st;
|
|
|
|
|
|
|
|
|
|
/* Parameter: Ptr to pathname / length incl. trailing zero */
|
|
|
|
|
if (remote_fileio_extract_ptr_w_len (&buf, &ptrval, &length))
|
|
|
|
|
{
|
|
|
|
|
remote_fileio_ioerror ();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
/* Request pathname using 'm' packet */
|
2015-09-25 20:08:06 +02:00
|
|
|
|
pathname = (char *) alloca (length);
|
2011-01-25 12:54:00 +01:00
|
|
|
|
if (target_read_memory (ptrval, (gdb_byte *) pathname, length) != 0)
|
2003-06-10 16:37:04 +02:00
|
|
|
|
{
|
|
|
|
|
remote_fileio_ioerror ();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Only operate on regular files (and directories, which allows to return
|
2011-01-10 21:38:51 +01:00
|
|
|
|
the correct return code). */
|
2003-06-10 16:37:04 +02:00
|
|
|
|
if (!stat (pathname, &st) && !S_ISREG (st.st_mode) && !S_ISDIR (st.st_mode))
|
|
|
|
|
{
|
|
|
|
|
remote_fileio_reply (-1, FILEIO_ENODEV);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ret = unlink (pathname);
|
|
|
|
|
|
|
|
|
|
if (ret == -1)
|
|
|
|
|
remote_fileio_return_errno (-1);
|
|
|
|
|
else
|
|
|
|
|
remote_fileio_return_success (ret);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
remote_fileio_func_stat (char *buf)
|
|
|
|
|
{
|
2006-07-19 08:21:23 +02:00
|
|
|
|
CORE_ADDR statptr, nameptr;
|
2011-01-25 12:54:00 +01:00
|
|
|
|
int ret, namelength;
|
2003-06-10 16:37:04 +02:00
|
|
|
|
char *pathname;
|
2003-06-11 12:24:53 +02:00
|
|
|
|
LONGEST lnum;
|
2003-06-10 16:37:04 +02:00
|
|
|
|
struct stat st;
|
|
|
|
|
struct fio_stat fst;
|
|
|
|
|
|
|
|
|
|
/* 1. Parameter: Ptr to pathname / length incl. trailing zero */
|
2006-07-19 08:21:23 +02:00
|
|
|
|
if (remote_fileio_extract_ptr_w_len (&buf, &nameptr, &namelength))
|
2003-06-10 16:37:04 +02:00
|
|
|
|
{
|
|
|
|
|
remote_fileio_ioerror ();
|
|
|
|
|
return;
|
|
|
|
|
}
|
2006-07-19 08:21:23 +02:00
|
|
|
|
|
|
|
|
|
/* 2. Parameter: Ptr to struct stat */
|
|
|
|
|
if (remote_fileio_extract_long (&buf, &lnum))
|
2003-06-10 16:37:04 +02:00
|
|
|
|
{
|
|
|
|
|
remote_fileio_ioerror ();
|
|
|
|
|
return;
|
|
|
|
|
}
|
2006-07-19 08:21:23 +02:00
|
|
|
|
statptr = (CORE_ADDR) lnum;
|
|
|
|
|
|
|
|
|
|
/* Request pathname using 'm' packet */
|
2015-09-25 20:08:06 +02:00
|
|
|
|
pathname = (char *) alloca (namelength);
|
2011-01-25 12:54:00 +01:00
|
|
|
|
if (target_read_memory (nameptr, (gdb_byte *) pathname, namelength) != 0)
|
2003-06-10 16:37:04 +02:00
|
|
|
|
{
|
|
|
|
|
remote_fileio_ioerror ();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ret = stat (pathname, &st);
|
|
|
|
|
|
|
|
|
|
if (ret == -1)
|
|
|
|
|
{
|
|
|
|
|
remote_fileio_return_errno (-1);
|
|
|
|
|
return;
|
|
|
|
|
}
|
2011-01-10 21:38:51 +01:00
|
|
|
|
/* Only operate on regular files and directories. */
|
2003-06-10 16:37:04 +02:00
|
|
|
|
if (!ret && !S_ISREG (st.st_mode) && !S_ISDIR (st.st_mode))
|
|
|
|
|
{
|
|
|
|
|
remote_fileio_reply (-1, FILEIO_EACCES);
|
|
|
|
|
return;
|
|
|
|
|
}
|
2006-07-19 08:21:23 +02:00
|
|
|
|
if (statptr)
|
2003-06-10 16:37:04 +02:00
|
|
|
|
{
|
2015-04-09 15:22:56 +02:00
|
|
|
|
host_to_fileio_stat (&st, &fst);
|
|
|
|
|
host_to_fileio_uint (0, fst.fst_dev);
|
2011-01-25 12:54:00 +01:00
|
|
|
|
|
|
|
|
|
errno = target_write_memory (statptr, (gdb_byte *) &fst, sizeof fst);
|
|
|
|
|
if (errno != 0)
|
2003-06-10 16:37:04 +02:00
|
|
|
|
{
|
|
|
|
|
remote_fileio_return_errno (-1);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
remote_fileio_return_success (ret);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
remote_fileio_func_fstat (char *buf)
|
|
|
|
|
{
|
|
|
|
|
CORE_ADDR ptrval;
|
2012-05-18 23:02:52 +02:00
|
|
|
|
int fd, ret;
|
2003-06-10 16:37:04 +02:00
|
|
|
|
long target_fd;
|
2003-06-11 12:24:53 +02:00
|
|
|
|
LONGEST lnum;
|
2003-06-10 16:37:04 +02:00
|
|
|
|
struct stat st;
|
|
|
|
|
struct fio_stat fst;
|
|
|
|
|
struct timeval tv;
|
|
|
|
|
|
|
|
|
|
/* 1. Parameter: file descriptor */
|
|
|
|
|
if (remote_fileio_extract_int (&buf, &target_fd))
|
|
|
|
|
{
|
|
|
|
|
remote_fileio_ioerror ();
|
|
|
|
|
return;
|
|
|
|
|
}
|
2003-06-11 12:24:53 +02:00
|
|
|
|
fd = remote_fileio_map_fd ((int) target_fd);
|
|
|
|
|
if (fd == FIO_FD_INVALID)
|
2003-06-10 16:37:04 +02:00
|
|
|
|
{
|
|
|
|
|
remote_fileio_badfd ();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
/* 2. Parameter: Ptr to struct stat */
|
|
|
|
|
if (remote_fileio_extract_long (&buf, &lnum))
|
|
|
|
|
{
|
|
|
|
|
remote_fileio_ioerror ();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
ptrval = (CORE_ADDR) lnum;
|
|
|
|
|
|
|
|
|
|
if (fd == FIO_FD_CONSOLE_IN || fd == FIO_FD_CONSOLE_OUT)
|
|
|
|
|
{
|
2015-04-09 15:22:56 +02:00
|
|
|
|
host_to_fileio_uint (1, fst.fst_dev);
|
2011-03-03 19:35:32 +01:00
|
|
|
|
memset (&st, 0, sizeof (st));
|
2003-06-10 16:37:04 +02:00
|
|
|
|
st.st_mode = S_IFCHR | (fd == FIO_FD_CONSOLE_IN ? S_IRUSR : S_IWUSR);
|
|
|
|
|
st.st_nlink = 1;
|
2005-03-21 22:23:35 +01:00
|
|
|
|
#ifdef HAVE_GETUID
|
2003-06-10 16:37:04 +02:00
|
|
|
|
st.st_uid = getuid ();
|
2005-03-21 22:23:35 +01:00
|
|
|
|
#endif
|
|
|
|
|
#ifdef HAVE_GETGID
|
2003-06-10 16:37:04 +02:00
|
|
|
|
st.st_gid = getgid ();
|
2005-03-21 22:23:35 +01:00
|
|
|
|
#endif
|
|
|
|
|
#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
|
2003-06-10 16:37:04 +02:00
|
|
|
|
st.st_blksize = 512;
|
2005-03-21 22:23:35 +01:00
|
|
|
|
#endif
|
2003-12-30 07:52:09 +01:00
|
|
|
|
#if HAVE_STRUCT_STAT_ST_BLOCKS
|
2003-06-10 16:37:04 +02:00
|
|
|
|
st.st_blocks = 0;
|
2003-12-30 07:52:09 +01:00
|
|
|
|
#endif
|
2003-06-10 16:37:04 +02:00
|
|
|
|
if (!gettimeofday (&tv, NULL))
|
|
|
|
|
st.st_atime = st.st_mtime = st.st_ctime = tv.tv_sec;
|
|
|
|
|
else
|
|
|
|
|
st.st_atime = st.st_mtime = st.st_ctime = (time_t) 0;
|
|
|
|
|
ret = 0;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
ret = fstat (fd, &st);
|
|
|
|
|
|
|
|
|
|
if (ret == -1)
|
|
|
|
|
{
|
|
|
|
|
remote_fileio_return_errno (-1);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (ptrval)
|
|
|
|
|
{
|
2015-04-09 15:22:56 +02:00
|
|
|
|
host_to_fileio_stat (&st, &fst);
|
2003-06-10 16:37:04 +02:00
|
|
|
|
|
2011-01-25 12:54:00 +01:00
|
|
|
|
errno = target_write_memory (ptrval, (gdb_byte *) &fst, sizeof fst);
|
|
|
|
|
if (errno != 0)
|
2003-06-10 16:37:04 +02:00
|
|
|
|
{
|
|
|
|
|
remote_fileio_return_errno (-1);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
remote_fileio_return_success (ret);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
remote_fileio_func_gettimeofday (char *buf)
|
|
|
|
|
{
|
2003-06-11 12:24:53 +02:00
|
|
|
|
LONGEST lnum;
|
2003-06-10 16:37:04 +02:00
|
|
|
|
CORE_ADDR ptrval;
|
2012-05-18 23:02:52 +02:00
|
|
|
|
int ret;
|
2003-06-10 16:37:04 +02:00
|
|
|
|
struct timeval tv;
|
|
|
|
|
struct fio_timeval ftv;
|
|
|
|
|
|
|
|
|
|
/* 1. Parameter: struct timeval pointer */
|
|
|
|
|
if (remote_fileio_extract_long (&buf, &lnum))
|
|
|
|
|
{
|
|
|
|
|
remote_fileio_ioerror ();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
ptrval = (CORE_ADDR) lnum;
|
2011-01-10 21:38:51 +01:00
|
|
|
|
/* 2. Parameter: some pointer value... */
|
2003-06-10 16:37:04 +02:00
|
|
|
|
if (remote_fileio_extract_long (&buf, &lnum))
|
|
|
|
|
{
|
|
|
|
|
remote_fileio_ioerror ();
|
|
|
|
|
return;
|
|
|
|
|
}
|
2011-01-10 21:38:51 +01:00
|
|
|
|
/* ...which has to be NULL. */
|
2003-06-10 16:37:04 +02:00
|
|
|
|
if (lnum)
|
|
|
|
|
{
|
|
|
|
|
remote_fileio_reply (-1, FILEIO_EINVAL);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ret = gettimeofday (&tv, NULL);
|
|
|
|
|
|
|
|
|
|
if (ret == -1)
|
|
|
|
|
{
|
|
|
|
|
remote_fileio_return_errno (-1);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (ptrval)
|
|
|
|
|
{
|
|
|
|
|
remote_fileio_to_fio_timeval (&tv, &ftv);
|
|
|
|
|
|
2011-01-25 12:54:00 +01:00
|
|
|
|
errno = target_write_memory (ptrval, (gdb_byte *) &ftv, sizeof ftv);
|
|
|
|
|
if (errno != 0)
|
2003-06-10 16:37:04 +02:00
|
|
|
|
{
|
|
|
|
|
remote_fileio_return_errno (-1);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
remote_fileio_return_success (ret);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
remote_fileio_func_isatty (char *buf)
|
|
|
|
|
{
|
|
|
|
|
long target_fd;
|
|
|
|
|
int fd;
|
|
|
|
|
|
|
|
|
|
/* Parameter: file descriptor */
|
|
|
|
|
if (remote_fileio_extract_int (&buf, &target_fd))
|
|
|
|
|
{
|
|
|
|
|
remote_fileio_ioerror ();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
fd = remote_fileio_map_fd ((int) target_fd);
|
|
|
|
|
remote_fileio_return_success (fd == FIO_FD_CONSOLE_IN ||
|
|
|
|
|
fd == FIO_FD_CONSOLE_OUT ? 1 : 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
remote_fileio_func_system (char *buf)
|
|
|
|
|
{
|
|
|
|
|
CORE_ADDR ptrval;
|
2012-05-18 23:02:52 +02:00
|
|
|
|
int ret, length;
|
2006-06-13 10:55:22 +02:00
|
|
|
|
char *cmdline = NULL;
|
2003-06-10 16:37:04 +02:00
|
|
|
|
|
|
|
|
|
/* Parameter: Ptr to commandline / length incl. trailing zero */
|
|
|
|
|
if (remote_fileio_extract_ptr_w_len (&buf, &ptrval, &length))
|
|
|
|
|
{
|
|
|
|
|
remote_fileio_ioerror ();
|
|
|
|
|
return;
|
|
|
|
|
}
|
2006-06-13 10:55:22 +02:00
|
|
|
|
|
|
|
|
|
if (length)
|
2003-06-10 16:37:04 +02:00
|
|
|
|
{
|
2006-06-13 10:55:22 +02:00
|
|
|
|
/* Request commandline using 'm' packet */
|
2015-09-25 20:08:06 +02:00
|
|
|
|
cmdline = (char *) alloca (length);
|
2011-01-25 12:54:00 +01:00
|
|
|
|
if (target_read_memory (ptrval, (gdb_byte *) cmdline, length) != 0)
|
2006-06-13 10:55:22 +02:00
|
|
|
|
{
|
|
|
|
|
remote_fileio_ioerror ();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Check if system(3) has been explicitely allowed using the
|
|
|
|
|
`set remote system-call-allowed 1' command. If length is 0,
|
|
|
|
|
indicating a NULL parameter to the system call, return zero to
|
|
|
|
|
indicate a shell is not available. Otherwise fail with EPERM. */
|
|
|
|
|
if (!remote_fio_system_call_allowed)
|
|
|
|
|
{
|
|
|
|
|
if (!length)
|
|
|
|
|
remote_fileio_return_success (0);
|
|
|
|
|
else
|
|
|
|
|
remote_fileio_reply (-1, FILEIO_EPERM);
|
2003-06-10 16:37:04 +02:00
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ret = system (cmdline);
|
|
|
|
|
|
2006-06-13 10:55:22 +02:00
|
|
|
|
if (!length)
|
|
|
|
|
remote_fileio_return_success (ret);
|
|
|
|
|
else if (ret == -1)
|
2003-06-10 16:37:04 +02:00
|
|
|
|
remote_fileio_return_errno (-1);
|
|
|
|
|
else
|
|
|
|
|
remote_fileio_return_success (WEXITSTATUS (ret));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static struct {
|
-Wwrite-strings: The Rest
This is the remainder boring constification that all looks more of less
borderline obvious IMO.
gdb/ChangeLog:
2017-04-05 Pedro Alves <palves@redhat.com>
* ada-exp.y (yyerror): Constify.
* ada-lang.c (bound_name, get_selections)
(ada_variant_discrim_type)
(ada_variant_discrim_name, ada_value_struct_elt)
(ada_lookup_struct_elt_type, is_unchecked_variant)
(ada_which_variant_applies, standard_exc, ada_get_next_arg)
(catch_ada_exception_command_split)
(catch_ada_assert_command_split, catch_assert_command)
(ada_op_name): Constify.
* ada-lang.h (ada_yyerror, get_selections)
(ada_variant_discrim_name, ada_value_struct_elt): Constify.
* arc-tdep.c (arc_print_frame_cache): Constify.
* arm-tdep.c (arm_skip_stub): Constify.
* ax-gdb.c (gen_binop, gen_struct_ref_recursive, gen_struct_ref)
(gen_aggregate_elt_ref): Constify.
* bcache.c (print_bcache_statistics): Constify.
* bcache.h (print_bcache_statistics): Constify.
* break-catch-throw.c (catch_exception_command_1):
* breakpoint.c (struct ep_type_description::description):
Constify.
(add_solib_catchpoint): Constify.
(catch_fork_command_1): Add cast.
(add_catch_command): Constify.
* breakpoint.h (add_catch_command, add_solib_catchpoint):
Constify.
* bsd-uthread.c (bsd_uthread_state): Constify.
* buildsym.c (patch_subfile_names): Constify.
* buildsym.h (next_symbol_text_func, patch_subfile_names):
Constify.
* c-exp.y (yyerror): Constify.
(token::oper): Constify.
* c-lang.h (c_yyerror, cp_print_class_member): Constify.
* c-varobj.c (cplus_describe_child): Constify.
* charset.c (find_charset_names): Add cast.
(find_charset_names): Constify array and add const_cast.
* cli/cli-cmds.c (complete_command, cd_command): Constify.
(edit_command): Constify.
* cli/cli-decode.c (lookup_cmd): Constify.
* cli/cli-dump.c (dump_memory_command, dump_value_command):
Constify.
(struct dump_context): Constify.
(add_dump_command, restore_command): Constify.
* cli/cli-script.c (get_command_line): Constify.
* cli/cli-script.h (get_command_line): Constify.
* cli/cli-utils.c (check_for_argument): Constify.
* cli/cli-utils.h (check_for_argument): Constify.
* coff-pe-read.c (struct read_pe_section_data): Constify.
* command.h (lookup_cmd): Constify.
* common/print-utils.c (decimal2str): Constify.
* completer.c (gdb_print_filename): Constify.
* corefile.c (set_gnutarget): Constify.
* cp-name-parser.y (yyerror): Constify.
* cp-valprint.c (cp_print_class_member): Constify.
* cris-tdep.c (cris_register_name, crisv32_register_name):
Constify.
* d-exp.y (yyerror): Constify.
(struct token::oper): Constify.
* d-lang.h (d_yyerror): Constify.
* dbxread.c (struct header_file_location::name): Constify.
(add_old_header_file, add_new_header_file, last_function_name)
(dbx_next_symbol_text, add_bincl_to_list)
(find_corresponding_bincl_psymtab, set_namestring)
(find_stab_function_addr, read_dbx_symtab, start_psymtab)
(dbx_end_psymtab, read_ofile_symtab, process_one_symbol):
* defs.h (command_line_input, print_address_symbolic)
(deprecated_readline_begin_hook): Constify.
* dwarf2read.c (anonymous_struct_prefix, dwarf_bool_name):
Constify.
* event-top.c (handle_line_of_input): Constify and add cast.
* exceptions.c (catch_errors): Constify.
* exceptions.h (catch_errors): Constify.
* expprint.c (print_subexp_standard, op_string, op_name)
(op_name_standard, dump_raw_expression, dump_raw_expression):
* expression.h (op_name, op_string, dump_raw_expression):
Constify.
* f-exp.y (yyerror): Constify.
(struct token::oper): Constify.
(struct f77_boolean_val::name): Constify.
* f-lang.c (f_word_break_characters): Constify.
* f-lang.h (f_yyerror): Constify.
* fork-child.c (fork_inferior): Add cast.
* frv-tdep.c (struct gdbarch_tdep::register_names): Constify.
(new_variant): Constify.
* gdbarch.sh (pstring_ptr, pstring_list): Constify.
* gdbarch.c: Regenerate.
* gdbcore.h (set_gnutarget): Constify.
* go-exp.y (yyerror): Constify.
(token::oper): Constify.
* go-lang.h (go_yyerror): Constify.
* go32-nat.c (go32_sysinfo): Constify.
* guile/scm-breakpoint.c (gdbscm_breakpoint_expression): Constify.
* guile/scm-cmd.c (cmdscm_function): Constify.
* guile/scm-param.c (pascm_param_value): Constify.
* h8300-tdep.c (h8300_register_name, h8300s_register_name)
(h8300sx_register_name): Constify.
* hppa-tdep.c (hppa32_register_name, hppa64_register_name):
Constify.
* ia64-tdep.c (ia64_register_names): Constify.
* infcmd.c (construct_inferior_arguments): Constify.
(path_command, attach_post_wait): Constify.
* language.c (show_range_command, show_case_command)
(unk_lang_error): Constify.
* language.h (language_defn::la_error)
(language_defn::la_name_of_this): Constify.
* linespec.c (decode_line_2): Constify.
* linux-thread-db.c (thread_db_err_str): Constify.
* lm32-tdep.c (lm32_register_name): Constify.
* m2-exp.y (yyerror): Constify.
* m2-lang.h (m2_yyerror): Constify.
* m32r-tdep.c (m32r_register_names): Constify and make static.
* m68hc11-tdep.c (m68hc11_register_names): Constify.
* m88k-tdep.c (m88k_register_name): Constify.
* macroexp.c (appendmem): Constify.
* mdebugread.c (fdr_name, add_data_symbol, parse_type)
(upgrade_type, parse_external, parse_partial_symbols)
(mdebug_next_symbol_text, cross_ref, mylookup_symbol, new_psymtab)
(new_symbol): Constify.
* memattr.c (mem_info_command): Constify.
* mep-tdep.c (register_name_from_keyword): Constify.
* mi/mi-cmd-env.c (mi_cmd_env_path, _initialize_mi_cmd_env):
Constify.
* mi/mi-cmd-stack.c (list_args_or_locals): Constify.
* mi/mi-cmd-var.c (mi_cmd_var_show_attributes): Constify.
* mi/mi-main.c (captured_mi_execute_command): Constify and add
cast.
(mi_execute_async_cli_command): Constify.
* mips-tdep.c (mips_register_name): Constify.
* mn10300-tdep.c (register_name, mn10300_generic_register_name)
(am33_register_name, am33_2_register_name)
* moxie-tdep.c (moxie_register_names): Constify.
* nat/linux-osdata.c (osdata_type): Constify fields.
* nto-tdep.c (nto_parse_redirection): Constify.
* objc-lang.c (lookup_struct_typedef, lookup_objc_class)
(lookup_child_selector): Constify.
(objc_methcall::name): Constify.
* objc-lang.h (lookup_objc_class, lookup_child_selector)
(lookup_struct_typedef): Constify.
* objfiles.c (pc_in_section): Constify.
* objfiles.h (pc_in_section): Constify.
* p-exp.y (struct token::oper): Constify.
(yyerror): Constify.
* p-lang.h (pascal_yyerror): Constify.
* parser-defs.h (op_name_standard): Constify.
(op_print::string): Constify.
(exp_descriptor::op_name): Constify.
* printcmd.c (print_address_symbolic): Constify.
* psymtab.c (print_partial_symbols): Constify.
* python/py-breakpoint.c (stop_func): Constify.
(bppy_get_expression): Constify.
* python/py-cmd.c (cmdpy_completer::name): Constify.
(cmdpy_function): Constify.
* python/py-event.c (evpy_add_attribute)
(gdbpy_initialize_event_generic): Constify.
* python/py-event.h (evpy_add_attribute)
(gdbpy_initialize_event_generic): Constify.
* python/py-evts.c (add_new_registry): Constify.
* python/py-finishbreakpoint.c (outofscope_func): Constify.
* python/py-framefilter.c (get_py_iter_from_func): Constify.
* python/py-inferior.c (get_buffer): Add cast.
* python/py-param.c (parm_constant::name): Constify.
* python/py-unwind.c (fprint_frame_id): Constify.
* python/python.c (gdbpy_parameter_value): Constify.
* remote-fileio.c (remote_fio_func_map): Make 'name' const.
* remote.c (memory_packet_config::name): Constify.
(show_packet_config_cmd, remote_write_bytes)
(remote_buffer_add_string):
* reverse.c (exec_reverse_once): Constify.
* rs6000-tdep.c (variant::name, variant::description): Constify.
* rust-exp.y (rustyyerror): Constify.
* rust-lang.c (rust_op_name): Constify.
* rust-lang.h (rustyyerror): Constify.
* serial.h (serial_ops::name): Constify.
* sh-tdep.c (sh_sh_register_name, sh_sh3_register_name)
(sh_sh3e_register_name, sh_sh2e_register_name)
(sh_sh2a_register_name, sh_sh2a_nofpu_register_name)
(sh_sh_dsp_register_name, sh_sh3_dsp_register_name)
(sh_sh4_register_name, sh_sh4_nofpu_register_name)
(sh_sh4al_dsp_register_name): Constify.
* sh64-tdep.c (sh64_register_name): Constify.
* solib-darwin.c (lookup_symbol_from_bfd): Constify.
* spu-tdep.c (spu_register_name, info_spu_dma_cmdlist): Constify.
* stabsread.c (patch_block_stabs, read_type_number)
(ref_map::stabs, ref_add, process_reference)
(symbol_reference_defined, define_symbol, define_symbol)
(error_type, read_type, read_member_functions, read_cpp_abbrev)
(read_one_struct_field, read_struct_fields, read_baseclasses)
(read_tilde_fields, read_struct_type, read_array_type)
(read_enum_type, read_sun_builtin_type, read_sun_floating_type)
(read_huge_number, read_range_type, read_args, common_block_start)
(find_name_end): Constify.
* stabsread.h (common_block_start, define_symbol)
(process_one_symbol, symbol_reference_defined, ref_add):
* symfile.c (get_section_index, add_symbol_file_command):
* symfile.h (get_section_index): Constify.
* target-descriptions.c (tdesc_type::name): Constify.
(tdesc_free_type): Add cast.
* target.c (find_default_run_target):
(add_deprecated_target_alias, find_default_run_target)
(target_announce_detach): Constify.
(do_option): Constify.
* target.h (add_deprecated_target_alias): Constify.
* thread.c (print_thread_info_1): Constify.
* top.c (deprecated_readline_begin_hook, command_line_input):
Constify.
(init_main): Add casts.
* top.h (handle_line_of_input): Constify.
* tracefile-tfile.c (tfile_write_uploaded_tsv): Constify.
* tracepoint.c (tvariables_info_1, trace_status_mi): Constify.
(tfind_command): Rename to ...
(tfind_command_1): ... this and constify.
(tfind_command): New function.
(tfind_end_command, tfind_start_command): Adjust.
(encode_source_string): Constify.
* tracepoint.h (encode_source_string): Constify.
* tui/tui-data.c (tui_partial_win_by_name): Constify.
* tui/tui-data.h (tui_partial_win_by_name): Constify.
* tui/tui-source.c (tui_set_source_content_nil): Constify.
* tui/tui-source.h (tui_set_source_content_nil): Constify.
* tui/tui-win.c (parse_scrolling_args): Constify.
* tui/tui-windata.c (tui_erase_data_content): Constify.
* tui/tui-windata.h (tui_erase_data_content): Constify.
* tui/tui-winsource.c (tui_erase_source_content): Constify.
* tui/tui.c (tui_enable): Add cast.
* utils.c (defaulted_query): Constify.
(init_page_info): Add cast.
(puts_debug, subset_compare): Constify.
* utils.h (subset_compare): Constify.
* varobj.c (varobj_format_string): Constify.
* varobj.h (varobj_format_string): Constify.
* vax-tdep.c (vax_register_name): Constify.
* windows-nat.c (windows_detach): Constify.
* xcoffread.c (process_linenos, xcoff_next_symbol_text): Constify.
* xml-support.c (gdb_xml_end_element): Constify.
* xml-tdesc.c (tdesc_start_reg): Constify.
* xstormy16-tdep.c (xstormy16_register_name): Constify.
* xtensa-tdep.c (xtensa_find_register_by_name): Constify.
* xtensa-tdep.h (xtensa_register_t::name): Constify.
gdb/gdbserver/ChangeLog:
2017-04-05 Pedro Alves <palves@redhat.com>
* gdbreplay.c (sync_error): Constify.
* linux-x86-low.c (push_opcode): Constify.
2017-04-05 20:21:37 +02:00
|
|
|
|
const char *name;
|
2003-06-10 16:37:04 +02:00
|
|
|
|
void (*func)(char *);
|
|
|
|
|
} remote_fio_func_map[] = {
|
2007-01-03 20:01:25 +01:00
|
|
|
|
{ "open", remote_fileio_func_open },
|
|
|
|
|
{ "close", remote_fileio_func_close },
|
|
|
|
|
{ "read", remote_fileio_func_read },
|
|
|
|
|
{ "write", remote_fileio_func_write },
|
|
|
|
|
{ "lseek", remote_fileio_func_lseek },
|
|
|
|
|
{ "rename", remote_fileio_func_rename },
|
|
|
|
|
{ "unlink", remote_fileio_func_unlink },
|
|
|
|
|
{ "stat", remote_fileio_func_stat },
|
|
|
|
|
{ "fstat", remote_fileio_func_fstat },
|
|
|
|
|
{ "gettimeofday", remote_fileio_func_gettimeofday },
|
|
|
|
|
{ "isatty", remote_fileio_func_isatty },
|
|
|
|
|
{ "system", remote_fileio_func_system },
|
|
|
|
|
{ NULL, NULL }
|
2003-06-10 16:37:04 +02:00
|
|
|
|
};
|
|
|
|
|
|
Eliminate catch_exceptions/catch_exceptions_with_msg
This patch gets rid of catch_exceptions / catch_exceptions_with_msg.
The latter is done mostly by getting rid of the three remaining
vestigial libgdb wrapper functions, which are really pointless
nowadays. This results in a good number of simplifications.
(I checked that Insight doesn't use those functions.)
The gdb.mi/mi-pthreads.exp change is necessary because this actually
fixes a bug, IMO -- the patch stops MI's -thread-select causing output
on the CLI stream.
I.e., before:
-thread-select 123456789
&"Thread ID 123456789 not known.\n"
^error,msg="Thread ID 123456789 not known."
(gdb)
After:
-thread-select 123456789
^error,msg="Thread ID 123456789 not known."
(gdb)
gdb/ChangeLog
2017-10-10 Pedro Alves <palves@redhat.com>
Tom Tromey <tom@tromey.com>
* breakpoint.c (struct captured_breakpoint_query_args)
(do_captured_breakpoint_query, gdb_breakpoint_query): Delete.
(print_breakpoint): New.
* breakpoint.h (print_breakpoint): Declare.
* common/common-exceptions.h (enum return_reason): Remove
references to catch_exceptions.
* exceptions.c (catch_exceptions, catch_exceptions_with_msg):
Delete.
* exceptions.h (catch_exceptions_ftype, catch_exceptions)
(catch_exception_ftype, catch_exceptions_with_msg): Delete.
* gdb.h: Delete.
* gdbthread.h (thread_select): Declare.
* mi/mi-cmd-break.c: Don't include gdb.h.
(breakpoint_notify): Use print_breakpoint.
* mi/mi-cmd-catch.c: Don't include gdb.h.
* mi/mi-interp.c: Don't include gdb.h.
(mi_print_breakpoint_for_event): New.
(mi_breakpoint_created, mi_breakpoint_modified): Use
mi_print_breakpoint_for_event.
* mi/mi-main.c: Don't include gdb.h.
(mi_cmd_thread_select): Parse the global thread ID here. Use
thread_select instead of gdb_thread_select.
(mi_cmd_thread_list_ids): Output "thread-ids" tuple here instead
of using gdb_list_thread_ids.
* remote-fileio.c (do_remote_fileio_request): Change type. Reply
FILEIO_ENOSYS here.
(remote_fileio_request): Use TRY/CATCH instead of
catch_exceptions.
* symfile-mem.c (struct symbol_file_add_from_memory_args)
(symbol_file_add_from_memory_wrapper): Delete.
(add_vsyscall_page): Use TRY/CATCH instead of catch_exceptions.
* thread.c: Don't include gdb.h.
(do_captured_list_thread_ids, gdb_list_thread_ids): Delete.
(thread_alive): Use thread_select.
(do_captured_thread_select): Delete, parts salvaged as ...
(thread_select): ... this new function.
(gdb_thread_select): Delete.
gdb/testsuite/ChangeLog
2017-10-10 Pedro Alves <palves@redhat.com>
* gdb.mi/mi-pthreads.exp (check_mi_thread_command_set): Don't
expect CLI output.
2017-10-10 17:45:51 +02:00
|
|
|
|
static void
|
|
|
|
|
do_remote_fileio_request (char *buf)
|
2003-06-10 16:37:04 +02:00
|
|
|
|
{
|
|
|
|
|
char *c;
|
|
|
|
|
int idx;
|
|
|
|
|
|
gdb/remote-fileio.c: Eliminate custom SIGINT signal handler
... and fix Ctrl-C races.
The current remote-fileio.c SIGINT/EINTR code can lose Ctrl-C --
there's a period where SIG_IGN is installed as signal handler, for
example.
Since:
- remote.c no longer installs a custom SIGINT handler;
- The current remote-fileio.c SIGINT handler is basically the same as
the default SIGINT handler (event-top.c:handle_sigint), in
principle, except that instead of setting the quit flag, it sets a
separate flag.
I think we should be able to completely remove the remote-fileio.c
SIGINT handler, and centralize on the quit flag, thus fixing the
Ctrl-C race.
gdb/ChangeLog:
yyyy-mm-dd Pedro Alves <palves@redhat.com>
* remote-fileio.c (remote_fio_ctrl_c_flag, remote_fio_sa)
(remote_fio_osa)
(remote_fio_ofunc, remote_fileio_sig_init, remote_fileio_sig_set)
(remote_fileio_sig_exit, remote_fileio_ctrl_c_signal_handler):
Delete.
(remote_fileio_o_quit_handler): New global.
(remote_fileio_quit_handler): New function.
(remote_fileio_reply): Check the quit flag instead of the custom
'remote_fio_ctrl_c_flag' flag. Restore the quit handler instead
of changing the SIGINT handler.
(do_remote_fileio_request): Override the quit handler instead of
changing the SIGINT handler.
2016-06-01 17:34:49 +02:00
|
|
|
|
quit_handler = remote_fileio_quit_handler;
|
2003-06-10 16:37:04 +02:00
|
|
|
|
|
|
|
|
|
c = strchr (++buf, ',');
|
|
|
|
|
if (c)
|
|
|
|
|
*c++ = '\0';
|
|
|
|
|
else
|
|
|
|
|
c = strchr (buf, '\0');
|
|
|
|
|
for (idx = 0; remote_fio_func_map[idx].name; ++idx)
|
|
|
|
|
if (!strcmp (remote_fio_func_map[idx].name, buf))
|
|
|
|
|
break;
|
Eliminate catch_exceptions/catch_exceptions_with_msg
This patch gets rid of catch_exceptions / catch_exceptions_with_msg.
The latter is done mostly by getting rid of the three remaining
vestigial libgdb wrapper functions, which are really pointless
nowadays. This results in a good number of simplifications.
(I checked that Insight doesn't use those functions.)
The gdb.mi/mi-pthreads.exp change is necessary because this actually
fixes a bug, IMO -- the patch stops MI's -thread-select causing output
on the CLI stream.
I.e., before:
-thread-select 123456789
&"Thread ID 123456789 not known.\n"
^error,msg="Thread ID 123456789 not known."
(gdb)
After:
-thread-select 123456789
^error,msg="Thread ID 123456789 not known."
(gdb)
gdb/ChangeLog
2017-10-10 Pedro Alves <palves@redhat.com>
Tom Tromey <tom@tromey.com>
* breakpoint.c (struct captured_breakpoint_query_args)
(do_captured_breakpoint_query, gdb_breakpoint_query): Delete.
(print_breakpoint): New.
* breakpoint.h (print_breakpoint): Declare.
* common/common-exceptions.h (enum return_reason): Remove
references to catch_exceptions.
* exceptions.c (catch_exceptions, catch_exceptions_with_msg):
Delete.
* exceptions.h (catch_exceptions_ftype, catch_exceptions)
(catch_exception_ftype, catch_exceptions_with_msg): Delete.
* gdb.h: Delete.
* gdbthread.h (thread_select): Declare.
* mi/mi-cmd-break.c: Don't include gdb.h.
(breakpoint_notify): Use print_breakpoint.
* mi/mi-cmd-catch.c: Don't include gdb.h.
* mi/mi-interp.c: Don't include gdb.h.
(mi_print_breakpoint_for_event): New.
(mi_breakpoint_created, mi_breakpoint_modified): Use
mi_print_breakpoint_for_event.
* mi/mi-main.c: Don't include gdb.h.
(mi_cmd_thread_select): Parse the global thread ID here. Use
thread_select instead of gdb_thread_select.
(mi_cmd_thread_list_ids): Output "thread-ids" tuple here instead
of using gdb_list_thread_ids.
* remote-fileio.c (do_remote_fileio_request): Change type. Reply
FILEIO_ENOSYS here.
(remote_fileio_request): Use TRY/CATCH instead of
catch_exceptions.
* symfile-mem.c (struct symbol_file_add_from_memory_args)
(symbol_file_add_from_memory_wrapper): Delete.
(add_vsyscall_page): Use TRY/CATCH instead of catch_exceptions.
* thread.c: Don't include gdb.h.
(do_captured_list_thread_ids, gdb_list_thread_ids): Delete.
(thread_alive): Use thread_select.
(do_captured_thread_select): Delete, parts salvaged as ...
(thread_select): ... this new function.
(gdb_thread_select): Delete.
gdb/testsuite/ChangeLog
2017-10-10 Pedro Alves <palves@redhat.com>
* gdb.mi/mi-pthreads.exp (check_mi_thread_command_set): Don't
expect CLI output.
2017-10-10 17:45:51 +02:00
|
|
|
|
if (!remote_fio_func_map[idx].name)
|
|
|
|
|
remote_fileio_reply (-1, FILEIO_ENOSYS);
|
|
|
|
|
else
|
|
|
|
|
remote_fio_func_map[idx].func (c);
|
2003-06-10 16:37:04 +02:00
|
|
|
|
}
|
|
|
|
|
|
2006-06-08 21:08:22 +02:00
|
|
|
|
/* Close any open descriptors, and reinitialize the file mapping. */
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
remote_fileio_reset (void)
|
|
|
|
|
{
|
|
|
|
|
int ix;
|
|
|
|
|
|
|
|
|
|
for (ix = 0; ix != remote_fio_data.fd_map_size; ix++)
|
|
|
|
|
{
|
|
|
|
|
int fd = remote_fio_data.fd_map[ix];
|
|
|
|
|
|
|
|
|
|
if (fd >= 0)
|
|
|
|
|
close (fd);
|
|
|
|
|
}
|
|
|
|
|
if (remote_fio_data.fd_map)
|
|
|
|
|
{
|
2008-09-14 01:37:05 +02:00
|
|
|
|
xfree (remote_fio_data.fd_map);
|
2006-06-08 21:08:22 +02:00
|
|
|
|
remote_fio_data.fd_map = NULL;
|
|
|
|
|
remote_fio_data.fd_map_size = 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2011-01-10 21:38:51 +01:00
|
|
|
|
/* Handle a file I/O request. BUF points to the packet containing the
|
|
|
|
|
request. CTRLC_PENDING_P should be nonzero if the target has not
|
2009-11-13 23:36:30 +01:00
|
|
|
|
acknowledged the Ctrl-C sent asynchronously earlier. */
|
|
|
|
|
|
2003-06-10 16:37:04 +02:00
|
|
|
|
void
|
2009-11-13 23:36:30 +01:00
|
|
|
|
remote_fileio_request (char *buf, int ctrlc_pending_p)
|
2003-06-10 16:37:04 +02:00
|
|
|
|
{
|
gdb/remote-fileio.c: Eliminate custom SIGINT signal handler
... and fix Ctrl-C races.
The current remote-fileio.c SIGINT/EINTR code can lose Ctrl-C --
there's a period where SIG_IGN is installed as signal handler, for
example.
Since:
- remote.c no longer installs a custom SIGINT handler;
- The current remote-fileio.c SIGINT handler is basically the same as
the default SIGINT handler (event-top.c:handle_sigint), in
principle, except that instead of setting the quit flag, it sets a
separate flag.
I think we should be able to completely remove the remote-fileio.c
SIGINT handler, and centralize on the quit flag, thus fixing the
Ctrl-C race.
gdb/ChangeLog:
yyyy-mm-dd Pedro Alves <palves@redhat.com>
* remote-fileio.c (remote_fio_ctrl_c_flag, remote_fio_sa)
(remote_fio_osa)
(remote_fio_ofunc, remote_fileio_sig_init, remote_fileio_sig_set)
(remote_fileio_sig_exit, remote_fileio_ctrl_c_signal_handler):
Delete.
(remote_fileio_o_quit_handler): New global.
(remote_fileio_quit_handler): New function.
(remote_fileio_reply): Check the quit flag instead of the custom
'remote_fio_ctrl_c_flag' flag. Restore the quit handler instead
of changing the SIGINT handler.
(do_remote_fileio_request): Override the quit handler instead of
changing the SIGINT handler.
2016-06-01 17:34:49 +02:00
|
|
|
|
/* Save the previous quit handler, so we can restore it. No need
|
|
|
|
|
for a cleanup since we catch all exceptions below. Note that the
|
|
|
|
|
quit handler is also restored by remote_fileio_reply just before
|
|
|
|
|
pushing a packet. */
|
|
|
|
|
remote_fileio_o_quit_handler = quit_handler;
|
2003-06-10 16:37:04 +02:00
|
|
|
|
|
2009-11-13 23:36:30 +01:00
|
|
|
|
if (ctrlc_pending_p)
|
2003-06-10 16:37:04 +02:00
|
|
|
|
{
|
2009-11-13 23:36:30 +01:00
|
|
|
|
/* If the target hasn't responded to the Ctrl-C sent
|
|
|
|
|
asynchronously earlier, take this opportunity to send the
|
|
|
|
|
Ctrl-C synchronously. */
|
gdb/remote-fileio.c: Eliminate custom SIGINT signal handler
... and fix Ctrl-C races.
The current remote-fileio.c SIGINT/EINTR code can lose Ctrl-C --
there's a period where SIG_IGN is installed as signal handler, for
example.
Since:
- remote.c no longer installs a custom SIGINT handler;
- The current remote-fileio.c SIGINT handler is basically the same as
the default SIGINT handler (event-top.c:handle_sigint), in
principle, except that instead of setting the quit flag, it sets a
separate flag.
I think we should be able to completely remove the remote-fileio.c
SIGINT handler, and centralize on the quit flag, thus fixing the
Ctrl-C race.
gdb/ChangeLog:
yyyy-mm-dd Pedro Alves <palves@redhat.com>
* remote-fileio.c (remote_fio_ctrl_c_flag, remote_fio_sa)
(remote_fio_osa)
(remote_fio_ofunc, remote_fileio_sig_init, remote_fileio_sig_set)
(remote_fileio_sig_exit, remote_fileio_ctrl_c_signal_handler):
Delete.
(remote_fileio_o_quit_handler): New global.
(remote_fileio_quit_handler): New function.
(remote_fileio_reply): Check the quit flag instead of the custom
'remote_fio_ctrl_c_flag' flag. Restore the quit handler instead
of changing the SIGINT handler.
(do_remote_fileio_request): Override the quit handler instead of
changing the SIGINT handler.
2016-06-01 17:34:49 +02:00
|
|
|
|
set_quit_flag ();
|
2009-11-13 23:36:30 +01:00
|
|
|
|
remote_fileio_reply (-1, FILEIO_EINTR);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
Eliminate catch_exceptions/catch_exceptions_with_msg
This patch gets rid of catch_exceptions / catch_exceptions_with_msg.
The latter is done mostly by getting rid of the three remaining
vestigial libgdb wrapper functions, which are really pointless
nowadays. This results in a good number of simplifications.
(I checked that Insight doesn't use those functions.)
The gdb.mi/mi-pthreads.exp change is necessary because this actually
fixes a bug, IMO -- the patch stops MI's -thread-select causing output
on the CLI stream.
I.e., before:
-thread-select 123456789
&"Thread ID 123456789 not known.\n"
^error,msg="Thread ID 123456789 not known."
(gdb)
After:
-thread-select 123456789
^error,msg="Thread ID 123456789 not known."
(gdb)
gdb/ChangeLog
2017-10-10 Pedro Alves <palves@redhat.com>
Tom Tromey <tom@tromey.com>
* breakpoint.c (struct captured_breakpoint_query_args)
(do_captured_breakpoint_query, gdb_breakpoint_query): Delete.
(print_breakpoint): New.
* breakpoint.h (print_breakpoint): Declare.
* common/common-exceptions.h (enum return_reason): Remove
references to catch_exceptions.
* exceptions.c (catch_exceptions, catch_exceptions_with_msg):
Delete.
* exceptions.h (catch_exceptions_ftype, catch_exceptions)
(catch_exception_ftype, catch_exceptions_with_msg): Delete.
* gdb.h: Delete.
* gdbthread.h (thread_select): Declare.
* mi/mi-cmd-break.c: Don't include gdb.h.
(breakpoint_notify): Use print_breakpoint.
* mi/mi-cmd-catch.c: Don't include gdb.h.
* mi/mi-interp.c: Don't include gdb.h.
(mi_print_breakpoint_for_event): New.
(mi_breakpoint_created, mi_breakpoint_modified): Use
mi_print_breakpoint_for_event.
* mi/mi-main.c: Don't include gdb.h.
(mi_cmd_thread_select): Parse the global thread ID here. Use
thread_select instead of gdb_thread_select.
(mi_cmd_thread_list_ids): Output "thread-ids" tuple here instead
of using gdb_list_thread_ids.
* remote-fileio.c (do_remote_fileio_request): Change type. Reply
FILEIO_ENOSYS here.
(remote_fileio_request): Use TRY/CATCH instead of
catch_exceptions.
* symfile-mem.c (struct symbol_file_add_from_memory_args)
(symbol_file_add_from_memory_wrapper): Delete.
(add_vsyscall_page): Use TRY/CATCH instead of catch_exceptions.
* thread.c: Don't include gdb.h.
(do_captured_list_thread_ids, gdb_list_thread_ids): Delete.
(thread_alive): Use thread_select.
(do_captured_thread_select): Delete, parts salvaged as ...
(thread_select): ... this new function.
(gdb_thread_select): Delete.
gdb/testsuite/ChangeLog
2017-10-10 Pedro Alves <palves@redhat.com>
* gdb.mi/mi-pthreads.exp (check_mi_thread_command_set): Don't
expect CLI output.
2017-10-10 17:45:51 +02:00
|
|
|
|
TRY
|
2009-11-13 23:36:30 +01:00
|
|
|
|
{
|
Eliminate catch_exceptions/catch_exceptions_with_msg
This patch gets rid of catch_exceptions / catch_exceptions_with_msg.
The latter is done mostly by getting rid of the three remaining
vestigial libgdb wrapper functions, which are really pointless
nowadays. This results in a good number of simplifications.
(I checked that Insight doesn't use those functions.)
The gdb.mi/mi-pthreads.exp change is necessary because this actually
fixes a bug, IMO -- the patch stops MI's -thread-select causing output
on the CLI stream.
I.e., before:
-thread-select 123456789
&"Thread ID 123456789 not known.\n"
^error,msg="Thread ID 123456789 not known."
(gdb)
After:
-thread-select 123456789
^error,msg="Thread ID 123456789 not known."
(gdb)
gdb/ChangeLog
2017-10-10 Pedro Alves <palves@redhat.com>
Tom Tromey <tom@tromey.com>
* breakpoint.c (struct captured_breakpoint_query_args)
(do_captured_breakpoint_query, gdb_breakpoint_query): Delete.
(print_breakpoint): New.
* breakpoint.h (print_breakpoint): Declare.
* common/common-exceptions.h (enum return_reason): Remove
references to catch_exceptions.
* exceptions.c (catch_exceptions, catch_exceptions_with_msg):
Delete.
* exceptions.h (catch_exceptions_ftype, catch_exceptions)
(catch_exception_ftype, catch_exceptions_with_msg): Delete.
* gdb.h: Delete.
* gdbthread.h (thread_select): Declare.
* mi/mi-cmd-break.c: Don't include gdb.h.
(breakpoint_notify): Use print_breakpoint.
* mi/mi-cmd-catch.c: Don't include gdb.h.
* mi/mi-interp.c: Don't include gdb.h.
(mi_print_breakpoint_for_event): New.
(mi_breakpoint_created, mi_breakpoint_modified): Use
mi_print_breakpoint_for_event.
* mi/mi-main.c: Don't include gdb.h.
(mi_cmd_thread_select): Parse the global thread ID here. Use
thread_select instead of gdb_thread_select.
(mi_cmd_thread_list_ids): Output "thread-ids" tuple here instead
of using gdb_list_thread_ids.
* remote-fileio.c (do_remote_fileio_request): Change type. Reply
FILEIO_ENOSYS here.
(remote_fileio_request): Use TRY/CATCH instead of
catch_exceptions.
* symfile-mem.c (struct symbol_file_add_from_memory_args)
(symbol_file_add_from_memory_wrapper): Delete.
(add_vsyscall_page): Use TRY/CATCH instead of catch_exceptions.
* thread.c: Don't include gdb.h.
(do_captured_list_thread_ids, gdb_list_thread_ids): Delete.
(thread_alive): Use thread_select.
(do_captured_thread_select): Delete, parts salvaged as ...
(thread_select): ... this new function.
(gdb_thread_select): Delete.
gdb/testsuite/ChangeLog
2017-10-10 Pedro Alves <palves@redhat.com>
* gdb.mi/mi-pthreads.exp (check_mi_thread_command_set): Don't
expect CLI output.
2017-10-10 17:45:51 +02:00
|
|
|
|
do_remote_fileio_request (buf);
|
|
|
|
|
}
|
|
|
|
|
CATCH (ex, RETURN_MASK_ALL)
|
|
|
|
|
{
|
|
|
|
|
if (ex.reason == RETURN_QUIT)
|
|
|
|
|
remote_fileio_reply (-1, FILEIO_EINTR);
|
|
|
|
|
else
|
|
|
|
|
remote_fileio_reply (-1, FILEIO_EIO);
|
2009-11-13 23:36:30 +01:00
|
|
|
|
}
|
Eliminate catch_exceptions/catch_exceptions_with_msg
This patch gets rid of catch_exceptions / catch_exceptions_with_msg.
The latter is done mostly by getting rid of the three remaining
vestigial libgdb wrapper functions, which are really pointless
nowadays. This results in a good number of simplifications.
(I checked that Insight doesn't use those functions.)
The gdb.mi/mi-pthreads.exp change is necessary because this actually
fixes a bug, IMO -- the patch stops MI's -thread-select causing output
on the CLI stream.
I.e., before:
-thread-select 123456789
&"Thread ID 123456789 not known.\n"
^error,msg="Thread ID 123456789 not known."
(gdb)
After:
-thread-select 123456789
^error,msg="Thread ID 123456789 not known."
(gdb)
gdb/ChangeLog
2017-10-10 Pedro Alves <palves@redhat.com>
Tom Tromey <tom@tromey.com>
* breakpoint.c (struct captured_breakpoint_query_args)
(do_captured_breakpoint_query, gdb_breakpoint_query): Delete.
(print_breakpoint): New.
* breakpoint.h (print_breakpoint): Declare.
* common/common-exceptions.h (enum return_reason): Remove
references to catch_exceptions.
* exceptions.c (catch_exceptions, catch_exceptions_with_msg):
Delete.
* exceptions.h (catch_exceptions_ftype, catch_exceptions)
(catch_exception_ftype, catch_exceptions_with_msg): Delete.
* gdb.h: Delete.
* gdbthread.h (thread_select): Declare.
* mi/mi-cmd-break.c: Don't include gdb.h.
(breakpoint_notify): Use print_breakpoint.
* mi/mi-cmd-catch.c: Don't include gdb.h.
* mi/mi-interp.c: Don't include gdb.h.
(mi_print_breakpoint_for_event): New.
(mi_breakpoint_created, mi_breakpoint_modified): Use
mi_print_breakpoint_for_event.
* mi/mi-main.c: Don't include gdb.h.
(mi_cmd_thread_select): Parse the global thread ID here. Use
thread_select instead of gdb_thread_select.
(mi_cmd_thread_list_ids): Output "thread-ids" tuple here instead
of using gdb_list_thread_ids.
* remote-fileio.c (do_remote_fileio_request): Change type. Reply
FILEIO_ENOSYS here.
(remote_fileio_request): Use TRY/CATCH instead of
catch_exceptions.
* symfile-mem.c (struct symbol_file_add_from_memory_args)
(symbol_file_add_from_memory_wrapper): Delete.
(add_vsyscall_page): Use TRY/CATCH instead of catch_exceptions.
* thread.c: Don't include gdb.h.
(do_captured_list_thread_ids, gdb_list_thread_ids): Delete.
(thread_alive): Use thread_select.
(do_captured_thread_select): Delete, parts salvaged as ...
(thread_select): ... this new function.
(gdb_thread_select): Delete.
gdb/testsuite/ChangeLog
2017-10-10 Pedro Alves <palves@redhat.com>
* gdb.mi/mi-pthreads.exp (check_mi_thread_command_set): Don't
expect CLI output.
2017-10-10 17:45:51 +02:00
|
|
|
|
END_CATCH
|
2003-06-10 16:37:04 +02:00
|
|
|
|
}
|
|
|
|
|
|
gdb/remote-fileio.c: Eliminate custom SIGINT signal handler
... and fix Ctrl-C races.
The current remote-fileio.c SIGINT/EINTR code can lose Ctrl-C --
there's a period where SIG_IGN is installed as signal handler, for
example.
Since:
- remote.c no longer installs a custom SIGINT handler;
- The current remote-fileio.c SIGINT handler is basically the same as
the default SIGINT handler (event-top.c:handle_sigint), in
principle, except that instead of setting the quit flag, it sets a
separate flag.
I think we should be able to completely remove the remote-fileio.c
SIGINT handler, and centralize on the quit flag, thus fixing the
Ctrl-C race.
gdb/ChangeLog:
yyyy-mm-dd Pedro Alves <palves@redhat.com>
* remote-fileio.c (remote_fio_ctrl_c_flag, remote_fio_sa)
(remote_fio_osa)
(remote_fio_ofunc, remote_fileio_sig_init, remote_fileio_sig_set)
(remote_fileio_sig_exit, remote_fileio_ctrl_c_signal_handler):
Delete.
(remote_fileio_o_quit_handler): New global.
(remote_fileio_quit_handler): New function.
(remote_fileio_reply): Check the quit flag instead of the custom
'remote_fio_ctrl_c_flag' flag. Restore the quit handler instead
of changing the SIGINT handler.
(do_remote_fileio_request): Override the quit handler instead of
changing the SIGINT handler.
2016-06-01 17:34:49 +02:00
|
|
|
|
quit_handler = remote_fileio_o_quit_handler;
|
2003-06-10 16:37:04 +02:00
|
|
|
|
}
|
2015-03-11 18:53:57 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Unpack an fio_uint_t. */
|
|
|
|
|
|
|
|
|
|
static unsigned int
|
|
|
|
|
remote_fileio_to_host_uint (fio_uint_t fnum)
|
|
|
|
|
{
|
|
|
|
|
return extract_unsigned_integer ((gdb_byte *) fnum, 4,
|
|
|
|
|
BFD_ENDIAN_BIG);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Unpack an fio_ulong_t. */
|
|
|
|
|
|
|
|
|
|
static ULONGEST
|
|
|
|
|
remote_fileio_to_host_ulong (fio_ulong_t fnum)
|
|
|
|
|
{
|
|
|
|
|
return extract_unsigned_integer ((gdb_byte *) fnum, 8,
|
|
|
|
|
BFD_ENDIAN_BIG);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Unpack an fio_mode_t. */
|
|
|
|
|
|
|
|
|
|
static mode_t
|
|
|
|
|
remote_fileio_to_host_mode (fio_mode_t fnum)
|
|
|
|
|
{
|
|
|
|
|
return remote_fileio_mode_to_host (remote_fileio_to_host_uint (fnum),
|
|
|
|
|
0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Unpack an fio_time_t. */
|
|
|
|
|
|
|
|
|
|
static time_t
|
|
|
|
|
remote_fileio_to_host_time (fio_time_t fnum)
|
|
|
|
|
{
|
|
|
|
|
return remote_fileio_to_host_uint (fnum);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* See remote-fileio.h. */
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
remote_fileio_to_host_stat (struct fio_stat *fst, struct stat *st)
|
|
|
|
|
{
|
|
|
|
|
memset (st, 0, sizeof (struct stat));
|
|
|
|
|
|
|
|
|
|
st->st_dev = remote_fileio_to_host_uint (fst->fst_dev);
|
|
|
|
|
st->st_ino = remote_fileio_to_host_uint (fst->fst_ino);
|
|
|
|
|
st->st_mode = remote_fileio_to_host_mode (fst->fst_mode);
|
|
|
|
|
st->st_nlink = remote_fileio_to_host_uint (fst->fst_nlink);
|
|
|
|
|
st->st_uid = remote_fileio_to_host_uint (fst->fst_uid);
|
|
|
|
|
st->st_gid = remote_fileio_to_host_uint (fst->fst_gid);
|
|
|
|
|
st->st_rdev = remote_fileio_to_host_uint (fst->fst_rdev);
|
|
|
|
|
st->st_size = remote_fileio_to_host_ulong (fst->fst_size);
|
|
|
|
|
#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
|
|
|
|
|
st->st_blksize = remote_fileio_to_host_ulong (fst->fst_blksize);
|
|
|
|
|
#endif
|
|
|
|
|
#if HAVE_STRUCT_STAT_ST_BLOCKS
|
|
|
|
|
st->st_blocks = remote_fileio_to_host_ulong (fst->fst_blocks);
|
|
|
|
|
#endif
|
|
|
|
|
st->st_atime = remote_fileio_to_host_time (fst->fst_atime);
|
|
|
|
|
st->st_mtime = remote_fileio_to_host_time (fst->fst_mtime);
|
|
|
|
|
st->st_ctime = remote_fileio_to_host_time (fst->fst_ctime);
|
|
|
|
|
}
|
|
|
|
|
|
2003-06-10 16:37:04 +02:00
|
|
|
|
|
|
|
|
|
static void
|
2017-09-13 02:38:19 +02:00
|
|
|
|
set_system_call_allowed (const char *args, int from_tty)
|
2003-06-10 16:37:04 +02:00
|
|
|
|
{
|
|
|
|
|
if (args)
|
|
|
|
|
{
|
|
|
|
|
char *arg_end;
|
|
|
|
|
int val = strtoul (args, &arg_end, 10);
|
2010-05-16 23:11:14 +02:00
|
|
|
|
|
2003-06-10 16:37:04 +02:00
|
|
|
|
if (*args && *arg_end == '\0')
|
|
|
|
|
{
|
|
|
|
|
remote_fio_system_call_allowed = !!val;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
2005-02-10 Andrew Cagney <cagney@gnu.org>
Mark up all error and warning messages.
* ada-lang.c, amd64-tdep.c, arch-utils.c, breakpoint.c: Update.
* bsd-kvm.c, bsd-uthread.c, coff-solib.h, coffread.c: Update.
* core-aout.c, core-regset.c, corefile.c, corelow.c: Update.
* cp-abi.c, cp-support.c, cp-valprint.c, cris-tdep.c: Update.
* dbxread.c, demangle.c, doublest.c, dsrec.c: Update.
* dve3900-rom.c, dwarf2expr.c, dwarf2loc.c: Update.
* dwarf2read.c, dwarfread.c, elfread.c, eval.c: Update.
* event-top.c, exec.c, expprint.c, f-lang.c: Update.
* f-typeprint.c, f-valprint.c, fbsd-nat.c, findvar.c: Update.
* frame.c, frv-linux-tdep.c, gcore.c, gdbtypes.c: Update.
* gnu-nat.c, gnu-v2-abi.c, gnu-v3-abi.c, go32-nat.c: Update.
* hpacc-abi.c, hppa-hpux-nat.c, hppa-hpux-tdep.c: Update.
* hppa-linux-nat.c, hppa-linux-tdep.c, hppa-tdep.c: Update.
* hpread.c, hpux-thread.c, i386-linux-nat.c: Update.
* i386-linux-tdep.c, i386-tdep.c, i386bsd-nat.c: Update.
* i386gnu-nat.c, i387-tdep.c, ia64-linux-nat.c: Update.
* ia64-tdep.c, inf-child.c, inf-ptrace.c, inf-ttrace.c: Update.
* infcall.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Update.
* inftarg.c, interps.c, irix5-nat.c, jv-lang.c: Update.
* kod-cisco.c, kod.c, language.c, libunwind-frame.c: Update.
* linespec.c, linux-nat.c, linux-thread-db.c, m2-lang.c: Update.
* m32r-rom.c, m68hc11-tdep.c, m68k-tdep.c: Update.
* m68klinux-nat.c, macrocmd.c, macroexp.c, main.c: Update.
* maint.c, mdebugread.c, mem-break.c, memattr.c: Update.
* mips-linux-tdep.c, mips-tdep.c, mipsread.c, monitor.c: Update.
* nlmread.c, nto-procfs.c, objc-lang.c, objfiles.c: Update.
* observer.c, ocd.c, p-lang.c, p-typeprint.c: Update.
* p-valprint.c, pa64solib.c, parse.c, ppc-linux-tdep.c: Update.
* ppcnbsd-tdep.c, printcmd.c, procfs.c, remote-e7000.c: Update.
* remote-fileio.c, remote-m32r-sdi.c, remote-rdi.c: Update.
* remote-rdp.c, remote-sim.c, remote-st.c: Update.
* remote-utils.c, remote-utils.h, remote.c: Update.
* rom68k-rom.c, rs6000-nat.c, s390-tdep.c, scm-lang.c: Update.
* ser-e7kpc.c, ser-tcp.c, ser-unix.c, sh-tdep.c: Update.
* sh3-rom.c, shnbsd-tdep.c, sol-thread.c, solib-aix5.c: Update.
* solib-frv.c, solib-irix.c, solib-osf.c, solib-pa64.c: Update.
* solib-som.c, solib-sunos.c, solib-svr4.c, solib.c: Update.
* somread.c, somsolib.c, source.c, stabsread.c: Update.
* stack.c, std-regs.c, symfile-mem.c, symfile.c: Update.
* symmisc.c, symtab.c, target.c, thread.c, top.c: Update.
* tracepoint.c, trad-frame.c, typeprint.c, utils.c: Update.
* uw-thread.c, valarith.c, valops.c, valprint.c: Update.
* value.c, varobj.c, version.in, win32-nat.c, wince.c: Update.
* xcoffread.c, xcoffsolib.c, cli/cli-cmds.c: Update.
* cli/cli-decode.c, cli/cli-dump.c, cli/cli-logging.c: Update.
* cli/cli-script.c, cli/cli-setshow.c, mi/mi-cmd-break.c: Update.
* mi/mi-cmd-disas.c, mi/mi-cmd-env.c, mi/mi-cmd-file.c: Update.
* mi/mi-cmd-stack.c, mi/mi-cmd-var.c, mi/mi-getopt.c: Update.
* mi/mi-symbol-cmds.c, tui/tui-layout.c, tui/tui-stack.c: Update.
* tui/tui-win.c: Update.
2005-02-11 05:06:14 +01:00
|
|
|
|
error (_("Illegal argument for \"set remote system-call-allowed\" command"));
|
2003-06-10 16:37:04 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
2017-09-13 02:38:19 +02:00
|
|
|
|
show_system_call_allowed (const char *args, int from_tty)
|
2003-06-10 16:37:04 +02:00
|
|
|
|
{
|
|
|
|
|
if (args)
|
2011-01-05 23:22:53 +01:00
|
|
|
|
error (_("Garbage after \"show remote "
|
|
|
|
|
"system-call-allowed\" command: `%s'"), args);
|
2003-06-10 16:37:04 +02:00
|
|
|
|
printf_unfiltered ("Calling host system(3) call from target is %sallowed\n",
|
|
|
|
|
remote_fio_system_call_allowed ? "" : "not ");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
initialize_remote_fileio (struct cmd_list_element *remote_set_cmdlist,
|
|
|
|
|
struct cmd_list_element *remote_show_cmdlist)
|
|
|
|
|
{
|
|
|
|
|
add_cmd ("system-call-allowed", no_class,
|
|
|
|
|
set_system_call_allowed,
|
2005-02-14 Andrew Cagney <cagney@gnu.org>
Mark up add_cmd.
* arch-utils.c, avr-tdep.c, breakpoint.c, corefile.c: Update.
* cp-abi.c, cp-namespace.c, cp-support.c, dummy-frame.c: Update.
* exec.c, gnu-nat.c, go32-nat.c, hppa-tdep.c, infcmd.c: Update.
* infrun.c, interps.c, macrocmd.c, maint.c, memattr.c: Update.
* mips-tdep.c, ocd.c, osabi.c, printcmd.c, regcache.c: Update.
* reggroups.c, remote-fileio.c, remote-rdi.c, remote.c: Update.
* sol-thread.c, source.c, stack.c, symfile-mem.c: Update.
* symfile.c, thread.c, tracepoint.c, valprint.c, value.c: Update.
* win32-nat.c, cli/cli-cmds.c, cli/cli-dump.c: Update.
* cli/cli-logging.c, tui/tui-regs.c: Update.
2005-02-14 19:10:11 +01:00
|
|
|
|
_("Set if the host system(3) call is allowed for the target."),
|
2003-06-10 16:37:04 +02:00
|
|
|
|
&remote_set_cmdlist);
|
|
|
|
|
add_cmd ("system-call-allowed", no_class,
|
|
|
|
|
show_system_call_allowed,
|
2005-02-14 Andrew Cagney <cagney@gnu.org>
Mark up add_cmd.
* arch-utils.c, avr-tdep.c, breakpoint.c, corefile.c: Update.
* cp-abi.c, cp-namespace.c, cp-support.c, dummy-frame.c: Update.
* exec.c, gnu-nat.c, go32-nat.c, hppa-tdep.c, infcmd.c: Update.
* infrun.c, interps.c, macrocmd.c, maint.c, memattr.c: Update.
* mips-tdep.c, ocd.c, osabi.c, printcmd.c, regcache.c: Update.
* reggroups.c, remote-fileio.c, remote-rdi.c, remote.c: Update.
* sol-thread.c, source.c, stack.c, symfile-mem.c: Update.
* symfile.c, thread.c, tracepoint.c, valprint.c, value.c: Update.
* win32-nat.c, cli/cli-cmds.c, cli/cli-dump.c: Update.
* cli/cli-logging.c, tui/tui-regs.c: Update.
2005-02-14 19:10:11 +01:00
|
|
|
|
_("Show if the host system(3) call is allowed for the target."),
|
2003-06-10 16:37:04 +02:00
|
|
|
|
&remote_show_cmdlist);
|
|
|
|
|
}
|