OSDN Git Service

create arch-generic brk() based on blackfin one
authorMike Frysinger <vapier@gentoo.org>
Thu, 11 Dec 2008 10:08:00 +0000 (10:08 -0000)
committerMike Frysinger <vapier@gentoo.org>
Thu, 11 Dec 2008 10:08:00 +0000 (10:08 -0000)
libc/sysdeps/linux/bfin/Makefile.arch
libc/sysdeps/linux/common/brk.c [moved from libc/sysdeps/linux/bfin/brk.c with 54% similarity]

index cdb588a..81fca32 100644 (file)
@@ -5,7 +5,7 @@
 # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
 #
 
-CSRC := brk.c bsdsetjmp.c clone.c syscall.c \
+CSRC := bsdsetjmp.c clone.c syscall.c \
        sram-alloc.c sram-free.c dma-memcpy.c
 
 SSRC := __longjmp.S setjmp.S bsd-_setjmp.S vfork.S
similarity index 54%
rename from libc/sysdeps/linux/bfin/brk.c
rename to libc/sysdeps/linux/common/brk.c
index 88b82cf..18836ba 100644 (file)
@@ -8,29 +8,25 @@
 #include <unistd.h>
 #include <sys/syscall.h>
 
-/* libc_hidden_proto(brk) */
+libc_hidden_proto(brk)
+
+#define __NR___syscall_brk __NR_brk
+static inline _syscall1(void *, __syscall_brk, void *, end)
 
 /* This must be initialized data because commons can't have aliases.  */
 void * __curbrk attribute_hidden = 0;
 
-int brk (void *addr)
+int brk(void *addr)
 {
-    void *newbrk;
-
-       __asm__ __volatile__(
-               "P0 = %2;\n\t"
-               "excpt 0;\n\t"
-               : "=q0" (newbrk)
-               : "q0" (addr), "i" (__NR_brk): "P0" );
+       void *newbrk = __syscall_brk(addr);
 
-    __curbrk = newbrk;
+       __curbrk = newbrk;
 
-    if (newbrk < addr)
-    {
-       __set_errno (ENOMEM);
-       return -1;
-    }
+       if (newbrk < addr) {
+               __set_errno (ENOMEM);
+               return -1;
+       }
 
-    return 0;
+       return 0;
 }
 libc_hidden_def(brk)