1/* $OpenBSD: sbrk.S,v 1.4 2022/12/03 15:02:30 jca Exp $ */ 2/* 3 * Copyright (c) 2021 Dale Rahn <drahn@openbsd.org> 4 * 5 * Permission to use, copy, modify, and distribute this software for any 6 * purpose with or without fee is hereby granted, provided that the above 7 * copyright notice and this permission notice appear in all copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 */ 17 18#include "SYS.h" 19 20 .extern _end 21 22 .data 23 .align 3 24 .globl __curbrk 25 .hidden __curbrk 26 .type __curbrk,@object 27__curbrk: 28 .dword _end 29 END(__curbrk) 30 31ENTRY_NB(sbrk) 32 RETGUARD_SETUP(sbrk, t6) 33 34 lla t1, __curbrk 35 ld a2, 0(t1) 36 add a0, a0, a2 // compute current break 37 mv t3, a0 38 SYSTRAP(break) 39 beqz t0, .L_sbrk_ok 40 sw a0, TP_OFFSET_ERRNO(tp) 41 li a0, -1 42 j .L_sbrk_fail 43.L_sbrk_ok: 44 sd t3, 0(t1) // save current val of curbrk from above 45 mv a0, a2 // return old val of curbrk from above 46.L_sbrk_fail: 47 RETGUARD_CHECK(sbrk, t6); 48 ret 49END(sbrk) 50 .weak sbrk 51