Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 10 Jul 2002 13:29:34 -0400 (EDT)
From:      John Baldwin <jhb@FreeBSD.org>
To:        Serguei Tzukanov <tzukanov@narod.ru>
Cc:        freebsd-platforms@freebsd.org, freebsd-hackers@freebsd.org
Subject:   Re: A question about S/390 port
Message-ID:  <XFMail.20020710132934.jhb@FreeBSD.org>
In-Reply-To: <200207102033.25184.tzukanov@narod.ru>

next in thread | previous in thread | raw e-mail | index | archive | help

On 10-Jul-2002 Serguei Tzukanov wrote:
> 
>> td_retval[0] is the low word, and td_retval[1] is the high word, you
>> just need to make sure the values from those two words get returned
>> properly to userland.
> 
> 1) syscall returns 32-bit value:
>       r2 = rv[0];
>       r3 = rv[1];
>       r3 is irrelevant here (ABI: "32-bit values returned in r2")
> 
> 2) syscall returns 64-bit value:
>       MI code uses something like
>       *(int64_t *)rv = xxx, so I have to do
>       r2 = rv[0];
>       r3 = rv[1];
>       ABI says "long long shall be returned with the lower
>       addressed half in r2 and the higher in r3"
> 
> 3) syscall folded into __syscall returns 32-bit value (e.g. mmap):
>       MI code does usual
>       r[0] = xxx;
>       svc (syscall) handler does
>       r2 = rv[0];
>       r3 = rv[1]; /* zeroed before */
>       then mmap wrapper in userspace casts this 64-bit to 32-bit
>       (loads r2 with r3 really) and always gets 0.

Why does the cast from 32 to 64 treat r3 as the lower 32-bits when
a 64-bit return value treats r3 as the upper 32-bits and r2 as the
lower 32-bits?  That is inconsistent and you are going to have
problems with either one or the other.  I also don't understand
exactly what you mean by "syscall folded into __syscall".

-- 

John Baldwin <jhb@FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve!"  -  http://www.FreeBSD.org/

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?XFMail.20020710132934.jhb>