Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 16 May 2004 16:07:20 -0700
From:      Peter Wemm <peter@wemm.org>
To:        freebsd-amd64@freebsd.org
Subject:   Re: ABI question, porting ports to amd64
Message-ID:  <200405161607.20644.peter@wemm.org>
In-Reply-To: <20040516210803.F03CC94@toad.stack.nl>
References:  <20040516210803.F03CC94@toad.stack.nl>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sunday 16 May 2004 02:08 pm, Marco van de Voort wrote:
> y> > is %r10. So gcc puts the 4th param in %rcx, and the move moves
> it to
>
> > > %r10 for the kernel.
> >
> > Correct.  We use the ABI argument ordering since that is what gcc
> > gave us when calling the stub funtions, but the syscall instruction
> > clobbers %rcx as it enters the kernel.
> >
> > If we were smarter, we'd only do this move if we know the syscall
> > had 4 or more arguments.  But unfortunately, we don't have this
> > information when building libc.
> >
> > Or, we'd declare the syscall prototypes with an explicit override
> > of the register parameter assignments or something.  (bad luck
> > though if you neglect to use the right #includes for your code and
> > miss out a prototype)
>
> I was always curious why the (basic) *nix syscalls weren't inlined?
> Can't gcc do that?

The errno handling is the sticky point.  Error return is indicated by 
the 'carry' bit set in the flags register.  At which point the return 
value of the syscall is copied to the 'errno' variable and the function 
returns -1. 

-- 
Peter Wemm - peter@wemm.org; peter@FreeBSD.org; peter@yahoo-inc.com
"All of this is for nothing if we don't go to the stars" - JMS/B5



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