blob: 97ebc8f49c244fcfce61c0ff925b4e6471f3e3b4 [file] [log] [blame]
/*
* arch/parisc/vfork.S, "vfork() me harder. ugh." -- kyle
*
* %r20 contains the system call number, %rp contains whence we came,
* %rp is saved and restored across the syscall, thankfully.
*
*/
.text
.align 64 ; cache-width aligned
.globl vfork
.type vfork,@function
vfork:
/* pid_t vfork(void) */
ble 0x100(%sr2, %r0) ; jump to gateway page
nop
ldi -0x1000,%r19 ; %r19 = -4096
sub %r0,%ret0,%r22 ; %r22 = -%ret0
cmpb,>>=,n %r19,%ret0,1f ; if %ret0 >= -4096UL
ldi -1,%ret0 ; nullified on taken forward
/* store %r22 to errno... */
ldil L%errno,%r1
ldo R%errno(%r1),%r1
stw %r22,0(%r1)
1:
bv %r0(%rp) ; jump back
nop
.size vfork,.-vfork