[gdb] [rhel6] DTS backward Python compatibility API (BZ 1020004, Phil Muldoon).

Jan Kratochvil jankratochvil at fedoraproject.org
Sun Feb 23 21:57:09 UTC 2014


commit 3af2cc602d3c50edc186ef1f7b7ef72a0474832a
Author: Jan Kratochvil <jan.kratochvil at redhat.com>
Date:   Sun Feb 23 22:57:50 2014 +0100

    [rhel6] DTS backward Python compatibility API (BZ 1020004, Phil Muldoon).
    
    - [rhel6] Do not install its man page if gdb-add-index is not installed.
    - [rhel] Do not migrate /usr/share/gdb/auto-load/ with symlinks on RHELs.
    - Fix gdb-7.7 auto-load from /usr/share/gdb/auto-load/ regression.

 gdb-auto-load-lost-path-7.7.patch |  190 +++++++++++++++++++++++
 gdb-dts-rhel6-python-compat.patch |  300 +++++++++++++++++++++++++++++++++++++
 gdb.spec                          |   30 ++++-
 3 files changed, 518 insertions(+), 2 deletions(-)
---
diff --git a/gdb-auto-load-lost-path-7.7.patch b/gdb-auto-load-lost-path-7.7.patch
new file mode 100644
index 0000000..7675d06
--- /dev/null
+++ b/gdb-auto-load-lost-path-7.7.patch
@@ -0,0 +1,190 @@
+http://sourceware.org/ml/gdb-patches/2014-02/msg00712.html
+Subject: [patch+7.7] Fix auto-load 7.7 regression  [Re: [commit 2/2] Move processing of .debug_gdb_scripts to auto-load.c]
+
+
+--6c2NcOVqGQ03X4Wi
+Content-Type: text/plain; charset=us-ascii
+Content-Disposition: inline
+
+Hi Doug,
+
+the regression affects any loading from /usr/share/gdb/auto-load .
+
+5b2bf9471f1499bee578fcd60c05afe85794e280 is the first bad commit
+commit 5b2bf9471f1499bee578fcd60c05afe85794e280
+Author: Doug Evans <xdje42 at gmail.com>
+Date:   Fri Nov 29 21:29:26 2013 -0800
+    Move .debug_gdb_script processing to auto-load.c.
+    Simplify handling of auto-loaded objfile scripts.
+
+Fedora 20 x86_64
+$ gdb -q /usr/lib64/libgobject-2.0.so
+Reading symbols from /usr/lib64/libglib-2.0.so.0.3800.2...Reading symbols from /usr/lib/debug/usr/lib64/libglib-2.0.so.0.3800.2.debug...done.
+done.
+(gdb) _
+
+Fedora Rawhide x86_64
+$ gdb -q /usr/lib64/libgobject-2.0.so
+Reading symbols from /usr/lib64/libglib-2.0.so...Reading symbols from /usr/lib/debug/usr/lib64/libglib-2.0.so.0.3990.0.debug...done.
+done.
+warning: File "/usr/lib64/libglib-2.0.so.0.3990.0-gdb.py" auto-loading has been declined by your `auto-load safe-path' set to "$debugdir:$datadir/auto-load:/usr/bin/mono-gdb.py".
+To enable execution of this file add
+	add-auto-load-safe-path /usr/lib64/libglib-2.0.so.0.3990.0-gdb.py
+line to your configuration file "/home/jkratoch/.gdbinit".
+To completely disable this security protection add
+	set auto-load safe-path /
+line to your configuration file "/home/jkratoch/.gdbinit".
+For more information about this security protection see the
+"Auto-loading safe path" section in the GDB manual.  E.g., run from the shell:
+	info "(gdb)Auto-loading safe path"
+(gdb) _
+
+That is it tries to load "forbidden"
+	/usr/lib64/libglib-2.0.so.0.3990.0-gdb.py
+but it should load instead
+	/usr/share/gdb/auto-load/usr/lib64/libglib-2.0.so.0.3990.0-gdb.py*
+Although that is also not exactly this way, there does not exist any
+	/usr/lib64/libglib-2.0.so.0.3990.0-gdb.py
+despite regressed GDB says so.
+
+
+
+Regards,
+Jan
+
+--6c2NcOVqGQ03X4Wi
+Content-Type: text/plain; charset=us-ascii
+Content-Disposition: inline; filename="autoload.patch"
+
+gdb/
+2014-02-23  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* auto-load.c (auto_load_objfile_script_1): Change filename to
+	debugfile.
+
+gdb/testsuite/
+2014-02-23  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* gdb.base/auto-load-script: New file.
+	* gdb.base/auto-load.c: New file.
+	* gdb.base/auto-load.exp: New file.
+
+--- gdb-7.7/gdb/auto-load.c-orig	2014-02-06 03:21:29.000000000 +0100
++++ gdb-7.7/gdb/auto-load.c	2014-02-23 22:38:53.858374840 +0100
+@@ -791,17 +791,17 @@ auto_load_objfile_script_1 (struct objfi
+       make_cleanup_fclose (input);
+ 
+       is_safe
+-	= file_is_auto_load_safe (filename,
++	= file_is_auto_load_safe (debugfile,
+ 				  _("auto-load: Loading %s script \"%s\""
+ 				    " by extension for objfile \"%s\".\n"),
+-				  language->name, filename,
++				  language->name, debugfile,
+ 				  objfile_name (objfile));
+ 
+       /* Add this script to the hash table too so
+ 	 "info auto-load ${lang}-scripts" can print it.  */
+       pspace_info
+ 	= get_auto_load_pspace_data_for_loading (current_program_space);
+-      maybe_add_script (pspace_info, is_safe, filename, filename, language);
++      maybe_add_script (pspace_info, is_safe, debugfile, debugfile, language);
+ 
+       /* To preserve existing behaviour we don't check for whether the
+ 	 script was already in the table, and always load it.
+diff --git a/gdb/testsuite/gdb.base/auto-load-script b/gdb/testsuite/gdb.base/auto-load-script
+new file mode 100644
+index 0000000..d02bd1a
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/auto-load-script
+@@ -0,0 +1,17 @@
++# Copyright 2014 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/>.
++
++echo script_loaded\n
++set $script_loaded=42
+diff --git a/gdb/testsuite/gdb.base/auto-load.c b/gdb/testsuite/gdb.base/auto-load.c
+new file mode 100644
+index 0000000..4b94803
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/auto-load.c
+@@ -0,0 +1,22 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2014 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/>.  */
++
++int
++main (void)
++{
++  return 0;
++}
+diff --git a/gdb/testsuite/gdb.base/auto-load.exp b/gdb/testsuite/gdb.base/auto-load.exp
+new file mode 100644
+index 0000000..9b8211d
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/auto-load.exp
+@@ -0,0 +1,36 @@
++# Copyright 2014 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/>.
++
++standard_testfile
++
++if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile}] } {
++    return -1
++}
++
++set targetdir "${binfile}.dir"
++set sourcescript "${binfile}-script"
++set targetscriptdir "${targetdir}/[file dirname ${sourcescript}]"
++set targetscript "${targetscriptdir}/${testfile}-gdb.gdb"
++
++remote_exec host "rm -rf ${targetdir}"
++remote_exec host "mkdir -p ${targetscriptdir}"
++remote_exec host "cp ${sourcescript} ${targetscript}"
++
++gdb_test_no_output "set auto-load scripts-directory ${targetdir}" "set auto-load scripts-directory"
++gdb_test_no_output "set auto-load safe-path ${targetscript}" "set auto-load safe-path"
++
++gdb_load ${binfile}
++
++gdb_test {print $script_loaded} " = 42"
+
+--6c2NcOVqGQ03X4Wi--
+
diff --git a/gdb-dts-rhel6-python-compat.patch b/gdb-dts-rhel6-python-compat.patch
new file mode 100644
index 0000000..69eb92e
--- /dev/null
+++ b/gdb-dts-rhel6-python-compat.patch
@@ -0,0 +1,300 @@
+https://bugzilla.redhat.com/show_bug.cgi?id=1020004
+
+diff -dup -ruNp gdb-7.7-orig/gdb/data-directory/Makefile.in gdb-7.7/gdb/data-directory/Makefile.in
+--- gdb-7.7-orig/gdb/data-directory/Makefile.in	2014-02-23 18:12:51.338866391 +0100
++++ gdb-7.7/gdb/data-directory/Makefile.in	2014-02-23 18:14:31.187756983 +0100
+@@ -58,9 +58,12 @@ PYTHON_FILES = \
+ 	gdb/frames.py \
+ 	gdb/FrameIterator.py \
+ 	gdb/FrameDecorator.py \
++	gdb/FrameWrapper.py \
++	gdb/backtrace.py \
+ 	gdb/types.py \
+ 	gdb/printing.py \
+ 	gdb/prompt.py \
++	gdb/command/backtrace.py \
+ 	gdb/command/bound_registers.py \
+ 	gdb/command/__init__.py \
+ 	gdb/command/ignore_errors.py \
+diff -dup -ruNp gdb-7.7-orig/gdb/python/lib/gdb/FrameWrapper.py gdb-7.7/gdb/python/lib/gdb/FrameWrapper.py
+--- gdb-7.7-orig/gdb/python/lib/gdb/FrameWrapper.py	1970-01-01 01:00:00.000000000 +0100
++++ gdb-7.7/gdb/python/lib/gdb/FrameWrapper.py	2014-02-23 18:14:31.188756981 +0100
+@@ -0,0 +1,122 @@
++# Wrapper API for frames.
++
++# Copyright (C) 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/>.
++
++import gdb
++
++# FIXME: arguably all this should be on Frame somehow.
++class FrameWrapper:
++    def __init__ (self, frame):
++        self.frame = frame;
++
++    def write_symbol (self, stream, sym, block):
++        if len (sym.linkage_name):
++            nsym, is_field_of_this = gdb.lookup_symbol (sym.linkage_name, block)
++            if nsym.addr_class != gdb.SYMBOL_LOC_REGISTER:
++                sym = nsym
++
++        stream.write (sym.print_name + "=")
++        try:
++            val = self.read_var (sym)
++            if val != None:
++                val = str (val)
++        # FIXME: would be nice to have a more precise exception here.
++        except RuntimeError, text:
++            val = text
++        if val == None:
++            stream.write ("???")
++        else:
++            stream.write (str (val))
++
++    def print_frame_locals (self, stream, func):
++
++        try:
++            block = self.frame.block()
++        except RuntimeError:
++            block = None
++
++        while block != None:
++            if block.is_global or block.is_static:
++                break
++
++        for sym in block:
++            if sym.is_argument:
++                continue;
++
++            self.write_symbol (stream, sym, block)
++            stream.write ('\n')
++
++    def print_frame_args (self, stream, func):
++
++        try:
++            block = self.frame.block()
++        except RuntimeError:
++            block = None
++
++        while block != None:
++            if block.function != None:
++                break
++            block = block.superblock
++
++        first = True
++        for sym in block:
++            if not sym.is_argument:
++                continue;
++
++            if not first:
++                stream.write (", ")
++
++            self.write_symbol (stream, sym, block)
++            first = False
++
++    # FIXME: this should probably just be a method on gdb.Frame.
++    # But then we need stream wrappers.
++    def describe (self, stream, full):
++        if self.type () == gdb.DUMMY_FRAME:
++            stream.write (" <function called from gdb>\n")
++        elif self.type () == gdb.SIGTRAMP_FRAME:
++            stream.write (" <signal handler called>\n")
++        else:
++            sal = self.find_sal ()
++            pc = self.pc ()
++            name = self.name ()
++            if not name:
++                name = "??"
++            if pc != sal.pc or not sal.symtab:
++                stream.write (" 0x%08x in" % pc)
++            stream.write (" " + name + " (")
++
++            func = self.function ()
++            self.print_frame_args (stream, func)
++
++            stream.write (")")
++
++            if sal.symtab and sal.symtab.filename:
++                stream.write (" at " + sal.symtab.filename)
++                stream.write (":" + str (sal.line))
++
++            if not self.name () or (not sal.symtab or not sal.symtab.filename):
++                lib = gdb.solib_name (pc)
++                if lib:
++                    stream.write (" from " + lib)
++
++            stream.write ("\n")
++
++            if full:
++                self.print_frame_locals (stream, func)
++
++    def __getattr__ (self, name):
++        return getattr (self.frame, name)
+diff -dup -ruNp gdb-7.7-orig/gdb/python/lib/gdb/backtrace.py gdb-7.7/gdb/python/lib/gdb/backtrace.py
+--- gdb-7.7-orig/gdb/python/lib/gdb/backtrace.py	1970-01-01 01:00:00.000000000 +0100
++++ gdb-7.7/gdb/python/lib/gdb/backtrace.py	2014-02-23 18:14:31.188756981 +0100
+@@ -0,0 +1,42 @@
++# Filtering backtrace.
++
++# Copyright (C) 2008, 2011 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/>.
++
++import gdb
++import itertools
++
++# Our only exports.
++__all__ = ['push_frame_filter', 'create_frame_filter']
++
++old_frame_filter = None
++
++def push_frame_filter (constructor):
++    """Register a new backtrace filter class with the 'backtrace' command.
++The filter will be passed an iterator as an argument.  The iterator
++will return gdb.Frame-like objects.  The filter should in turn act as
++an iterator returning such objects."""
++    global old_frame_filter
++    if old_frame_filter == None:
++        old_frame_filter = constructor
++    else:
++        old_frame_filter = lambda iterator, filter = frame_filter: constructor (filter(iterator))
++
++def create_frame_filter (iter):
++    global old_frame_filter
++    if old_frame_filter is None:
++        return iter
++    return old_frame_filter (iter)
++
+diff -dup -ruNp gdb-7.7-orig/gdb/python/lib/gdb/command/backtrace.py gdb-7.7/gdb/python/lib/gdb/command/backtrace.py
+--- gdb-7.7-orig/gdb/python/lib/gdb/command/backtrace.py	1970-01-01 01:00:00.000000000 +0100
++++ gdb-7.7/gdb/python/lib/gdb/command/backtrace.py	2014-02-23 18:14:31.188756981 +0100
+@@ -0,0 +1,106 @@
++# New backtrace command.
++
++# Copyright (C) 2008, 2009, 2011 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/>.
++
++import gdb
++import gdb.backtrace
++import itertools
++from gdb.FrameIterator import FrameIterator
++from gdb.FrameWrapper import FrameWrapper
++import sys
++
++class ReverseBacktraceParameter (gdb.Parameter):
++    """The new-backtrace command can show backtraces in 'reverse' order.
++This means that the innermost frame will be printed last.
++Note that reverse backtraces are more expensive to compute."""
++
++    set_doc = "Enable or disable reverse backtraces."
++    show_doc = "Show whether backtraces will be printed in reverse order."
++
++    def __init__(self):
++        gdb.Parameter.__init__ (self, "reverse-backtrace",
++                                gdb.COMMAND_STACK, gdb.PARAM_BOOLEAN)
++        # Default to compatibility with gdb.
++        self.value = False
++
++class FilteringBacktrace (gdb.Command):
++    """Print backtrace of all stack frames, or innermost COUNT frames.
++With a negative argument, print outermost -COUNT frames.
++Use of the 'full' qualifier also prints the values of the local variables.
++Use of the 'raw' qualifier avoids any filtering by loadable modules.
++"""
++
++    def __init__ (self):
++        # FIXME: this is not working quite well enough to replace
++        # "backtrace" yet.
++        gdb.Command.__init__ (self, "new-backtrace", gdb.COMMAND_STACK)
++        self.reverse = ReverseBacktraceParameter()
++
++    def reverse_iter (self, iter):
++        result = []
++        for item in iter:
++            result.append (item)
++        result.reverse()
++        return result
++
++    def final_n (self, iter, x):
++        result = []
++        for item in iter:
++            result.append (item)
++        return result[x:]
++
++    def invoke (self, arg, from_tty):
++        i = 0
++        count = 0
++        filter = True
++        full = False
++
++        for word in arg.split (" "):
++            if word == '':
++                continue
++            elif word == 'raw':
++                filter = False
++            elif word == 'full':
++                full = True
++            else:
++                count = int (word)
++
++        # FIXME: provide option to start at selected frame
++        # However, should still number as if starting from newest
++        newest_frame = gdb.newest_frame()
++        iter = itertools.imap (FrameWrapper,
++                               FrameIterator (newest_frame))
++        if filter:
++            iter = gdb.backtrace.create_frame_filter (iter)
++
++        # Now wrap in an iterator that numbers the frames.
++        iter = itertools.izip (itertools.count (0), iter)
++
++        # Reverse if the user wanted that.
++        if self.reverse.value:
++            iter = self.reverse_iter (iter)
++
++        # Extract sub-range user wants.
++        if count < 0:
++            iter = self.final_n (iter, count)
++        elif count > 0:
++            iter = itertools.islice (iter, 0, count)
++
++        for pair in iter:
++            sys.stdout.write ("#%-2d" % pair[0])
++            pair[1].describe (sys.stdout, full)
++
++FilteringBacktrace()
diff --git a/gdb.spec b/gdb.spec
index cff6c19..7545405 100644
--- a/gdb.spec
+++ b/gdb.spec
@@ -39,7 +39,7 @@ Version: 7.7
 
 # The release always contains a leading reserved number, start it at 1.
 # `upstream' is not a part of `name' to stay fully rpm dependencies compatible for the testing.
-Release: 2%{?dist}
+Release: 3%{?dist}
 
 License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ and GPLv2+ with exceptions and GPL+ and LGPLv2+ and BSD and Public Domain
 Group: Development/Debuggers
@@ -527,6 +527,12 @@ Patch846: gdb-testsuite-nohostid.patch
 # Fix Python stack corruption.
 Patch847: gdb-python-stacksmash.patch
 
+# [rhel6] DTS backward Python compatibility API (BZ 1020004, Phil Muldoon).
+Patch848: gdb-dts-rhel6-python-compat.patch
+
+# Fix gdb-7.7 auto-load from /usr/share/gdb/auto-load/ regression.
+Patch849: gdb-auto-load-lost-path-7.7.patch
+
 %if 0%{!?rhel:1} || 0%{?rhel} > 6
 # RL_STATE_FEDORA_GDB would not be found for:
 # Patch642: gdb-readline62-ask-more-rh.patch
@@ -822,7 +828,12 @@ find -name "*.info*"|xargs rm -f
 %patch843 -p1
 %patch846 -p1
 %patch847 -p1
+%patch849 -p1
 
+%patch848 -p1
+%if 0%{!?el6:1}
+%patch848 -p1 -R
+%endif
 %patch393 -p1
 %if 0%{!?el5:1} || 0%{?scl:1}
 %patch393 -p1 -R
@@ -1155,8 +1166,8 @@ for pyo in "" "-O";do
 done
 %endif # 0%{?_enable_debug_packages:1} && 0%{!?_without_python:1}
 
-mkdir $RPM_BUILD_ROOT%{_datadir}/gdb/auto-load
 %if 0%{!?_without_python:1}
+mkdir $RPM_BUILD_ROOT%{_datadir}/gdb/auto-load
 %if 0%{?rhel:1} && 0%{?rhel} <= 6
 # Temporarily now:
 for LIB in lib lib64;do
@@ -1192,6 +1203,7 @@ done
 # gdb-add-index cannot be run even for SCL package on RHEL<=6.
 %if 0%{?rhel:1} && 0%{?rhel} <= 6
 rm -f $RPM_BUILD_ROOT%{_bindir}/gdb-add-index
+rm -f $RPM_BUILD_ROOT%{_mandir}/*/gdb-add-index.1*
 %endif
 
 # Remove the files that are part of a gdb build but that are owned and
@@ -1265,7 +1277,10 @@ rm -rf $RPM_BUILD_ROOT
 %{_mandir}/*/gdbinit.5*
 %{_mandir}/*/gdb.1*
 %{_mandir}/*/gcore.1*
+# gdb-add-index cannot be run even for SCL package on RHEL<=6.
+%if 0%{!?rhel:1} || 0%{?rhel} > 6
 %{_mandir}/*/gdb-add-index.1*
+%endif
 %{_bindir}/gstack
 %{_mandir}/*/gstack.1*
 # Provide gdbtui for RHEL-5 and RHEL-6 as it is removed upstream (BZ 797664).
@@ -1293,6 +1308,9 @@ rm -rf $RPM_BUILD_ROOT
 %endif # %{have_inproctrace}
 %endif
 
+%if 0%{!?_without_python:1}
+# [rhel] Do not migrate /usr/share/gdb/auto-load/ with symlinks on RHELs.
+%if 0%{!?rhel:1}
 %pre
 for i in $(echo bin lib $(basename %{_libdir}) sbin|tr ' ' '\n'|sort -u);do
   src="%{_datadir}/gdb/auto-load/$i"
@@ -1304,6 +1322,8 @@ for i in $(echo bin lib $(basename %{_libdir}) sbin|tr ' ' '\n'|sort -u);do
     fi
   fi
 done
+%endif # 0%{!?rhel:1}
+%endif # 0%{!?_without_python:1}
 
 # It would break RHEL-5 by leaving excessive files for the doc subpackage.
 %endif # !noarch
@@ -1340,6 +1360,12 @@ fi
 %endif # 0%{!?el5:1} || "%{_target_cpu}" == "noarch"
 
 %changelog
+* Sun Feb 23 2014 Jan Kratochvil <jan.kratochvil at redhat.com> - 7.7-3.fc21
+- [rhel6] DTS backward Python compatibility API (BZ 1020004, Phil Muldoon).
+- [rhel6] Do not install its man page if gdb-add-index is not installed.
+- [rhel] Do not migrate /usr/share/gdb/auto-load/ with symlinks on RHELs.
+- Fix gdb-7.7 auto-load from /usr/share/gdb/auto-load/ regression.
+
 * Sun Feb  9 2014 Jan Kratochvil <jan.kratochvil at redhat.com> - 7.7-2.fc21
 - [rhel] Fix rebase build regression on RHEL systems (Tobias Burnus).
 


More information about the scm-commits mailing list