X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fcommon%2Fagent.c;h=65d5f1938b88d9458f099c892f9c9bfce0c5c01e;hb=e99b03dcf42606425eab8bd12eadb8aa4007f35a;hp=2963917641c10b2147d7f4c647ec6c4d333dbf38;hpb=34abf635b3edf9d70b24aa655ffd7d4696d48cde;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/common/agent.c b/gdb/common/agent.c index 2963917641..65d5f1938b 100644 --- a/gdb/common/agent.c +++ b/gdb/common/agent.c @@ -1,6 +1,6 @@ /* Shared utility routines for GDB to interact with agent. - Copyright (C) 2009-2014 Free Software Foundation, Inc. + Copyright (C) 2009-2018 Free Software Foundation, Inc. This file is part of GDB. @@ -17,14 +17,9 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#ifdef GDBSERVER -#include "server.h" -#else -#include "defs.h" -#include "target.h" -#include "infrun.h" -#include "objfiles.h" -#endif +#include "common-defs.h" +#include "target/target.h" +#include "common/symbol.h" #include #include "agent.h" #include "filestuff.h" @@ -62,13 +57,12 @@ struct ipa_sym_addresses /* Cache of the helper thread id. FIXME: this global should be made per-process. */ -static unsigned int helper_thread_id = 0; +static uint32_t helper_thread_id = 0; static struct { const char *name; int offset; - int required; } symbol_list[] = { IPA_SYM(helper_thread_id), IPA_SYM(cmd_buf), @@ -99,18 +93,10 @@ agent_look_up_symbols (void *arg) { CORE_ADDR *addrp = (CORE_ADDR *) ((char *) &ipa_sym_addrs + symbol_list[i].offset); -#ifdef GDBSERVER - - if (look_up_one_symbol (symbol_list[i].name, addrp, 1) == 0) -#else - struct bound_minimal_symbol sym = - lookup_minimal_symbol (symbol_list[i].name, NULL, - (struct objfile *) arg); + struct objfile *objfile = (struct objfile *) arg; - if (sym.minsym != NULL) - *addrp = BMSYMBOL_VALUE_ADDRESS (sym); - else -#endif + if (find_minimal_symbol_address (symbol_list[i].name, addrp, + objfile) != 0) { DEBUG_AGENT ("symbol `%s' not found\n", symbol_list[i].name); return -1; @@ -126,23 +112,9 @@ agent_get_helper_thread_id (void) { if (helper_thread_id == 0) { -#ifdef GDBSERVER - if (read_inferior_memory (ipa_sym_addrs.addr_helper_thread_id, - (unsigned char *) &helper_thread_id, - sizeof helper_thread_id)) -#else - enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ()); - gdb_byte buf[4]; - - if (target_read_memory (ipa_sym_addrs.addr_helper_thread_id, - buf, sizeof buf) == 0) - helper_thread_id = extract_unsigned_integer (buf, sizeof buf, - byte_order); - else -#endif - { - warning (_("Error reading helper thread's id in lib")); - } + if (target_read_uint32 (ipa_sym_addrs.addr_helper_thread_id, + &helper_thread_id)) + warning (_("Error reading helper thread's id in lib")); } return helper_thread_id; @@ -218,15 +190,10 @@ agent_run_command (int pid, const char *cmd, int len) { int fd; int tid = agent_get_helper_thread_id (); - ptid_t ptid = ptid_build (pid, tid, 0); + ptid_t ptid = ptid_t (pid, tid, 0); -#ifdef GDBSERVER - int ret = write_inferior_memory (ipa_sym_addrs.addr_cmd_buf, - (const unsigned char *) cmd, len); -#else int ret = target_write_memory (ipa_sym_addrs.addr_cmd_buf, (gdb_byte *) cmd, len); -#endif if (ret != 0) { @@ -237,18 +204,7 @@ agent_run_command (int pid, const char *cmd, int len) DEBUG_AGENT ("agent: resumed helper thread\n"); /* Resume helper thread. */ -#ifdef GDBSERVER -{ - struct thread_resume resume_info; - - resume_info.thread = ptid; - resume_info.kind = resume_continue; - resume_info.sig = GDB_SIGNAL_0; - (*the_target->resume) (&resume_info, 1); -} -#else - target_resume (ptid, 0, GDB_SIGNAL_0); -#endif + target_continue_no_signal (ptid); fd = gdb_connect_sync_socket (pid); if (fd >= 0) @@ -280,41 +236,15 @@ agent_run_command (int pid, const char *cmd, int len) /* Need to read response with the inferior stopped. */ if (!ptid_equal (ptid, null_ptid)) { - struct target_waitstatus status; - int was_non_stop = non_stop; /* Stop thread PTID. */ DEBUG_AGENT ("agent: stop helper thread\n"); -#ifdef GDBSERVER - { - struct thread_resume resume_info; - - resume_info.thread = ptid; - resume_info.kind = resume_stop; - resume_info.sig = GDB_SIGNAL_0; - (*the_target->resume) (&resume_info, 1); - } - - non_stop = 1; - mywait (ptid, &status, 0, 0); -#else - non_stop = 1; - target_stop (ptid); - - memset (&status, 0, sizeof (status)); - target_wait (ptid, &status, 0); -#endif - non_stop = was_non_stop; + target_stop_and_wait (ptid); } if (fd >= 0) { -#ifdef GDBSERVER - if (read_inferior_memory (ipa_sym_addrs.addr_cmd_buf, - (unsigned char *) cmd, IPA_CMD_BUF_SIZE)) -#else if (target_read_memory (ipa_sym_addrs.addr_cmd_buf, (gdb_byte *) cmd, IPA_CMD_BUF_SIZE)) -#endif { warning (_("Error reading command response")); return -1; @@ -325,7 +255,7 @@ agent_run_command (int pid, const char *cmd, int len) } /* Each bit of it stands for a capability of agent. */ -static unsigned int agent_capability = 0; +static uint32_t agent_capability = 0; /* Return true if agent has capability AGENT_CAP, otherwise return false. */ @@ -334,20 +264,8 @@ agent_capability_check (enum agent_capa agent_capa) { if (agent_capability == 0) { -#ifdef GDBSERVER - if (read_inferior_memory (ipa_sym_addrs.addr_capability, - (unsigned char *) &agent_capability, - sizeof agent_capability)) -#else - enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ()); - gdb_byte buf[4]; - - if (target_read_memory (ipa_sym_addrs.addr_capability, - buf, sizeof buf) == 0) - agent_capability = extract_unsigned_integer (buf, sizeof buf, - byte_order); - else -#endif + if (target_read_uint32 (ipa_sym_addrs.addr_capability, + &agent_capability)) warning (_("Error reading capability of agent")); } return agent_capability & agent_capa;