sbrk.S revision 1.7 1 /* $NetBSD: sbrk.S,v 1.7 2000/06/23 15:40:38 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 #ifdef WEAK_ALIAS
18 ENTRY(_sbrk)
19 #else
20 ENTRY(sbrk)
21 #endif
22 #ifdef PIC
23 mflr 10
24 bl _GLOBAL_OFFSET_TABLE_@local-4
25 mflr 5
26 mtlr 10
27 lwz 5,_C_LABEL(__curbrk)@got(5)
28 lwz 6,0(5)
29 #else
30 lis 5,_C_LABEL(__curbrk)@ha
31 lwz 6,_C_LABEL(__curbrk)@l(5) # r6 = old break
32 #endif
33 add 3,3,6
34 mr 7,3 # r7 = new break
35 li 0,SYS_break
36 sc # break(new_break)
37 bso 1f
38 mr 3,6 # set return value
39 #ifdef PIC
40 stw 7,0(5)
41 #else
42 stw 7,_C_LABEL(__curbrk)@l(5) # record new break
43 #endif
44 blr
45 1:
46 b PIC_PLT(_C_LABEL(__cerror))
47