aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorAndrew Turner <andrew@FreeBSD.org>2015-07-02 14:54:21 +0000
committerAndrew Turner <andrew@FreeBSD.org>2015-07-02 14:54:21 +0000
commit74735cf1880a87da94c6fa0fdac56dd90b773818 (patch)
tree46a0a483da8bc9174498720e389c8429cf0ee5b9 /lib
parent4ed220cdd7e05fde142b9bdc1ac373e3eb37f24f (diff)
downloadsrc-74735cf1880a87da94c6fa0fdac56dd90b773818.tar.gz
src-74735cf1880a87da94c6fa0fdac56dd90b773818.zip
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
Notes
Notes: svn path=/head/; revision=285043
Diffstat (limited to 'lib')
-rw-r--r--lib/libc/aarch64/Symbol.map1
-rw-r--r--lib/libc/aarch64/sys/brk.S29
-rw-r--r--lib/libc/aarch64/sys/sbrk.S19
3 files changed, 13 insertions, 36 deletions
diff --git a/lib/libc/aarch64/Symbol.map b/lib/libc/aarch64/Symbol.map
index d0056ef65b30..3d8ad2525596 100644
--- a/lib/libc/aarch64/Symbol.map
+++ b/lib/libc/aarch64/Symbol.map
@@ -28,6 +28,7 @@ FBSD_1.0 {
FBSDprivate_1.0 {
_set_tp;
+ _end;
curbrk;
minbrk;
};
diff --git a/lib/libc/aarch64/sys/brk.S b/lib/libc/aarch64/sys/brk.S
index 09167b60b00b..1e9a2156476f 100644
--- a/lib/libc/aarch64/sys/brk.S
+++ b/lib/libc/aarch64/sys/brk.S
@@ -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)
diff --git a/lib/libc/aarch64/sys/sbrk.S b/lib/libc/aarch64/sys/sbrk.S
index db9d7e1f7bc8..4880cc2a8c9d 100644
--- a/lib/libc/aarch64/sys/sbrk.S
+++ b/lib/libc/aarch64/sys/sbrk.S
@@ -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)