diff options
author | Michael Frysinger <vapier@gentoo.org> | 2011-06-22 04:18:45 +0000 |
---|---|---|
committer | Michael Frysinger <vapier@gentoo.org> | 2011-06-22 04:18:45 +0000 |
commit | 4dfc786b8b7ab8abd71e5cc8be1b8de7bc28d85e (patch) | |
tree | 0bb73e9f22c924b83adc0504e3074ea233bed08b /libgloss/bfin | |
parent | 3a81efd10e8e32100c77d197dcd35d320e81568c (diff) | |
download | cygnal-4dfc786b8b7ab8abd71e5cc8be1b8de7bc28d85e.tar.gz cygnal-4dfc786b8b7ab8abd71e5cc8be1b8de7bc28d85e.tar.bz2 cygnal-4dfc786b8b7ab8abd71e5cc8be1b8de7bc28d85e.zip |
libgloss: bfin: handle result2/errcode in sim syscalls
The sim passes back results via two values, and the error code via a 3rd.
make sure libgloss extracts all three so that things like errno work as
expected. This fixes many gdb tests which look for this sort of thing.
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Diffstat (limited to 'libgloss/bfin')
-rw-r--r-- | libgloss/bfin/syscalls.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/libgloss/bfin/syscalls.c b/libgloss/bfin/syscalls.c index b9a5f583f..03765bf5d 100644 --- a/libgloss/bfin/syscalls.c +++ b/libgloss/bfin/syscalls.c @@ -32,10 +32,15 @@ register char *stack_ptr asm ("SP"); static inline int do_syscall (int reason, void *arg) { - register int r asm ("P0") = reason; - register void *a asm ("R0") = arg; - register int result asm ("R0"); - asm volatile ("excpt 0;" : "=r" (result) : "a" (r), "r" (a) : "memory", "CC"); + int result, result2, errcode; + asm volatile ("excpt 0;" + : "=q0" (result), + "=q1" (result2), + "=q2" (errcode) + : "qA" (reason), + "q0" (arg) + : "memory", "CC"); + errno = errcode; return result; } |