On 09/12/2013 04:05 AM, Yue Lu wrote:
> On Sat, Sep 7, 2013 at 2:53 AM, Pedro Alves <[email protected]> wrote:
>> This is what I meant:
>> https://sourceware.org/ml/gdb-patches/2013-09/msg00253.html
>>
>> I was thinking you'd wrap gnu_xfer_memory.
>>
>
> I have study your patch,
Thanks. Did you try building gdb with it, and does the
resulting GDB still work?
> but I found there is no to_xfer_partial field
> or something similar in gdbserver's structure target_obj, how can I
> do? Please give me more hints, thanks.
Right, there's no such function in gdbserver today. I mean, instead of:
+
+static int
+gnu_read_memory (CORE_ADDR addr, unsigned char *myaddr, int length)
+{
+ int ret = 0;
+ task_t task = (gnu_current_inf
+ ? (gnu_current_inf->task
+ ? gnu_current_inf->task->port : 0) : 0);
+ if (task == MACH_PORT_NULL)
+ return 0;
+ ret = gnu_read_inferior (task, addr, myaddr, length);
+ if (length != ret)
+ {
+ debug ("gnu_read_inferior,length=%d, but return %d\n", length, ret);
+ return -1;
+ }
+ return 0;
+}
you'll have a simpler:
static int
gnu_read_memory (CORE_ADDR addr, unsigned char *myaddr, int length)
{
LONGEST res;
res = gnu_xfer_memory (...);
if (res != length)
return -1;
return 0;
}
gnu_xfer_memory already has the task == MACH_PORT_NULL check
inside it, so this means there's no need to duplicate it
in gnu_read|write_memory.
--
Pedro Alves