summaryrefslogtreecommitdiffstats
path: root/perl-install/c
diff options
context:
space:
mode:
authorThierry Vignaud <tv@mageia.org>2011-11-22 20:35:24 +0000
committerThierry Vignaud <tv@mageia.org>2011-11-22 20:35:24 +0000
commit2dc4936b88c5195f48a13514f9e38d77b15a8fe0 (patch)
treedad865fd37f15c555c776113036e8ec4d3226f55 /perl-install/c
parent66f668733c6dd2053ac371ba3201c2fb8c32a6f1 (diff)
downloaddrakx-backup-do-not-use-2dc4936b88c5195f48a13514f9e38d77b15a8fe0.tar
drakx-backup-do-not-use-2dc4936b88c5195f48a13514f9e38d77b15a8fe0.tar.gz
drakx-backup-do-not-use-2dc4936b88c5195f48a13514f9e38d77b15a8fe0.tar.bz2
drakx-backup-do-not-use-2dc4936b88c5195f48a13514f9e38d77b15a8fe0.tar.xz
drakx-backup-do-not-use-2dc4936b88c5195f48a13514f9e38d77b15a8fe0.zip
(C_backtrace) introduce it in order to get a better GDB trace
Diffstat (limited to 'perl-install/c')
-rwxr-xr-xperl-install/c/stuff.xs.pl29
1 files changed, 29 insertions, 0 deletions
diff --git a/perl-install/c/stuff.xs.pl b/perl-install/c/stuff.xs.pl
index 1dbc9686a..d3dfd41ab 100755
--- a/perl-install/c/stuff.xs.pl
+++ b/perl-install/c/stuff.xs.pl
@@ -37,6 +37,7 @@ print '
#include <netinet/in.h>
#include <linux/sockios.h>
#include <linux/input.h>
+#include <execinfo.h>
// for ethtool structs:
typedef unsigned long long u64;
@@ -701,6 +702,34 @@ disk_add_partition(char * device_path, double start, double length, const char *
OUTPUT:
RETVAL
+#define BACKTRACE_DEPTH 20
+
+
+char*
+C_backtrace()
+ CODE:
+ static char buf[1024];
+ int nAddresses, i;
+ unsigned long idx = 0;
+ void * addresses[BACKTRACE_DEPTH];
+ char ** symbols = NULL;
+ nAddresses = backtrace(addresses, BACKTRACE_DEPTH);
+ symbols = backtrace_symbols(addresses, nAddresses);
+ if (symbols == NULL) {
+ idx += sprintf(buf+idx, "ERROR: Retrieving symbols failed.\n");
+ } else {
+ fprintf(stderr, "HERE 5\n");
+ /* dump stack trace */
+ for (i = 0; i < nAddresses; ++i)
+ idx += sprintf(buf+idx, "%d: %s\n", i, symbols[i]);
+ }
+ RETVAL = strdup(buf);
+ OUTPUT:
+ RETVAL
+
+
+
+
';
@macros = (