common: add print_trace() for backtracing
authorBrian Norris <banorris@uci.edu>
Thu, 13 Sep 2012 21:47:23 +0000 (14:47 -0700)
committerBrian Norris <banorris@uci.edu>
Thu, 13 Sep 2012 21:47:23 +0000 (14:47 -0700)
Makefile
common.cc [new file with mode: 0644]
common.h

index 2bd61ce26c0c13b7f87798b671869fea9fc49a6d..f6a0837eea4e38f076da313859eeedff14eaf6d9 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -3,9 +3,9 @@ include common.mk
 OBJECTS = libthreads.o schedule.o model.o threads.o librace.o action.o \
          nodestack.o clockvector.o main.o snapshot-interface.o cyclegraph.o \
          datarace.o impatomic.o cmodelint.o \
 OBJECTS = libthreads.o schedule.o model.o threads.o librace.o action.o \
          nodestack.o clockvector.o main.o snapshot-interface.o cyclegraph.o \
          datarace.o impatomic.o cmodelint.o \
-         snapshot.o malloc.o mymemory.o
+         snapshot.o malloc.o mymemory.o common.o
 
 
-CPPFLAGS += -Iinclude -I.
+CPPFLAGS += -Iinclude -I. -rdynamic
 LDFLAGS = -ldl -lrt
 SHARED = -shared
 
 LDFLAGS = -ldl -lrt
 SHARED = -shared
 
diff --git a/common.cc b/common.cc
new file mode 100644 (file)
index 0000000..8cb649b
--- /dev/null
+++ b/common.cc
@@ -0,0 +1,25 @@
+#include <execinfo.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "common.h"
+
+#define MAX_TRACE_LEN 100
+
+/** Print a backtrace of the current program state. */
+void print_trace(void)
+{
+       void *array[MAX_TRACE_LEN];
+       char **strings;
+       int size, i;
+
+       size = backtrace(array, MAX_TRACE_LEN);
+       strings = backtrace_symbols(array, size);
+
+       printf("\nDumping stack trace (%d frames):\n", size);
+
+       for (i = 0; i < size; i++)
+               printf("\t%s\n", strings[i]);
+
+       free(strings);
+}
index 017cb4f99dd2adba81301d185efb89405cfab79e..80bc9ad6e8c6977fb3622b8754c1982cf64c25f5 100644 (file)
--- a/common.h
+++ b/common.h
@@ -28,4 +28,6 @@ do { \
 
 #define error_msg(...) fprintf(stderr, "Error: " __VA_ARGS__)
 
 
 #define error_msg(...) fprintf(stderr, "Error: " __VA_ARGS__)
 
+void print_trace(void);
+
 #endif /* __COMMON_H__ */
 #endif /* __COMMON_H__ */