blob: 26712490cb51a99eee87be085eda0a14030d53b1 [file] [log] [blame]
<html lang="en">
<head>
<title>MSP430 Profiling Capability - Using as</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="Using as">
<meta name="generator" content="makeinfo 4.13">
<link title="Top" rel="start" href="index.html#Top">
<link rel="up" href="MSP430_002dDependent.html#MSP430_002dDependent" title="MSP430-Dependent">
<link rel="prev" href="MSP430-Opcodes.html#MSP430-Opcodes" title="MSP430 Opcodes">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
This file documents the GNU Assembler "as".
Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
2000, 2001, 2002, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, with no Front-Cover Texts, and with no
Back-Cover Texts. A copy of the license is included in the
section entitled ``GNU Free Documentation License''.
-->
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css"><!--
pre.display { font-family:inherit }
pre.format { font-family:inherit }
pre.smalldisplay { font-family:inherit; font-size:smaller }
pre.smallformat { font-family:inherit; font-size:smaller }
pre.smallexample { font-size:smaller }
pre.smalllisp { font-size:smaller }
span.sc { font-variant:small-caps }
span.roman { font-family:serif; font-weight:normal; }
span.sansserif { font-family:sans-serif; font-weight:normal; }
--></style>
<link rel="stylesheet" type="text/css" href="../cs.css">
</head>
<body>
<div class="node">
<a name="MSP430-Profiling-Capability"></a>
<p>
Previous:&nbsp;<a rel="previous" accesskey="p" href="MSP430-Opcodes.html#MSP430-Opcodes">MSP430 Opcodes</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="MSP430_002dDependent.html#MSP430_002dDependent">MSP430-Dependent</a>
<hr>
</div>
<h4 class="subsection">9.26.6 Profiling Capability</h4>
<p><a name="index-MSP-430-profiling-capability-1404"></a><a name="index-profiling-capability-for-MSP-430-1405"></a>It is a performance hit to use gcc's profiling approach for this tiny target.
Even more &ndash; jtag hardware facility does not perform any profiling functions.
However we've got gdb's built-in simulator where we can do anything.
<p>We define new section &lsquo;<samp><span class="samp">.profiler</span></samp>&rsquo; which holds all profiling information.
We define new pseudo operation &lsquo;<samp><span class="samp">.profiler</span></samp>&rsquo; which will instruct assembler to
add new profile entry to the object file. Profile should take place at the
present address.
<p>Pseudo operation format:
<p>&lsquo;<samp><span class="samp">.profiler flags,function_to_profile [, cycle_corrector, extra]</span></samp>&rsquo;
<p>where:
<dl>
<dl>
&lsquo;<samp><span class="samp">flags</span></samp>&rsquo; is a combination of the following characters:
<dt><code>s</code><dd>function entry
<br><dt><code>x</code><dd>function exit
<br><dt><code>i</code><dd>function is in init section
<br><dt><code>f</code><dd>function is in fini section
<br><dt><code>l</code><dd>library call
<br><dt><code>c</code><dd>libc standard call
<br><dt><code>d</code><dd>stack value demand
<br><dt><code>I</code><dd>interrupt service routine
<br><dt><code>P</code><dd>prologue start
<br><dt><code>p</code><dd>prologue end
<br><dt><code>E</code><dd>epilogue start
<br><dt><code>e</code><dd>epilogue end
<br><dt><code>j</code><dd>long jump / sjlj unwind
<br><dt><code>a</code><dd>an arbitrary code fragment
<br><dt><code>t</code><dd>extra parameter saved (a constant value like frame size)
</dl>
<br><dt><code>function_to_profile</code><dd>a function address
<br><dt><code>cycle_corrector</code><dd>a value which should be added to the cycle counter, zero if omitted.
<br><dt><code>extra</code><dd>any extra parameter, zero if omitted.
</dl>
<p>For example:
<pre class="smallexample"> .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
</pre>
<!-- Copyright 2001, 2002, 2006 Free Software Foundation, Inc. -->
<!-- This is part of the GAS manual. -->
<!-- For copying conditions, see the file as.texinfo. -->
</body></html>