File:  [DVB] / dietlibc / arm / mcount.S
Revision 1.2: download - view: text, annotated - select for diffs
Tue Mar 29 15:56:32 2016 UTC (8 years, 2 months ago) by leitner
Branches: MAIN
CVS tags: HEAD
upstream Debian patches

#include "arm-features.h"
@
@ mcount.S: ARM assembler implementation of mcount
@
@ mcount builds the following stack frame:
@
@                  |             |
@                   -------------
@  sp on entry ->  |             |
@                   -------------
@  new fp ------>  | previous pc |
@                   -------------
@                  | previous lr |
@                   -------------
@                  | previous sp |
@                   -------------
@                  | previous fp |
@                   -------------
@                  | previous r3 |
@                   -------------
@                  | previous r2 |
@                   -------------
@                  | previous r1 |
@                   -------------
@  new sp -------> | previous r0 |
@                   -------------
@
@

FUNC_START	mcount
    mov     ip,  sp
    stmdb   sp!, { r0 - r3, fp, ip, lr, pc }    @ build stack frame
    sub     fp,  ip, #4                         @ setup new fp

    ldr     r0,  [fp, #-12]                     @ r0 = previous fp
    ldr     r0,  [r0, #-4 ]                     @ r0 = pc from caller of mcount caller
    mov     r1,  lr                             @ r1 = pc from mcount caller

    bl      __mcount                            @ call __mcount

    ldmdb   fp,  { r0 - r3, fp, sp, pc }        @ restore context from stack frame and return.
FUNC_END	mcount

LinuxTV legacy CVS <linuxtv.org/cvs>