diff --git a/gdb-bz631158-cxx-this-lookup.patch b/gdb-bz631158-cxx-this-lookup.patch new file mode 100644 index 0000000..0d7ae05 --- /dev/null +++ b/gdb-bz631158-cxx-this-lookup.patch @@ -0,0 +1,14 @@ +https://bugzilla.redhat.com/show_bug.cgi?id=631158 +http://sourceware.org/ml/gdb-patches/2010-09/msg00229.html +Subject: [patch] PR 11992 "Regression: C++ this scope sometimes does not work" + +--- gdb-7.2/gdb/c-exp.y.orig 2010-08-19 17:50:00.000000000 +0200 ++++ gdb-7.2/gdb/c-exp.y 2010-09-11 20:30:15.000000000 +0200 +@@ -2422,6 +2422,7 @@ classify_name (struct block *block) + + if (sym == NULL + && parse_language->la_language == language_cplus ++ && !is_a_field_of_this + && !lookup_minimal_symbol (copy, NULL, NULL)) + return UNKNOWN_CPP_NAME; + diff --git a/gdb-upstream.patch b/gdb-upstream.patch index 87d3f1d..ad3d10c 100644 --- a/gdb-upstream.patch +++ b/gdb-upstream.patch @@ -44,3 +44,424 @@ http://sourceware.org/ml/gdb-cvs/2010-08/msg00112.html } /* If the variable object name is null, that means this + + + +https://bugzilla.redhat.com/show_bug.cgi?id=627506 +Re: [patch] Fix nesting of ui_out_redirect +http://sourceware.org/ml/gdb-patches/2010-09/msg00122.html +http://sourceware.org/ml/gdb-cvs/2010-09/msg00031.html + +### src/gdb/ChangeLog 2010/09/03 01:29:09 1.12149 +### src/gdb/ChangeLog 2010/09/03 15:41:59 1.12150 +## -1,3 +1,27 @@ ++2010-09-03 Jan Kratochvil ++ ++ * breakpoint.c (save_breakpoints): Use RETURN_MASK_ALL. ++ * cli-out.c: Include vec.h. ++ (cli_field_fmt, cli_spaces, cli_text, cli_message, cli_flush): New ++ variable stream, initialize it, use it. ++ (cli_redirect): New function comment. Replace the stream and ++ original_stream fields by the new streams field. Remove the ++ original_stream != NULL conditional, assert error on NULL instead. ++ (out_field_fmt, field_separator): New variable stream, initialize it, use it. ++ (cli_out_data_ctor): Assert non-NULL stream. Replace the stream and ++ original_stream fields by the new streams field. ++ (cli_out_set_stream): Replace the stream field by the new streams ++ field. ++ * cli-out.h: Include vec.h. ++ (ui_filep): New typedef, call DEF_VEC_P for it. ++ (struct cli_ui_out_data): Replace the stream and original_stream ++ fields by the new streams field. ++ * cli/cli-logging.c (set_logging_redirect): Call ui_out_redirect with ++ NULL first. Extend the comment. ++ (handle_redirections): Call ui_out_redirect with output. ++ * python/py-breakpoint.c (bppy_get_commands): Move ui_out_redirect ++ calls outside of the TRY_CATCH block. ++ + +[ cli/cli-logging.c removed. ] + +--- src/gdb/breakpoint.c 2010/08/30 09:49:12 1.511 ++++ src/gdb/breakpoint.c 2010/09/03 15:42:02 1.512 +@@ -11487,7 +11487,7 @@ + fprintf_unfiltered (fp, " commands\n"); + + ui_out_redirect (uiout, fp); +- TRY_CATCH (ex, RETURN_MASK_ERROR) ++ TRY_CATCH (ex, RETURN_MASK_ALL) + { + print_command_lines (uiout, tp->commands->commands, 2); + } +--- src/gdb/cli-out.c 2010/05/13 23:53:32 1.30 ++++ src/gdb/cli-out.c 2010/09/03 15:42:02 1.31 +@@ -26,6 +26,7 @@ + #include "cli-out.h" + #include "gdb_string.h" + #include "gdb_assert.h" ++#include "vec.h" + + typedef struct cli_ui_out_data cli_out_data; + +@@ -224,11 +225,13 @@ + va_list args) + { + cli_out_data *data = ui_out_data (uiout); ++ struct ui_file *stream; + + if (data->suppress_output) + return; + +- vfprintf_filtered (data->stream, format, args); ++ stream = VEC_last (ui_filep, data->streams); ++ vfprintf_filtered (stream, format, args); + + if (align != ui_noalign) + field_separator (); +@@ -238,20 +241,26 @@ + cli_spaces (struct ui_out *uiout, int numspaces) + { + cli_out_data *data = ui_out_data (uiout); ++ struct ui_file *stream; + + if (data->suppress_output) + return; +- print_spaces_filtered (numspaces, data->stream); ++ ++ stream = VEC_last (ui_filep, data->streams); ++ print_spaces_filtered (numspaces, stream); + } + + static void + cli_text (struct ui_out *uiout, const char *string) + { + cli_out_data *data = ui_out_data (uiout); ++ struct ui_file *stream; + + if (data->suppress_output) + return; +- fputs_filtered (string, data->stream); ++ ++ stream = VEC_last (ui_filep, data->streams); ++ fputs_filtered (string, stream); + } + + static void ATTRIBUTE_PRINTF (3, 0) +@@ -262,8 +271,13 @@ + + if (data->suppress_output) + return; ++ + if (ui_out_get_verblvl (uiout) >= verbosity) +- vfprintf_unfiltered (data->stream, format, args); ++ { ++ struct ui_file *stream = VEC_last (ui_filep, data->streams); ++ ++ vfprintf_unfiltered (stream, format, args); ++ } + } + + static void +@@ -280,25 +294,24 @@ + cli_flush (struct ui_out *uiout) + { + cli_out_data *data = ui_out_data (uiout); ++ struct ui_file *stream = VEC_last (ui_filep, data->streams); + +- gdb_flush (data->stream); ++ gdb_flush (stream); + } + ++/* OUTSTREAM as non-NULL will push OUTSTREAM on the stack of output streams ++ and make it therefore active. OUTSTREAM as NULL will pop the last pushed ++ output stream; it is an internal error if it does not exist. */ ++ + static int + cli_redirect (struct ui_out *uiout, struct ui_file *outstream) + { + cli_out_data *data = ui_out_data (uiout); + + if (outstream != NULL) +- { +- data->original_stream = data->stream; +- data->stream = outstream; +- } +- else if (data->original_stream != NULL) +- { +- data->stream = data->original_stream; +- data->original_stream = NULL; +- } ++ VEC_safe_push (ui_filep, data->streams, outstream); ++ else ++ VEC_pop (ui_filep, data->streams); + + return 0; + } +@@ -315,10 +328,11 @@ + const char *format,...) + { + cli_out_data *data = ui_out_data (uiout); ++ struct ui_file *stream = VEC_last (ui_filep, data->streams); + va_list args; + + va_start (args, format); +- vfprintf_filtered (data->stream, format, args); ++ vfprintf_filtered (stream, format, args); + + va_end (args); + } +@@ -329,8 +343,9 @@ + field_separator (void) + { + cli_out_data *data = ui_out_data (uiout); ++ struct ui_file *stream = VEC_last (ui_filep, data->streams); + +- fputc_filtered (' ', data->stream); ++ fputc_filtered (' ', stream); + } + + /* This is the CLI ui-out implementation functions vector */ +@@ -364,8 +379,11 @@ + void + cli_out_data_ctor (cli_out_data *self, struct ui_file *stream) + { +- self->stream = stream; +- self->original_stream = NULL; ++ gdb_assert (stream != NULL); ++ ++ self->streams = NULL; ++ VEC_safe_push (ui_filep, self->streams, stream); ++ + self->suppress_output = 0; + } + +@@ -385,8 +403,10 @@ + cli_out_set_stream (struct ui_out *uiout, struct ui_file *stream) + { + cli_out_data *data = ui_out_data (uiout); +- struct ui_file *old = data->stream; ++ struct ui_file *old; ++ ++ old = VEC_pop (ui_filep, data->streams); ++ VEC_quick_push (ui_filep, data->streams, stream); + +- data->stream = stream; + return old; + } +--- src/gdb/cli-out.h 2010/04/18 00:11:55 1.11 ++++ src/gdb/cli-out.h 2010/09/03 15:42:02 1.12 +@@ -22,14 +22,19 @@ + #define CLI_OUT_H + + #include "ui-out.h" ++#include "vec.h" ++ ++/* Used for cli_ui_out_data->streams. */ ++ ++typedef struct ui_file *ui_filep; ++DEF_VEC_P (ui_filep); + + /* These are exported so that they can be extended by other `ui_out' + implementations, like TUI's. */ + + struct cli_ui_out_data + { +- struct ui_file *stream; +- struct ui_file *original_stream; ++ VEC (ui_filep) *streams; + int suppress_output; + }; + +--- src/gdb/python/py-breakpoint.c 2010/07/01 10:36:12 1.4 ++++ src/gdb/python/py-breakpoint.c 2010/09/03 15:42:03 1.5 +@@ -474,12 +474,12 @@ + string_file = mem_fileopen (); + chain = make_cleanup_ui_file_delete (string_file); + ++ ui_out_redirect (uiout, string_file); + TRY_CATCH (except, RETURN_MASK_ALL) + { +- ui_out_redirect (uiout, string_file); + print_command_lines (uiout, breakpoint_commands (bp), 0); +- ui_out_redirect (uiout, NULL); + } ++ ui_out_redirect (uiout, NULL); + cmdstr = ui_file_xstrdup (string_file, &length); + GDB_PY_HANDLE_EXCEPTION (except); + +### src/gdb/testsuite/ChangeLog 2010/09/02 15:19:56 1.2435 +### src/gdb/testsuite/ChangeLog 2010/09/03 15:42:04 1.2436 +## -1,3 +1,7 @@ ++2010-09-03 Jan Kratochvil ++ ++ * gdb.base/ui-redirect.exp: New file. ++ + 2010-09-02 Jan Kratochvil + Joel Brobecker + +--- src/gdb/testsuite/gdb.base/ui-redirect.exp ++++ src/gdb/testsuite/gdb.base/ui-redirect.exp 2010-09-11 18:42:40.040910000 +0000 +@@ -0,0 +1,41 @@ ++# 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 . ++ ++if { [prepare_for_testing ui-redirect.exp ui-redirect start.c] } { ++ return -1 ++} ++ ++gdb_breakpoint main ++ ++set test "commands" ++gdb_test_multiple $test $test { ++ -re "End with a line saying just \"end\"\\.\r\n>$" { ++ pass $test ++ } ++} ++ ++set test "print 1" ++gdb_test_multiple $test $test { ++ -re "\r\n>$" { ++ pass $test ++ } ++} ++gdb_test_no_output "end" ++ ++gdb_test_no_output "set logging file /dev/null" ++gdb_test "set logging on" "Copying output to /dev/null\\." ++gdb_test "save breakpoints /dev/null" "Saved to file '/dev/null'\\." ++gdb_test "set logging off" "Done logging to /dev/null\\." ++gdb_test "help" "List of classes of commands:.*" + + + +https://bugzilla.redhat.com/show_bug.cgi?id=627506 +Re: [patch] Fix uiout for execute_command_to_string +http://sourceware.org/ml/gdb-patches/2010-09/msg00235.html +http://sourceware.org/ml/gdb-cvs/2010-09/msg00080.html + +### src/gdb/ChangeLog 2010/09/10 16:17:11 1.12170 +### src/gdb/ChangeLog 2010/09/11 16:00:20 1.12171 +## -1,3 +1,21 @@ ++2010-09-11 Jan Kratochvil ++ Paul Bolle ++ ++ Redirect also uiout and stdtarg{,err} in execute_command_to_string. ++ * cli-logging.c (struct saved_output_files) : New. ++ (set_logging_redirect, pop_output_files, handle_redirections): ++ Redirect also gdb_stdtargerr. ++ * defs.h (struct ui_out, make_cleanup_ui_out_redirect_pop): New ++ declarations. ++ * event-top.c (gdb_setup_readline, gdb_disable_readline): Redirect ++ also gdb_stdtargerr. ++ * top.c (execute_command_to_string): Move make_cleanup_ui_file_delete ++ to the top. Redirect also gdb_stdlog, gdb_stdtarg and gdb_stdtargerr. ++ Use ui_out_redirect, register make_cleanup_ui_out_redirect_pop. ++ * tui/tui-io.c (tui_setup_io): Redirect also gdb_stdtargerr. ++ * utils.c (do_ui_out_redirect_pop, make_cleanup_ui_out_redirect_pop): ++ New functions. ++ + +### src/gdb/testsuite/ChangeLog 2010/09/10 20:29:25 1.2444 +### src/gdb/testsuite/ChangeLog 2010/09/11 16:00:26 1.2445 +## -1,3 +1,8 @@ ++2010-09-11 Jan Kratochvil ++ ++ * gdb.python/python.exp (set height 0, collect help from uiout) ++ (verify help to uiout): New tests. ++ + +[ gdb_stdtargerr handling dropped. ] + +--- src/gdb/defs.h 2010/08/31 18:08:43 1.278 ++++ src/gdb/defs.h 2010/09/11 16:00:25 1.279 +@@ -337,6 +337,10 @@ + struct ui_file; + extern struct cleanup *make_cleanup_ui_file_delete (struct ui_file *); + ++struct ui_out; ++extern struct cleanup * ++ make_cleanup_ui_out_redirect_pop (struct ui_out *uiout); ++ + struct section_addr_info; + extern struct cleanup *(make_cleanup_free_section_addr_info + (struct section_addr_info *)); +--- src/gdb/top.c 2010/08/07 15:00:37 1.183 ++++ src/gdb/top.c 2010/09/11 16:00:25 1.184 +@@ -475,12 +475,23 @@ + + str_file = mem_fileopen (); + ++ make_cleanup_ui_file_delete (str_file); + make_cleanup_restore_ui_file (&gdb_stdout); + make_cleanup_restore_ui_file (&gdb_stderr); +- make_cleanup_ui_file_delete (str_file); ++ make_cleanup_restore_ui_file (&gdb_stdlog); ++ make_cleanup_restore_ui_file (&gdb_stdtarg); ++ make_cleanup_restore_ui_file (&gdb_stdtargerr); ++ ++ if (ui_out_redirect (uiout, str_file) < 0) ++ warning (_("Current output protocol does not support redirection")); ++ else ++ make_cleanup_ui_out_redirect_pop (uiout); + + gdb_stdout = str_file; + gdb_stderr = str_file; ++ gdb_stdlog = str_file; ++ gdb_stdtarg = str_file; ++ gdb_stdtargerr = str_file; + + execute_command (p, from_tty); + +--- src/gdb/utils.c 2010/08/07 15:00:37 1.239 ++++ src/gdb/utils.c 2010/09/11 16:00:25 1.240 +@@ -311,6 +311,26 @@ + return make_my_cleanup (&cleanup_chain, do_ui_file_delete, arg); + } + ++/* Helper function for make_cleanup_ui_out_redirect_pop. */ ++ ++static void ++do_ui_out_redirect_pop (void *arg) ++{ ++ struct ui_out *uiout = arg; ++ ++ if (ui_out_redirect (uiout, NULL) < 0) ++ warning (_("Cannot restore redirection of the current output protocol")); ++} ++ ++/* Return a new cleanup that pops the last redirection by ui_out_redirect ++ with NULL parameter. */ ++ ++struct cleanup * ++make_cleanup_ui_out_redirect_pop (struct ui_out *uiout) ++{ ++ return make_my_cleanup (&cleanup_chain, do_ui_out_redirect_pop, uiout); ++} ++ + static void + do_free_section_addr_info (void *arg) + { +--- gdb-7.2/gdb/testsuite/gdb.python/python.exp-orig 2010-08-09 21:23:00.000000000 +0200 ++++ gdb-7.2/gdb/testsuite/gdb.python/python.exp 2010-09-11 20:49:22.000000000 +0200 +@@ -110,3 +110,9 @@ gdb_test_multiple "python print \"\\n\" + } + } + gdb_test "q" "Quit" "verify pagination afterwards: q" ++ ++gdb_test_no_output "set height 0" ++ ++gdb_test_no_output "python a = gdb.execute('help', to_string=True)" "collect help from uiout" ++ ++gdb_test "python print a" ".*aliases -- Aliases of other commands.*" "verify help to uiout" diff --git a/gdb.spec b/gdb.spec index 6aa0a5b..5859107 100644 --- a/gdb.spec +++ b/gdb.spec @@ -38,7 +38,7 @@ Version: 7.2 # 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: 3%{?_with_upstream:.upstream}%{dist} +Release: 4%{?_with_upstream:.upstream}%{dist} License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ and GPLv2+ with exceptions and GPL+ and LGPLv2+ and GFDL and BSD and Public Domain Group: Development/Debuggers @@ -434,6 +434,9 @@ Patch497: gdb-false-gcc-warning.patch # Do not crash on broken separate debuginfo due to old elfutils (BZ 631575). Patch499: gdb-bz631575-gdb-index-nobits.patch +# Fix symbol lookup misses methods of current class (BZ 631158, Sami Wagiaalla). +Patch500: gdb-bz631158-cxx-this-lookup.patch + BuildRequires: ncurses-devel%{?_isa} texinfo gettext flex bison expat-devel%{?_isa} Requires: readline%{?_isa} BuildRequires: readline-devel%{?_isa} @@ -689,6 +692,7 @@ rm -f gdb/jv-exp.c gdb/m2-exp.c gdb/objc-exp.c gdb/p-exp.c %patch496 -p1 %patch497 -p1 %patch499 -p1 +%patch500 -p1 %patch393 -p1 %patch335 -p1 @@ -1070,6 +1074,10 @@ fi %endif %changelog +* Sat Sep 11 2010 Jan Kratochvil - 7.2-4.fc14 +- Fix symbol lookup misses methods of current class (BZ 631158, Sami Wagiaalla). +- Fix python gdb.execute-to_string redirection (BZ 627506, with Paul Bolle). + * Wed Sep 8 2010 Jan Kratochvil - 7.2-3.fc14 - Do not crash on broken separate debuginfo due to old elfutils (BZ 631575).