summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libc/sysdeps/linux/bfin/Makefile.arch2
-rw-r--r--libc/sysdeps/linux/common/brk.c (renamed from libc/sysdeps/linux/bfin/brk.c)28
2 files changed, 13 insertions, 17 deletions
diff --git a/libc/sysdeps/linux/bfin/Makefile.arch b/libc/sysdeps/linux/bfin/Makefile.arch
index cdb588a36..81fca3295 100644
--- a/libc/sysdeps/linux/bfin/Makefile.arch
+++ b/libc/sysdeps/linux/bfin/Makefile.arch
@@ -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
diff --git a/libc/sysdeps/linux/bfin/brk.c b/libc/sysdeps/linux/common/brk.c
index 88b82cf64..18836ba59 100644
--- a/libc/sysdeps/linux/bfin/brk.c
+++ b/libc/sysdeps/linux/common/brk.c
@@ -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)