diff options
author | Pedro Alves <palves@redhat.com> | 2010-08-26 23:17:22 +0000 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2010-08-26 23:17:22 +0000 |
commit | 90d74c301f749fc06e859ab4424fd4cabc019bc2 (patch) | |
tree | 24b64960d7237ee27ab81014a049da62cef4ab1e /gdb/gdbserver/server.c | |
parent | ae53ffa4b631eede55fa98f7b27050d54024c575 (diff) | |
download | gdb-90d74c301f749fc06e859ab4424fd4cabc019bc2.zip gdb-90d74c301f749fc06e859ab4424fd4cabc019bc2.tar.gz gdb-90d74c301f749fc06e859ab4424fd4cabc019bc2.tar.bz2 |
* linux-low.c (linux_prepare_to_access_memory): New.
(linux_unprepare_to_access_memory): New.
(linux_target_ops): Install them.
* server.c (read_memory): Rename to ...
(gdb_read_memory): ... this. Use
prepare_to_access_memory/prepare_to_access_memory.
(write_memory): Rename to ...
(gdb_write_memory): ... this. Use
prepare_to_access_memory/prepare_to_access_memory.
(handle_search_memory_1): Adjust.
(process_serial_event): Adjust.
* target.h (struct target_ops): New fields
prepare_to_access_memory and unprepare_to_access_memory.
(prepare_to_access_memory, unprepare_to_access_memory): New.
* linux-x86-low.c (x86_insert_point, x86_remove_point): Use
prepare_to_access_memory/prepare_to_access_memory.
* nto-low.c (nto_target_ops): Adjust.
* spu-low.c (spu_target_ops): Adjust.
* win32-low.c (win32_target_ops): Adjust.
Diffstat (limited to 'gdb/gdbserver/server.c')
-rw-r--r-- | gdb/gdbserver/server.c | 39 |
1 files changed, 29 insertions, 10 deletions
diff --git a/gdb/gdbserver/server.c b/gdb/gdbserver/server.c index 9e87b20..5daf4b5 100644 --- a/gdb/gdbserver/server.c +++ b/gdb/gdbserver/server.c @@ -539,8 +539,10 @@ monitor_show_help (void) /* Read trace frame or inferior memory. */ static int -read_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len) +gdb_read_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len) { + int ret; + if (current_traceframe >= 0) { ULONGEST nbytes; @@ -558,19 +560,36 @@ read_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len) /* (assume no half-trace half-real blocks for now) */ } - return read_inferior_memory (memaddr, myaddr, len); + ret = prepare_to_access_memory (); + if (ret == 0) + { + ret = read_inferior_memory (memaddr, myaddr, len); + unprepare_to_access_memory (); + } + + return ret; } /* Write trace frame or inferior memory. Actually, writing to trace frames is forbidden. */ static int -write_memory (CORE_ADDR memaddr, const unsigned char *myaddr, int len) +gdb_write_memory (CORE_ADDR memaddr, const unsigned char *myaddr, int len) { if (current_traceframe >= 0) return EIO; else - return write_inferior_memory (memaddr, myaddr, len); + { + int ret; + + ret = prepare_to_access_memory (); + if (ret == 0) + { + ret = write_inferior_memory (memaddr, myaddr, len); + unprepare_to_access_memory (); + } + return ret; + } } /* Subroutine of handle_search_memory to simplify it. */ @@ -584,7 +603,7 @@ handle_search_memory_1 (CORE_ADDR start_addr, CORE_ADDR search_space_len, { /* Prime the search buffer. */ - if (read_memory (start_addr, search_buf, search_buf_size) != 0) + if (gdb_read_memory (start_addr, search_buf, search_buf_size) != 0) { warning ("Unable to access target memory at 0x%lx, halting search.", (long) start_addr); @@ -635,8 +654,8 @@ handle_search_memory_1 (CORE_ADDR start_addr, CORE_ADDR search_space_len, ? search_space_len - keep_len : chunk_size); - if (read_memory (read_addr, search_buf + keep_len, - nr_to_read) != 0) + if (gdb_read_memory (read_addr, search_buf + keep_len, + nr_to_read) != 0) { warning ("Unable to access target memory at 0x%lx, halting search.", (long) read_addr); @@ -2924,7 +2943,7 @@ process_serial_event (void) case 'm': require_running (own_buf); decode_m_packet (&own_buf[1], &mem_addr, &len); - if (read_memory (mem_addr, mem_buf, len) == 0) + if (gdb_read_memory (mem_addr, mem_buf, len) == 0) convert_int_to_ascii (mem_buf, own_buf, len); else write_enn (own_buf); @@ -2932,7 +2951,7 @@ process_serial_event (void) case 'M': require_running (own_buf); decode_M_packet (&own_buf[1], &mem_addr, &len, &mem_buf); - if (write_memory (mem_addr, mem_buf, len) == 0) + if (gdb_write_memory (mem_addr, mem_buf, len) == 0) write_ok (own_buf); else write_enn (own_buf); @@ -2941,7 +2960,7 @@ process_serial_event (void) require_running (own_buf); if (decode_X_packet (&own_buf[1], packet_len - 1, &mem_addr, &len, &mem_buf) < 0 - || write_memory (mem_addr, mem_buf, len) != 0) + || gdb_write_memory (mem_addr, mem_buf, len) != 0) write_enn (own_buf); else write_ok (own_buf); |