brk.S revision 1.1
11.1Sross/* $NetBSD: brk.S,v 1.1 2006/07/01 16:37:20 ross Exp $ */ 21.1Sross 31.1Sross#include "SYS.h" 41.1Sross 51.1Sross .globl _C_LABEL(__curbrk) 61.1Sross .globl _C_LABEL(__minbrk) 71.1Sross .globl _C_LABEL(_end) 81.1Sross 91.1Sross#ifdef WEAK_ALIAS 101.1SrossWEAK_ALIAS(brk, _brk) 111.1Sross#endif 121.1Sross 131.1Sross .data 141.1Sross_C_LABEL(__minbrk): 151.1Sross .long _C_LABEL(_end) # XXX not used yet 161.1Sross 171.1Sross .text 181.1Sross 191.1SrossENTRY(_brk) 201.1Sross#ifdef PIC 211.1Sross mflr %r10 221.1Sross bl _GLOBAL_OFFSET_TABLE_@local-4 231.1Sross mflr %r9 241.1Sross mtlr %r10 251.1Sross lwz %r5,_C_LABEL(_end)@got(%r9) 261.1Sross#else 271.1Sross lis %r5,_C_LABEL(_end)@ha # r5 = &_end 281.1Sross addi %r5,%r5,_C_LABEL(_end)@l 291.1Sross#endif 301.1Sross cmplw %r5,%r3 # if (&_end <= r3) 311.1Sross bgt 0f 321.1Sross mr %r5,%r3 # r5 = r3 331.1Sross0: 341.1Sross mr %r3,%r5 # new break value 351.1Sross li %r0,SYS_break 361.1Sross sc # assume, that r5 is kept 371.1Sross bso 1f 381.1Sross#ifdef PIC 391.1Sross lwz %r6,_C_LABEL(__curbrk)@got(%r9) 401.1Sross stw %r5,0(%r6) 411.1Sross#else 421.1Sross lis %r6,_C_LABEL(__curbrk)@ha # record new break 431.1Sross stw %r5,_C_LABEL(__curbrk)@l(%r6) 441.1Sross#endif 451.1Sross blr # return 0 461.1Sross 471.1Sross1: 481.1Sross b PIC_PLT(_C_LABEL(__cerror)) 49