diff --git a/libgloss/ChangeLog b/libgloss/ChangeLog index a6f7ef606..433f12652 100644 --- a/libgloss/ChangeLog +++ b/libgloss/ChangeLog @@ -1,3 +1,11 @@ +2011-06-22 Mike Frysinger + + * bfin/syscalls.c (do_syscall): Delete local variable definitions. + Declare result, result2, errcode local ints. Delete asm inputs + and outputs. Set output constraints to q0/result, q1/result2, and + q2/errcode. Set input constraints to qA/reason and q0/arg. Set + errno to errcode. + 2011-06-21 Mike Frysinger * bfin/syscalls.c: Trim trailing whitespace. 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; }