lkml.org 
[lkml]   [2002]   [Sep]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: Syscall changes registers beyond %eax, on linux-i386
    Petr Vandrovec wrote:
    > On 19 Sep 02 at 13:22, Richard B. Johnson wrote:
    >
    >
    >>>>>A short snippet of sys_poll, with irrelavant data removed.
    >>>>>
    >>>>>sys_poll(struct pollfd *ufds, .. , ..) {
    >>>>> ...
    >>>>> ufds++;
    >>>>> ...
    >>>>
    >>Well which one? Here is an ioctl(). It certainly modifies one
    >>of its parameter values.
    >
    >
    > poll(), as was already noted. Program below should
    > print same value for B= and F=, but it reports f + 8*c instead
    > (where c = number of filedescriptors passed to poll).
    >
    > And you must call it from assembly, as your calls to getpid() or
    > ioctl() (or poll()) are wrapped in libc - and glibc's code begins with
    > push %ebx because of %ebx is used by -fPIC code.
    >
    > It is questinable whether we should try to not modify parameters
    > passed into functions. It is definitely nice behavior, but I think
    > that we should only guarantee that syscalls do not modify unused
    > registers.
    > Petr Vandrovec
    > vandrove@vc.cvut.cz

    Now that I've thought about it more, I think the best solution is to go
    through all the syscalls (a big job, I know), and declare the parameters
    as const, so that gcc knows it can't modify them, and will throw a
    warning if we try.

    --
    Brian Gerst


    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2005-03-22 13:29    [W:0.043 / U:0.676 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site