misc: Add routine to generate backtrace from within the application

E.g. to analyze the subscr_get/subscr_put behavior one can place
the generate_backtrace into the functions, recompile and then filter
the output with contrib/bt.py to get the function name, file and line.
diff --git a/openbsc/src/gsm_utils.c b/openbsc/src/gsm_utils.c
index de18dba..ddfd7f3 100644
--- a/openbsc/src/gsm_utils.c
+++ b/openbsc/src/gsm_utils.c
@@ -23,8 +23,10 @@
 
 #include <openbsc/gsm_data.h>
 #include <openbsc/gsm_utils.h>
+#include <execinfo.h>
 #include <stdlib.h>
 #include <string.h>
+#include <stdio.h>
 #include <errno.h>
 
 /* GSM 03.38 6.2.1 Charachter packing */
@@ -148,4 +150,21 @@
 	return -EINVAL;
 }
 
+void generate_backtrace()
+{
+	int i, nptrs;
+	void *buffer[100];
+	char **strings;
 
+	nptrs = backtrace(buffer, ARRAY_SIZE(buffer));
+	printf("backtrace() returned %d addresses\n", nptrs);
+
+	strings = backtrace_symbols(buffer, nptrs);
+	if (!strings)
+		return;
+
+	for (i = 1; i < nptrs; i++)
+		printf("%s\n", strings[i]);
+
+	free(strings);
+}