From: Thomas Schwinge Date: Thu, 19 Sep 2013 13:40:38 +0000 (+0000) Subject: gnu-nat.c: Don't install a deprecated_xfer_memory method. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=9b3f3ee63d8c500eca8bc542b3edbd83ddb77b1a;p=binutils-gdb.git gnu-nat.c: Don't install a deprecated_xfer_memory method. This removes another instance of a deprecated_xfer_memory user. gdb/ 2013-09-19 Pedro Alves Thomas Schwinge Yue Lu * gnu-nat.c (gnu_read_inferior, gnu_write_inferior): Make static. Take a gdb_byte pointer instead of a char pointer. * gnu-nat.c (gnu_xfer_memory): Adjust interface as gnu_xfer_partial helper. (gnu_xfer_partial): New function. (gnu_target): Don't install a deprecated_xfer_memory hook. Install a to_xfer_partial hook. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 0fadddf2e95..738d757b1f1 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,16 @@ +2013-09-19 Pedro Alves + Thomas Schwinge + Yue Lu + + * gnu-nat.c (gnu_read_inferior, gnu_write_inferior): Make static. + Take a gdb_byte pointer instead of a char pointer. + + * gnu-nat.c (gnu_xfer_memory): Adjust interface as + gnu_xfer_partial helper. + (gnu_xfer_partial): New function. + (gnu_target): Don't install a deprecated_xfer_memory hook. + Install a to_xfer_partial hook. + 2013-09-19 Jan Kratochvil Constification. diff --git a/gdb/gnu-nat.c b/gdb/gnu-nat.c index b4f99f81ce8..b99f5570ec1 100644 --- a/gdb/gnu-nat.c +++ b/gdb/gnu-nat.c @@ -2268,8 +2268,8 @@ gnu_thread_alive (struct target_ops *ops, ptid_t ptid) /* Read inferior task's LEN bytes from ADDR and copy it to MYADDR in gdb's address space. Return 0 on failure; number of bytes read otherwise. */ -int -gnu_read_inferior (task_t task, CORE_ADDR addr, char *myaddr, int length) +static int +gnu_read_inferior (task_t task, CORE_ADDR addr, gdb_byte *myaddr, int length) { error_t err; vm_address_t low_address = (vm_address_t) trunc_page (addr); @@ -2314,8 +2314,9 @@ struct obstack region_obstack; /* Write gdb's LEN bytes from MYADDR and copy it to ADDR in inferior task's address space. */ -int -gnu_write_inferior (task_t task, CORE_ADDR addr, char *myaddr, int length) +static int +gnu_write_inferior (task_t task, CORE_ADDR addr, + const gdb_byte *myaddr, int length) { error_t err = 0; vm_address_t low_address = (vm_address_t) trunc_page (addr); @@ -2471,30 +2472,55 @@ out: } -/* Return 0 on failure, number of bytes handled otherwise. TARGET - is ignored. */ -static int -gnu_xfer_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len, int write, - struct mem_attrib *attrib, - struct target_ops *target) + +/* Helper for gnu_xfer_partial that handles memory transfers. */ + +static LONGEST +gnu_xfer_memory (gdb_byte *readbuf, const gdb_byte *writebuf, + CORE_ADDR memaddr, LONGEST len) { task_t task = (gnu_current_inf ? (gnu_current_inf->task ? gnu_current_inf->task->port : 0) : 0); + int res; if (task == MACH_PORT_NULL) - return 0; + return TARGET_XFER_E_IO; + + if (writebuf != NULL) + { + inf_debug (gnu_current_inf, "writing %s[%s] <-- %s", + paddress (target_gdbarch (), memaddr), plongest (len), + host_address_to_string (writebuf)); + res = gnu_write_inferior (task, memaddr, writebuf, len); + } else { - inf_debug (gnu_current_inf, "%s %s[%d] %s %s", - write ? "writing" : "reading", - paddress (target_gdbarch (), memaddr), len, - write ? "<--" : "-->", host_address_to_string (myaddr)); - if (write) - return gnu_write_inferior (task, memaddr, myaddr, len); - else - return gnu_read_inferior (task, memaddr, myaddr, len); + inf_debug (gnu_current_inf, "reading %s[%s] --> %s", + paddress (target_gdbarch (), memaddr), plongest (len), + host_address_to_string (readbuf)); + res = gnu_read_inferior (task, memaddr, readbuf, len); + } + if (res == 0) + return TARGET_XFER_E_IO; + return res; +} + +/* Target to_xfer_partial implementation. */ + +static LONGEST +gnu_xfer_partial (struct target_ops *ops, enum target_object object, + const char *annex, gdb_byte *readbuf, + const gdb_byte *writebuf, ULONGEST offset, LONGEST len) +{ + switch (object) + { + case TARGET_OBJECT_MEMORY: + return gnu_xfer_memory (readbuf, writebuf, offset, len); + + default: + return -1; } } @@ -2628,7 +2654,7 @@ gnu_target (void) t->to_detach = gnu_detach; t->to_resume = gnu_resume; t->to_wait = gnu_wait; - t->deprecated_xfer_memory = gnu_xfer_memory; + t->to_xfer_partial = gnu_xfer_partial; t->to_find_memory_regions = gnu_find_memory_regions; t->to_terminal_init = gnu_terminal_init_inferior; t->to_kill = gnu_kill_inferior;