sbrk.S revision 1.5
1#include "SYS.h" 2 3 .data 4 .globl _end 5 .globl _ASM_LABEL(__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, _ASM_LABEL(__curbrk)@H 19 ori 6, 6, _ASM_LABEL(__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