diff options
author | Ranjith Kumaran <ranjith@cygnus.com> | 2000-03-18 01:48:54 +0300 |
---|---|---|
committer | Ranjith Kumaran <ranjith@cygnus.com> | 2000-03-18 01:48:54 +0300 |
commit | 03261851a10dd2d6900a0a00a7515a0a46fb5d76 (patch) | |
tree | 7c22ac6cbbc99fd5cd1b5426853be8d4fd7bfcf1 /libgloss/sparc/libsys/sbrk.S | |
parent | fae4c299f14fc23e2829c8656992eba21f79242a (diff) |
20000317 sourceware import
Diffstat (limited to 'libgloss/sparc/libsys/sbrk.S')
-rw-r--r-- | libgloss/sparc/libsys/sbrk.S | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/libgloss/sparc/libsys/sbrk.S b/libgloss/sparc/libsys/sbrk.S new file mode 100644 index 000000000..b86262161 --- /dev/null +++ b/libgloss/sparc/libsys/sbrk.S @@ -0,0 +1,66 @@ +! sbrk() system call + +#include "syscallasm.h" + + 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 +#ifdef __sparc_v9__ + lduw [%o2+%lo (ASM_PRIVATE_SYMBOL (curbrk))],%o3 +#else + ld [%o2+%lo (ASM_PRIVATE_SYMBOL (curbrk))],%o3 +#endif + 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 + st %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 |