aboutsummaryrefslogtreecommitdiff
path: root/nx-X11/util/memleak/find-rtns.sh
diff options
context:
space:
mode:
Diffstat (limited to 'nx-X11/util/memleak/find-rtns.sh')
-rw-r--r--nx-X11/util/memleak/find-rtns.sh50
1 files changed, 50 insertions, 0 deletions
diff --git a/nx-X11/util/memleak/find-rtns.sh b/nx-X11/util/memleak/find-rtns.sh
new file mode 100644
index 000000000..91431c770
--- /dev/null
+++ b/nx-X11/util/memleak/find-rtns.sh
@@ -0,0 +1,50 @@
+#!/bin/sh
+#
+# $Xorg: find-rtns.sh,v 1.3 2000/08/17 19:55:19 cpqbld Exp $
+#
+# find-routines - convert leak tracer stack traces into file/lineno traces
+# modified to work with the an unmodified version of
+# gdb-4.18
+#
+# Usage: find-routines <program-name> {leak-tracing-output-files}
+#
+# $XFree86$
+#
+
+TMP1=find-routine.tmp1
+TMP=find-routine.tmp
+trap "rm -f $TMP $TMP1" 0
+OBJ=$1
+shift
+echo 'set width 500' > $TMP1
+# To load shared libs set breakpoint and run
+echo 'break main' >> $TMP1
+echo 'r' >> $TMP1
+for i in `grep '\(return stack:\)\|\(allocated at\)' $* |
+ tr ' ' '\012' |
+ grep 0x | sort -u`;
+ do
+ echo 'x/i '$i >> $TMP1
+ echo 'i line * '$i >> $TMP1
+done
+
+cat $TMP1 | gdb $OBJ \
+ | awk '\
+ /^\(gdb\) \(?g?d?b?\)? ?0x[[:xdigit:]]*.*:.*/ \
+ {a = gensub(/^\(gdb\) \(?g?d?b?\)? ?(0x[[:xdigit:]]*).*:.*/,"\\1","G");\
+ b = gensub(/^\(gdb\) \(?g?d?b?\)? ?(0x[[:xdigit:]]*.*):.*/,"\\1","G");\
+ printf("s;%s;%s",a,b); next; } \
+ /.*No line.*/ \
+ {printf(";\n",a);next} \
+ /.*Line [[:digit:]]+.*/ \
+ {a = gensub(/.*(Line [[:digit:]]+ of .*) starts.*/,"\\1","G"); \
+ printf(" at %s;\n", a); next}'>> $TMP
+
+awk '/return stack/ { printf ("return stack\n");
+ for (i = 3; i <= NF; i++)
+ printf ("\troutine %s\n", $i); }
+ /allocated at/ { printf ("allocated at\n");
+ for (i = 3; i <= NF; i++)
+ printf ("\t\troutine %s\n", $i); }
+ /^[A-Z]/ { print }' $* |
+ sed -f $TMP