From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 23529 invoked by alias); 31 Jan 2018 15:52:30 -0000 Mailing-List: contact archer-commits-help@sourceware.org; run by ezmlm Sender: Precedence: bulk List-Post: List-Help: List-Subscribe: Received: (qmail 23510 invoked by uid 440); 31 Jan 2018 15:52:29 -0000 Date: Wed, 31 Jan 2018 15:52:00 -0000 Message-ID: <20180131155229.23482.qmail@sourceware.org> From: scox@sourceware.org To: archer-commits@sourceware.org Subject: [SCM] scox/gdbserver-multi-client: Replace global state access macros with member references. X-Git-Refname: refs/heads/scox/gdbserver-multi-client X-Git-Reftype: branch X-Git-Oldrev: 975a0cde0cc8190d62f6eebb227c23e49e62602e X-Git-Newrev: 996acadf2d184ccab20ee67a861d6ffe2d096b94 X-SW-Source: 2018-q1/txt/msg00002.txt.bz2 List-Id: The branch, scox/gdbserver-multi-client has been updated via 996acadf2d184ccab20ee67a861d6ffe2d096b94 (commit) from 975a0cde0cc8190d62f6eebb227c23e49e62602e (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email. - Log ----------------------------------------------------------------- commit 996acadf2d184ccab20ee67a861d6ffe2d096b94 Author: Stan Cox Date: Wed Jan 31 10:50:19 2018 -0500 Replace global state access macros with member references. ----------------------------------------------------------------------- Summary of changes: gdb/gdbserver/ChangeLog | 5 + gdb/gdbserver/fork-child.c | 13 +- gdb/gdbserver/gdbthread.h | 12 +- gdb/gdbserver/inferiors.c | 61 ++- gdb/gdbserver/inferiors.h | 8 +- gdb/gdbserver/linux-aarch32-low.c | 2 +- gdb/gdbserver/linux-aarch64-low.c | 16 +- gdb/gdbserver/linux-arm-low.c | 14 +- gdb/gdbserver/linux-crisv32-low.c | 8 +- gdb/gdbserver/linux-low.c | 374 +++++++++++-------- gdb/gdbserver/linux-low.h | 2 +- gdb/gdbserver/linux-mips-low.c | 8 +- gdb/gdbserver/linux-ppc-low.c | 6 +- gdb/gdbserver/linux-s390-low.c | 10 +- gdb/gdbserver/linux-tile-low.c | 2 +- gdb/gdbserver/linux-x86-low.c | 26 +- gdb/gdbserver/lynx-low.c | 16 +- gdb/gdbserver/mem-break.c | 30 +- gdb/gdbserver/notif.c | 7 +- gdb/gdbserver/nto-low.c | 20 +- gdb/gdbserver/proc-service.c | 13 +- gdb/gdbserver/regcache.c | 18 +- gdb/gdbserver/remote-utils.c | 179 +++++---- gdb/gdbserver/server.c | 737 ++++++++++++++++++++----------------- gdb/gdbserver/server.h | 129 +++----- gdb/gdbserver/spu-low.c | 8 +- gdb/gdbserver/target.c | 33 +- gdb/gdbserver/tdesc.c | 4 +- gdb/gdbserver/thread-db.c | 19 +- gdb/gdbserver/tracepoint.c | 15 +- gdb/gdbserver/win32-i386-low.c | 6 +- gdb/gdbserver/win32-low.c | 14 +- gdb/gnulib/import/error.c | 12 +- 33 files changed, 990 insertions(+), 837 deletions(-) First 500 lines of diff: diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index c86f4e0..feac55d 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,3 +1,8 @@ +2018-01-31 Stan Cox + + * server.h (client_state, server_state): Removed struct member + access macros. Changed all callers. + 2018-01-19 James Clarke * linux-low.c (handle_extended_wait): Surround call to diff --git a/gdb/gdbserver/fork-child.c b/gdb/gdbserver/fork-child.c index e00c788..74fa5e4 100644 --- a/gdb/gdbserver/fork-child.c +++ b/gdb/gdbserver/fork-child.c @@ -44,6 +44,8 @@ restore_old_foreground_pgrp (void) void prefork_hook (const char *args) { + client_state *cs = get_client_state(); + if (debug_threads) { debug_printf ("args: %s\n", args); @@ -57,7 +59,7 @@ prefork_hook (const char *args) /* Clear this so the backend doesn't get confused, thinking CONT_THREAD died, and it needs to resume all threads. */ - cont_thread = null_ptid; + cs->ss->cont_thread = null_ptid; } /* See nat/fork-inferior.h. */ @@ -97,6 +99,7 @@ void post_fork_inferior (int pid, const char *program) { #ifdef SIGTTOU + client_state *cs = get_client_state(); signal (SIGTTOU, SIG_IGN); signal (SIGTTIN, SIG_IGN); terminal_fd = fileno (stderr); @@ -106,10 +109,10 @@ post_fork_inferior (int pid, const char *program) #endif startup_inferior (pid, START_INFERIOR_TRAPS_EXPECTED, - &last_status, &last_ptid); - current_thread->last_resume_kind = resume_stop; - current_thread->last_waitstatus = last_status; - signal_pid = pid; + &cs->ss->last_status, &cs->ss->last_ptid); + cs->ss->current_thread->last_resume_kind = resume_stop; + cs->ss->current_thread->last_status = cs->ss->last_status; + cs->ss->signal_pid = pid; target_post_create_inferior (); fprintf (stderr, "Process %s created; pid = %d\n", program, pid); fflush (stderr); diff --git a/gdb/gdbserver/gdbthread.h b/gdb/gdbserver/gdbthread.h index 3cacb1c..c5bd117 100644 --- a/gdb/gdbserver/gdbthread.h +++ b/gdb/gdbserver/gdbthread.h @@ -39,7 +39,7 @@ struct thread_info enum resume_kind last_resume_kind; /* The last wait status reported for this thread. */ - struct target_waitstatus last_waitstatus; + struct target_waitstatus last_status; /* True if LAST_STATUS hasn't been reported to GDB yet. */ int status_pending_p; @@ -93,9 +93,9 @@ template static thread_info * find_thread (Func func) { - std::list::iterator next, cur = all_threads.begin (); + std::list::iterator next, cur = get_client_state()->ss->all_threads.begin (); - while (cur != all_threads.end ()) + while (cur != get_client_state()->ss->all_threads.end ()) { next = cur; next++; @@ -139,9 +139,9 @@ template static void for_each_thread (Func func) { - std::list::iterator next, cur = all_threads.begin (); + std::list::iterator next, cur = get_client_state()->ss->all_threads.begin (); - while (cur != all_threads.end ()) + while (cur != get_client_state()->ss->all_threads.end ()) { next = cur; next++; @@ -196,7 +196,7 @@ find_thread_in_random (Func func) } /* Get current thread ID (Linux task ID). */ -#define current_ptid (current_thread->id) +#define current_ptid (get_client_state()->ss->current_thread->id) /* Get the ptid of THREAD. */ diff --git a/gdb/gdbserver/inferiors.c b/gdb/gdbserver/inferiors.c index d9b56ad..c63f202 100644 --- a/gdb/gdbserver/inferiors.c +++ b/gdb/gdbserver/inferiors.c @@ -29,16 +29,17 @@ static const char *current_inferior_cwd = NULL; struct thread_info * add_thread (ptid_t thread_id, void *target_data) { + client_state *cs = get_client_state(); struct thread_info *new_thread = XCNEW (struct thread_info); new_thread->id = thread_id; new_thread->last_resume_kind = resume_continue; - new_thread->last_waitstatus.kind = TARGET_WAITKIND_IGNORE; + new_thread->last_status.kind = TARGET_WAITKIND_IGNORE; - all_threads.push_back (new_thread); + cs->ss->all_threads.push_back (new_thread); - if (current_thread == NULL) - current_thread = new_thread; + if (cs->ss->current_thread == NULL) + cs->ss->current_thread = new_thread; new_thread->target_data = target_data; @@ -50,8 +51,10 @@ add_thread (ptid_t thread_id, void *target_data) struct thread_info * get_first_thread (void) { - if (!all_threads.empty ()) - return all_threads.front (); + client_state *cs = get_client_state(); + + if (!cs->ss->all_threads.empty ()) + return cs->ss->all_threads.front (); else return NULL; } @@ -93,14 +96,16 @@ free_one_thread (thread_info *thread) void remove_thread (struct thread_info *thread) { + client_state *cs = get_client_state(); + if (thread->btrace != NULL) target_disable_btrace (thread->btrace); discard_queued_stop_replies (ptid_of (thread)); - all_threads.remove (thread); + cs->ss->all_threads.remove (thread); free_one_thread (thread); - if (current_thread == thread) - current_thread = NULL; + if (cs->ss->current_thread == thread) + cs->ss->current_thread = NULL; } void * @@ -124,20 +129,24 @@ set_thread_regcache_data (struct thread_info *thread, struct regcache *data) void clear_inferiors (void) { + client_state *cs = get_client_state(); + for_each_thread (free_one_thread); - all_threads.clear (); + cs->ss->all_threads.clear (); clear_dlls (); - current_thread = NULL; + cs->ss->current_thread = NULL; } struct process_info * add_process (int pid, int attached) { + client_state *cs = get_client_state(); + process_info *process = new process_info (pid, attached); - all_processes.push_back (process); + cs->ss->all_processes.push_back (process); return process; } @@ -149,10 +158,12 @@ add_process (int pid, int attached) void remove_process (struct process_info *process) { + client_state *cs = get_client_state(); + clear_symbol_cache (&process->symbol_cache); free_all_breakpoints (process); gdb_assert (find_thread_process (process) == NULL); - all_processes.remove (process); + cs->ss->all_processes.remove (process); delete process; } @@ -169,8 +180,10 @@ find_process_pid (int pid) process_info * get_first_process (void) { - if (!all_processes.empty ()) - return all_processes.front (); + client_state *cs = get_client_state(); + + if (!cs->ss->all_processes.empty ()) + return cs->ss->all_processes.front (); else return NULL; } @@ -205,20 +218,26 @@ get_thread_process (const struct thread_info *thread) struct process_info * current_process (void) { - gdb_assert (current_thread != NULL); - return get_thread_process (current_thread); + client_state *cs = get_client_state(); + + gdb_assert (cs->ss->current_thread != NULL); + return get_thread_process (cs->ss->current_thread); } static void do_restore_current_thread_cleanup (void *arg) { - current_thread = (struct thread_info *) arg; + client_state *cs = get_client_state(); + + cs->ss->current_thread = (struct thread_info *) arg; } struct cleanup * make_cleanup_restore_current_thread (void) { - return make_cleanup (do_restore_current_thread_cleanup, current_thread); + client_state *cs = get_client_state(); + + return make_cleanup (do_restore_current_thread_cleanup, cs->ss->current_thread); } /* See common/common-gdbthread.h. */ @@ -226,8 +245,10 @@ make_cleanup_restore_current_thread (void) void switch_to_thread (ptid_t ptid) { + client_state *cs = get_client_state(); + gdb_assert (ptid != minus_one_ptid); - current_thread = find_thread_ptid (ptid); + cs->ss->current_thread = find_thread_ptid (ptid); } /* See common/common-inferior.h. */ diff --git a/gdb/gdbserver/inferiors.h b/gdb/gdbserver/inferiors.h index 5753c67..7f149f5 100644 --- a/gdb/gdbserver/inferiors.h +++ b/gdb/gdbserver/inferiors.h @@ -91,9 +91,9 @@ template static void for_each_process (Func func) { - std::list::iterator next, cur = all_processes.begin (); + std::list::iterator next, cur = get_client_state()->ss->all_processes.begin (); - while (cur != all_processes.end ()) + while (cur != get_client_state()->ss->all_processes.end ()) { next = cur; next++; @@ -109,9 +109,9 @@ template static process_info * find_process (Func func) { - std::list::iterator next, cur = all_processes.begin (); + std::list::iterator next, cur = get_client_state()->ss->all_processes.begin (); - while (cur != all_processes.end ()) + while (cur != get_client_state()->ss->all_processes.end ()) { next = cur; next++; diff --git a/gdb/gdbserver/linux-aarch32-low.c b/gdb/gdbserver/linux-aarch32-low.c index 12c11a4..85b2d0d 100644 --- a/gdb/gdbserver/linux-aarch32-low.c +++ b/gdb/gdbserver/linux-aarch32-low.c @@ -171,7 +171,7 @@ struct regs_info regs_info_aarch32 = int arm_is_thumb_mode (void) { - struct regcache *regcache = get_thread_regcache (current_thread, 1); + struct regcache *regcache = get_thread_regcache (cs->ss->current_thread, 1); unsigned long cpsr; collect_register_by_name (regcache, "cpsr", &cpsr); diff --git a/gdb/gdbserver/linux-aarch64-low.c b/gdb/gdbserver/linux-aarch64-low.c index eccac4d..b382f4e 100644 --- a/gdb/gdbserver/linux-aarch64-low.c +++ b/gdb/gdbserver/linux-aarch64-low.c @@ -67,7 +67,7 @@ struct arch_process_info static int is_64bit_tdesc (void) { - struct regcache *regcache = get_thread_regcache (current_thread, 0); + struct regcache *regcache = get_thread_regcache (cs->ss->current_thread, 0); return register_size (regcache->tdesc, 0) == 8; } @@ -253,7 +253,7 @@ aarch64_insert_point (enum raw_bkpt_type type, CORE_ADDR addr, int ret; enum target_hw_bp_type targ_type; struct aarch64_debug_reg_state *state - = aarch64_get_debug_reg_state (pid_of (current_thread)); + = aarch64_get_debug_reg_state (pid_of (cs->ss->current_thread)); if (show_debug_regs) fprintf (stderr, "insert_point on entry (addr=0x%08lx, len=%d)\n", @@ -302,7 +302,7 @@ aarch64_remove_point (enum raw_bkpt_type type, CORE_ADDR addr, int ret; enum target_hw_bp_type targ_type; struct aarch64_debug_reg_state *state - = aarch64_get_debug_reg_state (pid_of (current_thread)); + = aarch64_get_debug_reg_state (pid_of (cs->ss->current_thread)); if (show_debug_regs) fprintf (stderr, "remove_point on entry (addr=0x%08lx, len=%d)\n", @@ -345,7 +345,7 @@ aarch64_stopped_data_address (void) int pid, i; struct aarch64_debug_reg_state *state; - pid = lwpid_of (current_thread); + pid = lwpid_of (cs->ss->current_thread); /* Get the siginfo. */ if (ptrace (PTRACE_GETSIGINFO, pid, NULL, &siginfo) != 0) @@ -357,7 +357,7 @@ aarch64_stopped_data_address (void) return (CORE_ADDR) 0; /* Check if the address matches any watched address. */ - state = aarch64_get_debug_reg_state (pid_of (current_thread)); + state = aarch64_get_debug_reg_state (pid_of (cs->ss->current_thread)); for (i = aarch64_num_wp_regs - 1; i >= 0; --i) { const unsigned int len = aarch64_watchpoint_length (state->dr_ctrl_wp[i]); @@ -473,7 +473,7 @@ aarch64_arch_setup (void) int is_elf64; int tid; - tid = lwpid_of (current_thread); + tid = lwpid_of (cs->ss->current_thread); is_elf64 = linux_pid_exe_is_elf_64_file (tid, &machine); @@ -482,7 +482,7 @@ aarch64_arch_setup (void) else current_process ()->tdesc = tdesc_arm_with_neon; - aarch64_linux_get_debug_reg_capacity (lwpid_of (current_thread)); + aarch64_linux_get_debug_reg_capacity (lwpid_of (cs->ss->current_thread)); } static struct regset_info aarch64_regsets[] = @@ -527,7 +527,7 @@ aarch64_regs_info (void) static int aarch64_supports_tracepoints (void) { - if (current_thread == NULL) + if (cs->ss->current_thread == NULL) return 1; else { diff --git a/gdb/gdbserver/linux-arm-low.c b/gdb/gdbserver/linux-arm-low.c index 6c2dcea..2bf687b 100644 --- a/gdb/gdbserver/linux-arm-low.c +++ b/gdb/gdbserver/linux-arm-low.c @@ -528,7 +528,7 @@ arm_insert_point (enum raw_bkpt_type type, CORE_ADDR addr, pts[i] = p; /* Only update the threads of the current process. */ - for_each_thread (current_thread->id.pid (), [&] (thread_info *thread) + for_each_thread (cs->ss->current_thread->id.pid (), [&] (thread_info *thread) { update_registers_callback (thread, watch, i); }); @@ -573,7 +573,7 @@ arm_remove_point (enum raw_bkpt_type type, CORE_ADDR addr, pts[i].control = arm_hwbp_control_disable (pts[i].control); /* Only update the threads of the current process. */ - for_each_thread (current_thread->id.pid (), [&] (thread_info *thread) + for_each_thread (cs->ss->current_thread->id.pid (), [&] (thread_info *thread) { update_registers_callback (thread, watch, i); }); @@ -589,7 +589,7 @@ arm_remove_point (enum raw_bkpt_type type, CORE_ADDR addr, static int arm_stopped_by_watchpoint (void) { - struct lwp_info *lwp = get_thread_lwp (current_thread); + struct lwp_info *lwp = get_thread_lwp (cs->ss->current_thread); siginfo_t siginfo; /* We must be able to set hardware watchpoints. */ @@ -598,7 +598,7 @@ arm_stopped_by_watchpoint (void) /* Retrieve siginfo. */ errno = 0; - ptrace (PTRACE_GETSIGINFO, lwpid_of (current_thread), 0, &siginfo); + ptrace (PTRACE_GETSIGINFO, lwpid_of (cs->ss->current_thread), 0, &siginfo); if (errno != 0) return 0; @@ -624,7 +624,7 @@ arm_stopped_by_watchpoint (void) static CORE_ADDR arm_stopped_data_address (void) { - struct lwp_info *lwp = get_thread_lwp (current_thread); + struct lwp_info *lwp = get_thread_lwp (cs->ss->current_thread); return lwp->arch_private->stopped_data_address; } @@ -872,7 +872,7 @@ arm_get_hwcap (unsigned long *valp) static const struct target_desc * arm_read_description (void) { - int pid = lwpid_of (current_thread); + int pid = lwpid_of (cs->ss->current_thread); unsigned long arm_hwcap = 0; /* Query hardware watchpoint/breakpoint capabilities. */ @@ -919,7 +919,7 @@ arm_read_description (void) static void arm_arch_setup (void) { - int tid = lwpid_of (current_thread); + int tid = lwpid_of (cs->ss->current_thread); int gpregs[18]; struct iovec iov; diff --git a/gdb/gdbserver/linux-crisv32-low.c b/gdb/gdbserver/linux-crisv32-low.c index 6eb8217..4158260 100644 --- a/gdb/gdbserver/linux-crisv32-low.c +++ b/gdb/gdbserver/linux-crisv32-low.c @@ -139,7 +139,7 @@ cris_insert_point (enum raw_bkpt_type type, CORE_ADDR addr, unsigned long ccs; struct regcache *regcache; - regcache = get_thread_regcache (current_thread, 1); + regcache = get_thread_regcache (cs->ss->current_thread, 1); /* Read watchpoints are set as access watchpoints, because of GDB's inability to deal with pure read watchpoints. */ @@ -212,7 +212,7 @@ cris_remove_point (enum raw_bkpt_type type, CORE_ADDR addr, int len, struct regcache *regcache; unsigned long bp_d_regs[12]; - regcache = get_thread_regcache (current_thread, 1); + regcache = get_thread_regcache (cs->ss->current_thread, 1); /* Read watchpoints are set as access watchpoints, because of GDB's inability to deal with pure read watchpoints. */ @@ -289,7 +289,7 @@ static int cris_stopped_by_watchpoint (void) { unsigned long exs; - struct regcache *regcache = get_thread_regcache (current_thread, 1); + struct regcache *regcache = get_thread_regcache (cs->ss->current_thread, 1); collect_register_by_name (regcache, "exs", &exs); @@ -300,7 +300,7 @@ static CORE_ADDR cris_stopped_data_address (void) { unsigned long eda; - struct regcache *regcache = get_thread_regcache (current_thread, 1); + struct regcache *regcache = get_thread_regcache (cs->ss->current_thread, 1); collect_register_by_name (regcache, "eda", &eda); diff --git a/gdb/gdbserver/linux-low.c b/gdb/gdbserver/linux-low.c index 561086d..3359ce7 100644 --- a/gdb/gdbserver/linux-low.c +++ b/gdb/gdbserver/linux-low.c @@ -455,14 +455,15 @@ linux_arch_setup (void) static void linux_arch_setup_thread (struct thread_info *thread) { + client_state *cs = get_client_state(); struct thread_info *saved_thread; - saved_thread = current_thread; - current_thread = thread; + saved_thread = cs->ss->current_thread; + cs->ss->current_thread = thread; hooks/post-receive -- Repository for Project Archer.