Add function marks and size indications
Add a macro to annotate function end and start using both ENTRY and END
for each function. This allows valgrind (and presumably other debugging
tools) to use the debug symbols to trace the functions.
Change-Id: I5f09cef8e22fb356eb6f5cee952b031e567599b6
diff --git a/libc/arch-arm/bionic/atomics_arm.S b/libc/arch-arm/bionic/atomics_arm.S
index d94f6b1..4d9cbcf 100644
--- a/libc/arch-arm/bionic/atomics_arm.S
+++ b/libc/arch-arm/bionic/atomics_arm.S
@@ -26,17 +26,9 @@
* SUCH DAMAGE.
*/
#include <sys/linux-syscalls.h>
+#include <machine/asm.h>
#include <machine/cpu-features.h>
-.global __atomic_cmpxchg
-.type __atomic_cmpxchg, %function
-.global __atomic_swap
-.type __atomic_swap, %function
-.global __atomic_dec
-.type __atomic_dec, %function
-.global __atomic_inc
-.type __atomic_inc, %function
-
#define FUTEX_WAIT 0
#define FUTEX_WAKE 1
@@ -48,8 +40,7 @@
*/
/* r0(addr) -> r0(old) */
-__atomic_dec:
- .fnstart
+ENTRY(__atomic_dec)
mov r1, r0 @ copy addr so we don't clobber it
1: ldrex r0, [r1] @ load current value into r0
sub r2, r0, #1 @ generate new value into r2
@@ -57,11 +48,10 @@
cmp r3, #0 @ success?
bxeq lr @ yes, return
b 1b @ no, retry
- .fnend
+END(__atomic_dec)
/* r0(addr) -> r0(old) */
-__atomic_inc:
- .fnstart
+ENTRY(__atomic_inc)
mov r1, r0
1: ldrex r0, [r1]
add r2, r0, #1
@@ -69,11 +59,10 @@
cmp r3, #0
bxeq lr
b 1b
- .fnend
+END(__atomic_inc)
/* r0(old) r1(new) r2(addr) -> r0(zero_if_succeeded) */
-__atomic_cmpxchg:
- .fnstart
+ENTRY(__atomic_cmpxchg)
1: mov ip, #2 @ ip=2 means "new != old"
ldrex r3, [r2] @ load current value into r3
teq r0, r3 @ new == old?
@@ -82,18 +71,17 @@
beq 1b @ yes, retry
mov r0, ip @ return 0 on success, 2 on failure
bx lr
- .fnend
+END(__atomic_cmpxchg)
/* r0(new) r1(addr) -> r0(old) */
-__atomic_swap:
- .fnstart
+ENTRY(__atomic_swap)
1: ldrex r2, [r1]
strex r3, r0, [r1]
teq r3, #0
bne 1b
mov r0, r2
bx lr
- .fnend
+END(__atomic_swap)
#else /*not defined __ARM_HAVE_LDREX_STREX*/
/*
@@ -107,8 +95,7 @@
.equ kernel_atomic_base, 0xFFFF0FFF
/* r0(addr) -> r0(old) */
-__atomic_dec:
- .fnstart
+ENTRY(__atomic_dec)
.save {r4, lr}
stmdb sp!, {r4, lr}
mov r2, r0
@@ -122,11 +109,10 @@
add r0, r1, #1
ldmia sp!, {r4, lr}
bx lr
- .fnend
+END(__atomic_dec)
/* r0(addr) -> r0(old) */
-__atomic_inc:
- .fnstart
+ENTRY(__atomic_inc)
.save {r4, lr}
stmdb sp!, {r4, lr}
mov r2, r0
@@ -140,11 +126,10 @@
sub r0, r1, #1
ldmia sp!, {r4, lr}
bx lr
- .fnend
+END(__atomic_inc)
/* r0(old) r1(new) r2(addr) -> r0(zero_if_succeeded) */
-__atomic_cmpxchg:
- .fnstart
+ENTRY(__atomic_cmpxchg)
.save {r4, lr}
stmdb sp!, {r4, lr}
mov r4, r0 /* r4 = save oldvalue */
@@ -160,14 +145,13 @@
2: @ atomic_cmpxchg
ldmia sp!, {r4, lr}
bx lr
- .fnend
+END(__atomic_cmpxchg)
/* r0(new) r1(addr) -> r0(old) */
-__atomic_swap:
- .fnstart
+ENTRY(__atomic_swap)
swp r0, r0, [r1]
bx lr
- .fnend
+END(__atomic_swap)
#endif /*not defined __ARM_HAVE_LDREX_STREX*/
@@ -191,18 +175,16 @@
#if __ARM_EABI__
-__futex_syscall3:
- .fnstart
+ENTRY(__futex_syscall3)
stmdb sp!, {r4, r7}
.save {r4, r7}
ldr r7, =__NR_futex
swi #0
ldmia sp!, {r4, r7}
bx lr
- .fnend
+END(__futex_syscall3)
-__futex_wait:
- .fnstart
+ENTRY(__futex_wait)
stmdb sp!, {r4, r7}
.save {r4, r7}
mov r3, r2
@@ -212,10 +194,9 @@
swi #0
ldmia sp!, {r4, r7}
bx lr
- .fnend
+END(__futex_wait)
-__futex_wake:
- .fnstart
+ENTRY(__futex_wake)
.save {r4, r7}
stmdb sp!, {r4, r7}
mov r2, r1
@@ -224,28 +205,32 @@
swi #0
ldmia sp!, {r4, r7}
bx lr
- .fnend
+END(__futex_wake)
#else
-__futex_syscall3:
+ENTRY(__futex_syscall3)
swi #__NR_futex
bx lr
+END(__futex_syscall3)
-__futex_wait:
+ENTRY(__futex_wait)
mov r3, r2
mov r2, r1
mov r1, #FUTEX_WAIT
swi #__NR_futex
bx lr
+END(__futex_wait)
-__futex_wake:
+ENTRY(__futex_wake)
mov r2, r1
mov r1, #FUTEX_WAKE
swi #__NR_futex
bx lr
+END(__futex_wake)
#endif
-__futex_syscall4:
+ENTRY(__futex_syscall4)
b __futex_syscall3
+END(__futex_syscall4)