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:
parent
31cff11378
commit
edb38c8190
@ -28,6 +28,7 @@ FBSD_1.0 {
|
||||
|
||||
FBSDprivate_1.0 {
|
||||
_set_tp;
|
||||
_end;
|
||||
curbrk;
|
||||
minbrk;
|
||||
};
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user