xref: /netbsd-src/lib/libc/arch/powerpc/sys/sbrk.S (revision 38dcdc34d982bf8ab9a66b4b5b2e99311457ea36)
1*38dcdc34Smatt/*	$NetBSD: sbrk.S,v 1.13 2014/08/23 02:24:22 matt Exp $	*/
25ef4bdf6Sthorpej
35ef4bdf6Sthorpej#include "SYS.h"
45ef4bdf6Sthorpej
5cf88c389Smatt#if defined(LIBC_SCCS) && !defined(lint)
6*38dcdc34Smatt__RCSID("$NetBSD: sbrk.S,v 1.13 2014/08/23 02:24:22 matt Exp $")
7cf88c389Smatt#endif /* LIBC_SCCS && !lint */
8cf88c389Smatt
9*38dcdc34Smatt	.hidden	_C_LABEL(__curbrk)
106348b7d5Skleink	.globl	_C_LABEL(__curbrk)
115ef4bdf6Sthorpej
1203f996bdSkleink#ifdef WEAK_ALIAS
1303f996bdSkleinkWEAK_ALIAS(sbrk, _sbrk)
1403f996bdSkleink#endif
1503f996bdSkleink
1603f996bdSkleinkENTRY(_sbrk)
174d12bfcdSjoerg#ifdef __PIC__
18*38dcdc34Smatt	mflr	%r0
19*38dcdc34Smatt	bcl	20,31,.LPIC0
20*38dcdc34Smatt.LPIC0:	mflr	%r5
21*38dcdc34Smatt	mtlr	%r0
22*38dcdc34Smatt	addis	%r8,%r5,(_C_LABEL(__curbrk)-.LPIC0)@ha
23*38dcdc34Smatt	ldptru	%r6,(_C_LABEL(__curbrk)-.LPIC0)@l(%r8)
245ef4bdf6Sthorpej#else
25*38dcdc34Smatt	lis	%r8,_C_LABEL(__curbrk)@ha
26*38dcdc34Smatt	ldptru	%r6,_C_LABEL(__curbrk)@l(%r8)	# r6 = old break, r5 = &curbrk
27106908bdStsubai#endif
281cddd41eSmatt	add	%r3,%r3,%r6
291cddd41eSmatt	mr	%r7,%r3				# r7 = new break
30cf88c389Smatt	_DOSYSCALL(break)			# break(new_break)
315ef4bdf6Sthorpej	bso	1f
321cddd41eSmatt	mr	%r3,%r6				# set return value
33*38dcdc34Smatt	stptr	%r7,0(%r8)			# record new break
345ef4bdf6Sthorpej	blr
355ef4bdf6Sthorpej1:
36*38dcdc34Smatt	BRANCH_TO_CERROR()
37cf88c389SmattEND(_sbrk)
38