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