[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: A question about S/390 port
OK so I have to ask.. S/390 as in IBM Mainframem S/390?
On Wed, 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.
>
> So to make it consistent I have to know size of returned value for every
> syscall and for case 3 do {r3 = rv[0]; r2 = rv[1]}.
>
>
>
> To Unsubscribe: send mail to majordomo@xxxxxxxxxxx
> with "unsubscribe freebsd-hackers" in the body of the message
>
To Unsubscribe: send mail to majordomo@xxxxxxxxxxx
with "unsubscribe freebsd-platforms" in the body of the message