#### 9.29.6 Profiling Capability

It is a performance hit to use gcc’s profiling approach for this tiny target. Even more – jtag hardware facility does not perform any profiling functions. However we’ve got gdb’s built-in simulator where we can do anything.

We define new section ‘`.profiler`’ which holds all profiling information. We define new pseudo operation ‘`.profiler`’ which will instruct assembler to add new profile entry to the object file. Profile should take place at the present address.

Pseudo operation format:

‘`.profiler flags,function_to_profile [, cycle_corrector, extra]`’

where:

    ‘`flags`’ is a combination of the following characters:

  `s`

    function entry

  `x`

    function exit

  `i`

    function is in init section

  `f`

    function is in fini section

  `l`

    library call

  `c`

    libc standard call

  `d`

    stack value demand

  `I`

    interrupt service routine

  `P`

    prologue start

  `p`

    prologue end

  `E`

    epilogue start

  `e`

    epilogue end

  `j`

    long jump / sjlj unwind

  `a`

    an arbitrary code fragment

  `t`

    extra parameter saved (a constant value like frame size)

`function_to_profile`

  a function address

`cycle_corrector`

  a value which should be added to the cycle counter, zero if omitted.

`extra`

  any extra parameter, zero if omitted.

For example:

    .global fxx
    .type fxx,@function
    fxx:
    .LFrameOffset_fxx=0x08
    .profiler "scdP", fxx     ; function entry.
    			  ; we also demand stack value to be saved
      push r11
      push r10
      push r9
      push r8
    .profiler "cdpt",fxx,0, .LFrameOffset_fxx  ; check stack value at this point
    					  ; (this is a prologue end)
    					  ; note, that spare var filled with
    					  ; the farme size
      mov r15,r8
    ...
    .profiler cdE,fxx         ; check stack
      pop r8
      pop r9
      pop r10
      pop r11
    .profiler xcde,fxx,3      ; exit adds 3 to the cycle counter
      ret                     ; cause 'ret' insn takes 3 cycles