Re: LTP testing

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 25 Jun 2002, Carsten Langgaard wrote:

> The next LTP failure line is:
> pipe05      1  BROK  :  Unexpected signal 11 received.
> 
> For this one I haven't got a fix, because the failure is due to the way
> the pipe syscall is implemented for MIPS (so we need a fix in both the
> kernel and glibc).
> 
> The glibc code look like this
> SYSCALL__ (pipe, 1)
>         /* Plop in the two descriptors.  */
>         sw v0, 0(a0)
>         sw v1, 4(a0)
> 
>         /* Go out with a clean status.  */
>         move v0, zero
>         j ra
>         .end __pipe
> 
> The problem is that the code is called with $a0 = 0. So the 'sw v0,
> 0(a0)' after the syscall generates a segmentation fault.

 The test is broken and it's what should be fixed, instead -- several
Linux platforms do it this way, e.g. Alpha and IA-64.  A SIGSEGV is a
valid response for an invalid address.  Remember you test pipe(3) and not
pipe(2). 

> Why are the pipe syscall implemented this way, where we return the two
> descriptors in v0 and v1 ?

 For performance reasons.  Also it's safer to do such actions from the
userland.

> Why doesn't the kernel do these stores (this way we can do an access
> check, like i386 does) ?

 I suppose i386 does these stores in the kernel due to historical reasons. 
There is also the problem of a permanent lack of registers in i386 -- I
haven't investigated it, but it may simply be unable to afford a second
result register.

-- 
+  Maciej W. Rozycki, Technical University of Gdansk, Poland   +
+--------------------------------------------------------------+
+        e-mail: macro@ds2.pg.gda.pl, PGP key available        +


[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux