Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'newlib/libc/sys/sparc64/sbrk.S')
-rw-r--r--newlib/libc/sys/sparc64/sbrk.S78
1 files changed, 78 insertions, 0 deletions
diff --git a/newlib/libc/sys/sparc64/sbrk.S b/newlib/libc/sys/sparc64/sbrk.S
new file mode 100644
index 000000000..bff72fa81
--- /dev/null
+++ b/newlib/libc/sys/sparc64/sbrk.S
@@ -0,0 +1,78 @@
+! sbrk() system call
+
+#include "sys/syscallasm.h"
+
+ DATA_SECTION
+ ALIGN (4)
+
+! CURBRK contains the current top of allocated space.
+! END is a private symbol in svr4, but a public one in sunos4.
+! FIXME: CURBRK is 4 bytes for now.
+
+
+ GLOBAL (ASM_PRIVATE_SYMBOL (curbrk))
+ASM_PRIVATE_SYMBOL (curbrk):
+#ifdef __svr4__
+ WORD (ASM_PRIVATE_SYMBOL (end))
+#else
+ WORD (ASM_SYMBOL (end))
+#endif
+
+ TEXT_SECTION
+ ALIGN (4)
+#ifdef REENT
+ GLOBAL (ASM_SYMBOL (_sbrk_r))
+ASM_SYMBOL (_sbrk_r):
+ mov %o0,%o5
+ mov %o1,%o0
+#else
+ GLOBAL (ASM_SYMBOL (sbrk))
+ASM_SYMBOL (sbrk):
+#endif
+ add %o0,7,%o0
+ andn %o0,7,%o0
+ sethi %hi (ASM_PRIVATE_SYMBOL (curbrk)),%o2
+ lduw [%o2+%lo (ASM_PRIVATE_SYMBOL (curbrk))],%o3
+ add %o3,7,%o3
+ andn %o3,7,%o3
+ add %o3,%o0,%o0
+ mov %o0,%o4
+ mov SYS_brk,%g1
+ ta SYSCALL_TRAP
+ bcs err
+ nop
+ stw %o4,[%o2+%lo (ASM_PRIVATE_SYMBOL (curbrk))]
+ jmpl %o7+8,%g0
+ mov %o3,%o0
+
+#ifdef REENT
+ GLOBAL (ASM_SYMBOL (_brk_r))
+ASM_SYMBOL (_brk_r):
+ mov %o0,%o5
+ mov %o1,%o0
+#else
+ GLOBAL (ASM_SYMBOL (brk))
+ASM_SYMBOL (brk):
+#endif
+ add %o0,7,%o0
+ andn %o0,7,%o0
+ mov %o0,%o2
+ mov SYS_brk,%g1
+ ta SYSCALL_TRAP
+ bcs err
+ nop
+ sethi %hi (ASM_PRIVATE_SYMBOL (curbrk)),%o3
+ st %o2,[%o3+%lo (ASM_PRIVATE_SYMBOL (curbrk))]
+ retl
+ mov %g0,%o0
+
+err:
+#ifdef REENT
+ sethi %hi (ASM_PRIVATE_SYMBOL (cerror_r)),%g1
+ or %g1,%lo (ASM_PRIVATE_SYMBOL (cerror_r)),%g1
+#else
+ sethi %hi (ASM_PRIVATE_SYMBOL (cerror)),%g1
+ or %g1,%lo (ASM_PRIVATE_SYMBOL (cerror)),%g1
+#endif
+ jmpl %g1,%g0
+ mov %o5,%o1