diff options
Diffstat (limited to 'libgloss/arm/linux-syscalls1.c')
-rw-r--r-- | libgloss/arm/linux-syscalls1.c | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/libgloss/arm/linux-syscalls1.c b/libgloss/arm/linux-syscalls1.c new file mode 100644 index 000000000..5a94a9e53 --- /dev/null +++ b/libgloss/arm/linux-syscalls1.c @@ -0,0 +1,64 @@ +/** Linux system call interface. + * Written by Shaun Jackman <sjackman@gmail.com>. + * Copyright 2006 Pathway Connectivity + * + * Permission to use, copy, modify, and distribute this software + * is freely granted, provided that this notice is preserved. + */ + +#include <errno.h> +#include <stdint.h> + +extern char _end[]; +static void *curbrk = _end; + +extern void *_brk(void *addr); + +int brk(void *addr) +{ + void *newbrk; + if (curbrk == addr) + return 0; + newbrk = _brk(addr); + curbrk = newbrk; + if (newbrk < addr) { + errno = ENOMEM; + return -1; + } + return 0; +} + +void *_sbrk(intptr_t incr) +{ + void *oldbrk = curbrk; + if (brk(oldbrk + incr) == -1) + return (void *)-1; + return oldbrk; +} + +void *sbrk(intptr_t incr) __attribute__((alias("_sbrk"))); + +int _set_errno(int n) +{ + if (n < 0) { + errno = -n; + return -1; + } + return n; +} + +#include <sys/wait.h> + +struct rusage; + +pid_t wait4(pid_t pid, int *status, int options, struct rusage *rusage); + +pid_t _wait(int *status) +{ + return wait4(-1, status, 0, NULL); +} + +pid_t waitpid(pid_t pid, int *status, int options) +{ + return wait4(pid, status, options, NULL); +} |