diff options
Diffstat (limited to 'lib/libc/arm')
-rw-r--r-- | lib/libc/arm/sys/brk.S | 18 | ||||
-rw-r--r-- | lib/libc/arm/sys/sbrk.S | 17 |
2 files changed, 9 insertions, 26 deletions
diff --git a/lib/libc/arm/sys/brk.S b/lib/libc/arm/sys/brk.S index f3d8d87..e5f8336 100644 --- a/lib/libc/arm/sys/brk.S +++ b/lib/libc/arm/sys/brk.S @@ -53,16 +53,10 @@ _C_LABEL(minbrk): * Change the data segment size */ ENTRY(_brk) -#ifdef PIC /* Setup the GOT */ - ldr r3, .Lgot - add r3, pc, r3 -.L1: - ldr r1, .Lminbrk - ldr r1, [r3, r1] -#else - ldr r1, .Lminbrk -#endif + GOT_INIT(r3, .Lgot, .L1) + GOT_GET(r1, r3, .Lminbrk) + /* Get the minimum allowable brk address */ ldr r1, [r1] @@ -71,6 +65,7 @@ ENTRY(_brk) * if the address is below minbrk. */ cmp r0, r1 + it lt movlt r0, r1 mov r2, r0 SYSTRAP(break) @@ -90,10 +85,7 @@ ENTRY(_brk) RET .align 2 -#ifdef PIC -.Lgot: - .word _GLOBAL_OFFSET_TABLE_ - (.L1+4) -#endif + GOT_INITSYM(.Lgot, .L1) .Lminbrk: .word PIC_SYM(_C_LABEL(minbrk), GOT) .Lcurbrk: diff --git a/lib/libc/arm/sys/sbrk.S b/lib/libc/arm/sys/sbrk.S index 7d22aa7..5cd9a03 100644 --- a/lib/libc/arm/sys/sbrk.S +++ b/lib/libc/arm/sys/sbrk.S @@ -52,16 +52,10 @@ CURBRK: * Change the data segment size */ ENTRY(_sbrk) -#ifdef PIC /* Setup the GOT */ - ldr r3, .Lgot - add r3, pc, r3 -.L1: - ldr r2, .Lcurbrk - ldr r2, [r3, r2] -#else - ldr r2, .Lcurbrk -#endif + GOT_INIT(r3, .Lgot, .L1) + GOT_GET(r2, r3, .Lcurbrk) + /* Get the current brk address */ ldr r1, [r2] @@ -80,10 +74,7 @@ ENTRY(_sbrk) RET .align 0 -#ifdef PIC -.Lgot: - .word _GLOBAL_OFFSET_TABLE_ - (.L1+4) -#endif + GOT_INITSYM(.Lgot, .L1) .Lcurbrk: .word PIC_SYM(CURBRK, GOT) END(_sbrk) |