OSDN Git Service

Thu Mar 22 14:57:00 2000 Fernando Nasser <fnasser@redhat.com>
authorfnasser <fnasser>
Thu, 23 Mar 2000 20:19:12 +0000 (20:19 +0000)
committerfnasser <fnasser>
Thu, 23 Mar 2000 20:19:12 +0000 (20:19 +0000)
* libc/sys/arm/syscalls.c (do_AngelSWI): Prevent registers with valid
information to be clobbered by an Angel C library support syscall.

newlib/ChangeLog
newlib/libc/sys/arm/syscalls.c

index 0257852..21b9997 100644 (file)
@@ -1,3 +1,8 @@
+Thu Mar 22 14:57:00 2000  Fernando Nasser <fnasser@redhat.com>
+
+       * libc/sys/arm/syscalls.c (do_AngelSWI): Prevent registers with valid
+       information to be clobbered by an Angel C library support syscall. 
+
 Tue Mar 21 19:08:00 2000  Jeff Johnston <jjohnstn@cygnus.com>
 
        * libc/stdlib/envlock.c: Fixed comment typo.
index fb190e1..2fb2ae1 100644 (file)
@@ -103,8 +103,13 @@ do_AngelSWI (int reason, void * arg)
   asm volatile ("mov r0, %1; mov r1, %2; swi %a3; mov %0, r0"
        : "=r" (value) /* Outputs */
        : "r" (reason), "r" (arg), "i" (AngelSWI) /* Inputs */
-       : "r0", "r1", "lr"
+       : "r0", "r1", "r2", "r3", "ip", "lr", "memory"
                /* Clobbers r0 and r1, and lr if in supervisor mode */);
+                /* Accordingly to page 13-77 of ARM DUI 0040D other registers
+                   can also be clobbered.  Some memory positions may also be
+                   changed by a system call, so they should not be kept in
+                   registers. Note: we are assuming the manual is right and
+                   Angel is respecting the APCS */
   return value;
 }
 #endif /* ARM_RDI_MONITOR */