1 2004-11-23 Andrew Cagney <cagney@redhat.com>
3 * Makefile.in (uninstall-gstack, install-gstack): New rules, add
4 to install and uninstall.
5 * gstack.sh, gstack.1: New files.
7 Index: gdb-6.8.50.20090226/gdb/Makefile.in
8 ===================================================================
9 --- gdb-6.8.50.20090226.orig/gdb/Makefile.in 2009-02-26 22:09:59.000000000 +0100
10 +++ gdb-6.8.50.20090226/gdb/Makefile.in 2009-02-26 22:10:22.000000000 +0100
11 @@ -973,7 +973,7 @@ install: all install-only
13 # The "install-only" target also installs the syscalls' XML files in
15 -install-only: $(CONFIG_INSTALL) xml-syscall-install
16 +install-only: install-gstack $(CONFIG_INSTALL) xml-syscall-install
17 transformed_name=`t='$(program_transform_name)'; \
18 echo gdb | sed -e "$$t"` ; \
19 if test "x$$transformed_name" = x; then \
20 @@ -1005,9 +1005,26 @@ install-tui:
21 $(DESTDIR)$(man1dir) ; \
22 $(INSTALL_DATA) $(srcdir)/gdb.1 \
23 $(DESTDIR)$(man1dir)/$$transformed_name.1
25 +.PHONY: install-gstack
27 + transformed_name=`t='$(program_transform_name)'; \
28 + echo $(GSTACK) | sed -e "$$t"` ; \
29 + if test "x$$transformed_name" = x; then \
30 + transformed_name=$(GSTACK) ; \
34 + $(SHELL) $(srcdir)/../mkinstalldirs $(DESTDIR)$(bindir) ; \
35 + $(INSTALL_PROGRAM) $(srcdir)/$(GSTACK).sh \
36 + $(DESTDIR)$(bindir)/$$transformed_name$(EXEEXT) ; \
37 + : $(SHELL) $(srcdir)/../mkinstalldirs \
38 + $(DESTDIR)$(man1dir) ; \
39 + : $(INSTALL_DATA) $(srcdir)/gstack.1 \
40 + $(DESTDIR)$(man1dir)/$$transformed_name.1
43 -uninstall: force $(CONFIG_UNINSTALL)
44 +uninstall: force uninstall-gstack $(CONFIG_UNINSTALL)
45 transformed_name=`t='$(program_transform_name)'; \
46 echo gdb | sed -e $$t` ; \
47 if test "x$$transformed_name" = x; then \
48 @@ -1029,6 +1046,17 @@ uninstall-tui:
50 rm -f $(DESTDIR)$(bindir)/$$transformed_name$(EXEEXT) \
51 $(DESTDIR)$(man1dir)/$$transformed_name.1
52 +.PHONY: uninstall-gstack
54 + transformed_name=`t='$(program_transform_name)'; \
55 + echo $(GSTACK) | sed -e $$t` ; \
56 + if test "x$$transformed_name" = x; then \
57 + transformed_name=$(GSTACK) ; \
61 + rm -f $(DESTDIR)$(bindir)/$$transformed_name$(EXEEXT) \
62 + $(DESTDIR)$(man1dir)/$$transformed_name.1
64 # The C++ name parser can be built standalone for testing.
65 test-cp-name-parser.o: cp-name-parser.c
66 Index: gdb-6.8.50.20090226/gdb/gstack.sh
67 ===================================================================
68 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
69 +++ gdb-6.8.50.20090226/gdb/gstack.sh 2009-02-26 22:10:05.000000000 +0100
73 +if test $# -ne 1; then
74 + echo "Usage: `basename $0 .sh` <process-id>" 1>&2
78 +if test ! -r /proc/$1; then
79 + echo "Process $1 not found." 1>&2
83 +# GDB doesn't allow "thread apply all bt" when the process isn't
84 +# threaded; need to peek at the process to determine if that or the
85 +# simpler "bt" should be used.
88 +if test -d /proc/$1/task ; then
89 + # Newer kernel; has a task/ directory.
90 + if test `ls /proc/$1/task | wc -l` -gt 1 2>/dev/null ; then
91 + backtrace="thread apply all bt"
93 +elif test -f /proc/$1/maps ; then
94 + # Older kernel; go by it loading libpthread.
95 + if grep -e libpthread /proc/$1/maps > /dev/null 2>&1 ; then
96 + backtrace="thread apply all bt"
102 +if $GDB -nx --quiet --batch --readnever > /dev/null 2>&1; then
103 + readnever=--readnever
108 +# Run GDB, strip out unwanted noise.
109 +$GDB --quiet $readnever -nx /proc/$1/exe $1 <<EOF 2>&1 |