sbrk.S revision 1.4 1 /* $NetBSD: sbrk.S,v 1.4 1998/11/24 11:14:57 tsubai Exp $ */
2
3 #include "SYS.h"
4
5 .globl _C_LABEL(end)
6 .globl _ASM_LABEL(curbrk)
7
8 .data
9 _ASM_LABEL(curbrk):
10 .long _C_LABEL(end)
11 .text
12
13 ENTRY(sbrk)
14 #ifdef PIC
15 mflr 10
16 bl _GLOBAL_OFFSET_TABLE_@local-4
17 mflr 5
18 mtlr 10
19 lwz 5,_ASM_LABEL(curbrk)@got(5)
20 lwz 6,0(5)
21 #else
22 lis 5,_ASM_LABEL(curbrk)@ha
23 lwz 6,_ASM_LABEL(curbrk)@l(5) # r6 = old break
24 #endif
25 add 3,3,6
26 mr 7,3 # r7 = new break
27 li 0,SYS_break
28 sc # break(new_break)
29 bso 1f
30 mr 3,6 # set return value
31 #ifdef PIC
32 stw 7,0(5)
33 #else
34 stw 7,_ASM_LABEL(curbrk)@l(5) # record new break
35 #endif
36 blr
37 1:
38 b PIC_PLT(_ASM_LABEL(cerror))
39