qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] alpha - syscalls can return two values
@ 2008-11-11 20:14 Vince Weaver
  2008-11-11 20:23 ` Vince Weaver
  0 siblings, 1 reply; 3+ messages in thread
From: Vince Weaver @ 2008-11-11 20:14 UTC (permalink / raw)
  To: qemu-devel

Hello

On the Alpha architecture, system calls can return two values, one in 
register $0 and one in register $1.  This is unusual, so there is no 
mechanism I can see in linux-user/syscall.c for handling this properly.

What would be the best way to handle this?

This is needed to implement the getxuid and getxgid syscalls.  Without 
these, the spec2k perlbmk fails to run.

Vince

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [Qemu-devel] alpha - syscalls can return two values
  2008-11-11 20:14 [Qemu-devel] alpha - syscalls can return two values Vince Weaver
@ 2008-11-11 20:23 ` Vince Weaver
  2008-11-12 21:34   ` Vince Weaver
  0 siblings, 1 reply; 3+ messages in thread
From: Vince Weaver @ 2008-11-11 20:23 UTC (permalink / raw)
  To: qemu-devel


and as soon as I sent this, I realized I was reading the code wrong.

It doesn't return the second result in $1, but rather it returns the 
second result on the stack at offset 80.

This remains a problem though, as I don't think there's an easy way to get 
the stack pointer from the syscall code.

The relevant linux-kernel syscall code can be found in
   ./arch/alpha/kernel/entry.S

specifically the getxuid, getxgid, getxpid, syscalls.

Vince

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [Qemu-devel] alpha - syscalls can return two values
  2008-11-11 20:23 ` Vince Weaver
@ 2008-11-12 21:34   ` Vince Weaver
  0 siblings, 0 replies; 3+ messages in thread
From: Vince Weaver @ 2008-11-12 21:34 UTC (permalink / raw)
  To: qemu-devel


and to keep correcting myself, it seems like the Alpha multi-value
return syscalls do not in fact use the stack at all.

I'm just posting this to clear up what I posted earlier.

What happens is:
   normal return value goes into $v0 (as always)
   errno is put into $a3 (as always)
   secondary return value is placed into $a4.

I have a patch that implements this that I'll send in a separate e-mail.

Vince

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2008-11-12 21:34 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-11-11 20:14 [Qemu-devel] alpha - syscalls can return two values Vince Weaver
2008-11-11 20:23 ` Vince Weaver
2008-11-12 21:34   ` Vince Weaver

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).