Thread (4 messages) 4 messages, 3 authors, 2008-09-26

Re: [RFC/PATCH] powerpc: Cleanup 32/64 bit syscall int sign ext.

From: Josh Boyer <hidden>
Date: 2008-09-26 14:03:39

On Thu, Sep 25, 2008 at 05:01:36PM +1000, Benjamin Herrenschmidt wrote:
I noticed that our ABI says callers are responsible for sign extending.
That means that all int, long or similarly signed arguments to syscalls
must be explicitly sign-extended.

We already have wrappers to do that for -some- syscalls in arch code.
Those are in C and pretty ugly, copy/pasting a bunch of identically
useless comments all over, and are missing a lot of potential
candidates.

sparc64 uses a nicer macro system to generate trampolines in asm. It
also has a more complete list. But it's also missing some :-)

Now, there is a good point to be made that we don't absolutely need to
always sign extend. In many cases, the called function will just do a
cmplw for example, or an and to test bits in flags, and so it looks like
sign extension is not necessary. One could say that sign extending file
descriptors for example isn't terribly useful

But that sounds like a fragile approach to me. We don't know for sure
what new tricks the compiler will learn for example. In fact, when
taking the sparc64 list, I noticed that in some cases it -did- already
sign extend file descriptors and flags .. and in some cases not.

So I've spent a few hours combing through all of syscalls.h (and one
more that seems to be missing from this file, ie, pipe2, there may be
others) for anything using int, long or pid_t (which is signed, at least
on our 32-bit platforms).
You might want to look at functions that take clockid_t as well.  It's also
a signed int.  We recently ran into a case of this for clock_getres on ppc64
using a 32-bit glibc.  Albiet, on a quite old kernel but looking at it briefly
it seems to still be an issue, so probably worth fixing.

josh
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help