Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 29 Oct 2001 02:16:37 -0800 (PST)
From:      John Baldwin <jhb@FreeBSD.org>
To:        arch@FreeBSD.org
Subject:   syscall() ABI questions
Message-ID:  <XFMail.011029021637.jhb@FreeBSD.org>

next in thread | raw e-mail | index | archive | help
I've got some questions about td->td_retval[1] and our syscall ABI.  On some
archs (ia64, alpha) we preinitialie this value to 0.  On other archs (i386,
sparc64, ppc) we set it to the value of the register it will be set to so that
effectively this register's value is preserved across the syscall.  My question
is do our syscall ABI's actually assume that for syscalls with only one return
value that register isn't written to?  NetBSD recently changed their i386
syscall code to preinitialize to 0 rather than %edx.  Anyone have the history
on this?

Speaking of i386, I have another question.  For the fork, vfork, and rfork
syscalls, we have custom handlers that call the syscall normally and then
explicitly zero the return value if %edx is 1 (i.e., the child).  However, in
vm_fork(), we already explicitly set the value in %eax to 0 for child
processes, so is this extra setting of that value in libc really needed?  If
not, we can safely get rid of rfork.S, vfork.S, and fork.S in libc I think.

-- 

John Baldwin <jhb@FreeBSD.org> -- http://www.FreeBSD.org/~jhb/
PGP Key: http://www.baldwin.cx/~john/pgpkey.asc
"Power Users Use the Power to Serve!"  -  http://www.FreeBSD.org/

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




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