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