--- /dev/null
+2004-11-23 Andrew Cagney <cagney@redhat.com>
+
+ * Makefile.in (uninstall-gstack, install-gstack): New rules, add
+ to install and uninstall.
+ * gstack.sh, gstack.1: New files.
+
+Index: gdb-7.6/gdb/Makefile.in
+===================================================================
+--- gdb-7.6.orig/gdb/Makefile.in 2013-05-21 13:26:33.496820763 +0200
++++ gdb-7.6/gdb/Makefile.in 2013-05-21 13:26:33.609819579 +0200
+@@ -1029,7 +1029,7 @@ info install-info clean-info dvi pdf ins
+ install: all
+ @$(MAKE) $(FLAGS_TO_PASS) install-only
+
+-install-only: $(CONFIG_INSTALL)
++install-only: install-gstack $(CONFIG_INSTALL)
+ transformed_name=`t='$(program_transform_name)'; \
+ echo gdb | sed -e "$$t"` ; \
+ if test "x$$transformed_name" = x; then \
+@@ -1060,7 +1060,25 @@ install-only: $(CONFIG_INSTALL)
+ install-python:
+ $(SHELL) $(srcdir)/../mkinstalldirs $(DESTDIR)$(GDB_DATADIR)/python/gdb
+
+-uninstall: force $(CONFIG_UNINSTALL)
++GSTACK=gstack
++.PHONY: install-gstack
++install-gstack:
++ transformed_name=`t='$(program_transform_name)'; \
++ echo $(GSTACK) | sed -e "$$t"` ; \
++ if test "x$$transformed_name" = x; then \
++ transformed_name=$(GSTACK) ; \
++ else \
++ true ; \
++ fi ; \
++ $(SHELL) $(srcdir)/../mkinstalldirs $(DESTDIR)$(bindir) ; \
++ $(INSTALL_PROGRAM) $(srcdir)/$(GSTACK).sh \
++ $(DESTDIR)$(bindir)/$$transformed_name$(EXEEXT) ; \
++ : $(SHELL) $(srcdir)/../mkinstalldirs \
++ $(DESTDIR)$(man1dir) ; \
++ : $(INSTALL_DATA) $(srcdir)/gstack.1 \
++ $(DESTDIR)$(man1dir)/$$transformed_name.1
++
++uninstall: force uninstall-gstack $(CONFIG_UNINSTALL)
+ transformed_name=`t='$(program_transform_name)'; \
+ echo gdb | sed -e $$t` ; \
+ if test "x$$transformed_name" = x; then \
+@@ -1083,6 +1101,18 @@ uninstall: force $(CONFIG_UNINSTALL)
+ fi
+ @$(MAKE) DO=uninstall "DODIRS=$(SUBDIRS)" $(FLAGS_TO_PASS) subdir_do
+
++.PHONY: uninstall-gstack
++uninstall-gstack:
++ transformed_name=`t='$(program_transform_name)'; \
++ echo $(GSTACK) | sed -e $$t` ; \
++ if test "x$$transformed_name" = x; then \
++ transformed_name=$(GSTACK) ; \
++ else \
++ true ; \
++ fi ; \
++ rm -f $(DESTDIR)$(bindir)/$$transformed_name$(EXEEXT) \
++ $(DESTDIR)$(man1dir)/$$transformed_name.1
++
+ # The C++ name parser can be built standalone for testing.
+ test-cp-name-parser.o: cp-name-parser.c
+ $(COMPILE) -DTEST_CPNAMES cp-name-parser.c
+Index: gdb-7.6/gdb/gstack.sh
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ gdb-7.6/gdb/gstack.sh 2013-05-21 13:26:55.434625908 +0200
+@@ -0,0 +1,43 @@
++#!/bin/sh
++
++if test $# -ne 1; then
++ echo "Usage: `basename $0 .sh` <process-id>" 1>&2
++ exit 1
++fi
++
++if test ! -r /proc/$1; then
++ echo "Process $1 not found." 1>&2
++ exit 1
++fi
++
++# GDB doesn't allow "thread apply all bt" when the process isn't
++# threaded; need to peek at the process to determine if that or the
++# simpler "bt" should be used.
++
++backtrace="bt"
++if test -d /proc/$1/task ; then
++ # Newer kernel; has a task/ directory.
++ if test `/bin/ls /proc/$1/task | /usr/bin/wc -l` -gt 1 2>/dev/null ; then
++ backtrace="thread apply all bt"
++ fi
++elif test -f /proc/$1/maps ; then
++ # Older kernel; go by it loading libpthread.
++ if /bin/grep -e libpthread /proc/$1/maps > /dev/null 2>&1 ; then
++ backtrace="thread apply all bt"
++ fi
++fi
++
++GDB=${GDB:-/usr/bin/gdb}
++
++# Run GDB, strip out unwanted noise.
++# --readnever is no longer used since .gdb_index is now in use.
++$GDB --quiet -nx $GDBARGS /proc/$1/exe $1 <<EOF 2>&1 |
++set width 0
++set height 0
++set pagination no
++$backtrace
++EOF
++/bin/sed -n \
++ -e 's/^\((gdb) \)*//' \
++ -e '/^#/p' \
++ -e '/^Thread/p'
+Index: gdb-7.6/gdb/testsuite/gdb.base/gstack.exp
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ gdb-7.6/gdb/testsuite/gdb.base/gstack.exp 2013-05-21 13:26:55.434625908 +0200
+@@ -0,0 +1,66 @@
++# Copyright (C) 2012 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 3 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program. If not, see <http://www.gnu.org/licenses/>.
++
++set testfile gstack
++set executable ${testfile}
++set binfile ${objdir}/${subdir}/$executable
++if {[build_executable ${testfile} ${executable} "" {debug}] == -1} {
++ return -1
++}
++
++set test "spawn inferior"
++set command "${binfile}"
++set res [remote_spawn host $command];
++if { $res < 0 || $res == "" } {
++ perror "Spawning $command failed."
++ fail $test
++ return
++}
++set use_gdb_stub 1
++set pid [exp_pid -i $res]
++gdb_expect {
++ -re "looping\r\n" {
++ pass $test
++ }
++ eof {
++ fail "$test (eof)"
++ return
++ }
++ timeout {
++ fail "$test (timeout)"
++ return
++ }
++}
++gdb_exit
++
++# Testcase uses the most simple notification not to get caught by attach on
++# exiting the function. Still we could retry the gstack command if we fail.
++
++set test "spawn gstack"
++set command "sh -c GDB=$GDB\\ GDBARGS=-data-directory\\\\\\ $BUILD_DATA_DIRECTORY\\ sh\\ ${srcdir}/../gstack.sh\\ $pid\\;echo\\ GSTACK-END"
++set res [remote_spawn host $command];
++if { $res < 0 || $res == "" } {
++ perror "Spawning $command failed."
++ fail $test
++}
++set pid [exp_pid -i $res]
++gdb_test_multiple "" $test {
++ -re "^#0 +(0x\[0-9a-f\]+ in )?\\.?func \\(\\) at \[^\r\n\]*\r\n#1 +0x\[0-9a-f\]+ in \\.?main \\(\\) at \[^\r\n\]*\r\nGSTACK-END\r\n\$" {
++ pass $test
++ }
++}
++gdb_exit
++
++remote_exec host "kill -9 $pid"
+Index: gdb-7.6/gdb/testsuite/gdb.base/gstack.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ gdb-7.6/gdb/testsuite/gdb.base/gstack.c 2013-05-21 13:26:33.610819569 +0200
+@@ -0,0 +1,43 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++ Copyright 2005, 2007, 2008, 2009 Free Software Foundation, Inc.
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 3 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program. If not, see <http://www.gnu.org/licenses/>. */
++
++#include <stdio.h>
++#include <unistd.h>
++#include <string.h>
++
++void
++func (void)
++{
++ const char msg[] = "looping\n";
++
++ /* Use the most simple notification not to get caught by attach on exiting
++ the function. */
++ write (1, msg, strlen (msg));
++
++ for (;;);
++}
++
++int
++main (void)
++{
++ alarm (60);
++ nice (100);
++
++ func ();
++
++ return 0;
++}
--- /dev/null
+http://sourceware.org/ml/gdb-patches/2010-07/msg00184.html
+Subject: Re: [0/4] RFC: add DWARF index support
+
+Jan Kratochvil: Fixed $d -> $dir.
+Jan Kratochvil: Remove /dev/null redirection.
+
+>>>>> "Tom" == Tom Tromey <tromey@redhat.com> writes:
+
+Tom> This patch series adds support for a DWARF index to gdb.
+
+Roland suggested we wrap up the index-creation code into a helper
+script.
+
+I'm not sure if this is something people would want in gdb proper, but I
+figured I would send it here just in case.
+
+Tom
+
+2010-07-09 Tom Tromey <tromey@redhat.com>
+
+ * Makefile.in (install-only): Install gdb-add-index.
+ * gdb-add-index: New file.
+
+2010-07-09 Tom Tromey <tromey@redhat.com>
+
+ * gdb.texinfo (Index Files): Mention gdb-add-index.
+
+>From 30714fe719e61baea03d0dc5793eb0d564faebb7 Mon Sep 17 00:00:00 2001
+From: Tom Tromey <tromey@redhat.com>
+Date: Fri, 9 Jul 2010 11:17:54 -0600
+Subject: [PATCH 4/4] add gdb-add-index
+Subject: [PATCH 4/4] add gdb-add-index
+
+---
+ gdb/ChangeLog | 5 +++++
+ gdb/Makefile.in | 11 ++++++++++-
+ gdb/doc/ChangeLog | 4 ++++
+ gdb/doc/gdb.texinfo | 8 ++++++++
+ gdb/gdb-add-index | 30 ++++++++++++++++++++++++++++++
+ 5 files changed, 57 insertions(+), 1 deletions(-)
+ create mode 100755 gdb/gdb-add-index
+
+Index: gdb-7.5.91.20130407/gdb/Makefile.in
+===================================================================
+--- gdb-7.5.91.20130407.orig/gdb/Makefile.in 2013-04-11 16:52:51.000000000 +0200
++++ gdb-7.5.91.20130407/gdb/Makefile.in 2013-04-11 16:53:59.199279388 +0200
+@@ -1053,6 +1053,15 @@ install-only: install-gstack $(CONFIG_IN
+ $(INSTALL_PROGRAM) gcore \
+ $(DESTDIR)$(bindir)/$$transformed_name; \
+ fi
++ transformed_name=`t='$(program_transform_name)'; \
++ echo gdb-add-index | sed -e "$$t"` ; \
++ if test "x$$transformed_name" = x; then \
++ transformed_name=gdb-add-index ; \
++ else \
++ true ; \
++ fi ; \
++ $(INSTALL_PROGRAM) $(srcdir)/gdb-add-index \
++ $(DESTDIR)$(bindir)/$$transformed_name$(EXEEXT)
+ @$(MAKE) DO=install "DODIRS=$(SUBDIRS)" $(FLAGS_TO_PASS) subdir_do
+
+ install-python:
+Index: gdb-7.5.91.20130407/gdb/doc/gdb.texinfo
+===================================================================
+--- gdb-7.5.91.20130407.orig/gdb/doc/gdb.texinfo 2013-04-11 16:53:00.000000000 +0200
++++ gdb-7.5.91.20130407/gdb/doc/gdb.texinfo 2013-04-11 16:55:07.004278842 +0200
+@@ -17159,6 +17159,14 @@ There are currently some limitation on i
+ for DWARF debugging information, not stabs. And, they do not
+ currently work for programs using Ada.
+
++@value{GDBN} comes with a program, @command{gdb-add-index}, which can
++be used to add the index to a symbol file. It takes the symbol file
++as its only argument:
++
++@smallexample
++$ gdb-add-index symfile
++@end smallexample
++
+ @node Symbol Errors
+ @section Errors Reading Symbol Files
+
+@@ -41730,6 +41738,7 @@ switch (die->tag)
+ * gdbserver man:: Remote Server for the GNU Debugger man page
+ * gcore man:: Generate a core file of a running program
+ * gdbinit man:: gdbinit scripts
++* gdb-add-index man:: Add index files to speed up GDB
+ @end menu
+
+ @node gdb man
+@@ -42382,6 +42391,54 @@ gdb(1), @code{info -f gdb -n Startup}
+ The full documentation for @value{GDBN} is maintained as a Texinfo manual.
+ If the @code{info} and @code{gdb} programs and @value{GDBN}'s Texinfo
+ documentation are properly installed at your site, the command
++
++@smallexample
++info gdb
++@end smallexample
++
++should give you access to the complete manual.
++
++@cite{Using GDB: A Guide to the GNU Source-Level Debugger},
++Richard M. Stallman and Roland H. Pesch, July 1991.
++@end ifset
++@c man end
++
++@node gdb-add-index man
++@heading gdb-add-index
++
++@c man title gdb-add-index Add index files to speed up GDB
++
++@c man begin SYNOPSIS gdb-add-index
++gdb-add-index @var{filename}
++@c man end
++
++@c man begin DESCRIPTION gdb-add-index
++When GDB finds a symbol file, it scans the symbols in the file in order
++to construct an internal symbol table. This lets most GDB operations
++work quickly--at the cost of a delay early on. For large programs,
++this delay can be quite lengthy, so GDB provides a way to build an
++index, which speeds up startup.
++
++To determine whether a file contains such an index, use the command
++@command{readelf -S filename}: the index is stored in a section named
++@code{.gdb_index}. Note that the index is never generated for files that do
++not contain DWARF debug information (sections named @code{.debug_*}).
++
++See more in
++@ifset man
++the @value{GDBN} manual in node @code{Index Files}
++-- shell command @code{info -f gdb -n 'Index Files'}.
++@end ifset
++@ifclear man
++@ref{Index Files}.
++@end ifclear
++@c man end
++
++@c man begin SEEALSO gdb-add-index
++@ifset man
++The full documentation for @value{GDBN} is maintained as a Texinfo manual.
++If the @code{info} and @code{gdb} programs and @value{GDBN}'s Texinfo
++documentation are properly installed at your site, the command
+
+ @smallexample
+ info gdb
+Index: gdb-7.5.91.20130407/gdb/gdb-add-index
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ gdb-7.5.91.20130407/gdb/gdb-add-index 2013-04-11 16:53:21.524279909 +0200
+@@ -0,0 +1,30 @@
++#! /bin/sh
++
++# Add a .gdb_index section to a file.
++
++# Copyright (C) 2010 Free Software Foundation, Inc.
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 3 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program. If not, see <http://www.gnu.org/licenses/>.
++
++file="$1"
++dir="${file%/*}"
++
++# We don't care if gdb gives an error.
++gdb -nx --batch-silent -ex "file $file" -ex "save gdb-index $dir"
++
++if test -f "${file}.gdb-index"; then
++ objcopy --add-section .gdb_index="${file}.gdb-index" --set-section-flags .gdb_index=readonly "$file" "$file"
++ rm -f "${file}.gdb-index"
++fi
++
++exit 0
+Index: gdb-7.5.91.20130407/gdb/doc/Makefile.in
+===================================================================
+--- gdb-7.5.91.20130407.orig/gdb/doc/Makefile.in 2013-04-11 16:50:33.202286928 +0200
++++ gdb-7.5.91.20130407/gdb/doc/Makefile.in 2013-04-11 16:55:06.993279304 +0200
+@@ -177,7 +177,7 @@ POD2MAN5 = pod2man --center="GNU Develop
+ --release="gdb-`sed q $(srcdir)/../version.in`" --section=5
+
+ # List of man pages generated from gdb.texi
+-MAN1S = gdb.1 gdbserver.1 gcore.1
++MAN1S = gdb.1 gdbserver.1 gcore.1 gdb-add-index.1
+ MAN5S = gdbinit.5
+ MANS = $(MAN1S) $(MAN5S)
+
+@@ -626,6 +626,13 @@ gcore.1: $(GDB_DOC_FILES)
+ mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1)
+ rm -f gcore.pod
+
++gdb-add-index.1: $(GDB_DOC_FILES)
++ touch $@
++ -$(TEXI2POD) $(MANCONF) -Dgdb-add-index < $(srcdir)/gdb.texinfo > gdb-add-index.pod
++ -($(POD2MAN1) gdb-add-index.pod | sed -e '/^.if n .na/d' > $@.T$$$$ && \
++ mv -f $@.T$$$$ $@) || (rm -f $@.T$$$$ && exit 1)
++ rm -f gdb-add-index.pod
++
+ gdbinit.5: $(GDB_DOC_FILES)
+ touch $@
+ -$(TEXI2POD) $(MANCONF) -Dgdbinit < $(srcdir)/gdb.texinfo > gdbinit.pod
Patch102: gdb-6.6-buildid-locate-rpm.patch
Patch103: gdb-6.6-buildid-locate-core-as-arg.patch
Patch104: gdb-6.6-buildid-locate-rpm-librpm-workaround.patch
+Patch105: gdb-6.3-gstack-20050411.patch
+Patch106: gdb-gdb-add-index-script.patch
Patch1000: %{name}-readline.patch
Patch1001: %{name}-info.patch
Patch1002: %{name}-passflags.patch
%patch102 -p1
%patch103 -p1
%patch104 -p1
+%patch105 -p1
+%patch106 -p1
%patch1000 -p1
%patch1001 -p1
%doc gdb/{ChangeLog,NEWS,PROBLEMS,README}
%attr(755,root,root) %{_bindir}/gdb
%attr(755,root,root) %{_bindir}/gdbtui
+%attr(755,root,root) %{_bindir}/gdb-add-index
+%attr(755,root,root) %{_bindir}/gstack
%dir %{_datadir}/gdb
%dir %{_datadir}/gdb/auto-load
%dir %{_datadir}/gdb/auto-load%{_prefix}