1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
/*
* profiler.S
* Implements the gprof profiler arc counting function.
* Created on: 06.08.2015
* Author: Erich Styger
*/
.syntax unified
.arch armv7-m
.globl __gnu_mcount_nc
.type __gnu_mcount_nc, %function
__gnu_mcount_nc:
#if 0 /* dummy version, doing nothing */
mov ip, lr
pop { lr }
bx ip
#else
push {r0, r1, r2, r3, lr} /* save registers */
bic r1, lr, #1 /* R1 contains callee address, with thumb bit cleared */
ldr r0, [sp, #20] /* R0 contains caller address */
bic r0, r0, #1 /* clear thumb bit */
bl _mcount_internal /* jump to internal _mcount() implementation */
pop {r0, r1, r2, r3, ip, lr} /* restore saved registers */
bx ip /* return to caller */
#endif
|