[parisc-linux] Re: how to handle ERESTART_RESTARTBLOCK ?

Randolph Chung Randolph Chung <randolph@tausq.org>
Sun, 26 Oct 2003 11:18:04 -0800


> I don't see why #0 can't be used here. Then again, why can't you code
> the syscall number directly into the hex? Are you expecting it to
> change? :)

no, i can (will) just encode it into the hex.... 

> Adding stack here can be detremental to the userspace program. It's not
> expecting you to have a stack, and it expects the syscall to live within 
> its calling frame. When we setup the signal return trampoline we don't
> mess with the stack either :) Though this context is different.

userspace should not see this stack...

let's say your syscall sequence looks like this:

[...]
ble 0x100(%sr2, %r0)    /* call nanosleep */
ldi 0xa2,%r20
ldi -1000,r1
[...]

normally when you return from the kernel, you return at the second ldi
insn. In this case, you jump to a trampoline that happens to sit on your
stack, so the insn sequence becomes essentially

[...]
ble 0x100(%sr2, %r0)    /* call nanosleep */
ldi 0xa2,%r20
    ldo 64(%sp),%sp
    ble 0x100(%sr2, %r0)
    ldi 0,%r20
    b,l .+8, %r21
    [...]
    bv %r0(%r20)
    ldo -64(%sp),%sp
ldi -1000,r1
[...]

(indented part added by the kernel)

so it should be invisible to the syscall wrapper/application.

or am i missing something? :-)

randolph
-- 
Randolph Chung
Debian GNU/Linux Developer, hppa/ia64 ports
http://www.tausq.org/