diff options
author | Christopher Faylor <me@cgf.cx> | 2000-02-17 22:39:52 +0300 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2000-02-17 22:39:52 +0300 |
commit | 8a0efa53e44919bcf5ccb1d3353618a82afdf8bc (patch) | |
tree | 68c3dbf3f2c6fd5d49777def9914d77b5cd4589d /newlib/libc/sys/sparc64/sbrk.S | |
parent | 1fd5e000ace55b323124c7e556a7a864b972a5c4 (diff) |
import newlib-2000-02-17 snapshot
Diffstat (limited to 'newlib/libc/sys/sparc64/sbrk.S')
-rw-r--r-- | newlib/libc/sys/sparc64/sbrk.S | 78 |
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 |