This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [PATCH 1/2] Port gdbserver to GNU/Hurd
- From: Pedro Alves <palves at redhat dot com>
- To: Yue Lu <hacklu dot newborn at gmail dot com>
- Cc: gdb-patches <gdb-patches at sourceware dot org>, Thomas Schwinge <thomas at codesourcery dot com>, Luis Machado <lgustavo at codesourcery dot com>, bug-hurd at gnu dot org
- Date: Wed, 18 Sep 2013 13:37:19 +0100
- Subject: Re: [PATCH 1/2] Port gdbserver to GNU/Hurd
- Authentication-results: sourceware.org; auth=none
- References: <CAB8fV=jJ64i91VW52ZmdnEDZhd1ZGTAykDqoFyPJanCP=5beqA at mail dot gmail dot com> <CAB8fV=iw783uGF8sWyqJNcWR0j_jaY5XO+FR3TyPatMGJ8Fdjw at mail dot gmail dot com> <87txi2i6t6 dot fsf at kepler dot schwinge dot homeip dot net> <5225C3C6 dot 8090101 at redhat dot com> <CAB8fV=gXmHSqLF14aF3RUU6paExSHft-gqySCsvyxiYELY4V+A at mail dot gmail dot com> <5228DBA7 dot 9050408 at redhat dot com> <522A2497 dot 7090405 at redhat dot com> <CAB8fV=hcYutwy7KzeJyELziBaKZio0G9ZFX=FucRWav-T2_cnA at mail dot gmail dot com>
On 09/12/2013 04:05 AM, Yue Lu wrote:
> On Sat, Sep 7, 2013 at 2:53 AM, Pedro Alves <palves@redhat.com> 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