aboutsummaryrefslogtreecommitdiff
path: root/instrument.c
diff options
context:
space:
mode:
Diffstat (limited to 'instrument.c')
-rw-r--r--instrument.c55
1 files changed, 55 insertions, 0 deletions
diff --git a/instrument.c b/instrument.c
new file mode 100644
index 0000000..4c9dfa0
--- /dev/null
+++ b/instrument.c
@@ -0,0 +1,55 @@
+/* $Id$ */
+/********************************************************************
+ * File: instrument.c
+ *
+ * Instrumentation source -- link this with your application, and
+ * then execute to build trace data file (trace.txt).
+ *
+ * Author: M. Tim Jones <mtj@mtjones.com>
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+/* Function prototypes with attributes */
+void main_constructor( void )
+ __attribute__ ((no_instrument_function, constructor));
+
+void main_destructor( void )
+ __attribute__ ((no_instrument_function, destructor));
+
+void __cyg_profile_func_enter( void *, void * )
+ __attribute__ ((no_instrument_function));
+
+void __cyg_profile_func_exit( void *, void * )
+ __attribute__ ((no_instrument_function));
+
+
+static FILE *fp;
+
+
+void main_constructor( void )
+{
+ fp = fopen( "trace.txt", "w" );
+ if (fp == NULL) exit(-1);
+}
+
+
+void main_deconstructor( void )
+{
+ fclose( fp );
+}
+
+
+void __cyg_profile_func_enter( void *this, void *callsite )
+{
+ fprintf(fp, "E%p\n", (int *)this);
+}
+
+
+void __cyg_profile_func_exit( void *this, void *callsite )
+{
+ fprintf(fp, "X%p\n", (int *)this);
+}
+