Cleanup brk and sbrk to use the same code to find curbrk and minbrk when

both compiling for PIC and non-PIC.

Sponsored by:	ABT Systems Ltd
This commit is contained in:
Andrew Turner 2015-07-02 14:54:21 +00:00
parent 4ed220cdd7
commit 74735cf188
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=285043
3 changed files with 13 additions and 36 deletions

View File

@ -28,6 +28,7 @@ FBSD_1.0 {
FBSDprivate_1.0 {
_set_tp;
_end;
curbrk;
minbrk;
};

View File

@ -32,6 +32,8 @@ __FBSDID("$FreeBSD$");
#include "SYS.h"
.globl _C_LABEL(_end)
.data
.align 3
.globl _C_LABEL(minbrk)
@ -47,15 +49,8 @@ ENTRY(_brk)
WEAK_REFERENCE(_brk, brk)
/* Load the address of minbrk */
#ifdef __PIC__
adrp x2, :got:minbrk
ldr x3, [x2, #:got_lo12:minbrk]
#else
ldr x3, .Lminbrk
#endif
/* Get the minimum allowable brk address */
ldr x2, [x3]
adrp x3, minbrk
ldr x2, [x3, :lo12:minbrk]
/* Validate the address */
cmp x0, x2
@ -70,24 +65,12 @@ ENTRY(_brk)
_SYSCALL(break)
b.cs cerror
#ifdef __PIC__
adrp x2, :got:curbrk
ldr x3, [x2, #:got_lo12:curbrk]
#else
ldr x3, .Lcurbrk
#endif
/* Store the new curbrk value */
str x4, [x3]
adrp x2, curbrk
str x4, [x2, :lo12:curbrk]
/* Return success */
mov x0, #0
ret
#ifndef __PIC__
.Lcurbrk:
.quad _C_LABEL(curbrk)
.Lminbrk:
.quad _C_LABEL(minbrk)
#endif
END(_brk)

View File

@ -32,6 +32,8 @@ __FBSDID("$FreeBSD$");
#include "SYS.h"
.globl _C_LABEL(_end)
.data
.align 3
.global _C_LABEL(curbrk)
@ -47,15 +49,10 @@ ENTRY(_sbrk)
WEAK_REFERENCE(_sbrk, sbrk)
/* Load the address of curbrk */
#ifdef __PIC__
adrp x2, :got:curbrk
ldr x3, [x2, #:got_lo12:curbrk]
#else
ldr x3, .Lcurbrk
#endif
adrp x3, curbrk
/* Get the current brk address */
ldr x2, [x3]
ldr x2, [x3, :lo12:curbrk]
/* Calculate the new value */
add x0, x2, x0
@ -66,14 +63,10 @@ ENTRY(_sbrk)
b.cs cerror
/* Load the old value to return */
ldr x0, [x3]
ldr x0, [x3, :lo12:curbrk]
/* Store the new curbrk value */
str x4, [x3]
str x4, [x3, :lo12:curbrk]
ret
#ifndef __PIC__
.Lcurbrk:
.quad _C_LABEL(curbrk)
#endif
END(_sbrk)