sbrk.S revision 1.3
1#include "SYS.h"
2
3	.data
4	.globl _end
5	.globl curbrk
6	.globl minbrk
7_ASM_LABEL(curbrk):
8	.long _C_LABEL(end)
9_ASM_LABEL(minbrk):
10	.long _C_LABEL(end)
11
12
13	.text
14PREFIX2(sbrk,break)
15
16	/* call break(curbrk + size) */
17#ifndef PIC
18	addis	6, 0, curbrk@H
19	ori	6, 6, curbrk@L	/* # 6 = &curbrk */
20#else
21	mflr	10
22	bl	_GLOBAL_OFFSET_TABLE_@local-4
23	mflr	9
24	mtlr	10
25	lwz	6,_ASM_LABEL(curbrk)@got(9)
26#endif
27	lwz	5, 0(6)		/* # 5 = *6 (old_curbrk) */
28	add	3, 5, 3		/* # 3 = new_curbrk */
29	mr	7, 3
30
31	sc
32
33	/* check for error */
34	cmpwi	0, 0
35	beq+	.L_sbrk_ok
36	b	PIC_PLT(_ASM_LABEL(cerror))
37
38	/* update, curbrk and return */
39.L_sbrk_ok:
40	stw	7, 0(6)		/* # remember, 6=&curbrk, 7=new_curbrk */
41	mr	3, 5		/* # remember, 5=old_curbrk */
42	blr
43