From ab83f240e4bfad39f3548600ded859e155de0e82 Mon Sep 17 00:00:00 2001 From: Jan Kratochvil Date: Aug 25 2009 13:13:04 +0000 Subject: - Temporarily disable assertion checks crashing in qsort_cmp (BZ 515434). --- diff --git a/gdb-bz515434-qsort_cmp.patch b/gdb-bz515434-qsort_cmp.patch new file mode 100644 index 0000000..a2153f0 --- /dev/null +++ b/gdb-bz515434-qsort_cmp.patch @@ -0,0 +1,245 @@ +--- gdb-6.8.50.20090818/gdb/objfiles.c-orig 2009-08-25 14:19:04.000000000 +0200 ++++ gdb-6.8.50.20090818/gdb/objfiles.c 2009-08-25 14:28:07.000000000 +0200 +@@ -820,12 +820,16 @@ qsort_cmp (const void *a, const void *b) + + if (sect1_addr < sect2_addr) + { ++#if 0 /* qsort_cmp ICE */ + gdb_assert (obj_section_endaddr (sect1) <= sect2_addr); ++#endif /* qsort_cmp ICE */ + return -1; + } + else if (sect1_addr > sect2_addr) + { ++#if 0 /* qsort_cmp ICE */ + gdb_assert (sect1_addr >= obj_section_endaddr (sect2)); ++#endif /* qsort_cmp ICE */ + return 1; + } + +@@ -841,11 +845,13 @@ qsort_cmp (const void *a, const void *b) + static struct obj_section * + preferred_obj_section (struct obj_section *a, struct obj_section *b) + { ++#if 0 /* qsort_cmp ICE */ + gdb_assert (obj_section_addr (a) == obj_section_addr (b)); + gdb_assert ((a->objfile->separate_debug_objfile == b->objfile) + || (b->objfile->separate_debug_objfile == a->objfile)); + gdb_assert ((a->objfile->separate_debug_objfile_backlink == b->objfile) + || (b->objfile->separate_debug_objfile_backlink == a->objfile)); ++#endif /* qsort_cmp ICE */ + + if (a->objfile->separate_debug_objfile != NULL) + return a; +@@ -908,7 +914,9 @@ update_section_map (struct obj_section * + { + /* Some duplicates were eliminated. + The new size shouldn't be less than half of the original. */ ++#if 0 /* qsort_cmp ICE */ + gdb_assert (map_size / 2 <= j); ++#endif /* qsort_cmp ICE */ + map_size = j; + + map = xrealloc (map, map_size * sizeof (*map)); /* Trim excess space. */ + +2009-08-25 Jan Kratochvil + + * gdb.base/solib-overlap.exp, gdb.base/solib-overlap-lib.c, + gdb.base/solib-overlap-main.c: New. + +--- /dev/null ++++ b/gdb/testsuite/gdb.base/solib-overlap-lib.c +@@ -0,0 +1,27 @@ ++/* Copyright 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 . ++ ++ Contributed by Jan Kratochvil . */ ++ ++void ++libsym (void) ++{ ++} ++ ++#ifdef SYMB ++void ++libsymb (void) ++{ ++} ++#endif +--- /dev/null ++++ b/gdb/testsuite/gdb.base/solib-overlap-main.c +@@ -0,0 +1,25 @@ ++/* Copyright 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 . ++ ++ Contributed by Jan Kratochvil . */ ++ ++#include ++ ++int ++main (void) ++{ ++ sleep (60); ++ ++ return 1; ++} +--- /dev/null ++++ b/gdb/testsuite/gdb.base/solib-overlap.exp +@@ -0,0 +1,135 @@ ++# Copyright 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 . ++# ++# Contributed by Jan Kratochvil . ++ ++# Test GDB can cope with two libraries loaded with overlapping VMA ranges. ++# Prelink libraries first so they can be loaded and their native address. ++# In such case `struct linkmap'.l_addr will be zero. Provide different ++# unprelinked library files on the disk which have zero-based VMAs. These ++# different files should have their .dynamic section at a different offset in ++# page size so that we get for ++# warning: .dynamic section for "..." is not at the expected address ++# the reason ++# (wrong library or version mismatch?) ++# and not: ++# difference appears to be caused by prelink, adjusting expectations ++# In such case both disk libraries will be loaded at VMAs starting at zero. ++ ++if [skip_shlib_tests] { ++ return 0 ++} ++ ++# Are we on a target board? It is required for attaching to a process. ++if [is_remote target] { ++ return 0 ++} ++ ++# Library file. ++set libname "solib-overlap-lib" ++set srcfile_lib ${srcdir}/${subdir}/${libname}.c ++# Binary file. ++set testfile "solib-overlap-main" ++set srcfile ${srcdir}/${subdir}/${testfile}.c ++ ++# Base addresses for `prelink -r' which should be compatible with both -m32 and ++# -m64 targets. If it clashes with system prelinked libraries it would give ++# false PASS. ++# Prelink first lib1 at 0x40000000 and lib2 at 0x41000000. ++# During second pass try lib1 at 0x50000000 and lib2 at 0x51000000. ++foreach prelink_lib1 {0x40000000 0x50000000} { ++ set prelink_lib2 [format "0x%x" [expr $prelink_lib1 + 0x01000000]] ++ ++ set old_prefix $pf_prefix ++ lappend pf_prefix "$prelink_lib1:" ++ ++ # Library file. ++ set binfile_lib1 ${objdir}/${subdir}/${libname}1-${prelink_lib1}.so ++ set binfile_lib2 ${objdir}/${subdir}/${libname}2-${prelink_lib1}.so ++ set lib_flags {debug} ++ # Binary file. ++ set binfile_base ${testfile}-${prelink_lib1} ++ set binfile ${objdir}/${subdir}/${binfile_base} ++ set bin_flags [list debug shlib=${binfile_lib1} shlib=${binfile_lib2}] ++ set escapedbinfile [string_to_regexp ${binfile}] ++ ++ if { [gdb_compile_shlib ${srcfile_lib} ${binfile_lib1} $lib_flags] != "" ++ || [gdb_compile_shlib ${srcfile_lib} ${binfile_lib2} $lib_flags] != "" ++ || [gdb_compile ${srcfile} ${binfile} executable $bin_flags] != "" } { ++ untested "Could not compile ${binfile_lib1}, ${binfile_lib2} or ${binfile}." ++ return -1 ++ } ++ ++ if {[catch "system \"prelink -N -r ${prelink_lib1} ${binfile_lib1}\""] != 0 ++ || [catch "system \"prelink -N -r ${prelink_lib2} ${binfile_lib2}\""] != 0} { ++ # Maybe we don't have prelink. ++ untested "Could not prelink ${binfile_lib1} or ${binfile_lib2}." ++ return -1 ++ } ++ ++ # Start the program running and then wait for a bit, to be sure ++ # that it can be attached to. ++ ++ set testpid [eval exec $binfile &] ++ sleep 2 ++ if { [istarget "*-*-cygwin*"] } { ++ # testpid is the Cygwin PID, GDB uses the Windows PID, which might be ++ # different due to the way fork/exec works. ++ set testpid [ exec ps -e | gawk "{ if (\$1 == $testpid) print \$4; }" ] ++ } ++ ++ remote_exec build "mv -f ${binfile_lib1} ${binfile_lib1}-running" ++ remote_exec build "mv -f ${binfile_lib2} ${binfile_lib2}-running" ++ ++ # Provide another exported function name to cause different sizes of sections. ++ lappend lib_flags additional_flags=-DSYMB ++ ++ if { [gdb_compile_shlib ${srcfile_lib} ${binfile_lib1} $lib_flags] != "" ++ || [gdb_compile_shlib ${srcfile_lib} ${binfile_lib2} $lib_flags] != ""} { ++ untested "Could not recompile ${binfile_lib1} or ${binfile_lib2}." ++ remote_exec build "kill -9 ${testpid}" ++ return -1 ++ } ++ ++ clean_restart ${binfile_base} ++ # This testcase currently does not support remote targets. ++ # gdb_load_shlibs ${binfile_lib1} ${binfile_lib2} ++ ++ # Here we should get: ++ # warning: .dynamic section for ".../solib-overlap-lib1.so" is not at the expected address (wrong library or version mismatch?) ++ # warning: .dynamic section for ".../solib-overlap-lib2.so" is not at the expected address (wrong library or version mismatch?) ++ ++ set test attach ++ gdb_test_multiple "attach $testpid" $test { ++ -re "Attaching to program.*`?$escapedbinfile'?, process $testpid.*$gdb_prompt $" { ++ pass $test ++ } ++ -re "Attaching to program.*`?$escapedbinfile\.exe'?, process $testpid.*\[Switching to thread $testpid\..*\].*$gdb_prompt $" { ++ # Response expected on Cygwin ++ pass $test ++ } ++ } ++ ++ # Detach the process. ++ ++ gdb_test "detach" "Detaching from program: .*$escapedbinfile, process $testpid" ++ ++ # Wait a bit for gdb to finish detaching ++ ++ sleep 5 ++ ++ remote_exec build "kill -9 ${testpid}" ++ ++ set pf_prefix $old_prefix ++} diff --git a/gdb.spec b/gdb.spec index d8e6722..e7b05f7 100644 --- a/gdb.spec +++ b/gdb.spec @@ -14,7 +14,7 @@ Version: 6.8.50.20090818 # 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: 4%{?_with_upstream:.upstream}%{?dist} +Release: 5%{?_with_upstream:.upstream}%{?dist} License: GPLv3+ Group: Development/Debuggers @@ -360,6 +360,9 @@ Patch360: gdb-6.8-bz457187-largefile-test.patch # Fix compatibility of --with-system-readline and readline-6.0+. Patch375: gdb-readline-6.0.patch +# Temporarily disable assertion checks crashing in qsort_cmp (BZ 515434). +Patch378: gdb-bz515434-qsort_cmp.patch + BuildRequires: ncurses-devel texinfo gettext flex bison expat-devel Requires: readline BuildRequires: readline-devel @@ -548,6 +551,7 @@ rm -f gdb/jv-exp.c gdb/m2-exp.c gdb/objc-exp.c gdb/p-exp.c %patch352 -p1 %patch360 -p1 %patch375 -p1 +%patch378 -p1 %patch124 -p1 find -name "*.orig" | xargs rm -f @@ -821,6 +825,9 @@ fi %endif %changelog +* Tue Aug 25 2009 Jan Kratochvil - 6.8.50.20090818-5 +- Temporarily disable assertion checks crashing in qsort_cmp (BZ 515434). + * Wed Aug 19 2009 Jan Kratochvil - 6.8.50.20090818-4 - Fixup "bad type" internal error, import from FSF GDB. - archer-jankratochvil-fedora12 commit: 2ba2bc451eb832182ef84c3934115de7a329da7c