From cfb8ad09aa13aff8b0faba61ac6a8f3dc7429af18439c7b79964461f89498cf0 Mon Sep 17 00:00:00 2001 From: Stephan Kulow Date: Sat, 16 Jun 2012 04:55:29 +0000 Subject: [PATCH] Accepting request 125095 from devel:gcc - Merge from gdb-7.4.50.20120603-3.fc18.src.rpm. * Wed Jun 6 2012 Jan Kratochvil - 7.4.50.20120603-3.fc18 - Disable -lmcheck in the development builds. - Fix assertion on some files as glibc-2.15.90-8.fc18 (Doug Evans). * Sun Jun 3 2012 Jan Kratochvil - 7.4.50.20120603-2.fc18 - Fix Release. - Make yum --enablerepo compatible with at least mock-1.1.21-1.fc16 Rawhide cfg. * Sun Jun 3 2012 Jan Kratochvil - 7.4.50.20120602-1.fc18 - Rebase to FSF GDB 7.4.50.20120602. - [testsuite] BuildRequire gcc-go. - Drop printing 2D C++ vectors as matrices which no longer worked (BZ 562763). - Fix dejagnu-1.5-4.fc17 compatibility for Go (for BZ 635651). - Use librpm.so.3 for rpm-4.10.0 in Fedora 18. - Revert recent breakage of UNIX objfiles order for symbols lookup. * Sat Jun 2 2012 Jan Kratochvil - 7.4.50.20120120-48.fc17 - [ppc] Fix hardware watchpoints on PowerPC (BZ 827600, Edjunior Machado). * Mon May 28 2012 Jan Kratochvil - 7.4.50.20120120-47.fc17 - Workaround PR libc/14166 for inferior calls of strstr. * Mon May 14 2012 Jan Kratochvil - 7.4.50.20120120-46.fc17 - [RHEL5] Workaround doc build race. * Mon May 14 2012 Jan Kratochvil - 7.4.50.20120120-45.fc17 - Rename "set auto-load" patchset variable $ddir to $datadir. * Wed May 9 2012 Jan Kratochvil - 7.4.50.20120120-44.fc17 OBS-URL: https://build.opensuse.org/request/show/125095 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/gdb?expand=0&rev=88 --- gdb-6.3-bz231832-obstack-2gb.patch | 29 +- gdb-6.3-gstack-20050411.patch | 57 +- gdb-6.3-ia64-sigill-20051115.patch | 27 +- gdb-6.3-ppcdotsolib-20041022.patch | 31 - gdb-6.3-readnever-20050907.patch | 50 +- gdb-6.3-security-errata-20050610.patch | 243 - gdb-6.3-step-thread-exit-20050211-test.patch | 188 - gdb-6.3-test-dtorfix-20050121.patch | 41 +- gdb-6.3-test-pie-20050107.patch | 74 +- gdb-6.3-threaded-watchpoints2-20050225.patch | 25 +- gdb-6.5-bz203661-emit-relocs.patch | 16 +- gdb-6.5-bz216711-clone-is-outermost.patch | 323 +- gdb-6.6-bfd-vdso8k.patch | 119 + ...buildid-locate-rpm-librpm-workaround.patch | 15 +- gdb-6.6-buildid-locate-rpm-suse.patch | 131 +- gdb-6.6-buildid-locate-rpm.patch | 275 +- ...6.6-buildid-locate-solib-missing-ids.patch | 57 + gdb-6.6-buildid-locate.patch | 285 +- gdb-6.6-bz247354-leader-exit-fix.patch | 142 - gdb-6.6-bz247354-leader-exit-test.patch | 121 - ....6-scheduler_locking-step-is-default.patch | 30 +- ...heduler_locking-step-sw-watchpoints2.patch | 119 +- gdb-6.6-step-thread-exit.patch | 60 - gdb-6.6-testsuite-timeouts.patch | 56 +- gdb-6.6-threads-static-test.patch | 15 +- gdb-6.7-testsuite-stable-results.patch | 18 +- gdb-6.8-attach-signalled-detach-stopped.patch | 183 - gdb-6.8-bz254229-gcore-prpsinfo.patch | 121 +- gdb-6.8-sparc64-silence-memcpy-check.patch | 11 +- gdb-6.8-tui-singlebinary.patch | 24 - ...add-workaround-to-broken-debug-files.patch | 22 +- gdb-7.3.tar.bz2 | 3 - gdb-7.4.50.20120603.tar.bz2 | 3 + gdb-archer-pie-addons-keep-disabled.patch | 36 +- gdb-archer-pie-addons.patch | 70 +- gdb-archer.patch | 8622 +------ gdb-attach-fail-reasons-5of5.patch | 238 + gdb-attach-fail-reasons-5of5configure.patch | 186 + gdb-bz533176-fortran-omp-step.patch | 2 +- gdb-bz541866-rwatch-before-run.patch | 40 +- ...63-pretty-print-2d-vectors-libstdcxx.patch | 43 - gdb-bz562763-pretty-print-2d-vectors.patch | 398 - gdb-bz568248-oom-is-error.patch | 23 +- gdb-bz592031-siginfo-lost-4of5.patch | 46 +- gdb-bz592031-siginfo-lost-5of5.patch | 54 +- gdb-bz634108-solib_address.patch | 4 +- gdb-bz645773-case-insensitive-1of5.patch | 84 - gdb-bz645773-case-insensitive-2of5.patch | 139 - gdb-bz645773-case-insensitive-3of5.patch | 188 - gdb-bz645773-case-insensitive-4of5.patch | 669 - gdb-bz701131-readline62-1of3.patch | 21252 ---------------- gdb-bz701131-readline62-2of3.patch | 231 - gdb-bz701131-readline62-3of3.patch | 120 - gdb-ccache-workaround.patch | 4 +- gdb-core-open-vdso-warning.patch | 55 +- gdb-core-thread-internalerr-1of3.patch | 154 - gdb-core-thread-internalerr-2of3.patch | 102 - gdb-core-thread-internalerr-3of3.patch | 101 - gdb-dejagnu-go.patch | 42 + gdb-disable-mcheck.patch | 24 + gdb-dlopen-stap-probe-test.patch | 409 + gdb-dlopen-stap-probe.patch | 358 + gdb-fortran-common-reduce.patch | 33 +- gdb-fortran-common.patch | 99 +- gdb-gcc46-stdarg-prologue.patch | 709 - gdb-gcc46-typedef.patch | 218 - gdb-gdb-add-index-script.patch | 32 +- gdb-glibc-strstr-workaround.patch | 137 + gdb-glibc-vdso-workaround.patch | 30 + gdb-index-assert.patch | 60 + gdb-objfile-order.patch | 215 + gdb-ppc-ptrace.diff | 19 + gdb-prelink-rela.patch | 141 - gdb-python-rdynamic.patch | 44 + gdb-readline62-ask-more-rh.patch | 14 + gdb-runtest-pie-override.patch | 40 + gdb-stale-frame_info.patch | 174 + gdb-stap-double-free.patch | 57 - gdb-test-pp-hint-error.patch | 98 - gdb-unused-revert.patch | 44 - gdb-upstream.patch | 293 + gdb-x86-onstack-1of2.patch | 119 + gdb-x86-onstack-2of2.patch | 166 + gdb.changes | 256 + gdb.spec | 3815 ++- gdbtui | 2 + 86 files changed, 9093 insertions(+), 34330 deletions(-) delete mode 100644 gdb-6.3-ppcdotsolib-20041022.patch delete mode 100644 gdb-6.3-security-errata-20050610.patch delete mode 100644 gdb-6.3-step-thread-exit-20050211-test.patch create mode 100644 gdb-6.6-bfd-vdso8k.patch create mode 100644 gdb-6.6-buildid-locate-solib-missing-ids.patch delete mode 100644 gdb-6.6-bz247354-leader-exit-fix.patch delete mode 100644 gdb-6.6-bz247354-leader-exit-test.patch delete mode 100644 gdb-6.6-step-thread-exit.patch delete mode 100644 gdb-6.8-attach-signalled-detach-stopped.patch delete mode 100644 gdb-6.8-tui-singlebinary.patch delete mode 100644 gdb-7.3.tar.bz2 create mode 100644 gdb-7.4.50.20120603.tar.bz2 create mode 100644 gdb-attach-fail-reasons-5of5.patch create mode 100644 gdb-attach-fail-reasons-5of5configure.patch delete mode 100644 gdb-bz562763-pretty-print-2d-vectors-libstdcxx.patch delete mode 100644 gdb-bz562763-pretty-print-2d-vectors.patch delete mode 100644 gdb-bz645773-case-insensitive-1of5.patch delete mode 100644 gdb-bz645773-case-insensitive-2of5.patch delete mode 100644 gdb-bz645773-case-insensitive-3of5.patch delete mode 100644 gdb-bz645773-case-insensitive-4of5.patch delete mode 100644 gdb-bz701131-readline62-1of3.patch delete mode 100644 gdb-bz701131-readline62-2of3.patch delete mode 100644 gdb-bz701131-readline62-3of3.patch delete mode 100644 gdb-core-thread-internalerr-1of3.patch delete mode 100644 gdb-core-thread-internalerr-2of3.patch delete mode 100644 gdb-core-thread-internalerr-3of3.patch create mode 100644 gdb-dejagnu-go.patch create mode 100644 gdb-disable-mcheck.patch create mode 100644 gdb-dlopen-stap-probe-test.patch create mode 100644 gdb-dlopen-stap-probe.patch delete mode 100644 gdb-gcc46-stdarg-prologue.patch delete mode 100644 gdb-gcc46-typedef.patch create mode 100644 gdb-glibc-strstr-workaround.patch create mode 100644 gdb-glibc-vdso-workaround.patch create mode 100644 gdb-index-assert.patch create mode 100644 gdb-objfile-order.patch create mode 100644 gdb-ppc-ptrace.diff delete mode 100644 gdb-prelink-rela.patch create mode 100644 gdb-python-rdynamic.patch create mode 100644 gdb-readline62-ask-more-rh.patch create mode 100644 gdb-runtest-pie-override.patch create mode 100644 gdb-stale-frame_info.patch delete mode 100644 gdb-stap-double-free.patch delete mode 100644 gdb-test-pp-hint-error.patch delete mode 100644 gdb-unused-revert.patch create mode 100644 gdb-upstream.patch create mode 100644 gdb-x86-onstack-1of2.patch create mode 100644 gdb-x86-onstack-2of2.patch create mode 100644 gdbtui diff --git a/gdb-6.3-bz231832-obstack-2gb.patch b/gdb-6.3-bz231832-obstack-2gb.patch index ec88c56..5170634 100644 --- a/gdb-6.3-bz231832-obstack-2gb.patch +++ b/gdb-6.3-bz231832-obstack-2gb.patch @@ -1,11 +1,11 @@ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=231832 -Index: gdb-7.2.50.20101116/gdb/symmisc.c +Index: gdb-7.4.50.20111218/gdb/symmisc.c =================================================================== ---- gdb-7.2.50.20101116.orig/gdb/symmisc.c 2010-11-16 07:53:59.000000000 +0100 -+++ gdb-7.2.50.20101116/gdb/symmisc.c 2010-11-16 08:03:08.000000000 +0100 -@@ -186,8 +186,8 @@ print_objfile_statistics (void) +--- gdb-7.4.50.20111218.orig/gdb/symmisc.c 2011-04-04 17:19:59.000000000 +0200 ++++ gdb-7.4.50.20111218/gdb/symmisc.c 2011-12-19 00:28:18.189232014 +0100 +@@ -147,8 +147,8 @@ print_objfile_statistics (void) if (OBJSTAT (objfile, sz_strtab) > 0) printf_filtered (_(" Space used by a.out string tables: %d\n"), OBJSTAT (objfile, sz_strtab)); @@ -16,10 +16,10 @@ Index: gdb-7.2.50.20101116/gdb/symmisc.c printf_filtered (_(" Total memory used for psymbol cache: %d\n"), bcache_memory_used (psymbol_bcache_get_bcache (objfile->psymbol_cache))); -Index: gdb-7.2.50.20101116/include/obstack.h +Index: gdb-7.4.50.20111218/include/obstack.h =================================================================== ---- gdb-7.2.50.20101116.orig/include/obstack.h 2008-10-21 01:03:31.000000000 +0200 -+++ gdb-7.2.50.20101116/include/obstack.h 2010-11-16 08:02:37.000000000 +0100 +--- gdb-7.4.50.20111218.orig/include/obstack.h 2011-10-22 03:35:29.000000000 +0200 ++++ gdb-7.4.50.20111218/include/obstack.h 2011-12-19 00:28:18.189232014 +0100 @@ -188,31 +188,31 @@ struct obstack /* control current objec /* Declare the external functions we use; they are in obstack.c. */ @@ -125,19 +125,10 @@ Index: gdb-7.2.50.20101116/include/obstack.h if (__o->chunk_limit - __o->next_free < __len) \ _obstack_newchunk (__o, __len); \ obstack_blank_fast (__o, __len); \ -@@ -532,7 +532,7 @@ __extension__ \ - # define obstack_free(h,obj) \ - ( (h)->temp = (char *) (obj) - (char *) (h)->chunk, \ - (((h)->temp > 0 && (h)->temp < (h)->chunk_limit - (char *) (h)->chunk)\ -- ? (int) ((h)->next_free = (h)->object_base \ -+ ? (PTR_INT_TYPE) ((h)->next_free = (h)->object_base \ - = (h)->temp + (char *) (h)->chunk) \ - : (((obstack_free) ((h), (h)->temp + (char *) (h)->chunk), 0), 0))) - -Index: gdb-7.2.50.20101116/libiberty/obstack.c +Index: gdb-7.4.50.20111218/libiberty/obstack.c =================================================================== ---- gdb-7.2.50.20101116.orig/libiberty/obstack.c 2005-05-10 17:33:33.000000000 +0200 -+++ gdb-7.2.50.20101116/libiberty/obstack.c 2010-11-16 08:02:37.000000000 +0100 +--- gdb-7.4.50.20111218.orig/libiberty/obstack.c 2005-05-10 17:33:33.000000000 +0200 ++++ gdb-7.4.50.20111218/libiberty/obstack.c 2011-12-19 00:28:18.191232006 +0100 @@ -44,9 +44,11 @@ #if !defined (_LIBC) && defined (__GNU_LIBRARY__) && __GNU_LIBRARY__ > 1 #include diff --git a/gdb-6.3-gstack-20050411.patch b/gdb-6.3-gstack-20050411.patch index 539490e..13fddd5 100644 --- a/gdb-6.3-gstack-20050411.patch +++ b/gdb-6.3-gstack-20050411.patch @@ -4,11 +4,11 @@ to install and uninstall. * gstack.sh, gstack.1: New files. -Index: gdb-7.2.50.20101116/gdb/Makefile.in +Index: gdb-7.4.50.20120103/gdb/Makefile.in =================================================================== ---- gdb-7.2.50.20101116.orig/gdb/Makefile.in 2010-11-05 15:31:25.000000000 +0100 -+++ gdb-7.2.50.20101116/gdb/Makefile.in 2010-11-16 07:56:10.000000000 +0100 -@@ -972,7 +972,7 @@ gdb.z:gdb.1 +--- gdb-7.4.50.20120103.orig/gdb/Makefile.in 2012-01-03 05:52:15.000000000 +0100 ++++ gdb-7.4.50.20120103/gdb/Makefile.in 2012-01-03 05:53:25.974210230 +0100 +@@ -1017,7 +1017,7 @@ gdb.z:gdb.1 install: all @$(MAKE) $(FLAGS_TO_PASS) install-only @@ -17,7 +17,7 @@ Index: gdb-7.2.50.20101116/gdb/Makefile.in transformed_name=`t='$(program_transform_name)'; \ echo gdb | sed -e "$$t"` ; \ if test "x$$transformed_name" = x; then \ -@@ -1008,7 +1008,25 @@ install-tui: +@@ -1039,7 +1039,25 @@ install-only: $(CONFIG_INSTALL) install-python: $(SHELL) $(srcdir)/../mkinstalldirs $(DESTDIR)$(GDB_DATADIR)/python/gdb @@ -44,10 +44,10 @@ Index: gdb-7.2.50.20101116/gdb/Makefile.in transformed_name=`t='$(program_transform_name)'; \ echo gdb | sed -e $$t` ; \ if test "x$$transformed_name" = x; then \ -@@ -1030,6 +1048,17 @@ uninstall-tui: - fi ; \ - rm -f $(DESTDIR)$(bindir)/$$transformed_name$(EXEEXT) \ +@@ -1051,6 +1069,18 @@ uninstall: force $(CONFIG_UNINSTALL) $(DESTDIR)$(man1dir)/$$transformed_name.1 + @$(MAKE) DO=uninstall "DODIRS=$(SUBDIRS)" $(FLAGS_TO_PASS) subdir_do + +.PHONY: uninstall-gstack +uninstall-gstack: + transformed_name=`t='$(program_transform_name)'; \ @@ -59,14 +59,15 @@ Index: gdb-7.2.50.20101116/gdb/Makefile.in + 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 -Index: gdb-7.2.50.20101116/gdb/gstack.sh + $(COMPILE) -DTEST_CPNAMES cp-name-parser.c +Index: gdb-7.4.50.20120103/gdb/gstack.sh =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.50.20101116/gdb/gstack.sh 2010-11-16 07:55:47.000000000 +0100 -@@ -0,0 +1,48 @@ ++++ gdb-7.4.50.20120103/gdb/gstack.sh 2012-01-03 05:52:37.278385632 +0100 +@@ -0,0 +1,43 @@ +#!/bin/sh + +if test $# -ne 1; then @@ -98,14 +99,9 @@ Index: gdb-7.2.50.20101116/gdb/gstack.sh + +GDB=${GDB:-/usr/bin/gdb} + -+if $GDB -nx --quiet --batch --readnever > /dev/null 2>&1; then -+ readnever=--readnever -+else -+ readnever= -+fi -+ +# Run GDB, strip out unwanted noise. -+$GDB --quiet $readnever -nx /proc/$1/exe $1 <&1 | ++# --readnever is no longer used since .gdb_index is now in use. ++$GDB --quiet -nx /proc/$1/exe $1 <&1 | +set width 0 +set height 0 +set pagination no @@ -115,12 +111,12 @@ Index: gdb-7.2.50.20101116/gdb/gstack.sh + -e 's/^\((gdb) \)*//' \ + -e '/^#/p' \ + -e '/^Thread/p' -Index: gdb-7.2.50.20101116/gdb/testsuite/gdb.base/gstack.exp +Index: gdb-7.4.50.20120103/gdb/testsuite/gdb.base/gstack.exp =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.50.20101116/gdb/testsuite/gdb.base/gstack.exp 2010-11-16 07:55:47.000000000 +0100 -@@ -0,0 +1,71 @@ -+# Copyright (C) 2010 Free Software Foundation, Inc. ++++ gdb-7.4.50.20120103/gdb/testsuite/gdb.base/gstack.exp 2012-01-03 05:52:37.279385629 +0100 +@@ -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 @@ -150,6 +146,7 @@ Index: gdb-7.2.50.20101116/gdb/testsuite/gdb.base/gstack.exp + fail $test + return +} ++set use_gdb_stub 1 +set pid [exp_pid -i $res] +gdb_expect { + -re "looping\r\n" { @@ -177,24 +174,18 @@ Index: gdb-7.2.50.20101116/gdb/testsuite/gdb.base/gstack.exp + fail $test +} +set pid [exp_pid -i $res] -+gdb_expect { -+ -re {^#0 +0x[0-9a-f]+ in \.?func \(\)\r\n#1 +0x[0-9a-f]+ in \.?main \(\)\r\nGSTACK-END\r\n$} { ++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 + } -+ eof { -+ fail "$test (eof)" -+ } -+ timeout { -+ fail "$test (timeout)" -+ } +} +gdb_exit + +remote_exec host "kill -9 $pid" -Index: gdb-7.2.50.20101116/gdb/testsuite/gdb.base/gstack.c +Index: gdb-7.4.50.20120103/gdb/testsuite/gdb.base/gstack.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.50.20101116/gdb/testsuite/gdb.base/gstack.c 2010-11-16 07:55:47.000000000 +0100 ++++ gdb-7.4.50.20120103/gdb/testsuite/gdb.base/gstack.c 2012-01-03 05:52:37.279385629 +0100 @@ -0,0 +1,43 @@ +/* This testcase is part of GDB, the GNU debugger. + diff --git a/gdb-6.3-ia64-sigill-20051115.patch b/gdb-6.3-ia64-sigill-20051115.patch index b8daf45..b1cd07b 100644 --- a/gdb-6.3-ia64-sigill-20051115.patch +++ b/gdb-6.3-ia64-sigill-20051115.patch @@ -12,10 +12,10 @@ gdb/testsuite: * gdb.arch/ia64-sigill.c: New test. * gdb.arch/ia64-sigill.exp: Ditto. -Index: gdb-7.2.50.20101231/gdb/testsuite/gdb.arch/ia64-sigill.exp +Index: gdb-7.3.50.20110722/gdb/testsuite/gdb.arch/ia64-sigill.exp =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.50.20101231/gdb/testsuite/gdb.arch/ia64-sigill.exp 2011-01-01 00:55:04.000000000 +0100 ++++ gdb-7.3.50.20110722/gdb/testsuite/gdb.arch/ia64-sigill.exp 2011-07-22 19:16:13.000000000 +0200 @@ -0,0 +1,49 @@ +# Copyright 2005 Free Software Foundation, Inc. + @@ -66,10 +66,10 @@ Index: gdb-7.2.50.20101231/gdb/testsuite/gdb.arch/ia64-sigill.exp +gdb_test "handle SIGILL nostop noprint" "SIGILL.*No.*No.*Yes.*" "handle sigill" +gdb_test "run" "Starting program.*ia64-sigill.*\[New thread.*\].*hello world.*Program exited normally." "run to exit" + -Index: gdb-7.2.50.20101231/gdb/testsuite/gdb.arch/ia64-sigill.c +Index: gdb-7.3.50.20110722/gdb/testsuite/gdb.arch/ia64-sigill.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.50.20101231/gdb/testsuite/gdb.arch/ia64-sigill.c 2011-01-01 00:55:04.000000000 +0100 ++++ gdb-7.3.50.20110722/gdb/testsuite/gdb.arch/ia64-sigill.c 2011-07-22 19:16:13.000000000 +0200 @@ -0,0 +1,8 @@ +#include + @@ -79,11 +79,11 @@ Index: gdb-7.2.50.20101231/gdb/testsuite/gdb.arch/ia64-sigill.c + return 0; +} + -Index: gdb-7.2.50.20101231/gdb/linux-nat.c +Index: gdb-7.3.50.20110722/gdb/linux-nat.c =================================================================== ---- gdb-7.2.50.20101231.orig/gdb/linux-nat.c 2011-01-01 00:54:04.000000000 +0100 -+++ gdb-7.2.50.20101231/gdb/linux-nat.c 2011-01-01 00:55:58.000000000 +0100 -@@ -3652,7 +3652,8 @@ retry: +--- gdb-7.3.50.20110722.orig/gdb/linux-nat.c 2011-07-22 19:15:05.000000000 +0200 ++++ gdb-7.3.50.20110722/gdb/linux-nat.c 2011-07-22 19:16:13.000000000 +0200 +@@ -3733,7 +3733,8 @@ retry: threads can be a bit time-consuming so if we want decent performance with heavily multi-threaded programs, especially when they're using a high frequency timer, we'd better avoid it if we @@ -93,14 +93,3 @@ Index: gdb-7.2.50.20101231/gdb/linux-nat.c if (WIFSTOPPED (status)) { -@@ -3670,7 +3671,9 @@ retry: - && inf->control.stop_soon == NO_STOP_QUIETLY - && signal_stop_state (signo) == 0 - && signal_print_state (signo) == 0 -- && signal_pass_state (signo) == 1) -+ && signal_pass_state (signo) == 1 -+ && signo != TARGET_SIGNAL_ILL -+ && signo != TARGET_SIGNAL_TRAP) - { - /* FIMXE: kettenis/2001-06-06: Should we resume all threads - here? It is not clear we should. GDB may not expect diff --git a/gdb-6.3-ppcdotsolib-20041022.patch b/gdb-6.3-ppcdotsolib-20041022.patch deleted file mode 100644 index dfa69ce..0000000 --- a/gdb-6.3-ppcdotsolib-20041022.patch +++ /dev/null @@ -1,31 +0,0 @@ -2004-10-22 Andrew Cagney - - * solib-svr4.c (enable_break): Convert a symbol descriptor into - the corresponding function entry point. - (solib_break_names): Delete "._dl_debug_state", no longer needed. - -2007-10-12 Jan Kratochvil - - Port to GDB-6.7. - -Index: gdb-6.8.50.20090802/gdb/solib-svr4.c -=================================================================== ---- gdb-6.8.50.20090802.orig/gdb/solib-svr4.c 2009-08-03 10:03:36.000000000 +0200 -+++ gdb-6.8.50.20090802/gdb/solib-svr4.c 2009-08-03 10:51:15.000000000 +0200 -@@ -1431,7 +1431,15 @@ enable_break (struct svr4_info *info) - { - sym_addr = bfd_lookup_symbol (tmp_bfd, *bkpt_namep); - if (sym_addr != 0) -- break; -+ { -+ /* The symbol might be a descriptor, convert to into the -+ corresponding code address. */ -+ sym_addr = gdbarch_convert_from_func_ptr_addr (target_gdbarch, -+ sym_addr, -+ tmp_bfd_target); -+ if (sym_addr != 0) -+ break; -+ } - } - - if (sym_addr != 0) diff --git a/gdb-6.3-readnever-20050907.patch b/gdb-6.3-readnever-20050907.patch index de17966..bd7abf3 100644 --- a/gdb-6.3-readnever-20050907.patch +++ b/gdb-6.3-readnever-20050907.patch @@ -11,11 +11,11 @@ * gdb.texinfo (File Options): Document --readnever. -Index: gdb-7.2.90.20110411/gdb/doc/gdb.texinfo +Index: gdb-7.4.50.20120602/gdb/doc/gdb.texinfo =================================================================== ---- gdb-7.2.90.20110411.orig/gdb/doc/gdb.texinfo 2011-04-11 19:11:55.000000000 +0200 -+++ gdb-7.2.90.20110411/gdb/doc/gdb.texinfo 2011-04-11 19:15:51.000000000 +0200 -@@ -1007,6 +1007,12 @@ Read each symbol file's entire symbol ta +--- gdb-7.4.50.20120602.orig/gdb/doc/gdb.texinfo 2012-06-02 18:16:36.000000000 +0200 ++++ gdb-7.4.50.20120602/gdb/doc/gdb.texinfo 2012-06-02 18:25:20.300254019 +0200 +@@ -1020,6 +1020,12 @@ Read each symbol file's entire symbol ta the default, which is to read it incrementally as it is needed. This makes startup slower, but makes future operations faster. @@ -28,11 +28,11 @@ Index: gdb-7.2.90.20110411/gdb/doc/gdb.texinfo @end table @node Mode Options -Index: gdb-7.2.90.20110411/gdb/main.c +Index: gdb-7.4.50.20120602/gdb/main.c =================================================================== ---- gdb-7.2.90.20110411.orig/gdb/main.c 2011-04-11 19:11:56.000000000 +0200 -+++ gdb-7.2.90.20110411/gdb/main.c 2011-04-11 19:15:51.000000000 +0200 -@@ -398,6 +398,7 @@ captured_main (void *data) +--- gdb-7.4.50.20120602.orig/gdb/main.c 2012-06-02 18:16:36.000000000 +0200 ++++ gdb-7.4.50.20120602/gdb/main.c 2012-06-02 18:25:20.302254019 +0200 +@@ -414,6 +414,7 @@ captured_main (void *data) {"xdb", no_argument, &xdb_commands, 1}, {"dbx", no_argument, &dbx_commands, 1}, {"readnow", no_argument, &readnow_symbol_files, 1}, @@ -40,7 +40,7 @@ Index: gdb-7.2.90.20110411/gdb/main.c {"r", no_argument, &readnow_symbol_files, 1}, {"quiet", no_argument, &quiet, 1}, {"q", no_argument, &quiet, 1}, -@@ -1064,6 +1065,7 @@ Options:\n\n\ +@@ -1131,6 +1132,7 @@ Options:\n\n\ fputs_unfiltered (_("\ --quiet Do not print version number on startup.\n\ --readnow Fully read symbol files on first access.\n\ @@ -48,11 +48,11 @@ Index: gdb-7.2.90.20110411/gdb/main.c "), stream); fputs_unfiltered (_("\ --se=FILE Use FILE as symbol file and executable file.\n\ -Index: gdb-7.2.90.20110411/gdb/symfile.c +Index: gdb-7.4.50.20120602/gdb/symfile.c =================================================================== ---- gdb-7.2.90.20110411.orig/gdb/symfile.c 2011-03-23 19:23:55.000000000 +0100 -+++ gdb-7.2.90.20110411/gdb/symfile.c 2011-04-11 19:15:51.000000000 +0200 -@@ -81,6 +81,7 @@ static void clear_symtab_users_cleanup ( +--- gdb-7.4.50.20120602.orig/gdb/symfile.c 2012-05-31 20:44:49.000000000 +0200 ++++ gdb-7.4.50.20120602/gdb/symfile.c 2012-06-02 18:25:20.334254013 +0200 +@@ -80,6 +80,7 @@ static void clear_symtab_users_cleanup ( /* Global variables owned by this file. */ int readnow_symbol_files; /* Read full symbols immediately. */ @@ -60,20 +60,20 @@ Index: gdb-7.2.90.20110411/gdb/symfile.c /* External variables and functions referenced. */ -Index: gdb-7.2.90.20110411/gdb/dwarf2read.c +Index: gdb-7.4.50.20120602/gdb/dwarf2read.c =================================================================== ---- gdb-7.2.90.20110411.orig/gdb/dwarf2read.c 2011-04-11 19:11:55.000000000 +0200 -+++ gdb-7.2.90.20110411/gdb/dwarf2read.c 2011-04-11 19:16:01.000000000 +0200 -@@ -58,6 +58,7 @@ - #include "c-lang.h" +--- gdb-7.4.50.20120602.orig/gdb/dwarf2read.c 2012-06-02 18:16:36.000000000 +0200 ++++ gdb-7.4.50.20120602/gdb/dwarf2read.c 2012-06-02 18:25:32.837250535 +0200 +@@ -63,6 +63,7 @@ #include "valprint.h" + #include "gdbcore.h" /* for gnutarget */ #include +#include "top.h" #include #include "gdb_string.h" -@@ -1351,8 +1352,9 @@ dwarf2_has_info (struct objfile *objfile - bfd_map_over_sections (objfile->obfd, dwarf2_locate_sections, NULL); +@@ -1514,8 +1515,9 @@ dwarf2_has_info (struct objfile *objfile + (void *) names); dwarf2_per_objfile->objfile = objfile; } - return (dwarf2_per_objfile->info.asection != NULL @@ -83,12 +83,12 @@ Index: gdb-7.2.90.20110411/gdb/dwarf2read.c + && dwarf2_per_objfile->abbrev.asection != NULL)); } - /* When loading sections, we can either look for ".", or for -Index: gdb-7.2.90.20110411/gdb/top.h + /* When loading sections, we look either for uncompressed section or for +Index: gdb-7.4.50.20120602/gdb/top.h =================================================================== ---- gdb-7.2.90.20110411.orig/gdb/top.h 2011-01-01 16:33:18.000000000 +0100 -+++ gdb-7.2.90.20110411/gdb/top.h 2011-04-11 19:15:51.000000000 +0200 -@@ -61,6 +61,7 @@ extern void set_prompt (char *); +--- gdb-7.4.50.20120602.orig/gdb/top.h 2012-01-23 18:12:30.000000000 +0100 ++++ gdb-7.4.50.20120602/gdb/top.h 2012-06-02 18:25:20.367254001 +0200 +@@ -60,6 +60,7 @@ extern void set_prompt (const char *s); /* From random places. */ extern int readnow_symbol_files; diff --git a/gdb-6.3-security-errata-20050610.patch b/gdb-6.3-security-errata-20050610.patch deleted file mode 100644 index d2d22aa..0000000 --- a/gdb-6.3-security-errata-20050610.patch +++ /dev/null @@ -1,243 +0,0 @@ -http://sourceware.org/ml/gdb-patches/2005-05/threads.html#00637 -Proposed upstream but never committed upstream. - -2005-06-09 Jeff Johnston - - * gdb.base/gdbinit.exp: New testcase. - * gdb.base/gdbinit.sample: Sample .gdbinit for gdbinit.exp. - -2005-06-08 Daniel Jacobowitz - Jeff Johnston - - * Makefile.in (cli-cmds.o): Update. - * configure.in: Add check for getuid. - * configure: Regenerated. - * config.in: Ditto. - * main.c (captured_main): Pass -1 to source_command when loading - gdbinit files. - * cli/cli-cmds.c: Include "gdb_stat.h" and . - (source_command): Update documentation. Check permissions if - FROM_TTY is -1. - -Index: gdb-7.2.50.20101231/gdb/cli/cli-cmds.c -=================================================================== ---- gdb-7.2.50.20101231.orig/gdb/cli/cli-cmds.c 2010-12-29 03:11:04.000000000 +0100 -+++ gdb-7.2.50.20101231/gdb/cli/cli-cmds.c 2011-01-01 00:53:51.000000000 +0100 -@@ -39,6 +39,7 @@ - #include "source.h" - #include "disasm.h" - #include "tracepoint.h" -+#include "gdb_stat.h" - - #include "ui-out.h" - -@@ -488,7 +489,7 @@ Script filename extension recognition is - - int - find_and_open_script (const char *script_file, int search_path, -- FILE **streamp, char **full_pathp) -+ FILE **streamp, char **full_pathp, int from_tty) - { - char *file; - int fd; -@@ -514,6 +515,32 @@ find_and_open_script (const char *script - return 0; - } - -+#ifdef HAVE_GETUID -+ if (from_tty == -1) -+ { -+ struct stat statbuf; -+ -+ if (fstat (fd, &statbuf) < 0) -+ { -+ int save_errno = errno; -+ -+ close (fd); -+ do_cleanups (old_cleanups); -+ errno = save_errno; -+ return 0; -+ } -+ if (statbuf.st_uid != getuid () || (statbuf.st_mode & S_IWOTH)) -+ { -+ /* FILE gets freed by do_cleanups (old_cleanups). */ -+ warning (_("not using untrusted file \"%s\""), file); -+ close (fd); -+ do_cleanups (old_cleanups); -+ errno = EPERM; -+ return 0; -+ } -+ } -+#endif -+ - do_cleanups (old_cleanups); - - *streamp = fdopen (fd, FOPEN_RT); -@@ -573,13 +600,14 @@ source_script_with_search (const char *f - if (file == NULL || *file == 0) - error (_("source command requires file name of file to source.")); - -- if (!find_and_open_script (file, search_path, &stream, &full_path)) -+ if (!find_and_open_script (file, search_path, &stream, &full_path, -+ from_tty)) - { - /* The script wasn't found, or was otherwise inaccessible. - If the source command was invoked interactively, throw an - error. Otherwise (e.g. if it was invoked by a script), - silently ignore the error. */ -- if (from_tty) -+ if (from_tty > 0) - perror_with_name (file); - else - return; -Index: gdb-7.2.50.20101231/gdb/testsuite/gdb.base/gdbinit.exp -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.50.20101231/gdb/testsuite/gdb.base/gdbinit.exp 2011-01-01 00:53:09.000000000 +0100 -@@ -0,0 +1,91 @@ -+# Copyright 2005 -+# 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 2 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, write to the Free Software -+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+ -+# Please email any bugs, comments, and/or additions to this file to: -+# bug-gdb@prep.ai.mit.edu -+ -+# This file was written by Jeff Johnston . -+ -+# are we on a target board -+if [is_remote target] { -+ return -+} -+ -+ -+global verbose -+global GDB -+global GDBFLAGS -+global gdb_prompt -+global timeout -+global gdb_spawn_id; -+ -+gdb_stop_suppressing_tests; -+ -+verbose "Spawning $GDB -nw" -+ -+if [info exists gdb_spawn_id] { -+ return 0; -+} -+ -+if ![is_remote host] { -+ if { [which $GDB] == 0 } then { -+ perror "$GDB does not exist." -+ exit 1 -+ } -+} -+ -+set env(HOME) [pwd] -+remote_exec build "rm .gdbinit" -+remote_exec build "cp ${srcdir}/${subdir}/gdbinit.sample .gdbinit" -+remote_exec build "chmod 646 .gdbinit" -+ -+set res [remote_spawn host "$GDB -nw [host_info gdb_opts]"]; -+if { $res < 0 || $res == "" } { -+ perror "Spawning $GDB failed." -+ return 1; -+} -+gdb_expect 360 { -+ -re "warning: not using untrusted file.*\.gdbinit.*\[\r\n\]$gdb_prompt $" { -+ pass "untrusted .gdbinit caught." -+ } -+ -re "$gdb_prompt $" { -+ fail "untrusted .gdbinit caught." -+ } -+ timeout { -+ fail "(timeout) untrusted .gdbinit caught." -+ } -+} -+ -+remote_exec build "chmod 644 .gdbinit" -+set res [remote_spawn host "$GDB -nw [host_info gdb_opts]"]; -+if { $res < 0 || $res == "" } { -+ perror "Spawning $GDB failed." -+ return 1; -+} -+gdb_expect 360 { -+ -re "warning: not using untrusted file.*\.gdbinit.*\[\r\n\]$gdb_prompt $" { -+ fail "trusted .gdbinit allowed." -+ } -+ -re "in gdbinit.*$gdb_prompt $" { -+ pass "trusted .gdbinit allowed." -+ } -+ timeout { -+ fail "(timeout) trusted .gdbinit allowed." -+ } -+} -+ -+remote_exec build "rm .gdbinit" -Index: gdb-7.2.50.20101231/gdb/testsuite/gdb.base/gdbinit.sample -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.50.20101231/gdb/testsuite/gdb.base/gdbinit.sample 2011-01-01 00:53:09.000000000 +0100 -@@ -0,0 +1 @@ -+echo "\nin gdbinit" -Index: gdb-7.2.50.20101231/gdb/main.c -=================================================================== ---- gdb-7.2.50.20101231.orig/gdb/main.c 2010-12-29 01:58:14.000000000 +0100 -+++ gdb-7.2.50.20101231/gdb/main.c 2011-01-01 00:53:09.000000000 +0100 -@@ -805,7 +805,7 @@ Excess command line arguments ignored. ( - debugging or what directory you are in. */ - - if (home_gdbinit && !inhibit_gdbinit) -- catch_command_errors (source_script, home_gdbinit, 0, RETURN_MASK_ALL); -+ catch_command_errors (source_script, home_gdbinit, -1, RETURN_MASK_ALL); - - /* Now perform all the actions indicated by the arguments. */ - if (cdarg != NULL) -@@ -880,7 +880,7 @@ Can't attach to process and specify a co - /* Read the .gdbinit file in the current directory, *if* it isn't - the same as the $HOME/.gdbinit file (it should exist, also). */ - if (local_gdbinit && !inhibit_gdbinit) -- catch_command_errors (source_script, local_gdbinit, 0, RETURN_MASK_ALL); -+ catch_command_errors (source_script, local_gdbinit, -1, RETURN_MASK_ALL); - - /* Now that all .gdbinit's have been read and all -d options have been - processed, we can read any scripts mentioned in SYMARG. -Index: gdb-7.2.50.20101231/gdb/python/py-auto-load.c -=================================================================== ---- gdb-7.2.50.20101231.orig/gdb/python/py-auto-load.c 2010-12-15 18:27:59.000000000 +0100 -+++ gdb-7.2.50.20101231/gdb/python/py-auto-load.c 2011-01-01 00:53:09.000000000 +0100 -@@ -224,7 +224,7 @@ source_section_scripts (struct objfile * - } - - opened = find_and_open_script (file, 1 /*search_path*/, -- &stream, &full_path); -+ &stream, &full_path, 1 /* from_tty */); - - /* If the file is not found, we still record the file in the hash table, - we only want to print an error message once. -Index: gdb-7.2.50.20101231/gdb/cli/cli-cmds.h -=================================================================== ---- gdb-7.2.50.20101231.orig/gdb/cli/cli-cmds.h 2010-12-29 03:11:04.000000000 +0100 -+++ gdb-7.2.50.20101231/gdb/cli/cli-cmds.h 2011-01-01 00:53:09.000000000 +0100 -@@ -126,7 +126,8 @@ extern void source_script (char *, int); - /* Exported to objfiles.c. */ - - extern int find_and_open_script (const char *file, int search_path, -- FILE **streamp, char **full_path); -+ FILE **streamp, char **full_path, -+ int from_tty); - - /* Command tracing state. */ - diff --git a/gdb-6.3-step-thread-exit-20050211-test.patch b/gdb-6.3-step-thread-exit-20050211-test.patch deleted file mode 100644 index e9573aa..0000000 --- a/gdb-6.3-step-thread-exit-20050211-test.patch +++ /dev/null @@ -1,188 +0,0 @@ -2005-02-11 Jeff Johnston - - * testsuite/gdb.threads/step-thread-exit.c: New testcase. - * testsuite/gdb.threads/step-thread-exit.exp: Ditto. - -Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.threads/step-thread-exit.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.threads/step-thread-exit.c 2008-12-08 22:21:26.000000000 +0100 -@@ -0,0 +1,50 @@ -+/* This testcase is part of GDB, the GNU debugger. -+ -+ Copyright 2005 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 2 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, write to the Free Software -+ Foundation, Inc., 59 Temple Place - Suite 330, -+ Boston, MA 02111-1307, USA. */ -+ -+#include -+#include -+#include -+#include -+ -+void *thread_function (void *ptr) -+{ -+ int *x = (int *)ptr; -+ printf("In thread_function, *x is %d\n", *x); -+} /* thread_function_end */ -+ -+volatile int repeat = 0; -+ -+main() -+{ -+ int ret; -+ pthread_t th; -+ int i = 3; -+ -+ ret = pthread_create (&th, NULL, thread_function, &i); -+ do -+ { -+ repeat = 0; -+ sleep (3); /* sleep */ -+ } -+ while (repeat); -+ pthread_join (th, NULL); -+ return 0; -+} -+ -+ -Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.threads/step-thread-exit.exp -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.threads/step-thread-exit.exp 2008-12-08 22:22:14.000000000 +0100 -@@ -0,0 +1,123 @@ -+# This testcase is part of GDB, the GNU debugger. -+ -+# Copyright 2005 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 2 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, write to the Free Software -+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+ -+# Check that GDB can step over a thread exit. -+ -+set testfile "step-thread-exit" -+set srcfile ${testfile}.c -+set binfile ${objdir}/${subdir}/${testfile} -+if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug "incdir=${objdir}"]] != "" } { -+ return -1 -+} -+ -+gdb_exit -+gdb_start -+gdb_reinitialize_dir $srcdir/$subdir -+gdb_load ${binfile} -+ -+# Reset the debug file directory so we can't debug within the C library -+gdb_test "set debug-file-directory ." "" "" -+ -+# -+# Run to `main' where we begin our tests. -+# -+ -+if ![runto_main] then { -+ gdb_suppress_tests -+} -+ -+# FIXME: Currently the main thread will escape/exit before our thread finishes -+# without this setting. -+gdb_test "set scheduler-locking step" -+gdb_test "show scheduler-locking" "Mode for locking scheduler during execution is \"step\"." "check scheduler-locking first" -+ -+set sleep_line [expr [gdb_get_line_number "sleep"]] -+set end_line [expr [gdb_get_line_number "thread_function_end"]] -+ -+gdb_breakpoint "$end_line" -+gdb_test "continue" "Break.*thread_function.*" "continue to thread_function 1" -+ -+# Keep nexting until we cause the thread to exit. We expect the main -+# thread to be stopped and a message printed to tell us we have stepped -+# over the thread exit. -+set test "step over thread exit 1" -+gdb_test_multiple "next" "$test" { -+ -re "\}.*$gdb_prompt $" { -+ send_gdb "next\n" -+ exp_continue -+ } -+ -re "\[Thread .* exited\].*Program received signal SIGSTOP.*$gdb_prompt $" { -+ pass "$test" -+ } -+ -re "start_thread.*$gdb_prompt $" { -+ send_gdb "next\n" -+ exp_continue -+ } -+} -+ -+# Without this fixup we could end up in: -+# #0 0x00110416 in __kernel_vsyscall () -+# #1 0x0011de26 in __lll_unlock_wake_private () from /lib/libpthread.so.0 -+# #2 0x001179f4 in _L_unlock_3164 () from /lib/libpthread.so.0 -+# #3 0x00116f01 in pthread_create@@GLIBC_2.1 () from /lib/libpthread.so.0 -+# #4 0x08048531 in main () at ../.././gdb/testsuite/gdb.threads/step-thread-exit.c:39 -+gdb_breakpoint "$sleep_line" -+gdb_test "set repeat=1" "" "Get to the sleep function prepare 1" -+gdb_test "continue" "Break.*$sleep_line.*" "Get to the sleep function 1" -+ -+gdb_test "bt" "main.*$sleep_line.*" "backtrace after step 1" -+ -+runto_main -+gdb_test "show scheduler-locking" "Mode for locking scheduler during execution is \"step\"." "check scheduler-locking second" -+ -+gdb_breakpoint "$sleep_line" -+gdb_breakpoint "$end_line" -+set test "continue to thread_function 2" -+gdb_test_multiple "continue" "$test" { -+ -re "Break.*thread_function.*$gdb_prompt $" { -+ pass $test -+ } -+ -re "Break.*$sleep_line.*$gdb_prompt $" { -+ gdb_test "set repeat=1" "" "" -+ send_gdb "continue\n" -+ exp_continue -+ } -+} -+ -+# Keep nexting until we cause the thread to exit. In this case, we -+# expect the breakpoint in the main thread to have already triggered -+# and so we should stop there with a message that we stepped over -+# the thread exit. -+set test "step over thread exit 2" -+gdb_test_multiple "next" "$test" { -+ -re "\}.*$gdb_prompt $" { -+ send_gdb "next\n" -+ exp_continue -+ } -+ -re "\[Thread .* exited\].*Break.*$sleep_line.*$gdb_prompt $" { -+ pass "$test (breakpoint hit)" -+ } -+ -re "\[Thread .* exited\].*$gdb_prompt $" { -+ pass "$test (breakpoint not hit)" -+ } -+ -re "start_thread.*$gdb_prompt $" { -+ send_gdb "next\n" -+ exp_continue -+ } -+} -+ diff --git a/gdb-6.3-test-dtorfix-20050121.patch b/gdb-6.3-test-dtorfix-20050121.patch index 351ce70..c26ba06 100644 --- a/gdb-6.3-test-dtorfix-20050121.patch +++ b/gdb-6.3-test-dtorfix-20050121.patch @@ -1,32 +1,7 @@ -Index: gdb/testsuite/ChangeLog -2005-01-21 Jeff Johnston - - * gdb.cp/constructortest.exp: New test. - * gdb.cp/constructortest.cc: Ditto. - * gdb.cp/templates.exp: Change break of dtor to be fully quoted. - -2007-09-22 Jan Kratochvil - - * gdb.cp/constructortest.exp, gdb.cp/constructortest.cc: Test also the - `$delete' destructor variant. - -2007-09-25 Jan Kratochvil - - * gdb.cp/constructortest.exp: Delete the FIXME workaround of restarting - the whole GDB. - -2007-10-05 Jan Kratochvil - - * gdb.cp/constructortest.exp: Test BREAKPOINT_RE_SET for multiple PCs - by PIE. - * gdb.cp/constructortest.exp: Handle the change of settings breakpoints - always at all the ctor/dtor variants. - -[ Removed the `gdb.cp/templates.exp' patch. ] -[ Updated the patch for "(X location") of GDB-6.8+. ] - ---- gdb-6.3/gdb/testsuite/gdb.cp/constructortest.cc.fix Fri Jan 21 17:06:56 2005 -+++ gdb-6.3/gdb/testsuite/gdb.cp/constructortest.cc Fri Jan 21 17:05:18 2005 +Index: gdb-7.4.50.20111219/gdb/testsuite/gdb.cp/constructortest.cc +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.4.50.20111219/gdb/testsuite/gdb.cp/constructortest.cc 2011-12-19 22:05:02.825431735 +0100 @@ -0,0 +1,99 @@ +/* This testcase is part of GDB, the GNU debugger. + @@ -127,8 +102,10 @@ Index: gdb/testsuite/ChangeLog +{ + y = 2; /* First line D */ +} ---- gdb-6.3/gdb/testsuite/gdb.cp/constructortest.exp.fix Fri Jan 21 17:07:02 2005 -+++ gdb-6.3/gdb/testsuite/gdb.cp/constructortest.exp Fri Jan 21 17:05:29 2005 +Index: gdb-7.4.50.20111219/gdb/testsuite/gdb.cp/constructortest.exp +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.4.50.20111219/gdb/testsuite/gdb.cp/constructortest.exp 2011-12-19 23:07:24.148290893 +0100 @@ -0,0 +1,130 @@ +# This testcase is part of GDB, the GNU debugger. + @@ -232,7 +209,7 @@ Index: gdb/testsuite/ChangeLog +set define_line_dtor [gdb_get_line_number "Destructor C"] +# Break on the various forms of the C::~C destructor +# " ([23] locations)" is displayed depending on G++ version. -+gdb_test "break C\:\:~C" "Breakpoint .*, line ($define_line_dtor|$define_line_dtor)\\..*" "breaking on C::~C" ++gdb_test "break C\:\:~C" "Breakpoint .*: C::~C\\. \\(2 locations\\)" "breaking on C::~C" +gdb_continue_to_breakpoint "First line ~C" + +# Verify that we can break by line number in a destructor and find diff --git a/gdb-6.3-test-pie-20050107.patch b/gdb-6.3-test-pie-20050107.patch index 35e3a6c..23a0e02 100644 --- a/gdb-6.3-test-pie-20050107.patch +++ b/gdb-6.3-test-pie-20050107.patch @@ -1,29 +1,29 @@ -Index: gdb-7.2.50.20110320/gdb/testsuite/configure.ac +Index: gdb-7.4.50.20120602/gdb/testsuite/configure.ac =================================================================== ---- gdb-7.2.50.20110320.orig/gdb/testsuite/configure.ac 2011-03-03 17:57:55.000000000 +0100 -+++ gdb-7.2.50.20110320/gdb/testsuite/configure.ac 2011-03-20 20:21:43.000000000 +0100 -@@ -97,6 +97,6 @@ AC_OUTPUT([Makefile \ +--- gdb-7.4.50.20120602.orig/gdb/testsuite/configure.ac 2012-04-25 16:07:22.000000000 +0200 ++++ gdb-7.4.50.20120602/gdb/testsuite/configure.ac 2012-06-02 18:24:38.456266545 +0200 +@@ -96,6 +96,6 @@ AC_OUTPUT([Makefile \ gdb.hp/gdb.aCC/Makefile gdb.hp/gdb.compat/Makefile \ - gdb.hp/gdb.defects/Makefile \ + gdb.hp/gdb.defects/Makefile gdb.linespec/Makefile \ gdb.mi/Makefile gdb.modula2/Makefile gdb.multi/Makefile \ - gdb.objc/Makefile gdb.opencl/Makefile gdb.opt/Makefile gdb.pascal/Makefile \ + gdb.objc/Makefile gdb.opencl/Makefile gdb.opt/Makefile gdb.pascal/Makefile gdb.pie/Makefile \ gdb.python/Makefile gdb.reverse/Makefile gdb.stabs/Makefile \ gdb.threads/Makefile gdb.trace/Makefile gdb.xml/Makefile]) -Index: gdb-7.2.50.20110320/gdb/testsuite/configure +Index: gdb-7.4.50.20120602/gdb/testsuite/configure =================================================================== ---- gdb-7.2.50.20110320.orig/gdb/testsuite/configure 2011-03-03 17:57:55.000000000 +0100 -+++ gdb-7.2.50.20110320/gdb/testsuite/configure 2011-03-20 20:21:43.000000000 +0100 +--- gdb-7.4.50.20120602.orig/gdb/testsuite/configure 2012-04-25 16:07:21.000000000 +0200 ++++ gdb-7.4.50.20120602/gdb/testsuite/configure 2012-06-02 18:25:06.200258240 +0200 @@ -3448,7 +3448,7 @@ done --ac_config_files="$ac_config_files Makefile gdb.ada/Makefile gdb.arch/Makefile gdb.asm/Makefile gdb.base/Makefile gdb.cell/Makefile gdb.cp/Makefile gdb.disasm/Makefile gdb.dwarf2/Makefile gdb.fortran/Makefile gdb.server/Makefile gdb.java/Makefile gdb.hp/Makefile gdb.hp/gdb.objdbg/Makefile gdb.hp/gdb.base-hp/Makefile gdb.hp/gdb.aCC/Makefile gdb.hp/gdb.compat/Makefile gdb.hp/gdb.defects/Makefile gdb.mi/Makefile gdb.modula2/Makefile gdb.multi/Makefile gdb.objc/Makefile gdb.opencl/Makefile gdb.opt/Makefile gdb.pascal/Makefile gdb.python/Makefile gdb.reverse/Makefile gdb.stabs/Makefile gdb.threads/Makefile gdb.trace/Makefile gdb.xml/Makefile" -+ac_config_files="$ac_config_files Makefile gdb.ada/Makefile gdb.arch/Makefile gdb.asm/Makefile gdb.base/Makefile gdb.cell/Makefile gdb.cp/Makefile gdb.disasm/Makefile gdb.dwarf2/Makefile gdb.fortran/Makefile gdb.server/Makefile gdb.java/Makefile gdb.hp/Makefile gdb.hp/gdb.objdbg/Makefile gdb.hp/gdb.base-hp/Makefile gdb.hp/gdb.aCC/Makefile gdb.hp/gdb.compat/Makefile gdb.hp/gdb.defects/Makefile gdb.mi/Makefile gdb.modula2/Makefile gdb.multi/Makefile gdb.objc/Makefile gdb.opencl/Makefile gdb.opt/Makefile gdb.pascal/Makefile gdb.pie/Makefile gdb.python/Makefile gdb.reverse/Makefile gdb.stabs/Makefile gdb.threads/Makefile gdb.trace/Makefile gdb.xml/Makefile" +-ac_config_files="$ac_config_files Makefile gdb.ada/Makefile gdb.arch/Makefile gdb.asm/Makefile gdb.base/Makefile gdb.cell/Makefile gdb.cp/Makefile gdb.disasm/Makefile gdb.dwarf2/Makefile gdb.fortran/Makefile gdb.go/Makefile gdb.server/Makefile gdb.java/Makefile gdb.hp/Makefile gdb.hp/gdb.objdbg/Makefile gdb.hp/gdb.base-hp/Makefile gdb.hp/gdb.aCC/Makefile gdb.hp/gdb.compat/Makefile gdb.hp/gdb.defects/Makefile gdb.linespec/Makefile gdb.mi/Makefile gdb.modula2/Makefile gdb.multi/Makefile gdb.objc/Makefile gdb.opencl/Makefile gdb.opt/Makefile gdb.pascal/Makefile gdb.python/Makefile gdb.reverse/Makefile gdb.stabs/Makefile gdb.threads/Makefile gdb.trace/Makefile gdb.xml/Makefile" ++ac_config_files="$ac_config_files Makefile gdb.ada/Makefile gdb.arch/Makefile gdb.asm/Makefile gdb.base/Makefile gdb.cell/Makefile gdb.cp/Makefile gdb.disasm/Makefile gdb.dwarf2/Makefile gdb.fortran/Makefile gdb.go/Makefile gdb.server/Makefile gdb.java/Makefile gdb.hp/Makefile gdb.hp/gdb.objdbg/Makefile gdb.hp/gdb.base-hp/Makefile gdb.hp/gdb.aCC/Makefile gdb.hp/gdb.compat/Makefile gdb.hp/gdb.defects/Makefile gdb.linespec/Makefile gdb.mi/Makefile gdb.modula2/Makefile gdb.multi/Makefile gdb.objc/Makefile gdb.opencl/Makefile gdb.opt/Makefile gdb.pascal/Makefile gdb.pie/Makefile gdb.python/Makefile gdb.reverse/Makefile gdb.stabs/Makefile gdb.threads/Makefile gdb.trace/Makefile gdb.xml/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure -@@ -4173,6 +4173,7 @@ do +@@ -4175,6 +4175,7 @@ do "gdb.opencl/Makefile") CONFIG_FILES="$CONFIG_FILES gdb.opencl/Makefile" ;; "gdb.opt/Makefile") CONFIG_FILES="$CONFIG_FILES gdb.opt/Makefile" ;; "gdb.pascal/Makefile") CONFIG_FILES="$CONFIG_FILES gdb.pascal/Makefile" ;; @@ -31,10 +31,10 @@ Index: gdb-7.2.50.20110320/gdb/testsuite/configure "gdb.python/Makefile") CONFIG_FILES="$CONFIG_FILES gdb.python/Makefile" ;; "gdb.reverse/Makefile") CONFIG_FILES="$CONFIG_FILES gdb.reverse/Makefile" ;; "gdb.stabs/Makefile") CONFIG_FILES="$CONFIG_FILES gdb.stabs/Makefile" ;; -Index: gdb-7.2.50.20110320/gdb/testsuite/gdb.pie/attach.c +Index: gdb-7.4.50.20120602/gdb/testsuite/gdb.pie/attach.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.50.20110320/gdb/testsuite/gdb.pie/attach.c 2011-03-20 20:21:43.000000000 +0100 ++++ gdb-7.4.50.20120602/gdb/testsuite/gdb.pie/attach.c 2012-06-02 18:24:38.497266532 +0200 @@ -0,0 +1,20 @@ +/* This program is intended to be started outside of gdb, and then + attached to by gdb. Thus, it simply spins in a loop. The loop @@ -56,10 +56,10 @@ Index: gdb-7.2.50.20110320/gdb/testsuite/gdb.pie/attach.c + } + return 0; +} -Index: gdb-7.2.50.20110320/gdb/testsuite/gdb.pie/attach2.c +Index: gdb-7.4.50.20120602/gdb/testsuite/gdb.pie/attach2.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.50.20110320/gdb/testsuite/gdb.pie/attach2.c 2011-03-20 20:21:43.000000000 +0100 ++++ gdb-7.4.50.20120602/gdb/testsuite/gdb.pie/attach2.c 2012-06-02 18:24:38.504266529 +0200 @@ -0,0 +1,24 @@ +/* This program is intended to be started outside of gdb, and then + attached to by gdb. Thus, it simply spins in a loop. The loop @@ -85,10 +85,10 @@ Index: gdb-7.2.50.20110320/gdb/testsuite/gdb.pie/attach2.c + } + return (0); +} -Index: gdb-7.2.50.20110320/gdb/testsuite/gdb.pie/break.c +Index: gdb-7.4.50.20120602/gdb/testsuite/gdb.pie/break.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.50.20110320/gdb/testsuite/gdb.pie/break.c 2011-03-20 20:21:43.000000000 +0100 ++++ gdb-7.4.50.20120602/gdb/testsuite/gdb.pie/break.c 2012-06-02 18:24:38.505266529 +0200 @@ -0,0 +1,146 @@ +/* This testcase is part of GDB, the GNU debugger. + @@ -236,10 +236,10 @@ Index: gdb-7.2.50.20110320/gdb/testsuite/gdb.pie/break.c + } + return 0; +} -Index: gdb-7.2.50.20110320/gdb/testsuite/gdb.pie/break1.c +Index: gdb-7.4.50.20120602/gdb/testsuite/gdb.pie/break1.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.50.20110320/gdb/testsuite/gdb.pie/break1.c 2011-03-20 20:21:43.000000000 +0100 ++++ gdb-7.4.50.20120602/gdb/testsuite/gdb.pie/break1.c 2012-06-02 18:24:38.506266530 +0200 @@ -0,0 +1,44 @@ +/* This testcase is part of GDB, the GNU debugger. + @@ -285,10 +285,10 @@ Index: gdb-7.2.50.20110320/gdb/testsuite/gdb.pie/break1.c +void marker3 (a, b) char *a, *b; {} /* set breakpoint 18 here */ +void marker4 (d) long d; {} /* set breakpoint 13 here */ +#endif -Index: gdb-7.2.50.20110320/gdb/testsuite/gdb.pie/coremaker.c +Index: gdb-7.4.50.20120602/gdb/testsuite/gdb.pie/coremaker.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.50.20110320/gdb/testsuite/gdb.pie/coremaker.c 2011-03-20 20:21:43.000000000 +0100 ++++ gdb-7.4.50.20120602/gdb/testsuite/gdb.pie/coremaker.c 2012-06-02 18:24:38.506266530 +0200 @@ -0,0 +1,142 @@ +/* Copyright 1992, 1993, 1994, 1995, 1996, 1999 + Free Software Foundation, Inc. @@ -432,10 +432,10 @@ Index: gdb-7.2.50.20110320/gdb/testsuite/gdb.pie/coremaker.c + return 0; +} + -Index: gdb-7.2.50.20110320/gdb/testsuite/gdb.pie/attach.exp +Index: gdb-7.4.50.20120602/gdb/testsuite/gdb.pie/attach.exp =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.50.20110320/gdb/testsuite/gdb.pie/attach.exp 2011-03-20 20:25:53.000000000 +0100 ++++ gdb-7.4.50.20120602/gdb/testsuite/gdb.pie/attach.exp 2012-06-02 18:24:38.508266531 +0200 @@ -0,0 +1,417 @@ +# Copyright 1997, 1999, 2002 Free Software Foundation, Inc. + @@ -854,11 +854,11 @@ Index: gdb-7.2.50.20110320/gdb/testsuite/gdb.pie/attach.exp +do_call_attach_tests + +return 0 -Index: gdb-7.2.50.20110320/gdb/testsuite/gdb.pie/break.exp +Index: gdb-7.4.50.20120602/gdb/testsuite/gdb.pie/break.exp =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.50.20110320/gdb/testsuite/gdb.pie/break.exp 2011-03-20 20:21:43.000000000 +0100 -@@ -0,0 +1,966 @@ ++++ gdb-7.4.50.20120602/gdb/testsuite/gdb.pie/break.exp 2012-06-02 18:24:38.510266529 +0200 +@@ -0,0 +1,962 @@ +# Copyright 1988, 1990, 1991, 1992, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2002, 2003, 2004 +# Free Software Foundation, Inc. @@ -1246,14 +1246,10 @@ Index: gdb-7.2.50.20110320/gdb/testsuite/gdb.pie/break.exp +# Verify that GDB responds gracefully when asked to set a breakpoint +# on a nonexistent source line. +# -+send_gdb "break 999\n" -+gdb_expect { -+ -re "No line 999 in file .*$gdb_prompt $"\ -+ {pass "break on non-existent source line"} -+ -re "$gdb_prompt $"\ -+ {fail "break on non-existent source line"} -+ timeout {fail "(timeout) break on non-existent source line"} -+} ++gdb_test_no_output "set breakpoint pending off" ++gdb_test "break 999" \ ++ "No line 999 in the current file." \ ++ "break on non-existent source line" + +# Run to the desired default location. If not positioned here, the +# tests below don't work. @@ -1378,7 +1374,7 @@ Index: gdb-7.2.50.20110320/gdb/testsuite/gdb.pie/break.exp +# +send_gdb "break $bp_location12 foo\n" +gdb_expect { -+ -re "Junk at end of arguments..*$gdb_prompt $"\ ++ -re "malformed linespec error: unexpected string, \"foo\"\r\n$gdb_prompt $"\ + {pass "breakpoint with trailing garbage disallowed"} + -re "$gdb_prompt $"\ + {fail "breakpoint with trailing garbage disallowed"} @@ -1825,10 +1821,10 @@ Index: gdb-7.2.50.20110320/gdb/testsuite/gdb.pie/break.exp + send_gdb "set args main\n" + gdb_expect -re ".*$gdb_prompt $" {} +} -Index: gdb-7.2.50.20110320/gdb/testsuite/gdb.pie/corefile.exp +Index: gdb-7.4.50.20120602/gdb/testsuite/gdb.pie/corefile.exp =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.50.20110320/gdb/testsuite/gdb.pie/corefile.exp 2011-03-20 20:21:43.000000000 +0100 ++++ gdb-7.4.50.20120602/gdb/testsuite/gdb.pie/corefile.exp 2012-06-02 18:24:38.511266528 +0200 @@ -0,0 +1,233 @@ +# Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000 +# Free Software Foundation, Inc. @@ -2063,10 +2059,10 @@ Index: gdb-7.2.50.20110320/gdb/testsuite/gdb.pie/corefile.exp +gdb_test "up" "#\[0-9\]* *\[0-9xa-fH'\]* in .* \\(.*\\).*" "up in corefile.exp (reinit)" + +gdb_test "core" "No core file now." -Index: gdb-7.2.50.20110320/gdb/testsuite/gdb.pie/Makefile.in +Index: gdb-7.4.50.20120602/gdb/testsuite/gdb.pie/Makefile.in =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.50.20110320/gdb/testsuite/gdb.pie/Makefile.in 2011-03-20 20:21:43.000000000 +0100 ++++ gdb-7.4.50.20120602/gdb/testsuite/gdb.pie/Makefile.in 2012-06-02 18:24:38.512266527 +0200 @@ -0,0 +1,19 @@ +VPATH = @srcdir@ +srcdir = @srcdir@ diff --git a/gdb-6.3-threaded-watchpoints2-20050225.patch b/gdb-6.3-threaded-watchpoints2-20050225.patch index f06f98c..9c94b70 100644 --- a/gdb-6.3-threaded-watchpoints2-20050225.patch +++ b/gdb-6.3-threaded-watchpoints2-20050225.patch @@ -32,17 +32,20 @@ (amd64_linux_hw_breakpoint, amd64_linux_remove_hw_breakpoint): Ditto. (amd64_linux_new_thread): Ditto. (_initialize_amd64_linux_nat): Register linux new thread observer. - * testsuite/gdb.threads/watchthreads2.c: New test case. - * testsuite/gdb.threads/watchthreads2.exp: Ditto. + * testsuite/gdb.threads/watchthreads-threaded.c: New test case. + * testsuite/gdb.threads/watchthreads-threaded.exp: Ditto. [ With recent upstream GDB (6.8) reduced only to the testcase. ] +[ It was called watchthreads2.{exp,c} before but it conflicted with FSF GDB new + testcase of the same name. ] + FIXME: The testcase does not expects multiple watchpoints hits per one stop. -Index: gdb-6.5/gdb/testsuite/gdb.threads/watchthreads2.c +Index: gdb-7.4.50.20111219/gdb/testsuite/gdb.threads/watchthreads-threaded.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-6.5/gdb/testsuite/gdb.threads/watchthreads-threaded.c 2006-07-12 01:54:29.000000000 -0300 ++++ gdb-7.4.50.20111219/gdb/testsuite/gdb.threads/watchthreads-threaded.c 2011-12-19 22:05:02.867431570 +0100 @@ -0,0 +1,66 @@ +/* This testcase is part of GDB, the GNU debugger. + @@ -110,10 +113,10 @@ Index: gdb-6.5/gdb/testsuite/gdb.threads/watchthreads2.c + pthread_exit(NULL); +} + -Index: gdb-6.5/gdb/testsuite/gdb.threads/watchthreads2.exp +Index: gdb-7.4.50.20111219/gdb/testsuite/gdb.threads/watchthreads-threaded.exp =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-6.5/gdb/testsuite/gdb.threads/watchthreads-threaded.exp 2006-07-12 01:54:29.000000000 -0300 ++++ gdb-7.4.50.20111219/gdb/testsuite/gdb.threads/watchthreads-threaded.exp 2011-12-19 22:28:33.294911982 +0100 @@ -0,0 +1,126 @@ +# This testcase is part of GDB, the GNU debugger. + @@ -141,7 +144,7 @@ Index: gdb-6.5/gdb/testsuite/gdb.threads/watchthreads2.exp + return 0; +} + -+set testfile "watchthreads2" ++set testfile "watchthreads-threaded" +set srcfile ${testfile}.c +set binfile ${objdir}/${subdir}/${testfile} +if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug "incdir=${objdir}"]] != "" } { @@ -198,13 +201,13 @@ Index: gdb-6.5/gdb/testsuite/gdb.threads/watchthreads2.exp +for {set i 0} {$i < 30} {incr i} { + set test_flag 0 + gdb_test_multiple "continue" "threaded watch loop" { -+ -re "Hardware watchpoint 3: args\\\[2\\\].*Old value = 0.*New value = 1.*main \\\(\\\) at .*watchthreads2.c:$init_line.*$gdb_prompt $" ++ -re "Hardware watchpoint 3: args\\\[2\\\].*Old value = 0.*New value = 1.*main \\\(\\\) at .*watchthreads-threaded.c:$init_line.*$gdb_prompt $" + { set args_2 1; set test_flag 1 } -+ -re "Hardware watchpoint 4: args\\\[3\\\].*Old value = 0.*New value = 1.*main \\\(\\\) at .*watchthreads2.c:$init_line.*$gdb_prompt $" ++ -re "Hardware watchpoint 4: args\\\[3\\\].*Old value = 0.*New value = 1.*main \\\(\\\) at .*watchthreads-threaded.c:$init_line.*$gdb_prompt $" + { set args_3 1; set test_flag 1 } -+ -re "Hardware watchpoint 3: args\\\[2\\\].*Old value = $args_2.*New value = [expr $args_2+1].*in thread_function \\\(arg=0x2\\\) at .*watchthreads2.c:$inc_line.*$gdb_prompt $" ++ -re "Hardware watchpoint 3: args\\\[2\\\].*Old value = $args_2.*New value = [expr $args_2+1].*in thread_function \\\(arg=0x2\\\) at .*watchthreads-threaded.c:$inc_line.*$gdb_prompt $" + { set args_2 [expr $args_2+1]; set test_flag 1 } -+ -re "Hardware watchpoint 4: args\\\[3\\\].*Old value = $args_3.*New value = [expr $args_3+1].*in thread_function \\\(arg=0x3\\\) at .*watchthreads2.c:$inc_line.*$gdb_prompt $" ++ -re "Hardware watchpoint 4: args\\\[3\\\].*Old value = $args_3.*New value = [expr $args_3+1].*in thread_function \\\(arg=0x3\\\) at .*watchthreads-threaded.c:$inc_line.*$gdb_prompt $" + { set args_3 [expr $args_3+1]; set test_flag 1 } + } + # If we fail above, don't bother continuing loop diff --git a/gdb-6.5-bz203661-emit-relocs.patch b/gdb-6.5-bz203661-emit-relocs.patch index 01469bb..9f63e20 100644 --- a/gdb-6.5-bz203661-emit-relocs.patch +++ b/gdb-6.5-bz203661-emit-relocs.patch @@ -1,14 +1,14 @@ -Index: gdb-7.0.90.20100306/gdb/symfile.c +Index: gdb-7.4.50.20120602/gdb/symfile.c =================================================================== ---- gdb-7.0.90.20100306.orig/gdb/symfile.c 2010-03-06 23:20:35.000000000 +0100 -+++ gdb-7.0.90.20100306/gdb/symfile.c 2010-03-06 23:26:25.000000000 +0100 -@@ -3642,6 +3642,12 @@ default_symfile_relocate (struct objfile - { - bfd *abfd = objfile->obfd; +--- gdb-7.4.50.20120602.orig/gdb/symfile.c 2012-06-02 18:25:20.000000000 +0200 ++++ gdb-7.4.50.20120602/gdb/symfile.c 2012-06-02 18:26:36.145232057 +0200 +@@ -3630,6 +3630,12 @@ default_symfile_relocate (struct objfile + DWO file. */ + bfd *abfd = sectp->owner; + /* Executable files have all the relocations already resolved. -+ * Handle files linked with --emit-relocs. -+ * http://sources.redhat.com/ml/gdb/2006-08/msg00137.html */ ++ Handle files linked with --emit-relocs. ++ http://sources.redhat.com/ml/gdb/2006-08/msg00137.html */ + if ((abfd->flags & EXEC_P) != 0) + return NULL; + diff --git a/gdb-6.5-bz216711-clone-is-outermost.patch b/gdb-6.5-bz216711-clone-is-outermost.patch index e2110ef..225f9a0 100644 --- a/gdb-6.5-bz216711-clone-is-outermost.patch +++ b/gdb-6.5-bz216711-clone-is-outermost.patch @@ -23,8 +23,325 @@ instead. Port to GDB-6.7. +Index: gdb-7.4.50.20120602/gdb/amd64-linux-tdep.c +=================================================================== +--- gdb-7.4.50.20120602.orig/gdb/amd64-linux-tdep.c 2012-06-02 21:05:45.352280128 +0200 ++++ gdb-7.4.50.20120602/gdb/amd64-linux-tdep.c 2012-06-02 21:06:25.536265325 +0200 +@@ -271,6 +271,80 @@ amd64_linux_register_reggroup_p (struct + + /* Set the program counter for process PTID to PC. */ + ++/* Detect the outermost frame; during unwind of ++ #5 0x000000305cec68c3 in clone () from /lib64/tls/libc.so.6 ++ avoid the additional bogus frame ++ #6 0x0000000000000000 in ?? ++ We compare if the `linux_clone_code' block is _before_ unwound PC. */ ++ ++static const unsigned char linux_clone_code[] = ++{ ++/* libc/sysdeps/unix/sysv/linux/x86_64/clone.S */ ++/* #ifdef RESET_PID */ ++/* ... */ ++/* mov $SYS_ify(getpid), %eax */ ++/* 0xb8, 0x27, 0x00, 0x00, 0x00 */ ++/* OR */ ++/* mov $SYS_ify(getpid), %rax */ ++/* 0x48, 0xc7, 0xc0, 0x27, 0x00, 0x00, 0x00 */ ++/* so just: */ ++ 0x27, 0x00, 0x00, 0x00, ++/* syscall */ ++ 0x0f, 0x05, ++/* movl %eax, %fs:PID */ ++ 0x64, 0x89, 0x04, 0x25, 0x94, 0x00, 0x00, 0x00, ++/* movl %eax, %fs:TID */ ++ 0x64, 0x89, 0x04, 0x25, 0x90, 0x00, 0x00, 0x00, ++/* #endif */ ++/* |* Set up arguments for the function call. *| */ ++/* popq %rax |* Function to call. *| */ ++ 0x58, ++/* popq %rdi |* Argument. *| */ ++ 0x5f, ++/* call *%rax$ */ ++ 0xff, 0xd0 ++}; ++ ++#define LINUX_CLONE_LEN (sizeof linux_clone_code) ++ ++static int ++amd64_linux_clone_running (struct frame_info *this_frame) ++{ ++ CORE_ADDR pc = get_frame_pc (this_frame); ++ unsigned char buf[LINUX_CLONE_LEN]; ++ ++ if (!safe_frame_unwind_memory (this_frame, pc - LINUX_CLONE_LEN, buf, ++ LINUX_CLONE_LEN)) ++ return 0; ++ ++ if (memcmp (buf, linux_clone_code, LINUX_CLONE_LEN) != 0) ++ return 0; ++ ++ return 1; ++} ++ ++static int ++amd64_linux_outermost_frame (struct frame_info *this_frame) ++{ ++ CORE_ADDR pc = get_frame_pc (this_frame); ++ const char *name; ++ ++ find_pc_partial_function (pc, &name, NULL, NULL); ++ ++ /* If we have NAME, we can optimize the search. ++ `clone' NAME still needs to have the code checked as its name may be ++ present in the user code. ++ `__clone' NAME should not be present in the user code but in the initial ++ parts of the `__clone' implementation the unwind still makes sense. ++ More detailed unwinding decision would be too much sensitive to possible ++ subtle changes in specific glibc revisions. */ ++ if (name == NULL || strcmp (name, "clone") == 0 ++ || strcmp ("__clone", name) == 0) ++ return (amd64_linux_clone_running (this_frame) != 0); ++ ++ return 0; ++} ++ + static void + amd64_linux_write_pc (struct regcache *regcache, CORE_ADDR pc) + { +@@ -1330,6 +1404,8 @@ amd64_linux_init_abi (struct gdbarch_inf + + tdep->xsave_xcr0_offset = I386_LINUX_XSAVE_XCR0_OFFSET; + ++ tdep->outermost_frame_p = amd64_linux_outermost_frame; ++ + /* GNU/Linux uses SVR4-style shared libraries. */ + set_solib_svr4_fetch_link_map_offsets + (gdbarch, svr4_lp64_fetch_link_map_offsets); +Index: gdb-7.4.50.20120602/gdb/amd64-tdep.c +=================================================================== +--- gdb-7.4.50.20120602.orig/gdb/amd64-tdep.c 2012-06-02 21:05:45.352280128 +0200 ++++ gdb-7.4.50.20120602/gdb/amd64-tdep.c 2012-06-02 21:06:00.437274574 +0200 +@@ -2138,6 +2138,7 @@ amd64_frame_unwind_stop_reason (struct f + { + struct amd64_frame_cache *cache = + amd64_frame_cache (this_frame, this_cache); ++ struct gdbarch_tdep *tdep = gdbarch_tdep (get_frame_arch (this_frame)); + + if (!cache->base_p) + return UNWIND_UNAVAILABLE; +@@ -2146,6 +2147,10 @@ amd64_frame_unwind_stop_reason (struct f + if (cache->base == 0) + return UNWIND_OUTERMOST; + ++ /* Detect OS dependent outermost frames; such as `clone'. */ ++ if (tdep->outermost_frame_p && tdep->outermost_frame_p (this_frame)) ++ return UNWIND_OUTERMOST; ++ + return UNWIND_NO_REASON; + } + +@@ -2155,6 +2160,7 @@ amd64_frame_this_id (struct frame_info * + { + struct amd64_frame_cache *cache = + amd64_frame_cache (this_frame, this_cache); ++ struct gdbarch_tdep *tdep = gdbarch_tdep (get_frame_arch (this_frame)); + + if (!cache->base_p) + return; +@@ -2163,6 +2169,10 @@ amd64_frame_this_id (struct frame_info * + if (cache->base == 0) + return; + ++ /* Detect OS dependent outermost frames; such as `clone'. */ ++ if (tdep->outermost_frame_p && tdep->outermost_frame_p (this_frame)) ++ return; ++ + (*this_id) = frame_id_build (cache->base + 16, cache->pc); + } + +Index: gdb-7.4.50.20120602/gdb/i386-tdep.c +=================================================================== +--- gdb-7.4.50.20120602.orig/gdb/i386-tdep.c 2012-06-02 21:05:45.352280128 +0200 ++++ gdb-7.4.50.20120602/gdb/i386-tdep.c 2012-06-02 21:06:00.466274562 +0200 +@@ -7639,6 +7639,9 @@ i386_gdbarch_init (struct gdbarch_info i + + tdep->xsave_xcr0_offset = -1; + ++ /* Unwinding stops on i386 automatically. */ ++ tdep->outermost_frame_p = NULL; ++ + tdep->record_regmap = i386_record_regmap; + + set_gdbarch_long_long_align_bit (gdbarch, 32); +Index: gdb-7.4.50.20120602/gdb/i386-tdep.h +=================================================================== +--- gdb-7.4.50.20120602.orig/gdb/i386-tdep.h 2012-06-02 21:05:45.352280128 +0200 ++++ gdb-7.4.50.20120602/gdb/i386-tdep.h 2012-06-02 21:06:00.486274568 +0200 +@@ -219,6 +219,9 @@ struct gdbarch_tdep + int (*i386_sysenter_record) (struct regcache *regcache); + /* Parse syscall args. */ + int (*i386_syscall_record) (struct regcache *regcache); ++ ++ /* Detect OS dependent outermost frames; such as `clone'. */ ++ int (*outermost_frame_p) (struct frame_info *this_frame); + }; + + /* Floating-point registers. */ +Index: gdb-7.4.50.20120602/gdb/ia64-tdep.c +=================================================================== +--- gdb-7.4.50.20120602.orig/gdb/ia64-tdep.c 2012-06-02 21:05:45.352280128 +0200 ++++ gdb-7.4.50.20120602/gdb/ia64-tdep.c 2012-06-02 21:06:00.490274552 +0200 +@@ -2176,6 +2176,138 @@ static const struct frame_unwind ia64_fr + default_frame_sniffer + }; + ++/* Detect the outermost frame; during unwind of ++ #6 0x2000000000347100 in __clone2 () from /lib/libc.so.6.1 ++ avoid the additional bogus frame ++ #7 0x0000000000000000 in ?? () */ ++ ++static char linux_clone2_code[] = ++{ ++/* libc/sysdeps/unix/sysv/linux/ia64/clone2.S */ ++ 0x09, 0x00, 0x20, 0x12, 0x90, 0x11, 0x00, 0x40, ++ 0x28, 0x20, 0x23, 0x00, 0x00, 0x00, 0x04, 0x00, ++/* st4 [r9]=r8 */ ++/* st4 [r10]=r8 */ ++/* ;; */ ++/* #endif */ ++ 0x02, 0x50, 0x21, 0x40, 0x18, 0x14, 0x90, 0x02, ++ 0x90, 0x00, 0x42, 0x00, 0x00, 0x00, 0x04, 0x00, ++/* 1: ld8 out1=[in0],8 |* Retrieve code pointer. *| */ ++/* mov out0=in4 |* Pass proper argument to fn *| */ ++/* ;; */ ++ 0x11, 0x08, 0x00, 0x40, 0x18, 0x10, 0x60, 0x50, ++ 0x05, 0x80, 0x03, 0x00, 0x68, 0x00, 0x80, 0x12, ++/* ld8 gp=[in0] |* Load function gp. *| */ ++/* mov b6=out1 */ ++/* br.call.dptk.many rp=b6 |* Call fn(arg) in the child *| */ ++/* ;; */ ++ 0x10, 0x48, 0x01, 0x10, 0x00, 0x21, 0x10, 0x00, ++ 0xa0, 0x00, 0x42, 0x00, 0x98, 0xdf, 0xf7, 0x5b, ++/* mov out0=r8 |* Argument to _exit *| */ ++/* mov gp=loc0 */ ++/* .globl HIDDEN_JUMPTARGET(_exit) */ ++/* br.call.dpnt.many rp=HIDDEN_JUMPTARGET(_exit) */ ++/* |* call _exit with result from fn. *| */ ++ 0x11, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, ++ 0x00, 0x02, 0x00, 0x80, 0x00, 0x00, 0x84, 0x00 ++/* ret |* Not reached. *| */ ++}; ++ ++#define LINUX_CLONE_PRE_SLOTS 3 /* Number of slots before PC. */ ++#define LINUX_CLONE_LEN (sizeof linux_clone2_code) ++ ++static int ++ia64_linux_clone2_running (struct frame_info *this_frame) ++{ ++ CORE_ADDR pc = get_frame_pc (this_frame); ++ char buf[LINUX_CLONE_LEN]; ++ struct minimal_symbol *minsym; ++ long long instr; ++ ++ if (!safe_frame_unwind_memory (this_frame, pc - LINUX_CLONE_PRE_SLOTS * 16, ++ buf, LINUX_CLONE_LEN)) ++ return 0; ++ ++ if (memcmp (buf, linux_clone2_code, LINUX_CLONE_PRE_SLOTS * 16) != 0) ++ return 0; ++ ++ /* Adjust the expected "_exit" address. */ ++ minsym = lookup_minimal_symbol_text ("_exit", NULL); ++ if (minsym == NULL) ++ return 0; ++ ++ instr = slotN_contents (&linux_clone2_code[LINUX_CLONE_PRE_SLOTS * 16], 2); ++ instr &= ~(((1L << 20) - 1) << 13); ++ /* Address is relative to the jump instruction slot, not the next one. */ ++ instr |= (((SYMBOL_VALUE_ADDRESS (minsym) - (pc & ~0xfL)) >> 4) ++ & ((1L << 20) - 1)) << 13; ++ replace_slotN_contents (&linux_clone2_code[LINUX_CLONE_PRE_SLOTS * 16], instr, ++ 2); ++ ++ if (memcmp (&buf[LINUX_CLONE_PRE_SLOTS * 16], ++ &linux_clone2_code[LINUX_CLONE_PRE_SLOTS * 16], ++ LINUX_CLONE_LEN - (LINUX_CLONE_PRE_SLOTS * 16)) != 0) ++ return 0; ++ ++ return 1; ++} ++ ++static int ++ia64_outermost_frame (struct frame_info *this_frame) ++{ ++ CORE_ADDR pc = get_frame_pc (this_frame); ++ char *name; ++ ++ find_pc_partial_function (pc, &name, NULL, NULL); ++ ++ /* If we have NAME, we can optimize the search. ++ `clone' NAME still needs to have the code checked as its name may be ++ present in the user code. ++ `__clone' NAME should not be present in the user code but in the initial ++ parts of the `__clone' implementation the unwind still makes sense. ++ More detailed unwinding decision would be too much sensitive to possible ++ subtle changes in specific glibc revisions. */ ++ if (name == NULL || strcmp (name, "clone2") == 0 ++ || strcmp ("__clone2", name) == 0) ++ return (ia64_linux_clone2_running (this_frame) != 0); ++ ++ return 0; ++} ++ ++static void ++ia64_clone2_frame_this_id (struct frame_info *this_frame, void **this_cache, ++ struct frame_id *this_id) ++{ ++ /* Leave the default outermost frame at *THIS_ID. */ ++} ++ ++static struct value * ++ia64_clone2_frame_prev_register (struct frame_info *this_frame, ++ void **this_cache, int regnum) ++{ ++ return frame_unwind_got_register (this_frame, regnum, regnum); ++} ++ ++static int ++ia64_clone2_frame_sniffer (const struct frame_unwind *self, ++ struct frame_info *this_frame, ++ void **this_prologue_cache) ++{ ++ if (ia64_outermost_frame (this_frame)) ++ return 1; ++ ++ return 0; ++} ++ ++static const struct frame_unwind ia64_clone2_frame_unwind = ++{ ++ NORMAL_FRAME, ++ &ia64_clone2_frame_this_id, ++ &ia64_clone2_frame_prev_register, ++ NULL, ++ &ia64_clone2_frame_sniffer ++}; ++ + /* Signal trampolines. */ + + static void +@@ -4146,6 +4278,7 @@ ia64_gdbarch_init (struct gdbarch_info i + set_gdbarch_dummy_id (gdbarch, ia64_dummy_id); + + set_gdbarch_unwind_pc (gdbarch, ia64_unwind_pc); ++ frame_unwind_append_unwinder (gdbarch, &ia64_clone2_frame_unwind); + #ifdef HAVE_LIBUNWIND_IA64_H + frame_unwind_append_unwinder (gdbarch, + &ia64_libunwind_sigtramp_frame_unwind); +Index: gdb-7.4.50.20120602/gdb/testsuite/gdb.threads/bt-clone-stop.c +=================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-6.8.50.20090802/gdb/testsuite/gdb.threads/bt-clone-stop.c 2009-08-03 15:50:08.000000000 +0200 ++++ gdb-7.4.50.20120602/gdb/testsuite/gdb.threads/bt-clone-stop.c 2012-06-02 21:06:00.514274544 +0200 @@ -0,0 +1,39 @@ +/* This testcase is part of GDB, the GNU debugger. + @@ -65,10 +382,10 @@ instead. + for (;;) + pause(); +} -Index: gdb-6.8.50.20090802/gdb/testsuite/gdb.threads/bt-clone-stop.exp +Index: gdb-7.4.50.20120602/gdb/testsuite/gdb.threads/bt-clone-stop.exp =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-6.8.50.20090802/gdb/testsuite/gdb.threads/bt-clone-stop.exp 2009-08-03 15:50:08.000000000 +0200 ++++ gdb-7.4.50.20120602/gdb/testsuite/gdb.threads/bt-clone-stop.exp 2012-06-02 21:06:00.515274547 +0200 @@ -0,0 +1,61 @@ +# Copyright 2006 Free Software Foundation, Inc. + diff --git a/gdb-6.6-bfd-vdso8k.patch b/gdb-6.6-bfd-vdso8k.patch new file mode 100644 index 0000000..b4d445e --- /dev/null +++ b/gdb-6.6-bfd-vdso8k.patch @@ -0,0 +1,119 @@ +2007-09-23 Jan Kratochvil + + * elfcode.h (NAME(_bfd_elf,bfd_from_remote_memory)): New variables + X_SHDR_SHSTRTAB and I_SHDR_SHSTRTAB. Fixed the CONTENTS_SIZE trimming + check for its aligned size between the last segment and still before + the section header end. Added variables check to cover also the + section header string table. + +--- gdb-7.4.50.20120120-orig/bfd/elfcode.h 2012-02-29 09:17:08.000000000 +0100 ++++ gdb-7.4.50.20120120/bfd/elfcode.h 2012-02-29 10:23:03.000000000 +0100 +@@ -1621,6 +1621,8 @@ NAME(_bfd_elf,bfd_from_remote_memory) + Elf_Internal_Ehdr i_ehdr; /* Elf file header, internal form */ + Elf_External_Phdr *x_phdrs; + Elf_Internal_Phdr *i_phdrs, *last_phdr; ++ Elf_External_Shdr *x_shdrs; ++ Elf_Internal_Shdr *i_shdrs; + bfd *nbfd; + struct bfd_in_memory *bim; + int contents_size; +@@ -1740,24 +1742,46 @@ NAME(_bfd_elf,bfd_from_remote_memory) + + /* Trim the last segment so we don't bother with zeros in the last page + that are off the end of the file. However, if the extra bit in that +- page includes the section headers, keep them. */ +- if ((bfd_vma) contents_size > last_phdr->p_offset + last_phdr->p_filesz +- && (bfd_vma) contents_size >= (i_ehdr.e_shoff +- + i_ehdr.e_shnum * i_ehdr.e_shentsize)) ++ page includes the section headers os the section header string table, ++ keep them. */ ++ if ((bfd_vma) contents_size > last_phdr->p_offset + last_phdr->p_filesz) ++ contents_size = last_phdr->p_offset + last_phdr->p_filesz; ++ ++ if ((bfd_vma) contents_size < i_ehdr.e_shoff ++ + i_ehdr.e_shnum * i_ehdr.e_shentsize) ++ contents_size = i_ehdr.e_shoff + i_ehdr.e_shnum * i_ehdr.e_shentsize; ++ ++ /* Verify also all the sections fit into CONTENTS_SIZE. */ ++ ++ x_shdrs = bfd_malloc (i_ehdr.e_shnum * (sizeof *x_shdrs + sizeof *i_shdrs)); ++ if (x_shdrs == NULL) + { +- contents_size = last_phdr->p_offset + last_phdr->p_filesz; +- if ((bfd_vma) contents_size < (i_ehdr.e_shoff +- + i_ehdr.e_shnum * i_ehdr.e_shentsize)) +- contents_size = i_ehdr.e_shoff + i_ehdr.e_shnum * i_ehdr.e_shentsize; ++ free (x_phdrs); ++ bfd_set_error (bfd_error_no_memory); ++ return NULL; + } ++ err = target_read_memory (ehdr_vma + i_ehdr.e_shoff, (bfd_byte *) x_shdrs, ++ i_ehdr.e_shnum * sizeof *x_shdrs); ++ if (err) ++ i_shdrs = NULL; + else +- contents_size = last_phdr->p_offset + last_phdr->p_filesz; ++ { ++ i_shdrs = (Elf_Internal_Shdr *) &x_shdrs[i_ehdr.e_shnum]; ++ for (i = 0; i < i_ehdr.e_shnum; ++i) ++ { ++ elf_swap_shdr_in (templ, &x_shdrs[i], &i_shdrs[i]); ++ ++ if ((bfd_vma) contents_size < i_shdrs[i].sh_offset + i_shdrs[i].sh_size) ++ contents_size = i_shdrs[i].sh_offset + i_shdrs[i].sh_size; ++ } ++ } + + /* Now we know the size of the whole image we want read in. */ + contents = (bfd_byte *) bfd_zmalloc (contents_size); + if (contents == NULL) + { + free (x_phdrs); ++ free (x_shdrs); + bfd_set_error (bfd_error_no_memory); + return NULL; + } +@@ -1776,6 +1800,7 @@ NAME(_bfd_elf,bfd_from_remote_memory) + if (err) + { + free (x_phdrs); ++ free (x_shdrs); + free (contents); + bfd_set_error (bfd_error_system_call); + errno = err; +@@ -1784,10 +1809,32 @@ NAME(_bfd_elf,bfd_from_remote_memory) + } + free (x_phdrs); + +- /* If the segments visible in memory didn't include the section headers, ++ if (i_shdrs) ++ { ++ memcpy (contents + i_ehdr.e_shoff, x_shdrs, ++ i_ehdr.e_shnum * sizeof *x_shdrs); ++ ++ for (i = 0; i < i_ehdr.e_shnum; ++i) ++ { ++ bfd_vma start = i_shdrs[i].sh_offset; ++ bfd_vma end = i_shdrs[i].sh_offset + i_shdrs[i].sh_size; ++ ++ if (end > (bfd_vma) contents_size) ++ end = contents_size; ++ err = target_read_memory (ehdr_vma + start, contents + start, ++ end - start); ++ if (err) ++ { ++ i_shdrs = NULL; ++ break; ++ } ++ } ++ } ++ free (x_shdrs); ++ ++ /* If the segments readable in memory didn't include the section headers, + then clear them from the file header. */ +- if ((bfd_vma) contents_size < (i_ehdr.e_shoff +- + i_ehdr.e_shnum * i_ehdr.e_shentsize)) ++ if (i_shdrs == NULL) + { + memset (&x_ehdr.e_shoff, 0, sizeof x_ehdr.e_shoff); + memset (&x_ehdr.e_shnum, 0, sizeof x_ehdr.e_shnum); diff --git a/gdb-6.6-buildid-locate-rpm-librpm-workaround.patch b/gdb-6.6-buildid-locate-rpm-librpm-workaround.patch index f0d71c0..7cbffa2 100644 --- a/gdb-6.6-buildid-locate-rpm-librpm-workaround.patch +++ b/gdb-6.6-buildid-locate-rpm-librpm-workaround.patch @@ -1,6 +1,8 @@ ---- ./gdb/elfread.c 2010-10-14 17:07:45.000000000 +0200 -+++ ./gdb/elfread.c 2010-10-14 17:06:30.000000000 +0200 -@@ -1382,6 +1382,18 @@ build_id_to_filename (struct build_id *b +Index: gdb-7.4.50.20120602/gdb/elfread.c +=================================================================== +--- gdb-7.4.50.20120602.orig/gdb/elfread.c 2012-06-02 21:35:09.669510757 +0200 ++++ gdb-7.4.50.20120602/gdb/elfread.c 2012-06-02 21:35:31.106502660 +0200 +@@ -1658,6 +1658,19 @@ build_id_to_filename (struct build_id *b #include #endif @@ -10,6 +12,7 @@ + Enable or disable a signal handler. SIGNUM: signal to enable (or disable + if negative). HANDLER: sa_sigaction handler (or NULL to use + rpmsqHandler()). Returns: no. of refs, -1 on error. */ ++extern int rpmsqEnable (int signum, /* rpmsqAction_t handler */ void *handler); +int +rpmsqEnable (int signum, /* rpmsqAction_t handler */ void *handler) +{ @@ -19,8 +22,10 @@ /* This MISSING_RPM_HASH tracker is used to collect all the missing rpm files and avoid their duplicities during a single inferior run. */ ---- ./gdb/proc-service.list 2010-05-28 20:50:30.000000000 +0200 -+++ ./gdb/proc-service.list 2010-10-14 17:06:30.000000000 +0200 +Index: gdb-7.4.50.20120602/gdb/proc-service.list +=================================================================== +--- gdb-7.4.50.20120602.orig/gdb/proc-service.list 2012-06-02 21:35:09.669510757 +0200 ++++ gdb-7.4.50.20120602/gdb/proc-service.list 2012-06-02 21:35:14.296508989 +0200 @@ -37,4 +37,7 @@ ps_pstop; ps_ptread; diff --git a/gdb-6.6-buildid-locate-rpm-suse.patch b/gdb-6.6-buildid-locate-rpm-suse.patch index 619e475..2af302b 100644 --- a/gdb-6.6-buildid-locate-rpm-suse.patch +++ b/gdb-6.6-buildid-locate-rpm-suse.patch @@ -1,28 +1,105 @@ -Index: gdb-7.1/gdb/elfread.c +Index: gdb-7.4.50.20120603/gdb/elfread.c =================================================================== -*** gdb-7.1.orig/gdb/elfread.c 2010-04-15 14:46:14.000000000 +0200 ---- gdb-7.1/gdb/elfread.c 2010-04-15 14:50:17.000000000 +0200 -*************** debug_print_missing (const char *binary, -*** 1625,1633 **** - fprintf_unfiltered (gdb_stdlog, - _("Missing separate debuginfo for %s\n"), binary); - if (debug != NULL) -! fprintf_unfiltered (gdb_stdlog, _("Try: %s %s\n"), -! "yum --disablerepo='*' --enablerepo='*-debuginfo'" -! " install", debug); - } - } - ---- 1625,1636 ---- - fprintf_unfiltered (gdb_stdlog, - _("Missing separate debuginfo for %s\n"), binary); - if (debug != NULL) -! { -! const char *p = strrchr (debug, '/'); -! fprintf_unfiltered (gdb_stdlog, _("Try: %s%.2s%.38s\"\n"), -! "zypper install -C \"debuginfo(build-id)=", -! p - 2, p + 1); -! } - } - } - +--- gdb-7.4.50.20120603.orig/gdb/elfread.c 2012-06-12 15:12:05.000000000 +0200 ++++ gdb-7.4.50.20120603/gdb/elfread.c 2012-06-12 15:13:39.678712939 +0200 +@@ -1809,9 +1809,9 @@ missing_rpm_enlist (const char *filename + if (h == NULL) + break; + +- /* Verify the debuginfo file is not already installed. */ +- +- debuginfo = headerFormat_p (h, "%{sourcerpm}-debuginfo.%{arch}", ++ /* The allocated memory gets utilized below for MISSING_RPM_HASH. */ ++ debuginfo = headerFormat_p (h, ++ "%{name}-debuginfo-%{version}-%{release}.%{arch}", + &err); + if (!debuginfo) + { +@@ -1819,60 +1819,19 @@ missing_rpm_enlist (const char *filename + err); + continue; + } +- /* s = `.src.rpm-debuginfo.%{arch}' */ +- s = strrchr (debuginfo, '-') - srcrpmlen; +- s2 = NULL; +- if (s > debuginfo && memcmp (s, ".src.rpm", srcrpmlen) == 0) +- { +- /* s2 = `-%{release}.src.rpm-debuginfo.%{arch}' */ +- s2 = memrchr (debuginfo, '-', s - debuginfo); +- } +- if (s2) +- { +- /* s2 = `-%{version}-%{release}.src.rpm-debuginfo.%{arch}' */ +- s2 = memrchr (debuginfo, '-', s2 - debuginfo); +- } +- if (!s2) +- { +- warning (_("Error querying the rpm file `%s': %s"), filename, +- debuginfo); +- xfree (debuginfo); +- continue; +- } +- /* s = `.src.rpm-debuginfo.%{arch}' */ +- /* s2 = `-%{version}-%{release}.src.rpm-debuginfo.%{arch}' */ +- memmove (s2 + debuginfolen, s2, s - s2); +- memcpy (s2, "-debuginfo", debuginfolen); +- /* s = `XXXX.%{arch}' */ +- /* strlen ("XXXX") == srcrpmlen + debuginfolen */ +- /* s2 = `-debuginfo-%{version}-%{release}XX.%{arch}' */ +- /* strlen ("XX") == srcrpmlen */ +- memmove (s + debuginfolen, s + srcrpmlen + debuginfolen, +- strlen (s + srcrpmlen + debuginfolen) + 1); +- /* s = `-debuginfo-%{version}-%{release}.%{arch}' */ + ++ /* Verify the debuginfo file is not already installed. */ + /* RPMDBI_PACKAGES requires keylen == sizeof (int). */ + /* RPMDBI_LABEL is an interface for NVR-based dbiFindByLabel(). */ + mi_debuginfo = rpmtsInitIterator_p (ts, RPMDBI_LABEL, debuginfo, 0); +- xfree (debuginfo); + if (mi_debuginfo) + { ++ xfree (debuginfo); + rpmdbFreeIterator_p (mi_debuginfo); + count = 0; + break; + } + +- /* The allocated memory gets utilized below for MISSING_RPM_HASH. */ +- debuginfo = headerFormat_p (h, +- "%{name}-%{version}-%{release}.%{arch}", +- &err); +- if (!debuginfo) +- { +- warning (_("Error querying the rpm file `%s': %s"), filename, +- err); +- continue; +- } +- + /* Base package name for `debuginfo-install'. We do not use the + `yum' command directly as the line + yum --disablerepo='*' --enablerepo='*debug*' \ +@@ -1958,7 +1917,7 @@ missing_rpm_list_print (void) + (int (*) (const void *, const void *)) missing_rpm_list_compar); + + printf_unfiltered (_("Missing separate debuginfos, use: %s"), +- "debuginfo-install"); ++ "zypper install"); + for (array_iter = array; array_iter < array + missing_rpm_list_entries; + array_iter++) + { +@@ -2171,9 +2130,12 @@ debug_print_missing (const char *binary, + fprintf_unfiltered (gdb_stdlog, + _("Missing separate debuginfo for %s\n"), binary); + if (debug != NULL) +- fprintf_unfiltered (gdb_stdlog, _("Try: %s %s\n"), +- "yum --disablerepo='*' --enablerepo='*debug*'" +- " install", debug); ++ { ++ const char *p = strrchr (debug, '/'); ++ fprintf_unfiltered (gdb_stdlog, _("Try: %s%.2s%.38s\"\n"), ++ "zypper install -C \"debuginfo(build-id)=", ++ p - 2, p + 1); ++ } + } + } + diff --git a/gdb-6.6-buildid-locate-rpm.patch b/gdb-6.6-buildid-locate-rpm.patch index 8a2e752..ae16105 100644 --- a/gdb-6.6-buildid-locate-rpm.patch +++ b/gdb-6.6-buildid-locate-rpm.patch @@ -1,25 +1,25 @@ -Index: gdb-7.2.90.20110429/gdb/event-top.c +Index: gdb-7.4.50.20120602/gdb/event-top.c =================================================================== ---- gdb-7.2.90.20110429.orig/gdb/event-top.c 2011-03-16 16:18:58.000000000 +0100 -+++ gdb-7.2.90.20110429/gdb/event-top.c 2011-05-03 05:21:11.000000000 +0200 -@@ -33,6 +33,7 @@ - #include "cli/cli-script.h" /* for reset_command_nest_depth */ - #include "main.h" - #include "gdbthread.h" +--- gdb-7.4.50.20120602.orig/gdb/event-top.c 2012-06-02 21:08:08.651227347 +0200 ++++ gdb-7.4.50.20120602/gdb/event-top.c 2012-06-02 21:08:23.479221885 +0200 +@@ -36,6 +36,7 @@ + #include "observer.h" + #include "continuations.h" + #include "gdbcmd.h" /* for dont_repeat() */ +#include "symfile.h" - #include "gdbcmd.h" /* for dont_repeat() */ - -@@ -192,6 +193,8 @@ cli_command_loop (void) - char *a_prompt; - char *gdb_prompt = get_prompt (); - -+ debug_flush_missing (); + /* readline include files. */ + #include "readline/readline.h" +@@ -176,6 +177,8 @@ rl_callback_read_char_wrapper (gdb_clien + void + cli_command_loop (void) + { ++ debug_flush_missing (); + - /* Tell readline what the prompt to display is and what function - it will need to call after a whole line is read. This also - displays the first prompt. */ -@@ -263,6 +266,8 @@ display_gdb_prompt (char *new_prompt) + display_gdb_prompt (0); + + /* Now it's time to start the event loop. */ +@@ -241,6 +244,8 @@ display_gdb_prompt (char *new_prompt) /* Reset the nesting depth used when trace-commands is set. */ reset_command_nest_depth (); @@ -28,11 +28,11 @@ Index: gdb-7.2.90.20110429/gdb/event-top.c /* Each interpreter has its own rules on displaying the command prompt. */ if (!current_interp_display_prompt_p ()) -Index: gdb-7.2.90.20110429/gdb/elfread.c +Index: gdb-7.4.50.20120602/gdb/elfread.c =================================================================== ---- gdb-7.2.90.20110429.orig/gdb/elfread.c 2011-05-03 05:19:27.000000000 +0200 -+++ gdb-7.2.90.20110429/gdb/elfread.c 2011-05-03 05:21:22.000000000 +0200 -@@ -53,6 +53,7 @@ +--- gdb-7.4.50.20120602.orig/gdb/elfread.c 2012-06-02 21:08:08.651227347 +0200 ++++ gdb-7.4.50.20120602/gdb/elfread.c 2012-06-02 21:08:23.482221882 +0200 +@@ -48,6 +48,7 @@ #include "gdbcore.h" #include "gdbcmd.h" #include "observer.h" @@ -40,7 +40,7 @@ Index: gdb-7.2.90.20110429/gdb/elfread.c #include extern void _initialize_elfread (void); -@@ -1655,8 +1656,361 @@ build_id_to_filename (struct build_id *b +@@ -1647,8 +1648,361 @@ build_id_to_filename (struct build_id *b return retval; } @@ -258,7 +258,7 @@ Index: gdb-7.2.90.20110429/gdb/elfread.c + + /* Base package name for `debuginfo-install'. We do not use the + `yum' command directly as the line -+ yum --disablerepo='*' --enablerepo='*-debuginfo' \ ++ yum --disablerepo='*' --enablerepo='*debug*' \ + install NAME-debuginfo.ARCH + would be more complicated than just: + debuginfo-install NAME-VERSION-RELEASE.ARCH @@ -399,11 +399,11 @@ Index: gdb-7.2.90.20110429/gdb/elfread.c + /* This MISSING_FILEPAIR_HASH tracker is used only for the duplicite messages - Try to install the hash file ... -+ yum --disablerepo='*' --enablerepo='*-debuginfo' install ... ++ yum --disablerepo='*' --enablerepo='*debug*' install ... avoidance. */ struct missing_filepair -@@ -1710,11 +2064,17 @@ missing_filepair_change (void) +@@ -1702,11 +2056,17 @@ missing_filepair_change (void) /* All their memory came just from missing_filepair_OBSTACK. */ missing_filepair_hash = NULL; } @@ -421,7 +421,7 @@ Index: gdb-7.2.90.20110429/gdb/elfread.c missing_filepair_change (); } -@@ -1781,14 +2141,35 @@ debug_print_missing (const char *binary, +@@ -1773,14 +2133,35 @@ debug_print_missing (const char *binary, *slot = missing_filepair; @@ -458,17 +458,17 @@ Index: gdb-7.2.90.20110429/gdb/elfread.c + _("Missing separate debuginfo for %s\n"), binary); + if (debug != NULL) + fprintf_unfiltered (gdb_stdlog, _("Try: %s %s\n"), -+ "yum --disablerepo='*' --enablerepo='*-debuginfo'" ++ "yum --disablerepo='*' --enablerepo='*debug*'" + " install", debug); + } } static char * -Index: gdb-7.2.90.20110429/gdb/symfile.h +Index: gdb-7.4.50.20120602/gdb/symfile.h =================================================================== ---- gdb-7.2.90.20110429.orig/gdb/symfile.h 2011-05-03 05:14:57.000000000 +0200 -+++ gdb-7.2.90.20110429/gdb/symfile.h 2011-05-03 05:21:11.000000000 +0200 -@@ -611,6 +611,8 @@ extern struct build_id *build_id_addr_ge +--- gdb-7.4.50.20120602.orig/gdb/symfile.h 2012-06-02 21:08:08.651227347 +0200 ++++ gdb-7.4.50.20120602/gdb/symfile.h 2012-06-02 21:08:23.499221877 +0200 +@@ -621,6 +621,8 @@ extern struct build_id *build_id_addr_ge extern char *build_id_to_filename (struct build_id *build_id, char **link_return, int add_debug_suffix); extern void debug_print_missing (const char *binary, const char *debug); @@ -477,11 +477,11 @@ Index: gdb-7.2.90.20110429/gdb/symfile.h /* From dwarf2read.c */ -Index: gdb-7.2.90.20110429/gdb/testsuite/lib/gdb.exp +Index: gdb-7.4.50.20120602/gdb/testsuite/lib/gdb.exp =================================================================== ---- gdb-7.2.90.20110429.orig/gdb/testsuite/lib/gdb.exp 2011-05-03 05:14:57.000000000 +0200 -+++ gdb-7.2.90.20110429/gdb/testsuite/lib/gdb.exp 2011-05-03 05:21:11.000000000 +0200 -@@ -1381,7 +1381,7 @@ proc default_gdb_start { } { +--- gdb-7.4.50.20120602.orig/gdb/testsuite/lib/gdb.exp 2012-06-02 21:08:08.651227347 +0200 ++++ gdb-7.4.50.20120602/gdb/testsuite/lib/gdb.exp 2012-06-02 21:08:23.510221873 +0200 +@@ -1388,7 +1388,7 @@ proc default_gdb_start { } { warning "Couldn't set the width to 0." } } @@ -490,24 +490,24 @@ Index: gdb-7.2.90.20110429/gdb/testsuite/lib/gdb.exp send_gdb "set build-id-verbose 0\n" gdb_expect 10 { -re "$gdb_prompt $" { -Index: gdb-7.2.90.20110429/gdb/testsuite/lib/mi-support.exp +Index: gdb-7.4.50.20120602/gdb/testsuite/lib/mi-support.exp =================================================================== ---- gdb-7.2.90.20110429.orig/gdb/testsuite/lib/mi-support.exp 2011-05-03 05:14:57.000000000 +0200 -+++ gdb-7.2.90.20110429/gdb/testsuite/lib/mi-support.exp 2011-05-03 05:21:11.000000000 +0200 -@@ -221,7 +221,7 @@ proc default_mi_gdb_start { args } { - } - } +--- gdb-7.4.50.20120602.orig/gdb/testsuite/lib/mi-support.exp 2012-06-02 21:08:08.651227347 +0200 ++++ gdb-7.4.50.20120602/gdb/testsuite/lib/mi-support.exp 2012-06-02 21:08:23.523221869 +0200 +@@ -213,7 +213,7 @@ proc default_mi_gdb_start { args } { + warning "Couldn't set the width to 0." + } } - # Turn off the missing warnings as the testsuite does not expect it. + # Turn off the missing RPMs warnings as the testsuite does not expect it. send_gdb "190-gdb-set build-id-verbose 0\n" gdb_expect 10 { -re ".*190-gdb-set build-id-verbose 0\r\n190\\\^done\r\n$mi_gdb_prompt$" { -Index: gdb-7.2.90.20110429/gdb/tui/tui-interp.c +Index: gdb-7.4.50.20120602/gdb/tui/tui-interp.c =================================================================== ---- gdb-7.2.90.20110429.orig/gdb/tui/tui-interp.c 2011-01-01 16:33:52.000000000 +0100 -+++ gdb-7.2.90.20110429/gdb/tui/tui-interp.c 2011-05-03 05:21:11.000000000 +0200 -@@ -31,6 +31,7 @@ +--- gdb-7.4.50.20120602.orig/gdb/tui/tui-interp.c 2012-06-02 21:08:08.651227347 +0200 ++++ gdb-7.4.50.20120602/gdb/tui/tui-interp.c 2012-06-02 21:08:23.524221869 +0200 +@@ -30,6 +30,7 @@ #include "tui/tui.h" #include "tui/tui-io.h" #include "exceptions.h" @@ -515,24 +515,16 @@ Index: gdb-7.2.90.20110429/gdb/tui/tui-interp.c /* Set to 1 when the TUI mode must be activated when we first start gdb. */ -@@ -147,6 +148,8 @@ tui_command_loop (void *data) - char *a_prompt; - char *gdb_prompt = get_prompt (); - -+ debug_flush_missing (); -+ - /* Tell readline what the prompt to display is and what function - it will need to call after a whole line is read. This also - displays the first prompt. */ -Index: gdb-7.2.90.20110429/gdb/aclocal.m4 +Index: gdb-7.4.50.20120602/gdb/aclocal.m4 =================================================================== ---- gdb-7.2.90.20110429.orig/gdb/aclocal.m4 2011-02-15 22:05:53.000000000 +0100 -+++ gdb-7.2.90.20110429/gdb/aclocal.m4 2011-05-03 05:21:11.000000000 +0200 -@@ -19,6 +19,162 @@ You have another version of autoconf. I - If you have problems, you may need to regenerate the build system entirely. - To do so, use the procedure documented by the package, typically `autoreconf'.])]) +--- gdb-7.4.50.20120602.orig/gdb/aclocal.m4 2012-06-02 21:08:08.651227347 +0200 ++++ gdb-7.4.50.20120602/gdb/aclocal.m4 2012-06-02 21:08:23.545221858 +0200 +@@ -11,6 +11,164 @@ + # even the implied warranty of MERCHANTABILITY or FITNESS FOR A + # PARTICULAR PURPOSE. +# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- ++# serial 1 (pkg-config-0.24) +# +# Copyright © 2004 Scott James Remnant . +# @@ -560,7 +552,10 @@ Index: gdb-7.2.90.20110429/gdb/aclocal.m4 +AC_DEFUN([PKG_PROG_PKG_CONFIG], +[m4_pattern_forbid([^_?PKG_[A-Z_]+$]) +m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) -+AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl ++AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) ++AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) ++AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) ++ +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) +fi @@ -573,7 +568,6 @@ Index: gdb-7.2.90.20110429/gdb/aclocal.m4 + AC_MSG_RESULT([no]) + PKG_CONFIG="" + fi -+ +fi[]dnl +])# PKG_PROG_PKG_CONFIG + @@ -582,21 +576,20 @@ Index: gdb-7.2.90.20110429/gdb/aclocal.m4 +# Check to see whether a particular set of modules exists. Similar +# to PKG_CHECK_MODULES(), but does not set variables or print errors. +# -+# -+# Similar to PKG_CHECK_MODULES, make sure that the first instance of -+# this or PKG_CHECK_MODULES is called, or make sure to call -+# PKG_CHECK_EXISTS manually ++# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) ++# only at the first occurence in configure.ac, so if the first place ++# it's called might be skipped (such as if it is within an "if", you ++# have to call PKG_CHECK_EXISTS manually +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_EXISTS], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +if test -n "$PKG_CONFIG" && \ + AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then -+ m4_ifval([$2], [$2], [:]) ++ m4_default([$2], [:]) +m4_ifvaln([$3], [else + $3])dnl +fi]) + -+ +# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) +# --------------------------------------------- +m4_define([_PKG_CONFIG], @@ -649,6 +642,7 @@ Index: gdb-7.2.90.20110429/gdb/aclocal.m4 +See the pkg-config man page for more details.]) + +if test $pkg_failed = yes; then ++ AC_MSG_RESULT([no]) + _PKG_SHORT_ERRORS_SUPPORTED + if test $_pkg_short_errors_supported = yes; then + $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$2" 2>&1` @@ -658,7 +652,7 @@ Index: gdb-7.2.90.20110429/gdb/aclocal.m4 + # Put the nasty error message in config.log where it belongs + echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD + -+ ifelse([$4], , [AC_MSG_ERROR(dnl ++ m4_default([$4], [AC_MSG_ERROR( +[Package requirements ($2) were not met: + +$$1_PKG_ERRORS @@ -666,36 +660,35 @@ Index: gdb-7.2.90.20110429/gdb/aclocal.m4 +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + -+_PKG_TEXT -+])], -+ [AC_MSG_RESULT([no]) -+ $4]) ++_PKG_TEXT]) ++ ]) +elif test $pkg_failed = untried; then -+ ifelse([$4], , [AC_MSG_FAILURE(dnl ++ AC_MSG_RESULT([no]) ++ m4_default([$4], [AC_MSG_FAILURE( +[The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +_PKG_TEXT + -+To get pkg-config, see .])], -+ [$4]) ++To get pkg-config, see .]) ++ ]) +else + $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS + $1[]_LIBS=$pkg_cv_[]$1[]_LIBS + AC_MSG_RESULT([yes]) -+ ifelse([$3], , :, [$3]) ++ $3 +fi[]dnl +])# PKG_CHECK_MODULES + - # Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. - # - # This file is free software; the Free Software Foundation -Index: gdb-7.2.90.20110429/gdb/config.in + # AM_CONDITIONAL -*- Autoconf -*- + + # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 +Index: gdb-7.4.50.20120602/gdb/config.in =================================================================== ---- gdb-7.2.90.20110429.orig/gdb/config.in 2011-03-17 14:19:09.000000000 +0100 -+++ gdb-7.2.90.20110429/gdb/config.in 2011-05-03 05:21:11.000000000 +0200 -@@ -46,6 +46,9 @@ +--- gdb-7.4.50.20120602.orig/gdb/config.in 2012-06-02 21:08:08.651227347 +0200 ++++ gdb-7.4.50.20120602/gdb/config.in 2012-06-02 21:08:23.546221859 +0200 +@@ -36,6 +36,9 @@ /* Define to BFD's default target vector. */ #undef DEFAULT_BFD_VEC @@ -705,70 +698,78 @@ Index: gdb-7.2.90.20110429/gdb/config.in /* Define to 1 if translation of program messages to the user's native language is requested. */ #undef ENABLE_NLS -@@ -233,6 +236,9 @@ +@@ -216,6 +219,9 @@ /* Define if Python 2.7 is being used. */ #undef HAVE_LIBPYTHON2_7 +/* Define if librpm library is being used. */ +#undef HAVE_LIBRPM + - /* Define if libunwind library is being used. */ - #undef HAVE_LIBUNWIND + /* Define to 1 if you have the header file. */ + #undef HAVE_LIBUNWIND_IA64_H -Index: gdb-7.2.90.20110429/gdb/configure +Index: gdb-7.4.50.20120602/gdb/configure =================================================================== ---- gdb-7.2.90.20110429.orig/gdb/configure 2011-04-03 18:32:40.000000000 +0200 -+++ gdb-7.2.90.20110429/gdb/configure 2011-05-03 05:21:11.000000000 +0200 -@@ -682,6 +682,9 @@ REPORT_BUGS_TO +--- gdb-7.4.50.20120602.orig/gdb/configure 2012-06-02 21:08:08.651227347 +0200 ++++ gdb-7.4.50.20120602/gdb/configure 2012-06-02 21:20:53.245838121 +0200 +@@ -680,6 +680,11 @@ REPORT_BUGS_TO PKGVERSION TARGET_OBS subdirs +RPM_LIBS +RPM_CFLAGS ++PKG_CONFIG_LIBDIR ++PKG_CONFIG_PATH +PKG_CONFIG GDB_DATADIR DEBUGDIR - am__fastdepCC_FALSE -@@ -948,6 +951,7 @@ enable_dependency_tracking - with_separate_debug_dir - with_gdb_datadir + MAKEINFO_EXTRA_FLAGS +@@ -780,6 +785,7 @@ with_gdb_datadir with_relocated_sources + with_auto_load_dir + with_auto_load_safe_path +with_rpm enable_targets enable_64_bit_bfd enable_gdbcli -@@ -989,6 +993,9 @@ LDFLAGS - LIBS - CPPFLAGS +@@ -825,6 +831,11 @@ CPPFLAGS CPP + MAKEINFO + MAKEINFOFLAGS +PKG_CONFIG ++PKG_CONFIG_PATH ++PKG_CONFIG_LIBDIR +RPM_CFLAGS +RPM_LIBS YACC YFLAGS XMKMF' -@@ -1652,6 +1659,8 @@ Optional Packages: - [DATADIR/gdb] - --with-relocated-sources=PATH - automatically relocate this path for source files +@@ -1494,6 +1505,8 @@ Optional Packages: + [--with-auto-load-dir] + --without-auto-load-safe-path + do not restrict auto-loaded files locations + --with-rpm query rpm database for missing debuginfos (yes/no, + def. auto=librpm.so) - --with-libunwind use libunwind frame unwinding support + --with-libunwind-ia64 use libunwind frame unwinding for ia64 targets --with-curses use the curses library instead of the termcap library -@@ -1687,6 +1696,9 @@ Some influential environment variables: - CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if - you have headers in a nonstandard directory - CPP C preprocessor +@@ -1535,6 +1548,13 @@ Some influential environment variables: + MAKEINFO Parent configure detects if it is of sufficient version. + MAKEINFOFLAGS + Parameters for MAKEINFO. + PKG_CONFIG path to pkg-config utility ++ PKG_CONFIG_PATH ++ directories to add to pkg-config's search path ++ PKG_CONFIG_LIBDIR ++ path overriding pkg-config's built-in search path + RPM_CFLAGS C compiler flags for RPM, overriding pkg-config + RPM_LIBS linker flags for RPM, overriding pkg-config YACC The `Yet Another C Compiler' implementation to use. Defaults to the first program found out of: `bison -y', `byacc', `yacc'. YFLAGS The list of arguments that will be passed by default to $YACC. -@@ -7884,6 +7896,486 @@ _ACEOF - fi - +@@ -5015,6 +5035,491 @@ _ACEOF + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_auto_load_safe_path" >&5 + $as_echo "$with_auto_load_safe_path" >&6; } +# Integration with rpm library to support missing debuginfo suggestions. +# --without-rpm: Disable any rpm support. @@ -997,6 +998,10 @@ Index: gdb-7.2.90.20110429/gdb/configure + fi + + ++ ++ ++ ++ +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. @@ -1109,7 +1114,6 @@ Index: gdb-7.2.90.20110429/gdb/configure +$as_echo "no" >&6; } + PKG_CONFIG="" + fi -+ +fi + +pkg_failed=no @@ -1152,6 +1156,8 @@ Index: gdb-7.2.90.20110429/gdb/configure + + +if test $pkg_failed = yes; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes @@ -1166,10 +1172,10 @@ Index: gdb-7.2.90.20110429/gdb/configure + # Put the nasty error message in config.log where it belongs + echo "$RPM_PKG_ERRORS" >&5 + -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -+$as_echo "no" >&6; } -+ HAVE_LIBRPM=false ++ HAVE_LIBRPM=false +elif test $pkg_failed = untried; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } + HAVE_LIBRPM=false +else + RPM_CFLAGS=$pkg_cv_RPM_CFLAGS @@ -1253,13 +1259,13 @@ Index: gdb-7.2.90.20110429/gdb/configure subdirs="$subdirs testsuite" -Index: gdb-7.2.90.20110429/gdb/configure.ac +Index: gdb-7.4.50.20120602/gdb/configure.ac =================================================================== ---- gdb-7.2.90.20110429.orig/gdb/configure.ac 2011-04-03 18:32:40.000000000 +0200 -+++ gdb-7.2.90.20110429/gdb/configure.ac 2011-05-03 05:21:11.000000000 +0200 -@@ -108,6 +108,199 @@ AS_HELP_STRING([--with-relocated-sources - [Relocated directory for source files. ]) - ]) +--- gdb-7.4.50.20120602.orig/gdb/configure.ac 2012-06-02 21:08:08.651227347 +0200 ++++ gdb-7.4.50.20120602/gdb/configure.ac 2012-06-02 21:08:23.560221855 +0200 +@@ -166,6 +166,199 @@ AC_DEFINE_DIR(AUTO_LOAD_SAFE_PATH, escap + [Directories safe to hold auto-loaded files.]) + AC_MSG_RESULT([$with_auto_load_safe_path]) +# Integration with rpm library to support missing debuginfo suggestions. +# --without-rpm: Disable any rpm support. @@ -1457,30 +1463,11 @@ Index: gdb-7.2.90.20110429/gdb/configure.ac AC_CONFIG_SUBDIRS(testsuite) # Check whether to support alternative target configurations -Index: gdb-7.2.90.20110429/gdb/acinclude.m4 +Index: gdb-7.4.50.20120602/gdb/corelow.c =================================================================== ---- gdb-7.2.90.20110429.orig/gdb/acinclude.m4 2010-05-27 05:40:45.000000000 +0200 -+++ gdb-7.2.90.20110429/gdb/acinclude.m4 2011-05-03 05:21:11.000000000 +0200 -@@ -1,3 +1,5 @@ -+# serial 1 -+ - dnl written by Rob Savoye for Cygnus Support - dnl major rewriting for Tcl 7.5 by Don Libes - -@@ -81,8 +83,6 @@ AC_MSG_RESULT(yes) - # Foundation, Inc., 51 Franklin Street, Fifth Floor, - # Boston, MA 02110-1301, USA. - --# serial 1 -- - # @defmac AC_PROG_CC_STDC - # @maindex PROG_CC_STDC - # @ovindex CC -Index: gdb-7.2.90.20110429/gdb/corelow.c -=================================================================== ---- gdb-7.2.90.20110429.orig/gdb/corelow.c 2011-05-03 05:14:57.000000000 +0200 -+++ gdb-7.2.90.20110429/gdb/corelow.c 2011-05-03 05:21:11.000000000 +0200 -@@ -320,7 +320,7 @@ build_id_locate_exec (int from_tty) +--- gdb-7.4.50.20120602.orig/gdb/corelow.c 2012-06-02 21:08:08.651227347 +0200 ++++ gdb-7.4.50.20120602/gdb/corelow.c 2012-06-02 21:08:23.561221855 +0200 +@@ -317,7 +317,7 @@ build_id_locate_exec (int from_tty) symfile_objfile->flags |= OBJF_BUILD_ID_CORE_LOADED; } else diff --git a/gdb-6.6-buildid-locate-solib-missing-ids.patch b/gdb-6.6-buildid-locate-solib-missing-ids.patch new file mode 100644 index 0000000..e60b706 --- /dev/null +++ b/gdb-6.6-buildid-locate-solib-missing-ids.patch @@ -0,0 +1,57 @@ +--- gdb-7.4.50.20120120/gdb/solib-svr4.c.orig 2012-03-17 10:23:11.000000000 +0100 ++++ gdb-7.4.50.20120120/gdb/solib-svr4.c 2012-03-17 10:36:22.265628529 +0100 +@@ -1228,14 +1228,27 @@ svr4_read_so_list (CORE_ADDR lm, struct + } + + { +- struct build_id *build_id; ++ struct build_id *build_id = NULL; + + strncpy (new->so_original_name, buffer, SO_NAME_MAX_PATH_SIZE - 1); + new->so_original_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0'; + /* May get overwritten below. */ + strcpy (new->so_name, new->so_original_name); + +- build_id = build_id_addr_get (new->lm_info->l_ld); ++ /* In the case the main executable was found according to its build-id ++ (from a core file) prevent loading a different build of a library ++ with accidentally the same SO_NAME. ++ ++ It suppresses bogus backtraces (and prints "??" there instead) if ++ the on-disk files no longer match the running program version. ++ ++ If the main executable was not loaded according to its build-id do ++ not do any build-id checking of the libraries. There may be missing ++ build-ids dumped in the core file and we would map all the libraries ++ to the only existing file loaded that time - the executable. */ ++ if (symfile_objfile != NULL ++ && (symfile_objfile->flags & OBJF_BUILD_ID_CORE_LOADED) != 0) ++ build_id = build_id_addr_get (new->lm_info->l_ld); + if (build_id != NULL) + { + char *name, *build_id_filename; +@@ -1250,23 +1263,7 @@ svr4_read_so_list (CORE_ADDR lm, struct + xfree (name); + } + else +- { +- debug_print_missing (new->so_name, build_id_filename); +- +- /* In the case the main executable was found according to +- its build-id (from a core file) prevent loading +- a different build of a library with accidentally the +- same SO_NAME. +- +- It suppresses bogus backtraces (and prints "??" there +- instead) if the on-disk files no longer match the +- running program version. */ +- +- if (symfile_objfile != NULL +- && (symfile_objfile->flags +- & OBJF_BUILD_ID_CORE_LOADED) != 0) +- new->so_name[0] = 0; +- } ++ debug_print_missing (new->so_name, build_id_filename); + + xfree (build_id_filename); + xfree (build_id); diff --git a/gdb-6.6-buildid-locate.patch b/gdb-6.6-buildid-locate.patch index 01dc602..7e3077f 100644 --- a/gdb-6.6-buildid-locate.patch +++ b/gdb-6.6-buildid-locate.patch @@ -1,8 +1,8 @@ -Index: gdb-7.2.90.20110429/gdb/corelow.c +Index: gdb-7.4.50.20120602/gdb/corelow.c =================================================================== ---- gdb-7.2.90.20110429.orig/gdb/corelow.c 2011-02-26 03:07:07.000000000 +0100 -+++ gdb-7.2.90.20110429/gdb/corelow.c 2011-05-03 05:14:57.000000000 +0200 -@@ -47,6 +47,9 @@ +--- gdb-7.4.50.20120602.orig/gdb/corelow.c 2012-06-02 21:07:03.695251272 +0200 ++++ gdb-7.4.50.20120602/gdb/corelow.c 2012-06-02 21:07:16.464246569 +0200 +@@ -46,6 +46,9 @@ #include "filenames.h" #include "progspace.h" #include "objfiles.h" @@ -10,9 +10,9 @@ Index: gdb-7.2.90.20110429/gdb/corelow.c +#include "elf/common.h" +#include "gdbcmd.h" - #ifndef O_LARGEFILE -@@ -278,6 +281,52 @@ add_to_thread_list (bfd *abfd, asection + #define O_LARGEFILE 0 +@@ -275,6 +278,52 @@ add_to_thread_list (bfd *abfd, asection inferior_ptid = ptid; /* Yes, make it current. */ } @@ -65,7 +65,7 @@ Index: gdb-7.2.90.20110429/gdb/corelow.c /* This routine opens and sets up the core file bfd. */ static void -@@ -379,6 +428,12 @@ core_open (char *filename, int from_tty) +@@ -377,6 +426,12 @@ core_open (char *filename, int from_tty) push_target (&core_ops); discard_cleanups (old_chain); @@ -78,7 +78,7 @@ Index: gdb-7.2.90.20110429/gdb/corelow.c /* Do this before acknowledging the inferior, so if post_create_inferior throws (can happen easilly if you're loading a core file with the wrong exec), we aren't left with threads -@@ -932,4 +987,11 @@ _initialize_corelow (void) +@@ -935,4 +990,11 @@ _initialize_corelow (void) init_core_ops (); add_target (&core_ops); @@ -90,11 +90,11 @@ Index: gdb-7.2.90.20110429/gdb/corelow.c + NULL, NULL, NULL, + &setlist, &showlist); } -Index: gdb-7.2.90.20110429/gdb/doc/gdb.texinfo +Index: gdb-7.4.50.20120602/gdb/doc/gdb.texinfo =================================================================== ---- gdb-7.2.90.20110429.orig/gdb/doc/gdb.texinfo 2011-05-03 05:14:56.000000000 +0200 -+++ gdb-7.2.90.20110429/gdb/doc/gdb.texinfo 2011-05-03 05:14:57.000000000 +0200 -@@ -15356,6 +15356,27 @@ information files. +--- gdb-7.4.50.20120602.orig/gdb/doc/gdb.texinfo 2012-06-02 21:07:03.695251272 +0200 ++++ gdb-7.4.50.20120602/gdb/doc/gdb.texinfo 2012-06-02 21:07:16.480246563 +0200 +@@ -16502,6 +16502,27 @@ information files. @end table @@ -122,71 +122,74 @@ Index: gdb-7.2.90.20110429/gdb/doc/gdb.texinfo @cindex @code{.gnu_debuglink} sections @cindex debug link sections A debug link is a special section of the executable file named -Index: gdb-7.2.90.20110429/gdb/solib-svr4.c +Index: gdb-7.4.50.20120602/gdb/solib-svr4.c =================================================================== ---- gdb-7.2.90.20110429.orig/gdb/solib-svr4.c 2011-05-03 05:14:56.000000000 +0200 -+++ gdb-7.2.90.20110429/gdb/solib-svr4.c 2011-05-03 05:14:57.000000000 +0200 -@@ -1179,9 +1179,49 @@ svr4_current_sos (void) - safe_strerror (errcode)); - else - { -- strncpy (new->so_name, buffer, SO_NAME_MAX_PATH_SIZE - 1); -- new->so_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0'; -- strcpy (new->so_original_name, new->so_name); -+ struct build_id *build_id; -+ -+ strncpy (new->so_original_name, buffer, SO_NAME_MAX_PATH_SIZE - 1); -+ new->so_original_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0'; -+ /* May get overwritten below. */ -+ strcpy (new->so_name, new->so_original_name); -+ -+ build_id = build_id_addr_get (LM_DYNAMIC_FROM_LINK_MAP (new)); -+ if (build_id != NULL) -+ { -+ char *name, *build_id_filename; -+ -+ /* Missing the build-id matching separate debug info file -+ would be handled while SO_NAME gets loaded. */ -+ name = build_id_to_filename (build_id, &build_id_filename, 0); -+ if (name != NULL) -+ { -+ strncpy (new->so_name, name, SO_NAME_MAX_PATH_SIZE - 1); -+ new->so_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0'; -+ xfree (name); -+ } -+ else -+ { -+ debug_print_missing (new->so_name, build_id_filename); -+ -+ /* In the case the main executable was found according to -+ its build-id (from a core file) prevent loading -+ a different build of a library with accidentally the -+ same SO_NAME. -+ -+ It suppresses bogus backtraces (and prints "??" there -+ instead) if the on-disk files no longer match the -+ running program version. */ -+ -+ if (symfile_objfile != NULL -+ && (symfile_objfile->flags -+ & OBJF_BUILD_ID_CORE_LOADED) != 0) -+ new->so_name[0] = 0; -+ } -+ -+ xfree (build_id_filename); -+ xfree (build_id); -+ } - } - xfree (buffer); +--- gdb-7.4.50.20120602.orig/gdb/solib-svr4.c 2012-06-02 21:07:03.695251272 +0200 ++++ gdb-7.4.50.20120602/gdb/solib-svr4.c 2012-06-02 21:07:16.510246552 +0200 +@@ -1227,9 +1227,52 @@ svr4_read_so_list (CORE_ADDR lm, struct + continue; + } -Index: gdb-7.2.90.20110429/gdb/elfread.c +- strncpy (new->so_name, buffer, SO_NAME_MAX_PATH_SIZE - 1); +- new->so_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0'; +- strcpy (new->so_original_name, new->so_name); ++ { ++ struct build_id *build_id; ++ ++ strncpy (new->so_original_name, buffer, SO_NAME_MAX_PATH_SIZE - 1); ++ new->so_original_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0'; ++ /* May get overwritten below. */ ++ strcpy (new->so_name, new->so_original_name); ++ ++ build_id = build_id_addr_get (new->lm_info->l_ld); ++ if (build_id != NULL) ++ { ++ char *name, *build_id_filename; ++ ++ /* Missing the build-id matching separate debug info file ++ would be handled while SO_NAME gets loaded. */ ++ name = build_id_to_filename (build_id, &build_id_filename, 0); ++ if (name != NULL) ++ { ++ strncpy (new->so_name, name, SO_NAME_MAX_PATH_SIZE - 1); ++ new->so_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0'; ++ xfree (name); ++ } ++ else ++ { ++ debug_print_missing (new->so_name, build_id_filename); ++ ++ /* In the case the main executable was found according to ++ its build-id (from a core file) prevent loading ++ a different build of a library with accidentally the ++ same SO_NAME. ++ ++ It suppresses bogus backtraces (and prints "??" there ++ instead) if the on-disk files no longer match the ++ running program version. */ ++ ++ if (symfile_objfile != NULL ++ && (symfile_objfile->flags ++ & OBJF_BUILD_ID_CORE_LOADED) != 0) ++ new->so_name[0] = 0; ++ } ++ ++ xfree (build_id_filename); ++ xfree (build_id); ++ } ++ } ++ + xfree (buffer); + + /* If this entry has no name, or its name matches the name +Index: gdb-7.4.50.20120602/gdb/elfread.c =================================================================== ---- gdb-7.2.90.20110429.orig/gdb/elfread.c 2011-05-03 05:14:56.000000000 +0200 -+++ gdb-7.2.90.20110429/gdb/elfread.c 2011-05-03 05:19:27.000000000 +0200 -@@ -49,6 +49,11 @@ - #include "infcall.h" +--- gdb-7.4.50.20120602.orig/gdb/elfread.c 2012-06-02 21:07:03.695251272 +0200 ++++ gdb-7.4.50.20120602/gdb/elfread.c 2012-06-02 21:07:56.264232049 +0200 +@@ -44,6 +44,11 @@ #include "gdbthread.h" #include "regcache.h" + #include "bcache.h" +#include "libbfd.h" +#include "gdbcore.h" +#include "gdbcmd.h" @@ -195,7 +198,7 @@ Index: gdb-7.2.90.20110429/gdb/elfread.c extern void _initialize_elfread (void); -@@ -1077,16 +1082,65 @@ elf_gnu_ifunc_resolver_return_stop (stru +@@ -1072,16 +1077,65 @@ elf_gnu_ifunc_resolver_return_stop (stru update_breakpoint_locations (b, sals, sals_end); } @@ -220,8 +223,9 @@ Index: gdb-7.2.90.20110429/gdb/elfread.c -/* Locate NT_GNU_BUILD_ID from ABFD and return its content. */ +/* Locate NT_GNU_BUILD_ID and return its matching debug filename. + FIXME: NOTE decoding should be unified with the BFD core notes decoding. */ -+ -+struct build_id * + + static struct build_id * +-build_id_bfd_get (bfd *abfd) +build_id_buf_get (bfd *templ, gdb_byte *buf, bfd_size_type size) +{ + bfd_byte *p; @@ -256,14 +260,13 @@ Index: gdb-7.2.90.20110429/gdb/elfread.c + +/* Separate debuginfo files have corrupted PHDR but SHDR is correct there. + Locate NT_GNU_BUILD_ID from ABFD and return its content. */ - - static struct build_id * --build_id_bfd_get (bfd *abfd) ++ ++static struct build_id * +build_id_bfd_shdr_get (bfd *abfd) { struct build_id *retval; -@@ -1102,6 +1156,348 @@ build_id_bfd_get (bfd *abfd) +@@ -1097,6 +1151,348 @@ build_id_bfd_get (bfd *abfd) return retval; } @@ -359,7 +362,7 @@ Index: gdb-7.2.90.20110429/gdb/elfread.c +/* Translate an ELF program header table entry in external format into an + ELF program header table entry in internal format. */ + -+void ++static void +elf_swap_phdr_in (bfd *abfd, + const Elf64_External_Phdr *src64, + Elf_Internal_Phdr *dst) @@ -612,7 +615,7 @@ Index: gdb-7.2.90.20110429/gdb/elfread.c /* Return if FILENAME has NT_GNU_BUILD_ID matching the CHECK value. */ static int -@@ -1116,7 +1512,7 @@ build_id_verify (const char *filename, s +@@ -1111,7 +1507,7 @@ build_id_verify (const char *filename, s if (abfd == NULL) return 0; @@ -621,7 +624,7 @@ Index: gdb-7.2.90.20110429/gdb/elfread.c if (found == NULL) warning (_("File \"%s\" has no build-id, file skipped"), filename); -@@ -1134,14 +1530,15 @@ build_id_verify (const char *filename, s +@@ -1129,17 +1525,18 @@ build_id_verify (const char *filename, s return retval; } @@ -633,6 +636,9 @@ Index: gdb-7.2.90.20110429/gdb/elfread.c { char *link, *debugdir, *retval = NULL; + char *link_all = NULL; + VEC (char_ptr) *debugdir_vec; + struct cleanup *back_to; + int ix; /* DEBUG_FILE_DIRECTORY/.build-id/ab/cdef */ - link = alloca (strlen (debug_file_directory) + (sizeof "/.build-id/" - 1) + 1 @@ -642,29 +648,25 @@ Index: gdb-7.2.90.20110429/gdb/elfread.c /* Keep backward compatibility so that DEBUG_FILE_DIRECTORY being "" will cause "/.build-id/..." lookups. */ @@ -1152,6 +1549,8 @@ build_id_to_debug_filename (struct build - char *s, *debugdir_end; + size_t debugdir_len = strlen (debugdir); gdb_byte *data = build_id->data; size_t size = build_id->size; + unsigned seqno; + struct stat statbuf_trash; + char *s; - while (*debugdir == DIRNAME_SEPARATOR) - debugdir++; -@@ -1172,39 +1571,242 @@ build_id_to_debug_filename (struct build + memcpy (link, debugdir, debugdir_len); +@@ -1166,37 +1565,240 @@ build_id_to_debug_filename (struct build *s++ = '/'; while (size-- > 0) s += sprintf (s, "%02x", (unsigned) *data++); - strcpy (s, ".debug"); -- + - /* lrealpath() is expensive even for the usually non-existent files. */ - if (access (link, F_OK) == 0) - retval = lrealpath (link); - -- if (retval != NULL && !build_id_verify (retval, build_id)) + for (seqno = 0;; seqno++) - { -- xfree (retval); -- retval = NULL; ++ { + char *s2; + + if (seqno) @@ -682,7 +684,8 @@ Index: gdb-7.2.90.20110429/gdb/elfread.c + strcpy (s2, ".debug"); + else + *s2 = 0; -+ + +- if (retval != NULL && !build_id_verify (retval, build_id)) + /* `access' automatically dereferences LINK. */ + if (lstat (link, &statbuf_trash) != 0) + { @@ -700,15 +703,16 @@ Index: gdb-7.2.90.20110429/gdb/elfread.c + + if (retval) + break; - } - - if (retval != NULL) -- break; -+ { -+ /* LINK_ALL is not used below in this non-NULL RETVAL case. */ -+ break; + } + ++ if (retval != NULL) + { +- xfree (retval); +- retval = NULL; ++ /* LINK_ALL is not used below in this non-NULL RETVAL case. */ ++ break; + } + + if (link_all == NULL) + link_all = xstrdup (link); + else @@ -723,14 +727,12 @@ Index: gdb-7.2.90.20110429/gdb/elfread.c + + strcpy (&link_all[len_orig + 1], link); + } - - debugdir = debugdir_end; - } - while (*debugdir != 0); - ++ } ++ + if (link_return != NULL) + { -+ if (retval != NULL) + if (retval != NULL) +- break; + { + *link_return = link; + link = NULL; @@ -740,13 +742,14 @@ Index: gdb-7.2.90.20110429/gdb/elfread.c + *link_return = link_all; + link_all = NULL; + } -+ } + } + xfree (link); + xfree (link_all); -+ -+ return retval; -+} -+ + + do_cleanups (back_to); + return retval; + } + +/* This MISSING_FILEPAIR_HASH tracker is used only for the duplicite messages + Try to install the hash file ... + avoidance. */ @@ -769,9 +772,9 @@ Index: gdb-7.2.90.20110429/gdb/elfread.c + + retval = obstack_alloc (&missing_filepair_obstack, size); + memset (retval, 0, size); - return retval; - } - ++ return retval; ++} ++ +static hashval_t +missing_filepair_hash_func (const struct missing_filepair *elem) +{ @@ -905,7 +908,7 @@ Index: gdb-7.2.90.20110429/gdb/elfread.c xfree (build_id); /* Prevent looping on a stripped .debug file. */ if (build_id_name != NULL -@@ -1215,7 +1817,7 @@ find_separate_debug_file_by_buildid (str +@@ -1207,7 +1809,7 @@ find_separate_debug_file_by_buildid (str xfree (build_id_name); } else if (build_id_name != NULL) @@ -914,7 +917,7 @@ Index: gdb-7.2.90.20110429/gdb/elfread.c } return NULL; } -@@ -1418,9 +2020,10 @@ elf_symfile_read (struct objfile *objfil +@@ -1427,9 +2029,10 @@ elf_symfile_read (struct objfile *objfil `.note.gnu.build-id'. */ else if (!objfile_has_partial_symbols (objfile)) { @@ -927,7 +930,7 @@ Index: gdb-7.2.90.20110429/gdb/elfread.c if (debugfile == NULL) debugfile = find_separate_debug_file_by_debuglink (objfile); -@@ -1432,6 +2035,12 @@ elf_symfile_read (struct objfile *objfil +@@ -1441,6 +2044,12 @@ elf_symfile_read (struct objfile *objfil symbol_file_add_separate (abfd, symfile_flags, objfile); xfree (debugfile); } @@ -940,7 +943,7 @@ Index: gdb-7.2.90.20110429/gdb/elfread.c } } -@@ -1911,4 +2520,16 @@ _initialize_elfread (void) +@@ -1770,4 +2379,16 @@ _initialize_elfread (void) elf_objfile_gnu_ifunc_cache_data = register_objfile_data (); gnu_ifunc_fns_p = &elf_gnu_ifunc_fns; @@ -957,11 +960,11 @@ Index: gdb-7.2.90.20110429/gdb/elfread.c + + observer_attach_executable_changed (debug_print_executable_changed); } -Index: gdb-7.2.90.20110429/gdb/symfile.h +Index: gdb-7.4.50.20120602/gdb/symfile.h =================================================================== ---- gdb-7.2.90.20110429.orig/gdb/symfile.h 2011-05-03 05:14:56.000000000 +0200 -+++ gdb-7.2.90.20110429/gdb/symfile.h 2011-05-03 05:14:57.000000000 +0200 -@@ -605,6 +605,13 @@ void free_symfile_segment_data (struct s +--- gdb-7.4.50.20120602.orig/gdb/symfile.h 2012-06-02 21:07:03.695251272 +0200 ++++ gdb-7.4.50.20120602/gdb/symfile.h 2012-06-02 21:07:16.524246547 +0200 +@@ -615,6 +615,13 @@ void free_symfile_segment_data (struct s extern struct cleanup *increment_reading_symtab (void); @@ -974,12 +977,12 @@ Index: gdb-7.2.90.20110429/gdb/symfile.h + /* From dwarf2read.c */ - extern int dwarf2_has_info (struct objfile *); -Index: gdb-7.2.90.20110429/gdb/testsuite/lib/gdb.exp + /* Names for a dwarf2 debugging section. The field NORMAL is the normal +Index: gdb-7.4.50.20120602/gdb/testsuite/lib/gdb.exp =================================================================== ---- gdb-7.2.90.20110429.orig/gdb/testsuite/lib/gdb.exp 2011-05-03 05:14:56.000000000 +0200 -+++ gdb-7.2.90.20110429/gdb/testsuite/lib/gdb.exp 2011-05-03 05:14:57.000000000 +0200 -@@ -1381,6 +1381,16 @@ proc default_gdb_start { } { +--- gdb-7.4.50.20120602.orig/gdb/testsuite/lib/gdb.exp 2012-06-02 21:07:03.695251272 +0200 ++++ gdb-7.4.50.20120602/gdb/testsuite/lib/gdb.exp 2012-06-02 21:07:16.526246546 +0200 +@@ -1388,6 +1388,16 @@ proc default_gdb_start { } { warning "Couldn't set the width to 0." } } @@ -996,13 +999,13 @@ Index: gdb-7.2.90.20110429/gdb/testsuite/lib/gdb.exp return 0; } -Index: gdb-7.2.90.20110429/gdb/testsuite/lib/mi-support.exp +Index: gdb-7.4.50.20120602/gdb/testsuite/lib/mi-support.exp =================================================================== ---- gdb-7.2.90.20110429.orig/gdb/testsuite/lib/mi-support.exp 2011-03-07 17:03:04.000000000 +0100 -+++ gdb-7.2.90.20110429/gdb/testsuite/lib/mi-support.exp 2011-05-03 05:14:57.000000000 +0200 -@@ -221,6 +221,16 @@ proc default_mi_gdb_start { args } { - } - } +--- gdb-7.4.50.20120602.orig/gdb/testsuite/lib/mi-support.exp 2012-06-02 21:07:03.695251272 +0200 ++++ gdb-7.4.50.20120602/gdb/testsuite/lib/mi-support.exp 2012-06-02 21:07:16.535246544 +0200 +@@ -213,6 +213,16 @@ proc default_mi_gdb_start { args } { + warning "Couldn't set the width to 0." + } } + # Turn off the missing warnings as the testsuite does not expect it. + send_gdb "190-gdb-set build-id-verbose 0\n" @@ -1014,16 +1017,16 @@ Index: gdb-7.2.90.20110429/gdb/testsuite/lib/mi-support.exp + warning "Could not disable the missing debug infos warnings.." + } + } - - detect_async - -Index: gdb-7.2.90.20110429/gdb/objfiles.h + # If allowing the inferior to have its own PTY then assign the inferior + # its own terminal device here. + if { $separate_inferior_pty } { +Index: gdb-7.4.50.20120602/gdb/objfiles.h =================================================================== ---- gdb-7.2.90.20110429.orig/gdb/objfiles.h 2011-03-07 17:17:29.000000000 +0100 -+++ gdb-7.2.90.20110429/gdb/objfiles.h 2011-05-03 05:14:57.000000000 +0200 -@@ -441,6 +441,10 @@ struct objfile +--- gdb-7.4.50.20120602.orig/gdb/objfiles.h 2012-06-02 21:07:03.695251272 +0200 ++++ gdb-7.4.50.20120602/gdb/objfiles.h 2012-06-02 21:07:16.539246541 +0200 +@@ -432,6 +432,10 @@ struct objfile - #define OBJF_PSYMTABS_READ (1 << 4) + #define OBJF_MAINLINE (1 << 5) +/* This file was loaded according to the BUILD_ID_CORE_LOADS rules. */ + diff --git a/gdb-6.6-bz247354-leader-exit-fix.patch b/gdb-6.6-bz247354-leader-exit-fix.patch deleted file mode 100644 index 26b3661..0000000 --- a/gdb-6.6-bz247354-leader-exit-fix.patch +++ /dev/null @@ -1,142 +0,0 @@ -2007-07-08 Jan Kratochvil - - * linux-nat.c (linux_lwp_is_zombie): New function. - (wait_lwp): Fix lockup on exit of the thread group leader. - (linux_xfer_partial): Renamed to ... - (linux_xfer_partial_lwp): ... here. - (linux_xfer_partial): New function wrapping LINUX_XFER_PARTIAL_LWP. - -2008-02-24 Jan Kratochvil - - Port to GDB-6.8pre. - -Index: gdb-6.8.50.20081209/gdb/linux-nat.c -=================================================================== ---- gdb-6.8.50.20081209.orig/gdb/linux-nat.c 2008-12-10 01:27:34.000000000 +0100 -+++ gdb-6.8.50.20081209/gdb/linux-nat.c 2008-12-10 01:28:14.000000000 +0100 -@@ -1981,6 +1981,31 @@ linux_handle_extended_wait (struct lwp_i - _("unknown ptrace event %d"), event); - } - -+static int -+linux_lwp_is_zombie (long lwp) -+{ -+ char buffer[MAXPATHLEN]; -+ FILE *procfile; -+ int retval = 0; -+ -+ sprintf (buffer, "/proc/%ld/status", lwp); -+ procfile = fopen (buffer, "r"); -+ if (procfile == NULL) -+ { -+ warning (_("unable to open /proc file '%s'"), buffer); -+ return 0; -+ } -+ while (fgets (buffer, sizeof (buffer), procfile) != NULL) -+ if (strcmp (buffer, "State:\tZ (zombie)\n") == 0) -+ { -+ retval = 1; -+ break; -+ } -+ fclose (procfile); -+ -+ return retval; -+} -+ - /* Wait for LP to stop. Returns the wait status, or 0 if the LWP has - exited. */ - -@@ -1988,16 +2013,31 @@ static int - wait_lwp (struct lwp_info *lp) - { - pid_t pid; -- int status; -+ int status = 0; - int thread_dead = 0; - - gdb_assert (!lp->stopped); - gdb_assert (lp->status == 0); - -- pid = my_waitpid (GET_LWP (lp->ptid), &status, 0); -- if (pid == -1 && errno == ECHILD) -+ /* Thread group leader may have exited but we would lock up by WAITPID as it -+ waits on all its threads; __WCLONE is not applicable for the leader. -+ The thread leader restrictions is only a performance optimization here. -+ LINUX_NAT_THREAD_ALIVE cannot be used here as it requires a STOPPED -+ process; it gets ESRCH both for the zombie and for running processes. */ -+ if (is_lwp (lp->ptid) && GET_PID (lp->ptid) == GET_LWP (lp->ptid) -+ && linux_lwp_is_zombie (GET_LWP (lp->ptid))) -+ { -+ thread_dead = 1; -+ if (debug_linux_nat) -+ fprintf_unfiltered (gdb_stdlog, "WL: Threads leader %s vanished.\n", -+ target_pid_to_str (lp->ptid)); -+ } -+ -+ if (!thread_dead) - { -- pid = my_waitpid (GET_LWP (lp->ptid), &status, __WCLONE); -+ pid = my_waitpid (GET_LWP (lp->ptid), &status, 0); -+ if (pid == -1 && errno == ECHILD) -+ pid = my_waitpid (GET_LWP (lp->ptid), &status, __WCLONE); - if (pid == -1 && errno == ECHILD) - { - /* The thread has previously exited. We need to delete it -@@ -4153,8 +4193,10 @@ linux_nat_xfer_osdata (struct target_ops - return len; - } - -+/* Transfer from the specific LWP currently set by PID of INFERIOR_PTID. */ -+ - static LONGEST --linux_xfer_partial (struct target_ops *ops, enum target_object object, -+linux_xfer_partial_lwp (struct target_ops *ops, enum target_object object, - const char *annex, gdb_byte *readbuf, - const gdb_byte *writebuf, ULONGEST offset, LONGEST len) - { -@@ -4201,6 +4243,45 @@ linux_xfer_partial (struct target_ops *o - offset, len); - } - -+/* nptl_db expects being able to transfer memory just by specifying PID. -+ After the thread group leader exists the Linux kernel turns the task -+ into zombie no longer permitting accesses to its memory. -+ Transfer the memory from an arbitrary LWP_LIST entry in such case. */ -+ -+static LONGEST -+linux_xfer_partial (struct target_ops *ops, enum target_object object, -+ const char *annex, gdb_byte *readbuf, -+ const gdb_byte *writebuf, ULONGEST offset, LONGEST len) -+{ -+ LONGEST xfer; -+ struct lwp_info *lp; -+ /* Not using SAVE_INFERIOR_PTID already here for better performance. */ -+ struct cleanup *old_chain = NULL; -+ ptid_t inferior_ptid_orig = inferior_ptid; -+ -+ errno = 0; -+ xfer = linux_xfer_partial_lwp (ops, object, annex, readbuf, writebuf, -+ offset, len); -+ -+ for (lp = lwp_list; xfer == 0 && (errno == EACCES || errno == ESRCH) -+ && lp != NULL; lp = lp->next) -+ { -+ if (!is_lwp (lp->ptid) || ptid_equal (lp->ptid, inferior_ptid_orig)) -+ continue; -+ -+ if (old_chain == NULL) -+ old_chain = save_inferior_ptid (); -+ inferior_ptid = BUILD_LWP (GET_LWP (lp->ptid), GET_LWP (lp->ptid)); -+ errno = 0; -+ xfer = linux_xfer_partial_lwp (ops, object, annex, readbuf, writebuf, -+ offset, len); -+ } -+ -+ if (old_chain != NULL) -+ do_cleanups (old_chain); -+ return xfer; -+} -+ - /* Create a prototype generic GNU/Linux target. The client can override - it with local methods. */ - diff --git a/gdb-6.6-bz247354-leader-exit-test.patch b/gdb-6.6-bz247354-leader-exit-test.patch deleted file mode 100644 index 4b5d415..0000000 --- a/gdb-6.6-bz247354-leader-exit-test.patch +++ /dev/null @@ -1,121 +0,0 @@ -2007-07-07 Jan Kratochvil - - * gdb.threads/leader-exit.c, gdb.threads/leader-exit.exp: New files. - ---- /dev/null 1 Jan 1970 00:00:00 -0000 -+++ ./gdb/testsuite/gdb.threads/leader-exit.c 7 Jul 2007 15:21:57 -0000 -@@ -0,0 +1,47 @@ -+/* Clean exit of the thread group leader should not break GDB. -+ -+ Copyright 2007 Free Software Foundation, Inc. -+ -+ This file is part of GDB. -+ -+ 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 2 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, write to the Free Software -+ Foundation, Inc., 59 Temple Place - Suite 330, -+ Boston, MA 02111-1307, USA. */ -+ -+#include -+#include -+#include -+ -+static void *start (void *arg) -+{ -+ for (;;) -+ pause (); -+ /* NOTREACHED */ -+ assert (0); -+ return arg; -+} -+ -+int main (void) -+{ -+ pthread_t thread; -+ int i; -+ -+ i = pthread_create (&thread, NULL, start, NULL); /* create1 */ -+ assert (i == 0); -+ -+ pthread_exit (NULL); -+ /* NOTREACHED */ -+ assert (0); -+ return 0; -+} ---- /dev/null 1 Jan 1970 00:00:00 -0000 -+++ ./gdb/testsuite/gdb.threads/leader-exit.exp 7 Jul 2007 15:21:57 -0000 -@@ -0,0 +1,64 @@ -+# Copyright (C) 2007 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 2 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, write to the Free Software -+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+ -+# Exit of the thread group leader should not break GDB. -+ -+# This file was written by Jan Kratochvil . -+ -+if $tracelevel then { -+ strace $tracelevel -+} -+ -+set testfile "leader-exit" -+set srcfile ${testfile}.c -+set binfile ${objdir}/${subdir}/${testfile} -+ -+if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } { -+ return -1 -+} -+ -+gdb_exit -+gdb_start -+gdb_reinitialize_dir $srcdir/$subdir -+gdb_load ${binfile} -+gdb_run_cmd -+ -+proc stop_process { description } { -+ global gdb_prompt -+ -+ # For this to work we must be sure to consume the "Continuing." -+ # message first, or GDB's signal handler may not be in place. -+ after 1000 {send_gdb "\003"} -+ gdb_expect { -+ -re "Program received signal SIGINT.*$gdb_prompt $" -+ { -+ pass $description -+ } -+ timeout -+ { -+ fail "$description (timeout)" -+ } -+ } -+} -+ -+# Prevent races. -+sleep 8 -+ -+stop_process "Threads could be stopped" -+ -+gdb_test "info threads" \ -+ "\\* 2 Thread \[^\r\n\]* in \[^\r\n\]*" \ -+ "Single thread has been left" diff --git a/gdb-6.6-scheduler_locking-step-is-default.patch b/gdb-6.6-scheduler_locking-step-is-default.patch index ffc5271..6d0746a 100644 --- a/gdb-6.6-scheduler_locking-step-is-default.patch +++ b/gdb-6.6-scheduler_locking-step-is-default.patch @@ -1,8 +1,8 @@ -Index: gdb-7.1.90.20100711/gdb/infrun.c +Index: gdb-7.3.50.20110722/gdb/infrun.c =================================================================== ---- gdb-7.1.90.20100711.orig/gdb/infrun.c 2010-07-12 10:05:26.000000000 +0200 -+++ gdb-7.1.90.20100711/gdb/infrun.c 2010-07-12 10:58:56.000000000 +0200 -@@ -1491,7 +1491,7 @@ static const char *scheduler_enums[] = { +--- gdb-7.3.50.20110722.orig/gdb/infrun.c 2011-07-22 19:12:56.000000000 +0200 ++++ gdb-7.3.50.20110722/gdb/infrun.c 2011-07-22 19:17:06.000000000 +0200 +@@ -1549,7 +1549,7 @@ static const char *scheduler_enums[] = { schedlock_step, NULL }; @@ -11,10 +11,10 @@ Index: gdb-7.1.90.20100711/gdb/infrun.c static void show_scheduler_mode (struct ui_file *file, int from_tty, struct cmd_list_element *c, const char *value) -Index: gdb-7.1.90.20100711/gdb/testsuite/gdb.mi/mi-console.exp +Index: gdb-7.3.50.20110722/gdb/testsuite/gdb.mi/mi-console.exp =================================================================== ---- gdb-7.1.90.20100711.orig/gdb/testsuite/gdb.mi/mi-console.exp 2010-01-01 08:32:03.000000000 +0100 -+++ gdb-7.1.90.20100711/gdb/testsuite/gdb.mi/mi-console.exp 2010-07-12 10:58:56.000000000 +0200 +--- gdb-7.3.50.20110722.orig/gdb/testsuite/gdb.mi/mi-console.exp 2011-01-01 16:33:47.000000000 +0100 ++++ gdb-7.3.50.20110722/gdb/testsuite/gdb.mi/mi-console.exp 2011-07-22 19:17:06.000000000 +0200 @@ -47,6 +47,9 @@ if { [gdb_compile "${srcdir}/${subdir}/ mi_run_to_main @@ -25,10 +25,10 @@ Index: gdb-7.1.90.20100711/gdb/testsuite/gdb.mi/mi-console.exp # Next over the hello() call which will produce lots of output mi_gdb_test "220-exec-next" \ "220\\^running(\r\n\\*running,thread-id=\"all\")?" \ -Index: gdb-7.1.90.20100711/gdb/testsuite/gdb.mi/mi2-console.exp +Index: gdb-7.3.50.20110722/gdb/testsuite/gdb.mi/mi2-console.exp =================================================================== ---- gdb-7.1.90.20100711.orig/gdb/testsuite/gdb.mi/mi2-console.exp 2010-05-26 20:12:13.000000000 +0200 -+++ gdb-7.1.90.20100711/gdb/testsuite/gdb.mi/mi2-console.exp 2010-07-12 10:59:14.000000000 +0200 +--- gdb-7.3.50.20110722.orig/gdb/testsuite/gdb.mi/mi2-console.exp 2011-06-23 11:40:50.000000000 +0200 ++++ gdb-7.3.50.20110722/gdb/testsuite/gdb.mi/mi2-console.exp 2011-07-22 19:17:27.000000000 +0200 @@ -47,6 +47,9 @@ if { [gdb_compile "${srcdir}/${subdir}/ mi_run_to_main @@ -37,12 +37,12 @@ Index: gdb-7.1.90.20100711/gdb/testsuite/gdb.mi/mi2-console.exp +mi_gdb_test "210-gdb-set scheduler-locking off" "210\\^done" "set scheduler-locking off" + # Next over the hello() call which will produce lots of output - gdb_test_multiple "220-exec-next" "Started step over hello" { - -re "220\\^running\r\n(\\*running,thread-id=\"all\"\r\n)?$mi_gdb_prompt" { -Index: gdb-7.1.90.20100711/gdb/testsuite/gdb.mi/mi-cli.exp + mi_gdb_test "220-exec-next" "220\\^running(\r\n)?(\\*running,thread-id=\"all\")?" \ + "Started step over hello" +Index: gdb-7.3.50.20110722/gdb/testsuite/gdb.mi/mi-cli.exp =================================================================== ---- gdb-7.1.90.20100711.orig/gdb/testsuite/gdb.mi/mi-cli.exp 2010-01-19 09:00:39.000000000 +0100 -+++ gdb-7.1.90.20100711/gdb/testsuite/gdb.mi/mi-cli.exp 2010-07-12 10:58:56.000000000 +0200 +--- gdb-7.3.50.20110722.orig/gdb/testsuite/gdb.mi/mi-cli.exp 2011-04-27 12:17:38.000000000 +0200 ++++ gdb-7.3.50.20110722/gdb/testsuite/gdb.mi/mi-cli.exp 2011-07-22 19:17:06.000000000 +0200 @@ -176,7 +176,7 @@ mi_execute_to "exec-continue" "breakpoin # Test that the token is output even for CLI commands # Also test that *stopped includes frame information. diff --git a/gdb-6.6-scheduler_locking-step-sw-watchpoints2.patch b/gdb-6.6-scheduler_locking-step-sw-watchpoints2.patch index 0597408..3f3a217 100644 --- a/gdb-6.6-scheduler_locking-step-sw-watchpoints2.patch +++ b/gdb-6.6-scheduler_locking-step-sw-watchpoints2.patch @@ -21,15 +21,15 @@ Port to GDB-6.8pre. -Index: gdb-7.2.50.20110117/gdb/inferior.h +Index: gdb-7.4.50.20120602/gdb/inferior.h =================================================================== ---- gdb-7.2.50.20110117.orig/gdb/inferior.h 2011-01-09 04:08:56.000000000 +0100 -+++ gdb-7.2.50.20110117/gdb/inferior.h 2011-01-17 15:48:39.000000000 +0100 -@@ -186,7 +186,15 @@ extern void reopen_exec_file (void); +--- gdb-7.4.50.20120602.orig/gdb/inferior.h 2012-05-24 18:39:09.000000000 +0200 ++++ gdb-7.4.50.20120602/gdb/inferior.h 2012-06-02 18:24:12.875274179 +0200 +@@ -159,7 +159,15 @@ extern void reopen_exec_file (void); /* The `resume' routine should only be called in special circumstances. Normally, use `proceed', which handles a lot of bookkeeping. */ --extern void resume (int, enum target_signal); +-extern void resume (int, enum gdb_signal); +enum resume_step + { + /* currently_stepping () should return non-zero for non-continue. */ @@ -38,15 +38,15 @@ Index: gdb-7.2.50.20110117/gdb/inferior.h + RESUME_STEP_NEEDED /* Stepping only for software watchpoints. */ + }; + -+extern void resume (enum resume_step, enum target_signal); ++extern void resume (enum resume_step, enum gdb_signal); - /* From misc files */ + extern ptid_t user_visible_resume_ptid (int step); -Index: gdb-7.2.50.20110117/gdb/infrun.c +Index: gdb-7.4.50.20120602/gdb/infrun.c =================================================================== ---- gdb-7.2.50.20110117.orig/gdb/infrun.c 2011-01-09 04:08:56.000000000 +0100 -+++ gdb-7.2.50.20110117/gdb/infrun.c 2011-01-17 15:49:40.000000000 +0100 -@@ -76,7 +76,7 @@ static int follow_fork (void); +--- gdb-7.4.50.20120602.orig/gdb/infrun.c 2012-05-28 22:43:26.000000000 +0200 ++++ gdb-7.4.50.20120602/gdb/infrun.c 2012-06-02 18:23:59.339278268 +0200 +@@ -79,7 +79,7 @@ static int follow_fork (void); static void set_schedlock_func (char *args, int from_tty, struct cmd_list_element *c); @@ -55,46 +55,42 @@ Index: gdb-7.2.50.20110117/gdb/infrun.c static int currently_stepping_or_nexting_callback (struct thread_info *tp, void *data); -@@ -1577,7 +1577,7 @@ maybe_software_singlestep (struct gdbarc +@@ -1687,7 +1687,8 @@ user_visible_resume_ptid (int step) + } + else if ((scheduler_mode == schedlock_on) + || (scheduler_mode == schedlock_step +- && (step || singlestep_breakpoints_inserted_p))) ++ && (step == RESUME_STEP_USER ++ || singlestep_breakpoints_inserted_p))) + { + /* User-settable 'scheduler' mode requires solo thread resume. */ + resume_ptid = inferior_ptid; +@@ -1705,7 +1706,7 @@ user_visible_resume_ptid (int step) STEP nonzero if we should step (zero to continue instead). SIG is the signal to give the inferior (zero for none). */ void --resume (int step, enum target_signal sig) -+resume (enum resume_step step, enum target_signal sig) +-resume (int step, enum gdb_signal sig) ++resume (enum resume_step step, enum gdb_signal sig) { int should_resume = 1; struct cleanup *old_cleanups = make_cleanup (resume_cleanups, 0); -@@ -1609,10 +1609,12 @@ resume (int step, enum target_signal sig - } +@@ -1738,9 +1739,13 @@ resume (int step, enum gdb_signal sig) if (debug_infrun) -- fprintf_unfiltered (gdb_stdlog, + fprintf_unfiltered (gdb_stdlog, - "infrun: resume (step=%d, signal=%d), " -- "trap_expected=%d\n", -- step, sig, tp->control.trap_expected); -+ fprintf_unfiltered (gdb_stdlog, "infrun: resume (step=%s, signal=%d), " -+ "trap_expected=%d\n", -+ (step == RESUME_STEP_CONTINUE ? "RESUME_STEP_CONTINUE" -+ : (step == RESUME_STEP_USER ? "RESUME_STEP_USER" -+ : "RESUME_STEP_NEEDED")), -+ sig, tp->control.trap_expected); ++ "infrun: resume (step=%s, signal=%d), " + "trap_expected=%d, current thread [%s] at %s\n", +- step, sig, tp->control.trap_expected, ++ (step == RESUME_STEP_CONTINUE ++ ? "RESUME_STEP_CONTINUE" ++ : (step == RESUME_STEP_USER ? "RESUME_STEP_USER" ++ : "RESUME_STEP_NEEDED")), ++ sig, tp->control.trap_expected, + target_pid_to_str (inferior_ptid), + paddress (gdbarch, pc)); - /* Normally, by the time we reach `resume', the breakpoints are either - removed or inserted, as appropriate. The exception is if we're sitting -@@ -1730,9 +1732,10 @@ a command like `return' or `jump' to con - individually. */ - resume_ptid = inferior_ptid; - } -- else if ((scheduler_mode == schedlock_on) -+ else if (scheduler_mode == schedlock_on - || (scheduler_mode == schedlock_step -- && (step || singlestep_breakpoints_inserted_p))) -+ && (step == RESUME_STEP_USER -+ || singlestep_breakpoints_inserted_p))) - { - /* User-settable 'scheduler' mode requires solo thread resume. */ - resume_ptid = inferior_ptid; -@@ -1941,7 +1944,7 @@ proceed (CORE_ADDR addr, enum target_sig +@@ -2117,7 +2122,7 @@ proceed (CORE_ADDR addr, enum gdb_signal struct thread_info *tp; CORE_ADDR pc; struct address_space *aspace; @@ -103,7 +99,7 @@ Index: gdb-7.2.50.20110117/gdb/infrun.c /* If we're stopped at a fork/vfork, follow the branch set by the "set follow-fork-mode" command; otherwise, we'll just proceed -@@ -1976,13 +1979,13 @@ proceed (CORE_ADDR addr, enum target_sig +@@ -2157,13 +2162,13 @@ proceed (CORE_ADDR addr, enum gdb_signal actually be executing the breakpoint insn anyway. We'll be (un-)executing the previous instruction. */ @@ -119,7 +115,7 @@ Index: gdb-7.2.50.20110117/gdb/infrun.c } else { -@@ -2023,13 +2026,13 @@ proceed (CORE_ADDR addr, enum target_sig +@@ -2194,13 +2199,13 @@ proceed (CORE_ADDR addr, enum gdb_signal is required it returns TRUE and sets the current thread to the old thread. */ if (prepare_to_proceed (step)) @@ -135,7 +131,7 @@ Index: gdb-7.2.50.20110117/gdb/infrun.c { tp->control.trap_expected = 1; /* If displaced stepping is enabled, we can step over the -@@ -2116,8 +2119,13 @@ proceed (CORE_ADDR addr, enum target_sig +@@ -2287,8 +2292,13 @@ proceed (CORE_ADDR addr, enum gdb_signal /* Reset to normal state. */ init_infwait_state (); @@ -150,7 +146,7 @@ Index: gdb-7.2.50.20110117/gdb/infrun.c /* Wait for it to stop (if not standalone) and in any case decode why it stopped, and act accordingly. */ -@@ -4957,14 +4965,19 @@ process_event_stop_test: +@@ -5249,13 +5259,18 @@ process_event_stop_test: /* Is thread TP in the middle of single-stepping? */ @@ -161,12 +157,10 @@ Index: gdb-7.2.50.20110117/gdb/infrun.c - return ((tp->control.step_range_end - && tp->control.step_resume_breakpoint == NULL) - || tp->control.trap_expected -- || tp->stepping_through_solib_after_catch - || bpstat_should_step ()); + if ((tp->control.step_range_end + && tp->control.step_resume_breakpoint == NULL) -+ || tp->control.trap_expected -+ || tp->stepping_through_solib_after_catch) ++ || tp->control.trap_expected) + return RESUME_STEP_USER; + + if (bpstat_should_step ()) @@ -176,27 +170,28 @@ Index: gdb-7.2.50.20110117/gdb/infrun.c } /* Returns true if any thread *but* the one passed in "data" is in the -Index: gdb-7.2.50.20110117/gdb/linux-nat.c +Index: gdb-7.4.50.20120602/gdb/linux-nat.c =================================================================== ---- gdb-7.2.50.20110117.orig/gdb/linux-nat.c 2011-01-17 15:47:37.000000000 +0100 -+++ gdb-7.2.50.20110117/gdb/linux-nat.c 2011-01-17 15:48:39.000000000 +0100 -@@ -2928,7 +2928,10 @@ count_events_callback (struct lwp_info * - static int +--- gdb-7.4.50.20120602.orig/gdb/linux-nat.c 2012-05-24 18:51:34.000000000 +0200 ++++ gdb-7.4.50.20120602/gdb/linux-nat.c 2012-06-02 18:23:07.409293800 +0200 +@@ -3051,7 +3051,11 @@ static int select_singlestep_lwp_callback (struct lwp_info *lp, void *data) { -- if (lp->step && lp->status != 0) -+ /* We do not focus on software watchpoints as we would not catch -+ STEPPING_PAST_SINGLESTEP_BREAKPOINT breakpoints in some other thread -+ as they would remain pending due to `Push back breakpoint for %s'. */ -+ if (lp->step == RESUME_STEP_USER && lp->status != 0) + if (lp->last_resume_kind == resume_step +- && lp->status != 0) ++ && lp->status != 0 ++ /* We do not focus on software watchpoints as we would not catch ++ STEPPING_PAST_SINGLESTEP_BREAKPOINT breakpoints in some other thread ++ as they would remain pending due to `Push back breakpoint for %s'. */ ++ && lp->step == RESUME_STEP_USER) return 1; else return 0; -Index: gdb-7.2.50.20110117/gdb/linux-nat.h +Index: gdb-7.4.50.20120602/gdb/linux-nat.h =================================================================== ---- gdb-7.2.50.20110117.orig/gdb/linux-nat.h 2011-01-17 15:47:37.000000000 +0100 -+++ gdb-7.2.50.20110117/gdb/linux-nat.h 2011-01-17 15:48:39.000000000 +0100 -@@ -55,8 +55,8 @@ struct lwp_info +--- gdb-7.4.50.20120602.orig/gdb/linux-nat.h 2012-03-21 14:43:54.000000000 +0100 ++++ gdb-7.4.50.20120602/gdb/linux-nat.h 2012-06-02 18:23:07.411293798 +0200 +@@ -73,8 +73,8 @@ struct lwp_info /* If non-zero, a pending wait status. */ int status; diff --git a/gdb-6.6-step-thread-exit.patch b/gdb-6.6-step-thread-exit.patch deleted file mode 100644 index d3fde0b..0000000 --- a/gdb-6.6-step-thread-exit.patch +++ /dev/null @@ -1,60 +0,0 @@ -Index: gdb-7.2.50.20101116/gdb/linux-nat.c -=================================================================== ---- gdb-7.2.50.20101116.orig/gdb/linux-nat.c 2010-11-16 07:58:15.000000000 +0100 -+++ gdb-7.2.50.20101116/gdb/linux-nat.c 2010-11-16 07:59:06.000000000 +0100 -@@ -1863,16 +1863,18 @@ resume_set_callback (struct lwp_info *lp - - static void - linux_nat_resume (struct target_ops *ops, -- ptid_t ptid, int step, enum target_signal signo) -+ ptid_t ptid, int step_int, enum target_signal signo) - { - sigset_t prev_mask; - struct lwp_info *lp; - int resume_many; -+ enum resume_step step = step_int; - - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "LLR: Preparing to %s %s, %s, inferior_ptid %s\n", -- step ? "step" : "resume", -+ (step == RESUME_STEP_NEEDED -+ ? "needed" : (step ? "step" : "resume")), - target_pid_to_str (ptid), - (signo != TARGET_SIGNAL_0 - ? strsignal (target_signal_to_host (signo)) : "0"), -@@ -3171,10 +3173,34 @@ linux_nat_filter_event (int lwpid, int s - - if (num_lwps (GET_PID (lp->ptid)) > 1) - { -+ enum resume_step step = lp->step; -+ pid_t pid = GET_PID (lp->ptid); -+ - /* If there is at least one more LWP, then the exit signal - was not the end of the debugged application and should be - ignored. */ - exit_lwp (lp); -+ -+ if (step == RESUME_STEP_USER) -+ { -+ /* Now stop the closest LWP's ... */ -+ lp = find_lwp_pid (pid_to_ptid (pid)); -+ if (!lp) -+ lp = lwp_list; -+ gdb_assert (lp != NULL); -+ errno = 0; -+ ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0, -+ (void *) (unsigned long) SIGSTOP); -+ if (debug_linux_nat) -+ fprintf_unfiltered (gdb_stdlog, -+ "PTRACE_CONT %s, 0, 0 (%s)\n", -+ target_pid_to_str (lp->ptid), -+ errno ? safe_strerror (errno) -+ : "OK"); -+ /* Avoid the silent `delayed SIGSTOP' handling. */ -+ lp->signalled = 0; -+ } -+ - return NULL; - } - } diff --git a/gdb-6.6-testsuite-timeouts.patch b/gdb-6.6-testsuite-timeouts.patch index 3e716ae..86d07ef 100644 --- a/gdb-6.6-testsuite-timeouts.patch +++ b/gdb-6.6-testsuite-timeouts.patch @@ -1,42 +1,26 @@ ---- ./gdb/testsuite/gdb.base/annota1.exp 10 Jan 2007 03:23:04 -0000 1.23 -+++ ./gdb/testsuite/gdb.base/annota1.exp 10 May 2007 12:54:11 -0000 -@@ -57,6 +57,8 @@ if [target_info exists gdb_stub] { - gdb_step_for_stub; - } +Index: gdb-7.4.50.20120602/gdb/testsuite/gdb.base/annota1.exp +=================================================================== +--- gdb-7.4.50.20120602.orig/gdb/testsuite/gdb.base/annota1.exp 2012-03-16 17:47:33.000000000 +0100 ++++ gdb-7.4.50.20120602/gdb/testsuite/gdb.base/annota1.exp 2012-06-02 18:27:46.623210711 +0200 +@@ -45,6 +45,8 @@ gdb_start + gdb_reinitialize_dir $srcdir/$subdir + gdb_load ${binfile} +gdb_test "set breakpoint pending off" "" "Avoid lockup on nonexisting functions" + - # - # the line at which break main will put the breakpoint - # ---- ./gdb/testsuite/gdb.base/annota3.exp 9 Jan 2007 17:59:09 -0000 1.12 -+++ ./gdb/testsuite/gdb.base/annota3.exp 10 May 2007 12:54:11 -0000 -@@ -56,6 +56,8 @@ if [target_info exists gdb_stub] { - gdb_step_for_stub; - } + # The commands we test here produce many lines of output; disable "press + # to continue" prompts. + gdb_test_no_output "set height 0" +Index: gdb-7.4.50.20120602/gdb/testsuite/gdb.base/annota3.exp +=================================================================== +--- gdb-7.4.50.20120602.orig/gdb/testsuite/gdb.base/annota3.exp 2012-02-28 23:40:48.000000000 +0100 ++++ gdb-7.4.50.20120602/gdb/testsuite/gdb.base/annota3.exp 2012-06-02 18:28:00.375206457 +0200 +@@ -45,6 +45,8 @@ gdb_start + gdb_reinitialize_dir $srcdir/$subdir + gdb_load ${binfile} +gdb_test "set breakpoint pending off" "" "Avoid lockup on nonexisting functions" + - # - # the line at which break main will put the breakpoint - # ---- gdb-6.6/gdb/testsuite/gdb.threads/step-thread-exit.exp-orig 2007-05-10 15:03:15.000000000 +0200 -+++ gdb-6.6/gdb/testsuite/gdb.threads/step-thread-exit.exp 2007-05-10 15:04:24.000000000 +0200 -@@ -58,6 +58,9 @@ gdb_test "continue" "Break.*thread_funct - # thread to be stopped and a message printed to tell us we have stepped - # over the thread exit. - set test "step over thread exit 1" -+# ppc64 is currently failing: -+set timeout_old $timeout -+set timeout 60 - gdb_test_multiple "next" "$test" { - -re "\}.*$gdb_prompt $" { - send_gdb "next\n" -@@ -71,6 +74,7 @@ gdb_test_multiple "next" "$test" { - exp_continue - } - } -+set timeout $timeout_old - - # Without this fixup we could end up in: - # #0 0x00110416 in __kernel_vsyscall () + # The commands we test here produce many lines of output; disable "press + # to continue" prompts. + gdb_test_no_output "set height 0" diff --git a/gdb-6.6-threads-static-test.patch b/gdb-6.6-threads-static-test.patch index 23bc061..23e0a91 100644 --- a/gdb-6.6-threads-static-test.patch +++ b/gdb-6.6-threads-static-test.patch @@ -1,8 +1,8 @@ -Index: gdb-7.1.90.20100711/gdb/testsuite/gdb.threads/staticthreads.exp +Index: gdb-7.4.50.20111219/gdb/testsuite/gdb.threads/staticthreads.exp =================================================================== ---- gdb-7.1.90.20100711.orig/gdb/testsuite/gdb.threads/staticthreads.exp 2010-06-02 23:53:28.000000000 +0200 -+++ gdb-7.1.90.20100711/gdb/testsuite/gdb.threads/staticthreads.exp 2010-07-12 11:43:26.000000000 +0200 -@@ -44,6 +44,18 @@ gdb_test_no_output "set print sevenbit-s +--- gdb-7.4.50.20111219.orig/gdb/testsuite/gdb.threads/staticthreads.exp 2011-12-19 21:07:01.436475201 +0100 ++++ gdb-7.4.50.20111219/gdb/testsuite/gdb.threads/staticthreads.exp 2011-12-19 22:08:55.444514127 +0100 +@@ -45,6 +45,13 @@ gdb_test_no_output "set print sevenbit-s # See if the static multi-threaded program runs. runto_main @@ -11,12 +11,7 @@ Index: gdb-7.1.90.20100711/gdb/testsuite/gdb.threads/staticthreads.exp +# * 2 Thread 135661664 (LWP 3856) main () at threadloop.c:41 +# 1 process 3856 main () at threadloop.c:41 + -+set test "info threads on start" -+gdb_test_multiple "info threads" "$test" { -+ -re "^info threads\r?\n\[^\r\n\]* Thread \[^\r\n\]*\r?\n$gdb_prompt" { -+ pass "$test" -+ } -+} ++gdb_test "info threads" "^info threads\r\n\[ \t\]*Id\[ \t\]+Target Id\[ \t\]+Frame\[ \t\]*\r\n\[^\r\n\]* Thread \[^\r\n\]*" "info threads on start" + gdb_test "break sem_post" set test "Continue to main's call of sem_post" diff --git a/gdb-6.7-testsuite-stable-results.patch b/gdb-6.7-testsuite-stable-results.patch index 81e5169..8049ec6 100644 --- a/gdb-6.7-testsuite-stable-results.patch +++ b/gdb-6.7-testsuite-stable-results.patch @@ -20,10 +20,10 @@ random FAIL: gdb.base/auxv.exp: matching auxv data from live and gcore gdb-6.8.50.20090209/gdb/testsuite/gdb.base/annota1.exp: frames-invalid can happen asynchronously. -Index: gdb-7.1.90.20100711/gdb/testsuite/gdb.base/fileio.c +Index: gdb-7.4.50.20120103/gdb/testsuite/gdb.base/fileio.c =================================================================== ---- gdb-7.1.90.20100711.orig/gdb/testsuite/gdb.base/fileio.c 2009-10-01 17:39:13.000000000 +0200 -+++ gdb-7.1.90.20100711/gdb/testsuite/gdb.base/fileio.c 2010-07-12 11:41:43.000000000 +0200 +--- gdb-7.4.50.20120103.orig/gdb/testsuite/gdb.base/fileio.c 2009-10-01 17:39:13.000000000 +0200 ++++ gdb-7.4.50.20120103/gdb/testsuite/gdb.base/fileio.c 2012-01-03 15:21:28.122729249 +0100 @@ -58,6 +58,8 @@ system (const char * string); 1) Invalid string/command. - returns 127. */ static const char *strerrno (int err); @@ -71,10 +71,10 @@ Index: gdb-7.1.90.20100711/gdb/testsuite/gdb.base/fileio.c /* Don't change the order of the calls. They partly depend on each other */ test_open (); test_write (); -Index: gdb-7.1.90.20100711/gdb/testsuite/gdb.base/fileio.exp +Index: gdb-7.4.50.20120103/gdb/testsuite/gdb.base/fileio.exp =================================================================== ---- gdb-7.1.90.20100711.orig/gdb/testsuite/gdb.base/fileio.exp 2010-06-09 00:58:03.000000000 +0200 -+++ gdb-7.1.90.20100711/gdb/testsuite/gdb.base/fileio.exp 2010-07-12 11:42:07.000000000 +0200 +--- gdb-7.4.50.20120103.orig/gdb/testsuite/gdb.base/fileio.exp 2011-12-26 12:24:55.000000000 +0100 ++++ gdb-7.4.50.20120103/gdb/testsuite/gdb.base/fileio.exp 2012-01-03 15:22:02.716601956 +0100 @@ -42,8 +42,8 @@ if [get_compiler_info ${binfile}] { return -1; } @@ -95,9 +95,9 @@ Index: gdb-7.1.90.20100711/gdb/testsuite/gdb.base/fileio.exp gdb_test continue \ "Continuing\\..*open 5:.*EACCES$stop_msg" \ -@@ -250,8 +250,8 @@ gdb_test continue \ - send_gdb "quit\n" - send_gdb "y\n" +@@ -251,8 +251,8 @@ gdb_exit + # Wait till GDB really exits. + sleep 1 -remote_exec build {sh -xc test\ -r\ dir2.fileio.test\ &&\ chmod\ -f\ +w\ dir2.fileio.test} -remote_exec build {sh -xc rm\ -rf\ *.fileio.test} diff --git a/gdb-6.8-attach-signalled-detach-stopped.patch b/gdb-6.8-attach-signalled-detach-stopped.patch deleted file mode 100644 index 3dc5a3a..0000000 --- a/gdb-6.8-attach-signalled-detach-stopped.patch +++ /dev/null @@ -1,183 +0,0 @@ -Index: gdb-7.0.50.20100115/gdb/linux-nat.c -=================================================================== ---- gdb-7.0.50.20100115.orig/gdb/linux-nat.c 2010-01-15 11:53:34.000000000 +0100 -+++ gdb-7.0.50.20100115/gdb/linux-nat.c 2010-01-15 12:13:53.000000000 +0100 -@@ -208,6 +208,9 @@ blocked. */ - static struct target_ops *linux_ops; - static struct target_ops linux_ops_saved; - -+/* PID of the inferior stopped by SIGSTOP before attaching (or zero). */ -+static pid_t pid_was_stopped; -+ - /* The method to call, if any, when a new thread is attached. */ - static void (*linux_nat_new_thread) (ptid_t); - -@@ -933,7 +936,14 @@ Attaching after process %d fork to child - parent_inf->waiting_for_vfork_done = 0; - } - else if (detach_fork) -- target_detach (NULL, 0); -+ { -+ /* We should check PID_WAS_STOPPED and detach it stopped accordingly. -+ In this point of code it cannot be 1 as we would not get FORK -+ executed without CONTINUE first which resets PID_WAS_STOPPED. -+ We would have to first TARGET_STOP and WAITPID it as with running -+ inferior PTRACE_DETACH, SIGSTOP will ignore the signal. */ -+ target_detach (NULL, 0); -+ } - - /* Note that the detach above makes PARENT_INF dangling. */ - -@@ -1427,6 +1437,7 @@ linux_nat_post_attach_wait (ptid_t ptid, - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "LNPAW: Attaching to a stopped process\n"); -+ pid_was_stopped = GET_PID (ptid); - - /* The process is definitely stopped. It is in a job control - stop, unless the kernel predates the TASK_STOPPED / -@@ -1757,6 +1768,9 @@ GPT: lwp %s had signal %s, but it is in - target_signal_to_string (signo)); - } - -+ if (*status == 0 && GET_PID (lp->ptid) == pid_was_stopped) -+ *status = W_STOPCODE (SIGSTOP); -+ - return 0; - } - -@@ -1866,6 +1880,8 @@ linux_nat_detach (struct target_ops *ops - } - else - linux_ops->to_detach (ops, args, from_tty); -+ -+ pid_was_stopped = 0; - } - - /* Resume LP. */ -@@ -2031,6 +2047,14 @@ linux_nat_resume (struct target_ops *ops - resume_callback. */ - lp->stopped = 0; - -+ /* At this point, we are going to resume the inferior and if we -+ have attached to a stopped process, we no longer should leave -+ it as stopped if the user detaches. PTID variable has PID set to LWP -+ while we need to check the real PID here. */ -+ -+ if (!step && lp && pid_was_stopped == GET_PID (lp->ptid)) -+ pid_was_stopped = 0; -+ - if (resume_many) - iterate_over_lwps (ptid, resume_callback, NULL); - -@@ -3923,6 +3947,8 @@ linux_nat_mourn_inferior (struct target_ - there are other viable forks to debug. Delete the exiting - one and context-switch to the first available. */ - linux_fork_mourn_inferior (); -+ -+ pid_was_stopped = 0; - } - - /* Convert a native/host siginfo object, into/from the siginfo in the -Index: gdb-7.0.50.20100115/gdb/testsuite/gdb.threads/attach-stopped.exp -=================================================================== ---- gdb-7.0.50.20100115.orig/gdb/testsuite/gdb.threads/attach-stopped.exp 2010-01-01 08:32:06.000000000 +0100 -+++ gdb-7.0.50.20100115/gdb/testsuite/gdb.threads/attach-stopped.exp 2010-01-15 11:54:57.000000000 +0100 -@@ -62,7 +62,65 @@ proc corefunc { threadtype } { - gdb_reinitialize_dir $srcdir/$subdir - gdb_load ${binfile} - -- # Verify that we can attach to the stopped process. -+ # Verify that we can attach to the process by first giving its -+ # executable name via the file command, and using attach with the -+ # process ID. -+ -+ set test "$threadtype: set file, before attach1 to stopped process" -+ gdb_test_multiple "file $binfile" "$test" { -+ -re "Load new symbol table from.*y or n. $" { -+ gdb_test "y" "Reading symbols from $escapedbinfile\.\.\.*done." \ -+ "$test (re-read)" -+ } -+ -re "Reading symbols from $escapedbinfile\.\.\.*done.*$gdb_prompt $" { -+ pass "$test" -+ } -+ } -+ -+ set test "$threadtype: attach1 to stopped, after setting file" -+ gdb_test_multiple "attach $testpid" "$test" { -+ -re "Attaching to program.*`?$escapedbinfile'?, process $testpid.*$gdb_prompt $" { -+ pass "$test" -+ } -+ } -+ -+ # ".*sleep.*clone.*" would fail on s390x as bt stops at START_THREAD there. -+ if {[string equal $threadtype threaded]} { -+ gdb_test "thread apply all bt" ".*sleep.*start_thread.*" "$threadtype: attach1 to stopped bt" -+ } else { -+ gdb_test "bt" ".*sleep.*main.*" "$threadtype: attach1 to stopped bt" -+ } -+ -+ # Exit and detach the process. -+ -+ gdb_exit -+ -+ # Avoid some race: -+ sleep 2 -+ -+ if [catch {open /proc/${testpid}/status r} fileid] { -+ set line2 "NOTFOUND" -+ } else { -+ gets $fileid line1; -+ gets $fileid line2; -+ close $fileid; -+ } -+ -+ set test "$threadtype: attach1, exit leaves process stopped" -+ if {[string match "*(stopped)*" $line2]} { -+ pass $test -+ } else { -+ fail $test -+ } -+ -+ # At this point, the process should still be stopped -+ -+ gdb_start -+ gdb_reinitialize_dir $srcdir/$subdir -+ gdb_load ${binfile} -+ -+ # Verify that we can attach to the process just by giving the -+ # process ID. - - set test "$threadtype: attach2 to stopped, after setting file" - gdb_test_multiple "attach $testpid" "$test" { -Index: gdb-7.0.50.20100115/gdb/testsuite/gdb.threads/attachstop-mt.exp -=================================================================== ---- gdb-7.0.50.20100115.orig/gdb/testsuite/gdb.threads/attachstop-mt.exp 2010-01-01 08:32:06.000000000 +0100 -+++ gdb-7.0.50.20100115/gdb/testsuite/gdb.threads/attachstop-mt.exp 2010-01-15 11:54:57.000000000 +0100 -@@ -176,12 +176,23 @@ gdb_test "bt" ".*sleep.*(func|main).*" " - # Exit and detach the process. - gdb_exit - --# Stop the program --remote_exec build "kill -s STOP ${testpid}" -- - # No race - sleep 2 - -+set fileid3 [open $status2 r]; -+gets $fileid3 line1; -+gets $fileid3 line2; -+close $fileid3; -+ -+set test "attach3, exit leaves process stopped" -+if {[string match "*(stopped)*" $line2]} { -+ pass $test -+} else { -+ fail $test -+} -+ -+# At this point, the process should still be stopped -+ - # Continue the test as we would hit another expected bug regarding - # Program received signal SIGSTOP, Stopped (signal). - # across NPTL threads. diff --git a/gdb-6.8-bz254229-gcore-prpsinfo.patch b/gdb-6.8-bz254229-gcore-prpsinfo.patch index ac890df..b969e92 100644 --- a/gdb-6.8-bz254229-gcore-prpsinfo.patch +++ b/gdb-6.8-bz254229-gcore-prpsinfo.patch @@ -1,8 +1,8 @@ -Index: gdb-7.2.50.20110320/bfd/elf-bfd.h +Index: gdb-7.4.50.20120602/bfd/elf-bfd.h =================================================================== ---- gdb-7.2.50.20110320.orig/bfd/elf-bfd.h 2011-03-20 15:17:42.000000000 +0100 -+++ gdb-7.2.50.20110320/bfd/elf-bfd.h 2011-03-20 15:24:02.000000000 +0100 -@@ -2193,8 +2193,10 @@ extern Elf_Internal_Phdr * _bfd_elf_find +--- gdb-7.4.50.20120602.orig/bfd/elf-bfd.h 2012-06-02 21:26:09.928717069 +0200 ++++ gdb-7.4.50.20120602/bfd/elf-bfd.h 2012-06-02 21:27:21.727689625 +0200 +@@ -2221,8 +2221,10 @@ extern Elf_Internal_Phdr * _bfd_elf_find /* Exported interface for writing elf corefile notes. */ extern char *elfcore_write_note (bfd *, char *, int *, const char *, int, const void *, int); @@ -14,17 +14,11 @@ Index: gdb-7.2.50.20110320/bfd/elf-bfd.h extern char *elfcore_write_prstatus (bfd *, char *, int *, long, int, const void *); extern char * elfcore_write_pstatus -Index: gdb-7.2.50.20110320/bfd/elf.c +Index: gdb-7.4.50.20120602/bfd/elf.c =================================================================== ---- gdb-7.2.50.20110320.orig/bfd/elf.c 2011-03-20 15:17:42.000000000 +0100 -+++ gdb-7.2.50.20110320/bfd/elf.c 2011-03-20 15:24:02.000000000 +0100 -@@ -8814,13 +8814,12 @@ elfcore_write_note (bfd *abfd, - return buf; - } - --#if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T) -+#if defined (HAVE_PRPSINFO_T) - char * +--- gdb-7.4.50.20120602.orig/bfd/elf.c 2012-06-02 21:26:09.928717069 +0200 ++++ gdb-7.4.50.20120602/bfd/elf.c 2012-06-02 21:27:21.732689623 +0200 +@@ -8917,56 +8917,61 @@ char * elfcore_write_prpsinfo (bfd *abfd, char *buf, int *bufsiz, @@ -32,9 +26,8 @@ Index: gdb-7.2.50.20110320/bfd/elf.c - const char *psargs) + const prpsinfo_t *input) { - const char *note_name = "CORE"; const struct elf_backend_data *bed = get_elf_backend_data (abfd); -@@ -8828,48 +8827,55 @@ elfcore_write_prpsinfo (bfd *abfd, + if (bed->elf_backend_write_core_note != NULL) { char *ret; @@ -52,7 +45,9 @@ Index: gdb-7.2.50.20110320/bfd/elf.c return ret; } +-#if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T) -#if defined (HAVE_PRPSINFO32_T) || defined (HAVE_PSINFO32_T) ++#if defined (HAVE_PRPSINFO_T) +#if defined (HAVE_PRPSINFO32_T) if (bed->s->elfclass == ELFCLASS32) { @@ -64,7 +59,7 @@ Index: gdb-7.2.50.20110320/bfd/elf.c int note_type = NT_PRPSINFO; -#endif - memset (&data, 0, sizeof (data)); +- memset (&data, 0, sizeof (data)); - strncpy (data.pr_fname, fname, sizeof (data.pr_fname)); - strncpy (data.pr_psargs, psargs, sizeof (data.pr_psargs)); + data.pr_state = input->pr_state; @@ -83,7 +78,7 @@ Index: gdb-7.2.50.20110320/bfd/elf.c + BFD_ASSERT (sizeof (data.pr_psargs) == sizeof (input->pr_psargs)); + memcpy (data.pr_psargs, input->pr_psargs, sizeof (data.pr_psargs)); return elfcore_write_note (abfd, buf, bufsiz, - note_name, note_type, &data, sizeof (data)); + "CORE", note_type, &data, sizeof (data)); } else #endif @@ -100,21 +95,40 @@ Index: gdb-7.2.50.20110320/bfd/elf.c - strncpy (data.pr_fname, fname, sizeof (data.pr_fname)); - strncpy (data.pr_psargs, psargs, sizeof (data.pr_psargs)); return elfcore_write_note (abfd, buf, bufsiz, -- note_name, note_type, &data, sizeof (data)); -+ note_name, note_type, input, sizeof (*input)); +- "CORE", note_type, &data, sizeof (data)); ++ "CORE", note_type, input, sizeof (*input)); } - } -#endif /* PSINFO_T or PRPSINFO_T */ +#endif /* PRPSINFO_T */ - #if defined (HAVE_PRSTATUS_T) - char * -Index: gdb-7.2.50.20110320/gdb/linux-nat.c + free (buf); + return NULL; +Index: gdb-7.4.50.20120602/gdb/procfs.c =================================================================== ---- gdb-7.2.50.20110320.orig/gdb/linux-nat.c 2011-03-20 15:17:46.000000000 +0100 -+++ gdb-7.2.50.20110320/gdb/linux-nat.c 2011-03-20 15:25:36.000000000 +0100 -@@ -4603,6 +4603,131 @@ linux_spu_make_corefile_notes (bfd *obfd - return args.note_data; +--- gdb-7.4.50.20120602.orig/gdb/procfs.c 2012-06-02 21:26:09.928717069 +0200 ++++ gdb-7.4.50.20120602/gdb/procfs.c 2012-06-02 21:27:21.745689618 +0200 +@@ -5541,6 +5541,7 @@ procfs_make_note_section (bfd *obfd, int + note_data = (char *) elfcore_write_prpsinfo (obfd, + note_data, + note_size, ++ NULL, + fname, + psargs); + +Index: gdb-7.4.50.20120602/gdb/linux-tdep.c +=================================================================== +--- gdb-7.4.50.20120602.orig/gdb/linux-tdep.c 2012-06-02 21:26:09.928717069 +0200 ++++ gdb-7.4.50.20120602/gdb/linux-tdep.c 2012-06-02 21:31:12.051601510 +0200 +@@ -30,6 +30,7 @@ + #include "elf-bfd.h" /* for elfcore_write_* */ + #include "inferior.h" + #include "cli/cli-utils.h" ++#include + + #include + +@@ -769,6 +770,131 @@ linux_corefile_thread_callback (struct t + return !args->note_data; } +/* Should be always true for Linux */ @@ -245,45 +259,22 @@ Index: gdb-7.2.50.20110320/gdb/linux-nat.c /* Fills the "to_make_corefile_note" target vector. Builds the note section for a corefile, and returns it in a malloc buffer. */ -@@ -4621,26 +4746,11 @@ linux_nat_make_corefile_notes (bfd *obfd - +@@ -784,16 +910,9 @@ linux_make_corefile_notes (struct gdbarc + /* Process information. */ if (get_exec_file (0)) { -- strncpy (fname, lbasename (get_exec_file (0)), sizeof (fname)); -- strncpy (psargs, get_exec_file (0), sizeof (psargs)); -- if (get_inferior_args ()) -- { -- char *string_end; -- char *psargs_end = psargs + sizeof (psargs); -- -- /* linux_elfcore_write_prpsinfo () handles zero unterminated -- strings fine. */ -- string_end = memchr (psargs, 0, sizeof (psargs)); -- if (string_end != NULL) -- { -- *string_end++ = ' '; -- strncpy (string_end, get_inferior_args (), -- psargs_end - string_end); -- } -- } +- const char *fname = lbasename (get_exec_file (0)); +- char *psargs = xstrdup (fname); + const prpsinfo_t *data = fill_prpsinfo (); -+ - note_data = (char *) elfcore_write_prpsinfo (obfd, - note_data, -- note_size, fname, psargs); -+ note_size, data); - } - /* Dump information for threads. */ -Index: gdb-7.2.50.20110320/gdb/procfs.c -=================================================================== ---- gdb-7.2.50.20110320.orig/gdb/procfs.c 2011-03-09 13:48:55.000000000 +0100 -+++ gdb-7.2.50.20110320/gdb/procfs.c 2011-03-20 15:24:02.000000000 +0100 -@@ -5752,6 +5752,7 @@ procfs_make_note_section (bfd *obfd, int - note_data = (char *) elfcore_write_prpsinfo (obfd, - note_data, - note_size, -+ NULL, - fname, - psargs); +- if (get_inferior_args ()) +- psargs = reconcat (psargs, psargs, " ", get_inferior_args (), +- (char *) NULL); +- +- note_data = elfcore_write_prpsinfo (obfd, note_data, note_size, +- fname, psargs); +- xfree (psargs); ++ note_data = elfcore_write_prpsinfo (obfd, note_data, note_size, data); + if (!note_data) + return NULL; diff --git a/gdb-6.8-sparc64-silence-memcpy-check.patch b/gdb-6.8-sparc64-silence-memcpy-check.patch index cf97c2f..0aab526 100644 --- a/gdb-6.8-sparc64-silence-memcpy-check.patch +++ b/gdb-6.8-sparc64-silence-memcpy-check.patch @@ -1,8 +1,9 @@ -diff -up gdb-6.8/gdb/sparc-tdep.c.BAD gdb-6.8/gdb/sparc-tdep.c ---- gdb-6.8/gdb/sparc-tdep.c.BAD 2008-05-15 16:12:58.000000000 -0500 -+++ gdb-6.8/gdb/sparc-tdep.c 2008-05-15 16:13:41.000000000 -0500 -@@ -1122,6 +1122,7 @@ sparc32_store_return_value (struct type - if (sparc_floating_p (type)) +Index: gdb-7.4.50.20111218/gdb/sparc-tdep.c +=================================================================== +--- gdb-7.4.50.20111218.orig/gdb/sparc-tdep.c 2011-09-28 19:59:42.000000000 +0200 ++++ gdb-7.4.50.20111218/gdb/sparc-tdep.c 2011-12-19 01:25:29.294046199 +0100 +@@ -1316,6 +1316,7 @@ sparc32_store_return_value (struct type + if (sparc_floating_p (type) || sparc_complex_floating_p (type)) { /* Floating return values. */ + len = (len <= 8) ? len : 8; diff --git a/gdb-6.8-tui-singlebinary.patch b/gdb-6.8-tui-singlebinary.patch deleted file mode 100644 index f3f457c..0000000 --- a/gdb-6.8-tui-singlebinary.patch +++ /dev/null @@ -1,24 +0,0 @@ -Provide `gdb --tui' functionality for the hardlink `gdbtui'. - ---- ./gdb/gdb.c 1 Jan 2008 22:53:09 -0000 1.6 -+++ ./gdb/gdb.c 20 Jun 2008 08:02:57 -0000 -@@ -30,5 +30,19 @@ main (int argc, char **argv) - args.argv = argv; - args.use_windows = 0; - args.interpreter_p = INTERP_CONSOLE; -+ -+ if (argv[0]) -+ { -+ char *s; -+ -+ s = strrchr (argv[0], '/'); -+ if (s) -+ s++; -+ else -+ s = argv[0]; -+ if (strcmp (s, "gdbtui") == 0) -+ args.interpreter_p = INTERP_TUI; -+ } -+ - return gdb_main (&args); - } diff --git a/gdb-7.2.50-sparc-add-workaround-to-broken-debug-files.patch b/gdb-7.2.50-sparc-add-workaround-to-broken-debug-files.patch index 83b3398..267c06b 100644 --- a/gdb-7.2.50-sparc-add-workaround-to-broken-debug-files.patch +++ b/gdb-7.2.50-sparc-add-workaround-to-broken-debug-files.patch @@ -1,6 +1,8 @@ ---- gdb-7.2.50.20110328.orig/gdb/dwarf2read.c 2011-03-30 12:52:20.395450001 +0200 -+++ gdb-7.2.50.20110328/gdb/dwarf2read.c 2011-03-30 13:41:55.485450006 +0200 -@@ -66,12 +66,14 @@ +Index: gdb-7.3.50.20110722/gdb/dwarf2read.c +=================================================================== +--- gdb-7.3.50.20110722.orig/gdb/dwarf2read.c 2011-07-22 19:37:15.000000000 +0200 ++++ gdb-7.3.50.20110722/gdb/dwarf2read.c 2011-07-22 19:44:42.000000000 +0200 +@@ -67,12 +67,14 @@ #ifdef HAVE_ZLIB_H #include #endif @@ -15,7 +17,7 @@ typedef struct symbol *symbolp; DEF_VEC_P (symbolp); -@@ -1563,6 +1565,7 @@ +@@ -1618,6 +1620,7 @@ dwarf2_read_section (struct objfile *obj } } @@ -23,7 +25,7 @@ #ifdef HAVE_MMAP if (pagesize == 0) pagesize = getpagesize (); -@@ -1589,6 +1592,7 @@ +@@ -1641,6 +1644,7 @@ dwarf2_read_section (struct objfile *obj } } #endif @@ -31,15 +33,15 @@ /* If we get here, we are a normal, not-compressed section. */ info->buffer = buf -@@ -15439,6 +15443,7 @@ +@@ -15983,6 +15987,7 @@ munmap_section_buffer (struct dwarf2_sec { - if (info->was_mmapped) + if (info->map_addr != NULL) { +#ifndef __sparc__ #ifdef HAVE_MMAP - intptr_t begin = (intptr_t) info->buffer; - intptr_t map_begin = begin & ~(pagesize - 1); -@@ -15449,6 +15454,7 @@ + int res; + +@@ -15992,6 +15997,7 @@ munmap_section_buffer (struct dwarf2_sec /* Without HAVE_MMAP, we should never be here to begin with. */ gdb_assert_not_reached ("no mmap support"); #endif diff --git a/gdb-7.3.tar.bz2 b/gdb-7.3.tar.bz2 deleted file mode 100644 index cda7de7..0000000 --- a/gdb-7.3.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f9edc83ed921660b77aa2b2fc168b81639aab0f49a94d4b38f2f01bf51d5d2ba -size 19091650 diff --git a/gdb-7.4.50.20120603.tar.bz2 b/gdb-7.4.50.20120603.tar.bz2 new file mode 100644 index 0000000..a93e4f9 --- /dev/null +++ b/gdb-7.4.50.20120603.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1ab4776fcd213e101553e81c6b0ce033d624cbe1b5ad322203a61bdaab8a3e09 +size 22315415 diff --git a/gdb-archer-pie-addons-keep-disabled.patch b/gdb-archer-pie-addons-keep-disabled.patch index e747994..f40390a 100644 --- a/gdb-archer-pie-addons-keep-disabled.patch +++ b/gdb-archer-pie-addons-keep-disabled.patch @@ -1,12 +1,11 @@ -Index: gdb-7.2.90.20110411/gdb/breakpoint.c +Index: gdb-7.4.50.20120602/gdb/breakpoint.c =================================================================== ---- gdb-7.2.90.20110411.orig/gdb/breakpoint.c 2011-04-11 19:11:55.000000000 +0200 -+++ gdb-7.2.90.20110411/gdb/breakpoint.c 2011-04-11 19:18:10.000000000 +0200 -@@ -11233,6 +11233,50 @@ re_set_breakpoint (struct breakpoint *b) - do_cleanups (cleanups); +--- gdb-7.4.50.20120602.orig/gdb/breakpoint.c 2012-06-02 19:11:54.000000000 +0200 ++++ gdb-7.4.50.20120602/gdb/breakpoint.c 2012-06-02 19:52:58.161226506 +0200 +@@ -15495,6 +15495,50 @@ initialize_breakpoint_ops (void) } -+void + void +breakpoints_relocate (struct objfile *objfile, struct section_offsets *delta) +{ + struct bp_location *bl, **blp_tmp; @@ -50,26 +49,27 @@ Index: gdb-7.2.90.20110411/gdb/breakpoint.c + bp_location_compare); +} + - /* Reset a breakpoint given it's struct breakpoint * BINT. - The value we return ends up being the return value from catch_errors. - Unused in this case. */ -Index: gdb-7.2.90.20110411/gdb/breakpoint.h ++void + _initialize_breakpoint (void) + { + struct cmd_list_element *c; +Index: gdb-7.4.50.20120602/gdb/breakpoint.h =================================================================== ---- gdb-7.2.90.20110411.orig/gdb/breakpoint.h 2011-04-11 19:11:55.000000000 +0200 -+++ gdb-7.2.90.20110411/gdb/breakpoint.h 2011-04-11 19:17:53.000000000 +0200 -@@ -1245,4 +1245,7 @@ extern int user_breakpoint_p (struct bre +--- gdb-7.4.50.20120602.orig/gdb/breakpoint.h 2012-05-16 16:35:03.000000000 +0200 ++++ gdb-7.4.50.20120602/gdb/breakpoint.h 2012-06-02 19:53:09.268223263 +0200 +@@ -1503,4 +1503,7 @@ extern struct gdbarch *get_sal_arch (str - extern void modify_semaphore (struct bp_location *location, int set); + extern void handle_solib_event (void); +extern void breakpoints_relocate (struct objfile *objfile, + struct section_offsets *delta); + #endif /* !defined (BREAKPOINT_H) */ -Index: gdb-7.2.90.20110411/gdb/objfiles.c +Index: gdb-7.4.50.20120602/gdb/objfiles.c =================================================================== ---- gdb-7.2.90.20110411.orig/gdb/objfiles.c 2011-04-11 19:11:55.000000000 +0200 -+++ gdb-7.2.90.20110411/gdb/objfiles.c 2011-04-11 19:17:53.000000000 +0200 -@@ -851,6 +851,11 @@ objfile_relocate1 (struct objfile *objfi +--- gdb-7.4.50.20120602.orig/gdb/objfiles.c 2012-05-10 21:50:08.000000000 +0200 ++++ gdb-7.4.50.20120602/gdb/objfiles.c 2012-06-02 19:52:58.202226502 +0200 +@@ -802,6 +802,11 @@ objfile_relocate1 (struct objfile *objfi objfile->sf->sym_probe_fns->sym_relocate_probe (objfile, new_offsets, delta); diff --git a/gdb-archer-pie-addons.patch b/gdb-archer-pie-addons.patch index 605e5f4..de04241 100644 --- a/gdb-archer-pie-addons.patch +++ b/gdb-archer-pie-addons.patch @@ -1,8 +1,8 @@ -Index: gdb-7.2.90.20110525/gdb/dwarf2read.c +Index: gdb-7.4.50.20120602/gdb/dwarf2read.c =================================================================== ---- gdb-7.2.90.20110525.orig/gdb/dwarf2read.c 2011-05-25 17:10:46.000000000 +0200 -+++ gdb-7.2.90.20110525/gdb/dwarf2read.c 2011-05-25 17:12:35.000000000 +0200 -@@ -7675,7 +7675,12 @@ read_common_block (struct die_info *die, +--- gdb-7.4.50.20120602.orig/gdb/dwarf2read.c 2012-06-02 19:14:38.000000000 +0200 ++++ gdb-7.4.50.20120602/gdb/dwarf2read.c 2012-06-02 19:51:29.977252338 +0200 +@@ -9746,7 +9746,12 @@ read_common_block (struct die_info *die, { struct attribute *attr; struct symbol *sym; @@ -16,7 +16,7 @@ Index: gdb-7.2.90.20110525/gdb/dwarf2read.c attr = dwarf2_attr (die, DW_AT_location, cu); if (attr) -@@ -7684,6 +7689,7 @@ read_common_block (struct die_info *die, +@@ -9755,6 +9760,7 @@ read_common_block (struct die_info *die, if (attr_form_is_block (attr)) { base = decode_locdesc (DW_BLOCK (attr), cu); @@ -24,7 +24,7 @@ Index: gdb-7.2.90.20110525/gdb/dwarf2read.c } else if (attr_form_is_section_offset (attr)) { -@@ -7736,12 +7742,15 @@ read_common_block (struct die_info *die, +@@ -9807,12 +9813,15 @@ read_common_block (struct die_info *die, if (sym != NULL && handle_data_member_location (child_die, cu, &offset)) { @@ -42,7 +42,7 @@ Index: gdb-7.2.90.20110525/gdb/dwarf2read.c else SET_FIELD_PHYSNAME (*field, SYMBOL_LINKAGE_NAME (sym)); FIELD_TYPE (*field) = SYMBOL_TYPE (sym); -@@ -7755,7 +7764,7 @@ read_common_block (struct die_info *die, +@@ -9826,7 +9835,7 @@ read_common_block (struct die_info *die, sym = new_symbol (die, type, cu); /* SYMBOL_VALUE_ADDRESS never gets used as all its fields are static. */ @@ -51,35 +51,35 @@ Index: gdb-7.2.90.20110525/gdb/dwarf2read.c set_die_type (die, type, cu); } -Index: gdb-7.2.90.20110525/gdb/gdbtypes.h +Index: gdb-7.4.50.20120602/gdb/gdbtypes.h =================================================================== ---- gdb-7.2.90.20110525.orig/gdb/gdbtypes.h 2011-05-25 17:05:21.000000000 +0200 -+++ gdb-7.2.90.20110525/gdb/gdbtypes.h 2011-05-25 17:11:10.000000000 +0200 -@@ -396,6 +396,7 @@ enum type_instance_flag_value - enum field_loc_kind +--- gdb-7.4.50.20120602.orig/gdb/gdbtypes.h 2012-06-02 19:11:54.000000000 +0200 ++++ gdb-7.4.50.20120602/gdb/gdbtypes.h 2012-06-02 19:52:44.990230200 +0200 +@@ -401,6 +401,7 @@ enum field_loc_kind { FIELD_LOC_KIND_BITPOS, /* bitpos */ + FIELD_LOC_KIND_ENUMVAL, /* enumval */ + /* This address is unrelocated by the objfile's ANOFFSET. */ FIELD_LOC_KIND_PHYSADDR, /* physaddr */ - FIELD_LOC_KIND_PHYSNAME /* physname */ - }; -@@ -580,6 +581,7 @@ struct main_type + FIELD_LOC_KIND_PHYSNAME, /* physname */ + FIELD_LOC_KIND_DWARF_BLOCK /* dwarf_block */ +@@ -595,6 +596,7 @@ struct main_type is the location (in the target) of the static field. Otherwise, physname is the mangled label of the static field. */ + /* This address is unrelocated by the objfile's ANOFFSET. */ CORE_ADDR physaddr; - char *physname; - } -@@ -1106,6 +1108,7 @@ extern void allocate_gnat_aux_type (stru - #define FIELD_LOC_KIND(thisfld) ((thisfld).loc_kind) - #define FIELD_BITPOS(thisfld) ((thisfld).loc.bitpos) + const char *physname; + +@@ -1200,6 +1202,7 @@ extern void allocate_gnat_aux_type (stru + #define FIELD_ENUMVAL_LVAL(thisfld) ((thisfld).loc.enumval) + #define FIELD_ENUMVAL(thisfld) (FIELD_ENUMVAL_LVAL (thisfld) + 0) #define FIELD_STATIC_PHYSNAME(thisfld) ((thisfld).loc.physname) +/* This address is unrelocated by the objfile's ANOFFSET. */ #define FIELD_STATIC_PHYSADDR(thisfld) ((thisfld).loc.physaddr) + #define FIELD_DWARF_BLOCK(thisfld) ((thisfld).loc.dwarf_block) #define SET_FIELD_BITPOS(thisfld, bitpos) \ - (FIELD_LOC_KIND (thisfld) = FIELD_LOC_KIND_BITPOS, \ -@@ -1113,6 +1116,7 @@ extern void allocate_gnat_aux_type (stru +@@ -1211,6 +1214,7 @@ extern void allocate_gnat_aux_type (stru #define SET_FIELD_PHYSNAME(thisfld, name) \ (FIELD_LOC_KIND (thisfld) = FIELD_LOC_KIND_PHYSNAME, \ FIELD_STATIC_PHYSNAME (thisfld) = (name)) @@ -87,19 +87,19 @@ Index: gdb-7.2.90.20110525/gdb/gdbtypes.h #define SET_FIELD_PHYSADDR(thisfld, addr) \ (FIELD_LOC_KIND (thisfld) = FIELD_LOC_KIND_PHYSADDR, \ FIELD_STATIC_PHYSADDR (thisfld) = (addr)) -@@ -1125,6 +1129,7 @@ extern void allocate_gnat_aux_type (stru - #define TYPE_FIELD_LOC_KIND(thistype, n) FIELD_LOC_KIND (TYPE_FIELD (thistype, n)) +@@ -1227,6 +1231,7 @@ extern void allocate_gnat_aux_type (stru #define TYPE_FIELD_BITPOS(thistype, n) FIELD_BITPOS (TYPE_FIELD (thistype, n)) + #define TYPE_FIELD_ENUMVAL(thistype, n) FIELD_ENUMVAL (TYPE_FIELD (thistype, n)) #define TYPE_FIELD_STATIC_PHYSNAME(thistype, n) FIELD_STATIC_PHYSNAME (TYPE_FIELD (thistype, n)) +/* This address is unrelocated by the objfile's ANOFFSET. */ #define TYPE_FIELD_STATIC_PHYSADDR(thistype, n) FIELD_STATIC_PHYSADDR (TYPE_FIELD (thistype, n)) + #define TYPE_FIELD_DWARF_BLOCK(thistype, n) FIELD_DWARF_BLOCK (TYPE_FIELD (thistype, n)) #define TYPE_FIELD_ARTIFICIAL(thistype, n) FIELD_ARTIFICIAL(TYPE_FIELD(thistype,n)) - #define TYPE_FIELD_BITSIZE(thistype, n) FIELD_BITSIZE(TYPE_FIELD(thistype,n)) -Index: gdb-7.2.90.20110525/gdb/jv-lang.c +Index: gdb-7.4.50.20120602/gdb/jv-lang.c =================================================================== ---- gdb-7.2.90.20110525.orig/gdb/jv-lang.c 2011-03-02 01:42:53.000000000 +0100 -+++ gdb-7.2.90.20110525/gdb/jv-lang.c 2011-05-25 17:11:10.000000000 +0200 -@@ -414,7 +414,8 @@ java_link_class_type (struct gdbarch *gd +--- gdb-7.4.50.20120602.orig/gdb/jv-lang.c 2012-05-10 21:59:12.000000000 +0200 ++++ gdb-7.4.50.20120602/gdb/jv-lang.c 2012-06-02 19:51:53.286245280 +0200 +@@ -431,7 +431,8 @@ java_link_class_type (struct gdbarch *gd fields = NULL; nfields--; /* First set up dummy "class" field. */ @@ -109,7 +109,7 @@ Index: gdb-7.2.90.20110525/gdb/jv-lang.c TYPE_FIELD_NAME (type, nfields) = "class"; TYPE_FIELD_TYPE (type, nfields) = value_type (clas); SET_TYPE_FIELD_PRIVATE (type, nfields); -@@ -462,7 +463,8 @@ java_link_class_type (struct gdbarch *gd +@@ -479,7 +480,8 @@ java_link_class_type (struct gdbarch *gd SET_TYPE_FIELD_PROTECTED (type, i); } if (accflags & 0x0008) /* ACC_STATIC */ @@ -117,13 +117,13 @@ Index: gdb-7.2.90.20110525/gdb/jv-lang.c + SET_FIELD_PHYSADDR (TYPE_FIELD (type, i), boffset + - (TYPE_OBJFILE (type) == NULL ? 0 : ANOFFSET (TYPE_OBJFILE (type)->section_offsets, SECT_OFF_TEXT (TYPE_OBJFILE (type))))); else - TYPE_FIELD_BITPOS (type, i) = 8 * boffset; + SET_FIELD_BITPOS (TYPE_FIELD (type, i), 8 * boffset); if (accflags & 0x8000) /* FIELD_UNRESOLVED_FLAG */ -Index: gdb-7.2.90.20110525/gdb/value.c +Index: gdb-7.4.50.20120602/gdb/value.c =================================================================== ---- gdb-7.2.90.20110525.orig/gdb/value.c 2011-05-25 17:05:21.000000000 +0200 -+++ gdb-7.2.90.20110525/gdb/value.c 2011-05-25 17:11:10.000000000 +0200 -@@ -2492,7 +2492,8 @@ value_static_field (struct type *type, i +--- gdb-7.4.50.20120602.orig/gdb/value.c 2012-06-02 19:11:55.000000000 +0200 ++++ gdb-7.4.50.20120602/gdb/value.c 2012-06-02 19:51:30.031252317 +0200 +@@ -2592,7 +2592,8 @@ value_static_field (struct type *type, i { case FIELD_LOC_KIND_PHYSADDR: retval = value_at_lazy (TYPE_FIELD_TYPE (type, fieldno), diff --git a/gdb-archer.patch b/gdb-archer.patch index 69a356b..13df606 100644 --- a/gdb-archer.patch +++ b/gdb-archer.patch @@ -2,136 +2,18 @@ http://sourceware.org/gdb/wiki/ProjectArcher http://sourceware.org/gdb/wiki/ArcherBranchManagement GIT snapshot: -commit 42fbc89fd3a797da9880ecbc467c32f282acf31f +commit d10213220191589814714d71ef0f5ba64fbc3b75 branch `archer' - the merge of branches: archer-jankratochvil-vla -archer-jankratochvil-watchpoint3 archer-tromey-python -archer-sergiodj-stap-fedora15jk -Index: gdb-7.2.90.20110703/bfd/elf-bfd.h -=================================================================== ---- gdb-7.2.90.20110703.orig/bfd/elf-bfd.h 2011-03-14 16:54:57.000000000 +0100 -+++ gdb-7.2.90.20110703/bfd/elf-bfd.h 2011-07-03 10:33:11.000000000 +0200 -@@ -1476,6 +1476,15 @@ enum - Tag_compatibility = 32 - }; - -+/* The following struct stores information about every SystemTap section -+ found in the object file. */ -+struct sdt_note -+{ -+ struct sdt_note *next; -+ bfd_size_type size; -+ bfd_byte data[1]; -+}; -+ - /* Some private data is stashed away for future use using the tdata pointer - in the bfd structure. */ - -@@ -1633,6 +1642,11 @@ struct elf_obj_tdata - bfd_size_type build_id_size; - bfd_byte *build_id; - -+ /* Linked-list containing information about every Systemtap section -+ found in the object file. Each section corresponds to one entry -+ in the list. */ -+ struct sdt_note *sdt_note_head; -+ - /* True if the bfd contains symbols that have the STT_GNU_IFUNC - symbol type. Used to set the osabi field in the ELF header - structure. */ -Index: gdb-7.2.90.20110703/bfd/elf.c -=================================================================== ---- gdb-7.2.90.20110703.orig/bfd/elf.c 2011-03-14 16:54:58.000000000 +0100 -+++ gdb-7.2.90.20110703/bfd/elf.c 2011-07-03 10:33:11.000000000 +0200 -@@ -8416,6 +8416,37 @@ elfobj_grok_gnu_note (bfd *abfd, Elf_Int - } - } - -+#define SDT_NOTE_TYPE 3 -+ -+static bfd_boolean -+elfobj_grok_stapsdt_note_1 (bfd *abfd, Elf_Internal_Note *note) -+{ -+ struct sdt_note *cur = -+ (struct sdt_note *) bfd_alloc (abfd, sizeof (struct sdt_note) -+ + note->descsz); -+ -+ cur->next = (struct sdt_note *) (elf_tdata (abfd))->sdt_note_head; -+ cur->size = (bfd_size_type) note->descsz; -+ memcpy (cur->data, note->descdata, note->descsz); -+ -+ elf_tdata (abfd)->sdt_note_head = cur; -+ -+ return TRUE; -+} -+ -+static bfd_boolean -+elfobj_grok_stapsdt_note (bfd *abfd, Elf_Internal_Note *note) -+{ -+ switch (note->type) -+ { -+ case SDT_NOTE_TYPE: -+ return elfobj_grok_stapsdt_note_1 (abfd, note); -+ -+ default: -+ return TRUE; -+ } -+} -+ - static bfd_boolean - elfcore_netbsd_get_lwpid (Elf_Internal_Note *note, int *lwpidp) - { -@@ -9189,6 +9220,12 @@ elf_parse_notes (bfd *abfd, char *buf, s - if (! elfobj_grok_gnu_note (abfd, &in)) - return FALSE; - } -+ else if (in.namesz == sizeof "stapsdt" -+ && strcmp (in.namedata, "stapsdt") == 0) -+ { -+ if (! elfobj_grok_stapsdt_note (abfd, &in)) -+ return FALSE; -+ } - break; - } - -Index: gdb-7.2.90.20110703/gdb/Makefile.in -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/Makefile.in 2011-03-30 08:55:39.000000000 +0200 -+++ gdb-7.2.90.20110703/gdb/Makefile.in 2011-07-03 10:33:11.000000000 +0200 -@@ -721,8 +721,8 @@ SFILES = ada-exp.y ada-lang.c ada-typepr - sentinel-frame.c \ - serial.c ser-base.c ser-unix.c \ - solib.c solib-target.c source.c \ -- stabsread.c stack.c std-regs.c symfile.c symfile-mem.c symmisc.c \ -- symtab.c \ -+ stabsread.c stack.c stap-probe.c std-regs.c \ -+ symfile.c symfile-mem.c symmisc.c symtab.c \ - target.c target-descriptions.c target-memory.c \ - thread.c top.c tracepoint.c \ - trad-frame.c \ -@@ -814,7 +814,7 @@ osdata.h procfs.h python/py-event.h pyth - python/python-internal.h python/python.h ravenscar-thread.h record.h \ - solib-darwin.h solib-ia64-hpux.h solib-spu.h windows-nat.h xcoffread.h \ - gnulib/extra/arg-nonnull.h gnulib/extra/c++defs.h gnulib/extra/warn-on-use.h \ --gnulib/stddef.in.h inline-frame.h -+gnulib/stddef.in.h inline-frame.h stap-probe.h - - # Header files that already have srcdir in them, or which are in objdir. - -@@ -899,7 +899,7 @@ COMMON_OBS = $(DEPFILES) $(CONFIG_OBS) $ - prologue-value.o memory-map.o memrange.o xml-support.o xml-syscall.o \ - target-descriptions.o target-memory.o xml-tdesc.o xml-builtin.o \ - inferior.o osdata.o gdb_usleep.o record.o gcore.o \ -- jit.o progspace.o -+ jit.o progspace.o stap-probe.o - - TSOBS = inflow.o - -@@ -1320,6 +1320,12 @@ stamp-h: $(srcdir)/config.in config.stat +diff --git a/gdb/Makefile.in b/gdb/Makefile.in +index bf6b0da..f0d46dd 100644 +--- a/gdb/Makefile.in ++++ b/gdb/Makefile.in +@@ -1304,6 +1304,12 @@ stamp-h: $(srcdir)/config.in config.status CONFIG_LINKS= \ $(SHELL) config.status @@ -144,26 +26,11 @@ Index: gdb-7.2.90.20110703/gdb/Makefile.in config.status: $(srcdir)/configure configure.tgt configure.host $(SHELL) config.status --recheck -Index: gdb-7.2.90.20110703/gdb/NEWS -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/NEWS 2011-03-31 16:32:48.000000000 +0200 -+++ gdb-7.2.90.20110703/gdb/NEWS 2011-07-03 10:33:11.000000000 +0200 -@@ -36,6 +36,10 @@ - Initial support for the OpenCL C language (http://www.khronos.org/opencl) - has been integrated into GDB. - -+* GDB now has support for SystemTap probes. You can set a -+ breakpoint using the new "probe:" linespec and inspect the probe -+ arguments using the new $_probe_arg family of convenience variables. -+ - * Python scripting - - ** The function gdb.Write now accepts an optional keyword 'stream'. -Index: gdb-7.2.90.20110703/gdb/ada-lang.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/ada-lang.c 2011-05-17 23:26:08.000000000 +0200 -+++ gdb-7.2.90.20110703/gdb/ada-lang.c 2011-07-03 10:33:11.000000000 +0200 -@@ -11421,6 +11421,7 @@ ada_operator_length (const struct expres +diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c +index af0fdb5..02c6e6f 100644 +--- a/gdb/ada-lang.c ++++ b/gdb/ada-lang.c +@@ -12055,6 +12055,7 @@ ada_operator_length (const struct expression *exp, int pc, int *oplenp, static int ada_operator_check (struct expression *exp, int pos, @@ -171,7 +38,7 @@ Index: gdb-7.2.90.20110703/gdb/ada-lang.c int (*objfile_func) (struct objfile *objfile, void *data), void *data) { -@@ -11435,12 +11436,15 @@ ada_operator_check (struct expression *e +@@ -12069,12 +12070,15 @@ ada_operator_check (struct expression *exp, int pos, break; default: @@ -189,258 +56,13 @@ Index: gdb-7.2.90.20110703/gdb/ada-lang.c && (*objfile_func) (TYPE_OBJFILE (type), data)) return 1; -Index: gdb-7.2.90.20110703/gdb/amd64-linux-nat.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/amd64-linux-nat.c 2011-01-07 20:36:15.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/amd64-linux-nat.c 2011-07-03 10:33:11.000000000 +0200 -@@ -265,18 +265,11 @@ amd64_linux_store_inferior_registers (st - - /* Support for debug registers. */ +diff --git a/gdb/block.c b/gdb/block.c +index 1503730..a522bca 100644 +--- a/gdb/block.c ++++ b/gdb/block.c +@@ -687,3 +687,21 @@ block_iter_match_next (const char *name, --static unsigned long amd64_linux_dr[DR_CONTROL + 1]; -- - static unsigned long --amd64_linux_dr_get (ptid_t ptid, int regnum) -+amd64_linux_dr_get (int tid, int regnum) - { -- int tid; - unsigned long value; - -- tid = TIDGET (ptid); -- if (tid == 0) -- tid = PIDGET (ptid); -- - /* FIXME: kettenis/2001-03-27: Calling perror_with_name if the - ptrace call fails breaks debugging remote targets. The correct - way to fix this is to add the hardware breakpoint and watchpoint -@@ -298,14 +291,8 @@ amd64_linux_dr_get (ptid_t ptid, int reg - /* Set debug register REGNUM to VALUE in only the one LWP of PTID. */ - - static void --amd64_linux_dr_set (ptid_t ptid, int regnum, unsigned long value) -+amd64_linux_dr_set (int tid, int regnum, unsigned long value) - { -- int tid; -- -- tid = TIDGET (ptid); -- if (tid == 0) -- tid = PIDGET (ptid); -- - errno = 0; - ptrace (PTRACE_POKEUSER, tid, - offsetof (struct user, u_debugreg[regnum]), value); -@@ -313,35 +300,96 @@ amd64_linux_dr_set (ptid_t ptid, int reg - perror_with_name (_("Couldn't write debug register")); - } - --/* Set DR_CONTROL to ADDR in all LWPs of LWP_LIST. */ -+/* Helper for amd64_linux_dr_set_control. */ -+ -+static void -+amd64_linux_dr_set_control_callback (int tid, void *control_voidp) -+{ -+ unsigned long control = *(unsigned long *) control_voidp; -+ -+ amd64_linux_dr_set (tid, DR_CONTROL, control); -+} -+ -+static void amd64_linux_dr_set_addr (int regnum, CORE_ADDR addr); -+ -+/* Set DR_CONTROL to ADDR in all LWPs of CURRENT_INFERIOR. */ - - static void - amd64_linux_dr_set_control (unsigned long control) - { -- struct lwp_info *lp; -- ptid_t ptid; -+ int inferior_pid = ptid_get_pid (inferior_ptid); -+ struct inferior *inf = current_inferior (); -+ -+ /* Are we detaching breakpoints from a fork-ed child? -+ See linux_nat_iterate_watchpoint_lwps for the fork-ed child description. -+ The i386 counterpart is i386_linux_dr_set_control. */ -+ if (inf->pid != inferior_pid) -+ { -+ struct i386_dr_mirror *dr_mirror = i386_dr_mirror_get (); -+ int i; -+ -+ /* There were two changes in Linux kernel 2.6.33 by the commit: -+ 72f674d203cd230426437cdcf7dd6f681dad8b0d -+ -+ (1) After fork/vfork/clone the new task no longer inherits the debug -+ registers. It has them zeroed instead. Either case is OK for GDB as -+ GDB already registers a fix up by linux_nat_set_new_thread. -+ -+ (2) If you enable a breakpoint by the CONTROL bits you have already -+ written its ADDRESS. Otherwise Linux kernel will report EINVAL. -+ For this case the workaround here ensures that during resetting -+ (detaching) watchpoints for a fork-ed child we can set CONTROL -+ arbitrarily as the addresses get pre-set here just to be sure. -+ -+ The second issue is hopefully going to be fixed in Linux kernel: -+ https://bugzilla.redhat.com/show_bug.cgi?id=660204 */ -+ -+ if (!dr_mirror->addr_preset) -+ { -+ dr_mirror->addr_preset = 1; -+ -+ for (i = 0; i < DR_LASTADDR - DR_FIRSTADDR; i++) -+ amd64_linux_dr_set_addr (i, dr_mirror->addr[i]); -+ } -+ } -+ -+ linux_nat_iterate_watchpoint_lwps (amd64_linux_dr_set_control_callback, -+ &control); -+} -+ -+/* Helper for amd64_linux_dr_set_addr. */ -+ -+struct amd64_linux_dr_set_addr_data -+ { -+ int regnum; -+ CORE_ADDR addr; -+ }; -+ -+static void -+amd64_linux_dr_set_addr_callback (int tid, void *datap_voidp) -+{ -+ const struct amd64_linux_dr_set_addr_data *datap = datap_voidp; - -- amd64_linux_dr[DR_CONTROL] = control; -- ALL_LWPS (lp, ptid) -- amd64_linux_dr_set (ptid, DR_CONTROL, control); -+ amd64_linux_dr_set (tid, DR_FIRSTADDR + datap->regnum, datap->addr); - } - --/* Set address REGNUM (zero based) to ADDR in all LWPs of LWP_LIST. */ -+/* Set address REGNUM (zero based) to ADDR in all LWPs of CURRENT_INFERIOR. -+ */ - - static void - amd64_linux_dr_set_addr (int regnum, CORE_ADDR addr) - { -- struct lwp_info *lp; -- ptid_t ptid; -+ struct amd64_linux_dr_set_addr_data data; - - gdb_assert (regnum >= 0 && regnum <= DR_LASTADDR - DR_FIRSTADDR); - -- amd64_linux_dr[DR_FIRSTADDR + regnum] = addr; -- ALL_LWPS (lp, ptid) -- amd64_linux_dr_set (ptid, DR_FIRSTADDR + regnum, addr); -+ data.regnum = regnum; -+ data.addr = addr; -+ linux_nat_iterate_watchpoint_lwps (amd64_linux_dr_set_addr_callback, &data); - } - --/* Set address REGNUM (zero based) to zero in all LWPs of LWP_LIST. */ -+/* Set address REGNUM (zero based) to zero in all LWPs of CURRENT_INFERIOR. -+ */ - - static void - amd64_linux_dr_reset_addr (int regnum) -@@ -354,37 +402,54 @@ amd64_linux_dr_reset_addr (int regnum) - static unsigned long - amd64_linux_dr_get_status (void) - { -- return amd64_linux_dr_get (inferior_ptid, DR_STATUS); -+ int tid; -+ -+ tid = TIDGET (inferior_ptid); -+ if (tid == 0) -+ tid = PIDGET (inferior_ptid); -+ -+ return amd64_linux_dr_get (tid, DR_STATUS); - } - --/* Unset MASK bits in DR_STATUS in all LWPs of LWP_LIST. */ -+/* Helper for amd64_linux_dr_unset_status. */ - - static void --amd64_linux_dr_unset_status (unsigned long mask) -+amd64_linux_dr_unset_status_callback (int tid, void *mask_voidp) - { -- struct lwp_info *lp; -- ptid_t ptid; -- -- ALL_LWPS (lp, ptid) -- { -- unsigned long value; -+ unsigned long mask = *(unsigned long *) mask_voidp; -+ unsigned long value; - -- value = amd64_linux_dr_get (ptid, DR_STATUS); -- value &= ~mask; -- amd64_linux_dr_set (ptid, DR_STATUS, value); -- } -+ value = amd64_linux_dr_get (tid, DR_STATUS); -+ value &= ~mask; -+ amd64_linux_dr_set (tid, DR_STATUS, value); - } - -+/* Unset MASK bits in DR_STATUS in all LWPs of CURRENT_INFERIOR. */ -+ -+static void -+amd64_linux_dr_unset_status (unsigned long mask) -+{ -+ linux_nat_iterate_watchpoint_lwps (amd64_linux_dr_unset_status_callback, -+ &mask); -+} - - static void - amd64_linux_new_thread (ptid_t ptid) - { -- int i; -+ struct i386_dr_mirror *dr_mirror = i386_dr_mirror_get (); -+ int i, tid; -+ -+ /* Verify DR_MIRROR is valid. */ -+ gdb_assert (PIDGET (ptid) == PIDGET (inferior_ptid)); -+ -+ tid = TIDGET (ptid); -+ if (tid == 0) -+ tid = PIDGET (ptid); - -- for (i = DR_FIRSTADDR; i <= DR_LASTADDR; i++) -- amd64_linux_dr_set (ptid, i, amd64_linux_dr[i]); -+ for (i = 0; i < DR_LASTADDR - DR_FIRSTADDR; i++) -+ amd64_linux_dr_set (tid, DR_FIRSTADDR + i, dr_mirror->addr[i]); - -- amd64_linux_dr_set (ptid, DR_CONTROL, amd64_linux_dr[DR_CONTROL]); -+ amd64_linux_dr_set (tid, DR_CONTROL, dr_mirror->control); - } - - -Index: gdb-7.2.90.20110703/gdb/ax-gdb.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/ax-gdb.c 2011-02-24 08:39:47.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/ax-gdb.c 2011-07-03 10:33:11.000000000 +0200 -@@ -2001,7 +2001,8 @@ gen_expr (struct expression *exp, union - - case OP_INTERNALVAR: - { -- const char *name = internalvar_name ((*pc)[1].internalvar); -+ struct internalvar *var = (*pc)[1].internalvar; -+ const char *name = internalvar_name (var); - struct trace_state_variable *tsv; - - (*pc) += 3; -@@ -2015,7 +2016,7 @@ gen_expr (struct expression *exp, union - value->kind = axs_rvalue; - value->type = builtin_type (exp->gdbarch)->builtin_long_long; - } -- else -+ else if (! compile_internalvar_to_ax (var, ax, value)) - error (_("$%s is not a trace state variable; GDB agent " - "expressions cannot use convenience variables."), name); - } -Index: gdb-7.2.90.20110703/gdb/block.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/block.c 2011-01-01 16:32:57.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/block.c 2011-07-03 10:33:11.000000000 +0200 -@@ -322,3 +322,21 @@ allocate_block (struct obstack *obstack) - - return bl; + return block_iter_match_step (iterator, name, compare, 0); } + +/* Return OBJFILE in which BLOCK is located or NULL if we cannot find it for @@ -460,400 +82,22 @@ Index: gdb-7.2.90.20110703/gdb/block.c + + return SYMBOL_SYMTAB (func)->objfile; +} -Index: gdb-7.2.90.20110703/gdb/block.h -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/block.h 2011-01-01 16:32:57.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/block.h 2011-07-03 10:33:11.000000000 +0200 -@@ -167,4 +167,6 @@ extern const struct block *block_global_ - - extern struct block *allocate_block (struct obstack *obstack); +diff --git a/gdb/block.h b/gdb/block.h +index 99c4788..6ceb704 100644 +--- a/gdb/block.h ++++ b/gdb/block.h +@@ -279,4 +279,6 @@ extern struct symbol *block_iter_match_next (const char *name, + (sym); \ + (sym) = block_iterator_next (&(iter))) +extern struct objfile *block_objfile (const struct block *block); + #endif /* BLOCK_H */ -Index: gdb-7.2.90.20110703/gdb/breakpoint.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/breakpoint.c 2011-07-02 21:33:09.000000000 +0200 -+++ gdb-7.2.90.20110703/gdb/breakpoint.c 2011-07-03 10:35:09.000000000 +0200 -@@ -63,6 +63,8 @@ - #include "jit.h" - #include "xml-syscall.h" - #include "parser-defs.h" -+#include "gdb_regex.h" -+#include "stap-probe.h" - #include "cli/cli-utils.h" - - /* readline include files */ -@@ -107,6 +109,9 @@ static void break_command_1 (char *, int - - static void mention (struct breakpoint *); - -+static struct bp_location *add_location_to_breakpoint (struct breakpoint *b, -+ const struct symtab_and_line *sal); -+ - /* This function is used in gdbtk sources and thus can not be made - static. */ - struct breakpoint *set_raw_breakpoint (struct gdbarch *gdbarch, -@@ -1249,6 +1254,9 @@ update_watchpoint (struct breakpoint *b, - if (!watchpoint_in_thread_scope (b)) - return; - -+ if (b->pspace != current_program_space) -+ return; -+ - if (b->disposition == disp_del_at_next_stop) - return; - -@@ -1520,6 +1528,40 @@ should_be_inserted (struct bp_location * - return 1; - } - -+/* See the comment in breakpoint.h. */ -+ -+void -+modify_semaphore (struct bp_location *loc, int set) -+{ -+ struct gdbarch *arch = loc->gdbarch; -+ gdb_byte bytes[sizeof (LONGEST)]; -+ /* The ABI specifies "unsigned short". */ -+ struct type *type = builtin_type (arch)->builtin_unsigned_short; -+ CORE_ADDR address = loc->semaphore; -+ ULONGEST value; -+ -+ if (address == 0) -+ return; -+ -+ /* Swallow errors. */ -+ if (target_read_memory (address, bytes, TYPE_LENGTH (type)) != 0) -+ return; -+ -+ value = extract_unsigned_integer (bytes, TYPE_LENGTH (type), -+ gdbarch_byte_order (arch)); -+ /* Note that we explicitly don't worry about overflow or -+ underflow. */ -+ if (set) -+ ++value; -+ else -+ --value; -+ -+ store_unsigned_integer (bytes, TYPE_LENGTH (type), -+ gdbarch_byte_order (arch), value); -+ -+ target_write_memory (address, bytes, TYPE_LENGTH (type)); -+} -+ - /* Insert a low-level "breakpoint" of some type. BL is the breakpoint - location. Any error messages are printed to TMP_ERROR_STREAM; and - DISABLED_BREAKS, and HW_BREAKPOINT_ERROR are used to report problems. -@@ -1616,6 +1658,8 @@ insert_bp_location (struct bp_location * - else - val = target_insert_breakpoint (bl->gdbarch, - &bl->target_info); -+ -+ modify_semaphore (bl, 1); - } - else - { -@@ -1870,6 +1914,7 @@ insert_breakpoint_locations (void) - int val = 0; - int disabled_breaks = 0; - int hw_breakpoint_error = 0; -+ struct program_space *saved_current_program_space = current_program_space; - - struct ui_file *tmp_error_stream = mem_fileopen (); - struct cleanup *cleanups = make_cleanup_ui_file_delete (tmp_error_stream); -@@ -1897,9 +1942,13 @@ insert_breakpoint_locations (void) - /* For targets that support global breakpoints, there's no need - to select an inferior to insert breakpoint to. In fact, even - if we aren't attached to any process yet, we should still -- insert breakpoints. */ -+ insert breakpoints. -+ -+ Also inserting breakpoints into inappropriate inferior must be -+ prevented. */ - if (!gdbarch_has_global_breakpoints (target_gdbarch) -- && ptid_equal (inferior_ptid, null_ptid)) -+ && (ptid_equal (inferior_ptid, null_ptid) -+ || bl->pspace != saved_current_program_space)) - continue; - - val = insert_bp_location (bl, tmp_error_stream, &disabled_breaks, -@@ -1923,13 +1972,19 @@ insert_breakpoint_locations (void) - - if (bpt->disposition == disp_del_at_next_stop) - continue; -- -+ - for (loc = bpt->loc; loc; loc = loc->next) -- if (!loc->inserted && should_be_inserted (loc)) -- { -- some_failed = 1; -- break; -- } -+ { -+ /* Verify the first loop above really tried to insert this LOC. */ -+ if (!loc->inserted && should_be_inserted (loc) -+ && (gdbarch_has_global_breakpoints (target_gdbarch) -+ || (!ptid_equal (inferior_ptid, null_ptid) -+ && loc->pspace == saved_current_program_space))) -+ { -+ some_failed = 1; -+ break; -+ } -+ } - if (some_failed) - { - for (loc = bpt->loc; loc; loc = loc->next) -@@ -2111,15 +2166,24 @@ struct breakpoint_objfile_data - /* Minimal symbol(s) for "longjmp", "siglongjmp", etc. (if any). */ - struct minimal_symbol *longjmp_msym[NUM_LONGJMP_NAMES]; - -+ /* SystemTap probe point for longjmp (if any). */ -+ const struct stap_probe *longjmp_probe; -+ - /* Minimal symbol for "std::terminate()" (if any). */ - struct minimal_symbol *terminate_msym; - - /* Minimal symbol for "_Unwind_DebugHook" (if any). */ - struct minimal_symbol *exception_msym; -+ -+ /* SystemTap probe point for unwinding (if any). */ -+ const struct stap_probe *exception_probe; - }; - - static const struct objfile_data *breakpoint_objfile_key; - -+/* SystemTap probe not found sentinel. */ -+static const struct stap_probe probe_not_found; -+ - /* Minimal symbol not found sentinel. */ - static struct minimal_symbol msym_not_found; - -@@ -2227,6 +2291,29 @@ create_longjmp_master_breakpoint (void) - - bp_objfile_data = get_breakpoint_objfile_data (objfile); - -+ if (bp_objfile_data->longjmp_probe != &probe_not_found) -+ { -+ if (bp_objfile_data->longjmp_probe == NULL) -+ bp_objfile_data->longjmp_probe -+ = find_probe_in_objfile (objfile, "libc", "longjmp"); -+ -+ if (bp_objfile_data->longjmp_probe) -+ { -+ struct breakpoint *b; -+ struct gdbarch *gdbarch = get_objfile_arch (objfile); -+ -+ b = create_internal_breakpoint (gdbarch, -+ bp_objfile_data->longjmp_probe->address, -+ bp_longjmp_master); -+ b->addr_string = xstrdup ("probe:libc:longjmp"); -+ b->enable_state = bp_disabled; -+ -+ continue; -+ } -+ else -+ bp_objfile_data->longjmp_probe = &probe_not_found; -+ } -+ - for (i = 0; i < NUM_LONGJMP_NAMES; i++) - { - struct breakpoint *b; -@@ -2335,6 +2422,31 @@ create_exception_master_breakpoint (void - - bp_objfile_data = get_breakpoint_objfile_data (objfile); - -+ /* We prefer the SystemTap probe point if it exists. */ -+ if (bp_objfile_data->exception_probe != &probe_not_found) -+ { -+ if (bp_objfile_data->exception_probe == NULL) -+ bp_objfile_data->exception_probe -+ = find_probe_in_objfile (objfile, "libgcc", "unwind"); -+ -+ if (bp_objfile_data->exception_probe) -+ { -+ struct breakpoint *b; -+ struct gdbarch *gdbarch = get_objfile_arch (objfile); -+ -+ b = create_internal_breakpoint (gdbarch, -+ bp_objfile_data->exception_probe->address, -+ bp_exception_master); -+ b->addr_string = xstrdup ("probe:libgcc:unwind"); -+ b->enable_state = bp_disabled; -+ continue; -+ } -+ else -+ bp_objfile_data->exception_probe = &probe_not_found; -+ } -+ -+ /* Otherwise, try the hook function. */ -+ - if (msym_not_found_p (bp_objfile_data->exception_msym)) - continue; - -@@ -2553,6 +2665,8 @@ remove_breakpoint_1 (struct bp_location - val = target_remove_hw_breakpoint (bl->gdbarch, &bl->target_info); - else - val = target_remove_breakpoint (bl->gdbarch, &bl->target_info); -+ -+ modify_semaphore (bl, 0); - } - else - { -@@ -5902,6 +6016,7 @@ set_raw_breakpoint (struct gdbarch *gdba - b->loc->requested_address = sal.pc; - b->loc->address = adjusted_address; - b->loc->pspace = sal.pspace; -+ b->loc->semaphore = sal.semaphore; - - /* Store the program space that was used to set the breakpoint, for - breakpoint resetting. */ -@@ -7056,6 +7171,7 @@ clone_momentary_breakpoint (struct break - copy->loc->address = orig->loc->address; - copy->loc->section = orig->loc->section; - copy->loc->pspace = orig->loc->pspace; -+ copy->loc->semaphore = orig->loc->semaphore; - - if (orig->source_file == NULL) - copy->source_file = NULL; -@@ -7279,6 +7395,7 @@ add_location_to_breakpoint (struct break - loc->address = adjust_breakpoint_address (loc->gdbarch, - loc->requested_address, b->type); - loc->pspace = sal->pspace; -+ loc->semaphore = sal->semaphore; - gdb_assert (loc->pspace != NULL); - loc->section = sal->section; - -@@ -7628,6 +7745,16 @@ create_breakpoints_sal (struct gdbarch * - { - int i; - -+ if (canonical->pre_expanded) -+ { -+ create_breakpoint_sal (gdbarch, sals, canonical->canonical[0], -+ cond_string, type, disposition, -+ thread, task, ignore_count, ops, -+ from_tty, enabled, internal, -+ canonical->special_display); -+ return; -+ } -+ - for (i = 0; i < sals.nelts; ++i) - { - struct symtabs_and_lines expanded = -@@ -8148,7 +8275,7 @@ create_breakpoint (struct gdbarch *gdbar - mention (b); - } - -- if (sals.nelts > 1) -+ if (sals.nelts > 1 && !canonical.pre_expanded) - { - warning (_("Multiple breakpoints were set.\nUse the " - "\"delete\" command to delete unwanted breakpoints.")); -@@ -9020,6 +9147,7 @@ watch_command_1 (char *arg, int accessfl - b = set_raw_breakpoint_without_location (NULL, bp_type); - set_breakpoint_number (internal, b); - b->thread = thread; -+ b->pspace = current_program_space; - b->disposition = disp_donttouch; - b->exp = exp; - b->exp_valid_block = exp_valid_block; -@@ -10182,6 +10310,9 @@ update_global_location_list (int should_ - int keep_in_target = 0; - int removed = 0; - -+ if (old_loc->pspace != current_program_space) -+ continue; -+ - /* Skip LOCP entries which will definitely never be needed. - Stop either at or being the one matching OLD_LOC. */ - while (locp < bp_location + bp_location_count -@@ -10946,12 +11077,14 @@ update_breakpoint_locations (struct brea - On return, FOUND will be 1 if any SaL was found, zero otherwise. */ - - static struct symtabs_and_lines --addr_string_to_sals (struct breakpoint *b, char *addr_string, int *found) -+addr_string_to_sals (struct breakpoint *b, char *addr_string, int *found, -+ int *pre_expanded) - { - char *s; - int marker_spec; - struct symtabs_and_lines sals = {0}; - struct gdb_exception e; -+ int my_pre_expanded = 0; - - s = addr_string; - marker_spec = b->type == bp_static_tracepoint && is_marker_spec (s); -@@ -10970,7 +11103,27 @@ addr_string_to_sals (struct breakpoint * - error (_("marker %s not found"), b->static_trace_marker_id); - } - else -- sals = decode_line_1 (&s, 1, (struct symtab *) NULL, 0, NULL); -+ { -+ struct linespec_result canonical; -+ -+ init_linespec_result (&canonical); -+ sals = decode_line_1 (&s, 1, (struct symtab *) NULL, 0, -+ &canonical); -+ -+ /* We don't need the contents. */ -+ if (canonical.canonical) -+ { -+ int i; -+ -+ for (i = 0; i < sals.nelts; ++i) -+ xfree (canonical.canonical[i]); -+ xfree (canonical.canonical); -+ } -+ -+ my_pre_expanded = canonical.pre_expanded; -+ if (pre_expanded) -+ *pre_expanded = my_pre_expanded; -+ } - } - if (e.reason < 0) - { -@@ -11003,7 +11156,7 @@ addr_string_to_sals (struct breakpoint * - - if (e.reason == 0 || e.error != NOT_FOUND_ERROR) - { -- gdb_assert (sals.nelts == 1); -+ gdb_assert (my_pre_expanded || sals.nelts == 1); - - resolve_sal_pc (&sals.sals[0]); - if (b->condition_not_parsed && s && s[0]) -@@ -11044,22 +11197,27 @@ re_set_breakpoint (struct breakpoint *b) - struct symtabs_and_lines expanded = {0}; - struct symtabs_and_lines expanded_end = {0}; - struct cleanup *cleanups = make_cleanup (null_cleanup, NULL); -+ int pre_expanded = 0; - - input_radix = b->input_radix; - save_current_space_and_thread (); - switch_to_program_space_and_thread (b->pspace); - set_language (b->language); - -- sals = addr_string_to_sals (b, b->addr_string, &found); -+ sals = addr_string_to_sals (b, b->addr_string, &found, &pre_expanded); - if (found) - { - make_cleanup (xfree, sals.sals); -- expanded = expand_line_sal_maybe (sals.sals[0]); -+ if (pre_expanded) -+ expanded = sals; -+ else -+ expanded = expand_line_sal_maybe (sals.sals[0]); - } - - if (b->addr_string_range_end) - { -- sals_end = addr_string_to_sals (b, b->addr_string_range_end, &found); -+ sals_end = addr_string_to_sals (b, b->addr_string_range_end, &found, -+ NULL); - if (found) - { - make_cleanup (xfree, sals_end.sals); -@@ -12496,6 +12654,24 @@ all_tracepoints (void) +diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c +index a867b10..e41c692 100644 +--- a/gdb/breakpoint.c ++++ b/gdb/breakpoint.c +@@ -15154,6 +15154,24 @@ all_tracepoints (void) return tp_vec; } @@ -878,7 +122,7 @@ Index: gdb-7.2.90.20110703/gdb/breakpoint.c /* This help string is used for the break, hbreak, tbreak and thbreak commands. It is defined as a macro to prevent duplication. -@@ -13131,4 +13307,7 @@ range (including START-LOCATION and END- +@@ -16097,4 +16115,7 @@ Show the channel to use for dynamic printf"), NULL, automatic_hardware_breakpoints = 1; observer_attach_about_to_proceed (breakpoint_about_to_proceed); @@ -886,39 +130,11 @@ Index: gdb-7.2.90.20110703/gdb/breakpoint.c + observer_attach_mark_used (breakpoint_types_mark_used); +#endif } -Index: gdb-7.2.90.20110703/gdb/breakpoint.h -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/breakpoint.h 2011-05-17 23:25:56.000000000 +0200 -+++ gdb-7.2.90.20110703/gdb/breakpoint.h 2011-07-03 10:33:11.000000000 +0200 -@@ -363,6 +363,11 @@ struct bp_location - processor's architectual constraints. */ - CORE_ADDR requested_address; - -+ /* If the location comes from a SystemTap probe point, and the probe -+ has an associated semaphore variable, then this is the address of -+ the semaphore. Otherwise, this is zero. */ -+ CORE_ADDR semaphore; -+ - char *function_name; - - /* Details of the placed breakpoint, when inserted. */ -@@ -1237,4 +1242,11 @@ extern struct breakpoint *iterate_over_b - - extern int user_breakpoint_p (struct breakpoint *); - -+/* Set or clear a SystemTap semaphore. LOC is the location which may -+ hold a semaphore. SET is non-zero if the semaphore should be set, -+ or zero if the semaphore should be cleared. Semaphores act as -+ reference counters, so calls to this function must be paired. */ -+ -+extern void modify_semaphore (struct bp_location *location, int set); -+ - #endif /* !defined (BREAKPOINT_H) */ -Index: gdb-7.2.90.20110703/gdb/c-typeprint.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/c-typeprint.c 2011-03-22 18:35:22.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/c-typeprint.c 2011-07-03 10:33:11.000000000 +0200 -@@ -625,9 +625,14 @@ c_type_print_varspec_suffix (struct type +diff --git a/gdb/c-typeprint.c b/gdb/c-typeprint.c +index a5892b5..2944c2d 100644 +--- a/gdb/c-typeprint.c ++++ b/gdb/c-typeprint.c +@@ -624,9 +624,14 @@ c_type_print_varspec_suffix (struct type *type, fprintf_filtered (stream, ")"); fprintf_filtered (stream, "["); @@ -936,76 +152,11 @@ Index: gdb-7.2.90.20110703/gdb/c-typeprint.c fprintf_filtered (stream, "]"); c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, -Index: gdb-7.2.90.20110703/gdb/cli/cli-utils.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/cli/cli-utils.c 2011-03-16 22:12:12.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/cli/cli-utils.c 2011-07-03 10:33:11.000000000 +0200 -@@ -245,3 +245,32 @@ remove_trailing_whitespace (const char * - - return s; - } -+ -+/* See documentation in cli-utils.h. */ -+ -+char * -+extract_arg (char **arg) -+{ -+ char *result, *copy; -+ -+ if (!*arg) -+ return NULL; -+ -+ /* Find the start of the argument. */ -+ *arg = skip_spaces (*arg); -+ if (! **arg) -+ return NULL; -+ result = *arg; -+ -+ /* Find the end of the argument. */ -+ *arg = skip_to_space (*arg + 1); -+ -+ if (result == *arg) -+ return NULL; -+ -+ copy = xmalloc (*arg - result + 1); -+ memcpy (copy, result, *arg - result); -+ copy[*arg - result] = '\0'; -+ -+ return copy; -+} -Index: gdb-7.2.90.20110703/gdb/cli/cli-utils.h -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/cli/cli-utils.h 2011-03-16 22:12:12.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/cli/cli-utils.h 2011-07-03 10:33:11.000000000 +0200 -@@ -103,4 +103,11 @@ extern char *skip_to_space (char *inp); - START. */ - - extern char *remove_trailing_whitespace (const char *start, char *s); -+ -+/* A helper function to extract an argument from *ARG. An argument is -+ delimited by whitespace. The return value is either NULL if no -+ argument was found, or an xmalloc'd string. */ -+ -+extern char *extract_arg (char **arg); -+ - #endif /* CLI_UTILS_H */ -Index: gdb-7.2.90.20110703/gdb/coffread.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/coffread.c 2011-03-17 14:19:23.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/coffread.c 2011-07-03 10:33:11.000000000 +0200 -@@ -2193,6 +2193,7 @@ static const struct sym_fns coff_sym_fns - - default_symfile_relocate, /* sym_relocate: Relocate a debug - section. */ -+ NULL, /* sym_probe_fns */ - &psym_functions - }; - -Index: gdb-7.2.90.20110703/gdb/data-directory/Makefile.in -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/data-directory/Makefile.in 2011-02-04 19:34:41.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/data-directory/Makefile.in 2011-07-03 10:33:11.000000000 +0200 -@@ -52,11 +52,23 @@ SYSCALLS_FILES = \ +diff --git a/gdb/data-directory/Makefile.in b/gdb/data-directory/Makefile.in +index 87c6dd4..1c26652 100644 +--- a/gdb/data-directory/Makefile.in ++++ b/gdb/data-directory/Makefile.in +@@ -52,14 +52,25 @@ SYSCALLS_FILES = \ PYTHON_DIR = python PYTHON_INSTALL_DIR = $(DESTDIR)$(GDB_DATADIR)/$(PYTHON_DIR) PYTHON_FILES = \ @@ -1014,49 +165,32 @@ Index: gdb-7.2.90.20110703/gdb/data-directory/Makefile.in gdb/__init__.py \ - gdb/types.py \ - gdb/printing.py \ +- gdb/prompt.py \ + gdb/backtrace.py \ gdb/command/__init__.py \ -- gdb/command/pretty_printers.py -+ gdb/command/alias.py \ + gdb/command/backtrace.py \ + gdb/command/ignore_errors.py \ + gdb/command/pahole.py \ -+ gdb/command/pretty_printers.py \ + gdb/command/pretty_printers.py \ + gdb/command/prompt.py \ +- gdb/command/explore.py ++ gdb/command/explore.py \ + gdb/command/require.py \ + gdb/command/upto.py \ + gdb/function/__init__.py \ + gdb/function/caller_is.py \ + gdb/function/in_scope.py \ + gdb/printing.py \ ++ gdb/prompt.py \ + gdb/types.py FLAGS_TO_PASS = \ "prefix=$(prefix)" \ -Index: gdb-7.2.90.20110703/gdb/dbxread.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/dbxread.c 2011-03-23 19:23:54.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/dbxread.c 2011-07-03 10:33:11.000000000 +0200 -@@ -1,6 +1,6 @@ - /* Read dbx symbol tables and convert to internal format, for GDB. - Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, -- 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2008, 2009, 2010. -+ 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2008, 2009, 2010, 2011. - Free Software Foundation, Inc. - - This file is part of GDB. -@@ -3587,6 +3587,7 @@ static const struct sym_fns aout_sym_fns - default_symfile_segments, /* Get segment information from a file. */ - NULL, - default_symfile_relocate, /* Relocate a debug section. */ -+ NULL, /* sym_probe_fns */ - &psym_functions - }; - -Index: gdb-7.2.90.20110703/gdb/defs.h -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/defs.h 2011-03-31 16:32:48.000000000 +0200 -+++ gdb-7.2.90.20110703/gdb/defs.h 2011-07-03 10:33:11.000000000 +0200 -@@ -398,6 +398,8 @@ extern struct cleanup *make_cleanup_rest +diff --git a/gdb/defs.h b/gdb/defs.h +index 03092aa..6d73386 100644 +--- a/gdb/defs.h ++++ b/gdb/defs.h +@@ -353,6 +353,8 @@ extern struct cleanup *make_cleanup_restore_page_info (void); extern struct cleanup * set_batch_flag_and_make_cleanup_restore_page_info (void); @@ -1065,11 +199,11 @@ Index: gdb-7.2.90.20110703/gdb/defs.h extern char *gdb_realpath (const char *); extern char *xfullpath (const char *); -Index: gdb-7.2.90.20110703/gdb/doc/gdb.texinfo -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/doc/gdb.texinfo 2011-07-02 21:59:29.000000000 +0200 -+++ gdb-7.2.90.20110703/gdb/doc/gdb.texinfo 2011-07-03 10:33:11.000000000 +0200 -@@ -1177,6 +1177,16 @@ for remote debugging. +diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo +index 014cfd8..d0a8c51 100644 +--- a/gdb/doc/gdb.texinfo ++++ b/gdb/doc/gdb.texinfo +@@ -1191,6 +1191,16 @@ for remote debugging. Run using @var{device} for your program's standard input and output. @c FIXME: kingdon thinks there is more to -tty. Investigate. @@ -1086,124 +220,7 @@ Index: gdb-7.2.90.20110703/gdb/doc/gdb.texinfo @c resolve the situation of these eventually @item -tui @cindex @code{--tui} -@@ -3286,6 +3296,7 @@ all breakpoints in that range are operat - * Conditions:: Break conditions - * Break Commands:: Breakpoint command lists - * Save Breakpoints:: How to save breakpoints in a file -+* Static Probe Points:: Listing static probe points - * Error in Breakpoints:: ``Cannot insert breakpoints'' - * Breakpoint-related Warnings:: ``Breakpoint address adjusted...'' - @end menu -@@ -4499,6 +4510,50 @@ and remove the breakpoint definitions yo - that can no longer be recreated. - @end table - -+@node Static Probe Points -+@subsection Static Probe Points -+ -+@cindex SystemTap static probe point -+@cindex sdt-probe -+The @sc{gnu}/Linux tool @code{SystemTap} provides a way for -+applications to embed static probes, using @file{sys/sdt.h}. @value{GDBN} -+can list the available probes, and you can put breakpoints at the -+probe points (@pxref{Specify Location}). -+ -+You can examine the available @code{SystemTap} static probes using -+@code{info probes}: -+ -+@table @code -+@kindex info probes -+@item info probes [@var{provider} [@var{name} [@var{objfile}]]] -+List the available @code{SystemTap} static probes. -+ -+If given, @var{provider} is a regular expression used to select which -+providers to list. If omitted, all providers are listed. -+ -+If given, @var{name} is a regular expression used to select which -+probes to list. If omitted, all probes are listed. -+ -+If given, @var{objfile} is a regular expression used to select which -+object files (executable or shared libraries) to examine. If not -+given, all object files are considered. -+@end table -+ -+@vindex $_probe_arg@r{, convenience variable} -+A probe may specify up to ten arguments. These are available at the -+point at which the probe is defined---that is, when the current PC is -+at the probe's location. The arguments are available using the -+convenience variables (@pxref{Convenience Vars}) -+@code{$_probe_arg0}@dots{}@code{$_probe_arg9}. Each probe argument is -+an integer of the appropriate size; types are not preserved. The -+convenience variable @code{$_probe_argc} holds the number of arguments -+at the current probe point. -+ -+These variables are always available, but attempts to access them at -+any location other than a probe point will cause @value{GDBN} to give -+an error. -+ -+ - @c @ifclear BARETARGET - @node Error in Breakpoints - @subsection ``Cannot insert breakpoints'' -@@ -6414,6 +6469,29 @@ specify the function unambiguously, e.g. - functions with identical names in different source files. - @end table - -+@cindex SystemTap static probe point -+@item probe:@r{[}@var{objfile}:@r{]}@r{[}@var{provider}:@r{]}@var{name} -+The @sc{gnu}/Linux tool @code{SystemTap} provides a way for -+applications to embed static probes. This form of linespec specifies -+the location of such a static probe. See -+@uref{http://sourceware.org/systemtap/wiki/AddingUserSpaceProbingToApps} -+for more information on static probes. -+ -+If @var{objfile} is given, only probes coming from that shared library -+or executable are considered. If @var{provider} is given, then only -+probes from that provider are considered. -+ -+@xref{Static Probe Points}, for more information on finding and using -+static probes. -+ -+Some probes have an associated semaphore variable; for instance, this -+happens automatically if you defined your probe using a DTrace-style -+@file{.d} file. If your probe has a semaphore, @value{GDBN} will -+automatically enable it when you specify a breakpoint using the -+@samp{probe:} notation. But, if you put a breakpoint at a probe's -+location by some other method (e.g., @code{break file:line}), then -+@value{GDBN} will not automatically set the semaphore. -+ - @end table - - -@@ -8500,6 +8578,10 @@ to match the format in which the data wa - The variable @code{$_exitcode} is automatically set to the exit code when - the program being debugged terminates. - -+@item $_probe_argc -+@itemx $_probe_arg0@dots{}$_probe_arg9 -+Arguments to a SystemTap static probe. @xref{Static Probe Points}. -+ - @item $_sdata - @vindex $_sdata@r{, inspect, convenience variable} - The variable @code{$_sdata} contains extra collected static tracepoint -@@ -10219,6 +10301,16 @@ Collect all function arguments. - @item $locals - Collect all local variables. - -+@item $_probe_argc -+Collects the number of arguments from the @code{SystemTap} probe at -+which the tracepoint is located. -+@xref{Static Probe Points,,Static Probe Points} -+ -+@item $_probe_arg@var{N} -+Where @var{N} varies from 0 to 9. Collects the @var{N}th argument -+from the @code{SystemTap} probe at which the tracepoint is located. -+@xref{Static Probe Points,,Static Probe Points} -+ - @item $_sdata - @vindex $_sdata@r{, collect} - Collect static tracepoint marker specific data. Only available for -@@ -20720,8 +20812,6 @@ containing @code{end}. For example: +@@ -22494,8 +22504,6 @@ containing @code{end}. For example: @smallexample (@value{GDBP}) python @@ -1212,10 +229,10 @@ Index: gdb-7.2.90.20110703/gdb/doc/gdb.texinfo >print 23 >end 23 -@@ -20734,6 +20824,14 @@ in a Python script. This can be control - python print-stack}: if @code{on}, the default, then Python stack - printing is enabled; if @code{off}, then Python stack printing is - disabled. +@@ -22509,6 +22517,14 @@ controlled using @code{set python print-stack}: if @code{full}, then + full Python stack printing is enabled; if @code{none}, then Python stack + and message printing is disabled; if @code{message}, the default, only + the message component of the error is printed. + +@kindex maint set python auto-load +@item maint set python auto-load @@ -1227,7 +244,7 @@ Index: gdb-7.2.90.20110703/gdb/doc/gdb.texinfo @end table It is also possible to execute a Python script from the @value{GDBN} -@@ -20755,6 +20853,14 @@ and thus is always available. +@@ -22530,6 +22546,14 @@ and thus is always available. @cindex python api @cindex programming in python @@ -1242,11 +259,11 @@ Index: gdb-7.2.90.20110703/gdb/doc/gdb.texinfo @cindex python stdout @cindex python pagination At startup, @value{GDBN} overrides Python's @code{sys.stdout} and -Index: gdb-7.2.90.20110703/gdb/doc/gdbint.texinfo -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/doc/gdbint.texinfo 2011-02-04 20:10:12.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/doc/gdbint.texinfo 2011-07-03 10:33:11.000000000 +0200 -@@ -2104,6 +2104,18 @@ time, and so we attempt to handle symbol +diff --git a/gdb/doc/gdbint.texinfo b/gdb/doc/gdbint.texinfo +index 267a6eb..4f159b4 100644 +--- a/gdb/doc/gdbint.texinfo ++++ b/gdb/doc/gdbint.texinfo +@@ -2103,6 +2103,18 @@ time, and so we attempt to handle symbols incrementally. For instance, we create @dfn{partial symbol tables} consisting of only selected symbols, and only expand them to full symbol tables when necessary. @@ -1265,7 +282,7 @@ Index: gdb-7.2.90.20110703/gdb/doc/gdbint.texinfo @section Symbol Reading @cindex symbol reading -@@ -2196,6 +2208,7 @@ symtab. Upon return, @code{pst->readin} +@@ -2195,6 +2207,7 @@ symtab. Upon return, @code{pst->readin} should have been set to 1, and zero if there were no symbols in that part of the symbol file. @end table @@ -1273,7 +290,7 @@ Index: gdb-7.2.90.20110703/gdb/doc/gdbint.texinfo @section Partial Symbol Tables @value{GDBN} has three types of symbol tables: -@@ -2297,6 +2310,7 @@ and partial symbol tables behind a set o +@@ -2296,6 +2309,7 @@ and partial symbol tables behind a set of function pointers known as the @dfn{quick symbol functions}. These are documented in @file{symfile.h}. @@ -1281,7 +298,7 @@ Index: gdb-7.2.90.20110703/gdb/doc/gdbint.texinfo @section Types @unnumberedsubsec Fundamental Types (e.g., @code{FT_VOID}, @code{FT_BOOLEAN}). -@@ -2319,6 +2333,7 @@ types map to one @code{TYPE_CODE_*} type +@@ -2318,6 +2332,7 @@ types map to one @code{TYPE_CODE_*} type, and are distinguished by other members of the type struct, such as whether the type is signed or unsigned, and how many bits it uses. @@ -1289,7 +306,7 @@ Index: gdb-7.2.90.20110703/gdb/doc/gdbint.texinfo @unnumberedsubsec Builtin Types (e.g., @code{builtin_type_void}, @code{builtin_type_char}). These are instances of type structs that roughly correspond to -@@ -2333,6 +2348,7 @@ only one instance exists, while @file{c- +@@ -2332,6 +2347,7 @@ only one instance exists, while @file{c-lang.c} builds as many @code{TYPE_CODE_INT} types as needed, with each one associated with some particular objfile. @@ -1297,7 +314,7 @@ Index: gdb-7.2.90.20110703/gdb/doc/gdbint.texinfo @section Object File Formats @cindex object file formats -@@ -2418,6 +2434,7 @@ SOM, which is a cross-language ABI). +@@ -2417,6 +2433,7 @@ SOM, which is a cross-language ABI). The SOM reader is in @file{somread.c}. @@ -1305,7 +322,7 @@ Index: gdb-7.2.90.20110703/gdb/doc/gdbint.texinfo @section Debugging File Formats This section describes characteristics of debugging information that -@@ -2489,6 +2506,7 @@ DWARF 3 is an improved version of DWARF +@@ -2488,6 +2505,7 @@ DWARF 3 is an improved version of DWARF 2. @cindex SOM debugging info Like COFF, the SOM definition includes debugging information. @@ -1313,7 +330,7 @@ Index: gdb-7.2.90.20110703/gdb/doc/gdbint.texinfo @section Adding a New Symbol Reader to @value{GDBN} @cindex adding debugging info reader -@@ -2511,6 +2529,7 @@ will only ever be implemented by one obj +@@ -2510,6 +2528,7 @@ will only ever be implemented by one object file format may be called directly. This interface should be described in a file @file{bfd/lib@var{xyz}.h}, which is included by @value{GDBN}. @@ -1321,7 +338,7 @@ Index: gdb-7.2.90.20110703/gdb/doc/gdbint.texinfo @section Memory Management for Symbol Files Most memory associated with a loaded symbol file is stored on -@@ -2522,10 +2541,45 @@ released when the objfile is unloaded or +@@ -2521,10 +2540,45 @@ released when the objfile is unloaded or reloaded. Therefore one objfile must not reference symbol or type data from another objfile; they could be unloaded at different times. @@ -1371,12 +388,12 @@ Index: gdb-7.2.90.20110703/gdb/doc/gdbint.texinfo @node Language Support -Index: gdb-7.2.90.20110703/gdb/doc/observer.texi -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/doc/observer.texi 2011-01-05 06:09:54.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/doc/observer.texi 2011-07-03 10:33:11.000000000 +0200 -@@ -223,6 +223,11 @@ Bytes from @var{data} to @var{data} + @v - to the current inferior at @var{addr}. +diff --git a/gdb/doc/observer.texi b/gdb/doc/observer.texi +index 6827ed8..c63b901 100644 +--- a/gdb/doc/observer.texi ++++ b/gdb/doc/observer.texi +@@ -230,6 +230,11 @@ the current top-level prompt. + Variable gdb_datadir has been set. The value may not necessarily change. @end deftypefun +@c @deftypefun void mark_used (void) @@ -1387,50 +404,47 @@ Index: gdb-7.2.90.20110703/gdb/doc/observer.texi @deftypefun void test_notification (int @var{somearg}) This observer is used for internal testing. Do not use. See testsuite/gdb.gdb/observer.exp. -Index: gdb-7.2.90.20110703/gdb/dwarf2expr.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/dwarf2expr.c 2011-05-13 20:54:47.000000000 +0200 -+++ gdb-7.2.90.20110703/gdb/dwarf2expr.c 2011-07-03 10:33:11.000000000 +0200 -@@ -912,6 +912,13 @@ execute_stack_op (struct dwarf_expr_cont - ctx->num_pieces = 0; - goto abort_expression; +diff --git a/gdb/dwarf2expr.c b/gdb/dwarf2expr.c +index e0aafc7..7387711 100644 +--- a/gdb/dwarf2expr.c ++++ b/gdb/dwarf2expr.c +@@ -1458,6 +1458,14 @@ execute_stack_op (struct dwarf_expr_context *ctx, + } + break; + case DW_OP_push_object_address: -+ if (ctx->get_object_address == NULL) ++ if (ctx->funcs->get_object_address == NULL) + error (_("DWARF-2 expression error: DW_OP_push_object_address must " + "have a value to push.")); -+ result = (ctx->get_object_address) (ctx->baton); ++ result = (ctx->funcs->get_object_address) (ctx->baton); ++ result_val = value_from_ulongest (address_type, result); + break; + default: error (_("Unhandled dwarf expression opcode 0x%x"), op); } -Index: gdb-7.2.90.20110703/gdb/dwarf2expr.h -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/dwarf2expr.h 2011-02-27 17:25:37.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/dwarf2expr.h 2011-07-03 10:33:11.000000000 +0200 -@@ -114,9 +114,15 @@ struct dwarf_expr_context - #if 0 - /* Not yet implemented. */ +diff --git a/gdb/dwarf2expr.h b/gdb/dwarf2expr.h +index f39ef3c..066cb10 100644 +--- a/gdb/dwarf2expr.h ++++ b/gdb/dwarf2expr.h +@@ -91,12 +91,8 @@ struct dwarf_expr_context_funcs + This can throw an exception if the index is out of range. */ + CORE_ADDR (*get_addr_index) (void *baton, unsigned int index); -+ /* Return the location expression for the dwarf expression -+ subroutine in the die at OFFSET in the current compilation unit. -+ The result must be live until the current expression evaluation -+ is complete. */ -+ unsigned char *(*get_subr) (void *baton, off_t offset, size_t *length); -+#endif -+ +-#if 0 +- /* Not yet implemented. */ +- /* Return the `object address' for DW_OP_push_object_address. */ CORE_ADDR (*get_object_address) (void *baton); -#endif + }; - /* The current depth of dwarf expression recursion, via DW_OP_call*, - DW_OP_fbreg, DW_OP_push_object_address, etc., and the maximum -Index: gdb-7.2.90.20110703/gdb/dwarf2loc.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/dwarf2loc.c 2011-03-22 22:06:33.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/dwarf2loc.c 2011-07-03 10:33:11.000000000 +0200 -@@ -134,6 +134,9 @@ struct dwarf_expr_baton + /* The location of a value. */ +diff --git a/gdb/dwarf2loc.c b/gdb/dwarf2loc.c +index 8c97f19..a6f3e9c 100644 +--- a/gdb/dwarf2loc.c ++++ b/gdb/dwarf2loc.c +@@ -274,6 +274,9 @@ struct dwarf_expr_baton { struct frame_info *frame; struct dwarf2_per_cu_data *per_cu; @@ -1440,7 +454,17 @@ Index: gdb-7.2.90.20110703/gdb/dwarf2loc.c }; /* Helper functions for dwarf2_evaluate_loc_desc. */ -@@ -202,23 +205,33 @@ dwarf_expr_frame_base_1 (struct symbol * +@@ -333,16 +336,14 @@ static void + dwarf_expr_frame_base_1 (struct symbol *framefunc, CORE_ADDR pc, + const gdb_byte **start, size_t *length) + { +- if (SYMBOL_LOCATION_BATON (framefunc) == NULL) +- *length = 0; +- else if (SYMBOL_COMPUTED_OPS (framefunc) == &dwarf2_loclist_funcs) ++ if (SYMBOL_COMPUTED_OPS (framefunc) == &dwarf2_loclist_funcs) + { + struct dwarf2_loclist_baton *symbaton; + symbaton = SYMBOL_LOCATION_BATON (framefunc); *start = dwarf2_find_location_expression (symbaton, length, pc); } @@ -1449,42 +473,33 @@ Index: gdb-7.2.90.20110703/gdb/dwarf2loc.c { struct dwarf2_locexpr_baton *symbaton; - symbaton = SYMBOL_LOCATION_BATON (framefunc); -- if (symbaton != NULL) -- { -- *length = symbaton->size; -- *start = symbaton->data; -- } -- else -- *start = NULL; -+ gdb_assert (symbaton != NULL); -+ *start = symbaton->data; -+ *length = symbaton->size; -+ } +@@ -355,10 +356,23 @@ dwarf_expr_frame_base_1 (struct symbol *framefunc, CORE_ADDR pc, + else + *length = 0; + } + else if (SYMBOL_COMPUTED_OPS (framefunc) == &dwarf2_missing_funcs) + { + struct dwarf2_locexpr_baton *symbaton; + + symbaton = SYMBOL_LOCATION_BATON (framefunc); + gdb_assert (symbaton == NULL); -+ *start = NULL; -+ *length = 0; /* unused */ - } ++ *length = 0; ++ } + else + internal_error (__FILE__, __LINE__, + _("Unsupported SYMBOL_COMPUTED_OPS %p for \"%s\""), + SYMBOL_COMPUTED_OPS (framefunc), + SYMBOL_PRINT_NAME (framefunc)); - if (*start == NULL) + if (*length == 0) error (_("Could not find the frame base for \"%s\"."), - SYMBOL_NATURAL_NAME (framefunc)); + SYMBOL_PRINT_NAME (framefunc)); } /* Helper function for dwarf2_evaluate_loc_desc. Computes the CFA for -@@ -286,6 +299,172 @@ dwarf_expr_dwarf_call (struct dwarf_expr - ctx->get_frame_pc, ctx->baton); +@@ -426,6 +440,85 @@ dwarf_expr_dwarf_call (struct dwarf_expr_context *ctx, cu_offset die_offset) + ctx->funcs->get_frame_pc, ctx->baton); } +static CORE_ADDR @@ -1537,93 +552,6 @@ Index: gdb-7.2.90.20110703/gdb/dwarf2loc.c + object_address = address; +} + -+/* Evaluate DWARF expression at DATA ... DATA + SIZE with its result readable -+ by dwarf_expr_fetch (RETVAL, 0). FRAME parameter can be NULL to call -+ get_selected_frame to find it. Returned dwarf_expr_context freeing is -+ pushed on the cleanup chain. */ -+ -+static struct dwarf_expr_context * -+dwarf_expr_prep_ctx (struct frame_info *frame, const gdb_byte *data, -+ size_t size, struct dwarf2_per_cu_data *per_cu) -+{ -+ struct dwarf_expr_context *ctx; -+ struct dwarf_expr_baton baton; -+ struct objfile *objfile = dwarf2_per_cu_objfile (per_cu); -+ volatile struct gdb_exception ex; -+ -+ baton.frame = frame; -+ baton.per_cu = per_cu; -+ baton.object_address = object_address; -+ -+ ctx = new_dwarf_expr_context (); -+ make_cleanup_free_dwarf_expr_context (ctx); -+ -+ ctx->gdbarch = get_objfile_arch (objfile); -+ ctx->addr_size = dwarf2_per_cu_addr_size (per_cu); -+ ctx->offset = dwarf2_per_cu_text_offset (per_cu); -+ ctx->baton = &baton; -+ ctx->read_reg = dwarf_expr_read_reg; -+ ctx->read_mem = dwarf_expr_read_mem; -+ ctx->get_frame_base = dwarf_expr_frame_base; -+ ctx->get_frame_cfa = dwarf_expr_frame_cfa; -+ ctx->get_frame_pc = dwarf_expr_frame_pc; -+ ctx->get_tls_address = dwarf_expr_tls_address; -+ ctx->dwarf_call = dwarf_expr_dwarf_call; -+ ctx->get_object_address = dwarf_expr_object_address; -+ -+ TRY_CATCH (ex, RETURN_MASK_ERROR) -+ { -+ dwarf_expr_eval (ctx, data, size); -+ } -+ if (ex.reason < 0) -+ { -+ if (ex.error == NOT_AVAILABLE_ERROR) -+ return NULL; -+ else -+ throw_exception (ex); -+ } -+ -+ /* It was used only during dwarf_expr_eval. */ -+ ctx->baton = NULL; -+ -+ return ctx; -+} -+ -+/* Evaluate DWARF expression at DLBATON expecting it produces exactly one -+ CORE_ADDR result on the DWARF stack stack. */ -+ -+CORE_ADDR -+dwarf_locexpr_baton_eval (struct dwarf2_locexpr_baton *dlbaton) -+{ -+ struct dwarf_expr_context *ctx; -+ CORE_ADDR retval; -+ struct cleanup *back_to = make_cleanup (null_cleanup, 0); -+ -+ ctx = dwarf_expr_prep_ctx (get_selected_frame (NULL), dlbaton->data, -+ dlbaton->size, dlbaton->per_cu); -+ if (ctx == NULL) -+ throw_error (NOT_AVAILABLE_ERROR, _("Value not available")); -+ if (ctx->num_pieces > 0) -+ error (_("DW_OP_*piece is unsupported for DW_FORM_block")); -+ -+ retval = dwarf_expr_fetch (ctx, 0); -+ -+ if (ctx->location == DWARF_VALUE_REGISTER) -+ { -+ /* Inlined dwarf_expr_read_reg as we no longer have the baton. */ -+ -+ int gdb_regnum = gdbarch_dwarf2_reg_to_regnum (ctx->gdbarch, retval); -+ struct type *type = builtin_type (ctx->gdbarch)->builtin_data_ptr; -+ struct frame_info *frame = get_selected_frame (NULL); -+ -+ retval = address_from_register (type, gdb_regnum, frame); -+ } -+ -+ do_cleanups (back_to); -+ -+ return retval; -+} -+ +/* Evaluate DWARF location list at DLLBATON expecting it produces exactly one + CORE_ADDR result stored to *ADDRP on the DWARF stack stack. If the result + could not be found return zero and keep *ADDRP unchanged. */ @@ -1653,70 +581,185 @@ Index: gdb-7.2.90.20110703/gdb/dwarf2loc.c + return 1; +} + - struct piece_closure - { - /* Reference count. */ -@@ -1072,11 +1251,8 @@ dwarf2_evaluate_loc_desc_full (struct ty + /* Callback function for dwarf2_evaluate_loc_desc. */ + + static struct type * +@@ -1105,10 +1198,12 @@ dwarf_expr_push_dwarf_reg_entry_value (struct dwarf_expr_context *ctx, + + saved_ctx.gdbarch = ctx->gdbarch; + saved_ctx.addr_size = ctx->addr_size; ++ saved_ctx.ref_addr_size = ctx->ref_addr_size; + saved_ctx.offset = ctx->offset; + saved_ctx.baton = ctx->baton; + ctx->gdbarch = get_objfile_arch (dwarf2_per_cu_objfile (baton_local.per_cu)); + ctx->addr_size = dwarf2_per_cu_addr_size (baton_local.per_cu); ++ ctx->ref_addr_size = dwarf2_per_cu_ref_addr_size (baton_local.per_cu); + ctx->offset = dwarf2_per_cu_text_offset (baton_local.per_cu); + ctx->baton = &baton_local; + +@@ -1116,10 +1211,95 @@ dwarf_expr_push_dwarf_reg_entry_value (struct dwarf_expr_context *ctx, + + ctx->gdbarch = saved_ctx.gdbarch; + ctx->addr_size = saved_ctx.addr_size; ++ ctx->ref_addr_size = saved_ctx.ref_addr_size; + ctx->offset = saved_ctx.offset; + ctx->baton = saved_ctx.baton; + } + ++static CORE_ADDR dwarf_expr_get_addr_index (void *baton, unsigned int index); ++ ++/* Virtual method table for dwarf2_evaluate_loc_desc_full below. */ ++ ++static const struct dwarf_expr_context_funcs dwarf_expr_ctx_funcs = ++{ ++ dwarf_expr_read_reg, ++ dwarf_expr_read_mem, ++ dwarf_expr_frame_base, ++ dwarf_expr_frame_cfa, ++ dwarf_expr_frame_pc, ++ dwarf_expr_tls_address, ++ dwarf_expr_dwarf_call, ++ dwarf_expr_get_base_type, ++ dwarf_expr_push_dwarf_reg_entry_value, ++ dwarf_expr_get_addr_index, ++ dwarf_expr_object_address ++}; ++ ++/* Evaluate DWARF expression at DATA ... DATA + SIZE with its result readable ++ by dwarf_expr_fetch (RETVAL, 0). FRAME parameter can be NULL to call ++ get_selected_frame to find it. Returned dwarf_expr_context freeing is ++ pushed on the cleanup chain. */ ++ ++static void ++dwarf_expr_prep_ctx (struct dwarf_expr_context *ctx, struct frame_info *frame, ++ const gdb_byte *data, size_t size, ++ struct dwarf2_per_cu_data *per_cu) ++{ ++ struct dwarf_expr_baton baton; ++ struct objfile *objfile = dwarf2_per_cu_objfile (per_cu); ++ volatile struct gdb_exception ex; ++ ++ baton.frame = frame; ++ baton.per_cu = per_cu; ++ baton.object_address = object_address; ++ ++ ctx->gdbarch = get_objfile_arch (objfile); ++ ctx->addr_size = dwarf2_per_cu_addr_size (per_cu); ++ ctx->ref_addr_size = dwarf2_per_cu_ref_addr_size (per_cu); ++ ctx->offset = dwarf2_per_cu_text_offset (per_cu); ++ ctx->baton = &baton; ++ ctx->funcs = &dwarf_expr_ctx_funcs; ++ ++ dwarf_expr_eval (ctx, data, size); ++} ++ ++/* Evaluate DWARF expression at DLBATON expecting it produces exactly one ++ CORE_ADDR result on the DWARF stack stack. */ ++ ++CORE_ADDR ++dwarf_locexpr_baton_eval (struct dwarf2_locexpr_baton *dlbaton) ++{ ++ struct dwarf_expr_context *ctx; ++ CORE_ADDR retval; ++ struct cleanup *back_to; ++ ++ ctx = new_dwarf_expr_context (); ++ back_to = make_cleanup_free_dwarf_expr_context (ctx); ++ ++ dwarf_expr_prep_ctx (ctx, get_selected_frame (NULL), dlbaton->data, ++ dlbaton->size, dlbaton->per_cu); ++ ++ if (ctx->num_pieces > 0) ++ error (_("DW_OP_*piece is unsupported for DW_FORM_block")); ++ ++ retval = dwarf_expr_fetch_address (ctx, 0); ++ ++ if (ctx->location == DWARF_VALUE_REGISTER) ++ { ++ /* Inlined dwarf_expr_read_reg as we no longer have the baton. */ ++ ++ int gdb_regnum = gdbarch_dwarf2_reg_to_regnum (ctx->gdbarch, retval); ++ struct type *type = builtin_type (ctx->gdbarch)->builtin_data_ptr; ++ struct frame_info *frame = get_selected_frame (NULL); ++ ++ retval = address_from_register (type, gdb_regnum, frame); ++ } ++ ++ do_cleanups (back_to); ++ ++ return retval; ++} ++ + /* Callback function for dwarf2_evaluate_loc_desc. + Fetch the address indexed by DW_OP_GNU_addr_index. */ + +@@ -2053,22 +2233,6 @@ invalid_synthetic_pointer (void) + "referenced via synthetic pointer")); + } + +-/* Virtual method table for dwarf2_evaluate_loc_desc_full below. */ +- +-static const struct dwarf_expr_context_funcs dwarf_expr_ctx_funcs = +-{ +- dwarf_expr_read_reg, +- dwarf_expr_read_mem, +- dwarf_expr_frame_base, +- dwarf_expr_frame_cfa, +- dwarf_expr_frame_pc, +- dwarf_expr_tls_address, +- dwarf_expr_dwarf_call, +- dwarf_expr_get_base_type, +- dwarf_expr_push_dwarf_reg_entry_value, +- dwarf_expr_get_addr_index +-}; +- + /* Evaluate a location description, starting at DATA and with length + SIZE, to find the current location of variable of TYPE in the + context of FRAME. BYTE_OFFSET is applied after the contents are +@@ -2081,7 +2245,6 @@ dwarf2_evaluate_loc_desc_full (struct type *type, struct frame_info *frame, LONGEST byte_offset) { struct value *retval; - struct dwarf_expr_baton baton; struct dwarf_expr_context *ctx; - struct cleanup *old_chain; -- struct objfile *objfile = dwarf2_per_cu_objfile (per_cu); -- volatile struct gdb_exception ex; - - if (byte_offset < 0) - invalid_synthetic_pointer (); -@@ -1089,38 +1265,14 @@ dwarf2_evaluate_loc_desc_full (struct ty - return retval; - } + struct cleanup *old_chain, *value_chain; + struct objfile *objfile = dwarf2_per_cu_objfile (per_cu); +@@ -2093,29 +2256,18 @@ dwarf2_evaluate_loc_desc_full (struct type *type, struct frame_info *frame, + if (size == 0) + return allocate_optimized_out_value (type); - baton.frame = frame; - baton.per_cu = per_cu; - -- ctx = new_dwarf_expr_context (); -- old_chain = make_cleanup_free_dwarf_expr_context (ctx); -- + ctx = new_dwarf_expr_context (); + old_chain = make_cleanup_free_dwarf_expr_context (ctx); + value_chain = make_cleanup_value_free_to_mark (value_mark ()); + - ctx->gdbarch = get_objfile_arch (objfile); - ctx->addr_size = dwarf2_per_cu_addr_size (per_cu); +- ctx->ref_addr_size = dwarf2_per_cu_ref_addr_size (per_cu); - ctx->offset = dwarf2_per_cu_text_offset (per_cu); - ctx->baton = &baton; -- ctx->read_reg = dwarf_expr_read_reg; -- ctx->read_mem = dwarf_expr_read_mem; -- ctx->get_frame_base = dwarf_expr_frame_base; -- ctx->get_frame_cfa = dwarf_expr_frame_cfa; -- ctx->get_frame_pc = dwarf_expr_frame_pc; -- ctx->get_tls_address = dwarf_expr_tls_address; -- ctx->dwarf_call = dwarf_expr_dwarf_call; -+ old_chain = make_cleanup (null_cleanup, 0); - -- TRY_CATCH (ex, RETURN_MASK_ERROR) -- { -- dwarf_expr_eval (ctx, data, size); -- } -- if (ex.reason < 0) -+ ctx = dwarf_expr_prep_ctx (frame, data, size, per_cu); -+ if (ctx == NULL) +- ctx->funcs = &dwarf_expr_ctx_funcs; +- + TRY_CATCH (ex, RETURN_MASK_ERROR) { -- if (ex.error == NOT_AVAILABLE_ERROR) -- { -- retval = allocate_value (type); -- mark_value_bytes_unavailable (retval, 0, TYPE_LENGTH (type)); -- return retval; -- } -- else -- throw_exception (ex); -+ retval = allocate_value (type); -+ mark_value_bytes_unavailable (retval, 0, TYPE_LENGTH (type)); -+ return retval; +- dwarf_expr_eval (ctx, data, size); ++ dwarf_expr_prep_ctx (ctx, frame, data, size, per_cu); } - - if (ctx->num_pieces > 0) -@@ -1166,6 +1318,15 @@ dwarf2_evaluate_loc_desc_full (struct ty - CORE_ADDR address = dwarf_expr_fetch_address (ctx, 0); + if (ex.reason < 0) + { + if (ex.error == NOT_AVAILABLE_ERROR) + { +- do_cleanups (old_chain); + retval = allocate_value (type); + mark_value_bytes_unavailable (retval, 0, TYPE_LENGTH (type)); + return retval; +@@ -2179,6 +2331,16 @@ dwarf2_evaluate_loc_desc_full (struct type *type, struct frame_info *frame, int in_stack_memory = dwarf_expr_fetch_in_stack_memory (ctx, 0); + do_cleanups (value_chain); ++ + /* Frame may be needed for check_typedef of TYPE_DYNAMIC. */ + make_cleanup_restore_selected_frame (); + select_frame (frame); @@ -1729,7 +772,7 @@ Index: gdb-7.2.90.20110703/gdb/dwarf2loc.c retval = allocate_value_lazy (type); VALUE_LVAL (retval) = lval_memory; if (in_stack_memory) -@@ -2855,11 +3016,51 @@ loclist_tracepoint_var_ref (struct symbo +@@ -4048,8 +4210,7 @@ loclist_tracepoint_var_ref (struct symbol *symbol, struct gdbarch *gdbarch, dlbaton->per_cu); } @@ -1738,11 +781,11 @@ Index: gdb-7.2.90.20110703/gdb/dwarf2loc.c +/* The set of location functions used with the DWARF-2 location lists. */ const struct symbol_computed_ops dwarf2_loclist_funcs = { loclist_read_variable, - loclist_read_needs_frame, - loclist_describe_location, + loclist_read_variable_at_entry, +@@ -4058,6 +4219,48 @@ const struct symbol_computed_ops dwarf2_loclist_funcs = { loclist_tracepoint_var_ref }; -+ + +static struct value * +missing_read_variable (struct symbol *symbol, struct frame_info *frame) +{ @@ -1779,15 +822,20 @@ Index: gdb-7.2.90.20110703/gdb/dwarf2loc.c + unable to resolve the symbols. */ +const struct symbol_computed_ops dwarf2_missing_funcs = { + missing_read_variable, ++ missing_read_variable, /* read_variable_at_entry */ + missing_read_needs_frame, + missing_describe_location, + missing_tracepoint_var_ref +}; -Index: gdb-7.2.90.20110703/gdb/dwarf2loc.h -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/dwarf2loc.h 2011-02-17 17:20:44.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/dwarf2loc.h 2011-07-03 10:33:11.000000000 +0200 -@@ -107,6 +107,15 @@ struct dwarf2_loclist_baton ++ + /* Provide a prototype to silence -Wmissing-prototypes. */ + extern initialize_file_ftype _initialize_dwarf2loc; + +diff --git a/gdb/dwarf2loc.h b/gdb/dwarf2loc.h +index e9d06a3..bfa6776 100644 +--- a/gdb/dwarf2loc.h ++++ b/gdb/dwarf2loc.h +@@ -127,6 +127,15 @@ struct dwarf2_loclist_baton extern const struct symbol_computed_ops dwarf2_locexpr_funcs; extern const struct symbol_computed_ops dwarf2_loclist_funcs; @@ -1803,11 +851,11 @@ Index: gdb-7.2.90.20110703/gdb/dwarf2loc.h /* Compile a DWARF location expression to an agent expression. -Index: gdb-7.2.90.20110703/gdb/dwarf2read.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/dwarf2read.c 2011-07-02 21:59:29.000000000 +0200 -+++ gdb-7.2.90.20110703/gdb/dwarf2read.c 2011-07-03 10:33:11.000000000 +0200 -@@ -1222,6 +1222,9 @@ static void fill_in_loclist_baton (struc +diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c +index 8dbc53e..b5b7813 100644 +--- a/gdb/dwarf2read.c ++++ b/gdb/dwarf2read.c +@@ -1348,6 +1348,9 @@ static void fill_in_loclist_baton (struct dwarf2_cu *cu, struct dwarf2_loclist_baton *baton, struct attribute *attr); @@ -1817,9 +865,9 @@ Index: gdb-7.2.90.20110703/gdb/dwarf2read.c static void dwarf2_symbol_mark_computed (struct attribute *attr, struct symbol *sym, struct dwarf2_cu *cu); -@@ -1256,6 +1259,9 @@ static void age_cached_comp_units (void) +@@ -1380,6 +1383,9 @@ static void age_cached_comp_units (void); - static void free_one_cached_comp_unit (void *); + static void free_one_cached_comp_unit (struct dwarf2_per_cu_data *); +static void fetch_die_type_attrs (struct die_info *die, struct type *type, + struct dwarf2_cu *cu); @@ -1827,7 +875,7 @@ Index: gdb-7.2.90.20110703/gdb/dwarf2read.c static struct type *set_die_type (struct die_info *, struct type *, struct dwarf2_cu *); -@@ -1280,6 +1286,9 @@ static struct type *get_die_type_at_offs +@@ -1405,6 +1411,9 @@ static struct type *get_die_type_at_offset (sect_offset, static struct type *get_die_type (struct die_info *die, struct dwarf2_cu *cu); @@ -1837,7 +885,7 @@ Index: gdb-7.2.90.20110703/gdb/dwarf2read.c static void dwarf2_release_queue (void *dummy); static void queue_comp_unit (struct dwarf2_per_cu_data *per_cu, -@@ -7542,6 +7551,29 @@ process_enumeration_scope (struct die_in +@@ -9526,6 +9535,29 @@ process_enumeration_scope (struct die_info *die, struct dwarf2_cu *cu) new_symbol (die, this_type, cu); } @@ -1867,7 +915,7 @@ Index: gdb-7.2.90.20110703/gdb/dwarf2read.c /* Extract all information from a DW_TAG_array_type DIE and put it in the DIE's type field. For now, this only handles one dimensional arrays. */ -@@ -7555,7 +7587,7 @@ read_array_type (struct die_info *die, s +@@ -9539,7 +9571,7 @@ read_array_type (struct die_info *die, struct dwarf2_cu *cu) struct type *element_type, *range_type, *index_type; struct type **range_types = NULL; struct attribute *attr; @@ -1876,7 +924,7 @@ Index: gdb-7.2.90.20110703/gdb/dwarf2read.c struct cleanup *back_to; char *name; -@@ -7608,17 +7640,19 @@ read_array_type (struct die_info *die, s +@@ -9592,17 +9624,19 @@ read_array_type (struct die_info *die, struct dwarf2_cu *cu) type = element_type; if (read_array_order (die, cu) == DW_ORD_col_major) @@ -1907,7 +955,7 @@ Index: gdb-7.2.90.20110703/gdb/dwarf2read.c /* Understand Dwarf2 support for vector types (like they occur on the PowerPC w/ AltiVec). Gcc just adds another attribute to the -@@ -8102,29 +8136,114 @@ read_tag_string_type (struct die_info *d +@@ -10086,29 +10120,114 @@ read_tag_string_type (struct die_info *die, struct dwarf2_cu *cu) struct gdbarch *gdbarch = get_objfile_arch (objfile); struct type *type, *range_type, *index_type, *char_type; struct attribute *attr; @@ -1951,8 +999,8 @@ Index: gdb-7.2.90.20110703/gdb/dwarf2read.c + ULONGEST ulongest; + const gdb_byte *end; + -+ end = read_uleb128 (&blk->data[1], &blk->data[blk->size], -+ &ulongest); ++ end = safe_read_uleb128 (&blk->data[1], &blk->data[blk->size], ++ &ulongest); + if (end == &blk->data[blk->size]) + length_baton = dwarf2_attr_to_locexpr_baton (attr, cu); + } @@ -2035,75 +1083,23 @@ Index: gdb-7.2.90.20110703/gdb/dwarf2read.c char_type = language_string_char_type (cu->language_defn, gdbarch); type = create_string_type (NULL, char_type, range_type); -@@ -8409,8 +8528,7 @@ read_subrange_type (struct die_info *die +@@ -10412,7 +10531,7 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu) struct type *base_type; struct type *range_type; struct attribute *attr; -- LONGEST low = 0; -- LONGEST high = -1; +- LONGEST low, high; + LONGEST low; + int low_default_is_valid; char *name; LONGEST negative_mask; - -@@ -8423,53 +8541,126 @@ read_subrange_type (struct die_info *die - if (range_type) - return range_type; - -- if (cu->language == language_fortran) -+ /* LOW_BOUND and HIGH_BOUND are set for real below. */ -+ range_type = create_range_type (NULL, base_type, 0, -1); -+ TYPE_UNSIGNED (range_type) = 0; -+ -+ negative_mask = -+ (LONGEST) -1 << (TYPE_LENGTH (base_type) * TARGET_CHAR_BIT - 1); -+ -+ /* Exclude language_ada from any TYPE_DYNAMIC constructs below. GDB Ada -+ supports implements the dynamic bounds in a non-DWARF way and the -+ existing DWARF dynamic bounds are invalid, leading to memory access -+ errors. */ -+ -+ attr = dwarf2_attr (die, DW_AT_lower_bound, cu); -+ if (attr && attr_form_is_block (attr) && cu->language != language_ada) - { -- /* FORTRAN implies a lower bound of 1, if not given. */ -- low = 1; -+ TYPE_RANGE_DATA (range_type)->low.kind = RANGE_BOUND_KIND_DWARF_BLOCK; -+ TYPE_RANGE_DATA (range_type)->low.u.dwarf_block = -+ dwarf2_attr_to_locexpr_baton (attr, cu); -+ TYPE_DYNAMIC (range_type) = 1; -+ /* For setting a default if DW_AT_UPPER_BOUND would be missing. */ -+ low = 0; - } -+ else if (attr && is_ref_attr (attr) && cu->language != language_ada) -+ { -+ struct die_info *target_die; -+ struct dwarf2_cu *target_cu = cu; -+ struct attribute *target_loc_attr; - -- /* FIXME: For variable sized arrays either of these could be -- a variable rather than a constant value. We'll allow it, -- but we don't know how to handle it. */ -- attr = dwarf2_attr (die, DW_AT_lower_bound, cu); -- if (attr) -- low = dwarf2_get_attr_constant_value (attr, 0); -+ target_die = follow_die_ref_or_sig (die, attr, &target_cu); -+ gdb_assert (target_cu->objfile == cu->objfile); -+ target_loc_attr = dwarf2_attr (target_die, DW_AT_location, target_cu); +@@ -10468,42 +10587,6 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu) + "- DIE at 0x%x [in module %s]"), + die->offset.sect_off, cu->objfile->name); - attr = dwarf2_attr (die, DW_AT_upper_bound, cu); - if (attr) -+ TYPE_RANGE_DATA (range_type)->low.kind = RANGE_BOUND_KIND_DWARF_LOCLIST; -+ TYPE_RANGE_DATA (range_type)->low.u.dwarf_loclist.loclist -+ = dwarf2_attr_to_loclist_baton (target_loc_attr, target_cu); -+ TYPE_RANGE_DATA (range_type)->low.u.dwarf_loclist.type -+ = die_type (target_die, target_cu); -+ TYPE_DYNAMIC (range_type) = 1; -+ /* For setting a default if DW_AT_UPPER_BOUND would be missing. */ -+ low = 0; -+ } -+ else - { -- if (attr->form == DW_FORM_block1 || is_ref_attr (attr)) +- { +- if (attr_form_is_block (attr) || is_ref_attr (attr)) - { - /* GCC encodes arrays with unspecified or dynamic length - with a DW_FORM_block1 attribute or a reference attribute. @@ -2118,10 +1114,88 @@ Index: gdb-7.2.90.20110703/gdb/dwarf2read.c - the lower bound we've computed above. */ - high = low - 1; - } +- else +- high = dwarf2_get_attr_constant_value (attr, 1); +- } +- else +- { +- attr = dwarf2_attr (die, DW_AT_count, cu); +- if (attr) +- { +- int count = dwarf2_get_attr_constant_value (attr, 1); +- high = low + count - 1; +- } +- else +- { +- /* Unspecified array length. */ +- high = low - 1; +- } +- } +- + /* Dwarf-2 specifications explicitly allows to create subrange types + without specifying a base type. + In that case, the base type must be set to the type of +@@ -10542,24 +10625,163 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu) + } + } + +- negative_mask = ++ /* LOW_BOUND and HIGH_BOUND are set for real below. */ ++ range_type = create_range_type (NULL, base_type, 0, -1); ++ TYPE_UNSIGNED (range_type) = 0; ++ ++ negative_mask = + (LONGEST) -1 << (TYPE_LENGTH (base_type) * TARGET_CHAR_BIT - 1); +- if (!TYPE_UNSIGNED (base_type) && (low & negative_mask)) +- low |= negative_mask; +- if (!TYPE_UNSIGNED (base_type) && (high & negative_mask)) +- high |= negative_mask; + +- range_type = create_range_type (NULL, base_type, low, high); ++ /* Exclude language_ada from any TYPE_DYNAMIC constructs below. GDB Ada ++ supports implements the dynamic bounds in a non-DWARF way and the ++ existing DWARF dynamic bounds are invalid, leading to memory access ++ errors. */ + +- /* Mark arrays with dynamic length at least as an array of unspecified +- length. GDB could check the boundary but before it gets implemented at +- least allow accessing the array elements. */ +- if (attr && attr_form_is_block (attr)) +- TYPE_HIGH_BOUND_UNDEFINED (range_type) = 1; ++ attr = dwarf2_attr (die, DW_AT_lower_bound, cu); ++ if (attr && attr_form_is_block (attr) && cu->language != language_ada) ++ { ++ TYPE_RANGE_DATA (range_type)->low.kind = RANGE_BOUND_KIND_DWARF_BLOCK; ++ TYPE_RANGE_DATA (range_type)->low.u.dwarf_block = ++ dwarf2_attr_to_locexpr_baton (attr, cu); ++ TYPE_DYNAMIC (range_type) = 1; ++ /* For setting a default if DW_AT_UPPER_BOUND would be missing. */ ++ low = 0; ++ } ++ else if (attr && is_ref_attr (attr) && cu->language != language_ada) ++ { ++ struct die_info *target_die; ++ struct dwarf2_cu *target_cu = cu; ++ struct attribute *target_loc_attr; ++ ++ target_die = follow_die_ref_or_sig (die, attr, &target_cu); ++ gdb_assert (target_cu->objfile == cu->objfile); ++ target_loc_attr = dwarf2_attr (target_die, DW_AT_location, target_cu); ++ ++ TYPE_RANGE_DATA (range_type)->low.kind = RANGE_BOUND_KIND_DWARF_LOCLIST; ++ TYPE_RANGE_DATA (range_type)->low.u.dwarf_loclist.loclist ++ = dwarf2_attr_to_loclist_baton (target_loc_attr, target_cu); ++ TYPE_RANGE_DATA (range_type)->low.u.dwarf_loclist.type ++ = die_type (target_die, target_cu); ++ TYPE_DYNAMIC (range_type) = 1; ++ /* For setting a default if DW_AT_UPPER_BOUND would be missing. */ ++ low = 0; ++ } ++ else ++ { + if (attr && attr_form_is_constant (attr)) + low = dwarf2_get_attr_constant_value (attr, 0); - else -- high = dwarf2_get_attr_constant_value (attr, 1); ++ else + { + if (cu->language == language_fortran) + { @@ -2140,24 +1214,22 @@ Index: gdb-7.2.90.20110703/gdb/dwarf2read.c + TYPE_LOW_BOUND (range_type) = low; + if (low >= 0) + TYPE_UNSIGNED (range_type) = 1; - } -- else -+ ++ } + +- /* Ada expects an empty array on no boundary attributes. */ +- if (attr == NULL && cu->language != language_ada) +- TYPE_HIGH_BOUND_UNDEFINED (range_type) = 1; + attr = dwarf2_attr (die, DW_AT_upper_bound, cu); + if (!attr || (!attr_form_is_block (attr) && !attr_form_is_constant (attr) + && !is_ref_attr (attr))) - { - attr = dwarf2_attr (die, DW_AT_count, cu); -- if (attr) -- { -- int count = dwarf2_get_attr_constant_value (attr, 1); -- high = low + count - 1; ++ { ++ attr = dwarf2_attr (die, DW_AT_count, cu); + /* It does not hurt but it is needlessly ineffective in check_typedef. */ + if (attr && (attr_form_is_block (attr) || attr_form_is_constant (attr))) + { + TYPE_RANGE_HIGH_BOUND_IS_COUNT (range_type) = 1; + TYPE_DYNAMIC (range_type) = 1; - } ++ } + /* Pass it now as the regular DW_AT_upper_bound. */ + } + @@ -2191,42 +1263,18 @@ Index: gdb-7.2.90.20110703/gdb/dwarf2read.c + + if (attr && attr_form_is_constant (attr)) + high = dwarf2_get_attr_constant_value (attr, 0); - else - { -- /* Unspecified array length. */ ++ else ++ { + /* Ada expects an empty array on no boundary attributes. */ + if (cu->language != language_ada) + TYPE_HIGH_BOUND_UNDEFINED (range_type) = 1; - high = low - 1; - } ++ high = low - 1; ++ } + if (!TYPE_UNSIGNED (base_type) && (high & negative_mask)) + high |= negative_mask; + TYPE_HIGH_BOUND (range_type) = high; - } - - /* Dwarf-2 specifications explicitly allows to create subrange types -@@ -8510,24 +8701,41 @@ read_subrange_type (struct die_info *die - } - } - -- negative_mask = -- (LONGEST) -1 << (TYPE_LENGTH (base_type) * TARGET_CHAR_BIT - 1); -- if (!TYPE_UNSIGNED (base_type) && (low & negative_mask)) -- low |= negative_mask; -- if (!TYPE_UNSIGNED (base_type) && (high & negative_mask)) -- high |= negative_mask; -- -- range_type = create_range_type (NULL, base_type, low, high); -- -- /* Mark arrays with dynamic length at least as an array of unspecified -- length. GDB could check the boundary but before it gets implemented at -- least allow accessing the array elements. */ -- if (attr && attr->form == DW_FORM_block1) -- TYPE_HIGH_BOUND_UNDEFINED (range_type) = 1; -- -- /* Ada expects an empty array on no boundary attributes. */ -- if (attr == NULL && cu->language != language_ada) -- TYPE_HIGH_BOUND_UNDEFINED (range_type) = 1; ++ } ++ + /* DW_AT_bit_stride is currently unsupported as we count in bytes. */ + attr = dwarf2_attr (die, DW_AT_byte_stride, cu); + if (attr && attr_form_is_block (attr) && cu->language != language_ada) @@ -2265,7 +1313,7 @@ Index: gdb-7.2.90.20110703/gdb/dwarf2read.c name = dwarf2_name (die, cu); if (name) -@@ -11072,10 +11280,12 @@ var_decode_location (struct attribute *a +@@ -13257,10 +13479,12 @@ var_decode_location (struct attribute *attr, struct symbol *sym, (i.e. when the value of a register or memory location is referenced, or a thread-local block, etc.). Then again, it might not be worthwhile. I'm assuming that it isn't unless performance @@ -2280,7 +1328,7 @@ Index: gdb-7.2.90.20110703/gdb/dwarf2read.c if (SYMBOL_COMPUTED_OPS (sym) == &dwarf2_loclist_funcs) cu->has_loclist = 1; -@@ -11116,6 +11326,8 @@ new_symbol_full (struct die_info *die, s +@@ -13301,6 +13525,8 @@ new_symbol_full (struct die_info *die, struct type *type, struct dwarf2_cu *cu, else sym = OBSTACK_ZALLOC (&objfile->objfile_obstack, struct symbol); OBJSTAT (objfile, n_syms++); @@ -2289,7 +1337,7 @@ Index: gdb-7.2.90.20110703/gdb/dwarf2read.c /* Cache this symbol's name and the name's demangled form (if any). */ SYMBOL_SET_LANGUAGE (sym, cu->language); -@@ -11888,6 +12100,9 @@ read_type_die_1 (struct die_info *die, s +@@ -14075,6 +14301,9 @@ read_type_die_1 (struct die_info *die, struct dwarf2_cu *cu) break; } @@ -2299,8 +1347,8 @@ Index: gdb-7.2.90.20110703/gdb/dwarf2read.c return this_type; } -@@ -14742,61 +14957,99 @@ fill_in_loclist_baton (struct dwarf2_cu - baton->base_address = cu->base_address; +@@ -16472,62 +16701,100 @@ fill_in_loclist_baton (struct dwarf2_cu *cu, + baton->from_dwo = cu->dwo_unit != NULL; } -static void @@ -2311,30 +1359,16 @@ Index: gdb-7.2.90.20110703/gdb/dwarf2read.c + +static struct dwarf2_locexpr_baton * +dwarf2_attr_to_locexpr_baton (struct attribute *attr, struct dwarf2_cu *cu) - { -- if (attr_form_is_section_offset (attr) -- /* ".debug_loc" may not exist at all, or the offset may be outside -- the section. If so, fall through to the complaint in the -- other branch. */ -- && DW_UNSND (attr) < dwarf2_section_size (dwarf2_per_objfile->objfile, -- &dwarf2_per_objfile->loc)) -- { -- struct dwarf2_loclist_baton *baton; ++{ ++ struct objfile *objfile = dwarf2_per_objfile->objfile; + struct dwarf2_locexpr_baton *baton; - -- baton = obstack_alloc (&cu->objfile->objfile_obstack, -- sizeof (struct dwarf2_loclist_baton)); ++ + gdb_assert (attr_form_is_block (attr)); - -- fill_in_loclist_baton (cu, baton, attr); -+ baton = obstack_alloc (&cu->objfile->objfile_obstack, sizeof (*baton)); ++ ++ baton = obstack_alloc (&objfile->objfile_obstack, sizeof (*baton)); + baton->per_cu = cu->per_cu; + gdb_assert (baton->per_cu); - -- if (cu->base_known == 0) -- complaint (&symfile_complaints, -- _("Location list used without " -- "specifying the CU base address.")); ++ + /* Note that we're just copying the block's data pointer + here, not the actual data. We're still pointing into the + info_buffer for SYM's objfile; right now we never release @@ -2346,10 +1380,12 @@ Index: gdb-7.2.90.20110703/gdb/dwarf2read.c + + return baton; +} - ++ +static struct dwarf2_loclist_baton * +dwarf2_attr_to_loclist_baton (struct attribute *attr, struct dwarf2_cu *cu) -+{ + { + struct objfile *objfile = dwarf2_per_objfile->objfile; + struct dwarf2_section_info *section = cu_debug_loc_section (cu); + struct dwarf2_loclist_baton *baton; + + /* DW_AT_location of the referenced DIE may be missing if the referenced @@ -2357,22 +1393,31 @@ Index: gdb-7.2.90.20110703/gdb/dwarf2read.c + if (!attr) + return NULL; + -+ dwarf2_read_section (dwarf2_per_objfile->objfile, -+ &dwarf2_per_objfile->loc); -+ ++ dwarf2_read_section (dwarf2_per_objfile->objfile, section); + +- if (attr_form_is_section_offset (attr) + if (!(attr_form_is_section_offset (attr) -+ /* ".debug_loc" may not exist at all, or the offset may be outside -+ the section. If so, fall through to the complaint in the -+ other branch. */ -+ && DW_UNSND (attr) < dwarf2_section_size (dwarf2_per_objfile->objfile, -+ &dwarf2_per_objfile->loc))) + /* .debug_loc{,.dwo} may not exist at all, or the offset may be outside + the section. If so, fall through to the complaint in the + other branch. */ +- && DW_UNSND (attr) < dwarf2_section_size (objfile, section)) +- { +- struct dwarf2_loclist_baton *baton; ++ && DW_UNSND (attr) < dwarf2_section_size (objfile, section))) + return NULL; -+ -+ baton = obstack_alloc (&cu->objfile->objfile_obstack, + +- baton = obstack_alloc (&objfile->objfile_obstack, +- sizeof (struct dwarf2_loclist_baton)); ++ baton = obstack_alloc (&objfile->objfile_obstack, + sizeof (struct dwarf2_loclist_baton)); -+ + +- fill_in_loclist_baton (cu, baton, attr); + fill_in_loclist_baton (cu, baton, attr); -+ + +- if (cu->base_known == 0) +- complaint (&symfile_complaints, +- _("Location list used without " +- "specifying the CU base address.")); + if (cu->base_known == 0) + complaint (&symfile_complaints, + _("Location list used without " @@ -2388,7 +1433,7 @@ Index: gdb-7.2.90.20110703/gdb/dwarf2read.c + struct dwarf2_cu *cu) +{ + struct dwarf2_loclist_baton *loclist_baton; -+ + + loclist_baton = dwarf2_attr_to_loclist_baton (attr, cu); + if (loclist_baton) + { @@ -2407,7 +1452,7 @@ Index: gdb-7.2.90.20110703/gdb/dwarf2read.c + dwarf2_invalid_attrib_class_complaint ("location description", + SYMBOL_NATURAL_NAME (sym)); -- baton = obstack_alloc (&cu->objfile->objfile_obstack, +- baton = obstack_alloc (&objfile->objfile_obstack, - sizeof (struct dwarf2_locexpr_baton)); - baton->per_cu = cu->per_cu; - gdb_assert (baton->per_cu); @@ -2428,7 +1473,6 @@ Index: gdb-7.2.90.20110703/gdb/dwarf2read.c - dwarf2_invalid_attrib_class_complaint ("location description", - SYMBOL_NATURAL_NAME (sym)); - baton->size = 0; -- baton->data = NULL; - } + SYMBOL_COMPUTED_OPS (sym) = &dwarf2_missing_funcs; + SYMBOL_LOCATION_BATON (sym) = NULL; @@ -2442,8 +1486,8 @@ Index: gdb-7.2.90.20110703/gdb/dwarf2read.c } } -@@ -15145,6 +15398,25 @@ offset_and_type_eq (const void *item_lhs - return ofs_lhs->offset == ofs_rhs->offset; +@@ -16895,6 +17162,25 @@ per_cu_offset_and_type_eq (const void *item_lhs, const void *item_rhs) + && ofs_lhs->offset.sect_off == ofs_rhs->offset.sect_off); } +/* Fill in generic attributes applicable for type DIEs. */ @@ -2468,367 +1512,28 @@ Index: gdb-7.2.90.20110703/gdb/dwarf2read.c /* Set the type associated with DIE to TYPE. Save it in CU's hash table if necessary. For convenience, return TYPE. -@@ -15170,6 +15442,8 @@ set_die_type (struct die_info *die, stru +@@ -16919,6 +17205,8 @@ set_die_type (struct die_info *die, struct type *type, struct dwarf2_cu *cu) + struct dwarf2_per_cu_offset_and_type **slot, ofs; struct objfile *objfile = cu->objfile; - htab_t *type_hash_ptr; + fetch_die_type_attrs (die, type, cu); + /* For Ada types, make sure that the gnat-specific data is always initialized (if not already set). There are a few types where we should not be doing so, because the type-specific area is -Index: gdb-7.2.90.20110703/gdb/elfread.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/elfread.c 2011-05-03 18:25:20.000000000 +0200 -+++ gdb-7.2.90.20110703/gdb/elfread.c 2011-07-03 10:33:11.000000000 +0200 -@@ -43,6 +43,12 @@ - #include "infcall.h" - #include "gdbthread.h" - #include "regcache.h" -+#include "stap-probe.h" -+#include "arch-utils.h" -+#include "value.h" -+#include "infcall.h" -+#include "gdbthread.h" -+#include "regcache.h" - - extern void _initialize_elfread (void); - -@@ -61,6 +67,21 @@ struct elfinfo - asection *mdebugsect; /* Section pointer for .mdebug section */ - }; - -+/* Per-objfile data for SystemTap probe info. */ -+ -+static const struct objfile_data *stap_probe_key = NULL; -+ -+/* Per-objfile data about SystemTap probes. */ -+ -+struct stap_probe_per_objfile -+ { -+ /* The number of probes in this objfile. */ -+ int stap_num_probes; -+ -+ /* The probes themselves. */ -+ struct stap_probe *probes; -+ }; -+ - static void free_elfinfo (void *); - - /* Minimal symbols located at the GOT entries for .plt - that is the real -@@ -1553,7 +1574,266 @@ elfstab_offset_sections (struct objfile - complaint (&symfile_complaints, - _("elf/stab section information missing for %s"), filename); - } -+ -+/* Helper function that parses the information contained in a -+ SystemTap's probe. Basically, the information consists in: -+ -+ - Probe's PC address; -+ - Link-time section address of `.stapsdt.base' section; -+ - Link-time address of the semaphore variable, or ZERO if the -+ probe doesn't have an associated semaphore; -+ - Probe's provider name; -+ - Probe's name; -+ - Probe's argument format. */ -+ -+static void -+handle_probe (struct objfile *objfile, struct sdt_note *el, -+ struct stap_probe *ret, CORE_ADDR base) -+{ -+ bfd *abfd = objfile->obfd; -+ int size = bfd_get_arch_size (abfd) / 8; -+ struct gdbarch *gdbarch = get_objfile_arch (objfile); -+ struct type *ptr_type = builtin_type (gdbarch)->builtin_data_ptr; -+ CORE_ADDR base_ref; -+ -+ /* Provider and the name of the probe. */ -+ ret->provider = (const char *) &el->data[3 * size]; -+ ret->name = memchr (ret->provider, '\0', -+ (unsigned long *) el->data -+ + el->size - (unsigned long *) ret->provider); -+ /* Making sure there is a name. */ -+ if (!ret->name) -+ complaint (&symfile_complaints, _("corrupt probe when reading `%s'"), -+ objfile->name); -+ else -+ ++ret->name; -+ -+ /* Retrieving the probe's address. */ -+ ret->address = extract_typed_address ((const gdb_byte *) &el->data[0], -+ ptr_type); -+ /* Link-time sh_addr of `.stapsdt.base' section. */ -+ base_ref = extract_typed_address ((const gdb_byte *) &el->data[size], -+ ptr_type); -+ /* Semaphore address. */ -+ ret->sem_addr = extract_typed_address ((const gdb_byte *) &el->data[2 * size], -+ ptr_type); -+ -+ ret->address += (ANOFFSET (objfile->section_offsets, -+ SECT_OFF_TEXT (objfile)) -+ + base - base_ref); -+ if (ret->sem_addr) -+ ret->sem_addr += (ANOFFSET (objfile->section_offsets, -+ SECT_OFF_DATA (objfile)) -+ + base - base_ref); -+ -+ /* Arguments. We can only extract the argument format if there is a valid -+ name for this probe. */ -+ if (ret->name) -+ { -+ ret->args = memchr (ret->name, '\0', -+ (unsigned long *) el->data -+ + el->size - (unsigned long *) ret->name); -+ -+ if (ret->args++ != NULL -+ || memchr (ret->args, '\0', (unsigned long *) el->data -+ + el->size - (unsigned long *) ret->name) -+ != el->data + el->size - 1) -+ complaint (&symfile_complaints, _("corrupt probe when reading `%s'"), -+ objfile->name); -+ } -+ else -+ ret->args = NULL; -+} -+ -+/* The name of the SystemTap section where we will find information about -+ the probes. */ -+ -+#define STAP_BASE_SECTION_NAME ".stapsdt.base" -+ -+/* Helper function which tries to find the base address of the SystemTap -+ base section named STAP_BASE_SECTION_NAME. */ -+ -+static void -+get_base_address_1 (bfd *abfd, asection *sect, void *obj) -+{ -+ bfd_vma *base = (bfd_vma *) obj; -+ -+ if (*base == (bfd_vma) -1 -+ && (sect->flags & (SEC_DATA | SEC_ALLOC | SEC_HAS_CONTENTS)) -+ && sect->name && !strcmp (sect->name, STAP_BASE_SECTION_NAME)) -+ *base = sect->vma; -+} -+ -+/* Helper function which iterates over every section in the BFD file, -+ trying to find the base address of the SystemTap base section. -+ Returns the section address if found, or -1 otherwise. */ -+ -+static bfd_vma -+get_base_address (bfd *obfd) -+{ -+ bfd_vma base = (bfd_vma) -1; -+ -+ bfd_map_over_sections (obfd, get_base_address_1, (void *) &base); -+ -+ return base; -+} -+ -+/* Implementation of `sym_get_probes', as documented in symfile.h. */ -+ -+static const struct stap_probe * -+elf_get_probes (struct objfile *objfile, int *num_probes) -+{ -+ struct stap_probe *ret = NULL; -+ struct stap_probe_per_objfile *probes_per_objfile; -+ -+ /* Initially, no probes. */ -+ *num_probes = 0; -+ -+ /* Have we parsed this objfile's probes already? */ -+ probes_per_objfile -+ = (struct stap_probe_per_objfile *) objfile_data (objfile, -+ stap_probe_key); -+ -+ if (!probes_per_objfile) -+ { -+ /* If we are here, then this is the first time we are parsing the -+ probe's information. We basically have to count how many probes -+ the objfile has, and then fill in the necessary information -+ for each one. */ -+ -+ bfd *obfd = objfile->obfd; -+ bfd_vma base = get_base_address (obfd); -+ struct sdt_note *iter; -+ int i; -+ int n = 0; -+ -+ if (! elf_tdata (obfd)->sdt_note_head) -+ /* There isn't any probe here. */ -+ return NULL; -+ -+ /* Allocating space for probe info. */ -+ for (iter = elf_tdata (obfd)->sdt_note_head; -+ iter; -+ iter = iter->next, ++n); -+ -+ ret = xcalloc (n, sizeof (struct stap_probe)); -+ -+ /* Parsing each probe's information. */ -+ for (iter = elf_tdata (obfd)->sdt_note_head, i = 0; -+ iter; -+ iter = iter->next, i++) -+ /* We first have to handle all the information about the -+ probe which is present in the section. */ -+ handle_probe (objfile, iter, &ret[i], base); -+ -+ /* Creating a cache for these probes in the objfile's registry. */ -+ probes_per_objfile = xmalloc (sizeof (struct stap_probe_per_objfile)); -+ -+ probes_per_objfile->stap_num_probes = n; -+ probes_per_objfile->probes = ret; -+ -+ set_objfile_data (objfile, stap_probe_key, probes_per_objfile); -+ } -+ else -+ ret = probes_per_objfile->probes; -+ -+ *num_probes = probes_per_objfile->stap_num_probes; -+ -+ return ret; -+} -+ -+/* Implementation of `sym_get_probe_argument_count', as documented in -+ symfile.h. */ -+ -+static int -+elf_get_probe_argument_count (struct objfile *objfile, -+ const struct stap_probe *probe) -+{ -+ const char *pargs = probe->args; -+ -+ if (!pargs || !*pargs || *pargs == ':') -+ /* No arguments. */ -+ return 0; -+ -+ return stap_get_probe_argument_count (probe); -+} -+ -+/* Implementation of `sym_evaluate_probe_argument', as documented in -+ symfile.h. */ -+ -+static struct value * -+elf_evaluate_probe_argument (struct objfile *objfile, -+ const struct stap_probe *probe, -+ struct frame_info *frame, -+ int n) -+{ -+ return stap_evaluate_probe_argument (objfile, probe, frame, n); -+} -+ -+/* Implementation of `sym_compile_to_ax', as documented in symfile.h. */ -+ -+static void -+elf_compile_to_ax (struct objfile *objfile, -+ const struct stap_probe *probe, -+ struct agent_expr *expr, -+ struct axs_value *value, -+ int n) -+{ -+ stap_compile_to_ax (objfile, probe, expr, value, n); -+} -+ -+/* Implementation of `sym_relocate_probe', as documented in symfile.h. */ -+ -+static void -+elf_symfile_relocate_probe (struct objfile *objfile, -+ struct section_offsets *new_offsets, -+ struct section_offsets *delta) -+{ -+ int i; -+ struct stap_probe_per_objfile *p -+ = (struct stap_probe_per_objfile *) objfile_data (objfile, -+ stap_probe_key); -+ -+ if (!p) -+ /* No probe to relocate. */ -+ return; -+ -+ for (i = 0; i < p->stap_num_probes; i++) -+ { -+ p->probes[i].address += ANOFFSET (delta, SECT_OFF_TEXT (objfile)); -+ if (p->probes[i].sem_addr) -+ p->probes[i].sem_addr += ANOFFSET (delta, SECT_OFF_DATA (objfile)); -+ } -+} -+ -+/* Helper function used to free the space allocated for storing SystemTap -+ probe information. */ -+ -+static void -+stap_probe_key_free (struct objfile *objfile, void *d) -+{ -+ int i; -+ struct stap_probe_per_objfile *data = (struct stap_probe_per_objfile *) d; -+ -+ for (i = 0; i < data->stap_num_probes; i++) -+ stap_free_parsed_args (data->probes[i].parsed_args); -+ xfree (data->probes); -+ xfree (data); -+} -+ - -+ -+/* Implementation `sym_probe_fns', as documented in symfile.h. */ -+ -+static const struct sym_probe_fns elf_probe_fns = -+{ -+ elf_get_probes, /* sym_get_probes */ -+ elf_get_probe_argument_count, /* sym_get_probe_argument_count */ -+ elf_evaluate_probe_argument, /* sym_evaluate_probe_argument */ -+ elf_compile_to_ax, /* sym_compile_to_ax */ -+ elf_symfile_relocate_probe, /* sym_relocate_probe */ -+}; -+ - /* Register that we are able to handle ELF object file formats. */ - - static const struct sym_fns elf_sym_fns = -@@ -1568,6 +1848,7 @@ static const struct sym_fns elf_sym_fns - elf_symfile_segments, /* Get segment information from a file. */ - NULL, - default_symfile_relocate, /* Relocate a debug section. */ -+ &elf_probe_fns, /* sym_probe_fns */ - &psym_functions - }; - -@@ -1586,6 +1867,7 @@ static const struct sym_fns elf_sym_fns_ - elf_symfile_segments, /* Get segment information from a file. */ - NULL, - default_symfile_relocate, /* Relocate a debug section. */ -+ &elf_probe_fns, /* sym_probe_fns */ - &psym_functions - }; - -@@ -1603,6 +1885,7 @@ static const struct sym_fns elf_sym_fns_ - elf_symfile_segments, /* Get segment information from a file. */ - NULL, - default_symfile_relocate, /* Relocate a debug section. */ -+ &elf_probe_fns, /* sym_probe_fns */ - &dwarf2_gdb_index_functions - }; - -@@ -1619,6 +1902,8 @@ static const struct gnu_ifunc_fns elf_gn - void - _initialize_elfread (void) - { -+ stap_probe_key -+ = register_objfile_data_with_cleanup (NULL, stap_probe_key_free); - add_symtab_fns (&elf_sym_fns); - - elf_objfile_gnu_ifunc_cache_data = register_objfile_data (); -Index: gdb-7.2.90.20110703/gdb/eval.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/eval.c 2011-03-28 22:21:03.000000000 +0200 -+++ gdb-7.2.90.20110703/gdb/eval.c 2011-07-03 10:33:11.000000000 +0200 -@@ -44,6 +44,7 @@ +diff --git a/gdb/eval.c b/gdb/eval.c +index 7f1dfac..52462bc 100644 +--- a/gdb/eval.c ++++ b/gdb/eval.c +@@ -41,6 +41,7 @@ + #include "gdb_obstack.h" #include "objfiles.h" #include "python/python.h" - #include "wrapper.h" +#include "dwarf2loc.h" #include "gdb_assert.h" -@@ -489,27 +490,217 @@ init_array_element (struct value *array, +@@ -500,27 +501,217 @@ init_array_element (struct value *array, struct value *element, } static struct value * @@ -2843,11 +1548,12 @@ Index: gdb-7.2.90.20110703/gdb/eval.c - enum f90_range_type range_type = longest_to_int (exp->elts[pc].longconst); - - *pos += 3; -+ /* Type to use for the newly allocated value ARRAY. */ -+ struct type *new_array_type; - +- - if (range_type == LOW_BOUND_DEFAULT || range_type == BOTH_BOUND_DEFAULT) - low_bound = TYPE_LOW_BOUND (range); ++ /* Type to use for the newly allocated value ARRAY. */ ++ struct type *new_array_type; ++ + /* Type being iterated for each dimension. */ + struct type *type, *type_last_target; + @@ -3044,13 +1750,13 @@ Index: gdb-7.2.90.20110703/gdb/eval.c + VALUE_FRAME_ID (array) = VALUE_FRAME_ID (saved_array); + if (VALUE_LVAL (array) != lval_internalvar) + set_value_address (array, value_byte_address + value_byte_offset); - -- return value_slice (array, low_bound, high_bound - low_bound + 1); ++ + if (!value_lazy (saved_array)) + { + allocate_value_contents (array); + set_value_lazy (array, 0); -+ + +- return value_slice (array, low_bound, high_bound - low_bound + 1); + memcpy (value_contents_writeable (array), + value_contents (saved_array) + value_byte_offset, + TYPE_LENGTH (new_array_type)); @@ -3061,7 +1767,7 @@ Index: gdb-7.2.90.20110703/gdb/eval.c } -@@ -790,6 +981,7 @@ evaluate_subexp_standard (struct type *e +@@ -801,6 +992,7 @@ evaluate_subexp_standard (struct type *expect_type, int save_pos1; struct symbol *function = NULL; char *function_name = NULL; @@ -3069,7 +1775,7 @@ Index: gdb-7.2.90.20110703/gdb/eval.c pc = (*pos)++; op = exp->elts[pc].opcode; -@@ -1862,6 +2054,8 @@ evaluate_subexp_standard (struct type *e +@@ -1875,6 +2067,8 @@ evaluate_subexp_standard (struct type *expect_type, /* First determine the type code we are dealing with. */ arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); @@ -3078,7 +1784,7 @@ Index: gdb-7.2.90.20110703/gdb/eval.c type = check_typedef (value_type (arg1)); code = TYPE_CODE (type); -@@ -1882,23 +2076,13 @@ evaluate_subexp_standard (struct type *e +@@ -1895,23 +2089,13 @@ evaluate_subexp_standard (struct type *expect_type, code = TYPE_CODE (type); } } @@ -3104,7 +1810,7 @@ Index: gdb-7.2.90.20110703/gdb/eval.c case TYPE_CODE_PTR: case TYPE_CODE_FUNC: -@@ -2337,49 +2521,6 @@ evaluate_subexp_standard (struct type *e +@@ -2344,49 +2528,6 @@ evaluate_subexp_standard (struct type *expect_type, } return (arg1); @@ -3154,7 +1860,7 @@ Index: gdb-7.2.90.20110703/gdb/eval.c case BINOP_LOGICAL_AND: arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); if (noside == EVAL_SKIP) -@@ -2611,15 +2752,23 @@ evaluate_subexp_standard (struct type *e +@@ -2618,15 +2759,23 @@ evaluate_subexp_standard (struct type *expect_type, if (expect_type && TYPE_CODE (expect_type) == TYPE_CODE_PTR) expect_type = TYPE_TARGET_TYPE (check_typedef (expect_type)); arg1 = evaluate_subexp (expect_type, exp, pos, noside); @@ -3180,7 +1886,7 @@ Index: gdb-7.2.90.20110703/gdb/eval.c else if (noside == EVAL_AVOID_SIDE_EFFECTS) { type = check_typedef (value_type (arg1)); -@@ -2628,12 +2777,18 @@ evaluate_subexp_standard (struct type *e +@@ -2635,12 +2784,18 @@ evaluate_subexp_standard (struct type *expect_type, /* In C you can dereference an array to get the 1st elt. */ || TYPE_CODE (type) == TYPE_CODE_ARRAY ) @@ -3204,7 +1910,7 @@ Index: gdb-7.2.90.20110703/gdb/eval.c else error (_("Attempt to take contents of a non-pointer value.")); } -@@ -2643,9 +2798,14 @@ evaluate_subexp_standard (struct type *e +@@ -2650,9 +2805,14 @@ evaluate_subexp_standard (struct type *expect_type, do. "long long" variables are rare enough that BUILTIN_TYPE_LONGEST would seem to be a mistake. */ if (TYPE_CODE (type) == TYPE_CODE_INT) @@ -3222,7 +1928,7 @@ Index: gdb-7.2.90.20110703/gdb/eval.c case UNOP_ADDR: /* C++: check for and handle pointer to members. */ -@@ -2991,7 +3151,7 @@ evaluate_subexp_with_coercion (struct ex +@@ -2994,7 +3154,7 @@ evaluate_subexp_with_coercion (struct expression *exp, { enum exp_opcode op; int pc; @@ -3231,7 +1937,7 @@ Index: gdb-7.2.90.20110703/gdb/eval.c struct symbol *var; struct type *type; -@@ -3002,13 +3162,18 @@ evaluate_subexp_with_coercion (struct ex +@@ -3005,13 +3165,18 @@ evaluate_subexp_with_coercion (struct expression *exp, { case OP_VAR_VALUE: var = exp->elts[pc + 2].symbol; @@ -3251,7 +1957,7 @@ Index: gdb-7.2.90.20110703/gdb/eval.c return value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (type)), val); } -@@ -3060,9 +3225,13 @@ evaluate_subexp_for_sizeof (struct expre +@@ -3063,9 +3228,13 @@ evaluate_subexp_for_sizeof (struct expression *exp, int *pos) case OP_VAR_VALUE: (*pos) += 4; @@ -3268,7 +1974,7 @@ Index: gdb-7.2.90.20110703/gdb/eval.c default: val = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS); -@@ -3093,18 +3262,25 @@ parse_and_eval_type (char *p, int length +@@ -3096,18 +3265,25 @@ parse_and_eval_type (char *p, int length) int calc_f77_array_dims (struct type *array_type) { @@ -3304,11 +2010,11 @@ Index: gdb-7.2.90.20110703/gdb/eval.c - return ndimen; + } -Index: gdb-7.2.90.20110703/gdb/f-exp.y -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/f-exp.y 2011-03-18 14:51:41.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/f-exp.y 2011-07-03 10:33:11.000000000 +0200 -@@ -293,7 +293,9 @@ arglist : subrange +diff --git a/gdb/f-exp.y b/gdb/f-exp.y +index 33c7418..4db1bfa 100644 +--- a/gdb/f-exp.y ++++ b/gdb/f-exp.y +@@ -298,7 +298,9 @@ arglist : subrange { arglist_len = 1; } ; @@ -3319,11 +2025,11 @@ Index: gdb-7.2.90.20110703/gdb/f-exp.y { arglist_len++; } ; -Index: gdb-7.2.90.20110703/gdb/f-lang.h -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/f-lang.h 2011-01-07 20:36:16.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/f-lang.h 2011-07-03 10:33:11.000000000 +0200 -@@ -28,6 +28,10 @@ extern void f_error (char *); /* Defined +diff --git a/gdb/f-lang.h b/gdb/f-lang.h +index 4aae3c5..51a4e1e 100644 +--- a/gdb/f-lang.h ++++ b/gdb/f-lang.h +@@ -28,6 +28,10 @@ extern void f_error (char *); /* Defined in f-exp.y */ extern void f_print_type (struct type *, const char *, struct ui_file *, int, int); @@ -3331,14 +2037,14 @@ Index: gdb-7.2.90.20110703/gdb/f-lang.h + (struct type *type, struct ui_file *stream); +extern void f_object_address_data_valid_or_error (struct type *type); + - extern int f_val_print (struct type *, const gdb_byte *, int, CORE_ADDR, - struct ui_file *, int, - const struct value *, -Index: gdb-7.2.90.20110703/gdb/f-typeprint.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/f-typeprint.c 2011-01-07 20:36:16.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/f-typeprint.c 2011-07-03 10:33:11.000000000 +0200 -@@ -32,7 +32,7 @@ + extern void f_val_print (struct type *, const gdb_byte *, int, CORE_ADDR, + struct ui_file *, int, + const struct value *, +diff --git a/gdb/f-typeprint.c b/gdb/f-typeprint.c +index a95ef84..830917d 100644 +--- a/gdb/f-typeprint.c ++++ b/gdb/f-typeprint.c +@@ -31,7 +31,7 @@ #include "gdbcore.h" #include "target.h" #include "f-lang.h" @@ -3347,7 +2053,7 @@ Index: gdb-7.2.90.20110703/gdb/f-typeprint.c #include "gdb_string.h" #include -@@ -49,6 +49,34 @@ void f_type_print_varspec_prefix (struct +@@ -48,6 +48,34 @@ void f_type_print_varspec_prefix (struct type *, struct ui_file *, void f_type_print_base (struct type *, struct ui_file *, int, int); @@ -3382,7 +2088,7 @@ Index: gdb-7.2.90.20110703/gdb/f-typeprint.c /* LEVEL is the depth to indent lines by. */ void -@@ -58,6 +86,9 @@ f_print_type (struct type *type, const c +@@ -57,6 +85,9 @@ f_print_type (struct type *type, const char *varstring, struct ui_file *stream, enum type_code code; int demangled_args; @@ -3392,7 +2098,7 @@ Index: gdb-7.2.90.20110703/gdb/f-typeprint.c f_type_print_base (type, stream, show, level); code = TYPE_CODE (type); if ((varstring != NULL && *varstring != '\0') -@@ -165,6 +196,9 @@ f_type_print_varspec_suffix (struct type +@@ -164,6 +195,9 @@ f_type_print_varspec_suffix (struct type *type, struct ui_file *stream, QUIT; @@ -3402,11 +2108,11 @@ Index: gdb-7.2.90.20110703/gdb/f-typeprint.c switch (TYPE_CODE (type)) { case TYPE_CODE_ARRAY: -Index: gdb-7.2.90.20110703/gdb/f-valprint.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/f-valprint.c 2011-02-07 18:49:32.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/f-valprint.c 2011-07-03 10:33:11.000000000 +0200 -@@ -54,15 +54,17 @@ int f77_array_offset_tbl[MAX_FORTRAN_DIM +diff --git a/gdb/f-valprint.c b/gdb/f-valprint.c +index 8b84b5a..4b240a3 100644 +--- a/gdb/f-valprint.c ++++ b/gdb/f-valprint.c +@@ -54,15 +54,17 @@ int f77_array_offset_tbl[MAX_FORTRAN_DIMS + 1][2]; /* The following macro gives us the size of the nth dimension, Where n is 1 based. */ @@ -3450,7 +2156,7 @@ Index: gdb-7.2.90.20110703/gdb/f-valprint.c } return TYPE_ARRAY_UPPER_BOUND_VALUE (type); -@@ -135,24 +140,29 @@ f77_create_arrayprint_offset_tbl (struct +@@ -135,24 +140,29 @@ f77_create_arrayprint_offset_tbl (struct type *type, struct ui_file *stream) upper = f77_get_upperbound (tmp_type); lower = f77_get_lowerbound (tmp_type); @@ -3486,7 +2192,7 @@ Index: gdb-7.2.90.20110703/gdb/f-valprint.c } } -@@ -174,37 +184,35 @@ f77_print_array_1 (int nss, int ndimensi +@@ -174,37 +184,35 @@ f77_print_array_1 (int nss, int ndimensions, struct type *type, if (nss != ndimensions) { @@ -3531,43 +2237,41 @@ Index: gdb-7.2.90.20110703/gdb/f-valprint.c fprintf_filtered (stream, "..."); } } -@@ -260,6 +268,9 @@ f_val_print (struct type *type, const gd +@@ -270,6 +278,9 @@ f_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset, CORE_ADDR addr; int index; + if (f_object_address_data_valid_print_to_stream (type, stream) != NULL) -+ return 0; ++ return; + CHECK_TYPEDEF (type); switch (TYPE_CODE (type)) { -Index: gdb-7.2.90.20110703/gdb/findvar.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/findvar.c 2011-03-18 19:42:41.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/findvar.c 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/findvar.c b/gdb/findvar.c +index ed7903c..e412a3d 100644 +--- a/gdb/findvar.c ++++ b/gdb/findvar.c @@ -35,6 +35,7 @@ - #include "user-regs.h" #include "block.h" #include "objfiles.h" + #include "language.h" +#include "dwarf2loc.h" /* Basic byte-swapping routines. All 'extract' functions return a host-format integer from a target-format integer at ADDR which is -@@ -408,8 +409,11 @@ symbol_read_needs_frame (struct symbol * +@@ -407,7 +408,10 @@ symbol_read_needs_frame (struct symbol *sym) + } - /* Given a struct symbol for a variable, - and a stack frame id, read the value of the variable -- and return a (pointer to a) struct value containing the value. -- If the variable cannot be found, return a zero pointer. */ -+ and return a (pointer to a) struct value containing the value. -+ If the variable cannot be found, return a zero pointer. + /* A default implementation for the "la_read_var_value" hook in +- the language vector which should work in most situations. */ ++ the language vector which should work in most situations. + We have to first find the address of the variable before allocating struct -+ value to return as its size may depend on DW_OP_PUSH_OBJECT_ADDRESS possibly ++ value to return as its size may depend on DW_OP_PUSH_OBJECT_ADDRESS possibly + used by its type. */ struct value * - read_var_value (struct symbol *var, struct frame_info *frame) -@@ -417,16 +421,6 @@ read_var_value (struct symbol *var, stru + default_read_var_value (struct symbol *var, struct frame_info *frame) +@@ -415,16 +419,6 @@ default_read_var_value (struct symbol *var, struct frame_info *frame) struct value *v; struct type *type = SYMBOL_TYPE (var); CORE_ADDR addr; @@ -3584,7 +2288,7 @@ Index: gdb-7.2.90.20110703/gdb/findvar.c if (symbol_read_needs_frame (var)) gdb_assert (frame); -@@ -436,7 +430,7 @@ read_var_value (struct symbol *var, stru +@@ -434,7 +428,7 @@ default_read_var_value (struct symbol *var, struct frame_info *frame) case LOC_CONST: /* Put the constant back in target format. */ v = allocate_value (type); @@ -3593,7 +2297,7 @@ Index: gdb-7.2.90.20110703/gdb/findvar.c gdbarch_byte_order (get_type_arch (type)), (LONGEST) SYMBOL_VALUE (var)); VALUE_LVAL (v) = not_lval; -@@ -461,12 +455,12 @@ read_var_value (struct symbol *var, stru +@@ -459,12 +453,12 @@ default_read_var_value (struct symbol *var, struct frame_info *frame) case LOC_CONST_BYTES: v = allocate_value (type); @@ -3608,15 +2312,15 @@ Index: gdb-7.2.90.20110703/gdb/findvar.c if (overlay_debugging) addr = symbol_overlayed_address (SYMBOL_VALUE_ADDRESS (var), SYMBOL_OBJ_SECTION (var)); -@@ -479,7 +473,6 @@ read_var_value (struct symbol *var, stru - if (!addr) - return 0; +@@ -478,7 +472,6 @@ default_read_var_value (struct symbol *var, struct frame_info *frame) + error (_("Unknown argument list address for `%s'."), + SYMBOL_PRINT_NAME (var)); addr += SYMBOL_VALUE (var); - v = allocate_value_lazy (type); break; case LOC_REF_ARG: -@@ -493,14 +486,12 @@ read_var_value (struct symbol *var, stru +@@ -493,14 +486,12 @@ default_read_var_value (struct symbol *var, struct frame_info *frame) argref += SYMBOL_VALUE (var); ref = value_at (lookup_pointer_type (type), argref); addr = value_as_address (ref); @@ -3631,7 +2335,7 @@ Index: gdb-7.2.90.20110703/gdb/findvar.c break; case LOC_TYPEDEF: -@@ -508,7 +499,6 @@ read_var_value (struct symbol *var, stru +@@ -509,7 +500,6 @@ default_read_var_value (struct symbol *var, struct frame_info *frame) break; case LOC_BLOCK: @@ -3639,15 +2343,15 @@ Index: gdb-7.2.90.20110703/gdb/findvar.c if (overlay_debugging) addr = symbol_overlayed_address (BLOCK_START (SYMBOL_BLOCK_VALUE (var)), SYMBOL_OBJ_SECTION (var)); -@@ -533,7 +523,6 @@ read_var_value (struct symbol *var, stru - error (_("Value of register variable not available.")); +@@ -535,7 +525,6 @@ default_read_var_value (struct symbol *var, struct frame_info *frame) + SYMBOL_PRINT_NAME (var)); addr = value_as_address (regval); - v = allocate_value_lazy (type); } else { -@@ -572,7 +561,6 @@ read_var_value (struct symbol *var, stru +@@ -583,7 +572,6 @@ default_read_var_value (struct symbol *var, struct frame_info *frame) if (obj_section && (obj_section->the_bfd_section->flags & SEC_THREAD_LOCAL) != 0) addr = target_translate_tls_address (obj_section->objfile, addr); @@ -3655,7 +2359,7 @@ Index: gdb-7.2.90.20110703/gdb/findvar.c } break; -@@ -587,6 +575,10 @@ read_var_value (struct symbol *var, stru +@@ -596,6 +584,10 @@ default_read_var_value (struct symbol *var, struct frame_info *frame) break; } @@ -3666,22 +2370,21 @@ Index: gdb-7.2.90.20110703/gdb/findvar.c VALUE_LVAL (v) = lval_memory; set_value_address (v, addr); return v; -@@ -626,11 +618,12 @@ struct value * +@@ -691,10 +683,11 @@ struct value * value_from_register (struct type *type, int regnum, struct frame_info *frame) { struct gdbarch *gdbarch = get_frame_arch (frame); - struct type *type1 = check_typedef (type); struct value *v; - int optim, unavail, ok; - if (gdbarch_convert_register_p (gdbarch, regnum, type1)) + type = check_typedef (type); + + if (gdbarch_convert_register_p (gdbarch, regnum, type)) { - /* The ISA/ABI need to something weird when obtaining the - specified value from this register. It might need to -@@ -643,7 +636,7 @@ value_from_register (struct type *type, + int optim, unavail, ok; + +@@ -709,7 +702,7 @@ value_from_register (struct type *type, int regnum, struct frame_info *frame) VALUE_LVAL (v) = lval_register; VALUE_FRAME_ID (v) = get_frame_id (frame); VALUE_REGNUM (v) = regnum; @@ -3689,11 +2392,11 @@ Index: gdb-7.2.90.20110703/gdb/findvar.c + ok = gdbarch_register_to_value (gdbarch, frame, regnum, type, value_contents_raw (v), &optim, &unavail); - } -Index: gdb-7.2.90.20110703/gdb/gdbinit.in -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/gdbinit.in 2009-10-05 15:46:52.000000000 +0200 -+++ gdb-7.2.90.20110703/gdb/gdbinit.in 2011-07-03 10:33:11.000000000 +0200 + +diff --git a/gdb/gdb-gdb.gdb.in b/gdb/gdb-gdb.gdb.in +index ffb7f53..a2e7e94 100644 +--- a/gdb/gdb-gdb.gdb.in ++++ b/gdb/gdb-gdb.gdb.in @@ -1,5 +1,15 @@ echo Setting up the environment for debugging gdb.\n @@ -3710,21 +2413,21 @@ Index: gdb-7.2.90.20110703/gdb/gdbinit.in set complaints 1 b internal_error -Index: gdb-7.2.90.20110703/gdb/gdbtypes.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/gdbtypes.c 2011-03-28 22:21:03.000000000 +0200 -+++ gdb-7.2.90.20110703/gdb/gdbtypes.c 2011-07-03 10:33:11.000000000 +0200 -@@ -39,6 +39,9 @@ - #include "cp-abi.h" +diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c +index e3db1ed..9a346e6 100644 +--- a/gdb/gdbtypes.c ++++ b/gdb/gdbtypes.c +@@ -37,6 +37,9 @@ #include "gdb_assert.h" #include "hashtab.h" + #include "exceptions.h" +#include "observer.h" +#include "dwarf2expr.h" +#include "dwarf2loc.h" - /* Initialize BADNESS constants. */ -@@ -144,7 +147,16 @@ static void print_bit_vector (B_TYPE *, + +@@ -141,7 +144,16 @@ static void print_bit_vector (B_TYPE *, int); static void print_arg_types (struct field *, int, int); static void dump_fn_fieldlists (struct type *, int); static void print_cplus_stuff (struct type *, int); @@ -3741,7 +2444,7 @@ Index: gdb-7.2.90.20110703/gdb/gdbtypes.c /* Allocate a new OBJFILE-associated type structure and fill it with some defaults. Space for the type structure is allocated -@@ -175,6 +187,43 @@ alloc_type (struct objfile *objfile) +@@ -172,6 +184,43 @@ alloc_type (struct objfile *objfile) return type; } @@ -3785,7 +2488,7 @@ Index: gdb-7.2.90.20110703/gdb/gdbtypes.c /* Allocate a new GDBARCH-associated type structure and fill it with some defaults. Space for the type structure is allocated on the heap. */ -@@ -300,7 +349,7 @@ make_pointer_type (struct type *type, st +@@ -297,7 +346,7 @@ make_pointer_type (struct type *type, struct type **typeptr) if (typeptr == 0 || *typeptr == 0) /* We'll need to allocate one. */ { @@ -3794,7 +2497,7 @@ Index: gdb-7.2.90.20110703/gdb/gdbtypes.c if (typeptr) *typeptr = ntype; } -@@ -377,7 +426,7 @@ make_reference_type (struct type *type, +@@ -374,7 +423,7 @@ make_reference_type (struct type *type, struct type **typeptr) if (typeptr == 0 || *typeptr == 0) /* We'll need to allocate one. */ { @@ -3803,7 +2506,7 @@ Index: gdb-7.2.90.20110703/gdb/gdbtypes.c if (typeptr) *typeptr = ntype; } -@@ -748,6 +797,7 @@ create_range_type (struct type *result_t +@@ -747,6 +796,7 @@ create_range_type (struct type *result_type, struct type *index_type, TYPE_ZALLOC (result_type, sizeof (struct range_bounds)); TYPE_LOW_BOUND (result_type) = low_bound; TYPE_HIGH_BOUND (result_type) = high_bound; @@ -3811,7 +2514,7 @@ Index: gdb-7.2.90.20110703/gdb/gdbtypes.c if (low_bound >= 0) TYPE_UNSIGNED (result_type) = 1; -@@ -891,26 +941,31 @@ create_array_type (struct type *result_t +@@ -890,26 +940,31 @@ create_array_type (struct type *result_type, TYPE_CODE (result_type) = TYPE_CODE_ARRAY; TYPE_TARGET_TYPE (result_type) = element_type; @@ -3856,7 +2559,7 @@ Index: gdb-7.2.90.20110703/gdb/gdbtypes.c return result_type; } -@@ -1413,6 +1468,105 @@ stub_noname_complaint (void) +@@ -1431,6 +1486,105 @@ stub_noname_complaint (void) complaint (&symfile_complaints, _("stub type has NULL name")); } @@ -3893,7 +2596,7 @@ Index: gdb-7.2.90.20110703/gdb/gdbtypes.c + /* It may happen for wrong DWARF annotations returning garbage data. */ + if (count < 0) + warning (_("Range for type %s has invalid bounds %s..%s"), -+ TYPE_NAME (type), plongest (TYPE_LOW_BOUND (range_type)), ++ TYPE_ERROR_NAME (type), plongest (TYPE_LOW_BOUND (range_type)), + plongest (TYPE_HIGH_BOUND (range_type))); + /* The code below does not handle count == 0 right. */ + if (count <= 0) @@ -3962,7 +2665,7 @@ Index: gdb-7.2.90.20110703/gdb/gdbtypes.c /* Find the real type of TYPE. This function returns the real type, after removing all layers of typedefs, and completing opaque or stub types. Completion changes the TYPE argument, but stripping of -@@ -1575,52 +1729,37 @@ check_typedef (struct type *type) +@@ -1597,52 +1751,37 @@ check_typedef (struct type *type) } } @@ -4036,7 +2739,7 @@ Index: gdb-7.2.90.20110703/gdb/gdbtypes.c TYPE_TARGET_STUB (type) = 0; } else if (TYPE_CODE (type) == TYPE_CODE_RANGE) -@@ -1628,6 +1767,7 @@ check_typedef (struct type *type) +@@ -1650,6 +1789,7 @@ check_typedef (struct type *type) TYPE_LENGTH (type) = TYPE_LENGTH (target_type); TYPE_TARGET_STUB (type) = 0; } @@ -4044,7 +2747,7 @@ Index: gdb-7.2.90.20110703/gdb/gdbtypes.c } type = make_qualified_type (type, instance_flags, NULL); -@@ -3266,33 +3406,42 @@ type_pair_eq (const void *item_lhs, cons +@@ -3308,33 +3448,42 @@ type_pair_eq (const void *item_lhs, const void *item_rhs) } /* Allocate the hash table used by copy_type_recursive to walk @@ -4102,7 +2805,7 @@ Index: gdb-7.2.90.20110703/gdb/gdbtypes.c return type; /* This type shouldn't be pointing to any types in other objfiles; -@@ -3307,9 +3456,10 @@ copy_type_recursive (struct objfile *obj +@@ -3349,9 +3498,10 @@ copy_type_recursive (struct objfile *objfile, new_type = alloc_type_arch (get_type_arch (type)); /* We must add the new type to the hash table immediately, in case @@ -4116,7 +2819,7 @@ Index: gdb-7.2.90.20110703/gdb/gdbtypes.c stored->old = type; stored->new = new_type; *slot = stored; -@@ -3320,6 +3470,21 @@ copy_type_recursive (struct objfile *obj +@@ -3362,6 +3512,21 @@ copy_type_recursive (struct objfile *objfile, TYPE_OBJFILE_OWNED (new_type) = 0; TYPE_OWNER (new_type).gdbarch = get_type_arch (type); @@ -4138,7 +2841,7 @@ Index: gdb-7.2.90.20110703/gdb/gdbtypes.c if (TYPE_NAME (type)) TYPE_NAME (new_type) = xstrdup (TYPE_NAME (type)); if (TYPE_TAG_NAME (type)) -@@ -3328,12 +3493,48 @@ copy_type_recursive (struct objfile *obj +@@ -3370,12 +3535,48 @@ copy_type_recursive (struct objfile *objfile, TYPE_INSTANCE_FLAGS (new_type) = TYPE_INSTANCE_FLAGS (type); TYPE_LENGTH (new_type) = TYPE_LENGTH (type); @@ -4187,7 +2890,7 @@ Index: gdb-7.2.90.20110703/gdb/gdbtypes.c TYPE_FIELDS (new_type) = XCALLOC (nfields, struct field); for (i = 0; i < nfields; i++) { -@@ -3342,8 +3543,8 @@ copy_type_recursive (struct objfile *obj +@@ -3384,8 +3585,8 @@ copy_type_recursive (struct objfile *objfile, TYPE_FIELD_BITSIZE (new_type, i) = TYPE_FIELD_BITSIZE (type, i); if (TYPE_FIELD_TYPE (type, i)) TYPE_FIELD_TYPE (new_type, i) @@ -4198,7 +2901,7 @@ Index: gdb-7.2.90.20110703/gdb/gdbtypes.c if (TYPE_FIELD_NAME (type, i)) TYPE_FIELD_NAME (new_type, i) = xstrdup (TYPE_FIELD_NAME (type, i)); -@@ -3370,24 +3571,184 @@ copy_type_recursive (struct objfile *obj +@@ -3416,24 +3617,184 @@ copy_type_recursive (struct objfile *objfile, } } @@ -4390,7 +3093,7 @@ Index: gdb-7.2.90.20110703/gdb/gdbtypes.c /* Maybe copy the type_specific bits. NOTE drow/2005-12-09: We do not copy the C++-specific bits like -@@ -3404,6 +3765,17 @@ copy_type_recursive (struct objfile *obj +@@ -3450,6 +3811,17 @@ copy_type_recursive (struct objfile *objfile, return new_type; } @@ -4408,7 +3111,7 @@ Index: gdb-7.2.90.20110703/gdb/gdbtypes.c /* Make a copy of the given TYPE, except that the pointer & reference types are not preserved. -@@ -3426,6 +3798,201 @@ copy_type (const struct type *type) +@@ -3472,6 +3844,201 @@ copy_type (const struct type *type) return new_type; } @@ -4610,7 +3313,7 @@ Index: gdb-7.2.90.20110703/gdb/gdbtypes.c /* Helper functions to initialize architecture-specific types. */ -@@ -3955,6 +4522,13 @@ void +@@ -4005,6 +4572,13 @@ void _initialize_gdbtypes (void) { gdbtypes_data = gdbarch_data_register_post_init (gdbtypes_post_init); @@ -4624,11 +3327,11 @@ Index: gdb-7.2.90.20110703/gdb/gdbtypes.c objfile_type_data = register_objfile_data (); add_setshow_zinteger_cmd ("overload", no_class, &overload_debug, -Index: gdb-7.2.90.20110703/gdb/gdbtypes.h -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/gdbtypes.h 2011-03-28 22:21:03.000000000 +0200 -+++ gdb-7.2.90.20110703/gdb/gdbtypes.h 2011-07-03 10:33:11.000000000 +0200 -@@ -215,6 +215,11 @@ enum type_instance_flag_value +diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h +index 887dfdb..6e972d1 100644 +--- a/gdb/gdbtypes.h ++++ b/gdb/gdbtypes.h +@@ -213,6 +213,11 @@ enum type_instance_flag_value #define TYPE_TARGET_STUB(t) (TYPE_MAIN_TYPE (t)->flag_target_stub) @@ -4640,9 +3343,9 @@ Index: gdb-7.2.90.20110703/gdb/gdbtypes.h /* Static type. If this is set, the corresponding type had a static modifier. Note: This may be unnecessary, since static data members -@@ -292,6 +297,50 @@ enum type_instance_flag_value +@@ -296,6 +301,50 @@ enum type_instance_flag_value - #define TYPE_DECLARED_CLASS(t) (TYPE_MAIN_TYPE (t)->flag_declared_class) + #define TYPE_FLAG_ENUM(t) (TYPE_MAIN_TYPE (t)->flag_flag_enum) +#if 0 +/* Define this type as being reclaimable during free_all_types. Type is @@ -4691,7 +3394,7 @@ Index: gdb-7.2.90.20110703/gdb/gdbtypes.h /* Constant type. If this is set, the corresponding type has a const modifier. */ -@@ -400,6 +449,15 @@ struct main_type +@@ -406,6 +455,15 @@ struct main_type /* True if this type was declared with "class" rather than "struct". */ unsigned int flag_declared_class : 1; @@ -4705,9 +3408,9 @@ Index: gdb-7.2.90.20110703/gdb/gdbtypes.h + unsigned int flag_not_associated : 1; + unsigned int flag_data_location_is_addr : 1; - /* A discriminant telling us which field of the type_specific union - is being used for this type, if any. */ -@@ -473,6 +531,20 @@ struct main_type + /* True if this is an enum type with disjoint values. This affects + how the enum is printed. */ +@@ -486,6 +544,20 @@ struct main_type struct type *target_type; @@ -4728,7 +3431,7 @@ Index: gdb-7.2.90.20110703/gdb/gdbtypes.h /* For structure and union types, a description of each field. For set and pascal array types, there is one "field", whose type is the domain type of the set or array. -@@ -547,13 +619,34 @@ struct main_type +@@ -568,13 +640,34 @@ struct main_type struct range_bounds { @@ -4768,7 +3471,7 @@ Index: gdb-7.2.90.20110703/gdb/gdbtypes.h /* Flags indicating whether the values of low and high are valid. When true, the respective range value is -@@ -926,9 +1019,9 @@ extern void allocate_gnat_aux_type (stru +@@ -1016,9 +1109,9 @@ extern void allocate_gnat_aux_type (struct type *); #define TYPE_POINTER_TYPE(thistype) (thistype)->pointer_type #define TYPE_REFERENCE_TYPE(thistype) (thistype)->reference_type #define TYPE_CHAIN(thistype) (thistype)->chain @@ -4781,7 +3484,7 @@ Index: gdb-7.2.90.20110703/gdb/gdbtypes.h calls check_typedef, TYPE_LENGTH (VALUE_TYPE (X)) is safe. */ #define TYPE_LENGTH(thistype) (thistype)->length /* Note that TYPE_CODE can be TYPE_CODE_TYPEDEF, so if you want the real -@@ -936,11 +1029,16 @@ extern void allocate_gnat_aux_type (stru +@@ -1026,11 +1119,16 @@ extern void allocate_gnat_aux_type (struct type *); #define TYPE_CODE(thistype) TYPE_MAIN_TYPE(thistype)->code #define TYPE_NFIELDS(thistype) TYPE_MAIN_TYPE(thistype)->nfields #define TYPE_FIELDS(thistype) TYPE_MAIN_TYPE(thistype)->flds_bnds.fields @@ -4800,7 +3503,7 @@ Index: gdb-7.2.90.20110703/gdb/gdbtypes.h #define TYPE_LOW_BOUND_UNDEFINED(range_type) \ TYPE_RANGE_DATA(range_type)->low_undefined #define TYPE_HIGH_BOUND_UNDEFINED(range_type) \ -@@ -957,7 +1055,14 @@ extern void allocate_gnat_aux_type (stru +@@ -1047,7 +1145,14 @@ extern void allocate_gnat_aux_type (struct type *); (TYPE_HIGH_BOUND(TYPE_INDEX_TYPE((arraytype)))) #define TYPE_ARRAY_LOWER_BOUND_VALUE(arraytype) \ @@ -4816,7 +3519,7 @@ Index: gdb-7.2.90.20110703/gdb/gdbtypes.h /* C++ */ -@@ -1379,6 +1484,18 @@ extern struct type *create_array_type (s +@@ -1489,6 +1594,18 @@ extern struct type *create_array_type (struct type *, struct type *, struct type *); extern struct type *lookup_array_range_type (struct type *, int, int); @@ -4835,7 +3538,7 @@ Index: gdb-7.2.90.20110703/gdb/gdbtypes.h extern struct type *create_string_type (struct type *, struct type *, struct type *); extern struct type *lookup_string_range_type (struct type *, int, int); -@@ -1424,6 +1541,10 @@ extern int is_public_ancestor (struct ty +@@ -1534,6 +1651,10 @@ extern int is_public_ancestor (struct type *, struct type *); extern int is_unique_ancestor (struct type *, struct value *); @@ -4846,7 +3549,7 @@ Index: gdb-7.2.90.20110703/gdb/gdbtypes.h /* Overload resolution */ #define LENGTH_MATCH(bv) ((bv)->rank[0]) -@@ -1496,10 +1617,13 @@ extern void maintenance_print_type (char +@@ -1609,10 +1730,13 @@ extern void maintenance_print_type (char *, int); extern htab_t create_copied_types_hash (struct objfile *objfile); @@ -4862,908 +3565,11 @@ Index: gdb-7.2.90.20110703/gdb/gdbtypes.h +#endif + #endif /* GDBTYPES_H */ -Index: gdb-7.2.90.20110703/gdb/i386-linux-nat.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/i386-linux-nat.c 2011-02-27 17:25:37.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/i386-linux-nat.c 2011-07-03 10:33:11.000000000 +0200 -@@ -649,22 +649,13 @@ i386_linux_store_inferior_registers (str - } - - --/* Support for debug registers. */ -- --static unsigned long i386_linux_dr[DR_CONTROL + 1]; -- - /* Get debug register REGNUM value from only the one LWP of PTID. */ - - static unsigned long --i386_linux_dr_get (ptid_t ptid, int regnum) -+i386_linux_dr_get (int tid, int regnum) - { -- int tid; - unsigned long value; - -- tid = TIDGET (ptid); -- if (tid == 0) -- tid = PIDGET (ptid); -- - /* FIXME: kettenis/2001-03-27: Calling perror_with_name if the - ptrace call fails breaks debugging remote targets. The correct - way to fix this is to add the hardware breakpoint and watchpoint -@@ -686,14 +677,8 @@ i386_linux_dr_get (ptid_t ptid, int regn - /* Set debug register REGNUM to VALUE in only the one LWP of PTID. */ - - static void --i386_linux_dr_set (ptid_t ptid, int regnum, unsigned long value) -+i386_linux_dr_set (int tid, int regnum, unsigned long value) - { -- int tid; -- -- tid = TIDGET (ptid); -- if (tid == 0) -- tid = PIDGET (ptid); -- - errno = 0; - ptrace (PTRACE_POKEUSER, tid, - offsetof (struct user, u_debugreg[regnum]), value); -@@ -701,35 +686,78 @@ i386_linux_dr_set (ptid_t ptid, int regn - perror_with_name (_("Couldn't write debug register")); - } - --/* Set DR_CONTROL to ADDR in all LWPs of LWP_LIST. */ -+/* Helper for i386_linux_dr_set_control. */ -+ -+static void -+i386_linux_dr_set_control_callback (int tid, void *control_voidp) -+{ -+ unsigned long control = *(unsigned long *) control_voidp; -+ -+ i386_linux_dr_set (tid, DR_CONTROL, control); -+} -+ -+static void i386_linux_dr_set_addr (int regnum, CORE_ADDR addr); -+ -+/* Set DR_CONTROL to ADDR in all LWPs of CURRENT_INFERIOR. */ - - static void - i386_linux_dr_set_control (unsigned long control) - { -- struct lwp_info *lp; -- ptid_t ptid; -+ int inferior_pid = ptid_get_pid (inferior_ptid); -+ struct inferior *inf = current_inferior (); -+ -+ /* The amd64 counterpart and description is amd64_linux_dr_set_control. */ -+ if (inf->pid != inferior_pid) -+ { -+ struct i386_dr_mirror *dr_mirror = i386_dr_mirror_get (); -+ int i; -+ -+ if (!dr_mirror->addr_preset) -+ { -+ dr_mirror->addr_preset = 1; - -- i386_linux_dr[DR_CONTROL] = control; -- ALL_LWPS (lp, ptid) -- i386_linux_dr_set (ptid, DR_CONTROL, control); -+ for (i = 0; i < DR_LASTADDR - DR_FIRSTADDR; i++) -+ i386_linux_dr_set_addr (i, dr_mirror->addr[i]); -+ } -+ } -+ -+ linux_nat_iterate_watchpoint_lwps (i386_linux_dr_set_control_callback, -+ &control); - } - --/* Set address REGNUM (zero based) to ADDR in all LWPs of LWP_LIST. */ -+/* Helper for i386_linux_dr_set_addr. */ -+ -+struct i386_linux_dr_set_addr_data -+ { -+ int regnum; -+ CORE_ADDR addr; -+ }; -+ -+static void -+i386_linux_dr_set_addr_callback (int tid, void *datap_voidp) -+{ -+ const struct i386_linux_dr_set_addr_data *datap = datap_voidp; -+ -+ i386_linux_dr_set (tid, DR_FIRSTADDR + datap->regnum, datap->addr); -+} -+ -+/* Set address REGNUM (zero based) to ADDR in all LWPs of CURRENT_INFERIOR. -+ */ - - static void - i386_linux_dr_set_addr (int regnum, CORE_ADDR addr) - { -- struct lwp_info *lp; -- ptid_t ptid; -+ struct i386_linux_dr_set_addr_data data; - - gdb_assert (regnum >= 0 && regnum <= DR_LASTADDR - DR_FIRSTADDR); - -- i386_linux_dr[DR_FIRSTADDR + regnum] = addr; -- ALL_LWPS (lp, ptid) -- i386_linux_dr_set (ptid, DR_FIRSTADDR + regnum, addr); -+ data.regnum = regnum; -+ data.addr = addr; -+ linux_nat_iterate_watchpoint_lwps (i386_linux_dr_set_addr_callback, &data); - } - --/* Set address REGNUM (zero based) to zero in all LWPs of LWP_LIST. */ -+/* Set address REGNUM (zero based) to zero in all LWPs of CURRENT_INFERIOR. -+ */ - - static void - i386_linux_dr_reset_addr (int regnum) -@@ -742,36 +770,54 @@ i386_linux_dr_reset_addr (int regnum) - static unsigned long - i386_linux_dr_get_status (void) - { -- return i386_linux_dr_get (inferior_ptid, DR_STATUS); -+ int tid; -+ -+ tid = TIDGET (inferior_ptid); -+ if (tid == 0) -+ tid = PIDGET (inferior_ptid); -+ -+ return i386_linux_dr_get (tid, DR_STATUS); - } - --/* Unset MASK bits in DR_STATUS in all LWPs of LWP_LIST. */ -+/* Helper for i386_linux_dr_unset_status. */ - - static void --i386_linux_dr_unset_status (unsigned long mask) -+i386_linux_dr_unset_status_callback (int tid, void *mask_voidp) - { -- struct lwp_info *lp; -- ptid_t ptid; -- -- ALL_LWPS (lp, ptid) -- { -- unsigned long value; -+ unsigned long mask = *(unsigned long *) mask_voidp; -+ unsigned long value; - -- value = i386_linux_dr_get (ptid, DR_STATUS); -- value &= ~mask; -- i386_linux_dr_set (ptid, DR_STATUS, value); -- } -+ value = i386_linux_dr_get (tid, DR_STATUS); -+ value &= ~mask; -+ i386_linux_dr_set (tid, DR_STATUS, value); -+} -+ -+/* Unset MASK bits in DR_STATUS in all LWPs of CURRENT_INFERIOR. */ -+ -+static void -+i386_linux_dr_unset_status (unsigned long mask) -+{ -+ linux_nat_iterate_watchpoint_lwps (i386_linux_dr_unset_status_callback, -+ &mask); - } - - static void - i386_linux_new_thread (ptid_t ptid) - { -- int i; -+ struct i386_dr_mirror *dr_mirror = i386_dr_mirror_get (); -+ int i, tid; -+ -+ /* Verify DR_MIRROR is valid. */ -+ gdb_assert (PIDGET (ptid) == PIDGET (inferior_ptid)); -+ -+ tid = TIDGET (ptid); -+ if (tid == 0) -+ tid = PIDGET (ptid); - -- for (i = DR_FIRSTADDR; i <= DR_LASTADDR; i++) -- i386_linux_dr_set (ptid, i, i386_linux_dr[i]); -+ for (i = 0; i < DR_LASTADDR - DR_FIRSTADDR; i++) -+ i386_linux_dr_set (tid, DR_FIRSTADDR + i, dr_mirror->addr[i]); - -- i386_linux_dr_set (ptid, DR_CONTROL, i386_linux_dr[DR_CONTROL]); -+ i386_linux_dr_set (tid, DR_CONTROL, dr_mirror->control); - } - - -Index: gdb-7.2.90.20110703/gdb/i386-nat.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/i386-nat.c 2011-02-26 23:04:51.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/i386-nat.c 2011-07-03 10:33:11.000000000 +0200 -@@ -25,6 +25,7 @@ - #include "gdbcmd.h" - #include "target.h" - #include "gdb_assert.h" -+#include "inferior.h" - - /* Support for hardware watchpoints and breakpoints using the i386 - debug registers. -@@ -44,7 +45,6 @@ struct i386_dr_low_type i386_dr_low; - #define TARGET_HAS_DR_LEN_8 (i386_dr_low.debug_register_length == 8) - - /* Debug registers' indices. */ --#define DR_NADDR 4 /* The number of debug address registers. */ - #define DR_STATUS 6 /* Index of debug status register (DR6). */ - #define DR_CONTROL 7 /* Index of debug control register (DR7). */ - -@@ -111,49 +111,60 @@ struct i386_dr_low_type i386_dr_low; - - /* The I'th debug register is vacant if its Local and Global Enable - bits are reset in the Debug Control register. */ --#define I386_DR_VACANT(i) \ -- ((dr_control_mirror & (3 << (DR_ENABLE_SIZE * (i)))) == 0) -+ -+static inline int -+i386_dr_vacant (struct i386_dr_mirror *dr_mirror, int i) -+{ -+ return (dr_mirror->control & (3 << (DR_ENABLE_SIZE * i))) == 0; -+} - - /* Locally enable the break/watchpoint in the I'th debug register. */ --#define I386_DR_LOCAL_ENABLE(i) \ -- dr_control_mirror |= (1 << (DR_LOCAL_ENABLE_SHIFT + DR_ENABLE_SIZE * (i))) - --/* Globally enable the break/watchpoint in the I'th debug register. */ --#define I386_DR_GLOBAL_ENABLE(i) \ -- dr_control_mirror |= (1 << (DR_GLOBAL_ENABLE_SHIFT + DR_ENABLE_SIZE * (i))) -+static inline void -+i386_dr_local_enable (struct i386_dr_mirror *dr_mirror, int i) -+{ -+ dr_mirror->control |= 1 << (DR_LOCAL_ENABLE_SHIFT + DR_ENABLE_SIZE * i); -+} - - /* Disable the break/watchpoint in the I'th debug register. */ --#define I386_DR_DISABLE(i) \ -- dr_control_mirror &= ~(3 << (DR_ENABLE_SIZE * (i))) -+ -+static inline void -+i386_dr_disable (struct i386_dr_mirror *dr_mirror, int i) -+{ -+ dr_mirror->control &= ~(3 << (DR_ENABLE_SIZE * i)); -+} - - /* Set in DR7 the RW and LEN fields for the I'th debug register. */ --#define I386_DR_SET_RW_LEN(i,rwlen) \ -- do { \ -- dr_control_mirror &= ~(0x0f << (DR_CONTROL_SHIFT+DR_CONTROL_SIZE*(i))); \ -- dr_control_mirror |= ((rwlen) << (DR_CONTROL_SHIFT+DR_CONTROL_SIZE*(i))); \ -- } while (0) -+ -+static inline void -+i386_dr_set_rw_len (struct i386_dr_mirror *dr_mirror, int i, unsigned rwlen) -+{ -+ dr_mirror->control &= ~(0x0f << (DR_CONTROL_SHIFT + DR_CONTROL_SIZE * i)); -+ dr_mirror->control |= rwlen << (DR_CONTROL_SHIFT + DR_CONTROL_SIZE * i); -+} - - /* Get from DR7 the RW and LEN fields for the I'th debug register. */ --#define I386_DR_GET_RW_LEN(i) \ -- ((dr_control_mirror >> (DR_CONTROL_SHIFT + DR_CONTROL_SIZE * (i))) & 0x0f) -+ -+static inline unsigned -+i386_dr_get_rw_len (struct i386_dr_mirror *dr_mirror, int i) -+{ -+ return ((dr_mirror->control >> (DR_CONTROL_SHIFT + DR_CONTROL_SIZE * i)) -+ & 0x0f); -+} - - /* Mask that this I'th watchpoint has triggered. */ - #define I386_DR_WATCH_MASK(i) (1 << (i)) - - /* Did the watchpoint whose address is in the I'th register break? */ --#define I386_DR_WATCH_HIT(i) (dr_status_mirror & I386_DR_WATCH_MASK (i)) -+static inline int -+i386_dr_watch_hit (struct i386_dr_mirror *dr_mirror, int i) -+{ -+ return (dr_mirror->status & I386_DR_WATCH_MASK (i)) != 0; -+} - - /* A macro to loop over all debug registers. */ - #define ALL_DEBUG_REGISTERS(i) for (i = 0; i < DR_NADDR; i++) - --/* Mirror the inferior's DRi registers. We keep the status and -- control registers separated because they don't hold addresses. */ --static CORE_ADDR dr_mirror[DR_NADDR]; --static unsigned long dr_status_mirror, dr_control_mirror; -- --/* Reference counts for each debug register. */ --static int dr_ref_count[DR_NADDR]; -- - /* Whether or not to print the mirrored debug registers. */ - static int maint_show_dr; - -@@ -195,21 +206,80 @@ static int i386_handle_nonaligned_watchp - - /* Implementation. */ - -+/* Per-inferior data key. */ -+static const struct inferior_data *i386_inferior_data; -+ -+struct i386_inferior_data -+ { -+ /* Copy of i386 hardware debug registers for performance reasons. */ -+ struct i386_dr_mirror dr_mirror; -+ }; -+ -+static void -+i386_inferior_data_cleanup (struct inferior *inf, void *arg) -+{ -+ struct i386_inferior_data *inf_data = arg; -+ -+ xfree (inf_data); -+} -+ -+static struct i386_inferior_data * -+i386_inferior_data_get (void) -+{ -+ struct inferior *inf = current_inferior (); -+ struct i386_inferior_data *inf_data; -+ -+ inf_data = inferior_data (inf, i386_inferior_data); -+ if (inf_data == NULL) -+ { -+ inf_data = xzalloc (sizeof (*inf_data)); -+ set_inferior_data (current_inferior (), i386_inferior_data, inf_data); -+ } -+ -+ if (inf->pid != ptid_get_pid (inferior_ptid)) -+ { -+ static struct i386_inferior_data detached_inf_data_local; -+ static int detached_inf_pid = -1; -+ -+ if (detached_inf_pid != ptid_get_pid (inferior_ptid)) -+ { -+ detached_inf_pid = ptid_get_pid (inferior_ptid); -+ -+ /* Forked processes get a copy of the debug registers. */ -+ memcpy (&detached_inf_data_local, inf_data, -+ sizeof (detached_inf_data_local)); -+ detached_inf_data_local.dr_mirror.addr_preset = 0; -+ } -+ -+ return &detached_inf_data_local; -+ } -+ -+ return inf_data; -+} -+ - /* Clear the reference counts and forget everything we knew about the - debug registers. */ - -+struct i386_dr_mirror * -+i386_dr_mirror_get (void) -+{ -+ return &i386_inferior_data_get ()->dr_mirror; -+} -+ - void - i386_cleanup_dregs (void) - { -+ struct i386_dr_mirror *dr_mirror = i386_dr_mirror_get (); - int i; - - ALL_DEBUG_REGISTERS(i) - { -- dr_mirror[i] = 0; -- dr_ref_count[i] = 0; -+ dr_mirror->addr[i] = 0; -+ dr_mirror->ref_count[i] = 0; - } -- dr_control_mirror = 0; -- dr_status_mirror = 0; -+ dr_mirror->addr_preset = 0; -+ dr_mirror->control = 0; -+ dr_mirror->status = 0; - } - - /* Print the values of the mirrored debug registers. This is called -@@ -220,6 +290,7 @@ static void - i386_show_dr (const char *func, CORE_ADDR addr, - int len, enum target_hw_bp_type type) - { -+ struct i386_dr_mirror *dr_mirror = i386_dr_mirror_get (); - int addr_size = gdbarch_addr_bit (target_gdbarch) / 8; - int i; - -@@ -239,13 +310,16 @@ i386_show_dr (const char *func, CORE_ADD - : "??unknown??")))); - puts_unfiltered (":\n"); - printf_unfiltered ("\tCONTROL (DR7): %s STATUS (DR6): %s\n", -- phex (dr_control_mirror, 8), phex (dr_status_mirror, 8)); -+ phex (dr_mirror->control, 8), -+ phex (dr_mirror->status, 8)); - ALL_DEBUG_REGISTERS(i) - { - printf_unfiltered ("\ - \tDR%d: addr=0x%s, ref.count=%d DR%d: addr=0x%s, ref.count=%d\n", -- i, phex (dr_mirror[i], addr_size), dr_ref_count[i], -- i+1, phex (dr_mirror[i+1], addr_size), dr_ref_count[i+1]); -+ i, phex (dr_mirror->addr[i], addr_size), -+ dr_mirror->ref_count[i], i + 1, -+ phex (dr_mirror->addr[i + 1], addr_size), -+ dr_mirror->ref_count[i + 1]); - i++; - } - } -@@ -313,6 +387,7 @@ Invalid hardware breakpoint length %d in - static int - i386_insert_aligned_watchpoint (CORE_ADDR addr, unsigned len_rw_bits) - { -+ struct i386_dr_mirror *dr_mirror = i386_dr_mirror_get (); - int i; - - if (!i386_dr_low.set_addr || !i386_dr_low.set_control) -@@ -323,11 +398,10 @@ i386_insert_aligned_watchpoint (CORE_ADD - reuse it for this watchpoint as well (and save a register). */ - ALL_DEBUG_REGISTERS(i) - { -- if (!I386_DR_VACANT (i) -- && dr_mirror[i] == addr -- && I386_DR_GET_RW_LEN (i) == len_rw_bits) -+ if (!i386_dr_vacant (dr_mirror, i) && dr_mirror->addr[i] == addr -+ && i386_dr_get_rw_len (dr_mirror, i) == len_rw_bits) - { -- dr_ref_count[i]++; -+ dr_mirror->ref_count[i]++; - return 0; - } - } -@@ -335,7 +409,7 @@ i386_insert_aligned_watchpoint (CORE_ADD - /* Next, look for a vacant debug register. */ - ALL_DEBUG_REGISTERS(i) - { -- if (I386_DR_VACANT (i)) -+ if (i386_dr_vacant (dr_mirror, i)) - break; - } - -@@ -346,9 +420,9 @@ i386_insert_aligned_watchpoint (CORE_ADD - /* Now set up the register I to watch our region. */ - - /* Record the info in our local mirrored array. */ -- dr_mirror[i] = addr; -- dr_ref_count[i] = 1; -- I386_DR_SET_RW_LEN (i, len_rw_bits); -+ dr_mirror->addr[i] = addr; -+ dr_mirror->ref_count[i] = 1; -+ i386_dr_set_rw_len (dr_mirror, i, len_rw_bits); - /* Note: we only enable the watchpoint locally, i.e. in the current - task. Currently, no i386 target allows or supports global - watchpoints; however, if any target would want that in the -@@ -356,13 +430,13 @@ i386_insert_aligned_watchpoint (CORE_ADD - to enable watchpoints globally or locally, and the code below - should use global or local enable and slow-down flags as - appropriate. */ -- I386_DR_LOCAL_ENABLE (i); -- dr_control_mirror |= DR_LOCAL_SLOWDOWN; -- dr_control_mirror &= I386_DR_CONTROL_MASK; -+ i386_dr_local_enable (dr_mirror, i); -+ dr_mirror->control |= DR_LOCAL_SLOWDOWN; -+ dr_mirror->control &= I386_DR_CONTROL_MASK; - - /* Finally, actually pass the info to the inferior. */ - i386_dr_low.set_addr (i, addr); -- i386_dr_low.set_control (dr_control_mirror); -+ i386_dr_low.set_control (dr_mirror->control); - - /* Only a sanity check for leftover bits (set possibly only by inferior). */ - if (i386_dr_low.unset_status) -@@ -380,21 +454,21 @@ i386_insert_aligned_watchpoint (CORE_ADD - static int - i386_remove_aligned_watchpoint (CORE_ADDR addr, unsigned len_rw_bits) - { -+ struct i386_dr_mirror *dr_mirror = i386_dr_mirror_get (); - int i, retval = -1; - - ALL_DEBUG_REGISTERS(i) - { -- if (!I386_DR_VACANT (i) -- && dr_mirror[i] == addr -- && I386_DR_GET_RW_LEN (i) == len_rw_bits) -+ if (!i386_dr_vacant (dr_mirror, i) && dr_mirror->addr[i] == addr -+ && i386_dr_get_rw_len (dr_mirror, i) == len_rw_bits) - { -- if (--dr_ref_count[i] == 0) /* no longer in use? */ -+ if (--dr_mirror->ref_count[i] == 0) /* no longer in use? */ - { - /* Reset our mirror. */ -- dr_mirror[i] = 0; -- I386_DR_DISABLE (i); -+ dr_mirror->addr[i] = 0; -+ i386_dr_disable (dr_mirror, i); - /* Reset it in the inferior. */ -- i386_dr_low.set_control (dr_control_mirror); -+ i386_dr_low.set_control (dr_mirror->control); - if (i386_dr_low.reset_addr) - i386_dr_low.reset_addr (i); - } -@@ -556,26 +630,27 @@ i386_region_ok_for_watchpoint (CORE_ADDR - static int - i386_stopped_data_address (struct target_ops *ops, CORE_ADDR *addr_p) - { -+ struct i386_dr_mirror *dr_mirror = i386_dr_mirror_get (); - CORE_ADDR addr = 0; - int i; - int rc = 0; - -- dr_status_mirror = i386_dr_low.get_status (); -+ dr_mirror->status = i386_dr_low.get_status (); - - ALL_DEBUG_REGISTERS(i) - { -- if (I386_DR_WATCH_HIT (i) -+ if (i386_dr_watch_hit (dr_mirror, i) - /* This second condition makes sure DRi is set up for a data - watchpoint, not a hardware breakpoint. The reason is - that GDB doesn't call the target_stopped_data_address - method except for data watchpoints. In other words, I'm - being paranoiac. */ -- && I386_DR_GET_RW_LEN (i) != 0 -+ && i386_dr_get_rw_len (dr_mirror, i) != 0 - /* This third condition makes sure DRi is not vacant, this - avoids false positives in windows-nat.c. */ -- && !I386_DR_VACANT (i)) -+ && !i386_dr_vacant (dr_mirror, i)) - { -- addr = dr_mirror[i]; -+ addr = dr_mirror->addr[i]; - rc = 1; - if (maint_show_dr) - i386_show_dr ("watchpoint_hit", addr, -1, hw_write); -@@ -689,6 +764,10 @@ i386_use_watchpoints (struct target_ops - t->to_remove_watchpoint = i386_remove_watchpoint; - t->to_insert_hw_breakpoint = i386_insert_hw_breakpoint; - t->to_remove_hw_breakpoint = i386_remove_hw_breakpoint; -+ -+ if (i386_inferior_data == NULL) -+ i386_inferior_data -+ = register_inferior_data_with_cleanup (i386_inferior_data_cleanup); - } - - void -Index: gdb-7.2.90.20110703/gdb/i386-nat.h -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/i386-nat.h 2011-01-09 04:08:56.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/i386-nat.h 2011-07-03 10:33:11.000000000 +0200 -@@ -78,6 +78,28 @@ struct i386_dr_low_type - - extern struct i386_dr_low_type i386_dr_low; - -+/* The number of debug address registers. */ -+#define DR_NADDR 4 -+ -+/* Copy of hardware debug registers for performance reasons. */ -+ -+struct i386_dr_mirror -+ { -+ /* Mirror the inferior's DRi registers. We keep the status and -+ control registers separated because they don't hold addresses. */ -+ CORE_ADDR addr[DR_NADDR]; -+ -+ /* All the ADDR hardware registers have been written at least once. */ -+ unsigned addr_preset : 1; -+ -+ /* Reference counts for each debug register. */ -+ int ref_count[DR_NADDR]; -+ -+ unsigned long status, control; -+ }; -+ -+extern struct i386_dr_mirror *i386_dr_mirror_get (void); -+ - /* Use this function to set i386_dr_low debug_register_length field - rather than setting it directly to check that the length is only - set once. It also enables the 'maint set/show show-debug-regs' -Index: gdb-7.2.90.20110703/gdb/infrun.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/infrun.c 2011-06-03 17:32:13.000000000 +0200 -+++ gdb-7.2.90.20110703/gdb/infrun.c 2011-07-03 10:33:11.000000000 +0200 -@@ -54,6 +54,8 @@ - #include "inline-frame.h" - #include "jit.h" - #include "tracepoint.h" -+#include "stap-probe.h" -+#include "objfiles.h" - - /* Prototypes for local functions */ - -@@ -2247,7 +2249,7 @@ static void insert_step_resume_breakpoin - struct frame_id); - static void insert_longjmp_resume_breakpoint (struct gdbarch *, CORE_ADDR); - static void check_exception_resume (struct execution_control_state *, -- struct frame_info *, struct symbol *); -+ struct frame_info *); - - static void stop_stepping (struct execution_control_state *ecs); - static void prepare_to_wait (struct execution_control_state *ecs); -@@ -4169,9 +4171,17 @@ process_event_stop_test: - - if (what.is_longjmp) - { -- if (!gdbarch_get_longjmp_target_p (gdbarch) -- || !gdbarch_get_longjmp_target (gdbarch, -- frame, &jmp_buf_pc)) -+ struct value *arg_value; -+ -+ /* If we set the longjmp breakpoint via a SystemTap probe, -+ then use it to extract the arguments. The destination -+ PC is the third argument to the probe. */ -+ arg_value = stap_safe_evaluate_at_pc (frame, 2); -+ if (arg_value) -+ jmp_buf_pc = value_as_address (arg_value); -+ else if (!gdbarch_get_longjmp_target_p (gdbarch) -+ || !gdbarch_get_longjmp_target (gdbarch, -+ frame, &jmp_buf_pc)) - { - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, -@@ -4189,12 +4199,7 @@ process_event_stop_test: - insert_longjmp_resume_breakpoint (gdbarch, jmp_buf_pc); - } - else -- { -- struct symbol *func = get_frame_function (frame); -- -- if (func) -- check_exception_resume (ecs, frame, func); -- } -+ check_exception_resume (ecs, frame); - keep_going (ecs); - return; - -@@ -5268,15 +5273,65 @@ insert_exception_resume_breakpoint (stru - } - } - -+/* A helper for check_exception_resume that sets an -+ exception-breakpoint based on a SystemTap probe. */ -+ -+static void -+insert_exception_resume_from_probe (struct thread_info *tp, -+ const struct stap_probe *probe, -+ struct objfile *objfile, -+ struct frame_info *frame) -+{ -+ struct value *arg_value; -+ CORE_ADDR handler; -+ struct breakpoint *bp; -+ -+ arg_value = stap_safe_evaluate_at_pc (frame, 1); -+ if (!arg_value) -+ return; -+ -+ handler = value_as_address (arg_value); -+ -+ if (debug_infrun) -+ fprintf_unfiltered (gdb_stdlog, -+ "infrun: exception resume at %s\n", -+ paddress (get_objfile_arch (objfile), -+ handler)); -+ -+ bp = set_momentary_breakpoint_at_pc (get_frame_arch (frame), -+ handler, bp_exception_resume); -+ bp->thread = tp->num; -+ inferior_thread ()->control.exception_resume_breakpoint = bp; -+} -+ - /* This is called when an exception has been intercepted. Check to - see whether the exception's destination is of interest, and if so, - set an exception resume breakpoint there. */ - - static void - check_exception_resume (struct execution_control_state *ecs, -- struct frame_info *frame, struct symbol *func) -+ struct frame_info *frame) - { - struct gdb_exception e; -+ struct objfile *objfile; -+ const struct stap_probe *probe; -+ struct symbol *func; -+ -+ /* First see if this exception unwinding breakpoint was set via a -+ SystemTap probe point. If so, the probe has two arguments: the -+ CFA and the HANDLER. We ignore the CFA, extract the handler, and -+ set a breakpoint there. */ -+ probe = find_probe_by_pc (get_frame_pc (frame), &objfile); -+ if (probe) -+ { -+ insert_exception_resume_from_probe (ecs->event_thread, probe, -+ objfile, frame); -+ return; -+ } -+ -+ func = get_frame_function (frame); -+ if (!func) -+ return; - - TRY_CATCH (e, RETURN_MASK_ERROR) - { -@@ -6258,7 +6313,8 @@ static struct lval_funcs siginfo_value_f - if there's no object available. */ - - static struct value * --siginfo_make_value (struct gdbarch *gdbarch, struct internalvar *var) -+siginfo_make_value (struct gdbarch *gdbarch, struct internalvar *var, -+ void *ignore) - { - if (target_has_stack - && !ptid_equal (inferior_ptid, null_ptid) -@@ -6826,6 +6882,15 @@ show_schedule_multiple (struct ui_file * - "of all processes is %s.\n"), value); - } - -+/* Implementation of `siginfo' variable. */ -+ -+static const struct internalvar_funcs siginfo_funcs = -+{ -+ siginfo_make_value, -+ NULL, -+ NULL -+}; -+ - void - _initialize_infrun (void) - { -@@ -7098,7 +7163,7 @@ Tells gdb whether to detach the child of - value with a void typed value, and when we get here, gdbarch - isn't initialized yet. At this point, we're quite sure there - isn't another convenience variable of the same name. */ -- create_internalvar_type_lazy ("_siginfo", siginfo_make_value); -+ create_internalvar_type_lazy ("_siginfo", &siginfo_funcs, NULL); - - add_setshow_boolean_cmd ("observer", no_class, - &observer_mode_1, _("\ -Index: gdb-7.2.90.20110703/gdb/linespec.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/linespec.c 2011-07-02 22:13:08.000000000 +0200 -+++ gdb-7.2.90.20110703/gdb/linespec.c 2011-07-03 10:33:11.000000000 +0200 -@@ -43,6 +43,7 @@ - #include "arch-utils.h" - #include - #include "cli/cli-utils.h" -+#include "stap-probe.h" - - /* We share this one with symtab.c, but it is not exported widely. */ - -@@ -786,6 +787,7 @@ keep_name_info (char *p, int on_boundary - PC returned is 0. - FILE:FUNCTION -- likewise, but prefer functions in that file. - *EXPR -- line in which address EXPR appears. -+ probe:[OBJFILE:][PROVIDER:]NAME -- a systemtap static probe - - This may all be followed by an "if EXPR", which we ignore. - -@@ -854,6 +856,9 @@ decode_line_1 (char **argptr, int funfir - if (**argptr == '*') - return decode_indirect (argptr); - -+ if (strncmp (*argptr, "probe:", 6) == 0) -+ return parse_stap_probe (argptr, canonical); -+ - is_quoted = (strchr (get_gdb_completer_quote_characters (), - **argptr) != NULL); - -Index: gdb-7.2.90.20110703/gdb/linespec.h -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/linespec.h 2011-07-02 21:33:09.000000000 +0200 -+++ gdb-7.2.90.20110703/gdb/linespec.h 2011-07-03 10:33:11.000000000 +0200 -@@ -30,6 +30,10 @@ struct linespec_result - display mechanism would do the wrong thing. */ - int special_display; - -+ /* If non-zero, the linespec result should be considered to be a -+ "pre-expanded" multi-location linespec. */ -+ int pre_expanded; -+ - /* If non-NULL, an array of canonical names for returned - symtab_and_line objects. The array has as many elements as the - `nelts' field in the symtabs_and_line returned by decode_line_1. -Index: gdb-7.2.90.20110703/gdb/linux-nat.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/linux-nat.c 2011-04-29 18:02:10.000000000 +0200 -+++ gdb-7.2.90.20110703/gdb/linux-nat.c 2011-07-03 10:33:11.000000000 +0200 -@@ -1272,6 +1272,64 @@ iterate_over_lwps (ptid_t filter, - return NULL; - } - -+/* Helper for linux_nat_iterate_watchpoint_lwps. */ -+ -+struct iterate_watchpoint_lwps_data -+ { -+ linux_nat_iterate_watchpoint_lwps_ftype callback; -+ void *callback_data; -+ }; -+ -+static int -+iterate_watchpoint_lwps_callback (struct lwp_info *lp, void *datap_voidp) -+{ -+ struct iterate_watchpoint_lwps_data *datap = datap_voidp; -+ int tid; -+ -+ tid = TIDGET (lp->ptid); -+ if (tid == 0) -+ tid = PIDGET (lp->ptid); -+ -+ datap->callback (tid, datap->callback_data); -+ -+ /* Continue the traversal. */ -+ return 0; -+} -+ -+/* Iterate like iterate_over_lwps does except when forking-off a child call -+ CALLBACK with CALLBACK_DATA specifically only for that new child PID. -+ -+ During `set follow-fork-mode child' the call is also made for the new child -+ PID; parent watchpoints get detached elsewhere (during target_detach). */ -+ -+void -+linux_nat_iterate_watchpoint_lwps -+ (linux_nat_iterate_watchpoint_lwps_ftype callback, void *callback_data) -+{ -+ struct iterate_watchpoint_lwps_data data; -+ int inferior_pid = ptid_get_pid (inferior_ptid); -+ struct inferior *inf = current_inferior (); -+ -+ data.callback = callback; -+ data.callback_data = callback_data; -+ -+ if (inf->pid == inferior_pid) -+ { -+ /* Standard mode. Iterate all the threads of the current inferior. -+ Without specifying INFERIOR_PID it would iterate all the threads of -+ all the inferiors, which is inappropriate for watchpoints. */ -+ -+ iterate_over_lwps (pid_to_ptid (inferior_pid), -+ iterate_watchpoint_lwps_callback, &data); -+ } -+ else -+ { -+ /* Detaching a new child PID temporarily present in INFERIOR_PID. */ -+ -+ callback (inferior_pid, callback_data); -+ } -+} -+ - /* Update our internal state when changing from one checkpoint to - another indicated by NEW_PTID. We can only switch single-threaded - applications, so we only create one new LWP, and the previous list -Index: gdb-7.2.90.20110703/gdb/linux-nat.h -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/linux-nat.h 2011-01-05 23:22:49.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/linux-nat.h 2011-07-03 10:33:11.000000000 +0200 -@@ -140,6 +140,11 @@ struct lwp_info *iterate_over_lwps (ptid - void *), - void *data); - -+typedef void (*linux_nat_iterate_watchpoint_lwps_ftype) (int tid, void *data); -+ -+extern void linux_nat_iterate_watchpoint_lwps -+ (linux_nat_iterate_watchpoint_lwps_ftype callback, void *callback_data); -+ - /* Create a prototype generic GNU/Linux target. The client can - override it with local methods. */ - struct target_ops * linux_target (void); -Index: gdb-7.2.90.20110703/gdb/machoread.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/machoread.c 2011-03-07 17:17:29.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/machoread.c 2011-07-03 10:33:11.000000000 +0200 -@@ -849,6 +849,7 @@ static const struct sym_fns macho_sym_fn - default_symfile_segments, /* Get segment information from a file. */ - NULL, - macho_symfile_relocate, /* Relocate a debug section. */ -+ NULL, /* sym_get_probes */ - &psym_functions - }; - -Index: gdb-7.2.90.20110703/gdb/main.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/main.c 2011-03-07 19:34:31.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/main.c 2011-07-03 10:33:11.000000000 +0200 -@@ -39,6 +39,7 @@ +diff --git a/gdb/main.c b/gdb/main.c +index 3148d72..c5b4826 100644 +--- a/gdb/main.c ++++ b/gdb/main.c +@@ -37,6 +37,7 @@ #include "interps.h" #include "main.h" @@ -5771,7 +3577,7 @@ Index: gdb-7.2.90.20110703/gdb/main.c #include "source.h" #include "cli/cli-cmds.h" #include "python/python.h" -@@ -260,6 +261,8 @@ captured_main (void *data) +@@ -283,6 +284,8 @@ captured_main (void *data) char *cdarg = NULL; char *ttyarg = NULL; @@ -5780,10 +3586,10 @@ Index: gdb-7.2.90.20110703/gdb/main.c /* These are static so that we can take their address in an initializer. */ static int print_help; -@@ -451,10 +454,14 @@ captured_main (void *data) - {"args", no_argument, &set_args, 1}, - {"l", required_argument, 0, 'l'}, +@@ -473,10 +476,14 @@ captured_main (void *data) {"return-child-result", no_argument, &return_child_result, 1}, + {"use-deprecated-index-sections", no_argument, + &use_deprecated_index_sections, 1}, +#if HAVE_PYTHON + {"python", no_argument, 0, 'P'}, + {"P", no_argument, 0, 'P'}, @@ -5796,7 +3602,7 @@ Index: gdb-7.2.90.20110703/gdb/main.c { int option_index; -@@ -472,6 +479,9 @@ captured_main (void *data) +@@ -494,6 +501,9 @@ captured_main (void *data) case 0: /* Long option that just sets a flag. */ break; @@ -5806,7 +3612,7 @@ Index: gdb-7.2.90.20110703/gdb/main.c case OPT_SE: symarg = optarg; execarg = optarg; -@@ -667,7 +677,31 @@ captured_main (void *data) +@@ -701,7 +711,31 @@ captured_main (void *data) /* Now that gdb_init has created the initial inferior, we're in position to set args for that inferior. */ @@ -5839,7 +3645,7 @@ Index: gdb-7.2.90.20110703/gdb/main.c { /* The remaining options are the command-line options for the inferior. The first one is the sym/exec file, and the rest -@@ -916,7 +950,8 @@ captured_main (void *data) +@@ -981,7 +1015,8 @@ captured_main (void *data) /* Read in the old history after all the command files have been read. */ @@ -5849,7 +3655,7 @@ Index: gdb-7.2.90.20110703/gdb/main.c if (batch_flag) { -@@ -927,13 +962,25 @@ captured_main (void *data) +@@ -992,13 +1027,25 @@ captured_main (void *data) /* Show time and/or space usage. */ do_cleanups (pre_stat_chain); @@ -5881,7 +3687,7 @@ Index: gdb-7.2.90.20110703/gdb/main.c } /* No exit -- exit is through quit_command. */ } -@@ -965,7 +1012,12 @@ print_gdb_help (struct ui_file *stream) +@@ -1030,7 +1077,12 @@ print_gdb_help (struct ui_file *stream) fputs_unfiltered (_("\ This is the GNU debugger. Usage:\n\n\ gdb [options] [executable-file [core-file or process-id]]\n\ @@ -5895,7 +3701,7 @@ Index: gdb-7.2.90.20110703/gdb/main.c Options:\n\n\ "), stream); fputs_unfiltered (_("\ -@@ -1003,7 +1055,13 @@ Options:\n\n\ +@@ -1070,7 +1122,13 @@ Options:\n\n\ --nw Do not use a window interface.\n\ --nx Do not read "), stream); fputs_unfiltered (gdbinit, stream); @@ -5910,50 +3716,10 @@ Index: gdb-7.2.90.20110703/gdb/main.c --quiet Do not print version number on startup.\n\ --readnow Fully read symbol files on first access.\n\ "), stream); -Index: gdb-7.2.90.20110703/gdb/mi/mi-cmd-var.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/mi/mi-cmd-var.c 2011-01-12 22:09:39.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/mi/mi-cmd-var.c 2011-07-03 10:33:11.000000000 +0200 -@@ -707,7 +707,6 @@ mi_cmd_var_update (char *command, char * - } - else - { -- /* Get varobj handle, if a valid var obj name was specified */ - struct varobj *var = varobj_get_handle (name); - - varobj_update_one (var, print_values, 1 /* explicit */); -Index: gdb-7.2.90.20110703/gdb/mipsread.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/mipsread.c 2011-03-07 17:17:29.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/mipsread.c 2011-07-03 10:33:11.000000000 +0200 -@@ -402,6 +402,7 @@ static const struct sym_fns ecoff_sym_fn - default_symfile_segments, /* Get segment information from a file. */ - NULL, - default_symfile_relocate, /* Relocate a debug section. */ -+ NULL, /* sym_probe_fns */ - &psym_functions - }; - -Index: gdb-7.2.90.20110703/gdb/objfiles.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/objfiles.c 2011-04-25 23:25:18.000000000 +0200 -+++ gdb-7.2.90.20110703/gdb/objfiles.c 2011-07-03 10:33:11.000000000 +0200 -@@ -846,6 +846,11 @@ objfile_relocate1 (struct objfile *objfi - obj_section_addr (s)); - } - -+ /* Relocating SystemTap probes. */ -+ if (objfile->sf && objfile->sf->sym_probe_fns) -+ objfile->sf->sym_probe_fns->sym_relocate_probe (objfile, -+ new_offsets, delta); -+ - /* Data changed. */ - return 1; - } -Index: gdb-7.2.90.20110703/gdb/p-valprint.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/p-valprint.c 2011-03-15 17:00:56.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/p-valprint.c 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/p-valprint.c b/gdb/p-valprint.c +index b8434ed..98a076d 100644 +--- a/gdb/p-valprint.c ++++ b/gdb/p-valprint.c @@ -39,6 +39,7 @@ #include "cp-abi.h" #include "cp-support.h" @@ -5961,11 +3727,11 @@ Index: gdb-7.2.90.20110703/gdb/p-valprint.c +#include "dwarf2loc.h" - /* See val_print for a description of the various parameters of this -@@ -63,8 +64,31 @@ pascal_val_print (struct type *type, con + /* Decorations for Pascal. */ +@@ -74,8 +75,31 @@ pascal_val_print (struct type *type, const gdb_byte *valaddr, struct type *char_type; - LONGEST val; CORE_ADDR addr; + int want_space = 0; + struct cleanup *back_to; + struct type *saved_type = type; + CORE_ADDR saved_address = address; @@ -5978,7 +3744,7 @@ Index: gdb-7.2.90.20110703/gdb/p-valprint.c + fputs_filtered (object_address_data_not_valid (saved_type), stream); + gdb_flush (stream); + do_cleanups (back_to); -+ return 0; ++ return; + } + if (address != saved_address + embedded_offset) + { @@ -5995,7 +3761,7 @@ Index: gdb-7.2.90.20110703/gdb/p-valprint.c switch (TYPE_CODE (type)) { case TYPE_CODE_ARRAY: -@@ -120,8 +144,8 @@ pascal_val_print (struct type *type, con +@@ -131,8 +155,8 @@ pascal_val_print (struct type *type, const gdb_byte *valaddr, { i = 0; } @@ -6006,35 +3772,35 @@ Index: gdb-7.2.90.20110703/gdb/p-valprint.c original_value, options, i); fprintf_filtered (stream, "}"); } -@@ -160,6 +184,7 @@ pascal_val_print (struct type *type, con +@@ -170,6 +194,7 @@ pascal_val_print (struct type *type, const gdb_byte *valaddr, + { /* Try to print what function it points to. */ - print_address_demangle (gdbarch, addr, stream, demangle); - /* Return value is irrelevant except for string pointers. */ + print_address_demangle (options, gdbarch, addr, stream, demangle); + do_cleanups (back_to); - return (0); + return; } -@@ -251,6 +276,7 @@ pascal_val_print (struct type *type, con - /* Return number of characters printed, including the terminating - '\0' if we reached the end. val_print_string takes care including - the terminating '\0' if necessary. */ -+ do_cleanups (back_to); - return i; +@@ -271,6 +296,7 @@ pascal_val_print (struct type *type, const gdb_byte *valaddr, + } + } - break; -@@ -567,6 +593,7 @@ pascal_val_print (struct type *type, con ++ do_cleanups (back_to); + return; + + case TYPE_CODE_REF: +@@ -421,6 +447,7 @@ pascal_val_print (struct type *type, const gdb_byte *valaddr, TYPE_CODE (type)); } gdb_flush (stream); + do_cleanups (back_to); - return (0); } -Index: gdb-7.2.90.20110703/gdb/parse.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/parse.c 2011-03-28 22:21:03.000000000 +0200 -+++ gdb-7.2.90.20110703/gdb/parse.c 2011-07-03 10:33:11.000000000 +0200 -@@ -1502,6 +1502,7 @@ parser_fprintf (FILE *x, const char *y, + void +diff --git a/gdb/parse.c b/gdb/parse.c +index f54c6f2..70e9a05 100644 +--- a/gdb/parse.c ++++ b/gdb/parse.c +@@ -1516,6 +1516,7 @@ parser_fprintf (FILE *x, const char *y, ...) int operator_check_standard (struct expression *exp, int pos, @@ -6042,7 +3808,7 @@ Index: gdb-7.2.90.20110703/gdb/parse.c int (*objfile_func) (struct objfile *objfile, void *data), void *data) -@@ -1543,7 +1544,7 @@ operator_check_standard (struct expressi +@@ -1557,7 +1558,7 @@ operator_check_standard (struct expression *exp, int pos, struct type *type = elts[pos + 2 + arg].type; struct objfile *objfile = TYPE_OBJFILE (type); @@ -6051,7 +3817,7 @@ Index: gdb-7.2.90.20110703/gdb/parse.c return 1; } } -@@ -1561,7 +1562,8 @@ operator_check_standard (struct expressi +@@ -1575,7 +1576,8 @@ operator_check_standard (struct expression *exp, int pos, /* Check objfile where the variable itself is placed. SYMBOL_OBJ_SECTION (symbol) may be NULL. */ @@ -6061,7 +3827,7 @@ Index: gdb-7.2.90.20110703/gdb/parse.c return 1; /* Check objfile where is placed the code touching the variable. */ -@@ -1574,24 +1576,27 @@ operator_check_standard (struct expressi +@@ -1588,24 +1590,27 @@ operator_check_standard (struct expression *exp, int pos, /* Invoke callbacks for TYPE and OBJFILE if they were set as non-NULL. */ @@ -6097,7 +3863,7 @@ Index: gdb-7.2.90.20110703/gdb/parse.c int (*objfile_func) (struct objfile *objfile, void *data), void *data) { -@@ -1606,7 +1611,9 @@ exp_iterate (struct expression *exp, +@@ -1620,7 +1625,9 @@ exp_iterate (struct expression *exp, pos = endpos - oplen; if (exp->language_defn->la_exp_desc->operator_check (exp, pos, @@ -6108,7 +3874,7 @@ Index: gdb-7.2.90.20110703/gdb/parse.c return 1; endpos = pos; -@@ -1637,8 +1644,29 @@ exp_uses_objfile (struct expression *exp +@@ -1651,8 +1658,29 @@ exp_uses_objfile (struct expression *exp, struct objfile *objfile) { gdb_assert (objfile->separate_debug_objfile_backlink == NULL); @@ -6139,11 +3905,11 @@ Index: gdb-7.2.90.20110703/gdb/parse.c void _initialize_parse (void) -Index: gdb-7.2.90.20110703/gdb/parser-defs.h -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/parser-defs.h 2011-01-10 21:38:49.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/parser-defs.h 2011-07-03 10:33:11.000000000 +0200 -@@ -194,6 +194,8 @@ extern void operator_length_standard (co +diff --git a/gdb/parser-defs.h b/gdb/parser-defs.h +index 72b9e2f..719a652 100644 +--- a/gdb/parser-defs.h ++++ b/gdb/parser-defs.h +@@ -215,6 +215,8 @@ extern void operator_length_standard (const struct expression *, int, int *, int *); extern int operator_check_standard (struct expression *exp, int pos, @@ -6152,7 +3918,7 @@ Index: gdb-7.2.90.20110703/gdb/parser-defs.h int (*objfile_func) (struct objfile *objfile, void *data), void *data); -@@ -291,6 +293,7 @@ struct exp_descriptor +@@ -301,6 +303,7 @@ struct exp_descriptor value should be immediately returned to the caller. Otherwise zero should be returned. */ int (*operator_check) (struct expression *exp, int pos, @@ -6160,7 +3926,7 @@ Index: gdb-7.2.90.20110703/gdb/parser-defs.h int (*objfile_func) (struct objfile *objfile, void *data), void *data); -@@ -329,4 +332,10 @@ extern void parser_fprintf (FILE *, cons +@@ -339,4 +342,10 @@ extern void parser_fprintf (FILE *, const char *, ...) ATTRIBUTE_PRINTF (2, 3); extern int exp_uses_objfile (struct expression *exp, struct objfile *objfile); @@ -6171,158 +3937,19 @@ Index: gdb-7.2.90.20110703/gdb/parser-defs.h +#endif + #endif /* PARSER_DEFS_H */ -Index: gdb-7.2.90.20110703/gdb/ppc-linux-nat.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/ppc-linux-nat.c 2011-04-18 23:29:18.000000000 +0200 -+++ gdb-7.2.90.20110703/gdb/ppc-linux-nat.c 2011-07-03 10:33:11.000000000 +0200 -@@ -1637,6 +1637,14 @@ booke_remove_point (struct ppc_hw_breakp - hw_breaks[i].hw_break = NULL; - } +diff --git a/gdb/printcmd.c b/gdb/printcmd.c +index 030a4f2..306be18 100644 +--- a/gdb/printcmd.c ++++ b/gdb/printcmd.c +@@ -49,6 +49,7 @@ + #include "charset.h" + #include "arch-utils.h" + #include "cli/cli-utils.h" ++#include "dwarf2loc.h" -+static void -+booke_insert_point_callback (int tid, void *pp_voidp) -+{ -+ struct ppc_hw_breakpoint *pp = pp_voidp; -+ -+ booke_insert_point (pp, tid); -+} -+ - /* Return the number of registers needed for a ranged breakpoint. */ - - static int -@@ -1654,8 +1662,6 @@ static int - ppc_linux_insert_hw_breakpoint (struct gdbarch *gdbarch, - struct bp_target_info *bp_tgt) - { -- ptid_t ptid; -- struct lwp_info *lp; - struct ppc_hw_breakpoint p; - - if (!have_ptrace_booke_interface ()) -@@ -1681,18 +1687,23 @@ ppc_linux_insert_hw_breakpoint (struct g - p.addr2 = 0; - } - -- ALL_LWPS (lp, ptid) -- booke_insert_point (&p, TIDGET (ptid)); -+ linux_nat_iterate_watchpoint_lwps (booke_insert_point_callback, &p); - - return 0; - } - -+static void -+booke_remove_point_callback (int tid, void *pp_voidp) -+{ -+ struct ppc_hw_breakpoint *pp = pp_voidp; -+ -+ booke_remove_point (pp, tid); -+} -+ - static int - ppc_linux_remove_hw_breakpoint (struct gdbarch *gdbarch, - struct bp_target_info *bp_tgt) - { -- ptid_t ptid; -- struct lwp_info *lp; - struct ppc_hw_breakpoint p; - - if (!have_ptrace_booke_interface ()) -@@ -1718,8 +1729,7 @@ ppc_linux_remove_hw_breakpoint (struct g - p.addr2 = 0; - } - -- ALL_LWPS (lp, ptid) -- booke_remove_point (&p, TIDGET (ptid)); -+ linux_nat_iterate_watchpoint_lwps (booke_remove_point_callback, &p); - - return 0; - } -@@ -1946,6 +1956,15 @@ ppc_linux_can_accel_watchpoint_condition - && check_condition (addr, cond, &data_value, &len)); - } - -+static void -+set_saved_dabr_value_callback (int tid, void *retp_voidp) -+{ -+ int *retp = retp_voidp; -+ -+ if (ptrace (PTRACE_SET_DEBUGREG, tid, 0, saved_dabr_value) < 0) -+ *retp = -1; -+} -+ - /* Set up P with the parameters necessary to request a watchpoint covering - LEN bytes starting at ADDR and if possible with condition expression COND - evaluated by hardware. INSERT tells if we are creating a request for -@@ -2000,8 +2019,6 @@ static int - ppc_linux_insert_watchpoint (CORE_ADDR addr, int len, int rw, - struct expression *cond) - { -- struct lwp_info *lp; -- ptid_t ptid; - int ret = -1; - - if (have_ptrace_booke_interface ()) -@@ -2010,8 +2027,7 @@ ppc_linux_insert_watchpoint (CORE_ADDR a - - create_watchpoint_request (&p, addr, len, rw, cond, 1); - -- ALL_LWPS (lp, ptid) -- booke_insert_point (&p, TIDGET (ptid)); -+ linux_nat_iterate_watchpoint_lwps (booke_insert_point_callback, &p); - - ret = 0; - } -@@ -2054,12 +2070,8 @@ ppc_linux_insert_watchpoint (CORE_ADDR a - - saved_dabr_value = dabr_value; - -- ALL_LWPS (lp, ptid) -- if (ptrace (PTRACE_SET_DEBUGREG, TIDGET (ptid), 0, -- saved_dabr_value) < 0) -- return -1; -- - ret = 0; -+ linux_nat_iterate_watchpoint_lwps (set_saved_dabr_value_callback, &ret); - } - - return ret; -@@ -2069,8 +2081,6 @@ static int - ppc_linux_remove_watchpoint (CORE_ADDR addr, int len, int rw, - struct expression *cond) - { -- struct lwp_info *lp; -- ptid_t ptid; - int ret = -1; - - if (have_ptrace_booke_interface ()) -@@ -2079,20 +2089,16 @@ ppc_linux_remove_watchpoint (CORE_ADDR a - - create_watchpoint_request (&p, addr, len, rw, cond, 0); - -- ALL_LWPS (lp, ptid) -- booke_remove_point (&p, TIDGET (ptid)); -+ linux_nat_iterate_watchpoint_lwps (booke_remove_point_callback, &p); - - ret = 0; - } - else - { - saved_dabr_value = 0; -- ALL_LWPS (lp, ptid) -- if (ptrace (PTRACE_SET_DEBUGREG, TIDGET (ptid), 0, -- saved_dabr_value) < 0) -- return -1; - - ret = 0; -+ linux_nat_iterate_watchpoint_lwps (set_saved_dabr_value_callback, &ret); - } - - return ret; -Index: gdb-7.2.90.20110703/gdb/printcmd.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/printcmd.c 2011-03-22 15:39:40.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/printcmd.c 2011-07-03 10:33:11.000000000 +0200 -@@ -975,6 +975,11 @@ print_command_1 (char *exp, int inspect, + #ifdef TUI + #include "tui/tui.h" /* For tui_active et al. */ +@@ -974,6 +975,11 @@ print_command_1 (char *exp, int inspect, int voidprint) else val = access_value_history (0); @@ -6334,7 +3961,17 @@ Index: gdb-7.2.90.20110703/gdb/printcmd.c if (voidprint || (val && value_type (val) && TYPE_CODE (value_type (val)) != TYPE_CODE_VOID)) { -@@ -1476,6 +1481,24 @@ x_command (char *exp, int from_tty) +@@ -1062,6 +1068,9 @@ output_command (char *exp, int from_tty) + + val = evaluate_expression (expr); + ++ if (VALUE_LVAL (val) == lval_memory) ++ object_address_set (value_raw_address (val)); ++ + annotate_value_begin (value_type (val)); + + get_formatted_print_options (&opts, format); +@@ -1491,6 +1500,24 @@ x_command (char *exp, int from_tty) set_internalvar (lookup_internalvar ("__"), last_examine_value); } } @@ -6359,7 +3996,18 @@ Index: gdb-7.2.90.20110703/gdb/printcmd.c /* Add an expression to the auto-display chain. -@@ -2870,4 +2893,8 @@ Show printing of source filename and lin +@@ -1986,6 +2013,10 @@ print_variable_and_value (const char *name, struct symbol *var, + struct value_print_options opts; + + val = read_var_value (var, frame); ++ ++ make_cleanup_restore_selected_frame (); ++ select_frame (frame); ++ + get_user_print_options (&opts); + opts.deref_ref = 1; + common_val_print (val, stream, indent, &opts, current_language); +@@ -2899,4 +2930,8 @@ Show printing of source filename and line number with ."), NULL, add_com ("eval", no_class, eval_command, _("\ Convert \"printf format string\", arg1, arg2, arg3, ..., argn to\n\ a command line, and call it.")); @@ -6368,10 +4016,11 @@ Index: gdb-7.2.90.20110703/gdb/printcmd.c + observer_attach_mark_used (print_types_mark_used); +#endif } -Index: gdb-7.2.90.20110703/gdb/python/lib/gdb/FrameIterator.py -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/python/lib/gdb/FrameIterator.py 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/python/lib/gdb/FrameIterator.py b/gdb/python/lib/gdb/FrameIterator.py +new file mode 100644 +index 0000000..5654546 +--- /dev/null ++++ b/gdb/python/lib/gdb/FrameIterator.py @@ -0,0 +1,33 @@ +# Iterator over frames. + @@ -6406,10 +4055,11 @@ Index: gdb-7.2.90.20110703/gdb/python/lib/gdb/FrameIterator.py + raise StopIteration + self.frame = result.older () + return result -Index: gdb-7.2.90.20110703/gdb/python/lib/gdb/FrameWrapper.py -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/python/lib/gdb/FrameWrapper.py 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/python/lib/gdb/FrameWrapper.py b/gdb/python/lib/gdb/FrameWrapper.py +new file mode 100644 +index 0000000..b790a54 +--- /dev/null ++++ b/gdb/python/lib/gdb/FrameWrapper.py @@ -0,0 +1,112 @@ +# Wrapper API for frames. + @@ -6523,10 +4173,11 @@ Index: gdb-7.2.90.20110703/gdb/python/lib/gdb/FrameWrapper.py + + def __getattr__ (self, name): + return getattr (self.frame, name) -Index: gdb-7.2.90.20110703/gdb/python/lib/gdb/backtrace.py -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/python/lib/gdb/backtrace.py 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/python/lib/gdb/backtrace.py b/gdb/python/lib/gdb/backtrace.py +new file mode 100644 +index 0000000..6bb4fb1 +--- /dev/null ++++ b/gdb/python/lib/gdb/backtrace.py @@ -0,0 +1,42 @@ +# Filtering backtrace. + @@ -6570,74 +4221,11 @@ Index: gdb-7.2.90.20110703/gdb/python/lib/gdb/backtrace.py + return iter + return frame_filter (iter) + -Index: gdb-7.2.90.20110703/gdb/python/lib/gdb/command/alias.py -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/python/lib/gdb/command/alias.py 2011-07-03 10:33:11.000000000 +0200 -@@ -0,0 +1,59 @@ -+# Alias command. -+ -+# Copyright (C) 2008 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 . -+ -+import gdb -+ -+class AliasImplementation (gdb.Command): -+ def __init__ (self, name, real, doc): -+ # Have to set __doc__ before the super init call. -+ # It would be nice if gdb's help looked up __doc__ dynamically. -+ self.__doc__ = doc -+ # Note: no good way to complete :( -+ super (AliasImplementation, self).__init__ (name, gdb.COMMAND_NONE) -+ self.real = real -+ -+ def invoke(self, arg, from_tty): -+ gdb.execute (self.real + ' ' + arg, from_tty) -+ -+class AliasCommand (gdb.Command): -+ """Alias one command to another. -+In the simplest form, the first word is the name of the alias, and -+the remaining words are the the expansion. -+An '=' by itself can be used to define a multi-word alias; words -+before the '=' are the name of the new command.""" -+ -+ def __init__ (self): -+ # Completion is not quite right here. -+ super (AliasCommand, self).__init__ ("alias", gdb.COMMAND_NONE, -+ gdb.COMPLETE_COMMAND) -+ -+ def invoke (self, arg, from_tty): -+ self.dont_repeat () -+ # Without some form of quoting we can't alias a multi-word -+ # command to another command. -+ args = arg.split() -+ try: -+ start = args.index ('=') -+ end = start + 1 -+ except ValueError: -+ start = 1 -+ end = 1 -+ target = " ".join(args[end:]) -+ AliasImplementation (" ".join (args[0:start]), target, -+ "This command is an alias for '%s'." % target) -+ -+AliasCommand() -Index: gdb-7.2.90.20110703/gdb/python/lib/gdb/command/backtrace.py -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/python/lib/gdb/command/backtrace.py 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/python/lib/gdb/command/backtrace.py b/gdb/python/lib/gdb/command/backtrace.py +new file mode 100644 +index 0000000..eeea909 +--- /dev/null ++++ b/gdb/python/lib/gdb/command/backtrace.py @@ -0,0 +1,106 @@ +# New backtrace command. + @@ -6745,10 +4333,11 @@ Index: gdb-7.2.90.20110703/gdb/python/lib/gdb/command/backtrace.py + pair[1].describe (sys.stdout, full) + +FilteringBacktrace() -Index: gdb-7.2.90.20110703/gdb/python/lib/gdb/command/ignore_errors.py -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/python/lib/gdb/command/ignore_errors.py 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/python/lib/gdb/command/ignore_errors.py b/gdb/python/lib/gdb/command/ignore_errors.py +new file mode 100644 +index 0000000..6fa48ff +--- /dev/null ++++ b/gdb/python/lib/gdb/command/ignore_errors.py @@ -0,0 +1,37 @@ +# Ignore errors in user commands. + @@ -6787,10 +4376,11 @@ Index: gdb-7.2.90.20110703/gdb/python/lib/gdb/command/ignore_errors.py + pass + +IgnoreErrorsCommand () -Index: gdb-7.2.90.20110703/gdb/python/lib/gdb/command/pahole.py -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/python/lib/gdb/command/pahole.py 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/python/lib/gdb/command/pahole.py b/gdb/python/lib/gdb/command/pahole.py +new file mode 100644 +index 0000000..21a0bf0 +--- /dev/null ++++ b/gdb/python/lib/gdb/command/pahole.py @@ -0,0 +1,75 @@ +# pahole command for gdb + @@ -6867,10 +4457,11 @@ Index: gdb-7.2.90.20110703/gdb/python/lib/gdb/command/pahole.py + self.pahole (type, 0, '') + +Pahole() -Index: gdb-7.2.90.20110703/gdb/python/lib/gdb/command/require.py -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/python/lib/gdb/command/require.py 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/python/lib/gdb/command/require.py b/gdb/python/lib/gdb/command/require.py +new file mode 100644 +index 0000000..1fbc1e8 +--- /dev/null ++++ b/gdb/python/lib/gdb/command/require.py @@ -0,0 +1,57 @@ +# Demand-loading commands. + @@ -6929,10 +4520,11 @@ Index: gdb-7.2.90.20110703/gdb/python/lib/gdb/command/require.py +RequireCommand() +RequireSubcommand("command") +RequireSubcommand("function") -Index: gdb-7.2.90.20110703/gdb/python/lib/gdb/command/upto.py -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/python/lib/gdb/command/upto.py 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/python/lib/gdb/command/upto.py b/gdb/python/lib/gdb/command/upto.py +new file mode 100644 +index 0000000..faf54ed +--- /dev/null ++++ b/gdb/python/lib/gdb/command/upto.py @@ -0,0 +1,129 @@ +# upto command. + @@ -7063,16 +4655,18 @@ Index: gdb-7.2.90.20110703/gdb/python/lib/gdb/command/upto.py +UptoSourceCommand () +UptoObjectCommand () +UptoWhereCommand () -Index: gdb-7.2.90.20110703/gdb/python/lib/gdb/function/__init__.py -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/python/lib/gdb/function/__init__.py 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/python/lib/gdb/function/__init__.py b/gdb/python/lib/gdb/function/__init__.py +new file mode 100644 +index 0000000..8b13789 +--- /dev/null ++++ b/gdb/python/lib/gdb/function/__init__.py @@ -0,0 +1 @@ + -Index: gdb-7.2.90.20110703/gdb/python/lib/gdb/function/caller_is.py -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/python/lib/gdb/function/caller_is.py 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/python/lib/gdb/function/caller_is.py b/gdb/python/lib/gdb/function/caller_is.py +new file mode 100644 +index 0000000..2b9c5c7 +--- /dev/null ++++ b/gdb/python/lib/gdb/function/caller_is.py @@ -0,0 +1,58 @@ +# Caller-is functions. + @@ -7132,10 +4726,11 @@ Index: gdb-7.2.90.20110703/gdb/python/lib/gdb/function/caller_is.py + +CallerIs() +CallerMatches() -Index: gdb-7.2.90.20110703/gdb/python/lib/gdb/function/in_scope.py -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/python/lib/gdb/function/in_scope.py 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/python/lib/gdb/function/in_scope.py b/gdb/python/lib/gdb/function/in_scope.py +new file mode 100644 +index 0000000..debb3bb +--- /dev/null ++++ b/gdb/python/lib/gdb/function/in_scope.py @@ -0,0 +1,47 @@ +# In-scope function. + @@ -7184,20 +4779,20 @@ Index: gdb-7.2.90.20110703/gdb/python/lib/gdb/function/in_scope.py + return wanted == found + +InScope () -Index: gdb-7.2.90.20110703/gdb/python/py-type.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/python/py-type.c 2011-01-26 21:53:45.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/python/py-type.c 2011-07-03 10:33:11.000000000 +0200 -@@ -29,6 +29,8 @@ - #include "language.h" +diff --git a/gdb/python/py-type.c b/gdb/python/py-type.c +index 98030a6..9870eec 100644 +--- a/gdb/python/py-type.c ++++ b/gdb/python/py-type.c +@@ -30,6 +30,8 @@ #include "vec.h" #include "bcache.h" + #include "dwarf2loc.h" +#include "observer.h" +#include "gdb_assert.h" typedef struct pyty_type_object { -@@ -37,11 +39,19 @@ typedef struct pyty_type_object +@@ -38,11 +40,19 @@ typedef struct pyty_type_object /* If a Type object is associated with an objfile, it is kept on a doubly-linked list, rooted in the objfile. This lets us copy the @@ -7218,7 +4813,7 @@ Index: gdb-7.2.90.20110703/gdb/python/py-type.c static PyTypeObject type_object_type; /* A Field object. */ -@@ -919,8 +929,63 @@ typy_richcompare (PyObject *self, PyObje +@@ -1166,8 +1176,63 @@ typy_richcompare (PyObject *self, PyObject *other, int op) @@ -7282,7 +4877,7 @@ Index: gdb-7.2.90.20110703/gdb/python/py-type.c static void save_objfile_types (struct objfile *objfile, void *datum) { -@@ -938,12 +1003,13 @@ save_objfile_types (struct objfile *objf +@@ -1185,12 +1250,13 @@ save_objfile_types (struct objfile *objfile, void *datum) { type_object *next = obj->next; @@ -7300,7 +4895,7 @@ Index: gdb-7.2.90.20110703/gdb/python/py-type.c obj = next; } -@@ -954,43 +1020,28 @@ save_objfile_types (struct objfile *objf +@@ -1201,43 +1267,28 @@ save_objfile_types (struct objfile *objfile, void *datum) } static void @@ -7312,7 +4907,8 @@ Index: gdb-7.2.90.20110703/gdb/python/py-type.c - if (type && TYPE_OBJFILE (type)) - { - struct objfile *objfile = TYPE_OBJFILE (type); -- ++ type_object *type_obj = (type_object *) obj; + - obj->next = objfile_data (objfile, typy_objfile_data_key); - if (obj->next) - obj->next->prev = obj; @@ -7320,8 +4916,6 @@ Index: gdb-7.2.90.20110703/gdb/python/py-type.c - } - else - obj->next = NULL; -+ type_object *type_obj = (type_object *) obj; -+ + typy_unlink (type_obj); + + type_obj->ob_type->tp_free (obj); @@ -7357,9 +4951,9 @@ Index: gdb-7.2.90.20110703/gdb/python/py-type.c } +#endif - /* Create a new Type referring to TYPE. */ - PyObject * -@@ -1000,7 +1051,10 @@ type_to_type_object (struct type *type) + /* Return number of fields ("length" of the field dictionary). */ + +@@ -1457,7 +1508,10 @@ type_to_type_object (struct type *type) type_obj = PyObject_New (type_object, &type_object_type); if (type_obj) @@ -7371,7 +4965,7 @@ Index: gdb-7.2.90.20110703/gdb/python/py-type.c return (PyObject *) type_obj; } -@@ -1074,6 +1128,10 @@ gdbpy_initialize_types (void) +@@ -1537,6 +1591,10 @@ gdbpy_initialize_types (void) Py_INCREF (&field_object_type); PyModule_AddObject (gdb_module, "Field", (PyObject *) &field_object_type); @@ -7382,19 +4976,19 @@ Index: gdb-7.2.90.20110703/gdb/python/py-type.c } -Index: gdb-7.2.90.20110703/gdb/python/py-value.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/python/py-value.c 2011-03-18 17:09:57.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/python/py-value.c 2011-07-03 10:33:11.000000000 +0200 -@@ -28,6 +28,7 @@ - #include "infcall.h" +diff --git a/gdb/python/py-value.c b/gdb/python/py-value.c +index 6f67bdb..5ddd6bc 100644 +--- a/gdb/python/py-value.c ++++ b/gdb/python/py-value.c +@@ -29,6 +29,7 @@ #include "expression.h" #include "cp-abi.h" + #include "python.h" +#include "observer.h" #ifdef HAVE_PYTHON -@@ -1210,6 +1211,19 @@ gdbpy_is_value_object (PyObject *obj) +@@ -1378,6 +1379,19 @@ gdbpy_is_value_object (PyObject *obj) return PyObject_TypeCheck (obj, &value_object_type); } @@ -7414,7 +5008,7 @@ Index: gdb-7.2.90.20110703/gdb/python/py-value.c void gdbpy_initialize_values (void) { -@@ -1220,6 +1234,10 @@ gdbpy_initialize_values (void) +@@ -1388,6 +1402,10 @@ gdbpy_initialize_values (void) PyModule_AddObject (gdb_module, "Value", (PyObject *) &value_object_type); values_in_python = NULL; @@ -7425,11 +5019,11 @@ Index: gdb-7.2.90.20110703/gdb/python/py-value.c } -Index: gdb-7.2.90.20110703/gdb/python/python.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/python/python.c 2011-07-02 21:33:10.000000000 +0200 -+++ gdb-7.2.90.20110703/gdb/python/python.c 2011-07-03 10:33:11.000000000 +0200 -@@ -49,8 +49,11 @@ static int gdbpy_should_print_stack = 1; +diff --git a/gdb/python/python.c b/gdb/python/python.c +index 19eb7b5..0e7256e 100644 +--- a/gdb/python/python.c ++++ b/gdb/python/python.c +@@ -66,10 +66,13 @@ static const char *gdbpy_should_print_stack = python_excp_message; #include "linespec.h" #include "source.h" #include "version.h" @@ -7437,11 +5031,13 @@ Index: gdb-7.2.90.20110703/gdb/python/python.c +#include "gdbthread.h" #include "target.h" #include "gdbthread.h" + #include "observer.h" + #include "interps.h" +#include "event-top.h" static PyMethodDef GdbMethods[]; -@@ -769,6 +772,53 @@ gdbpy_print_stack (void) +@@ -974,6 +977,53 @@ gdbpy_print_stack (void) /* Return the current Progspace. There always is one. */ @@ -7495,7 +5091,7 @@ Index: gdb-7.2.90.20110703/gdb/python/python.c static PyObject * gdbpy_get_current_progspace (PyObject *unused1, PyObject *unused2) -@@ -1194,6 +1244,8 @@ static PyMethodDef GdbMethods[] = +@@ -1415,6 +1465,8 @@ static PyMethodDef GdbMethods[] = "Get a value from history" }, { "execute", (PyCFunction) execute_gdb_command, METH_VARARGS | METH_KEYWORDS, "Execute a gdb command" }, @@ -7504,2328 +5100,55 @@ Index: gdb-7.2.90.20110703/gdb/python/python.c { "parameter", gdbpy_parameter, METH_VARARGS, "Return a gdb parameter's value" }, -Index: gdb-7.2.90.20110703/gdb/python/python.h -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/python/python.h 2011-03-14 17:09:54.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/python/python.h 2011-07-03 10:33:11.000000000 +0200 -@@ -32,6 +32,8 @@ void eval_python_from_control_command (s +diff --git a/gdb/python/python.h b/gdb/python/python.h +index dd7066f..f0f6e90 100644 +--- a/gdb/python/python.h ++++ b/gdb/python/python.h +@@ -30,6 +30,8 @@ void eval_python_from_control_command (struct command_line *); - void source_python_script (FILE *stream, const char *file); + void source_python_script (FILE *file, const char *filename); +void run_python_script (int argc, char **argv); + int apply_val_pretty_printer (struct type *type, const gdb_byte *valaddr, int embedded_offset, CORE_ADDR address, struct ui_file *stream, int recurse, -Index: gdb-7.2.90.20110703/gdb/somread.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/somread.c 2011-03-07 17:17:29.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/somread.c 2011-07-03 10:33:11.000000000 +0200 -@@ -439,6 +439,7 @@ static const struct sym_fns som_sym_fns - default_symfile_segments, /* Get segment information from a file. */ - NULL, - default_symfile_relocate, /* Relocate a debug section. */ -+ NULL, /* sym_get_probes */ - &psym_functions - }; +diff --git a/gdb/stack.c b/gdb/stack.c +index 02e36ca..066407f 100644 +--- a/gdb/stack.c ++++ b/gdb/stack.c +@@ -509,6 +509,10 @@ print_frame_args (struct symbol *func, struct frame_info *frame, + stb = mem_fileopen (); + old_chain = make_cleanup_ui_file_delete (stb); -Index: gdb-7.2.90.20110703/gdb/stack.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/stack.c 2011-03-18 19:48:56.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/stack.c 2011-07-03 10:33:11.000000000 +0200 -@@ -366,6 +366,7 @@ print_frame_args (struct symbol *func, s - { - const struct language_defn *language; - struct value_print_options opts; -+ struct cleanup *old_chain; - - /* Use the appropriate language to display our symbol, - unless the user forced the language to a specific -@@ -378,7 +379,13 @@ print_frame_args (struct symbol *func, s - get_raw_print_options (&opts); - opts.deref_ref = 0; - opts.summary = summary; -+ -+ /* Frame may be needed for check_typedef of TYPE_DYNAMIC. */ -+ old_chain = make_cleanup_restore_selected_frame (); -+ select_frame (frame); - common_val_print (val, stb->stream, 2, &opts, language); -+ do_cleanups (old_chain); -+ - ui_out_field_stream (uiout, "value", stb); - } - else -Index: gdb-7.2.90.20110703/gdb/stap-probe.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/stap-probe.c 2011-07-03 10:33:11.000000000 +0200 -@@ -0,0 +1,2041 @@ -+/* SystemTap probe support for GDB. -+ -+ Copyright (C) 2011 Free Software Foundation, Inc. -+ -+ This file is part of GDB. -+ -+ 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 . */ -+ -+#include "defs.h" -+#include "stap-probe.h" -+#include "vec.h" -+#include "ui-out.h" -+#include "gdb_regex.h" -+#include "objfiles.h" -+#include "arch-utils.h" -+#include "command.h" -+#include "filenames.h" -+#include "value.h" -+#include "exceptions.h" -+#include "ax.h" -+#include "ax-gdb.h" -+#include "user-regs.h" -+#include "complaints.h" -+#include "cli/cli-utils.h" -+#include "linespec.h" -+ -+#include -+ -+/* This define is used to inform whether we are compiling an agent -+ expression or not. */ -+ -+#define STAP_COMPILING_AGENT_EXPR_P(eval_info) \ -+ (eval_info->aexpr != NULL) -+ -+/* The various possibilities of bitness defined for a probe's argument. -+ -+ The relationship is: -+ -+ - STAP_ARG_BITNESS_UNDEFINED: The user hasn't specified the bitness. -+ - STAP_ARG_BITNESS_32BIT_UNSIGNED: argument string starts with `4@'. -+ - STAP_ARG_BITNESS_32BIT_SIGNED: argument string starts with `-4@'. -+ - STAP_ARG_BITNESS_64BIT_UNSIGNED: argument string starts with `8@'. -+ - STAP_ARG_BITNESS_64BIT_SIGNED: argument string starts with `-8@'. */ -+ -+enum stap_arg_bitness -+{ -+ STAP_ARG_BITNESS_UNDEFINED, -+ STAP_ARG_BITNESS_32BIT_UNSIGNED, -+ STAP_ARG_BITNESS_32BIT_SIGNED, -+ STAP_ARG_BITNESS_64BIT_UNSIGNED, -+ STAP_ARG_BITNESS_64BIT_SIGNED, -+}; -+ -+/* The following structure represents a single argument for the probe. */ -+ -+struct stap_probe_arg -+{ -+ /* The bitness of this argument. */ -+ enum stap_arg_bitness bitness; -+ -+ /* The string representing this argument. */ -+ char *arg_str; -+}; -+ -+/* The maximum number of arguments that a probe can have, -+ as defined in . */ -+ -+#define STAP_MAX_ARGS 10 -+ -+/* Structure that holds information about all arguments of a probe. */ -+ -+struct stap_args_info -+{ -+ /* The number of valid parsed arguments. */ -+ int n_args; -+ -+ /* The probe to which these arguments belong. */ -+ struct stap_probe *probe; -+ -+ /* Information about each argument. */ -+ struct stap_probe_arg *arg; -+}; -+ -+/* Structure that contains all the necessary information to evaluate -+ an expression. */ -+ -+struct stap_evaluation_info -+{ -+ /* The constant pointer which holds the expression. This is primarily -+ used for printing error messages. Evaluation functions should -+ not modify this pointer directly; instead, they should use the -+ EXP_BUFFER pointer below. */ -+ const char *saved_expr; -+ -+ /* Modifiable version of the above pointer. */ -+ char *exp_buf; -+ -+ /* The pointer to the current gdbarch. */ -+ struct gdbarch *gdbarch; -+ -+ /* The pointer to the current frame, used when accessing registers' -+ contents. */ -+ struct frame_info *frame; -+ -+ /* The bitness specified for this argument. */ -+ enum stap_arg_bitness bitness; -+ -+ /* If the above flag is true (one), this field will contain the -+ pointer to the agent expression. */ -+ struct agent_expr *aexpr; -+ -+ /* The value we are modifying (for agent expression). */ -+ struct axs_value *avalue; -+}; -+ -+/* This dummy variable is used when parsing a probe's argument fails. -+ In this case, the number of arguments for this probe is zero, so that's -+ why this variable is useful. */ -+ -+static struct stap_args_info dummy_stap_args_info = -+ { 0, NULL, NULL }; -+ -+static struct value *stap_evaluate_probe_argument_2 -+ (struct stap_evaluation_info *eval_info, -+ struct value *lhs, int prec); -+ -+static struct value *stap_evaluate_conditionally -+ (struct stap_evaluation_info *eval_info); -+ -+/* Helper function which decides to skip whitespaces or not in a probe's -+ argument string. Basically, if we are inside a parenthesis expression -+ (i.e., inside a subexpression), we can skip whitespaces; otherwise we -+ cannot. */ -+ -+static void -+stap_skip_whitespace_cond (char **s, int inside_paren) -+{ -+ if (inside_paren) -+ *s = skip_spaces (*s); -+} -+ -+/* Helper function which parses a single argument in a probe's argument -+ string, based on various rules (which can be learned from the `gas' -+ manual). It returns 1 on success, or 0 otherwise. */ -+ -+static int -+stap_parse_arg (const char **p) -+{ -+ char *cur = (char *) *p; -+ int done = 0; -+ int paren_open = 0; -+ -+ while (!done) -+ { -+ switch (*cur) -+ { -+ case ' ': case 0: -+ /* If we're here, then we have already parsed everything -+ from this argument. */ -+ if (paren_open) -+ return 0; -+ done = 1; -+ break; -+ -+ case '(': -+ ++paren_open; -+ ++cur; -+ stap_skip_whitespace_cond (&cur, paren_open); -+ break; -+ -+ case ')': -+ if (!paren_open) -+ return 0; -+ -+ --paren_open; -+ ++cur; -+ if (paren_open) -+ cur = skip_spaces (cur); -+ break; -+ -+ case '+': case '-': -+ case '*': case '/': -+ case '>': case '<': case '|': case '&': -+ case '^': case '!': -+ { -+ char c = *cur; -+ -+ ++cur; -+ switch (*cur) -+ { -+ case '>': -+ if (c != '<' && c != '>') -+ return 0; -+ -+ ++cur; -+ break; -+ -+ case '<': -+ if (c != '<') -+ return 0; -+ -+ ++cur; -+ break; -+ -+ case '=': -+ if (c != '=' && c != '<' && c != '>' && c != '!') -+ return 0; -+ -+ ++cur; -+ break; -+ -+ case '|': -+ if (c != '|') -+ return 0; -+ -+ ++cur; -+ break; -+ -+ case '&': -+ if (c != '&') -+ return 0; -+ -+ ++cur; -+ break; -+ -+ default: -+ break; -+ } -+ /* Infix operators take two arguments, one on either -+ side. Skipping the whitespaces that may happen on the -+ right side. */ -+ stap_skip_whitespace_cond (&cur, paren_open); -+ } -+ break; -+ -+ case '%': -+ { -+ ++cur; -+ stap_skip_whitespace_cond (&cur, paren_open); -+ if (*cur >= 'a' && *cur <= 'z') -+ { -+ /* We're dealing with a register name. */ -+ while (isalnum (*cur)) -+ ++cur; -+ -+ stap_skip_whitespace_cond (&cur, paren_open); -+ -+ /* Some registers (e.g. floating-point register stack -+ registers on Intel i386) have the following syntax: -+ -+ `%st(0)', `%st(1)', and so on. -+ -+ So it's ok to expect parenthesis here. */ -+ if (*cur == '(') -+ { -+ ++cur; -+ stap_skip_whitespace_cond (&cur, paren_open); -+ if (!isdigit (*cur)) -+ /* This is an error, since we only expect numbers -+ inside this parenthesis. */ -+ return 0; -+ ++cur; -+ stap_skip_whitespace_cond (&cur, paren_open); -+ if (*cur != ')') -+ /* We only expect one number. */ -+ return 0; -+ ++cur; -+ stap_skip_whitespace_cond (&cur, paren_open); -+ } -+ } -+ } -+ break; -+ -+ case '$': -+ { -+ /* This is an integer constant. */ -+ ++cur; -+ stap_skip_whitespace_cond (&cur, paren_open); -+ -+ while (isdigit (*cur)) -+ ++cur; -+ -+ stap_skip_whitespace_cond (&cur, paren_open); -+ } -+ break; -+ -+ case '0': case '1': case '2': case '3': case '4': -+ case '5': case '6': case '7': case '8': case '9': -+ { -+ char *old = cur; -+ -+ /* Number. */ -+ while (isdigit (*cur)) -+ ++cur; -+ -+ /* We have to do a lookahead here, because the user may -+ input `2 + 2' (with spaces), and this is not an error. */ -+ cur = skip_spaces (cur); -+ -+ switch (*cur) -+ { -+ case '+': case '-': -+ /* We may find the `@' sign, and it means that the -+ argument has finished, so we shouldn't advance the -+ pointer. */ -+ if (cur[1] && (cur[1] == '4' || cur[1] == '8') -+ && cur[2] && cur[2] == '@') -+ { -+ cur = old; -+ goto fin; -+ } -+ break; -+ -+ case '*': case '/': case '>': case '<': -+ case '|': case '&': case '^': case '!': -+ /* This is a binary operation, which means we'll -+ have to find another number after the operator. */ -+ break; -+ -+ case '(': -+ /* We may also have sentences in the form: -+ -+ `4 (%rax)' */ -+ break; -+ } -+ } -+fin: -+ break; -+ } ++ /* Frame may be needed for check_typedef of TYPE_DYNAMIC. */ ++ make_cleanup_restore_selected_frame (); ++ select_frame (frame); ++ + if (func) + { + struct block *b = SYMBOL_BLOCK_VALUE (func); +diff --git a/gdb/testsuite/gdb.ada/packed_array.exp b/gdb/testsuite/gdb.ada/packed_array.exp +index 678639c..47a2202 100644 +--- a/gdb/testsuite/gdb.ada/packed_array.exp ++++ b/gdb/testsuite/gdb.ada/packed_array.exp +@@ -60,5 +60,11 @@ gdb_test_multiple "$test" "$test" { + # are. Observed with (FSF GNU Ada 4.5.3 20110124). + xfail $test + } ++ -re "= \\(\\)\[\r\n\]+$gdb_prompt $" { ++ # archer-jankratochvil-vla resolves it as a dynamic type resolved as an ++ # empty array [0..-1]. ++ # DW_AT_upper_bound : (DW_OP_fbreg: -48; DW_OP_deref) ++ xfail $test + } -+ -+ *p = cur; -+ -+ return 1; -+} -+ -+/* Helper function which is responsible for freeing the space allocated to -+ hold information about a probe's arguments. */ -+ -+static void -+stap_free_args_info (void *args_info_ptr) -+{ -+ struct stap_args_info *a = (struct stap_args_info *) args_info_ptr; -+ int i; -+ -+ for (i = 0; i < a->n_args; i++) -+ { -+ xfree (a->arg[i].arg_str); -+ } -+ -+ xfree (a->arg); -+ xfree (a); -+} -+ -+/* Function which parses an argument string from PROBE, correctly splitting -+ the arguments and storing their information in properly ways. This function -+ only separates the arguments, but does not evaluate them. -+ -+ Consider the following argument string: -+ -+ `4@%eax 4@$10' -+ -+ We have two arguments, `%eax' and `$10', both with 32-bit unsigned bitness. -+ This function basically handles them, properly filling some structures with -+ this information. */ -+ -+static void -+stap_parse_probe_arguments (struct stap_probe *probe) -+{ -+ struct stap_args_info *args_info; -+ struct cleanup *back_to; -+ const char *cur = probe->args; -+ int current_arg = -1; -+ /* This is a state-machine parser, which means we will always be -+ in a known state when parsing an argument. The state could be -+ either `NEW_ARG' if we are parsing a new argument, `BITNESS' if -+ we are parsing the bitness-definition part (i.e., `4@'), or -+ `PARSE_ARG' if we are actually parsing the argument part. */ -+ enum -+ { -+ NEW_ARG, -+ BITNESS, -+ PARSE_ARG, -+ } current_state; -+ -+ /* For now, we assume everything is not going to work. */ -+ probe->parsed_args = &dummy_stap_args_info; -+ -+ if (!cur || !*cur || *cur == ':') -+ return; -+ -+ args_info = xmalloc (sizeof (struct stap_args_info)); -+ back_to = make_cleanup (stap_free_args_info, args_info); -+ args_info->arg = xcalloc (STAP_MAX_ARGS, sizeof (struct stap_probe_arg)); -+ -+ /* Ok, let's start. */ -+ current_state = NEW_ARG; -+ -+ while (*cur) -+ { -+ switch (current_state) -+ { -+ case NEW_ARG: -+ ++current_arg; -+ -+ if (current_arg >= STAP_MAX_ARGS) -+ { -+ complaint (&symfile_complaints, -+ _("probe `%s' has more arguments than the maximum " -+ "allowed"), probe->name); -+ do_cleanups (back_to); -+ return; -+ } -+ -+ current_state = BITNESS; -+ break; -+ -+ case BITNESS: -+ { -+ enum stap_arg_bitness b; -+ int got_minus = 0; -+ -+ /* We expect to find something like: -+ -+ N@OP -+ -+ Where `N' can be [+,-][4,8]. This is not mandatory, so -+ we check it here. If we don't find it, go to the next -+ state. */ -+ if ((*cur == '-' && cur[1] && cur[2] != '@') -+ && cur[1] != '@') -+ { -+ current_state = PARSE_ARG; -+ args_info->arg[current_arg].bitness -+ = STAP_ARG_BITNESS_UNDEFINED; -+ break; -+ } -+ -+ if (*cur == '-') -+ { -+ /* Discard the `-'. */ -+ ++cur; -+ got_minus = 1; -+ } -+ -+ if (*cur == '4') -+ b = got_minus ? STAP_ARG_BITNESS_32BIT_SIGNED -+ : STAP_ARG_BITNESS_32BIT_UNSIGNED; -+ else if (*cur == '8') -+ b = got_minus ? STAP_ARG_BITNESS_64BIT_SIGNED -+ : STAP_ARG_BITNESS_64BIT_UNSIGNED; -+ else -+ { -+ /* We have an error, because we don't expect anything -+ except 4 and 8. */ -+ complaint (&symfile_complaints, -+ _("unrecognized bitness `%c' for probe `%s'"), -+ *cur, probe->name); -+ do_cleanups (back_to); -+ return; -+ } -+ -+ args_info->arg[current_arg].bitness = b; -+ /* Discard the number and the `@' sign. */ -+ cur += 2; -+ /* Move on. */ -+ current_state = PARSE_ARG; -+ } -+ break; -+ -+ case PARSE_ARG: -+ { -+ const char *start = cur; -+ -+ if (!stap_parse_arg (&cur)) -+ { -+ /* We have tried to parse this argument, but it's -+ malformed. This is an error. */ -+ do_cleanups (back_to); -+ return; -+ } -+ -+ args_info->arg[current_arg].arg_str -+ = savestring (start, cur - start); -+ /* Start it over again. */ -+ cur = skip_spaces ((char *) cur); -+ current_state = NEW_ARG; -+ } -+ break; -+ } -+ -+ if (!*cur && current_state != NEW_ARG) -+ { -+ /* We reached the end of the argument string, but we're -+ still in the middle of the process of parsing an argument. -+ It means the argument string is malformed. */ -+ complaint (&symfile_complaints, -+ _("malformed argument for probe `%s'"), -+ probe->name); -+ do_cleanups (back_to); -+ return; -+ } -+ } -+ -+ args_info->n_args = current_arg + 1; -+ args_info->arg = xrealloc (args_info->arg, -+ args_info->n_args -+ * sizeof (struct stap_probe_arg)); -+ args_info->probe = probe; -+ -+ probe->parsed_args = args_info; -+ -+ discard_cleanups (back_to); -+} -+ -+/* See definition in stap-probe.h. */ -+ -+int -+stap_get_probe_argument_count (const struct stap_probe *probe) -+{ -+ if (!probe->parsed_args) -+ stap_parse_probe_arguments ((struct stap_probe *) probe); -+ -+ return probe->parsed_args->n_args; -+} -+ -+/* Returns the operator precedence level of OP, or zero if the operator -+ code was not recognized. -+ The levels were taken from the gas manual. */ -+ -+static int -+stap_get_operator_prec (enum exp_opcode op) -+{ -+ switch (op) -+ { -+ case BINOP_LOGICAL_OR: -+ return 1; -+ -+ case BINOP_LOGICAL_AND: -+ return 2; -+ -+ case BINOP_ADD: case BINOP_SUB: -+ case BINOP_EQUAL: case BINOP_NOTEQUAL: -+ case BINOP_LESS: case BINOP_LEQ: -+ case BINOP_GTR: case BINOP_GEQ: -+ return 3; -+ -+ case BINOP_BITWISE_IOR: case BINOP_BITWISE_AND: -+ case BINOP_BITWISE_XOR: case UNOP_LOGICAL_NOT: -+ return 4; -+ -+ case BINOP_MUL: case BINOP_DIV: case BINOP_REM: -+ case BINOP_LSH: case BINOP_RSH: -+ return 5; -+ -+ default: -+ return 0; -+ } -+} -+ -+/* Given S, this function reads the operator in it and fills the OP -+ pointer with its code. Returns 1 on success, zero if the operator -+ was not recognized. */ -+ -+static int -+stap_get_opcode (char **s, enum exp_opcode *op) -+{ -+ char c = **s; -+ int ret = 1; -+ -+ *s += 1; -+ -+ switch (c) -+ { -+ case '*': -+ *op = BINOP_MUL; -+ break; -+ -+ case '/': -+ *op = BINOP_DIV; -+ break; -+ -+ case '%': -+ { -+ if (isalpha (**s)) -+ { -+ /* Dealing with a register name. */ -+ ret = 0; -+ break; -+ } -+ -+ *op = BINOP_REM; -+ } -+ break; -+ -+ case '<': -+ *op = BINOP_LESS; -+ if (**s == '<') -+ { -+ *s += 1; -+ *op = BINOP_LSH; -+ } -+ else if (**s == '=') -+ { -+ *s += 1; -+ *op = BINOP_LEQ; -+ } -+ else if (**s == '>') -+ { -+ *s += 1; -+ *op = BINOP_NOTEQUAL; -+ } -+ break; -+ -+ case '>': -+ *op = BINOP_GTR; -+ if (**s == '>') -+ { -+ *s += 1; -+ *op = BINOP_RSH; -+ } -+ else if (**s == '=') -+ { -+ *s += 1; -+ *op = BINOP_GEQ; -+ } -+ break; -+ -+ case '|': -+ *op = BINOP_BITWISE_IOR; -+ if (**s == '|') -+ { -+ *s += 1; -+ *op = BINOP_LOGICAL_OR; -+ } -+ break; -+ -+ case '&': -+ *op = BINOP_BITWISE_AND; -+ if (**s == '&') -+ { -+ *s += 1; -+ *op = BINOP_LOGICAL_AND; -+ } -+ break; -+ -+ case '^': -+ *op = BINOP_BITWISE_XOR; -+ break; -+ -+ case '!': -+ *op = UNOP_LOGICAL_NOT; -+ break; -+ -+ case '+': -+ *op = BINOP_ADD; -+ break; -+ -+ case '-': -+ *op = BINOP_SUB; -+ break; -+ -+ case '=': -+ if (**s != '=') -+ { -+ ret = 0; -+ break; -+ } -+ *op = BINOP_EQUAL; -+ break; -+ -+ default: -+ /* We didn't find any operator. */ -+ *s -= 1; -+ return 0; -+ } -+ -+ return ret; -+} -+ -+/* Given the operator OPCODE, this function generates agent bytecode -+ for it. */ -+ -+static void -+stap_opcode_to_ax (struct stap_evaluation_info *eval_info, -+ enum exp_opcode opcode) -+{ -+ struct agent_expr *expr = eval_info->aexpr; -+ -+ switch (opcode) -+ { -+ case BINOP_MUL: -+ ax_simple (expr, aop_mul); -+ break; -+ -+ case BINOP_DIV: -+ ax_simple (expr, aop_div_signed); -+ break; -+ -+ case BINOP_REM: -+ ax_simple (expr, aop_rem_unsigned); -+ break; -+ -+ case BINOP_LESS: -+ ax_simple (expr, aop_less_signed); -+ break; -+ -+ case BINOP_LEQ: -+ /* A <= B is !(B < A) */ -+ ax_simple (expr, aop_swap); -+ ax_simple (expr, aop_less_signed); -+ ax_simple (expr, aop_log_not); -+ break; -+ -+ case BINOP_GTR: -+ /* A > B is B < A */ -+ ax_simple (expr, aop_swap); -+ ax_simple (expr, aop_less_signed); -+ break; -+ -+ case BINOP_GEQ: -+ /* A >= B is !(A < B) */ -+ ax_simple (expr, aop_less_signed); -+ ax_simple (expr, aop_log_not); -+ break; -+ -+ case BINOP_NOTEQUAL: -+ ax_simple (expr, aop_equal); -+ ax_simple (expr, aop_log_not); -+ break; -+ -+ case BINOP_LSH: -+ ax_simple (expr, aop_lsh); -+ break; -+ -+ case BINOP_RSH: -+ ax_simple (expr, aop_rsh_unsigned); -+ break; -+ -+ case BINOP_BITWISE_IOR: -+ ax_simple (expr, aop_bit_or); -+ break; -+ -+ case BINOP_LOGICAL_OR: -+ error (_("Operator logical-or (`||') not supported yet.")); -+ break; -+ -+ case BINOP_BITWISE_AND: -+ ax_simple (expr, aop_bit_and); -+ break; -+ -+ case BINOP_LOGICAL_AND: -+ error (_("Operator logical-and (`&&') not supported yet.")); -+ break; -+ -+ case BINOP_BITWISE_XOR: -+ ax_simple (expr, aop_bit_xor); -+ break; -+ -+ case UNOP_LOGICAL_NOT: -+ ax_simple (expr, aop_log_not); -+ break; -+ -+ case BINOP_ADD: -+ ax_simple (expr, aop_add); -+ break; -+ -+ case BINOP_SUB: -+ ax_simple (expr, aop_sub); -+ break; -+ -+ case BINOP_EQUAL: -+ ax_simple (expr, aop_equal); -+ break; -+ -+ default: -+ error (_("Invalid operator.")); -+ } -+} -+ -+/* Returns 1 if *S is an operator, zero otherwise. */ -+ -+static int -+stap_is_operator (char *s) -+{ -+ char op; -+ -+ if (!s || !*s) -+ return 0; -+ -+ op = *s; -+ -+ if (*s == '%' && isalpha (s[1])) -+ /* Register name. */ -+ return 0; -+ -+ return (op == '+' || op == '-' || op == '*' || op == '/' -+ || op == '>' || op == '<' || op == '!' || op == '^' -+ || op == '|' || op == '&' || op == '%' || op == '='); -+} -+ -+/* This function fetches the value of the register whose -+ name starts in the expression buffer. It also applies any register -+ displacements (e.g., `-4(%eax)'), and indirects the contents of the -+ register (e.g., `(%eax)'). It returns RET if the operation has succeeded, -+ or calls `error' otherwise. */ -+ -+static struct value * -+stap_fetch_reg_value (struct stap_evaluation_info *eval_info, -+ struct value *displacement) -+{ -+ const char *start; -+ char *s = eval_info->exp_buf; -+ struct gdbarch *gdbarch = eval_info->gdbarch; -+ struct frame_info *frame = eval_info->frame; -+ enum stap_arg_bitness bitness = eval_info->bitness; -+ char *regname; -+ int len, regnum, indirect_p = 0; -+ struct value *ret = NULL; -+ -+ /* The function which called us did not check if the expression -+ buffer was empty. */ -+ gdb_assert (s && *s); -+ -+ if (STAP_COMPILING_AGENT_EXPR_P (eval_info)) -+ /* If we are compiling, we cannot return NULL because that would -+ lead to errors in future evaluations. That's why we just make -+ this dummy value, representing that the return value of this -+ function is not NULL. */ -+ ret = value_from_longest (builtin_type (gdbarch)->builtin_int, 0); -+ -+ /* Valid register name on x86 platforms are: -+ -+ [paren]%{a-z0-9}[paren] -+ -+ Let's check for that here. */ -+ if (*s == '(') -+ { -+ ++s; -+ if (!*s || *s != '%' -+ || (*s == '%' && !isalpha (s[1]))) -+ error (_("Invalid register name on expression `%s'."), -+ eval_info->saved_expr); -+ ++s; -+ /* The presence of parenthesis means that we want to indirect -+ the register. */ -+ indirect_p = 1; -+ } -+ else if (*s == '%') -+ { -+ ++s; -+ if (!*s || !isalpha (*s)) -+ error (_("Invalid register name on expression `%s'."), -+ eval_info->saved_expr); -+ } -+ else -+ error (_("Invalid register name on expression `%s'."), -+ eval_info->saved_expr); -+ -+ if (displacement && !indirect_p) -+ /* We cannot apply displacement to non-indirect register access. */ -+ error (_("Trying to apply displacement without indirecting register " -+ "on expression `%s'."), eval_info->saved_expr); -+ -+ /* Ok, let's calculate the size of the register name. */ -+ start = s; -+ while (isalnum (*s)) -+ ++s; -+ -+ len = s - start; -+ -+ if (indirect_p && *s == ')') -+ ++s; -+ -+ regname = alloca (len + 1); -+ strncpy (regname, start, len); -+ regname[len] = '\0'; -+ -+ /* Translating the register name into the corresponding number. */ -+ regnum = user_reg_map_name_to_regnum (gdbarch, regname, len); -+ -+ if (regnum == -1) -+ error (_("Invalid register name `%s' on expression `%s'."), -+ regname, eval_info->saved_expr); -+ -+ if (STAP_COMPILING_AGENT_EXPR_P (eval_info)) -+ ax_reg (eval_info->aexpr, regnum); -+ else -+ ret = value_of_register (regnum, frame); -+ -+ if (indirect_p) -+ { -+ struct type *t = NULL; -+ enum agent_op aop = aop_ref32; -+ -+ /* If the user has specified that the register must be indirected, -+ we should know what's the correct type to cast it before making -+ the indirection. This type corresponds to the bitness specified -+ before the `@' sign on the argument string, or it defaults to -+ `unsigned long' if the `@' were not present. */ -+ -+ switch (bitness) -+ { -+ case STAP_ARG_BITNESS_UNDEFINED: -+ if (STAP_COMPILING_AGENT_EXPR_P (eval_info)) -+ { -+ if (gdbarch_addr_bit (gdbarch) == 32) -+ aop = aop_ref32; -+ else -+ aop = aop_ref64; -+ } -+ else -+ { -+ if (gdbarch_addr_bit (gdbarch) == 32) -+ t = lookup_pointer_type -+ (builtin_type (gdbarch)->builtin_uint32); -+ else -+ t = lookup_pointer_type -+ (builtin_type (gdbarch)->builtin_uint64); -+ } -+ break; -+ -+ case STAP_ARG_BITNESS_32BIT_SIGNED: -+ if (STAP_COMPILING_AGENT_EXPR_P (eval_info)) -+ aop = aop_ref32; -+ else -+ t = lookup_pointer_type -+ (builtin_type (gdbarch)->builtin_int32); -+ break; -+ -+ case STAP_ARG_BITNESS_32BIT_UNSIGNED: -+ if (STAP_COMPILING_AGENT_EXPR_P (eval_info)) -+ aop = aop_ref32; -+ else -+ t = lookup_pointer_type -+ (builtin_type (gdbarch)->builtin_uint32); -+ break; -+ -+ case STAP_ARG_BITNESS_64BIT_SIGNED: -+ if (STAP_COMPILING_AGENT_EXPR_P (eval_info)) -+ aop = aop_ref64; -+ else -+ t = lookup_pointer_type -+ (builtin_type (gdbarch)->builtin_int64); -+ break; -+ -+ case STAP_ARG_BITNESS_64BIT_UNSIGNED: -+ if (STAP_COMPILING_AGENT_EXPR_P (eval_info)) -+ aop = aop_ref64; -+ else -+ t = lookup_pointer_type -+ (builtin_type (gdbarch)->builtin_uint64); -+ break; -+ -+ default: -+ internal_error (__FILE__, __LINE__, -+ _("Undefined bitness for probe.")); -+ break; -+ } -+ -+ if (displacement) -+ { -+ if (STAP_COMPILING_AGENT_EXPR_P (eval_info)) -+ { -+ ax_const_l (eval_info->aexpr, value_as_long (displacement)); -+ ax_simple (eval_info->aexpr, aop_add); -+ } -+ else -+ ret = value_ptradd (ret, value_as_long (displacement)); -+ } -+ -+ if (STAP_COMPILING_AGENT_EXPR_P (eval_info)) -+ { -+ if (trace_kludge) -+ { -+ gdb_assert (aop == aop_ref32 || aop == aop_ref64); -+ ax_trace_quick (eval_info->aexpr, aop == aop_ref32 ? 4 : 8); -+ } -+ ax_simple (eval_info->aexpr, aop); -+ } -+ else -+ { -+ ret = value_cast (t, ret); -+ ret = value_ind (ret); -+ } -+ } -+ -+ /* Updating the expression buffer pointer, because we have made -+ some modifications to it before. */ -+ eval_info->exp_buf = s; -+ -+ return ret; -+} -+ -+/* This function tries to evaluate a single operand of the expression. -+ -+ Single operands can be: -+ -+ - unary operators `-' and `~'; -+ - integer constants (beginning with `$'); -+ - register access, with/out displacement and indirection. */ -+ -+static struct value * -+stap_evaluate_single_operand (struct stap_evaluation_info *eval_info) -+{ -+ struct gdbarch *gdbarch = eval_info->gdbarch; -+ struct frame_info *frame = eval_info->frame; -+ enum stap_arg_bitness bitness = eval_info->bitness; -+ struct value *res = NULL; -+ -+ if (STAP_COMPILING_AGENT_EXPR_P (eval_info)) -+ /* If we are compiling, we cannot return NULL because that would -+ lead to errors in future evaluations. That's why we just make -+ this dummy value, representing that the return value of this -+ function is not NULL. */ -+ res = value_from_longest (builtin_type (gdbarch)->builtin_int, 0); -+ -+ switch (*eval_info->exp_buf) -+ { -+ case '-': case '~': -+ { -+ char c = *eval_info->exp_buf; -+ -+ /* This is an unary operator (either `-' or `~'). -+ -+ If it is followed by a parenthesis, and this parenthesis -+ is NOT followed by a `%', then we are dealing with an expression -+ like `-(2 + 3)' or `~(2 + 3)'. We just have to treat separately -+ and return the result after applying the operation (`-' or `~'). -+ -+ If it is followed by a digit, then we have only one choice: it -+ is a displacement argument for a register access, like -+ `-4(%eax)'. It also means that the operator can *only* be `-', -+ and the characters immediately after the number *must* be `(%'. -+ -+ If it is followed by a `$', then it is an integer constant, and -+ we should apply the correct operation to it. */ -+ -+ ++eval_info->exp_buf; -+ eval_info->exp_buf = skip_spaces (eval_info->exp_buf); -+ if (*eval_info->exp_buf -+ && *eval_info->exp_buf == '(' -+ && eval_info->exp_buf[1] != '%') -+ { -+ struct value *tmp_res; -+ -+ /* We're not dealing with a register name, but with an -+ expression like `-(2 + 3)' or `~(2 + 3)'. We first have -+ to evaluate the right side of the expression (i.e., the -+ parenthesis), and then apply the specified operation -+ (either `-' or `~') to it. */ -+ tmp_res = stap_evaluate_conditionally (eval_info); -+ -+ if (c == '-') -+ { -+ if (STAP_COMPILING_AGENT_EXPR_P (eval_info)) -+ { -+ /* We have to add `-1' to the stack, and multiply -+ the two values. */ -+ ax_const_l (eval_info->aexpr, -1); -+ ax_simple (eval_info->aexpr, aop_mul); -+ } -+ else -+ res = value_neg (tmp_res); -+ } -+ else -+ { -+ if (STAP_COMPILING_AGENT_EXPR_P (eval_info)) -+ ax_simple (eval_info->aexpr, aop_bit_not); -+ else -+ res = value_complement (tmp_res); -+ } -+ } -+ else if (isdigit (*eval_info->exp_buf)) -+ { -+ int number; -+ -+ /* This is a number, so it MUST be a register displacement. -+ The only operator allowed here is `-', it MUST be -+ followed by a number, and the number MUST be followed by -+ `(%'. */ -+ if (c != '-') -+ error (_("Invalid operator `%c' for register displacement " -+ "on expression `%s'."), c, eval_info->saved_expr); -+ -+ number = strtol (eval_info->exp_buf, -+ &eval_info->exp_buf, 0) * -1; -+ -+ if (!*eval_info->exp_buf -+ || *eval_info->exp_buf != '(' -+ || (*eval_info->exp_buf == '(' -+ && eval_info->exp_buf[1] != '%')) -+ error (_("Invalid method of indirecting a register on " -+ "expression `%s'."), eval_info->saved_expr); -+ -+ res -+ = value_from_longest (builtin_type (gdbarch)->builtin_int, -+ number); -+ -+ res = stap_fetch_reg_value (eval_info, res); -+ } -+ else if (*eval_info->exp_buf == '$') -+ { -+ int number; -+ -+ /* Last case. We are dealing with an integer constant, so -+ we must read it and then apply the necessary operation, -+ either `-' or `~'. */ -+ ++eval_info->exp_buf; -+ number = strtol (eval_info->exp_buf, -+ &eval_info->exp_buf, 0); -+ -+ if (!STAP_COMPILING_AGENT_EXPR_P (eval_info)) -+ res -+ = value_from_longest (builtin_type (gdbarch)->builtin_int, -+ number); -+ else -+ ax_const_l (eval_info->aexpr, number); -+ -+ eval_info->exp_buf = skip_spaces (eval_info->exp_buf); -+ -+ if (c == '-') -+ { -+ if (STAP_COMPILING_AGENT_EXPR_P (eval_info)) -+ ax_simple (eval_info->aexpr, aop_log_not); -+ else -+ res = value_neg (res); -+ } -+ else -+ { -+ if (STAP_COMPILING_AGENT_EXPR_P (eval_info)) -+ ax_simple (eval_info->aexpr, aop_bit_not); -+ else -+ res = value_complement (res); -+ } -+ } -+ else -+ error (_("Invalid operand to unary operator `%c' on " -+ "expression `%s'."), c, eval_info->saved_expr); -+ } -+ break; -+ -+ case '0': case '1': case '2': case '3': case '4': -+ case '5': case '6': case '7': case '8': case '9': -+ { -+ int number = strtol (eval_info->exp_buf, &eval_info->exp_buf, 0); -+ -+ /* This is a register displacement with a positive value. We read -+ the number, and then check for the mandatory `(%' part. */ -+ if (!*eval_info->exp_buf -+ || !(*eval_info->exp_buf == '(' -+ && eval_info->exp_buf[1] == '%')) -+ error (_("Invalid register access on expression `%s'."), -+ eval_info->saved_expr); -+ -+ res = value_from_longest (builtin_type (gdbarch)->builtin_int, -+ number); -+ -+ res = stap_fetch_reg_value (eval_info, res); -+ } -+ break; -+ -+ case '$': -+ { -+ int number; -+ -+ /* This is an integer constant. We just have to read the number -+ and return it. */ -+ ++eval_info->exp_buf; -+ eval_info->exp_buf = skip_spaces (eval_info->exp_buf); -+ -+ number = strtol (eval_info->exp_buf, &eval_info->exp_buf, 0); -+ -+ if (STAP_COMPILING_AGENT_EXPR_P (eval_info)) -+ ax_const_l (eval_info->aexpr, number); -+ else -+ res = value_from_longest (builtin_type (gdbarch)->builtin_int, -+ number); -+ -+ eval_info->exp_buf = skip_spaces (eval_info->exp_buf); -+ } -+ break; -+ -+ case '(': case '%': -+ { -+ /* Register access, with or without indirection. */ -+ res = stap_fetch_reg_value (eval_info, /*displacement=*/NULL); -+ eval_info->exp_buf = skip_spaces (eval_info->exp_buf); -+ } -+ break; -+ -+ default: -+ { -+ error (_("Operator `%c' not recognized on expression `%s'."), -+ *eval_info->exp_buf, eval_info->saved_expr); -+ } -+ } -+ -+ return res; -+} -+ -+/* This function is responsible for checking the necessary type of evaluation -+ depending on what is the next "thing" in the buffer. Valid values are: -+ -+ - Unary operators; -+ - Integer constants; -+ - Register displacement, indirection, and direct access; -+ - Parenthesized operand. */ -+ -+static struct value * -+stap_evaluate_conditionally (struct stap_evaluation_info *eval_info) -+{ -+ char *s = eval_info->exp_buf; -+ struct value *ret = NULL; -+ -+ if (*s == '-' || *s == '~' /* Unary operators. */ -+ || *s == '$' /* Number (integer constant). */ -+ || (isdigit (*s) && s[1] == '(' && s[2] == '%') /* Displacement. */ -+ || (*s == '(' && s[1] == '%') /* Register indirection. */ -+ || (*s == '%' && isalpha (s[1]))) /* Register value. */ -+ /* This is a single operand, so just evaluate it and return. */ -+ ret = stap_evaluate_single_operand (eval_info); -+ else if (*s == '(') -+ { -+ /* We are dealing with a parenthesized operand. It means we -+ have to evaluate it as it was a separate expression, without -+ left-side or precedence. */ -+ ++eval_info->exp_buf; -+ eval_info->exp_buf = skip_spaces (eval_info->exp_buf); -+ -+ ret = stap_evaluate_probe_argument_2 (eval_info, -+ /*lhs=*/NULL, /*prec=*/0); -+ -+ if (*eval_info->exp_buf != ')') -+ error (_("Missign close-paren on expression `%s'."), -+ eval_info->saved_expr); -+ -+ ++eval_info->exp_buf; -+ eval_info->exp_buf = skip_spaces (eval_info->exp_buf); -+ } -+ else -+ error (_("Cannot evaluate expression `%s'."), -+ eval_info->saved_expr); -+ -+ return ret; -+} -+ -+/* Evaluation function for probe's argument expressions. LHS represents -+ the left side of the expression, and PREC is the precedence of the -+ last operator identified before calling the function. */ -+ -+static struct value * -+stap_evaluate_probe_argument_2 (struct stap_evaluation_info *eval_info, -+ struct value *lhs, int prec) -+{ -+ struct value *rhs = NULL; -+ int compiling_p = STAP_COMPILING_AGENT_EXPR_P (eval_info); -+ -+ /* This is an operator-precedence parser and evaluator. -+ -+ We work with left- and right-sides of expressions, and -+ evaluate them depending on the precedence of the operators -+ we find. */ -+ -+ eval_info->exp_buf = skip_spaces (eval_info->exp_buf); -+ -+ if (!lhs) -+ /* We were called without a left-side, either because this is the -+ first call, or because we were called to evaluate a parenthesized -+ expression. It doesn't really matter; we have to evaluate the -+ left-side in order to continue the process. */ -+ lhs = stap_evaluate_conditionally (eval_info); -+ -+ /* Start to evaluate the right-side, and to "join" left and right sides -+ depending on the operation specified. -+ -+ This loop shall continue until we run out of characters in the input, -+ or until we find a close-parenthesis, which means that we've reached -+ the end of a sub-expression. */ -+ while (eval_info->exp_buf -+ && *eval_info->exp_buf -+ && *eval_info->exp_buf != ')') -+ { -+ char *tmp_exp_buf; -+ enum exp_opcode opcode; -+ int cur_prec; -+ -+ if (!stap_is_operator (eval_info->exp_buf)) -+ error (_("Invalid operator `%c' on expression `%s'."), -+ *eval_info->exp_buf, eval_info->saved_expr); -+ -+ /* We have to save the current value of the expression buffer because -+ the `stap_get_opcode' modifies it in order to get the current -+ operator. If this operator's precedence is lower than PREC, we -+ should return and not advance the expression buffer pointer. */ -+ tmp_exp_buf = eval_info->exp_buf; -+ stap_get_opcode (&tmp_exp_buf, &opcode); -+ -+ cur_prec = stap_get_operator_prec (opcode); -+ if (cur_prec < prec) -+ /* If the precedence of the operator that we are seeing now is -+ lower than the precedence of the first operator seen before -+ this evaluation process began, it means we should stop evaluating -+ and return. */ -+ break; -+ -+ eval_info->exp_buf = tmp_exp_buf; -+ eval_info->exp_buf = skip_spaces (eval_info->exp_buf); -+ -+ /* Evaluate the right-side of the expression. */ -+ rhs = stap_evaluate_conditionally (eval_info); -+ -+ /* While we still have operators, try to evaluate another -+ right-side, but using the current right-side as a left-side. */ -+ while (*eval_info->exp_buf -+ && stap_is_operator (eval_info->exp_buf)) -+ { -+ enum exp_opcode lookahead_opcode; -+ int lookahead_prec; -+ -+ /* Saving the current expression buffer position. The explanation -+ is the same as above. */ -+ tmp_exp_buf = eval_info->exp_buf; -+ stap_get_opcode (&tmp_exp_buf, &lookahead_opcode); -+ lookahead_prec = stap_get_operator_prec (lookahead_opcode); -+ -+ if (lookahead_prec <= prec) -+ /* If we are dealing with an operator whose precedence is lower -+ than the first one, just abandon the attempt. */ -+ break; -+ -+ rhs = stap_evaluate_probe_argument_2 (eval_info, -+ rhs, lookahead_prec); -+ } -+ -+ /* Now, "join" both left and right sides into one left-side, using -+ the specified operator. */ -+ if (compiling_p) -+ stap_opcode_to_ax (eval_info, opcode); -+ else -+ lhs = value_binop (lhs, rhs, opcode); -+ } -+ -+ return lhs; -+} -+ -+/* This function fills the necessary arguments for the evaluation function -+ to work. */ -+ -+static struct value * -+stap_evaluate_probe_argument_1 (struct objfile *objfile, -+ const struct stap_probe *probe, -+ struct frame_info *frame, -+ int n) -+{ -+ struct stap_evaluation_info eval_info; -+ char *s = (char *) probe->parsed_args->arg[n].arg_str; -+ struct value *res, *vs[4]; -+ -+ /* Filling necessary information for evaluation function. */ -+ eval_info.saved_expr = s; -+ eval_info.exp_buf = s; -+ eval_info.gdbarch = get_objfile_arch (objfile); -+ eval_info.frame = frame; -+ eval_info.bitness = probe->parsed_args->arg[n].bitness; -+ /* We are not compiling to an agent expression. */ -+ eval_info.aexpr = NULL; -+ eval_info.avalue = NULL; -+ -+ res = stap_evaluate_probe_argument_2 (&eval_info, -+ /*lhs=*/NULL, /*prec=*/0); -+ -+ if (!res) -+ error (_("Could not evaluate expression `%s'."), -+ eval_info.saved_expr); -+ -+ return res; -+} -+ -+/* See definition in stap-probe.h. */ -+ -+struct value * -+stap_evaluate_probe_argument (struct objfile *objfile, -+ const struct stap_probe *probe, -+ struct frame_info *frame, -+ int n) -+{ -+ if (!probe->parsed_args) -+ stap_parse_probe_arguments ((struct stap_probe *) probe); -+ -+ if (!probe->parsed_args->arg -+ || n >= probe->parsed_args->n_args) -+ return NULL; -+ -+ return stap_evaluate_probe_argument_1 (objfile, probe, frame, n); -+} -+ -+/* Helper function which compiles the probe's argument N into an -+ agent expression, suitable for using with tracepoints. */ -+ -+static void -+stap_compile_to_ax_1 (struct objfile *objfile, -+ const struct stap_probe *probe, -+ struct agent_expr *expr, -+ struct axs_value *value, -+ int n) -+{ -+ struct stap_evaluation_info eval_info; -+ struct gdbarch *gdbarch = expr->gdbarch; -+ char *s = (char *) probe->parsed_args->arg[n].arg_str; -+ -+ /* Filling necessary information for evaluation function. */ -+ eval_info.saved_expr = s; -+ eval_info.exp_buf = s; -+ eval_info.gdbarch = expr->gdbarch; -+ eval_info.frame = NULL; -+ eval_info.bitness = probe->parsed_args->arg[n].bitness; -+ /* We are compiling to an agent expression. */ -+ eval_info.aexpr = expr; -+ eval_info.avalue = value; -+ -+ /* We can always use this kind. */ -+ value->kind = axs_rvalue; -+ -+ /* Figuring out the correct type for this axs_value. */ -+ switch (eval_info.bitness) -+ { -+ case STAP_ARG_BITNESS_UNDEFINED: -+ if (gdbarch_addr_bit (gdbarch) == 32) -+ value->type = builtin_type (gdbarch)->builtin_uint32; -+ else -+ value->type = builtin_type (gdbarch)->builtin_uint64; -+ break; -+ -+ case STAP_ARG_BITNESS_32BIT_SIGNED: -+ value->type = builtin_type (gdbarch)->builtin_int32; -+ break; -+ -+ case STAP_ARG_BITNESS_32BIT_UNSIGNED: -+ value->type = builtin_type (gdbarch)->builtin_uint32; -+ break; -+ -+ case STAP_ARG_BITNESS_64BIT_SIGNED: -+ value->type = builtin_type (gdbarch)->builtin_int64; -+ break; -+ -+ case STAP_ARG_BITNESS_64BIT_UNSIGNED: -+ value->type = builtin_type (gdbarch)->builtin_uint64; -+ break; -+ -+ default: -+ internal_error (__FILE__, __LINE__, -+ _("Undefined bitness for probe.")); -+ break; -+ } -+ -+ stap_evaluate_probe_argument_2 (&eval_info, -+ /*lhs=*/NULL, /*prec=*/0); -+} -+ -+/* See definition in stap-probe.h. */ -+ -+void -+stap_compile_to_ax (struct objfile *objfile, -+ const struct stap_probe *probe, -+ struct agent_expr *expr, -+ struct axs_value *value, -+ int n) -+{ -+ if (!probe->parsed_args) -+ stap_parse_probe_arguments ((struct stap_probe *) probe); -+ -+ if (!probe->parsed_args->arg -+ || n >= probe->parsed_args->n_args) -+ return; -+ -+ stap_compile_to_ax_1 (objfile, probe, expr, value, n); -+} -+ -+struct value * -+stap_safe_evaluate_at_pc (struct frame_info *frame, int n) -+{ -+ const struct stap_probe *probe; -+ struct objfile *objfile; -+ int n_probes; -+ -+ probe = find_probe_by_pc (get_frame_pc (frame), &objfile); -+ if (!probe) -+ return NULL; -+ gdb_assert (objfile->sf && objfile->sf->sym_probe_fns); -+ -+ n_probes -+ = objfile->sf->sym_probe_fns->sym_get_probe_argument_count (objfile, -+ probe); -+ if (n >= n_probes) -+ return NULL; -+ -+ return objfile->sf->sym_probe_fns->sym_evaluate_probe_argument (objfile, -+ probe, -+ frame, -+ n); -+} -+ -+/* This function frees the space allocated to hold information about -+ the probe's parsed arguments. */ -+ -+void -+stap_free_parsed_args (struct stap_args_info *parsed_args) -+{ -+ int i; -+ -+ if (!parsed_args -+ || parsed_args == &dummy_stap_args_info -+ || parsed_args->n_args == 0) -+ return; -+ -+ for (i = 0; i < parsed_args->n_args; i++) -+ xfree (parsed_args->arg); -+ -+ xfree (parsed_args); -+} -+ -+/* A utility structure. A VEC of these is built when handling "info -+ probes". */ -+ -+struct stap_probe_and_objfile -+{ -+ /* The probe. */ -+ const struct stap_probe *probe; -+ /* The probe's objfile. */ -+ struct objfile *objfile; -+}; -+ -+typedef struct stap_probe_and_objfile stap_entry; -+DEF_VEC_O (stap_entry); -+ -+/* A helper function for collect_probes that compiles a regexp and -+ throws an exception on error. This installs a cleanup to free the -+ resulting pattern on success. If RX is NULL, this does nothing. */ -+ -+static void -+compile_rx_or_error (regex_t *pattern, const char *rx, const char *message) -+{ -+ int code; -+ -+ if (!rx) -+ return; -+ -+ code = regcomp (pattern, rx, REG_NOSUB); -+ if (code == 0) -+ make_regfree_cleanup (pattern); -+ else -+ { -+ char *err = get_regcomp_error (code, pattern); -+ -+ make_cleanup (xfree, err); -+ error (_("%s: %s"), message, err); -+ } -+} -+ -+/* Make a vector of probes matching OBJNAME, PROVIDER, and PROBE. -+ Each argument is a regexp, or NULL, which matches anything. */ -+ -+static VEC (stap_entry) * -+collect_probes (char *objname, char *provider, char *probe) -+{ -+ struct objfile *objfile; -+ VEC (stap_entry) *result = NULL; -+ struct cleanup *cleanup; -+ regex_t obj_pat, prov_pat, probe_pat; -+ -+ cleanup = make_cleanup (VEC_cleanup (stap_entry), &result); -+ -+ compile_rx_or_error (&prov_pat, provider, _("Invalid provider regexp")); -+ compile_rx_or_error (&probe_pat, probe, _("Invalid probe regexp")); -+ compile_rx_or_error (&obj_pat, objname, _("Invalid object file regexp")); -+ -+ ALL_OBJFILES (objfile) -+ { -+ const struct stap_probe *probes; -+ int i, num_probes; -+ -+ if (! objfile->sf || ! objfile->sf->sym_probe_fns) -+ continue; -+ -+ if (objname) -+ { -+ if (regexec (&obj_pat, objfile->name, 0, NULL, 0) != 0) -+ continue; -+ } -+ -+ probes = objfile->sf->sym_probe_fns->sym_get_probes (objfile, &num_probes); -+ for (i = 0; i < num_probes; ++i) -+ { -+ stap_entry entry; -+ -+ if (provider) -+ { -+ if (regexec (&prov_pat, probes[i].provider, 0, NULL, 0) != 0) -+ continue; -+ } -+ -+ if (probe) -+ { -+ if (regexec (&probe_pat, probes[i].name, 0, NULL, 0) != 0) -+ continue; -+ } -+ -+ entry.probe = &probes[i]; -+ entry.objfile = objfile; -+ VEC_safe_push (stap_entry, result, &entry); -+ } -+ } -+ -+ discard_cleanups (cleanup); -+ return result; -+} -+ -+/* A qsort comparison function for stap_entry objects. */ -+ -+static int -+compare_entries (const void *a, const void *b) -+{ -+ const stap_entry *ea = a; -+ const stap_entry *eb = b; -+ int v; -+ -+ v = strcmp (ea->probe->provider, eb->probe->provider); -+ if (v) -+ return v; -+ -+ v = strcmp (ea->probe->name, eb->probe->name); -+ if (v) -+ return v; -+ -+ if (ea->probe->address < eb->probe->address) -+ return -1; -+ if (ea->probe->address > eb->probe->address) -+ return 1; -+ -+ return strcmp (ea->objfile->name, eb->objfile->name); -+} -+ -+/* Implementation of the "info probes" command. */ -+ -+static void -+info_probes_command (char *arg, int from_tty) -+{ -+ char *provider, *probe = NULL, *objname = NULL; -+ struct cleanup *cleanup = make_cleanup (null_cleanup, NULL); -+ VEC (stap_entry) *items; -+ int i, addr_width, any_found; -+ stap_entry *entry; -+ -+ provider = extract_arg (&arg); -+ if (provider) -+ { -+ make_cleanup (xfree, provider); -+ -+ probe = extract_arg (&arg); -+ if (probe) -+ { -+ make_cleanup (xfree, probe); -+ -+ objname = extract_arg (&arg); -+ if (objname) -+ make_cleanup (xfree, objname); -+ } -+ } -+ -+ items = collect_probes (objname, provider, probe); -+ make_cleanup (VEC_cleanup (stap_entry), &items); -+ make_cleanup_ui_out_table_begin_end (uiout, 5, -+ VEC_length (stap_entry, items), -+ "SystemTapProbes"); -+ -+ if (! VEC_empty (stap_entry, items)) -+ qsort (VEC_address (stap_entry, items), -+ VEC_length (stap_entry, items), -+ sizeof (stap_entry), -+ compare_entries); -+ -+ addr_width = 4 + (gdbarch_ptr_bit (get_current_arch ()) / 4); -+ -+ ui_out_table_header (uiout, 10, ui_left, "provider", _("Provider")); -+ ui_out_table_header (uiout, 10, ui_left, "name", _("Name")); -+ ui_out_table_header (uiout, addr_width - 1, ui_left, "addr", _("Where")); -+ ui_out_table_header (uiout, addr_width - 1, ui_left, "semaphore", -+ _("Semaphore")); -+ ui_out_table_header (uiout, 30, ui_left, "object", _("Object")); -+ ui_out_table_body (uiout); -+ -+ for (i = 0; VEC_iterate (stap_entry, items, i, entry); ++i) -+ { -+ struct cleanup *inner; -+ -+ inner = make_cleanup_ui_out_tuple_begin_end (uiout, "probe"); -+ -+ ui_out_field_string (uiout, "provider", entry->probe->provider); -+ ui_out_field_string (uiout, "name", entry->probe->name); -+ ui_out_field_core_addr (uiout, "addr", get_current_arch (), -+ entry->probe->address); -+ if (entry->probe->sem_addr == 0) -+ ui_out_field_skip (uiout, "semaphore"); -+ else -+ ui_out_field_core_addr (uiout, "semaphore", get_current_arch (), -+ entry->probe->sem_addr); -+ ui_out_field_string (uiout, "object", entry->objfile->name); -+ ui_out_text (uiout, "\n"); -+ -+ do_cleanups (inner); -+ } -+ -+ any_found = ! VEC_empty (stap_entry, items); -+ do_cleanups (cleanup); -+ -+ if (! any_found) -+ ui_out_message (uiout, 0, _("No probes matched.\n")); -+} -+ -+ -+ -+/* See definition in stap-probe.h. */ -+ -+const struct stap_probe * -+find_probe_in_objfile (struct objfile *objfile, -+ const char *provider, -+ const char *name) -+{ -+ const struct stap_probe *probes; -+ int i, num_probes; -+ -+ if (! objfile->sf || ! objfile->sf->sym_probe_fns) -+ return NULL; -+ -+ probes = objfile->sf->sym_probe_fns->sym_get_probes (objfile, &num_probes); -+ for (i = 0; i < num_probes; ++i) -+ { -+ if (strcmp (probes[i].provider, provider) != 0) -+ continue; -+ -+ if (strcmp (probes[i].name, name) != 0) -+ continue; -+ -+ return &probes[i]; -+ } -+ -+ return NULL; -+} -+ -+/* See definition in stap-probe.h. */ -+ -+struct symtabs_and_lines -+parse_stap_probe (char **argptr, struct linespec_result *canonical) -+{ -+ char *full_arg = extract_arg (argptr); -+ char *arg = xstrdup (full_arg); -+ char *objfile_name = NULL, *provider = NULL, *name, *p; -+ struct cleanup *cleanup; -+ struct symtabs_and_lines result; -+ struct objfile *objfile; -+ -+ result.sals = NULL; -+ result.nelts = 0; -+ -+ /* The caller ensured that this starts with 'probe:'. */ -+ gdb_assert (arg && strncmp (arg, "probe:", 6) == 0); -+ cleanup = make_cleanup (xfree, arg); -+ make_cleanup (xfree, full_arg); -+ arg += 6; -+ -+ /* Extract each word from the argument, separated by ":"s. */ -+ p = strchr (arg, ':'); -+ if (p == NULL) -+ { -+ /* This is `probe:name'. */ -+ name = arg; -+ } -+ else -+ { -+ char *hold = p + 1; -+ -+ *p = '\0'; -+ p = strchr (hold, ':'); -+ if (p == NULL) -+ { -+ /* This is `probe:provider:name'. */ -+ provider = arg; -+ name = hold; -+ } -+ else -+ { -+ /* This is `probe:objfile:provider:name'. */ -+ *p = '\0'; -+ objfile_name = arg; -+ provider = hold; -+ name = p + 1; -+ } -+ } -+ -+ if (*name == '\0') -+ error (_("no probe name specified")); -+ if (provider && *provider == '\0') -+ error (_("invalid provider name")); -+ if (objfile_name && *objfile_name == '\0') -+ error (_("invalid objfile name")); -+ -+ if (canonical) -+ canonical->canonical = NULL; -+ -+ ALL_OBJFILES (objfile) -+ { -+ const struct stap_probe *probes; -+ int i, num_probes; -+ -+ if (! objfile->sf || ! objfile->sf->sym_probe_fns) -+ continue; -+ -+ if (objfile_name -+ && FILENAME_CMP (objfile->name, objfile_name) != 0 -+ && FILENAME_CMP (lbasename (objfile->name), objfile_name) != 0) -+ continue; -+ -+ probes = objfile->sf->sym_probe_fns->sym_get_probes (objfile, &num_probes); -+ for (i = 0; i < num_probes; ++i) -+ { -+ struct symtab_and_line *sal; -+ -+ if (provider && strcmp (probes[i].provider, provider) != 0) -+ continue; -+ -+ if (strcmp (probes[i].name, name) != 0) -+ continue; -+ -+ ++result.nelts; -+ result.sals = xrealloc (result.sals, -+ result.nelts * sizeof (struct symtab_and_line)); -+ sal = &result.sals[result.nelts - 1]; -+ -+ init_sal (sal); -+ -+ sal->pc = probes[i].address; -+ sal->explicit_pc = 1; -+ sal->section = find_pc_overlay (sal->pc); -+ sal->pspace = current_program_space; -+ sal->semaphore = probes[i].sem_addr; -+ -+ if (canonical) -+ { -+ canonical->canonical = xrealloc (canonical->canonical, -+ result.nelts * sizeof (char **)); -+ canonical->canonical[result.nelts - 1] = xstrdup (full_arg); -+ } -+ } -+ } -+ -+ if (result.nelts == 0) -+ { -+ throw_error (NOT_FOUND_ERROR, -+ _("No probe matching objfile=`%s', provider=`%s', name=`%s'"), -+ objfile_name ? objfile_name : _(""), -+ provider ? provider : _(""), -+ name); -+ } -+ -+ if (canonical) -+ { -+ canonical->special_display = 1; -+ canonical->pre_expanded = 1; -+ } -+ -+ do_cleanups (cleanup); -+ -+ return result; -+} -+ -+ -+ -+/* See definition in stap-probe.h. */ -+ -+const struct stap_probe * -+find_probe_by_pc (CORE_ADDR pc, struct objfile **objfile_out) -+{ -+ struct objfile *objfile; -+ -+ ALL_OBJFILES (objfile) -+ { -+ const struct stap_probe *probes; -+ int i, num_probes; -+ stap_entry entry; -+ -+ if (! objfile->sf || ! objfile->sf->sym_probe_fns) -+ continue; -+ -+ /* If this proves too inefficient, we can replace with a hash. */ -+ probes = objfile->sf->sym_probe_fns->sym_get_probes (objfile, &num_probes); -+ for (i = 0; i < num_probes; ++i) -+ { -+ if (probes[i].address == pc) -+ { -+ *objfile_out = objfile; -+ return &probes[i]; -+ } -+ } -+ } -+ -+ return NULL; -+} -+ -+/* This is called to compute the value of one of the $_probe_arg* -+ convenience variables. */ -+ -+static struct value * -+compute_probe_arg (struct gdbarch *arch, struct internalvar *ivar, -+ void *data) -+{ -+ struct frame_info *frame = get_selected_frame (_("No frame selected")); -+ CORE_ADDR pc = get_frame_pc (frame); -+ int sel = (int) (uintptr_t) data; -+ struct objfile *objfile; -+ const struct stap_probe *pc_probe; -+ int n_probes; -+ -+ /* SEL==10 means "_probe_argc". */ -+ gdb_assert (sel >= 0 && sel <= STAP_MAX_ARGS); -+ -+ pc_probe = find_probe_by_pc (pc, &objfile); -+ if (pc_probe == NULL) -+ error (_("No SystemTap probe at PC %s"), core_addr_to_string (pc)); -+ -+ n_probes -+ = objfile->sf->sym_probe_fns->sym_get_probe_argument_count (objfile, -+ pc_probe); -+ if (sel == 10) -+ return value_from_longest (builtin_type (arch)->builtin_int, n_probes); -+ -+ if (sel >= n_probes) -+ error (_("Invalid probe argument %d -- probe has %d arguments available"), -+ sel, n_probes); -+ -+ return objfile->sf->sym_probe_fns->sym_evaluate_probe_argument (objfile, -+ pc_probe, -+ frame, sel); -+} -+ -+/* This is called to compile one of the $_probe_arg* convenience -+ variables into an agent expression. */ -+ -+static void -+compile_probe_arg (struct internalvar *ivar, struct agent_expr *expr, -+ struct axs_value *value, void *data) -+{ -+ CORE_ADDR pc = expr->scope; -+ int sel = (int) (uintptr_t) data; -+ struct objfile *objfile; -+ const struct stap_probe *pc_probe; -+ int n_probes; -+ -+ /* SEL==10 means "_probe_argc". */ -+ gdb_assert (sel >= 0 && sel <= 10); -+ -+ pc_probe = find_probe_by_pc (pc, &objfile); -+ if (pc_probe == NULL) -+ error (_("No SystemTap probe at PC %s"), core_addr_to_string (pc)); -+ -+ n_probes -+ = objfile->sf->sym_probe_fns->sym_get_probe_argument_count (objfile, -+ pc_probe); -+ if (sel == 10) -+ { -+ value->kind = axs_rvalue; -+ value->type = builtin_type (expr->gdbarch)->builtin_int; -+ ax_const_l (expr, n_probes); -+ return; -+ } -+ -+ gdb_assert (sel >= 0); -+ if (sel >= n_probes) -+ error (_("Invalid probe argument %d -- probe has %d arguments available"), -+ sel, n_probes); -+ -+ objfile->sf->sym_probe_fns->sym_compile_to_ax (objfile, pc_probe, -+ expr, value, sel); -+} -+ -+ -+ -+/* Implementation of `$_probe_arg*' set of variables. */ -+ -+static const struct internalvar_funcs probe_funcs = -+{ -+ compute_probe_arg, -+ compile_probe_arg, -+ NULL -+}; -+ -+void -+_initialize_stap_probe (void) -+{ -+ add_info ("probes", info_probes_command, _("\ -+Show available static probes.\n\ -+Usage: info probes [PROVIDER [NAME [OBJECT]]]\n\ -+Each argument is a regular expression, used to select probes.\n\ -+PROVIDER matches probe provider names.\n\ -+NAME matches the probe names.\n\ -+OBJECT match the executable or shared library name.")); -+ -+ create_internalvar_type_lazy ("_probe_argc", &probe_funcs, -+ (void *) (uintptr_t) 10); -+ create_internalvar_type_lazy ("_probe_arg0", &probe_funcs, -+ (void *) (uintptr_t) 0); -+ create_internalvar_type_lazy ("_probe_arg1", &probe_funcs, -+ (void *) (uintptr_t) 1); -+ create_internalvar_type_lazy ("_probe_arg2", &probe_funcs, -+ (void *) (uintptr_t) 2); -+ create_internalvar_type_lazy ("_probe_arg3", &probe_funcs, -+ (void *) (uintptr_t) 3); -+ create_internalvar_type_lazy ("_probe_arg4", &probe_funcs, -+ (void *) (uintptr_t) 4); -+ create_internalvar_type_lazy ("_probe_arg5", &probe_funcs, -+ (void *) (uintptr_t) 5); -+ create_internalvar_type_lazy ("_probe_arg6", &probe_funcs, -+ (void *) (uintptr_t) 6); -+ create_internalvar_type_lazy ("_probe_arg7", &probe_funcs, -+ (void *) (uintptr_t) 7); -+ create_internalvar_type_lazy ("_probe_arg8", &probe_funcs, -+ (void *) (uintptr_t) 8); -+ create_internalvar_type_lazy ("_probe_arg9", &probe_funcs, -+ (void *) (uintptr_t) 9); -+} -Index: gdb-7.2.90.20110703/gdb/stap-probe.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/stap-probe.h 2011-07-03 10:33:11.000000000 +0200 -@@ -0,0 +1,109 @@ -+/* SystemTap probe support for GDB. -+ -+ Copyright (C) 2011 Free Software Foundation, Inc. -+ -+ This file is part of GDB. -+ -+ 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 !defined (STAP_PROBE_H) -+#define STAP_PROBE_H 1 -+ -+struct stap_args_info; -+struct axs_value; -+struct linespec_result; -+ -+/* Main structure which holds information about a SystemTap probe. */ -+ -+struct stap_probe -+{ -+ /* The provider of this probe. */ -+ const char *provider; -+ -+ /* The name of the probe. */ -+ const char *name; -+ -+ /* The address where the probe is inserted. */ -+ CORE_ADDR address; -+ -+ /* The address of the probe's semaphore, or 0 if this probe does not -+ have an associated semaphore. */ -+ CORE_ADDR sem_addr; -+ -+ /* Probe's arguments. Users should generally not examine this, but -+ should instead extract information about the arguments using the -+ methods provided in sym_probe_fns. */ -+ const char *args; -+ -+ /* Probe's arguments after parsing. This is an opaque structure that -+ will hold information about the arguments pointed by ARGS. */ -+ struct stap_args_info *parsed_args; -+}; -+ -+ -+/* A helper for linespec that decodes a stap probe specification. It -+ returns a symtabs_and_lines object and updates *ARGPTR or throws an -+ error. */ -+ -+extern struct symtabs_and_lines parse_stap_probe (char **argptr, -+ struct linespec_result *canon); -+ -+/* Search OBJFILE for a probe with the given PROVIDER and NAME. If a -+ probe is found, return it. If no probe is found, return NULL. */ -+ -+extern const struct stap_probe *find_probe_in_objfile (struct objfile *objfile, -+ const char *provider, -+ const char *name); -+ -+/* Given a PC, find an associated SystemTap probe. If a probe is -+ found, set *OBJFILE_OUT to the probe's objfile, and return the -+ probe. If no probe is found, return NULL. */ -+ -+extern const struct stap_probe *find_probe_by_pc (CORE_ADDR pc, -+ struct objfile **objfile_out); -+ -+/* Given PROBE, returns the number of arguments present in that probe's -+ argument string. */ -+ -+extern int stap_get_probe_argument_count (const struct stap_probe *probe); -+ -+/* Given PARSED_ARGS, frees the space allocated to hold information about -+ the probe's parsed arguments. */ -+ -+extern void stap_free_parsed_args (struct stap_args_info *parsed_args); -+ -+/* Evaluates the probe's argument N, returning a value corresponding -+ to it. */ -+ -+extern struct value *stap_evaluate_probe_argument (struct objfile *objfile, -+ const struct stap_probe *probe, -+ struct frame_info *frame, -+ int n); -+ -+/* Compile the probe's argument N to agent expression. */ -+ -+extern void stap_compile_to_ax (struct objfile *objfile, -+ const struct stap_probe *probe, -+ struct agent_expr *expr, -+ struct axs_value *value, -+ int n); -+ -+/* A convenience function that finds a probe at the PC in FRAME and -+ evaluates argument N. If there is no probe at that location, or if -+ the probe does not have enough arguments, this returns NULL. */ -+ -+extern struct value *stap_safe_evaluate_at_pc (struct frame_info *frame, -+ int n); -+ -+#endif /* !defined (STAP_PROBE_H) */ -Index: gdb-7.2.90.20110703/gdb/symfile.h -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/symfile.h 2011-04-25 23:25:18.000000000 +0200 -+++ gdb-7.2.90.20110703/gdb/symfile.h 2011-07-03 10:33:11.000000000 +0200 -@@ -31,6 +31,11 @@ struct objfile; - struct obj_section; - struct obstack; - struct block; -+struct stap_probe; -+struct value; -+struct frame_info; -+struct agent_expr; -+struct axs_value; - - /* Comparison function for symbol look ups. */ - -@@ -290,6 +295,52 @@ struct quick_symbol_functions - void *data); - }; - -+/* Structure of functions used for SystemTap probe support. If one of -+ these functions is provided, all must be. */ -+ -+struct sym_probe_fns -+{ -+ /* If non-NULL, return an array of SystemTap probe objects. The -+ number of objects is returned in *NUM_PROBES. */ -+ const struct stap_probe *(*sym_get_probes) (struct objfile *, -+ int *num_probes); -+ -+ /* Return the number of arguments available to PROBE. PROBE will -+ have come from a call to this objfile's sym_get_probes method. -+ If you provide an implementation of sym_get_probes, you must -+ implement this method as well. */ -+ int (*sym_get_probe_argument_count) (struct objfile *objfile, -+ const struct stap_probe *probe); -+ -+ /* Evaluate the Nth argument available to PROBE. PROBE will have -+ come from a call to this objfile's sym_get_probes method. N will -+ be between 0 and the number of arguments available to this probe. -+ FRAME is the frame in which the evaluation is done; the frame's -+ PC will match the address of the probe. If you provide an -+ implementation of sym_get_probes, you must implement this method -+ as well. */ -+ struct value *(*sym_evaluate_probe_argument) (struct objfile *objfile, -+ const struct stap_probe *probe, -+ struct frame_info *frame, -+ int n); -+ -+ /* Compile the Nth probe argument to an agent expression. PROBE -+ will have come from a call to this objfile's sym_get_probes -+ method. N will be between 0 and the number of arguments -+ available to this probe. EXPR and VALUE are the agent expression -+ that is being updated. */ -+ void (*sym_compile_to_ax) (struct objfile *objfile, -+ const struct stap_probe *probe, -+ struct agent_expr *expr, -+ struct axs_value *value, -+ int n); -+ -+ /* Relocate the probe section of OBJFILE. */ -+ void (*sym_relocate_probe) (struct objfile *objfile, -+ struct section_offsets *new_offsets, -+ struct section_offsets *delta); -+}; -+ - /* Structure to keep track of symbol reading functions for various - object file types. */ - -@@ -360,6 +411,10 @@ struct sym_fns - - bfd_byte *(*sym_relocate) (struct objfile *, asection *sectp, bfd_byte *buf); - -+ /* If non-NULL, this objfile has probe support, and all the probe -+ functions referred to here will be non-NULL. */ -+ const struct sym_probe_fns *sym_probe_fns; -+ - /* The "quick" (aka partial) symbol functions for this symbol - reader. */ - const struct quick_symbol_functions *qf; -Index: gdb-7.2.90.20110703/gdb/symtab.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/symtab.c 2011-07-02 22:03:43.000000000 +0200 -+++ gdb-7.2.90.20110703/gdb/symtab.c 2011-07-03 10:33:11.000000000 +0200 -@@ -770,6 +770,7 @@ init_sal (struct symtab_and_line *sal) - sal->end = 0; - sal->explicit_pc = 0; - sal->explicit_line = 0; -+ sal->semaphore = 0; } - -Index: gdb-7.2.90.20110703/gdb/symtab.h -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/symtab.h 2011-05-06 17:13:37.000000000 +0200 -+++ gdb-7.2.90.20110703/gdb/symtab.h 2011-07-03 10:33:11.000000000 +0200 -@@ -1118,6 +1118,10 @@ struct symtab_and_line - CORE_ADDR end; - int explicit_pc; - int explicit_line; -+ -+ /* If non-zero, the semaphore location associated with a SystemTap -+ probe. */ -+ CORE_ADDR semaphore; - }; - - extern void init_sal (struct symtab_and_line *sal); -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.arch/x86_64-vla-pointer-foo.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.arch/x86_64-vla-pointer-foo.S 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/testsuite/gdb.arch/x86_64-vla-pointer-foo.S b/gdb/testsuite/gdb.arch/x86_64-vla-pointer-foo.S +new file mode 100644 +index 0000000..83faaf6 +--- /dev/null ++++ b/gdb/testsuite/gdb.arch/x86_64-vla-pointer-foo.S @@ -0,0 +1,457 @@ + .file "x86_64-vla-pointer.c" + .section .debug_abbrev,"",@progbits @@ -10284,10 +5607,11 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.arch/x86_64-vla-pointer-foo.S + .string "GNU C 4.3.2 20081105 (Red Hat 4.3.2-7)" + .ident "GCC: (GNU) 4.3.2 20081105 (Red Hat 4.3.2-7)" + .section .note.GNU-stack,"",@progbits -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.arch/x86_64-vla-pointer.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.arch/x86_64-vla-pointer.c 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/testsuite/gdb.arch/x86_64-vla-pointer.c b/gdb/testsuite/gdb.arch/x86_64-vla-pointer.c +new file mode 100644 +index 0000000..fe2c8f7 +--- /dev/null ++++ b/gdb/testsuite/gdb.arch/x86_64-vla-pointer.c @@ -0,0 +1,43 @@ +/* This testcase is part of GDB, the GNU debugger. + @@ -10332,10 +5656,11 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.arch/x86_64-vla-pointer.c +} + +#endif -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.arch/x86_64-vla-pointer.exp -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.arch/x86_64-vla-pointer.exp 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/testsuite/gdb.arch/x86_64-vla-pointer.exp b/gdb/testsuite/gdb.arch/x86_64-vla-pointer.exp +new file mode 100644 +index 0000000..d243cf1 +--- /dev/null ++++ b/gdb/testsuite/gdb.arch/x86_64-vla-pointer.exp @@ -0,0 +1,66 @@ +# Copyright 2009 Free Software Foundation, Inc. + @@ -10403,10 +5728,11 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.arch/x86_64-vla-pointer.exp + +gdb_test "whatis *array" "type = char \\\[78\\\]" "second: whatis *array" +gdb_test "ptype *array" "type = char \\\[78\\\]" "second: ptype *array" -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.arch/x86_64-vla-typedef-foo.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.arch/x86_64-vla-typedef-foo.S 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/testsuite/gdb.arch/x86_64-vla-typedef-foo.S b/gdb/testsuite/gdb.arch/x86_64-vla-typedef-foo.S +new file mode 100644 +index 0000000..66f7a39 +--- /dev/null ++++ b/gdb/testsuite/gdb.arch/x86_64-vla-typedef-foo.S @@ -0,0 +1,455 @@ + .file "x86_64-vla-typedef.c" + .section .debug_abbrev,"",@progbits @@ -10863,10 +6189,11 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.arch/x86_64-vla-typedef-foo.S + .string "GNU C 4.3.2 20081105 (Red Hat 4.3.2-7)" + .ident "GCC: (GNU) 4.3.2 20081105 (Red Hat 4.3.2-7)" + .section .note.GNU-stack,"",@progbits -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.arch/x86_64-vla-typedef.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.arch/x86_64-vla-typedef.c 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/testsuite/gdb.arch/x86_64-vla-typedef.c b/gdb/testsuite/gdb.arch/x86_64-vla-typedef.c +new file mode 100644 +index 0000000..b809c4e +--- /dev/null ++++ b/gdb/testsuite/gdb.arch/x86_64-vla-typedef.c @@ -0,0 +1,43 @@ +/* This testcase is part of GDB, the GNU debugger. + @@ -10911,10 +6238,11 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.arch/x86_64-vla-typedef.c +} + +#endif -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.arch/x86_64-vla-typedef.exp -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.arch/x86_64-vla-typedef.exp 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/testsuite/gdb.arch/x86_64-vla-typedef.exp b/gdb/testsuite/gdb.arch/x86_64-vla-typedef.exp +new file mode 100644 +index 0000000..b05411e +--- /dev/null ++++ b/gdb/testsuite/gdb.arch/x86_64-vla-typedef.exp @@ -0,0 +1,64 @@ +# Copyright 2009 Free Software Foundation, Inc. + @@ -10980,10 +6308,10 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.arch/x86_64-vla-typedef.exp +gdb_test "whatis array" "type = array_t" "second: whatis array" + +gdb_test "ptype array" "type = char \\\[78\\\]" "second: ptype array" -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.base/arrayidx.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/testsuite/gdb.base/arrayidx.c 2011-01-01 16:33:40.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.base/arrayidx.c 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/testsuite/gdb.base/arrayidx.c b/gdb/testsuite/gdb.base/arrayidx.c +index a99137e..c3dc2d9 100644 +--- a/gdb/testsuite/gdb.base/arrayidx.c ++++ b/gdb/testsuite/gdb.base/arrayidx.c @@ -17,6 +17,13 @@ int array[] = {1, 2, 3, 4}; @@ -10998,11 +6326,11 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.base/arrayidx.c int main (void) { -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.base/arrayidx.exp -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/testsuite/gdb.base/arrayidx.exp 2011-01-01 16:33:40.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.base/arrayidx.exp 2011-07-03 10:33:11.000000000 +0200 -@@ -57,4 +57,12 @@ gdb_test "print array" \ +diff --git a/gdb/testsuite/gdb.base/arrayidx.exp b/gdb/testsuite/gdb.base/arrayidx.exp +index cba0024..0dc0e46 100644 +--- a/gdb/testsuite/gdb.base/arrayidx.exp ++++ b/gdb/testsuite/gdb.base/arrayidx.exp +@@ -53,4 +53,12 @@ gdb_test "print array" \ "\\{\\\[0\\\] = 1, \\\[1\\\] = 2, \\\[2\\\] = 3, \\\[3\\\] = 4\\}" \ "Print array with array-indexes on" @@ -11016,32 +6344,11 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.base/arrayidx.exp + unsupported "$test (no GCC)" + } +} -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.base/default.exp -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/testsuite/gdb.base/default.exp 2011-02-15 22:17:52.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.base/default.exp 2011-07-03 10:33:11.000000000 +0200 -@@ -607,6 +607,17 @@ gdb_test_list_exact "show convenience" " - {$_sdata = void} \ - {$_siginfo = void} \ - {$_thread = 0} \ -+ {$_probe_argc = } \ -+ {$_probe_arg0 = } \ -+ {$_probe_arg1 = } \ -+ {$_probe_arg2 = } \ -+ {$_probe_arg3 = } \ -+ {$_probe_arg4 = } \ -+ {$_probe_arg5 = } \ -+ {$_probe_arg6 = } \ -+ {$_probe_arg7 = } \ -+ {$_probe_arg8 = } \ -+ {$_probe_arg9 = } \ - } - - #test show directories -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.base/internal-var-field-address.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.base/internal-var-field-address.c 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/testsuite/gdb.base/internal-var-field-address.c b/gdb/testsuite/gdb.base/internal-var-field-address.c +new file mode 100644 +index 0000000..eeb7b85 +--- /dev/null ++++ b/gdb/testsuite/gdb.base/internal-var-field-address.c @@ -0,0 +1,20 @@ +/* This testcase is part of GDB, the GNU debugger. + @@ -11063,10 +6370,11 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.base/internal-var-field-address.c +struct { + int field; +} staticstruct = { 1 }; -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.base/internal-var-field-address.exp -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.base/internal-var-field-address.exp 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/testsuite/gdb.base/internal-var-field-address.exp b/gdb/testsuite/gdb.base/internal-var-field-address.exp +new file mode 100644 +index 0000000..6d82e73 +--- /dev/null ++++ b/gdb/testsuite/gdb.base/internal-var-field-address.exp @@ -0,0 +1,26 @@ +# Copyright 2009 Free Software Foundation, Inc. + @@ -11094,11 +6402,12 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.base/internal-var-field-address.exp + +gdb_test {set $varstruct = staticstruct} +gdb_test {p $varstruct.field} " = 1" -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.base/stap-probe.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.base/stap-probe.c 2011-07-03 10:33:11.000000000 +0200 -@@ -0,0 +1,69 @@ +diff --git a/gdb/testsuite/gdb.base/vla-frame.c b/gdb/testsuite/gdb.base/vla-frame.c +new file mode 100644 +index 0000000..5750f68 +--- /dev/null ++++ b/gdb/testsuite/gdb.base/vla-frame.c +@@ -0,0 +1,31 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2011 Free Software Foundation, Inc. @@ -11116,65 +6425,28 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.base/stap-probe.c + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + -+#if USE_PROBES -+ -+#define _SDT_HAS_SEMAPHORES -+__extension__ unsigned short teste_user_semaphore __attribute__ ((unused)) __attribute__ ((section (".probes"))); -+#define TEST teste_user_semaphore -+ -+__extension__ unsigned short teste_two_semaphore __attribute__ ((unused)) __attribute__ ((section (".probes"))); -+#define TEST2 teste_two_semaphore -+ -+#else -+ -+#define TEST 1 -+#define TEST2 1 -+ -+#endif -+ -+#include -+ -+/* We only support SystemTap and only the v3 form. */ -+#if _SDT_NOTE_TYPE != 3 -+#error "not using SystemTap v3 probes" -+#endif -+ -+void -+m1 (void) -+{ -+ if (TEST2) -+ STAP_PROBE (teste, two); -+} -+ -+void -+m2 (void) -+{ -+ if (TEST2) -+ STAP_PROBE (teste, two); -+} ++#include + +int -+f (int x) ++main (int argc, char **argv) +{ -+ if (TEST) -+ STAP_PROBE1(teste, user, x); -+ return x+5; -+} ++ char s[2 + argc]; ++ void (*f) (char *) = 0; + -+int -+main() -+{ -+ f(f(23)); -+ m1(); -+ m2(); -+} -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.base/stap-probe.exp -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.base/stap-probe.exp 2011-07-03 10:33:11.000000000 +0200 -@@ -0,0 +1,72 @@ -+# Copyright (C) 2011 Free Software Foundation, Inc. ++ memset (s, 0, sizeof (s)); ++ s[0] = 'X'; + ++ f (s); ++ return 0; ++} +diff --git a/gdb/testsuite/gdb.base/vla-frame.exp b/gdb/testsuite/gdb.base/vla-frame.exp +new file mode 100644 +index 0000000..47736c7 +--- /dev/null ++++ b/gdb/testsuite/gdb.base/vla-frame.exp +@@ -0,0 +1,38 @@ ++# Copyright 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 @@ -11188,67 +6460,34 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.base/stap-probe.exp +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + -+set testfile stap-probe ++set testfile vla-frame ++set executable ${testfile} + -+# Run the tests. We run the tests two different ways: once with a -+# plain probe, and once with a probe that has an associated semaphore. -+# This returns -1 on failure to compile or start, 0 otherwise. -+proc stap_test {{arg ""}} { -+ global testfile hex -+ -+ if {$arg != ""} { -+ set arg "additional_flags=$arg" -+ set addendum ", with semaphore" -+ } else { -+ set addendum ", no semaphore" -+ } -+ -+ if {[prepare_for_testing ${testfile}.exp ${testfile} ${testfile}.c \ -+ [concat $arg debug]]} { -+ return -1 -+ } -+ -+ if ![runto_main] { -+ return -1 -+ } -+ -+ gdb_test "print \$_probe_argc" "No SystemTap probe at PC $hex" \ -+ "check argument not at probe point$addendum" -+ -+ gdb_test "info probes" \ -+ "teste *user *$hex .*" \ -+ "info probes$addendum" -+ -+ if {[runto "probe:teste:user"]} { -+ pass "run to probe:teste:user$addendum" -+ } else { -+ fail "run to probe:teste:user$addendum" -+ } -+ -+ # Test probe arguments. -+ gdb_test "print \$_probe_argc" " = 1" "print \$_probe_argc$addendum" -+ gdb_test "print \$_probe_arg0 == x" " = 1" "check \$_probe_arg0$addendum" -+ gdb_test "print \$_probe_arg1" \ -+ "Invalid probe argument 1 -- probe has 1 arguments available" \ -+ "check \$_probe_arg1$addendum" -+ -+ # Set a breakpoint with multiple probe locations. -+ gdb_test "break probe:teste:two" \ -+ "Breakpoint .* at $hex.*2 locations.*" \ -+ "set multi-location probe breakpoint$addendum" -+ -+ return 0 -+} -+ -+if {[stap_test] == -1} { -+ untested stap-probe.exp ++if { [prepare_for_testing ${testfile}.exp ${executable}] } { + return -1 +} -+stap_test "-DUSE_PROBES" -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.base/vla-overflow.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.base/vla-overflow.c 2011-07-03 10:33:11.000000000 +0200 ++ ++if ![runto_main] { ++ return -1 ++} ++ ++set test "continue" ++gdb_test_multiple $test $test { ++ -re "Continuing\\.\r\n\r\nProgram received signal SIGSEGV, Segmentation fault\\.\r\n0x0+ in \\?\\? \\(\\)\r\n$gdb_prompt $" { ++ pass $test ++ } ++ -re "\r\n$gdb_prompt $" { ++ untested ${testfile}.exp ++ return ++ } ++} ++ ++gdb_test "bt full" "\r\n +s = \"X\\\\000\"\r\n.*" +diff --git a/gdb/testsuite/gdb.base/vla-overflow.c b/gdb/testsuite/gdb.base/vla-overflow.c +new file mode 100644 +index 0000000..c5d5ee0 +--- /dev/null ++++ b/gdb/testsuite/gdb.base/vla-overflow.c @@ -0,0 +1,30 @@ +/* This testcase is part of GDB, the GNU debugger. + @@ -11280,10 +6519,11 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.base/vla-overflow.c + + return 0; +} -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.base/vla-overflow.exp -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.base/vla-overflow.exp 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/testsuite/gdb.base/vla-overflow.exp b/gdb/testsuite/gdb.base/vla-overflow.exp +new file mode 100644 +index 0000000..24a608f +--- /dev/null ++++ b/gdb/testsuite/gdb.base/vla-overflow.exp @@ -0,0 +1,109 @@ +# Copyright 2008 Free Software Foundation, Inc. + @@ -11394,10 +6634,11 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.base/vla-overflow.exp +gdb_test "bt" "in \[^ \]*abort \\(.* in main \\(.*" "Backtrace after abort()" + +verbose -log "kb_found in bt after abort() = [expr [memory_v_pages_get] * $pagesize / 1024]" -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.base/vla.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.base/vla.c 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/testsuite/gdb.base/vla.c b/gdb/testsuite/gdb.base/vla.c +new file mode 100644 +index 0000000..e1f3ed1 +--- /dev/null ++++ b/gdb/testsuite/gdb.base/vla.c @@ -0,0 +1,55 @@ +/* This testcase is part of GDB, the GNU debugger. + @@ -11454,10 +6695,11 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.base/vla.c + foo (78); + return 0; +} -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.base/vla.exp -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.base/vla.exp 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/testsuite/gdb.base/vla.exp b/gdb/testsuite/gdb.base/vla.exp +new file mode 100644 +index 0000000..5da7378 +--- /dev/null ++++ b/gdb/testsuite/gdb.base/vla.exp @@ -0,0 +1,62 @@ +# Copyright 2008 Free Software Foundation, Inc. + @@ -11521,32 +6763,11 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.base/vla.exp +gdb_test "p temp1" " = '1' " "second: print temp1" +gdb_test "p temp2" " = '2' " "second: print temp2" +gdb_test "p temp3" " = '3' " "second: print temp3" -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.cp/nextoverthrow.exp -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/testsuite/gdb.cp/nextoverthrow.exp 2011-01-01 16:33:44.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.cp/nextoverthrow.exp 2011-07-03 10:33:11.000000000 +0200 -@@ -53,6 +53,17 @@ gdb_test_multiple "print _Unwind_DebugHo - } - } - if {!$ok} { -+ gdb_test_multiple "info probe" "check for stap probe in unwinder" { -+ -re ".*libgcc.*unwind.*\r\n$gdb_prompt $" { -+ pass "check for stap probe in unwinder" -+ set ok 1 -+ } -+ -re "\r\n$gdb_prompt $" { -+ } -+ } -+} -+ -+if {!$ok} { - unsupported "nextoverthrow.exp could not find _Unwind_DebugHook" - return -1 - } -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.dwarf2/dw2-bound-loclist.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.dwarf2/dw2-bound-loclist.S 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/testsuite/gdb.dwarf2/dw2-bound-loclist.S b/gdb/testsuite/gdb.dwarf2/dw2-bound-loclist.S +new file mode 100644 +index 0000000..aac3baa +--- /dev/null ++++ b/gdb/testsuite/gdb.dwarf2/dw2-bound-loclist.S @@ -0,0 +1,246 @@ +/* This testcase is part of GDB, the GNU debugger. + @@ -11794,10 +7015,11 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.dwarf2/dw2-bound-loclist.S + .string "char" +.Luint_str: + .string "unsigned int" -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.dwarf2/dw2-bound-loclist.exp -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.dwarf2/dw2-bound-loclist.exp 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/testsuite/gdb.dwarf2/dw2-bound-loclist.exp b/gdb/testsuite/gdb.dwarf2/dw2-bound-loclist.exp +new file mode 100644 +index 0000000..815ed93 +--- /dev/null ++++ b/gdb/testsuite/gdb.dwarf2/dw2-bound-loclist.exp @@ -0,0 +1,54 @@ +# Copyright 2010 Free Software Foundation, Inc. + @@ -11853,10 +7075,11 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.dwarf2/dw2-bound-loclist.exp + +# The register contains unpredictable value - the array size. +gdb_test "ptype reg_string" {type = char \[-?[0-9]+\]} -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.dwarf2/dw2-stripped.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.dwarf2/dw2-stripped.c 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/testsuite/gdb.dwarf2/dw2-stripped.c b/gdb/testsuite/gdb.dwarf2/dw2-stripped.c +new file mode 100644 +index 0000000..1f02d90 +--- /dev/null ++++ b/gdb/testsuite/gdb.dwarf2/dw2-stripped.c @@ -0,0 +1,42 @@ +/* This testcase is part of GDB, the GNU debugger. + @@ -11900,10 +7123,11 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.dwarf2/dw2-stripped.c + func1 (1, 2); + return 0; +} -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.dwarf2/dw2-stripped.exp -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.dwarf2/dw2-stripped.exp 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/testsuite/gdb.dwarf2/dw2-stripped.exp b/gdb/testsuite/gdb.dwarf2/dw2-stripped.exp +new file mode 100644 +index 0000000..1c6e84a +--- /dev/null ++++ b/gdb/testsuite/gdb.dwarf2/dw2-stripped.exp @@ -0,0 +1,79 @@ +# Copyright 2006 Free Software Foundation, Inc. + @@ -11984,10 +7208,11 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.dwarf2/dw2-stripped.exp +gdb_test "step" \ + "func.* \\(.*\\) at .*" \ + "step" -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.dwarf2/dw2-struct-member-data-location.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.dwarf2/dw2-struct-member-data-location.S 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/testsuite/gdb.dwarf2/dw2-struct-member-data-location.S b/gdb/testsuite/gdb.dwarf2/dw2-struct-member-data-location.S +new file mode 100644 +index 0000000..5fcdd84 +--- /dev/null ++++ b/gdb/testsuite/gdb.dwarf2/dw2-struct-member-data-location.S @@ -0,0 +1,83 @@ +/* This testcase is part of GDB, the GNU debugger. + @@ -12072,10 +7297,11 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.dwarf2/dw2-struct-member-data-locat + + .byte 0x0 /* Terminator */ + .byte 0x0 /* Terminator */ -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.dwarf2/dw2-struct-member-data-location.exp -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.dwarf2/dw2-struct-member-data-location.exp 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/testsuite/gdb.dwarf2/dw2-struct-member-data-location.exp b/gdb/testsuite/gdb.dwarf2/dw2-struct-member-data-location.exp +new file mode 100644 +index 0000000..c41151c +--- /dev/null ++++ b/gdb/testsuite/gdb.dwarf2/dw2-struct-member-data-location.exp @@ -0,0 +1,37 @@ +# Copyright 2009 Free Software Foundation, Inc. + @@ -12114,10 +7340,183 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.dwarf2/dw2-struct-member-data-locat +clean_restart $binfile + +gdb_test "ptype struct some_struct" "type = struct some_struct {\[\r\n \t\]*void field;\[\r\n \t\]*}" -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.fortran/dwarf-stride.exp -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.fortran/dwarf-stride.exp 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/testsuite/gdb.dwarf2/dw2-subrange-no-type.S b/gdb/testsuite/gdb.dwarf2/dw2-subrange-no-type.S +new file mode 100644 +index 0000000..9dbbf3c +--- /dev/null ++++ b/gdb/testsuite/gdb.dwarf2/dw2-subrange-no-type.S +@@ -0,0 +1,121 @@ ++/* This testcase is part of GDB, the GNU debugger. ++ ++ Copyright 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 . */ ++ ++/* Debug information */ ++ ++ .section .data ++vardata: ++ .rept 129 ++ .ascii "x" ++ .endr ++ .ascii "UNSEEN\0" ++ ++ .section .debug_info ++.Lcu1_begin: ++ .4byte .Lcu1_end - .Lcu1_start /* Length of Compilation Unit */ ++.Lcu1_start: ++ .2byte 2 /* DWARF version number */ ++ .4byte .Ldebug_abbrev0 /* Offset Into Abbrev. Section */ ++ .byte 4 /* Pointer Size (in bytes) */ ++ ++ /* CU die */ ++ .uleb128 1 /* Abbrev: DW_TAG_compile_unit */ ++ .ascii "GNU C 3.3.3\0" /* DW_AT_producer */ ++ .byte 2 /* DW_AT_language (C) - */ ++ ++.Larray_type: ++ .uleb128 2 /* Abbrev: DW_TAG_array_type */ ++ .4byte .Lchar_type-.Lcu1_begin /* DW_AT_type */ ++ ++ .uleb128 8 /* Abbrev: DW_TAG_subrange_type without DW_AT_type */ ++ .byte 0 /* DW_AT_lower_bound */ ++ .byte 128 /* DW_AT_upper_bound */ ++ ++ .byte 0 /* End of children of die */ ++ ++.Lchar_type: ++ .uleb128 4 /* Abbrev: DW_TAG_base_type */ ++ .ascii "char\0" /* DW_AT_name */ ++ .byte 1 /* DW_AT_byte_size */ ++ .byte 6 /* DW_AT_encoding */ ++ ++ .uleb128 6 /* Abbrev: DW_TAG_variable DW_FORM_string */ ++ .ascii "notype_string\0" /* DW_AT_name */ ++ .4byte .Larray_type-.Lcu1_begin /* DW_AT_type */ ++ .byte 2f - 1f /* DW_AT_location */ ++1: .byte 3 /* DW_OP_addr */ ++ .4byte vardata /* */ ++2: ++ ++ .byte 0 /* End of children of CU */ ++.Lcu1_end: ++ ++ .section .debug_abbrev ++.Ldebug_abbrev0: ++ .uleb128 1 /* Abbrev code */ ++ .uleb128 0x11 /* DW_TAG_compile_unit */ ++ .byte 0x1 /* has_children */ ++ .uleb128 0x25 /* DW_AT_producer */ ++ .uleb128 0x8 /* DW_FORM_string */ ++ .uleb128 0x13 /* DW_AT_language */ ++ .uleb128 0xb /* DW_FORM_data1 */ ++ .byte 0x0 /* Terminator */ ++ .byte 0x0 /* Terminator */ ++ ++ .uleb128 2 /* Abbrev code */ ++ .uleb128 0x1 /* TAG: DW_TAG_array_type */ ++ .byte 0x1 /* DW_children_yes */ ++ .uleb128 0x49 /* DW_AT_type */ ++ .uleb128 0x13 /* DW_FORM_ref4 */ ++ .byte 0x0 /* Terminator */ ++ .byte 0x0 /* Terminator */ ++ ++ .uleb128 4 /* Abbrev code */ ++ .uleb128 0x24 /* DW_TAG_base_type */ ++ .byte 0x0 /* no_children */ ++ .uleb128 0x3 /* DW_AT_name */ ++ .uleb128 0x8 /* DW_FORM_string */ ++ .uleb128 0xb /* DW_AT_byte_size */ ++ .uleb128 0xb /* DW_FORM_data1 */ ++ .uleb128 0x3e /* DW_AT_encoding */ ++ .uleb128 0xb /* DW_FORM_data1 */ ++ .byte 0x0 /* Terminator */ ++ .byte 0x0 /* Terminator */ ++ ++ .uleb128 6 /* Abbrev code */ ++ .uleb128 0x34 /* DW_TAG_variable */ ++ .byte 0x0 /* no_children */ ++ .uleb128 0x3 /* DW_AT_name */ ++ .uleb128 0x8 /* DW_FORM_string */ ++ .uleb128 0x49 /* DW_AT_type */ ++ .uleb128 0x13 /* DW_FORM_ref4 */ ++ .uleb128 0x2 /* DW_AT_location */ ++ .uleb128 0xa /* DW_FORM_block1 */ ++ .byte 0x0 /* Terminator */ ++ .byte 0x0 /* Terminator */ ++ ++ .uleb128 8 /* Abbrev code */ ++ .uleb128 0x21 /* DW_TAG_subrange_type without DW_AT_type */ ++ .byte 0x0 /* no children */ ++ .uleb128 0x22 /* DW_AT_lower_bound */ ++ .uleb128 0xb /* DW_FORM_data1 */ ++ .uleb128 0x2f /* DW_AT_upper_bound */ ++ .uleb128 0xb /* DW_FORM_data1 */ ++ .byte 0x0 /* Terminator */ ++ .byte 0x0 /* Terminator */ ++ ++ .byte 0x0 /* Terminator */ +diff --git a/gdb/testsuite/gdb.dwarf2/dw2-subrange-no-type.exp b/gdb/testsuite/gdb.dwarf2/dw2-subrange-no-type.exp +new file mode 100644 +index 0000000..a13e346 +--- /dev/null ++++ b/gdb/testsuite/gdb.dwarf2/dw2-subrange-no-type.exp +@@ -0,0 +1,39 @@ ++# Copyright 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 . ++load_lib dwarf.exp ++ ++# https://bugzilla.redhat.com/show_bug.cgi?id=806920 ++# read_subrange_type reinitialization ++# of BASE_TYPE was done too late, it affects DW_TAG_subrange_type without ++# specified DW_AT_type, present only in XLF produced code. ++ ++# This test can only be run on targets which support DWARF-2 and use gas. ++if {![dwarf2_support]} { ++ return 0 ++} ++ ++set testfile dw2-subrange-no-type ++set srcfile ${testfile}.S ++set executable ${testfile}.x ++set binfile ${objdir}/${subdir}/${executable} ++ ++if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" object {}] != "" } { ++ return -1 ++} ++ ++clean_restart $executable ++ ++gdb_test "ptype notype_string" {type = char \[129\]} ++gdb_test "p notype_string" " = 'x' " +diff --git a/gdb/testsuite/gdb.fortran/dwarf-stride.exp b/gdb/testsuite/gdb.fortran/dwarf-stride.exp +new file mode 100644 +index 0000000..d7b8bea +--- /dev/null ++++ b/gdb/testsuite/gdb.fortran/dwarf-stride.exp @@ -0,0 +1,42 @@ +# Copyright 2009 Free Software Foundation, Inc. + @@ -12148,7 +7547,7 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.fortran/dwarf-stride.exp +set testfile dwarf-stride +set srcfile ${testfile}.f90 + -+if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} {debug f77}] } { ++if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} {debug f90}] } { + return -1 +} + @@ -12161,10 +7560,11 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.fortran/dwarf-stride.exp +gdb_continue_to_breakpoint "break-here" ".*break-here.*" +gdb_test "p c40pt(1)" " = '0-hello.*" +gdb_test "p c40pt(2)" " = '1-hello.*" -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.fortran/dwarf-stride.f90 -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.fortran/dwarf-stride.f90 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/testsuite/gdb.fortran/dwarf-stride.f90 b/gdb/testsuite/gdb.fortran/dwarf-stride.f90 +new file mode 100644 +index 0000000..e492b3a +--- /dev/null ++++ b/gdb/testsuite/gdb.fortran/dwarf-stride.f90 @@ -0,0 +1,40 @@ +! Copyright 2009 Free Software Foundation, Inc. +! @@ -12206,10 +7606,11 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.fortran/dwarf-stride.f90 + print *, c40pt ! break-here + +end program repro -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.fortran/dynamic-other-frame-stub.f90 -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.fortran/dynamic-other-frame-stub.f90 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/testsuite/gdb.fortran/dynamic-other-frame-stub.f90 b/gdb/testsuite/gdb.fortran/dynamic-other-frame-stub.f90 +new file mode 100644 +index 0000000..261ce17 +--- /dev/null ++++ b/gdb/testsuite/gdb.fortran/dynamic-other-frame-stub.f90 @@ -0,0 +1,24 @@ +! Copyright 2010 Free Software Foundation, Inc. +! @@ -12235,10 +7636,11 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.fortran/dynamic-other-frame-stub.f9 + real :: dummy + dummy = 1 +end subroutine bar -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.fortran/dynamic-other-frame.exp -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.fortran/dynamic-other-frame.exp 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/testsuite/gdb.fortran/dynamic-other-frame.exp b/gdb/testsuite/gdb.fortran/dynamic-other-frame.exp +new file mode 100644 +index 0000000..fa41b80 +--- /dev/null ++++ b/gdb/testsuite/gdb.fortran/dynamic-other-frame.exp @@ -0,0 +1,37 @@ +# Copyright 2010 Free Software Foundation, Inc. + @@ -12263,8 +7665,8 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.fortran/dynamic-other-frame.exp +set executable ${testfile} +set binfile ${objdir}/${subdir}/${executable} + -+if { [gdb_compile "${srcdir}/${subdir}/${srcfile2}" "${objfile2}" object {f77}] != "" -+ || [gdb_compile "${srcdir}/${subdir}/${srcfile1} ${objfile2}" "${binfile}" executable {debug f77}] != "" } { ++if { [gdb_compile "${srcdir}/${subdir}/${srcfile2}" "${objfile2}" object {f90}] != "" ++ || [gdb_compile "${srcdir}/${subdir}/${srcfile1} ${objfile2}" "${binfile}" executable {debug f90}] != "" } { + untested "Couldn't compile ${srcfile1} or ${srcfile2}" + return -1 +} @@ -12277,10 +7679,11 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.fortran/dynamic-other-frame.exp +} + +gdb_test "bt" {foo \(string='hello'.*} -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.fortran/dynamic-other-frame.f90 -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.fortran/dynamic-other-frame.f90 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/testsuite/gdb.fortran/dynamic-other-frame.f90 b/gdb/testsuite/gdb.fortran/dynamic-other-frame.f90 +new file mode 100644 +index 0000000..2bc637d +--- /dev/null ++++ b/gdb/testsuite/gdb.fortran/dynamic-other-frame.f90 @@ -0,0 +1,36 @@ +! Copyright 2010 Free Software Foundation, Inc. +! @@ -12318,11 +7721,12 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.fortran/dynamic-other-frame.f90 + end interface + call foo ('hello') +end -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.fortran/dynamic.exp -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.fortran/dynamic.exp 2011-07-03 10:33:11.000000000 +0200 -@@ -0,0 +1,145 @@ +diff --git a/gdb/testsuite/gdb.fortran/dynamic.exp b/gdb/testsuite/gdb.fortran/dynamic.exp +new file mode 100644 +index 0000000..e79e94a +--- /dev/null ++++ b/gdb/testsuite/gdb.fortran/dynamic.exp +@@ -0,0 +1,152 @@ +# Copyright 2007 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify @@ -12350,7 +7754,7 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.fortran/dynamic.exp +set srcfile ${testfile}.f90 +set binfile ${objdir}/${subdir}/${testfile} + -+if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug f77 quiet}] != "" } { ++if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug f90 quiet}] != "" } { + untested "Couldn't compile ${srcfile}" + return -1 +} @@ -12390,6 +7794,13 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.fortran/dynamic.exp +gdb_test "p varv" "\\$\[0-9\]* = (<(object|the array) is not associated>|.*(Cannot access it|Unable to access the object) because the object is not associated.)" "p varv unassociated" +gdb_test "ptype varv" "type = (<(object|the array) is not associated>|.*(Cannot access it|Unable to access the object) because the object is not associated.)" "ptype varv unassociated" + ++set test "output varx" ++gdb_test_multiple $test $test { ++ -re "^output varx\r\n\[() ,6789.\]*$gdb_prompt $" { ++ pass $test ++ } ++} ++ +gdb_breakpoint [gdb_get_line_number "varv-associated"] +gdb_continue_to_breakpoint "varv-associated" +gdb_test "p varx(3, 7, 19)" "\\$\[0-9\]* = 6" "p varx(3, 7, 19) with varv associated" @@ -12468,10 +7879,11 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.fortran/dynamic.exp +gdb_test "p vart(3,8)" "\\$\[0-9\]* = 9" +# maps to foo::vary(1,3) +gdb_test "p vart(2,9)" "\\$\[0-9\]* = 10" -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.fortran/dynamic.f90 -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.fortran/dynamic.f90 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/testsuite/gdb.fortran/dynamic.f90 b/gdb/testsuite/gdb.fortran/dynamic.f90 +new file mode 100644 +index 0000000..0f43564 +--- /dev/null ++++ b/gdb/testsuite/gdb.fortran/dynamic.f90 @@ -0,0 +1,98 @@ +! Copyright 2007 Free Software Foundation, Inc. +! @@ -12571,10 +7983,11 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.fortran/dynamic.f90 + if (x (1, 1) .ne. 8 .or. x (2, 2) .ne. 9 .or. x (1, 2) .ne. 4) call abort + if (x (3, 1) .ne. 10) call abort +end -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.fortran/string.exp -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.fortran/string.exp 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/testsuite/gdb.fortran/string.exp b/gdb/testsuite/gdb.fortran/string.exp +new file mode 100644 +index 0000000..39de2c4 +--- /dev/null ++++ b/gdb/testsuite/gdb.fortran/string.exp @@ -0,0 +1,59 @@ +# Copyright 2008 Free Software Foundation, Inc. + @@ -12601,7 +8014,7 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.fortran/string.exp +set srcfile ${testfile}.f90 +set binfile ${objdir}/${subdir}/${testfile} + -+if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug f77 quiet}] != "" } { ++if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug f90 quiet}] != "" } { + untested "Couldn't compile ${srcfile}" + return -1 +} @@ -12635,10 +8048,11 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.fortran/string.exp +gdb_continue_to_breakpoint "var-finish" +gdb_test "p e" "\\$\[0-9\]* = 'e '" "p e re-set" +gdb_test "p f" "\\$\[0-9\]* = \\(\\( 'f ', 'f ', 'f ', 'f ', 'f ', 'f ', 'f '\\) \\( 'f2 ', 'f ', 'f ', 'f ', 'f ', 'f ', 'f '\\) \\( 'f ', 'f ', 'f ', 'f ', 'f ', 'f ', 'f '\\) \\)" "p *f re-set" -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.fortran/string.f90 -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.fortran/string.f90 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/testsuite/gdb.fortran/string.f90 b/gdb/testsuite/gdb.fortran/string.f90 +new file mode 100644 +index 0000000..226dc5d +--- /dev/null ++++ b/gdb/testsuite/gdb.fortran/string.f90 @@ -0,0 +1,37 @@ +! Copyright 2008 Free Software Foundation, Inc. +! @@ -12677,10 +8091,11 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.fortran/string.f90 + h = 'h' + call foo (g, h) +end -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.fortran/subrange.exp -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.fortran/subrange.exp 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/testsuite/gdb.fortran/subrange.exp b/gdb/testsuite/gdb.fortran/subrange.exp +new file mode 100644 +index 0000000..c819e23 +--- /dev/null ++++ b/gdb/testsuite/gdb.fortran/subrange.exp @@ -0,0 +1,60 @@ +# Copyright 2011 Free Software Foundation, Inc. + @@ -12701,7 +8116,7 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.fortran/subrange.exp + +set testfile "subrange" +set srcfile ${testfile}.f90 -+if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} {debug f77}] } { ++if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} {debug f90}] } { + return -1 +} + @@ -12742,10 +8157,11 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.fortran/subrange.exp +delete_breakpoints +gdb_unload +gdb_test {p $a (3, 2:2)} { = \(23\)} -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.fortran/subrange.f90 -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.fortran/subrange.f90 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/testsuite/gdb.fortran/subrange.f90 b/gdb/testsuite/gdb.fortran/subrange.f90 +new file mode 100644 +index 0000000..4747ea9 +--- /dev/null ++++ b/gdb/testsuite/gdb.fortran/subrange.f90 @@ -0,0 +1,28 @@ +! Copyright 2011 Free Software Foundation, Inc. +! @@ -12775,12 +8191,12 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.fortran/subrange.f90 + ptr => a + write (*,*) a ! break-static +end -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.gdb/selftest.exp -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/testsuite/gdb.gdb/selftest.exp 2011-07-03 10:33:07.000000000 +0200 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.gdb/selftest.exp 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/testsuite/gdb.gdb/selftest.exp b/gdb/testsuite/gdb.gdb/selftest.exp +index 7645caf..f4f9c1f 100644 +--- a/gdb/testsuite/gdb.gdb/selftest.exp ++++ b/gdb/testsuite/gdb.gdb/selftest.exp @@ -92,6 +92,10 @@ proc do_steps_and_nexts {} { - set description "step over ttyarg initialization" + set description "step over cmdarg_vec initialization" set command "step" } + -re ".*python_script = 0.*$gdb_prompt $" { @@ -12790,10 +8206,11 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.gdb/selftest.exp -re ".*pre_stat_chain = make_command_stats_cleanup.*$gdb_prompt $" { set description "next over make_command_stats_cleanup and everything it calls" set command "next" -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.mi/mi2-var-stale-type.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.mi/mi2-var-stale-type.c 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/testsuite/gdb.mi/mi2-var-stale-type.c b/gdb/testsuite/gdb.mi/mi2-var-stale-type.c +new file mode 100644 +index 0000000..ebced3c +--- /dev/null ++++ b/gdb/testsuite/gdb.mi/mi2-var-stale-type.c @@ -0,0 +1,26 @@ +/* Copyright 2011 Free Software Foundation, Inc. + @@ -12821,10 +8238,11 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.mi/mi2-var-stale-type.c + + return 0; +} -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.mi/mi2-var-stale-type.exp -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.mi/mi2-var-stale-type.exp 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/testsuite/gdb.mi/mi2-var-stale-type.exp b/gdb/testsuite/gdb.mi/mi2-var-stale-type.exp +new file mode 100644 +index 0000000..74a104e +--- /dev/null ++++ b/gdb/testsuite/gdb.mi/mi2-var-stale-type.exp @@ -0,0 +1,57 @@ +# Copyright 2011 Free Software Foundation, Inc. +# @@ -12883,192 +8301,11 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.mi/mi2-var-stale-type.exp +mi_create_varobj "vla" "vla" "create local variable vla" + +mi_gdb_test "-var-update *" "\\^done,changelist=.*" "-var-update *" -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.multi/watchpoint-multi.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.multi/watchpoint-multi.c 2011-07-03 10:33:11.000000000 +0200 -@@ -0,0 +1,59 @@ -+/* This testcase is part of GDB, the GNU debugger. -+ -+ Copyright 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 . */ -+ -+#include -+#include -+ -+static volatile int a, b, c; -+ -+static void -+marker_exit1 (void) -+{ -+ a = 1; -+} -+ -+/* Workaround PR breakpoints/12272 by two different breakpoint locations. */ -+static void -+marker_exit2 (void) -+{ -+ a = 1; -+} -+ -+static void * -+start (void *arg) -+{ -+ b = 2; -+ c = 3; -+ -+ return NULL; -+} -+ -+int -+main (void) -+{ -+ pthread_t thread; -+ int i; -+ -+ i = pthread_create (&thread, NULL, start, NULL); -+ assert (i == 0); -+ i = pthread_join (thread, NULL); -+ assert (i == 0); -+ -+ marker_exit1 (); -+ marker_exit2 (); -+ return 0; -+} -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.multi/watchpoint-multi.exp -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.multi/watchpoint-multi.exp 2011-07-03 10:33:11.000000000 +0200 -@@ -0,0 +1,113 @@ -+# Copyright 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 { [is_remote target] || ![isnative] } then { -+ continue -+} -+ -+set testfile "watchpoint-multi" -+ -+set executable ${testfile} -+set srcfile ${testfile}.c -+set binfile ${objdir}/${subdir}/${executable} -+ -+if { [gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } { -+ untested ${testfile}.exp -+ return -1 -+} -+ -+clean_restart $executable -+ -+if ![runto_main] { -+ return -+} -+# Never keep/use any non-hw breakpoints to workaround a multi-inferior bug. -+delete_breakpoints -+ -+gdb_test "add-inferior" "Added inferior 2" -+gdb_test "inferior 2" "witching to inferior 2 .*" -+gdb_load $binfile -+ -+if ![runto_main] { -+ return -+} -+delete_breakpoints -+ -+# Simulate non-stop+target-async which also uses breakpoint always-inserted. -+gdb_test_no_output "set breakpoint always-inserted on" -+# displaced-stepping is also needed as other GDB sometimes still removes the -+# breakpoints, even with always-inserted on. -+gdb_test_no_output "set displaced-stepping on" -+ -+# Debugging of this testcase: -+#gdb_test_no_output "maintenance set show-debug-regs on" -+#gdb_test_no_output "set debug infrun 1" -+ -+# Do not use simple hardware watchpoint ("watch") as its false hit may be -+# unnoticed by GDB if it reads it still has the same value. -+gdb_test "awatch c" "Hardware access \\(read/write\\) watchpoint \[0-9\]+: c" -+# Never keep/use any non-hw breakpoints to workaround a multi-inferior bug. -+# Use `*' to workaround a multi-inferior bug. -+set test "hbreak *marker_exit2" -+gdb_test_multiple $test $test { -+ -re "Hardware assisted breakpoint \[0-9\]+ at .*\r\n$gdb_prompt $" { -+ pass $test -+ } -+ -re "(No hardware breakpoint support in the target\\.|Hardware breakpoints used exceeds limit\\.)\r\n$gdb_prompt $" { -+ pass $test -+ untested ${testfile}.exp -+ return -+ } -+} -+ -+gdb_test "inferior 1" "witching to inferior 1 .*" -+ -+gdb_test "awatch b" "Hardware access \\(read/write\\) watchpoint \[0-9\]+: b" -+gdb_test "hbreak *marker_exit1" {Hardware assisted breakpoint [0-9]+ at .*} -+ -+gdb_test "inferior 2" "witching to inferior 2 .*" -+ -+# FAIL would be a hit on watchpoint for `b' - that one is for the other -+# inferior. -+gdb_test "continue" "Hardware access \\(read/write\\) watchpoint \[0-9\]+: c\r\n\r\nOld value = 0\r\nNew value = 3\r\n.*" "catch c" -+ -+set test "catch marker_exit2" -+gdb_test_multiple "continue" $test { -+ -re "Breakpoint \[0-9\]+, marker_exit2 .*\r\n$gdb_prompt $" { -+ setup_kfail breakpoints/12312 *-*-* -+ pass $test -+ } -+ -re "Hardware access \\(read/write\\) watchpoint \[0-9\]+: c\r\n\r\nValue = 3\r\n(.* in )?\\*?(__GI_)?__nptl_death_event .*\r\n$gdb_prompt $" { -+ setup_kfail breakpoints/12312 *-*-* -+ fail $test -+ } -+} -+ -+gdb_test "inferior 1" "witching to inferior 1 .*" -+ -+gdb_test "continue" "Hardware access \\(read/write\\) watchpoint \[0-9\]+: b\r\n\r\nOld value = 0\r\nNew value = 2\r\n.*" "catch b" -+ -+set test "catch marker_exit1" -+gdb_test_multiple "continue" $test { -+ -re "Breakpoint \[0-9\]+, marker_exit1 .*\r\n$gdb_prompt $" { -+ setup_kfail breakpoints/12312 *-*-* -+ pass $test -+ } -+ -re "Hardware access \\(read/write\\) watchpoint \[0-9\]+: b\r\n\r\nValue = 2\r\n(.* in )?\\*?(__GI_)?__nptl_death_event .*\r\n$gdb_prompt $" { -+ setup_kfail breakpoints/12312 *-*-* -+ fail $test -+ } -+} -+ -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.opt/array-from-register-func.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.opt/array-from-register-func.c 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/testsuite/gdb.opt/array-from-register-func.c b/gdb/testsuite/gdb.opt/array-from-register-func.c +new file mode 100644 +index 0000000..729f457 +--- /dev/null ++++ b/gdb/testsuite/gdb.opt/array-from-register-func.c @@ -0,0 +1,22 @@ +/* This file is part of GDB, the GNU debugger. + @@ -13092,10 +8329,11 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.opt/array-from-register-func.c +{ + return arr[0]; +} -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.opt/array-from-register.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.opt/array-from-register.c 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/testsuite/gdb.opt/array-from-register.c b/gdb/testsuite/gdb.opt/array-from-register.c +new file mode 100644 +index 0000000..3090e7e +--- /dev/null ++++ b/gdb/testsuite/gdb.opt/array-from-register.c @@ -0,0 +1,28 @@ +/* This file is part of GDB, the GNU debugger. + @@ -13125,10 +8363,11 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.opt/array-from-register.c + + return 0; +} -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.opt/array-from-register.exp -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.opt/array-from-register.exp 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/testsuite/gdb.opt/array-from-register.exp b/gdb/testsuite/gdb.opt/array-from-register.exp +new file mode 100644 +index 0000000..f2de718 +--- /dev/null ++++ b/gdb/testsuite/gdb.opt/array-from-register.exp @@ -0,0 +1,33 @@ +# Copyright 2009 Free Software Foundation, Inc. +# @@ -13163,10 +8402,11 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.opt/array-from-register.exp +# Seen regression: +# Address requested for identifier "arr" which is in register $rdi +gdb_test "p arr\[0\]" "\\$\[0-9\]+ = 42" -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.pascal/arrays.exp -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.pascal/arrays.exp 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/testsuite/gdb.pascal/arrays.exp b/gdb/testsuite/gdb.pascal/arrays.exp +new file mode 100644 +index 0000000..ccc6e1e +--- /dev/null ++++ b/gdb/testsuite/gdb.pascal/arrays.exp @@ -0,0 +1,104 @@ +# Copyright 2008, 2009 Free Software Foundation, Inc. +# @@ -13272,10 +8512,11 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.pascal/arrays.exp +} +gdb_test "print DynArrChar" ".* = 'abcdefghijklm'" "Print dynamic array of char" + -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.pascal/arrays.pas -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.pascal/arrays.pas 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/testsuite/gdb.pascal/arrays.pas b/gdb/testsuite/gdb.pascal/arrays.pas +new file mode 100644 +index 0000000..295602d +--- /dev/null ++++ b/gdb/testsuite/gdb.pascal/arrays.pas @@ -0,0 +1,82 @@ +{ + Copyright 2008, 2009 Free Software Foundation, Inc. @@ -13359,11 +8600,11 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.pascal/arrays.pas + s := 'test'#0'string'; + writeln(s); { set breakpoint 2 here } +end. -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.python/py-frame.exp -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/testsuite/gdb.python/py-frame.exp 2011-02-26 15:06:28.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.python/py-frame.exp 2011-07-03 10:33:11.000000000 +0200 -@@ -78,8 +78,6 @@ gdb_test "python print bframe == gdb.new +diff --git a/gdb/testsuite/gdb.python/py-frame.exp b/gdb/testsuite/gdb.python/py-frame.exp +index 83ff8fe..bddbf9f 100644 +--- a/gdb/testsuite/gdb.python/py-frame.exp ++++ b/gdb/testsuite/gdb.python/py-frame.exp +@@ -74,8 +74,6 @@ gdb_test "python print bframe == gdb.newest_frame()" True \ gdb_test "python print 'result =', f0 == f1" " = False" "test equality comparison (false)" gdb_test "python print 'result =', f0 == f0" " = True" "test equality comparison (true)" @@ -13372,17 +8613,17 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.python/py-frame.exp gdb_test "python print 'result =', f0.is_valid ()" " = True" "test Frame.is_valid" gdb_test "python print 'result =', f0.name ()" " = f2" "test Frame.name" gdb_test "python print 'result =', f0.type () == gdb.NORMAL_FRAME" " = True" "test Frame.type" -@@ -94,3 +92,5 @@ gdb_test "python print 'result =', f0.re +@@ -90,3 +88,5 @@ gdb_test "python print 'result =', f0.read_var ('variable_which_surely_doesnt_ex gdb_test "python print 'result =', f0.read_var ('a')" " = 1" "test Frame.read_var - success" gdb_test "python print 'result =', gdb.selected_frame () == f1" " = True" "test gdb.selected_frame" + +gdb_test "python print 'result =', f0.block ()" "" "test Frame.block" -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.python/py-value.exp -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/testsuite/gdb.python/py-value.exp 2011-01-01 16:33:49.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.python/py-value.exp 2011-07-03 10:33:11.000000000 +0200 -@@ -318,6 +318,15 @@ proc test_value_after_death {} { +diff --git a/gdb/testsuite/gdb.python/py-value.exp b/gdb/testsuite/gdb.python/py-value.exp +index c9d8c97..4324db0 100644 +--- a/gdb/testsuite/gdb.python/py-value.exp ++++ b/gdb/testsuite/gdb.python/py-value.exp +@@ -360,6 +360,15 @@ proc test_value_after_death {} { "print value's type" } @@ -13398,876 +8639,19 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.python/py-value.exp # Regression test for invalid subscript operations. The bug was that # the type of the value was not being checked before allowing a # subscript operation to proceed. -@@ -455,6 +464,7 @@ test_value_in_inferior +@@ -496,6 +505,7 @@ test_value_in_inferior test_inferior_function_call test_lazy_strings test_value_after_death +test_cast_regression - # The following test recompiles the binary to test either C or C++ - # values. -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.threads/watchpoint-fork-child.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.threads/watchpoint-fork-child.c 2011-07-03 10:33:11.000000000 +0200 -@@ -0,0 +1,127 @@ -+/* Test case for forgotten hw-watchpoints after fork()-off of a process. -+ -+ Copyright 2008, 2009, 2010 Free Software Foundation, Inc. -+ -+ This file is part of GDB. -+ -+ 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 2 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, write to the Free Software -+ Foundation, Inc., 59 Temple Place - Suite 330, -+ Boston, MA 02111-1307, USA. */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include "watchpoint-fork.h" -+ -+static volatile int usr1_got; -+ -+static void -+handler_usr1 (int signo) -+{ -+ usr1_got++; -+} -+ -+void -+forkoff (int nr) -+{ -+ pid_t child, save_parent = getpid (); -+ int i; -+ struct sigaction act, oldact; -+#ifdef THREAD -+ void *thread_result; -+#endif -+ -+ memset (&act, 0, sizeof act); -+ act.sa_flags = SA_RESTART; -+ act.sa_handler = handler_usr1; -+ sigemptyset (&act.sa_mask); -+ i = sigaction (SIGUSR1, &act, &oldact); -+ assert (i == 0); -+ -+ child = fork (); -+ switch (child) -+ { -+ case -1: -+ assert (0); -+ default: -+ printf ("parent%d: %d\n", nr, (int) child); -+ -+ /* Sleep for a while to possibly get incorrectly ATTACH_THREADed by GDB -+ tracing the child fork with no longer valid thread/lwp entries of the -+ parent. */ -+ -+ i = sleep (2); -+ assert (i == 0); -+ -+ /* We must not get caught here (against a forgotten breakpoint). */ -+ -+ var++; -+ marker (); -+ -+#ifdef THREAD -+ /* And neither got caught our thread. */ -+ -+ step = 99; -+ i = pthread_join (thread, &thread_result); -+ assert (i == 0); -+ assert (thread_result == (void *) 99UL); -+#endif -+ -+ /* Be sure our child knows we did not get caught above. */ -+ -+ i = kill (child, SIGUSR1); -+ assert (i == 0); -+ -+ /* Sleep for a while to check GDB's `info threads' no longer tracks us in -+ the child fork. */ -+ -+ i = sleep (2); -+ assert (i == 0); -+ -+ _exit (0); -+ case 0: -+ printf ("child%d: %d\n", nr, (int) getpid ()); -+ -+ /* Let the parent signal us about its success. Be careful of races. */ -+ -+ for (;;) -+ { -+ /* Parent either died (and USR1_GOT is zero) or it succeeded. */ -+ if (getppid () != save_parent) -+ break; -+ if (kill (getppid (), 0) != 0) -+ break; -+ /* Parent succeeded? */ -+ if (usr1_got) -+ break; -+ -+#ifdef THREAD -+ i = pthread_yield (); -+ assert (i == 0); -+#endif -+ } -+ assert (usr1_got); -+ -+ /* We must get caught here (against a false watchpoint removal). */ -+ -+ marker (); -+ } -+ -+ i = sigaction (SIGUSR1, &oldact, NULL); -+ assert (i == 0); -+} -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.threads/watchpoint-fork-mt.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.threads/watchpoint-fork-mt.c 2011-07-03 10:33:11.000000000 +0200 -@@ -0,0 +1,174 @@ -+/* Test case for forgotten hw-watchpoints after fork()-off of a process. -+ -+ Copyright 2008, 2009, 2010 Free Software Foundation, Inc. -+ -+ This file is part of GDB. -+ -+ 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 2 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, write to the Free Software -+ Foundation, Inc., 59 Temple Place - Suite 330, -+ Boston, MA 02111-1307, USA. */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include -+#include -+#define gettid() syscall (__NR_gettid) -+ -+#include "watchpoint-fork.h" -+ -+/* Non-atomic `var++' should not hurt as we synchronize the threads by the STEP -+ variable. Hit-comments need to be duplicite there to catch both at-stops -+ and behind-stops, depending on the target. */ -+ -+volatile int var; -+ -+void -+marker (void) -+{ -+} -+ -+static void -+empty (void) -+{ -+} -+ -+static void -+mark_exit (void) -+{ -+} -+ -+pthread_t thread; -+volatile int step; -+ -+static void * -+start (void *arg) -+{ -+ int i; -+ -+ if (step >= 3) -+ goto step_3; -+ -+ while (step != 1) -+ { -+ i = pthread_yield (); -+ assert (i == 0); -+ } -+ -+ var++; /* validity-thread-B */ -+ empty (); /* validity-thread-B */ -+ step = 2; -+ while (step != 3) -+ { -+ if (step == 99) -+ goto step_99; -+ -+ i = pthread_yield (); -+ assert (i == 0); -+ } -+ -+step_3: -+ if (step >= 5) -+ goto step_5; -+ -+ var++; /* after-fork1-B */ -+ empty (); /* after-fork1-B */ -+ step = 4; -+ while (step != 5) -+ { -+ if (step == 99) -+ goto step_99; -+ -+ i = pthread_yield (); -+ assert (i == 0); -+ } -+ -+step_5: -+ var++; /* after-fork2-B */ -+ empty (); /* after-fork2-B */ -+ return (void *) 5UL; -+ -+step_99: -+ /* We must not get caught here (against a forgotten breakpoint). */ -+ var++; -+ marker (); -+ return (void *) 99UL; -+} -+ -+int -+main (void) -+{ -+ int i; -+ void *thread_result; -+ -+ setbuf (stdout, NULL); -+ printf ("main: %d\n", (int) gettid ()); -+ -+ /* General hardware breakpoints and watchpoints validity. */ -+ marker (); -+ var++; /* validity-first */ -+ empty (); /* validity-first */ -+ -+ i = pthread_create (&thread, NULL, start, NULL); -+ assert (i == 0); -+ -+ var++; /* validity-thread-A */ -+ empty (); /* validity-thread-A */ -+ step = 1; -+ while (step != 2) -+ { -+ i = pthread_yield (); -+ assert (i == 0); -+ } -+ -+ /* Hardware watchpoints got disarmed here. */ -+ forkoff (1); -+ -+ var++; /* after-fork1-A */ -+ empty (); /* after-fork1-A */ -+ step = 3; -+#ifdef FOLLOW_CHILD -+ /* Spawn new thread as it was deleted in the child of FORK. */ -+ i = pthread_create (&thread, NULL, start, NULL); -+ assert (i == 0); -+#endif -+ while (step != 4) -+ { -+ i = pthread_yield (); -+ assert (i == 0); -+ } -+ -+ /* A sanity check for double hardware watchpoints removal. */ -+ forkoff (2); -+ -+ var++; /* after-fork2-A */ -+ empty (); /* after-fork2-A */ -+ step = 5; -+#ifdef FOLLOW_CHILD -+ /* Spawn new thread as it was deleted in the child of FORK. */ -+ i = pthread_create (&thread, NULL, start, NULL); -+ assert (i == 0); -+#endif -+ -+ i = pthread_join (thread, &thread_result); -+ assert (i == 0); -+ assert (thread_result == (void *) 5UL); -+ -+ mark_exit (); -+ return 0; -+} -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.threads/watchpoint-fork-parent.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.threads/watchpoint-fork-parent.c 2011-07-03 10:33:11.000000000 +0200 -@@ -0,0 +1,74 @@ -+/* Test case for forgotten hw-watchpoints after fork()-off of a process. -+ -+ Copyright 2008, 2009, 2010 Free Software Foundation, Inc. -+ -+ This file is part of GDB. -+ -+ 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 2 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, write to the Free Software -+ Foundation, Inc., 59 Temple Place - Suite 330, -+ Boston, MA 02111-1307, USA. */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include "watchpoint-fork.h" -+ -+void -+forkoff (int nr) -+{ -+ pid_t child, pid_got; -+ int exit_code = 42 + nr; -+ int status, i; -+ -+ child = fork (); -+ switch (child) -+ { -+ case -1: -+ assert (0); -+ case 0: -+ printf ("child%d: %d\n", nr, (int) getpid ()); -+ /* Delay to get both the "child%d" and "parent%d" message printed without -+ a race breaking expect by its endless wait on `$gdb_prompt$': -+ Breakpoint 3, marker () at ../../../gdb/testsuite/gdb.threads/watchpoint-fork.c:33 -+ 33 } -+ (gdb) parent2: 14223 */ -+ i = sleep (1); -+ assert (i == 0); -+ -+ /* We must not get caught here (against a forgotten breakpoint). */ -+ var++; -+ marker (); -+ -+ _exit (exit_code); -+ default: -+ printf ("parent%d: %d\n", nr, (int) child); -+ /* Delay to get both the "child%d" and "parent%d" message printed, see -+ above. */ -+ i = sleep (1); -+ assert (i == 0); -+ -+ pid_got = wait (&status); -+ assert (pid_got == child); -+ assert (WIFEXITED (status)); -+ assert (WEXITSTATUS (status) == exit_code); -+ -+ /* We must get caught here (against a false watchpoint removal). */ -+ marker (); -+ } -+} -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.threads/watchpoint-fork-st.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.threads/watchpoint-fork-st.c 2011-07-03 10:33:11.000000000 +0200 -@@ -0,0 +1,61 @@ -+/* Test case for forgotten hw-watchpoints after fork()-off of a process. -+ -+ Copyright 2008, 2009, 2010 Free Software Foundation, Inc. -+ -+ This file is part of GDB. -+ -+ 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 2 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, write to the Free Software -+ Foundation, Inc., 59 Temple Place - Suite 330, -+ Boston, MA 02111-1307, USA. */ -+ -+#include -+#include -+#include -+#include -+#include -+ -+#include "watchpoint-fork.h" -+ -+volatile int var; -+ -+void -+marker (void) -+{ -+} -+ -+static void -+mark_exit (void) -+{ -+} -+ -+int -+main (void) -+{ -+ setbuf (stdout, NULL); -+ printf ("main: %d\n", (int) getpid ()); -+ -+ /* General hardware breakpoints and watchpoints validity. */ -+ marker (); -+ var++; -+ /* Hardware watchpoints got disarmed here. */ -+ forkoff (1); -+ /* This watchpoint got lost before. */ -+ var++; -+ /* A sanity check for double hardware watchpoints removal. */ -+ forkoff (2); -+ var++; -+ -+ mark_exit (); -+ return 0; -+} -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.threads/watchpoint-fork.exp -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.threads/watchpoint-fork.exp 2011-07-03 10:33:11.000000000 +0200 -@@ -0,0 +1,149 @@ -+# Copyright 2008, 2009, 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 . -+ -+# Test case for forgotten hw-watchpoints after fork()-off of a process. -+ -+proc test {type symbol} { -+ global objdir subdir srcdir gdb_prompt -+ -+ set testfile watchpoint-fork -+ -+ global pf_prefix -+ set prefix_test $pf_prefix -+ lappend pf_prefix "$type:" -+ set prefix_mt $pf_prefix -+ -+ set srcfile_type ${srcdir}/${subdir}/${testfile}-${type}.c -+ -+ -+ # no threads -+ -+ set pf_prefix $prefix_mt -+ lappend pf_prefix "singlethreaded:" -+ -+ set executable ${testfile}-${type}-st -+ set srcfile_main ${srcdir}/${subdir}/${testfile}-st.c -+ if { [gdb_compile "${srcfile_main} ${srcfile_type}" ${objdir}/${subdir}/${executable} executable [list debug additional_flags=-D$symbol]] != "" } { -+ untested ${testfile}.exp -+ return -+ } -+ clean_restart $executable -+ -+ gdb_test "show detach-on-fork" "Whether gdb will detach the child of a fork is on\\." -+ gdb_test_no_output "set follow-fork-mode $type" -+ gdb_test "show follow-fork-mode" "Debugger response to a program call of fork or vfork is \"$type\"\\." -+ # Testcase uses it for the `follow-fork-mode child' type. -+ gdb_test "handle SIGUSR1 nostop noprint pass" "No\[ \t\]+No\[ \t\]+Yes.*" -+ -+ if ![runto_main] { -+ return -+ } -+ -+ gdb_test "watch var" "atchpoint \[0-9\]+: var" "Set the watchpoint" -+ -+ # It is never hit but it should not be left over in the fork()ed-off child. -+ set hbreak "hbreak" -+ set test "hbreak marker" -+ gdb_test_multiple $test $test { -+ -re "Hardware assisted breakpoint \[0-9\]+ at .*\r\n$gdb_prompt $" { -+ pass $test -+ } -+ -re "(No hardware breakpoint support in the target\\.|Hardware breakpoints used exceeds limit\\.)\r\n$gdb_prompt $" { -+ pass $test -+ set hbreak "break" -+ gdb_test "break marker" -+ } -+ } -+ -+ gdb_breakpoint "mark_exit" -+ -+ gdb_test "continue" \ -+ "reakpoint \[0-9\]+, marker.*" "hardware breakpoints work" -+ gdb_test "continue" \ -+ "atchpoint \[0-9\]+: var.*Old value = 0.*New value = 1.*forkoff *\\(1\\).*" "watchpoints work" -+ gdb_test "continue" \ -+ "reakpoint \[0-9\]+, marker.*" "breakpoint after the first fork" -+ gdb_test "continue" \ -+ "atchpoint \[0-9\]+: var.*Old value = 1.*New value = 2.*forkoff *\\(2\\).*" "watchpoint after the first fork" -+ gdb_test "continue" \ -+ "reakpoint \[0-9\]+, marker.*" "breakpoint after the second fork" -+ gdb_test "continue" \ -+ "atchpoint \[0-9\]+: var.*Old value = 2.*New value = 3.*mark_exit \\(\\);" "watchpoint after the second fork" -+ gdb_test "continue" "Continuing\\..*\r\nBreakpoint \[0-9\]+, mark_exit .*" "finish" -+ -+ -+ # threads -+ -+ set pf_prefix $prefix_mt -+ lappend pf_prefix "multithreaded:" -+ -+ set executable ${testfile}-${type}-mt -+ set srcfile_main ${srcdir}/${subdir}/${testfile}-mt.c -+ if { [gdb_compile_pthreads "${srcfile_main} ${srcfile_type}" ${objdir}/${subdir}/${executable} executable [list debug "additional_flags=-D$symbol -DTHREAD"]] != "" } { -+ untested ${testfile}.exp -+ return -+ } -+ clean_restart $executable -+ -+ gdb_test_no_output "set follow-fork-mode $type" -+ # Testcase uses it for the `follow-fork-mode child' type. -+ gdb_test "handle SIGUSR1 nostop noprint pass" "No\[ \t\]+No\[ \t\]+Yes.*" -+ -+ if ![runto_main] { -+ return -+ } -+ -+ gdb_test "watch var" "atchpoint \[0-9\]+: var" "Set the watchpoint" -+ -+ # It should not be left over in the fork()ed-off child. -+ gdb_test "$hbreak marker" {reakpoint [0-9]+.*} -+ -+ gdb_breakpoint "mark_exit" -+ -+ gdb_test "continue" \ -+ "reakpoint \[0-9\]+, marker.*" "hardware breakpoints work" -+ gdb_test "continue" \ -+ "atchpoint \[0-9\]+: var.*Old value = 0.*New value = 1.*validity-first.*" "singlethread watchpoints work" -+ gdb_test "continue" \ -+ "atchpoint \[0-9\]+: var.*Old value = 1.*New value = 2.*validity-thread-A.*" "multithreaded watchpoints work at A" -+ gdb_test "continue" \ -+ "atchpoint \[0-9\]+: var.*Old value = 2.*New value = 3.*validity-thread-B.*" "multithreaded watchpoints work at B" -+ gdb_test "continue" \ -+ "reakpoint \[0-9\]+, marker.*" "breakpoint (A) after the first fork" -+ gdb_test "continue" \ -+ "atchpoint \[0-9\]+: var.*Old value = 3.*New value = 4.*after-fork1-A.*" "watchpoint A after the first fork" -+ gdb_test "continue" \ -+ "atchpoint \[0-9\]+: var.*Old value = 4.*New value = 5.*after-fork1-B.*" "watchpoint B after the first fork" -+ gdb_test "continue" \ -+ "reakpoint \[0-9\]+, marker.*" "breakpoint (A) after the second fork" -+ gdb_test "continue" \ -+ "atchpoint \[0-9\]+: var.*Old value = 5.*New value = 6.*after-fork2-A.*" "watchpoint A after the second fork" -+ gdb_test "continue" \ -+ "atchpoint \[0-9\]+: var.*Old value = 6.*New value = 7.*after-fork2-B.*" "watchpoint B after the second fork" -+ gdb_test "continue" "Continuing\\..*\r\nBreakpoint \[0-9\]+, mark_exit .*" "finish" -+ -+ -+ # cleanup -+ set pf_prefix $prefix_test -+} -+ -+test parent FOLLOW_PARENT -+ -+# Only GNU/Linux is known to support `set follow-fork-mode child'. -+if {[istarget "*-*-linux*"] && ![is_remote target]} { -+ test child FOLLOW_CHILD -+} else { -+ untested "child" -+} -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.threads/watchpoint-fork.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.threads/watchpoint-fork.h 2011-07-03 10:33:11.000000000 +0200 -@@ -0,0 +1,32 @@ -+/* Test case for forgotten hw-watchpoints after fork()-off of a process. -+ -+ Copyright 2008, 2009, 2010 Free Software Foundation, Inc. -+ -+ This file is part of GDB. -+ -+ 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 2 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, write to the Free Software -+ Foundation, Inc., 59 Temple Place - Suite 330, -+ Boston, MA 02111-1307, USA. */ -+ -+#ifdef THREAD -+#include -+ -+extern volatile int step; -+extern pthread_t thread; -+#endif /* THREAD */ -+ -+extern volatile int var; -+ -+extern void marker (void); -+extern void forkoff (int nr); -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.trace/stap-trace.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.trace/stap-trace.c 2011-07-03 10:33:11.000000000 +0200 -@@ -0,0 +1,71 @@ -+/* This testcase is part of GDB, the GNU debugger. -+ -+ Copyright 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 . */ -+ -+#if USE_PROBES -+ -+#define _SDT_HAS_SEMAPHORES -+__extension__ unsigned short teste_user_semaphore __attribute__ ((unused)) __attribute__ ((section (".probes"))); -+#define TEST teste_user_semaphore -+ -+__extension__ unsigned short teste_two_semaphore __attribute__ ((unused)) __attribute__ ((section (".probes"))); -+#define TEST2 teste_two_semaphore -+ -+#else -+ -+#define TEST 1 -+#define TEST2 1 -+ -+#endif /* USE_PROBES */ -+ -+#include -+ -+/* We only support SystemTap and only the v3 form. */ -+#if _SDT_NOTE_TYPE != 3 -+#error "not using SystemTap v3 probes" -+#endif -+ -+void -+m1 (int x) -+{ -+ if (TEST2) -+ STAP_PROBE1 (teste, two, x); -+} -+ -+int -+f (int x) -+{ -+ if (TEST) -+ STAP_PROBE1(teste, user, x); -+ return x+5; -+} -+ -+void -+nothing (void) -+{ -+ int a = 1 + 1; -+ return; -+} -+ -+int -+main() -+{ -+ f (f (23)); -+ m1 (46); -+ nothing (); /* end-here */ -+ -+ return 0; -+} -Index: gdb-7.2.90.20110703/gdb/testsuite/gdb.trace/stap-trace.exp -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/gdb/testsuite/gdb.trace/stap-trace.exp 2011-07-03 10:33:11.000000000 +0200 -@@ -0,0 +1,129 @@ -+# Copyright 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 . -+ -+load_lib "trace-support.exp" -+ -+if $tracelevel then { -+ strace $tracelevel -+} -+ -+set testfile "stap-trace" -+set srcfile ${testfile}.c -+set executable $testfile -+set binfile $objdir/$subdir/$executable -+ -+set ws "\[\r\n\t \]+" -+set cr "\[\r\n\]+" -+ -+# Only x86 and x86_64 targets are supported for now. -+ -+if { ![istarget "x86_64-*"] && ![istarget "i?86-*"] } { -+ continue -+} -+ -+proc compile_stap_bin {{ arg "" }} { -+ global srcfile -+ global binfile -+ global srcdir -+ global subdir -+ -+ if { $arg != "" } { -+ set arg "additional_flags=$arg" -+ } -+ -+ if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \ -+ executable [concat $arg debug nowarnings]] != "" } { -+ untested "Could not compile ${srcfile}" -+ return -1 -+ } -+} -+ -+proc prepare_for_trace_test {} { -+ global executable -+ -+ clean_restart $executable -+ -+ if { ![runto_main] } { -+ perror "Could not run to `main'." -+ continue -+ } -+ -+ gdb_breakpoint [gdb_get_line_number "end-here"] -+} -+ -+proc run_trace_experiment { test_probe msg } { -+ global gdb_prompt -+ -+ set test "collect $msg: start trace experiment" -+ gdb_test_multiple "tstart" "$test" { -+ -re "^tstart\r\n$gdb_prompt $" { -+ pass "$test" -+ } -+ } -+ -+ gdb_test "continue" \ -+ "Continuing.*Breakpoint \[0-9\]+.*" \ -+ "collect $msg: run trace experiment" -+ gdb_test "tstop" \ -+ "\[\r\n\]+" \ -+ "collect $msg: stop trace experiment" -+ gdb_test "tfind start" \ -+ "#0 .*" \ -+ "collect $msg: tfind test frame" -+} -+ -+proc gdb_collect_probe_arg { msg probe val_arg0 } { -+ global gdb_prompt -+ global cr -+ -+ prepare_for_trace_test -+ -+ gdb_test "trace $probe" \ -+ "Tracepoint \[0-9\]+ at .*" \ -+ "collect $msg: set tracepoint" -+ gdb_trace_setactions "collect $msg: define actions" \ -+ "" \ -+ "collect \$_probe_arg0" "^$" -+ -+ # Begin the test. -+ run_trace_experiment $msg $probe -+ -+ gdb_test "print \$_probe_arg0" \ -+ "\\$\[0-9\]+ = $val_arg0$cr" \ -+ "collect $msg: collected probe arg0" -+} -+ -+compile_stap_bin "" -+ -+clean_restart $executable -+if { ![runto_main] } { -+ perror "Could not run to `main'." -+ continue -+} -+ -+if { ![gdb_target_supports_trace] } { -+ # Test cannot run on this target. -+ return 1; -+} -+ -+gdb_collect_probe_arg "probe args without semaphore" "probe:user" "23" -+gdb_exit -+ -+compile_stap_bin "-DUSE_PROBES" -+gdb_collect_probe_arg "probe args with semaphore" "probe:two" "46" -+ -+# Finished! -+gdb_test "tfind none" ".*" "" -Index: gdb-7.2.90.20110703/gdb/testsuite/lib/gdb.exp -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/testsuite/lib/gdb.exp 2011-03-25 14:08:11.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/testsuite/lib/gdb.exp 2011-07-03 10:33:11.000000000 +0200 -@@ -141,6 +141,11 @@ proc gdb_unload {} { + # Test either C or C++ values. + test_subscript_regression "${binfile}" "c" +diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp +index 1dfe564..186f9d7 100644 +--- a/gdb/testsuite/lib/gdb.exp ++++ b/gdb/testsuite/lib/gdb.exp +@@ -142,6 +142,11 @@ proc gdb_unload {} { send_gdb "y\n" exp_continue } @@ -14279,10 +8663,10 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/lib/gdb.exp -re "Discard symbol table from .*y or n.*$" { send_gdb "y\n" exp_continue -Index: gdb-7.2.90.20110703/gdb/testsuite/lib/pascal.exp -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/testsuite/lib/pascal.exp 2011-01-01 16:33:52.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/testsuite/lib/pascal.exp 2011-07-03 10:33:11.000000000 +0200 +diff --git a/gdb/testsuite/lib/pascal.exp b/gdb/testsuite/lib/pascal.exp +index dd18d37..f973485 100644 +--- a/gdb/testsuite/lib/pascal.exp ++++ b/gdb/testsuite/lib/pascal.exp @@ -37,6 +37,9 @@ proc pascal_init {} { global pascal_compiler_is_fpc global gpc_compiler @@ -14314,149 +8698,25 @@ Index: gdb-7.2.90.20110703/gdb/testsuite/lib/pascal.exp } set pascal_init_done 1 } -Index: gdb-7.2.90.20110703/gdb/thread.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/thread.c 2011-04-19 17:24:49.000000000 +0200 -+++ gdb-7.2.90.20110703/gdb/thread.c 2011-07-03 10:33:11.000000000 +0200 -@@ -1438,7 +1438,8 @@ update_thread_list (void) - no thread is selected, or no threads exist. */ +diff --git a/gdb/top.c b/gdb/top.c +index 061ad48..d615cfc 100644 +--- a/gdb/top.c ++++ b/gdb/top.c +@@ -352,6 +352,9 @@ prepare_execute_command (void) - static struct value * --thread_id_make_value (struct gdbarch *gdbarch, struct internalvar *var) -+thread_id_make_value (struct gdbarch *gdbarch, struct internalvar *var, -+ void *ignore) - { - struct thread_info *tp = find_thread_ptid (inferior_ptid); - -@@ -1449,6 +1450,15 @@ thread_id_make_value (struct gdbarch *gd - /* Commands with a prefix of `thread'. */ - struct cmd_list_element *thread_cmd_list = NULL; - -+/* Implementation of `thread' variable. */ -+ -+static struct internalvar_funcs thread_funcs = -+{ -+ thread_id_make_value, -+ NULL, -+ NULL -+}; -+ - void - _initialize_thread (void) - { -@@ -1494,5 +1504,5 @@ Show printing of thread events (such as - show_print_thread_events, - &setprintlist, &showprintlist); - -- create_internalvar_type_lazy ("_thread", thread_id_make_value); -+ create_internalvar_type_lazy ("_thread", &thread_funcs, NULL); - } -Index: gdb-7.2.90.20110703/gdb/top.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/top.c 2011-03-12 23:59:24.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/top.c 2011-07-03 10:33:11.000000000 +0200 -@@ -343,6 +343,9 @@ void - prepare_execute_command (void) - { - free_all_values (); + mark = value_mark (); + cleanup = make_cleanup_value_free_to_mark (mark); +#if 0 + free_all_types (); +#endif /* With multiple threads running while the one we're examining is stopped, the dcache can get stale without us being able to detect -Index: gdb-7.2.90.20110703/gdb/tracepoint.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/tracepoint.c 2011-07-02 21:33:10.000000000 +0200 -+++ gdb-7.2.90.20110703/gdb/tracepoint.c 2011-07-03 10:33:11.000000000 +0200 -@@ -1603,6 +1603,8 @@ start_tracing (void) - - for (ix = 0; VEC_iterate (breakpoint_p, tp_vec, ix, t); ix++) - { -+ struct bp_location *loc; -+ - if ((t->type == bp_fast_tracepoint - ? !may_insert_fast_tracepoints - : !may_insert_tracepoints)) -@@ -1611,6 +1613,9 @@ start_tracing (void) - t->number_on_target = 0; - target_download_tracepoint (t); - t->number_on_target = t->number; -+ -+ for (loc = t->loc; loc; loc = loc->next) -+ modify_semaphore (loc, 1); - } - VEC_free (breakpoint_p, tp_vec); - -@@ -1672,7 +1677,28 @@ trace_stop_command (char *args, int from - void - stop_tracing (void) - { -+ VEC(breakpoint_p) *tp_vec = NULL; -+ int ix; -+ struct breakpoint *t; -+ - target_trace_stop (); -+ -+ tp_vec = all_tracepoints (); -+ for (ix = 0; VEC_iterate (breakpoint_p, tp_vec, ix, t); ix++) -+ { -+ struct bp_location *loc; -+ -+ if ((t->type == bp_fast_tracepoint -+ ? !may_insert_fast_tracepoints -+ : !may_insert_tracepoints)) -+ continue; -+ -+ for (loc = t->loc; loc; loc = loc->next) -+ modify_semaphore (loc, 0); -+ } -+ -+ VEC_free (breakpoint_p, tp_vec); -+ - /* Should change in response to reply? */ - current_trace_status ()->running = 0; - } -@@ -4515,7 +4541,8 @@ info_static_tracepoint_markers_command ( - available. */ - - static struct value * --sdata_make_value (struct gdbarch *gdbarch, struct internalvar *var) -+sdata_make_value (struct gdbarch *gdbarch, struct internalvar *var, -+ void *ignore) - { - LONGEST size; - gdb_byte *buf; -@@ -4694,6 +4721,15 @@ traceframe_available_memory (VEC(mem_ran - return 0; - } - -+/* Implementation of `sdata' variable. */ -+ -+static const struct internalvar_funcs sdata_funcs = -+{ -+ sdata_make_value, -+ NULL, -+ NULL -+}; -+ - /* module initialization */ - void - _initialize_tracepoint (void) -@@ -4704,7 +4740,7 @@ _initialize_tracepoint (void) - value with a void typed value, and when we get here, gdbarch - isn't initialized yet. At this point, we're quite sure there - isn't another convenience variable of the same name. */ -- create_internalvar_type_lazy ("_sdata", sdata_make_value); -+ create_internalvar_type_lazy ("_sdata", &sdata_funcs, NULL); - - traceframe_number = -1; - tracepoint_number = -1; -Index: gdb-7.2.90.20110703/gdb/typeprint.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/typeprint.c 2011-01-11 22:53:25.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/typeprint.c 2011-07-03 10:33:11.000000000 +0200 -@@ -36,6 +36,7 @@ +diff --git a/gdb/typeprint.c b/gdb/typeprint.c +index c25e705..498958a 100644 +--- a/gdb/typeprint.c ++++ b/gdb/typeprint.c +@@ -35,6 +35,7 @@ #include "gdb_string.h" #include "exceptions.h" #include "valprint.h" @@ -14464,17 +8724,17 @@ Index: gdb-7.2.90.20110703/gdb/typeprint.c #include extern void _initialize_typeprint (void); -@@ -77,6 +78,9 @@ void - type_print (struct type *type, char *varstring, struct ui_file *stream, +@@ -76,6 +77,9 @@ void + type_print (struct type *type, const char *varstring, struct ui_file *stream, int show) { -+ if (show >= 0) ++ if (show >= 0 && current_language->la_language != language_ada) + type = check_typedef (type); + LA_PRINT_TYPE (type, varstring, stream, show, 0); } -@@ -115,7 +119,8 @@ whatis_exp (char *exp, int show) +@@ -114,7 +118,8 @@ whatis_exp (char *exp, int show) { struct expression *expr; struct value *val; @@ -14484,7 +8744,7 @@ Index: gdb-7.2.90.20110703/gdb/typeprint.c struct type *real_type = NULL; struct type *type; int full = 0; -@@ -126,12 +131,13 @@ whatis_exp (char *exp, int show) +@@ -125,12 +130,13 @@ whatis_exp (char *exp, int show) if (exp) { expr = parse_expression (exp); @@ -14499,7 +8759,7 @@ Index: gdb-7.2.90.20110703/gdb/typeprint.c type = value_type (val); get_user_print_options (&opts); -@@ -168,8 +174,7 @@ whatis_exp (char *exp, int show) +@@ -158,8 +164,7 @@ whatis_exp (char *exp, int show) type_print (type, "", gdb_stdout, show); printf_filtered ("\n"); @@ -14509,11 +8769,11 @@ Index: gdb-7.2.90.20110703/gdb/typeprint.c } static void -Index: gdb-7.2.90.20110703/gdb/utils.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/utils.c 2011-05-17 23:26:28.000000000 +0200 -+++ gdb-7.2.90.20110703/gdb/utils.c 2011-07-03 10:33:11.000000000 +0200 -@@ -2243,6 +2243,36 @@ set_batch_flag_and_make_cleanup_restore_ +diff --git a/gdb/utils.c b/gdb/utils.c +index 2d607ef..d67e7dd 100644 +--- a/gdb/utils.c ++++ b/gdb/utils.c +@@ -1737,6 +1737,36 @@ set_batch_flag_and_make_cleanup_restore_page_info (void) return back_to; } @@ -14550,11 +8810,11 @@ Index: gdb-7.2.90.20110703/gdb/utils.c /* Set the screen size based on LINES_PER_PAGE and CHARS_PER_LINE. */ static void -Index: gdb-7.2.90.20110703/gdb/valarith.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/valarith.c 2011-02-18 20:10:46.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/valarith.c 2011-07-03 10:33:11.000000000 +0200 -@@ -198,7 +198,10 @@ value_subscripted_rvalue (struct value * +diff --git a/gdb/valarith.c b/gdb/valarith.c +index 0225339..f775bfc 100644 +--- a/gdb/valarith.c ++++ b/gdb/valarith.c +@@ -197,7 +197,10 @@ value_subscripted_rvalue (struct value *array, LONGEST index, int lowerbound) struct type *array_type = check_typedef (value_type (array)); struct type *elt_type = check_typedef (TYPE_TARGET_TYPE (array_type)); unsigned int elt_size = TYPE_LENGTH (elt_type); @@ -14566,7 +8826,7 @@ Index: gdb-7.2.90.20110703/gdb/valarith.c struct value *v; if (index < lowerbound || (!TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (array_type) -@@ -298,6 +301,10 @@ int +@@ -297,6 +300,10 @@ int binop_user_defined_p (enum exp_opcode op, struct value *arg1, struct value *arg2) { @@ -14577,11 +8837,11 @@ Index: gdb-7.2.90.20110703/gdb/valarith.c return binop_types_user_defined_p (op, value_type (arg1), value_type (arg2)); } -Index: gdb-7.2.90.20110703/gdb/valops.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/valops.c 2011-03-29 19:04:30.000000000 +0200 -+++ gdb-7.2.90.20110703/gdb/valops.c 2011-07-03 10:33:11.000000000 +0200 -@@ -47,6 +47,7 @@ +diff --git a/gdb/valops.c b/gdb/valops.c +index feb47f5..6d14eee 100644 +--- a/gdb/valops.c ++++ b/gdb/valops.c +@@ -45,6 +45,7 @@ #include "objfiles.h" #include "symtab.h" #include "exceptions.h" @@ -14589,7 +8849,7 @@ Index: gdb-7.2.90.20110703/gdb/valops.c extern int overload_debug; /* Local functions. */ -@@ -915,6 +916,65 @@ value_one (struct type *type, enum lval_ +@@ -919,6 +920,65 @@ value_one (struct type *type) return val; } @@ -14655,7 +8915,17 @@ Index: gdb-7.2.90.20110703/gdb/valops.c /* Helper function for value_at, value_at_lazy, and value_at_lazy_stack. */ static struct value * -@@ -1011,12 +1071,20 @@ value_fetch_lazy (struct value *val) +@@ -981,7 +1041,8 @@ int + value_fetch_lazy (struct value *val) + { + gdb_assert (value_lazy (val)); +- allocate_value_contents (val); ++ if (VALUE_LVAL (val) != lval_memory) ++ allocate_value_contents (val); + if (value_bitsize (val)) + { + /* To read a lazy bitfield, read the entire enclosing value. This +@@ -1015,12 +1076,24 @@ value_fetch_lazy (struct value *val) } else if (VALUE_LVAL (val) == lval_memory) { @@ -14673,15 +8943,19 @@ Index: gdb-7.2.90.20110703/gdb/valops.c + + if (length) + { ++ /* Delay it after object_address_get_data above. */ ++ allocate_value_contents (val); + addr += value_offset (val); + read_value_memory (val, 0, value_stack (val), + addr, value_contents_all_raw (val), length); + } + } ++ /* Just to be sure it has been called. */ ++ allocate_value_contents (val); } else if (VALUE_LVAL (val) == lval_register) { -@@ -1528,7 +1596,18 @@ address_of_variable (struct symbol *var, +@@ -1532,7 +1605,18 @@ address_of_variable (struct symbol *var, struct block *b) if ((VALUE_LVAL (val) == lval_memory && value_lazy (val)) || TYPE_CODE (type) == TYPE_CODE_FUNC) { @@ -14701,7 +8975,7 @@ Index: gdb-7.2.90.20110703/gdb/valops.c return value_from_pointer (lookup_pointer_type (type), addr); } -@@ -1635,6 +1714,7 @@ struct value * +@@ -1639,6 +1723,7 @@ struct value * value_coerce_array (struct value *arg1) { struct type *type = check_typedef (value_type (arg1)); @@ -14709,7 +8983,7 @@ Index: gdb-7.2.90.20110703/gdb/valops.c /* If the user tries to do something requiring a pointer with an array that has not yet been pushed to the target, then this would -@@ -1644,8 +1724,12 @@ value_coerce_array (struct value *arg1) +@@ -1648,8 +1733,12 @@ value_coerce_array (struct value *arg1) if (VALUE_LVAL (arg1) != lval_memory) error (_("Attempt to take address of value not located in memory.")); @@ -14723,7 +8997,7 @@ Index: gdb-7.2.90.20110703/gdb/valops.c } /* Given a value which is a function, return a value which is a pointer -@@ -3695,6 +3779,8 @@ value_slice (struct value *array, int lo +@@ -3772,6 +3861,8 @@ value_slice (struct value *array, int lowbound, int length) TYPE_TARGET_TYPE (range_type), lowbound, lowbound + length - 1); @@ -14732,19 +9006,19 @@ Index: gdb-7.2.90.20110703/gdb/valops.c if (TYPE_CODE (array_type) == TYPE_CODE_BITSTRING) { int i; -Index: gdb-7.2.90.20110703/gdb/valprint.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/valprint.c 2011-04-29 21:23:05.000000000 +0200 -+++ gdb-7.2.90.20110703/gdb/valprint.c 2011-07-03 10:33:11.000000000 +0200 -@@ -36,6 +36,7 @@ - #include "dfp.h" - #include "python/python.h" - #include "ada-lang.h" +diff --git a/gdb/valprint.c b/gdb/valprint.c +index fc5942d..8333eb4 100644 +--- a/gdb/valprint.c ++++ b/gdb/valprint.c +@@ -37,6 +37,7 @@ + #include "gdb_obstack.h" + #include "charset.h" + #include +#include "dwarf2loc.h" #include -@@ -239,7 +240,6 @@ scalar_type_p (struct type *type) +@@ -251,7 +252,6 @@ scalar_type_p (struct type *type) case TYPE_CODE_STRUCT: case TYPE_CODE_UNION: case TYPE_CODE_SET: @@ -14752,7 +9026,7 @@ Index: gdb-7.2.90.20110703/gdb/valprint.c case TYPE_CODE_BITSTRING: return 0; default: -@@ -1193,6 +1193,7 @@ val_print_array_elements (struct type *t +@@ -1570,6 +1570,7 @@ val_print_array_elements (struct type *type, { unsigned int things_printed = 0; unsigned len; @@ -14760,7 +9034,7 @@ Index: gdb-7.2.90.20110703/gdb/valprint.c struct type *elttype, *index_type; unsigned eltlen; /* Position of the array element we are examining to see -@@ -1201,9 +1202,33 @@ val_print_array_elements (struct type *t +@@ -1578,9 +1579,33 @@ val_print_array_elements (struct type *type, /* Number of repetitions we have detected so far. */ unsigned int reps; LONGEST low_bound, high_bound; @@ -14796,7 +9070,7 @@ Index: gdb-7.2.90.20110703/gdb/valprint.c index_type = TYPE_INDEX_TYPE (type); if (get_array_bounds (type, &low_bound, &high_bound)) -@@ -1290,6 +1315,8 @@ val_print_array_elements (struct type *t +@@ -1667,6 +1692,8 @@ val_print_array_elements (struct type *type, { fprintf_filtered (stream, "..."); } @@ -14805,19 +9079,19 @@ Index: gdb-7.2.90.20110703/gdb/valprint.c } /* Read LEN bytes of target memory at address MEMADDR, placing the -Index: gdb-7.2.90.20110703/gdb/value.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/value.c 2011-02-27 21:57:15.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/value.c 2011-07-03 10:33:11.000000000 +0200 -@@ -43,6 +43,7 @@ - #include "python/python.h" +diff --git a/gdb/value.c b/gdb/value.c +index c64e55b..cd08a0b 100644 +--- a/gdb/value.c ++++ b/gdb/value.c +@@ -42,6 +42,7 @@ #include #include "tracepoint.h" + #include "cp-abi.h" +#include "observer.h" /* Prototypes for exported functions. */ -@@ -1339,12 +1340,15 @@ void +@@ -1437,12 +1438,15 @@ void set_value_component_location (struct value *component, const struct value *whole) { @@ -14832,8 +9106,8 @@ Index: gdb-7.2.90.20110703/gdb/value.c + if (whole->lval == lval_computed) { - struct lval_funcs *funcs = whole->location.computed.funcs; -@@ -1352,6 +1356,12 @@ set_value_component_location (struct val + const struct lval_funcs *funcs = whole->location.computed.funcs; +@@ -1450,6 +1454,12 @@ set_value_component_location (struct value *component, if (funcs->copy_closure) component->location.computed.closure = funcs->copy_closure (whole); } @@ -14846,7 +9120,7 @@ Index: gdb-7.2.90.20110703/gdb/value.c } -@@ -1485,6 +1495,31 @@ show_values (char *num_exp, int from_tty +@@ -1583,6 +1593,31 @@ show_values (char *num_exp, int from_tty) num_exp[1] = '\0'; } } @@ -14878,88 +9152,7 @@ Index: gdb-7.2.90.20110703/gdb/value.c /* Internal variables. These are variables within the debugger that hold values assigned by debugger commands. -@@ -1530,7 +1565,14 @@ struct internalvar - struct value *value; - - /* The call-back routine used with INTERNALVAR_MAKE_VALUE. */ -- internalvar_make_value make_value; -+ struct -+ { -+ /* The functions to call. */ -+ const struct internalvar_funcs *functions; -+ -+ /* The function's user-data. */ -+ void *data; -+ } make_value; - - /* The internal function used with INTERNALVAR_FUNCTION. */ - struct -@@ -1629,18 +1671,39 @@ create_internalvar (const char *name) - /* Create an internal variable with name NAME and register FUN as the - function that value_of_internalvar uses to create a value whenever - this variable is referenced. NAME should not normally include a -- dollar sign. */ -+ dollar sign. DATA is passed uninterpreted to FUN when it is -+ called. CLEANUP, if not NULL, is called when the internal variable -+ is destroyed. It is passed DATA as its only argument. */ - - struct internalvar * --create_internalvar_type_lazy (char *name, internalvar_make_value fun) -+create_internalvar_type_lazy (const char *name, -+ const struct internalvar_funcs *funcs, -+ void *data) - { - struct internalvar *var = create_internalvar (name); - - var->kind = INTERNALVAR_MAKE_VALUE; -- var->u.make_value = fun; -+ var->u.make_value.functions = funcs; -+ var->u.make_value.data = data; - return var; - } - -+/* See documentation in value.h. */ -+ -+int -+compile_internalvar_to_ax (struct internalvar *var, -+ struct agent_expr *expr, -+ struct axs_value *value) -+{ -+ if (var->kind != INTERNALVAR_MAKE_VALUE -+ || var->u.make_value.functions->compile_to_ax == NULL) -+ return 0; -+ -+ var->u.make_value.functions->compile_to_ax (var, expr, value, -+ var->u.make_value.data); -+ return 1; -+} -+ - /* Look up an internal variable with name NAME. NAME should not - normally include a dollar sign. - -@@ -1713,7 +1776,8 @@ value_of_internalvar (struct gdbarch *gd - break; - - case INTERNALVAR_MAKE_VALUE: -- val = (*var->u.make_value) (gdbarch, var); -+ val = (*var->u.make_value.functions->make_value) (gdbarch, var, -+ var->u.make_value.data); - break; - - default: -@@ -1909,6 +1973,11 @@ clear_internalvar (struct internalvar *v - xfree (var->u.string); - break; - -+ case INTERNALVAR_MAKE_VALUE: -+ if (var->u.make_value.functions->destroy != NULL) -+ var->u.make_value.functions->destroy (var->u.make_value.data); -+ break; -+ - default: - break; - } -@@ -1963,6 +2032,38 @@ call_internal_function (struct gdbarch * +@@ -2095,6 +2130,38 @@ call_internal_function (struct gdbarch *gdbarch, return (*ifn->handler) (gdbarch, language, ifn->cookie, argc, argv); } @@ -14998,7 +9191,7 @@ Index: gdb-7.2.90.20110703/gdb/value.c /* The 'function' command. This does nothing -- it is just a placeholder to let "help function NAME" work. This is also used as the implementation of the sub-command that is created when -@@ -2010,11 +2111,10 @@ preserve_one_value (struct value *value, +@@ -2142,11 +2209,10 @@ preserve_one_value (struct value *value, struct objfile *objfile, htab_t copied_types) { if (TYPE_OBJFILE (value->type) == objfile) @@ -15012,7 +9205,7 @@ Index: gdb-7.2.90.20110703/gdb/value.c copied_types); } -@@ -2029,7 +2129,7 @@ preserve_one_internalvar (struct interna +@@ -2161,7 +2227,7 @@ preserve_one_internalvar (struct internalvar *var, struct objfile *objfile, case INTERNALVAR_INTEGER: if (var->u.integer.type && TYPE_OBJFILE (var->u.integer.type) == objfile) var->u.integer.type @@ -15021,39 +9214,15 @@ Index: gdb-7.2.90.20110703/gdb/value.c break; case INTERNALVAR_VALUE: -@@ -2080,14 +2180,22 @@ show_convenience (char *ignore, int from - get_user_print_options (&opts); - for (var = internalvars; var; var = var->next) - { -+ volatile struct gdb_exception e; -+ - if (!varseen) - { - varseen = 1; - } - printf_filtered (("$%s = "), var->name); -- value_print (value_of_internalvar (gdbarch, var), gdb_stdout, -- &opts); -- printf_filtered (("\n")); -+ -+ TRY_CATCH (e, RETURN_MASK_ERROR) -+ { -+ value_print (value_of_internalvar (gdbarch, var), gdb_stdout, -+ &opts); -+ printf_filtered (("\n")); -+ } -+ if (e.reason < 0) -+ printf_filtered (_("\n"), e.message); - } - if (!varseen) - printf_unfiltered (_("No debugger convenience variables now defined.\n" -@@ -3047,7 +3155,24 @@ value_from_history_ref (char *h, char ** +@@ -3253,10 +3319,27 @@ readjust_indirect_value_type (struct value *value, struct type *enc_type, struct value * coerce_ref (struct value *arg) { - struct type *value_type_arg_tmp = check_typedef (value_type (arg)); + struct type *value_type_arg_tmp; -+ + struct value *retval; + struct type *enc_type; + + if (TYPE_DYNAMIC (value_type (arg))) + { + struct cleanup *cleanups = make_cleanup (null_cleanup, NULL); @@ -15070,10 +9239,11 @@ Index: gdb-7.2.90.20110703/gdb/value.c + } + else + value_type_arg_tmp = check_typedef (value_type (arg)); - - if (TYPE_CODE (value_type_arg_tmp) == TYPE_CODE_REF) - arg = value_at_lazy (TYPE_TARGET_TYPE (value_type_arg_tmp), -@@ -3145,4 +3270,10 @@ VARIABLE is already initialized.")); ++ + retval = coerce_ref_if_computed (arg); + if (retval) + return retval; +@@ -3363,4 +3446,10 @@ VARIABLE is already initialized.")); add_prefix_cmd ("function", no_class, function_command, _("\ Placeholder command for showing help on convenience functions."), &functionlist, "function ", 0, &cmdlist); @@ -15084,11 +9254,11 @@ Index: gdb-7.2.90.20110703/gdb/value.c + observer_attach_mark_used (value_types_mark_used); +#endif } -Index: gdb-7.2.90.20110703/gdb/value.h -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/value.h 2011-03-04 21:07:22.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/value.h 2011-07-03 10:33:11.000000000 +0200 -@@ -473,6 +473,10 @@ extern struct value *value_from_decfloat +diff --git a/gdb/value.h b/gdb/value.h +index b630fc7..2f95db2 100644 +--- a/gdb/value.h ++++ b/gdb/value.h +@@ -533,6 +533,10 @@ extern struct value *value_from_decfloat (struct type *type, const gdb_byte *decbytes); extern struct value *value_from_history_ref (char *, char **); @@ -15099,107 +9269,3 @@ Index: gdb-7.2.90.20110703/gdb/value.h extern struct value *value_at (struct type *type, CORE_ADDR addr); extern struct value *value_at_lazy (struct type *type, CORE_ADDR addr); -@@ -697,10 +701,52 @@ extern struct internalvar *lookup_only_i - - extern struct internalvar *create_internalvar (const char *name); - --typedef struct value * (*internalvar_make_value) (struct gdbarch *, -- struct internalvar *); -+/* An internalvar can be dynamically computed by supplying a vector of -+ function pointers to perform various operations. */ -+ -+struct internalvar_funcs -+{ -+ /* Compute the value of the variable. The DATA argument passed to -+ the function is the same argument that was passed to -+ `create_internalvar_type_lazy'. */ -+ -+ struct value *(*make_value) (struct gdbarch *arch, -+ struct internalvar *var, -+ void *data); -+ -+ /* Update the agent expression EXPR with bytecode to compute the -+ value. VALUE is the agent value we are updating. The DATA -+ argument passed to this function is the same argument that was -+ passed to `create_internalvar_type_lazy'. If this pointer is -+ NULL, then the internalvar cannot be compiled to an agent -+ expression. */ -+ -+ void (*compile_to_ax) (struct internalvar *var, -+ struct agent_expr *expr, -+ struct axs_value *value, -+ void *data); -+ -+ /* If non-NULL, this is called to destroy DATA. The DATA argument -+ passed to this function is the same argument that was passed to -+ `create_internalvar_type_lazy'. */ -+ -+ void (*destroy) (void *data); -+}; -+ - extern struct internalvar * -- create_internalvar_type_lazy (char *name, internalvar_make_value fun); -+create_internalvar_type_lazy (const char *name, -+ const struct internalvar_funcs *funcs, -+ void *data); -+ -+/* Compile an internal variable to an agent expression. VAR is the -+ variable to compile; EXPR and VALUE are the agent expression we are -+ updating. This will return 0 if there is no known way to compile -+ VAR, and 1 if VAR was successfully compiled. It may also throw an -+ exception on error. */ -+ -+extern int compile_internalvar_to_ax (struct internalvar *var, -+ struct agent_expr *expr, -+ struct axs_value *value); - - extern struct internalvar *lookup_internalvar (const char *name); - -Index: gdb-7.2.90.20110703/gdb/windows-tdep.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/windows-tdep.c 2011-01-12 02:23:29.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/windows-tdep.c 2011-07-03 10:33:11.000000000 +0200 -@@ -268,7 +268,7 @@ static struct lval_funcs tlb_value_funcs - if there's no object available. */ - - static struct value * --tlb_make_value (struct gdbarch *gdbarch, struct internalvar *var) -+tlb_make_value (struct gdbarch *gdbarch, struct internalvar *var, void *ignore) - { - if (target_has_stack && !ptid_equal (inferior_ptid, null_ptid)) - { -@@ -425,6 +425,15 @@ init_w32_command_list (void) - } - } - -+/* Implementation of `tlb' variable. */ -+ -+static const struct internalvar_funcs tlb_funcs = -+{ -+ tlb_make_value, -+ NULL, -+ NULL -+}; -+ - void - _initialize_windows_tdep (void) - { -@@ -451,5 +460,5 @@ even if their meaning is unknown."), - value with a void typed value, and when we get here, gdbarch - isn't initialized yet. At this point, we're quite sure there - isn't another convenience variable of the same name. */ -- create_internalvar_type_lazy ("_tlb", tlb_make_value); -+ create_internalvar_type_lazy ("_tlb", &tlb_funcs, NULL); - } -Index: gdb-7.2.90.20110703/gdb/xcoffread.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/xcoffread.c 2011-03-07 17:17:29.000000000 +0100 -+++ gdb-7.2.90.20110703/gdb/xcoffread.c 2011-07-03 10:33:11.000000000 +0200 -@@ -3090,6 +3090,7 @@ static const struct sym_fns xcoff_sym_fn - default_symfile_segments, /* Get segment information from a file. */ - aix_process_linenos, - default_symfile_relocate, /* Relocate a debug section. */ -+ NULL, /* sym_probe_fns */ - &psym_functions - }; - diff --git a/gdb-attach-fail-reasons-5of5.patch b/gdb-attach-fail-reasons-5of5.patch new file mode 100644 index 0000000..48de42f --- /dev/null +++ b/gdb-attach-fail-reasons-5of5.patch @@ -0,0 +1,238 @@ +http://sourceware.org/ml/gdb-patches/2012-03/msg00171.html +Subject: [patch 3/3] attach-fail-reasons: SELinux deny_ptrace + +Hi, + +and here is the last bit for new SELinux 'deny_ptrace': + https://bugzilla.redhat.com/show_bug.cgi?id=786878 + +As even PTRACE_TRACEME fails in such case it needs to install hook for even +that event. + + +Thanks, +Jan + + +gdb/ +2012-03-06 Jan Kratochvil + + * common/linux-ptrace.c [HAVE_SELINUX_SELINUX_H]: include + selinux/selinux.h. + (linux_ptrace_attach_warnings): Call linux_ptrace_create_warnings. + (linux_ptrace_create_warnings): New. + * common/linux-ptrace.h (linux_ptrace_create_warnings): New declaration. + * config.in: Regenerate. + * configure: Regenerate. + * configure.ac: Check selinux/selinux.h and the selinux library. + * inf-ptrace.c (inf_ptrace_me): Check the ptrace result. + * linux-nat.c (linux_nat_create_inferior): New variable ex. Wrap + to_create_inferior into TRY_CATCH, call linux_ptrace_create_warnings. + +gdb/gdbserver/ + * config.in: Regenerate. + * configure: Regenerate. + * configure.ac: Check selinux/selinux.h and the selinux library. + * linux-low.c (linux_traceme): New function. + (linux_create_inferior, linux_tracefork_child): Call it instead of + direct ptrace. + +Index: gdb-7.4.50.20120602/gdb/common/linux-ptrace.c +=================================================================== +--- gdb-7.4.50.20120602.orig/gdb/common/linux-ptrace.c 2012-03-13 16:02:23.000000000 +0100 ++++ gdb-7.4.50.20120602/gdb/common/linux-ptrace.c 2012-06-02 20:37:53.933828570 +0200 +@@ -27,6 +27,10 @@ + #include "linux-procfs.h" + #include "buffer.h" + ++#ifdef HAVE_SELINUX_SELINUX_H ++# include ++#endif /* HAVE_SELINUX_SELINUX_H */ ++ + /* Find all possible reasons we could fail to attach PID and append these + newline terminated reason strings to initialized BUFFER. '\0' termination + of BUFFER must be done by the caller. */ +@@ -46,4 +50,22 @@ linux_ptrace_attach_warnings (pid_t pid, + buffer_xml_printf (buffer, _("warning: process %d is a zombie " + "- the process has already terminated\n"), + (int) pid); ++ ++ linux_ptrace_create_warnings (buffer); ++} ++ ++/* Print all possible reasons we could fail to create a traced process. */ ++ ++void ++linux_ptrace_create_warnings (struct buffer *buffer) ++{ ++#ifdef HAVE_LIBSELINUX ++ /* -1 is returned for errors, 0 if it has no effect, 1 if PTRACE_ATTACH is ++ forbidden. */ ++ if (security_get_boolean_active ("deny_ptrace") == 1) ++ buffer_xml_printf (buffer, ++ _("the SELinux boolean 'deny_ptrace' is enabled, " ++ "you can disable this process attach protection by: " ++ "(gdb) shell sudo setsebool deny_ptrace=0")); ++#endif /* HAVE_LIBSELINUX */ + } +Index: gdb-7.4.50.20120602/gdb/common/linux-ptrace.h +=================================================================== +--- gdb-7.4.50.20120602.orig/gdb/common/linux-ptrace.h 2012-03-13 16:02:23.000000000 +0100 ++++ gdb-7.4.50.20120602/gdb/common/linux-ptrace.h 2012-06-02 20:37:46.565831956 +0200 +@@ -68,5 +68,6 @@ struct buffer; + #endif + + extern void linux_ptrace_attach_warnings (pid_t pid, struct buffer *buffer); ++extern void linux_ptrace_create_warnings (struct buffer *buffer); + + #endif /* COMMON_LINUX_PTRACE_H */ +Index: gdb-7.4.50.20120602/gdb/configure.ac +=================================================================== +--- gdb-7.4.50.20120602.orig/gdb/configure.ac 2012-06-02 20:05:08.000000000 +0200 ++++ gdb-7.4.50.20120602/gdb/configure.ac 2012-06-02 20:35:06.379798726 +0200 +@@ -2002,6 +2002,10 @@ then + [Define if you support the personality syscall.]) + fi + ++dnl Check security_get_boolean_active availability. ++AC_CHECK_HEADERS(selinux/selinux.h) ++AC_CHECK_LIB(selinux, security_get_boolean_active) ++ + dnl Handle optional features that can be enabled. + + # Support for --with-sysroot is a copy of GDB_AC_WITH_DIR, +Index: gdb-7.4.50.20120602/gdb/gdbserver/configure.ac +=================================================================== +--- gdb-7.4.50.20120602.orig/gdb/gdbserver/configure.ac 2012-04-19 21:34:51.000000000 +0200 ++++ gdb-7.4.50.20120602/gdb/gdbserver/configure.ac 2012-06-02 20:35:06.408797663 +0200 +@@ -438,6 +438,10 @@ if $want_ipa ; then + fi + fi + ++dnl Check security_get_boolean_active availability. ++AC_CHECK_HEADERS(selinux/selinux.h) ++AC_CHECK_LIB(selinux, security_get_boolean_active) ++ + AC_SUBST(GDBSERVER_DEPFILES) + AC_SUBST(GDBSERVER_LIBS) + AC_SUBST(USE_THREAD_DB) +Index: gdb-7.4.50.20120602/gdb/gdbserver/linux-low.c +=================================================================== +--- gdb-7.4.50.20120602.orig/gdb/gdbserver/linux-low.c 2012-05-30 21:51:38.000000000 +0200 ++++ gdb-7.4.50.20120602/gdb/gdbserver/linux-low.c 2012-06-02 20:39:49.886785355 +0200 +@@ -601,6 +601,28 @@ add_lwp (ptid_t ptid) + return lwp; + } + ++/* Execute PTRACE_TRACEME with error checking. */ ++ ++static void ++linux_traceme (const char *program) ++{ ++ int save_errno; ++ struct buffer buffer; ++ ++ errno = 0; ++ if (ptrace (PTRACE_TRACEME, 0, NULL, NULL) == 0) ++ return; ++ ++ save_errno = errno; ++ buffer_init (&buffer); ++ linux_ptrace_create_warnings (&buffer); ++ buffer_grow_str0 (&buffer, ""); ++ fprintf (stderr, _("%sCannot trace created process %s: %s.\n"), ++ buffer_finish (&buffer), program, strerror (save_errno)); ++ fflush (stderr); ++ _exit (0177); ++} ++ + /* Start an inferior process and returns its pid. + ALLARGS is a vector of program-name and args. */ + +@@ -641,7 +663,7 @@ linux_create_inferior (char *program, ch + + if (pid == 0) + { +- ptrace (PTRACE_TRACEME, 0, 0, 0); ++ linux_traceme (program); + + #ifndef __ANDROID__ /* Bionic doesn't use SIGRTMIN the way glibc does. */ + signal (__SIGRTMIN + 1, SIG_DFL); +@@ -4567,7 +4589,7 @@ linux_tracefork_grandchild (void *arg) + static int + linux_tracefork_child (void *arg) + { +- ptrace (PTRACE_TRACEME, 0, 0, 0); ++ linux_traceme ("PTRACE_O_TRACEFORK test"); + kill (getpid (), SIGSTOP); + + #if !(defined(__UCLIBC__) && defined(HAS_NOMMU)) +Index: gdb-7.4.50.20120602/gdb/inf-ptrace.c +=================================================================== +--- gdb-7.4.50.20120602.orig/gdb/inf-ptrace.c 2012-05-24 18:51:34.000000000 +0200 ++++ gdb-7.4.50.20120602/gdb/inf-ptrace.c 2012-06-02 20:35:06.428797311 +0200 +@@ -105,7 +105,15 @@ static void + inf_ptrace_me (void) + { + /* "Trace me, Dr. Memory!" */ ++ errno = 0; + ptrace (PT_TRACE_ME, 0, (PTRACE_TYPE_ARG3)0, 0); ++ if (errno != 0) ++ { ++ fprintf_unfiltered (gdb_stderr, _("Cannot create process: %s\n"), ++ safe_strerror (errno)); ++ gdb_flush (gdb_stderr); ++ _exit (0177); ++ } + } + + /* Start a new inferior Unix child process. EXEC_FILE is the file to +Index: gdb-7.4.50.20120602/gdb/linux-nat.c +=================================================================== +--- gdb-7.4.50.20120602.orig/gdb/linux-nat.c 2012-06-02 20:01:38.000000000 +0200 ++++ gdb-7.4.50.20120602/gdb/linux-nat.c 2012-06-02 20:41:18.101751186 +0200 +@@ -1572,6 +1572,7 @@ linux_nat_create_inferior (struct target + #ifdef HAVE_PERSONALITY + int personality_orig = 0, personality_set = 0; + #endif /* HAVE_PERSONALITY */ ++ volatile struct gdb_exception ex; + + /* The fork_child mechanism is synchronous and calls target_wait, so + we have to mask the async mode. */ +@@ -1596,7 +1597,10 @@ linux_nat_create_inferior (struct target + /* Make sure we report all signals during startup. */ + linux_nat_pass_signals (0, NULL); + +- linux_ops->to_create_inferior (ops, exec_file, allargs, env, from_tty); ++ TRY_CATCH (ex, RETURN_MASK_ERROR) ++ { ++ linux_ops->to_create_inferior (ops, exec_file, allargs, env, from_tty); ++ } + + #ifdef HAVE_PERSONALITY + if (personality_set) +@@ -1608,6 +1612,24 @@ linux_nat_create_inferior (struct target + safe_strerror (errno)); + } + #endif /* HAVE_PERSONALITY */ ++ ++ if (ex.reason < 0) ++ { ++ struct buffer buffer; ++ char *message, *buffer_s; ++ ++ message = xstrdup (ex.message); ++ make_cleanup (xfree, message); ++ ++ buffer_init (&buffer); ++ linux_ptrace_create_warnings (&buffer); ++ ++ buffer_grow_str0 (&buffer, ""); ++ buffer_s = buffer_finish (&buffer); ++ make_cleanup (xfree, buffer_s); ++ ++ throw_error (ex.error, "%s%s", buffer_s, message); ++ } + } + + static void diff --git a/gdb-attach-fail-reasons-5of5configure.patch b/gdb-attach-fail-reasons-5of5configure.patch new file mode 100644 index 0000000..fff6646 --- /dev/null +++ b/gdb-attach-fail-reasons-5of5configure.patch @@ -0,0 +1,186 @@ +Index: gdb-7.4.50.20120602/gdb/config.in +=================================================================== +--- gdb-7.4.50.20120602.orig/gdb/config.in 2012-06-02 21:49:26.147399232 +0200 ++++ gdb-7.4.50.20120602/gdb/config.in 2012-06-02 21:49:27.206398845 +0200 +@@ -222,6 +222,9 @@ + /* Define if librpm library is being used. */ + #undef HAVE_LIBRPM + ++/* Define to 1 if you have the `selinux' library (-lselinux). */ ++#undef HAVE_LIBSELINUX ++ + /* Define to 1 if you have the header file. */ + #undef HAVE_LIBUNWIND_IA64_H + +@@ -363,6 +366,9 @@ + /* Define to 1 if you have the `sbrk' function. */ + #undef HAVE_SBRK + ++/* Define to 1 if you have the header file. */ ++#undef HAVE_SELINUX_SELINUX_H ++ + /* Define to 1 if you have the `setlocale' function. */ + #undef HAVE_SETLOCALE + +Index: gdb-7.4.50.20120602/gdb/configure +=================================================================== +--- gdb-7.4.50.20120602.orig/gdb/configure 2012-06-02 21:49:27.139398869 +0200 ++++ gdb-7.4.50.20120602/gdb/configure 2012-06-02 21:49:50.890390179 +0200 +@@ -12745,6 +12745,64 @@ $as_echo "#define HAVE_PERSONALITY 1" >> + + fi + ++for ac_header in selinux/selinux.h ++do : ++ ac_fn_c_check_header_mongrel "$LINENO" "selinux/selinux.h" "ac_cv_header_selinux_selinux_h" "$ac_includes_default" ++if test "x$ac_cv_header_selinux_selinux_h" = x""yes; then : ++ cat >>confdefs.h <<_ACEOF ++#define HAVE_SELINUX_SELINUX_H 1 ++_ACEOF ++ ++fi ++ ++done ++ ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for security_get_boolean_active in -lselinux" >&5 ++$as_echo_n "checking for security_get_boolean_active in -lselinux... " >&6; } ++if test "${ac_cv_lib_selinux_security_get_boolean_active+set}" = set; then : ++ $as_echo_n "(cached) " >&6 ++else ++ ac_check_lib_save_LIBS=$LIBS ++LIBS="-lselinux $LIBS" ++cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ ++#ifdef __cplusplus ++extern "C" ++#endif ++char security_get_boolean_active (); ++int ++main () ++{ ++return security_get_boolean_active (); ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_link "$LINENO"; then : ++ ac_cv_lib_selinux_security_get_boolean_active=yes ++else ++ ac_cv_lib_selinux_security_get_boolean_active=no ++fi ++rm -f core conftest.err conftest.$ac_objext \ ++ conftest$ac_exeext conftest.$ac_ext ++LIBS=$ac_check_lib_save_LIBS ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_selinux_security_get_boolean_active" >&5 ++$as_echo "$ac_cv_lib_selinux_security_get_boolean_active" >&6; } ++if test "x$ac_cv_lib_selinux_security_get_boolean_active" = x""yes; then : ++ cat >>confdefs.h <<_ACEOF ++#define HAVE_LIBSELINUX 1 ++_ACEOF ++ ++ LIBS="-lselinux $LIBS" ++ ++fi ++ ++ + + # Support for --with-sysroot is a copy of GDB_AC_WITH_DIR, + # except that the argument to --with-sysroot is optional. +Index: gdb-7.4.50.20120602/gdb/gdbserver/config.in +=================================================================== +--- gdb-7.4.50.20120602.orig/gdb/gdbserver/config.in 2012-04-19 21:34:51.000000000 +0200 ++++ gdb-7.4.50.20120602/gdb/gdbserver/config.in 2012-06-02 21:49:55.945388329 +0200 +@@ -69,6 +69,9 @@ + /* Define to 1 if you have the `dl' library (-ldl). */ + #undef HAVE_LIBDL + ++/* Define to 1 if you have the `selinux' library (-lselinux). */ ++#undef HAVE_LIBSELINUX ++ + /* Define to 1 if you have the header file. */ + #undef HAVE_LINUX_ELF_H + +@@ -130,6 +133,9 @@ + /* Define to 1 if you have the `readlink' function. */ + #undef HAVE_READLINK + ++/* Define to 1 if you have the header file. */ ++#undef HAVE_SELINUX_SELINUX_H ++ + /* Define to 1 if you have the header file. */ + #undef HAVE_SGTTY_H + +Index: gdb-7.4.50.20120602/gdb/gdbserver/configure +=================================================================== +--- gdb-7.4.50.20120602.orig/gdb/gdbserver/configure 2012-04-20 19:58:49.000000000 +0200 ++++ gdb-7.4.50.20120602/gdb/gdbserver/configure 2012-06-02 21:49:54.485388864 +0200 +@@ -5532,6 +5532,64 @@ if $want_ipa ; then + fi + fi + ++for ac_header in selinux/selinux.h ++do : ++ ac_fn_c_check_header_mongrel "$LINENO" "selinux/selinux.h" "ac_cv_header_selinux_selinux_h" "$ac_includes_default" ++if test "x$ac_cv_header_selinux_selinux_h" = x""yes; then : ++ cat >>confdefs.h <<_ACEOF ++#define HAVE_SELINUX_SELINUX_H 1 ++_ACEOF ++ ++fi ++ ++done ++ ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for security_get_boolean_active in -lselinux" >&5 ++$as_echo_n "checking for security_get_boolean_active in -lselinux... " >&6; } ++if test "${ac_cv_lib_selinux_security_get_boolean_active+set}" = set; then : ++ $as_echo_n "(cached) " >&6 ++else ++ ac_check_lib_save_LIBS=$LIBS ++LIBS="-lselinux $LIBS" ++cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ ++#ifdef __cplusplus ++extern "C" ++#endif ++char security_get_boolean_active (); ++int ++main () ++{ ++return security_get_boolean_active (); ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_link "$LINENO"; then : ++ ac_cv_lib_selinux_security_get_boolean_active=yes ++else ++ ac_cv_lib_selinux_security_get_boolean_active=no ++fi ++rm -f core conftest.err conftest.$ac_objext \ ++ conftest$ac_exeext conftest.$ac_ext ++LIBS=$ac_check_lib_save_LIBS ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_selinux_security_get_boolean_active" >&5 ++$as_echo "$ac_cv_lib_selinux_security_get_boolean_active" >&6; } ++if test "x$ac_cv_lib_selinux_security_get_boolean_active" = x""yes; then : ++ cat >>confdefs.h <<_ACEOF ++#define HAVE_LIBSELINUX 1 ++_ACEOF ++ ++ LIBS="-lselinux $LIBS" ++ ++fi ++ ++ + + + diff --git a/gdb-bz533176-fortran-omp-step.patch b/gdb-bz533176-fortran-omp-step.patch index 6e28c78..808f715 100644 --- a/gdb-bz533176-fortran-omp-step.patch +++ b/gdb-bz533176-fortran-omp-step.patch @@ -68,7 +68,7 @@ Index: gdb-7.2.50.20101231/gdb/testsuite/gdb.fortran/omp-step.exp + +set testfile "omp-step" +set srcfile ${testfile}.f90 -+if { [prepare_for_testing $testfile.exp $testfile $srcfile {debug f77 additional_flags=-fopenmp}] } { ++if { [prepare_for_testing $testfile.exp $testfile $srcfile {debug f90 additional_flags=-fopenmp}] } { + return -1 +} + diff --git a/gdb-bz541866-rwatch-before-run.patch b/gdb-bz541866-rwatch-before-run.patch index 3e4e53c..25bf2ac 100644 --- a/gdb-bz541866-rwatch-before-run.patch +++ b/gdb-bz541866-rwatch-before-run.patch @@ -1,18 +1,20 @@ -Index: gdb-7.2.50.20110117/gdb/config/i386/linux64.mh +Index: gdb-7.4.50.20120602/gdb/config/i386/linux64.mh =================================================================== ---- gdb-7.2.50.20110117.orig/gdb/config/i386/linux64.mh 2010-05-28 20:50:31.000000000 +0200 -+++ gdb-7.2.50.20110117/gdb/config/i386/linux64.mh 2011-01-17 16:01:48.000000000 +0100 -@@ -2,7 +2,7 @@ - NATDEPFILES= inf-ptrace.o fork-child.o \ - i386-nat.o amd64-nat.o amd64-linux-nat.o linux-nat.o \ - proc-service.o linux-thread-db.o linux-fork.o +--- gdb-7.4.50.20120602.orig/gdb/config/i386/linux64.mh 2012-03-13 16:00:34.000000000 +0100 ++++ gdb-7.4.50.20120602/gdb/config/i386/linux64.mh 2012-06-02 19:56:03.196172503 +0200 +@@ -4,7 +4,7 @@ NATDEPFILES= inf-ptrace.o fork-child.o \ + linux-nat.o linux-osdata.o \ + proc-service.o linux-thread-db.o linux-fork.o \ + linux-procfs.o linux-ptrace.o -NAT_FILE= config/nm-linux.h +NAT_FILE= nm-linux64.h NAT_CDEPS = $(srcdir)/proc-service.list # The dynamically loaded libthread_db needs access to symbols in the ---- gdb-7.2/gdb/config/i386/linux.mh-orig 2010-06-11 14:08:51.000000000 +0200 -+++ gdb-7.2/gdb/config/i386/linux.mh 2011-03-18 12:00:32.000000000 +0100 +Index: gdb-7.4.50.20120602/gdb/config/i386/linux.mh +=================================================================== +--- gdb-7.4.50.20120602.orig/gdb/config/i386/linux.mh 2012-03-13 16:00:33.000000000 +0100 ++++ gdb-7.4.50.20120602/gdb/config/i386/linux.mh 2012-06-02 19:55:42.418178412 +0200 @@ -1,6 +1,6 @@ # Host: Intel 386 running GNU/Linux. @@ -21,8 +23,10 @@ Index: gdb-7.2.50.20110117/gdb/config/i386/linux64.mh NATDEPFILES= inf-ptrace.o fork-child.o \ i386-nat.o i386-linux-nat.o \ proc-service.o linux-thread-db.o \ +Index: gdb-7.4.50.20120602/gdb/config/i386/nm-linux.h +=================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.1.90.20100711/gdb/config/i386/nm-linux.h 2010-07-13 19:02:28.000000000 +0200 ++++ gdb-7.4.50.20120602/gdb/config/i386/nm-linux.h 2012-06-02 19:55:42.433178408 +0200 @@ -0,0 +1,28 @@ +/* Native support for GNU/Linux i386. + @@ -52,10 +56,10 @@ Index: gdb-7.2.50.20110117/gdb/config/i386/linux64.mh +#define target_can_use_hardware_watchpoint(type, cnt, ot) 1 + +#endif /* NM_LINUX64_H */ -Index: gdb-7.2.50.20110117/gdb/config/i386/nm-linux64.h +Index: gdb-7.4.50.20120602/gdb/config/i386/nm-linux64.h =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.50.20110117/gdb/config/i386/nm-linux64.h 2011-01-17 16:01:48.000000000 +0100 ++++ gdb-7.4.50.20120602/gdb/config/i386/nm-linux64.h 2012-06-02 19:55:42.434178407 +0200 @@ -0,0 +1,28 @@ +/* Native support for GNU/Linux amd64. + @@ -85,11 +89,11 @@ Index: gdb-7.2.50.20110117/gdb/config/i386/nm-linux64.h +#define target_can_use_hardware_watchpoint(type, cnt, ot) 1 + +#endif /* NM_LINUX64_H */ -Index: gdb-7.2.50.20110117/gdb/target.h +Index: gdb-7.4.50.20120602/gdb/target.h =================================================================== ---- gdb-7.2.50.20110117.orig/gdb/target.h 2011-01-14 14:47:15.000000000 +0100 -+++ gdb-7.2.50.20110117/gdb/target.h 2011-01-17 16:02:08.000000000 +0100 -@@ -1318,8 +1318,10 @@ extern char *normal_pid_to_str (ptid_t p +--- gdb-7.4.50.20120602.orig/gdb/target.h 2012-06-01 18:37:59.000000000 +0200 ++++ gdb-7.4.50.20120602/gdb/target.h 2012-06-02 19:55:42.436178407 +0200 +@@ -1470,8 +1470,10 @@ extern char *target_thread_name (struct bp_hardware_breakpoint. CNT is the number of such watchpoints used so far (including this one?). OTHERTYPE is who knows what... */ @@ -100,10 +104,10 @@ Index: gdb-7.2.50.20110117/gdb/target.h /* Returns the number of debug registers needed to watch the given memory region, or zero if not supported. */ -Index: gdb-7.2.50.20110117/gdb/testsuite/gdb.base/watchpoint-hw-before-run.exp +Index: gdb-7.4.50.20120602/gdb/testsuite/gdb.base/watchpoint-hw-before-run.exp =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.50.20110117/gdb/testsuite/gdb.base/watchpoint-hw-before-run.exp 2011-01-17 16:01:48.000000000 +0100 ++++ gdb-7.4.50.20120602/gdb/testsuite/gdb.base/watchpoint-hw-before-run.exp 2012-06-02 19:55:42.442178406 +0200 @@ -0,0 +1,40 @@ +# Copyright 2009, 2010 Free Software Foundation, Inc. + diff --git a/gdb-bz562763-pretty-print-2d-vectors-libstdcxx.patch b/gdb-bz562763-pretty-print-2d-vectors-libstdcxx.patch deleted file mode 100644 index 17077d8..0000000 --- a/gdb-bz562763-pretty-print-2d-vectors-libstdcxx.patch +++ /dev/null @@ -1,43 +0,0 @@ -2010-06-01 Chris Moller - - * python/libstdcxx/v6/printers.py (StdVectorPrinter): Add - detection for matrices as nested vectors. - -Index: libstdc++-v3/python/libstdcxx/v6/printers.py -=================================================================== ---- ./libstdc++-v3-python-r155978/libstdcxx/v6/printers.py (revision 159937) -+++ ./libstdc++-v3-python-r155978/libstdcxx/v6/printers.py (working copy) -@@ -19,6 +19,9 @@ - import itertools - import re - -+vector_sig = 'std::vector' -+vector_regex = re.compile('^' + vector_sig + '<.*>$') -+ - class StdPointerPrinter: - "Print a smart pointer of some kind" - -@@ -186,7 +189,13 @@ - % (self.typename, int (finish - start), int (end - start))) - - def display_hint(self): -- return 'array' -+ itype0 = self.val.type.template_argument(0) -+ itag = itype0.tag -+ if itag and re.match(vector_regex, itag): -+ rc = 'matrix' -+ else: -+ rc = 'array' -+ return rc - - class StdVectorIteratorPrinter: - "Print std::vector::iterator" -@@ -692,7 +701,7 @@ - pretty_printers_dict[re.compile('^std::set<.*>$')] = lambda val: StdSetPrinter("std::set", val) - pretty_printers_dict[re.compile('^std::stack<.*>$')] = lambda val: StdStackOrQueuePrinter("std::stack", val) - pretty_printers_dict[re.compile('^std::unique_ptr<.*>$')] = UniquePointerPrinter -- pretty_printers_dict[re.compile('^std::vector<.*>$')] = lambda val: StdVectorPrinter("std::vector", val) -+ pretty_printers_dict[vector_regex] = lambda val: StdVectorPrinter(vector_sig, val) - # vector - - # Printer registrations for classes compiled with -D_GLIBCXX_DEBUG. diff --git a/gdb-bz562763-pretty-print-2d-vectors.patch b/gdb-bz562763-pretty-print-2d-vectors.patch deleted file mode 100644 index 08e80b6..0000000 --- a/gdb-bz562763-pretty-print-2d-vectors.patch +++ /dev/null @@ -1,398 +0,0 @@ -2010-05-31 Chris Moller - - * python/py-prettyprint.c (print_children): Add formatting for - matrices. (apply_val_pretty_printer): Detect and deal with matrix - hints. - - -2010-05-31 Chris Moller - - * gdb.python/Makefile.in (EXECUTABLES): Added pr10659. - * gdb.python/pr10659.cc: New file. - * gdb.python/pr10659.exp. New file. - * gdb.python/pr10659.py: New file. - -Index: gdb-7.2.50.20110218/gdb/valprint.h -=================================================================== ---- gdb-7.2.50.20110218.orig/gdb/valprint.h 2011-02-14 12:35:45.000000000 +0100 -+++ gdb-7.2.50.20110218/gdb/valprint.h 2011-02-18 10:44:32.000000000 +0100 -@@ -90,6 +90,9 @@ struct value_print_options - - /* If nonzero, print the value in "summary" form. */ - int summary; -+ -+ /* Affects pretty printing of matrices. */ -+ int prettyprint_matrix; - }; - - /* The global print options set by the user. In general this should -Index: gdb-7.2.50.20110218/gdb/python/py-prettyprint.c -=================================================================== ---- gdb-7.2.50.20110218.orig/gdb/python/py-prettyprint.c 2011-02-14 12:10:53.000000000 +0100 -+++ gdb-7.2.50.20110218/gdb/python/py-prettyprint.c 2011-02-18 10:45:02.000000000 +0100 -@@ -501,7 +501,7 @@ print_children (PyObject *printer, const - - /* Use the prettyprint_arrays option if we are printing an array, - and the pretty option otherwise. */ -- if (is_array) -+ if (is_array || options->prettyprint_matrix) - pretty = options->prettyprint_arrays; - else - { -@@ -521,6 +521,9 @@ print_children (PyObject *printer, const - goto done; - } - make_cleanup_py_decref (frame); -+ -+ if (options->prettyprint_matrix && recurse == 0) -+ fputs_filtered ("\n", stream); - - done_flag = 0; - for (i = 0; i < options->print_max; ++i) -@@ -555,12 +558,23 @@ print_children (PyObject *printer, const - 3. Other. Always print a ",". */ - if (i == 0) - { -- if (is_py_none) -- fputs_filtered ("{", stream); -- else -- fputs_filtered (" = {", stream); -+ if (options->prettyprint_matrix && recurse == 0) -+ print_spaces_filtered (2 + 2 * recurse, stream); -+ if (is_py_none) -+ { -+ if (options->prettyprint_matrix && strcmp (hint, "array")) -+ { -+ fputs_filtered ("{\n", stream); -+ print_spaces_filtered (4 + 2 * recurse, stream); -+ } -+ else -+ fputs_filtered ("{", stream); -+ } -+ else -+ fputs_filtered (" = {", stream); - } -- -+ else if (options->prettyprint_matrix) -+ print_spaces_filtered (4 + 2 * recurse, stream); - else if (! is_map || i % 2 == 0) - fputs_filtered (pretty ? "," : ", ", stream); - -@@ -589,6 +603,10 @@ print_children (PyObject *printer, const - - if (is_map && i % 2 == 0) - fputs_filtered ("[", stream); -+ else if (options->prettyprint_matrix) -+ { -+ /* Force a do-nothing. */ -+ } - else if (is_array) - { - /* We print the index, not whatever the child method -@@ -667,7 +685,12 @@ print_children (PyObject *printer, const - fputs_filtered ("\n", stream); - print_spaces_filtered (2 * recurse, stream); - } -- fputs_filtered ("}", stream); -+ if (options->prettyprint_matrix) -+ { -+ print_spaces_filtered (4 * recurse, stream); -+ fputs_filtered ("}\n", stream); -+ } -+ else fputs_filtered ("}", stream); - } - - done: -@@ -689,6 +712,7 @@ apply_val_pretty_printer (struct type *t - char *hint = NULL; - struct cleanup *cleanups; - int result = 0; -+ struct value_print_options *options_copy; - enum string_repr_result print_result; - - /* No pretty-printer support for unavailable values. */ -@@ -726,9 +750,21 @@ apply_val_pretty_printer (struct type *t - - /* If we are printing a map, we want some special formatting. */ - hint = gdbpy_get_display_hint (printer); -+ -+ if (recurse == 0) -+ { -+ options_copy = alloca (sizeof (struct value_print_options)); -+ memcpy (options_copy, options, sizeof (struct value_print_options)); -+ options_copy->prettyprint_matrix = hint && !strcmp (hint, "matrix"); -+ } -+ else options_copy = (struct value_print_options *)options; -+ - make_cleanup (free_current_contents, &hint); - - /* Print the section */ -+ if (options_copy->prettyprint_matrix) -+ print_result = string_repr_none; -+else /* Red Hat 2D matrix patch */ - print_result = print_string_repr (printer, hint, stream, recurse, - options, language, gdbarch); - if (print_result != string_repr_error) -Index: gdb-7.2.50.20110218/gdb/testsuite/gdb.python/pr10659.cc -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.50.20110218/gdb/testsuite/gdb.python/pr10659.cc 2011-02-18 10:44:32.000000000 +0100 -@@ -0,0 +1,43 @@ -+#include -+#include // /usr/include/c++/4.4.1/bits/vector.tcc -+#include -+ -+using namespace std; -+ -+int use_windows = 9999; -+ -+int -+main(){ -+ vector test1(2,0); -+ test1[0]=8; -+ test1[1]=9; -+ -+ vector< vector > test2(3, vector(2,0)); -+ test2[0][0]=0; -+ test2[0][1]=1; -+ test2[1][0]=2; -+ test2[1][1]=3; -+ test2[2][0]=4; -+ test2[2][1]=5; -+ -+#define NR_ROWS 2 -+#define NR_COLS 3 -+#define NR_PLANES 4 -+ vector rows(NR_ROWS, 0); -+ vector< vector > columns(NR_COLS, rows); -+ vector< vector < vector > > test3(NR_PLANES, columns); -+ -+ cout << "rows.size() = " << rows.size() -+ << ", columns.size() = " << columns.size() -+ << ", test3.size() = " << test3.size() << "\n"; -+ -+ for (int i = 0; i < rows.size(); i++) { -+ for (int j = 0; j < columns.size(); j++) { -+ for (int k = 0; k < test3.size(); k++) { -+ test3[k][j][i] = k * 100 + j * 10 + i; -+ } -+ } -+ } -+ -+ return 0; // break -+} -Index: gdb-7.2.50.20110218/gdb/testsuite/gdb.python/pr10659.exp -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.50.20110218/gdb/testsuite/gdb.python/pr10659.exp 2011-02-18 10:44:32.000000000 +0100 -@@ -0,0 +1,82 @@ -+#Copyright 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 . -+ -+set nl "\[\r\n\]+" -+ -+set testfile pr10659 -+set srcfile ${testfile}.cc -+if [prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}] { -+ return -1 -+} -+ -+#if { [skip_python_tests] } { continue } -+ -+gdb_test "python execfile(\"$srcdir/$subdir/pr10659.py\")" "" -+gdb_test "python gdb.pretty_printers = \[lookup_function\]" "" -+ -+if ![runto_main] then { -+ fail "Can't run to main" -+ return -+} -+ -+gdb_breakpoint [gdb_get_line_number "break"] -+gdb_continue_to_breakpoint "break" -+ -+gdb_test "p test1" "vector of length 2, capacity 2 =.*" -+ -+gdb_test "p test2" "= $nl {$nl {.*" -+ -+# Complete result is: -+# -+# (gdb) p test2 -+# $2 = -+# { -+# {0 1 } -+# {2 3 } -+# {4 5 } -+# } -+ -+ -+gdb_test "p test3" "= $nl {$nl {$nl {.*" -+ -+# Complete result is: -+# -+# (gdb) p test3 -+# $3 = -+# { -+# { -+# {0 1 } -+# {10 11 } -+# {20 21 } -+# } -+# { -+# {100 101 } -+# {110 111 } -+# {120 121 } -+# } -+# { -+# {200 201 } -+# {210 211 } -+# {220 221 } -+# } -+# { -+# {300 301 } -+# {310 311 } -+# {320 321 } -+# } -+# } -+# -+ -+ -Index: gdb-7.2.50.20110218/gdb/testsuite/gdb.python/pr10659.py -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.50.20110218/gdb/testsuite/gdb.python/pr10659.py 2011-02-18 10:44:32.000000000 +0100 -@@ -0,0 +1,109 @@ -+# 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 . -+ -+import gdb -+import itertools -+import re -+ -+vector_sig = 'std::vector' -+vector_regex = re.compile('^' + vector_sig + '<.*>$') -+ -+class FakeVectorPrinter: -+ "Print a std::vector" -+ -+ class _iterator: -+ def __init__ (self, start, finish): -+ self.item = start -+ self.finish = finish -+ self.count = 0 -+ -+ def __iter__(self): -+ return self -+ -+ def next(self): -+ if self.item == self.finish: -+ raise StopIteration -+ count = self.count -+ self.count = self.count + 1 -+ elt = self.item.dereference() -+ self.item = self.item + 1 -+ return ('[%d]' % count, elt) -+ -+ def __init__(self, typename, val): -+ self.typename = typename -+ self.val = val -+ -+ def children(self): -+ return self._iterator(self.val['_M_impl']['_M_start'], -+ self.val['_M_impl']['_M_finish']) -+ -+ def to_string(self): -+ start = self.val['_M_impl']['_M_start'] -+ finish = self.val['_M_impl']['_M_finish'] -+ end = self.val['_M_impl']['_M_end_of_storage'] -+ return ('std::vector of length %d, capacity %d' -+ % (int (finish - start), int (end - start))) -+ -+ def display_hint(self): -+ itype0 = self.val.type.template_argument(0) -+ itag = itype0.tag -+ if itag and re.match(vector_regex, itag): -+ rc = 'matrix' -+ else: -+ rc = 'array' -+ return rc -+ -+def register_libstdcxx_printers (obj): -+ "Register libstdc++ pretty-printers with objfile Obj." -+ -+ if obj == None: -+ obj = gdb -+ -+ obj.pretty_printers.append (lookup_function) -+ -+def lookup_function (val): -+ "Look-up and return a pretty-printer that can print val." -+ -+ # Get the type. -+ type = val.type; -+ -+ # If it points to a reference, get the reference. -+ if type.code == gdb.TYPE_CODE_REF: -+ type = type.target () -+ -+ # Get the unqualified type, stripped of typedefs. -+ type = type.unqualified ().strip_typedefs () -+ -+ # Get the type name. -+ typename = type.tag -+ if typename == None: -+ return None -+ -+ # Iterate over local dictionary of types to determine -+ # if a printer is registered for that type. Return an -+ # instantiation of the printer if found. -+ for function in fake_pretty_printers_dict: -+ if function.search (typename): -+ return fake_pretty_printers_dict[function] (val) -+ -+ # Cannot find a pretty printer. Return None. -+ return None -+ -+def build_libfakecxx_dictionary (): -+ fake_pretty_printers_dict[vector_regex] = lambda val: FakeVectorPrinter(vector_sig, val) -+ -+fake_pretty_printers_dict = {} -+ -+build_libfakecxx_dictionary () -Index: gdb-7.2.50.20110218/gdb/valprint.c -=================================================================== ---- gdb-7.2.50.20110218.orig/gdb/valprint.c 2011-02-18 10:44:16.000000000 +0100 -+++ gdb-7.2.50.20110218/gdb/valprint.c 2011-02-18 10:44:32.000000000 +0100 -@@ -85,7 +85,8 @@ struct value_print_options user_print_op - 1, /* static_field_print */ - 1, /* pascal_static_field_print */ - 0, /* raw */ -- 0 /* summary */ -+ 0, /* summary */ -+ 0 /* prettyprint_matrix */ - }; - - /* Initialize *OPTS to be a copy of the user print options. */ diff --git a/gdb-bz568248-oom-is-error.patch b/gdb-bz568248-oom-is-error.patch index 05a267b..d90da50 100644 --- a/gdb-bz568248-oom-is-error.patch +++ b/gdb-bz568248-oom-is-error.patch @@ -46,24 +46,23 @@ gdb/ * utils.c (nomem): Change internal_error to error. ---- a/gdb/utils.c -+++ b/gdb/utils.c -@@ -1265,15 +1265,9 @@ void - nomem (long size) +Index: gdb-7.3.50.20110722/gdb/utils.c +=================================================================== +--- gdb-7.3.50.20110722.orig/gdb/utils.c 2011-07-22 19:28:58.000000000 +0200 ++++ gdb-7.3.50.20110722/gdb/utils.c 2011-07-22 19:34:25.000000000 +0200 +@@ -1219,13 +1219,11 @@ malloc_failure (long size) { if (size > 0) -- { + { - internal_error (__FILE__, __LINE__, - _("virtual memory exhausted: can't allocate %ld bytes."), - size); -- } -+ error (_("virtual memory exhausted: can't allocate %ld bytes."), size); ++ error (_("virtual memory exhausted: can't allocate %ld bytes."), size); + } else -- { + { - internal_error (__FILE__, __LINE__, _("virtual memory exhausted.")); -- } -+ error (_("virtual memory exhausted.")); ++ error (_("virtual memory exhausted.")); + } } - /* The xmalloc() (libiberty.h) family of memory management routines. - diff --git a/gdb-bz592031-siginfo-lost-4of5.patch b/gdb-bz592031-siginfo-lost-4of5.patch index 99e8a8e..583771a 100644 --- a/gdb-bz592031-siginfo-lost-4of5.patch +++ b/gdb-bz592031-siginfo-lost-4of5.patch @@ -78,11 +78,11 @@ gdb/testsuite/ * gdb.threads/sigstep-threads.exp: New file. * gdb.threads/sigstep-threads.c: New file. -Index: gdb-7.2.50.20110117/gdb/linux-nat.c +Index: gdb-7.4.50.20120602/gdb/linux-nat.c =================================================================== ---- gdb-7.2.50.20110117.orig/gdb/linux-nat.c 2011-01-17 15:53:14.000000000 +0100 -+++ gdb-7.2.50.20110117/gdb/linux-nat.c 2011-01-17 16:05:57.000000000 +0100 -@@ -2803,6 +2803,8 @@ stop_wait_callback (struct lwp_info *lp, +--- gdb-7.4.50.20120602.orig/gdb/linux-nat.c 2012-06-02 21:34:51.999517510 +0200 ++++ gdb-7.4.50.20120602/gdb/linux-nat.c 2012-06-02 21:35:59.930491577 +0200 +@@ -2856,6 +2856,8 @@ stop_wait_callback (struct lwp_info *lp, { int status; @@ -91,7 +91,7 @@ Index: gdb-7.2.50.20110117/gdb/linux-nat.c status = wait_lwp (lp); if (status == 0) return 0; -@@ -2828,110 +2830,61 @@ stop_wait_callback (struct lwp_info *lp, +@@ -2881,110 +2883,61 @@ stop_wait_callback (struct lwp_info *lp, if (WSTOPSIG (status) != SIGSTOP) { @@ -146,9 +146,7 @@ Index: gdb-7.2.50.20110117/gdb/linux-nat.c - status_to_str ((int) status)); - kill_lwp (GET_LWP (lp->ptid), WSTOPSIG (lp->status)); - } -+ /* Save the trap's siginfo in case we need it later. */ -+ save_siginfo (lp); - +- - /* Save the sigtrap event. */ - lp->status = status; - return 0; @@ -157,7 +155,8 @@ Index: gdb-7.2.50.20110117/gdb/linux-nat.c - { - /* The thread was stopped with a signal other than - SIGSTOP, and didn't accidentally trip a breakpoint. */ -+ save_sigtrap (lp); ++ /* Save the trap's siginfo in case we need it later. */ ++ save_siginfo (lp); - if (debug_linux_nat) - { @@ -174,7 +173,8 @@ Index: gdb-7.2.50.20110117/gdb/linux-nat.c - "SWC: PTRACE_CONT %s, 0, 0 (%s)\n", - target_pid_to_str (lp->ptid), - errno ? safe_strerror (errno) : "OK"); -- ++ save_sigtrap (lp); + - /* Hold this event/waitstatus while we check to see if - there are any more (we still want to get that SIGSTOP). */ - stop_wait_callback (lp, NULL); @@ -228,7 +228,7 @@ Index: gdb-7.2.50.20110117/gdb/linux-nat.c + + registers_changed (); + linux_ops->to_resume (linux_ops, pid_to_ptid (GET_LWP (lp->ptid)), -+ 1, TARGET_SIGNAL_0); ++ 1, GDB_SIGNAL_0); + if (debug_linux_nat) + fprintf_unfiltered (gdb_stdlog, + "SWC: %s %s, 0, 0 (discard SIGSTOP)\n", @@ -248,11 +248,11 @@ Index: gdb-7.2.50.20110117/gdb/linux-nat.c lp->signalled = 0; } } -@@ -3514,52 +3467,6 @@ retry: +@@ -3616,54 +3569,6 @@ retry: lp = NULL; } -- if (lp && lp->signalled) +- if (lp && lp->signalled && lp->last_resume_kind != resume_stop) - { - /* A pending SIGSTOP may interfere with the normal stream of - events. In a typical case where interference is a problem, @@ -266,8 +266,10 @@ Index: gdb-7.2.50.20110117/gdb/linux-nat.c - /* Resume the thread. It should halt immediately returning the - pending SIGSTOP. */ - registers_changed (); +- if (linux_nat_prepare_to_resume != NULL) +- linux_nat_prepare_to_resume (lp); - linux_ops->to_resume (linux_ops, pid_to_ptid (GET_LWP (lp->ptid)), -- lp->step, TARGET_SIGNAL_0); +- lp->step, GDB_SIGNAL_0); - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "LLW: %s %s, 0, 0 (expect SIGSTOP)\n", @@ -301,10 +303,10 @@ Index: gdb-7.2.50.20110117/gdb/linux-nat.c if (!target_can_async_p ()) { /* Causes SIGINT to be passed on to the attached process. */ -Index: gdb-7.2.50.20110117/gdb/testsuite/gdb.threads/siginfo-threads.c +Index: gdb-7.4.50.20120602/gdb/testsuite/gdb.threads/siginfo-threads.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.50.20110117/gdb/testsuite/gdb.threads/siginfo-threads.c 2011-01-17 16:02:40.000000000 +0100 ++++ gdb-7.4.50.20120602/gdb/testsuite/gdb.threads/siginfo-threads.c 2012-06-02 21:35:40.268499060 +0200 @@ -0,0 +1,447 @@ +/* This testcase is part of GDB, the GNU debugger. + @@ -753,10 +755,10 @@ Index: gdb-7.2.50.20110117/gdb/testsuite/gdb.threads/siginfo-threads.c + + return EXIT_SUCCESS; +} -Index: gdb-7.2.50.20110117/gdb/testsuite/gdb.threads/siginfo-threads.exp +Index: gdb-7.4.50.20120602/gdb/testsuite/gdb.threads/siginfo-threads.exp =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.50.20110117/gdb/testsuite/gdb.threads/siginfo-threads.exp 2011-01-17 16:02:40.000000000 +0100 ++++ gdb-7.4.50.20120602/gdb/testsuite/gdb.threads/siginfo-threads.exp 2012-06-02 21:35:40.296499050 +0200 @@ -0,0 +1,94 @@ +# Copyright 2010 Free Software Foundation, Inc. + @@ -852,10 +854,10 @@ Index: gdb-7.2.50.20110117/gdb/testsuite/gdb.threads/siginfo-threads.exp +} + +gdb_continue_to_breakpoint break-at-exit ".*break-at-exit.*" -Index: gdb-7.2.50.20110117/gdb/testsuite/gdb.threads/sigstep-threads.c +Index: gdb-7.4.50.20120602/gdb/testsuite/gdb.threads/sigstep-threads.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.50.20110117/gdb/testsuite/gdb.threads/sigstep-threads.c 2011-01-17 16:02:40.000000000 +0100 ++++ gdb-7.4.50.20120602/gdb/testsuite/gdb.threads/sigstep-threads.c 2012-06-02 21:35:40.297499050 +0200 @@ -0,0 +1,54 @@ +/* This testcase is part of GDB, the GNU debugger. + @@ -911,10 +913,10 @@ Index: gdb-7.2.50.20110117/gdb/testsuite/gdb.threads/sigstep-threads.c + start (NULL); /* main-start */ + return 0; +} -Index: gdb-7.2.50.20110117/gdb/testsuite/gdb.threads/sigstep-threads.exp +Index: gdb-7.4.50.20120602/gdb/testsuite/gdb.threads/sigstep-threads.exp =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.50.20110117/gdb/testsuite/gdb.threads/sigstep-threads.exp 2011-01-17 16:02:40.000000000 +0100 ++++ gdb-7.4.50.20120602/gdb/testsuite/gdb.threads/sigstep-threads.exp 2012-06-02 21:35:40.297499050 +0200 @@ -0,0 +1,74 @@ +# Copyright 2010 Free Software Foundation, Inc. + diff --git a/gdb-bz592031-siginfo-lost-5of5.patch b/gdb-bz592031-siginfo-lost-5of5.patch index 51861c5..cc6accc 100644 --- a/gdb-bz592031-siginfo-lost-5of5.patch +++ b/gdb-bz592031-siginfo-lost-5of5.patch @@ -26,27 +26,27 @@ gdb/ (linux_nat_set_siginfo_fixup): Use PTRACE_GETSIGINFO. * linux-nat.h (struct lwp_info) : Remove. -Index: gdb-7.2.50.20101116/gdb/linux-nat.c +Index: gdb-7.4.50.20120602/gdb/linux-nat.c =================================================================== ---- gdb-7.2.50.20101116.orig/gdb/linux-nat.c 2010-11-16 09:12:26.000000000 +0100 -+++ gdb-7.2.50.20101116/gdb/linux-nat.c 2010-11-16 09:13:21.000000000 +0100 -@@ -1850,7 +1850,6 @@ resume_callback (struct lwp_info *lp, vo - target_pid_to_str (lp->ptid)); - lp->stopped = 0; - lp->step = 0; -- memset (&lp->siginfo, 0, sizeof (lp->siginfo)); - lp->stopped_by_watchpoint = 0; - } - else if (lp->stopped && debug_linux_nat) -@@ -1993,7 +1992,6 @@ linux_nat_resume (struct target_ops *ops - ptid = pid_to_ptid (GET_LWP (lp->ptid)); - +--- gdb-7.4.50.20120602.orig/gdb/linux-nat.c 2012-06-02 21:36:21.067483466 +0200 ++++ gdb-7.4.50.20120602/gdb/linux-nat.c 2012-06-02 21:37:55.345447402 +0200 +@@ -1929,7 +1929,6 @@ resume_lwp (struct lwp_info *lp, int ste + step, GDB_SIGNAL_0); + lp->stopped = 0; + lp->step = step; +- memset (&lp->siginfo, 0, sizeof (lp->siginfo)); + lp->stopped_by_watchpoint = 0; + } + else +@@ -2071,7 +2070,6 @@ linux_nat_resume (struct target_ops *ops + if (linux_nat_prepare_to_resume != NULL) + linux_nat_prepare_to_resume (lp); linux_ops->to_resume (linux_ops, ptid, step, signo); - memset (&lp->siginfo, 0, sizeof (lp->siginfo)); lp->stopped_by_watchpoint = 0; if (debug_linux_nat) -@@ -2503,22 +2501,6 @@ wait_lwp (struct lwp_info *lp) +@@ -2625,22 +2623,6 @@ wait_lwp (struct lwp_info *lp) return status; } @@ -69,7 +69,7 @@ Index: gdb-7.2.50.20101116/gdb/linux-nat.c /* Send a SIGSTOP to LP. */ static int -@@ -2787,9 +2769,6 @@ stop_wait_callback (struct lwp_info *lp, +@@ -2885,9 +2867,6 @@ stop_wait_callback (struct lwp_info *lp, { /* The thread was stopped with a signal other than SIGSTOP. */ @@ -79,7 +79,7 @@ Index: gdb-7.2.50.20101116/gdb/linux-nat.c save_sigtrap (lp); if (debug_linux_nat) -@@ -3155,12 +3134,7 @@ linux_nat_filter_event (int lwpid, int s +@@ -3291,12 +3270,7 @@ linux_nat_filter_event (int lwpid, int s } if (linux_nat_status_is_event (status)) @@ -93,20 +93,20 @@ Index: gdb-7.2.50.20101116/gdb/linux-nat.c /* Check if the thread has exited. */ if ((WIFEXITED (status) || WIFSIGNALED (status)) -@@ -3763,7 +3737,6 @@ resume_stopped_resumed_lwps (struct lwp_ +@@ -3950,7 +3924,6 @@ resume_stopped_resumed_lwps (struct lwp_ linux_ops->to_resume (linux_ops, pid_to_ptid (GET_LWP (lp->ptid)), - lp->step, TARGET_SIGNAL_0); + lp->step, GDB_SIGNAL_0); lp->stopped = 0; - memset (&lp->siginfo, 0, sizeof (lp->siginfo)); lp->stopped_by_watchpoint = 0; } -@@ -5932,11 +5905,19 @@ linux_nat_set_siginfo_fixup (struct targ - struct siginfo * +@@ -5227,11 +5200,19 @@ linux_nat_set_prepare_to_resume (struct + siginfo_t * linux_nat_get_siginfo (ptid_t ptid) { - struct lwp_info *lp = find_lwp_pid (ptid); -+ static struct siginfo siginfo; ++ static siginfo_t siginfo; + int pid; - gdb_assert (lp != NULL); @@ -124,17 +124,17 @@ Index: gdb-7.2.50.20101116/gdb/linux-nat.c } /* Provide a prototype to silence -Wmissing-prototypes. */ -Index: gdb-7.2.50.20101116/gdb/linux-nat.h +Index: gdb-7.4.50.20120602/gdb/linux-nat.h =================================================================== ---- gdb-7.2.50.20101116.orig/gdb/linux-nat.h 2010-11-16 07:54:36.000000000 +0100 -+++ gdb-7.2.50.20101116/gdb/linux-nat.h 2010-11-16 09:12:44.000000000 +0100 -@@ -58,10 +58,6 @@ struct lwp_info +--- gdb-7.4.50.20120602.orig/gdb/linux-nat.h 2012-06-02 21:36:21.067483466 +0200 ++++ gdb-7.4.50.20120602/gdb/linux-nat.h 2012-06-02 21:36:27.140481144 +0200 +@@ -76,10 +76,6 @@ struct lwp_info /* The kind of stepping of this LWP. */ enum resume_step step; - /* Non-zero si_signo if this LWP stopped with a trap. si_addr may - be the address of a hardware watchpoint. */ -- struct siginfo siginfo; +- siginfo_t siginfo; - /* STOPPED_BY_WATCHPOINT is non-zero if this LWP stopped with a data watchpoint trap. */ diff --git a/gdb-bz634108-solib_address.patch b/gdb-bz634108-solib_address.patch index fd4ca39..34ae508 100644 --- a/gdb-bz634108-solib_address.patch +++ b/gdb-bz634108-solib_address.patch @@ -1,5 +1,7 @@ Fix gdb.solib_address (fix by Phil Muldoon). +s/solib_address/solib_name/ during upstreaming. + --- /dev/null +++ b/gdb/testsuite/gdb.python/rh634108-solib_address.exp @@ -0,0 +1,24 @@ @@ -26,4 +28,4 @@ Fix gdb.solib_address (fix by Phil Muldoon). +# Skip all tests if Python scripting is not enabled. +if { [skip_python_tests] } { continue } + -+gdb_test "python print gdb.solib_address(-1)" "None" "gdb.solib_address exists" ++gdb_test "python print gdb.solib_name(-1)" "None" "gdb.solib_name exists" diff --git a/gdb-bz645773-case-insensitive-1of5.patch b/gdb-bz645773-case-insensitive-1of5.patch deleted file mode 100644 index dbf57ae..0000000 --- a/gdb-bz645773-case-insensitive-1of5.patch +++ /dev/null @@ -1,84 +0,0 @@ -[patch] Code cleanup: New SYMBOL_HASH_NEXT -http://sourceware.org/ml/gdb-patches/2011-04/msg00022.html -http://sourceware.org/ml/gdb-cvs/2011-04/msg00043.html - -### src/gdb/ChangeLog 2011/04/06 03:24:22 1.12908 -### src/gdb/ChangeLog 2011/04/06 19:50:03 1.12909 -## -1,3 +1,12 @@ -+2011-04-06 Jan Kratochvil -+ -+ Code cleanup. -+ * dictionary.c (dict_hash): Use SYMBOL_HASH_NEXT. -+ * dwarf2read.c (mapped_index_string_hash): Refer to SYMBOL_HASH_NEXT -+ in the function comment, a new note on values compatibility. -+ * minsyms.c (msymbol_hash_iw, msymbol_hash): Use SYMBOL_HASH_NEXT. -+ * symtab.h (SYMBOL_HASH_NEXT): New. -+ - 2011-04-06 Thiago Jung Bauermann - - * ppc-linux-nat.c (check_condition): Add len output parameter. ---- src/gdb/dictionary.c 2011/01/07 19:36:15 1.21 -+++ src/gdb/dictionary.c 2011/04/06 19:50:04 1.22 -@@ -826,7 +826,7 @@ - } - /* FALL THROUGH */ - default: -- hash = hash * 67 + *string - 113; -+ hash = SYMBOL_HASH_NEXT (hash, *string); - string += 1; - break; - } ---- src/gdb/dwarf2read.c 2011/04/04 14:10:12 1.520 -+++ src/gdb/dwarf2read.c 2011/04/06 19:50:04 1.521 -@@ -1962,11 +1962,11 @@ - do_cleanups (cleanup); - } - --/* The hash function for strings in the mapped index. This is the -- same as the hashtab.c hash function, but we keep a separate copy to -- maintain control over the implementation. This is necessary -- because the hash function is tied to the format of the mapped index -- file. */ -+/* The hash function for strings in the mapped index. This is the same as -+ SYMBOL_HASH_NEXT, but we keep a separate copy to maintain control over the -+ implementation. This is necessary because the hash function is tied to the -+ format of the mapped index file. The hash values do not have to match with -+ SYMBOL_HASH_NEXT. */ - - static hashval_t - mapped_index_string_hash (const void *p) ---- src/gdb/minsyms.c 2011/03/28 20:29:51 1.81 -+++ src/gdb/minsyms.c 2011/04/06 19:50:05 1.82 -@@ -91,7 +91,7 @@ - ++string; - if (*string && *string != '(') - { -- hash = hash * 67 + *string - 113; -+ hash = SYMBOL_HASH_NEXT (hash, *string); - ++string; - } - } -@@ -106,7 +106,7 @@ - unsigned int hash = 0; - - for (; *string; ++string) -- hash = hash * 67 + *string - 113; -+ hash = SYMBOL_HASH_NEXT (hash, *string); - return hash; - } - ---- src/gdb/symtab.h 2011/04/04 15:19:59 1.177 -+++ src/gdb/symtab.h 2011/04/06 19:50:05 1.178 -@@ -1004,6 +1004,12 @@ - - extern unsigned int msymbol_hash (const char *); - -+/* Compute the next hash value from previous HASH and the character C. This -+ is only a GDB in-memory computed value with no external files compatibility -+ requirements. */ -+ -+#define SYMBOL_HASH_NEXT(hash, c) ((hash) * 67 + (c) - 113) -+ - extern struct objfile * msymbol_objfile (struct minimal_symbol *sym); - - extern void diff --git a/gdb-bz645773-case-insensitive-2of5.patch b/gdb-bz645773-case-insensitive-2of5.patch deleted file mode 100644 index e8aad9d..0000000 --- a/gdb-bz645773-case-insensitive-2of5.patch +++ /dev/null @@ -1,139 +0,0 @@ -http://sourceware.org/ml/gdb-patches/2011-04/msg00124.html -Subject: [patch 1/3] case insensitive: Reformat code - -Hi, - -just some reformatting to make the later patch more clear. There should be no -functionality difference by this patch. c1+c2 are a bit ugly but I found any -other solution a bit ugly. - - -Thanks, -Jan - - -gdb/ -2011-04-08 Jan Kratochvil - - Format the code for the next patch. - * dwarf2read.c (struct mapped_index): Include delimiting newlines. - * utils.c (strcmp_iw_ordered): Reformat the code for the next patch. - New variables c1 and c2. - ---- a/gdb/dwarf2read.c -+++ b/gdb/dwarf2read.c -@@ -150,14 +150,19 @@ struct mapped_index - { - /* The total length of the buffer. */ - off_t total_size; -+ - /* A pointer to the address table data. */ - const gdb_byte *address_table; -+ - /* Size of the address table data in bytes. */ - offset_type address_table_size; -+ - /* The symbol table, implemented as a hash table. */ - const offset_type *symbol_table; -+ - /* Size in slots, each slot is 2 offset_types. */ - offset_type symbol_table_slots; -+ - /* A pointer to the constant pool. */ - const char *constant_pool; - }; ---- a/gdb/utils.c -+++ b/gdb/utils.c -@@ -3023,48 +3023,55 @@ strcmp_iw (const char *string1, const char *string2) - int - strcmp_iw_ordered (const char *string1, const char *string2) - { -- while ((*string1 != '\0') && (*string2 != '\0')) -+ /* Formatting stub. */ -+ if (1) - { -- while (isspace (*string1)) -- { -- string1++; -- } -- while (isspace (*string2)) -- { -- string2++; -- } -- if (*string1 != *string2) -+ /* C1 and C2 are valid only if *string1 != '\0' && *string2 != '\0'. -+ Provide stub characters if we are already at the end of one of the -+ strings. */ -+ char c1 = 'X', c2 = 'X'; -+ -+ while (*string1 != '\0' && *string2 != '\0') - { -- break; -+ while (isspace (*string1)) -+ string1++; -+ while (isspace (*string2)) -+ string2++; -+ -+ c1 = *string1; -+ c2 = *string2; -+ if (c1 != c2) -+ break; -+ -+ if (*string1 != '\0') -+ { -+ string1++; -+ string2++; -+ } - } -- if (*string1 != '\0') -+ -+ switch (*string1) - { -- string1++; -- string2++; -+ /* Characters are non-equal unless they're both '\0'; we want to -+ make sure we get the comparison right according to our -+ comparison in the cases where one of them is '\0' or '('. */ -+ case '\0': -+ if (*string2 == '\0') -+ return 0; -+ else -+ return -1; -+ case '(': -+ if (*string2 == '\0') -+ return 1; -+ else -+ return -1; -+ default: -+ if (*string2 == '\0' || *string2 == '(') -+ return 1; -+ else -+ return c1 - c2; - } - } -- -- switch (*string1) -- { -- /* Characters are non-equal unless they're both '\0'; we want to -- make sure we get the comparison right according to our -- comparison in the cases where one of them is '\0' or '('. */ -- case '\0': -- if (*string2 == '\0') -- return 0; -- else -- return -1; -- case '(': -- if (*string2 == '\0') -- return 1; -- else -- return -1; -- default: -- if (*string2 == '(') -- return 1; -- else -- return *string1 - *string2; -- } - } - - /* A simple comparison function with opposite semantics to strcmp. */ - diff --git a/gdb-bz645773-case-insensitive-3of5.patch b/gdb-bz645773-case-insensitive-3of5.patch deleted file mode 100644 index a1aa835..0000000 --- a/gdb-bz645773-case-insensitive-3of5.patch +++ /dev/null @@ -1,188 +0,0 @@ -http://sourceware.org/ml/gdb-patches/2011-04/msg00125.html -Subject: [patch 2/3] case insensitive: re_comp->regcomp - -Hi, - -re_comp cannot be passed REG_ICASE. Therefore change the code. The should -have no functionality impact. - -The new boolean field `preg_p' could be maybe replaced by a conditional -`preg.buffer != NULL' which would work with libiberty regcomp implementation -but I do not see it guaranteed anywhere. GDB is always using static libiberty -implementation which I do not see why in the case it is running on glibc. -But if it gets fixed one day and it starts to use externally linked -regcomp/regexec I would find the `preg.buffer != NULL' conditional dangerous. - - -Thanks, -Jan - - -gdb/ -2011-04-08 Jan Kratochvil - - Replace re_comp/re_exec by regcomp/regexec. - * symtab.c (struct search_symbols_data): New fields preg, preg_p. - (search_symbols_name_matches): Use them, use regexec. - (search_symbols): New variable retval_chain, adjust the use of - old_chain against it. Replace re_comp by regcomp. Use the new struct - search_symbols_data fields, use regexec instead of re_exec. - -Index: gdb-7.2.90.20110429/gdb/symtab.c -=================================================================== ---- gdb-7.2.90.20110429.orig/gdb/symtab.c 2011-04-29 09:43:33.000000000 +0200 -+++ gdb-7.2.90.20110429/gdb/symtab.c 2011-04-29 09:43:55.000000000 +0200 -@@ -2958,7 +2958,10 @@ struct search_symbols_data - { - int nfiles; - char **files; -- char *regexp; -+ -+ /* It is true if PREG contains valid data, false otherwise. */ -+ unsigned preg_p : 1; -+ regex_t preg; - }; - - /* A callback for expand_symtabs_matching. */ -@@ -2976,7 +2979,7 @@ search_symbols_name_matches (const char - { - struct search_symbols_data *data = user_data; - -- return data->regexp == NULL || re_exec (symname); -+ return !data->preg_p || regexec (&data->preg, symname, 0, NULL, 0) == 0; - } - - /* Search the symbol table for matches to the regular expression REGEXP, -@@ -3023,9 +3026,13 @@ search_symbols (char *regexp, domain_enu - struct symbol_search *sr; - struct symbol_search *psr; - struct symbol_search *tail; -- struct cleanup *old_chain = NULL; - struct search_symbols_data datum; - -+ /* OLD_CHAIN .. RETVAL_CHAIN is always freed, RETVAL_CHAIN .. current -+ CLEANUP_CHAIN is freed only in the case of an error. */ -+ struct cleanup *old_chain = make_cleanup (null_cleanup, NULL); -+ struct cleanup *retval_chain; -+ - if (kind < VARIABLES_DOMAIN || kind >= ALL_DOMAIN) - error (_("must search on specific domain")); - -@@ -3036,6 +3043,7 @@ search_symbols (char *regexp, domain_enu - - sr = *matches = NULL; - tail = NULL; -+ datum.preg_p = 0; - - if (regexp != NULL) - { -@@ -3045,6 +3053,7 @@ search_symbols (char *regexp, domain_enu - and or . */ - char *opend; - char *opname = operator_chars (regexp, &opend); -+ int errcode; - - if (*opname) - { -@@ -3073,8 +3082,16 @@ search_symbols (char *regexp, domain_enu - } - } - -- if (0 != (val = re_comp (regexp))) -- error (_("Invalid regexp (%s): %s"), val, regexp); -+ errcode = regcomp (&datum.preg, regexp, REG_NOSUB); -+ if (errcode != 0) -+ { -+ char *err = get_regcomp_error (errcode, &datum.preg); -+ -+ make_cleanup (xfree, err); -+ error (_("Invalid regexp (%s): %s"), err, regexp); -+ } -+ datum.preg_p = 1; -+ make_regfree_cleanup (&datum.preg); - } - - /* Search through the partial symtabs *first* for all symbols -@@ -3083,7 +3100,6 @@ search_symbols (char *regexp, domain_enu - - datum.nfiles = nfiles; - datum.files = files; -- datum.regexp = regexp; - ALL_OBJFILES (objfile) - { - if (objfile->sf) -@@ -3094,6 +3110,8 @@ search_symbols (char *regexp, domain_enu - &datum); - } - -+ retval_chain = old_chain; -+ - /* Here, we search through the minimal symbol tables for functions - and variables that match, and force their symbols to be read. - This is in particular necessary for demangled variable names, -@@ -3117,8 +3135,9 @@ search_symbols (char *regexp, domain_enu - MSYMBOL_TYPE (msymbol) == ourtype3 || - MSYMBOL_TYPE (msymbol) == ourtype4) - { -- if (regexp == NULL -- || re_exec (SYMBOL_NATURAL_NAME (msymbol)) != 0) -+ if (!datum.preg_p -+ || regexec (&datum.preg, SYMBOL_NATURAL_NAME (msymbol), 0, -+ NULL, 0) == 0) - { - if (0 == find_pc_symtab (SYMBOL_VALUE_ADDRESS (msymbol))) - { -@@ -3156,8 +3175,9 @@ search_symbols (char *regexp, domain_enu - QUIT; - - if (file_matches (real_symtab->filename, files, nfiles) -- && ((regexp == NULL -- || re_exec (SYMBOL_NATURAL_NAME (sym)) != 0) -+ && ((!datum.preg_p -+ || regexec (&datum.preg, SYMBOL_NATURAL_NAME (sym), 0, -+ NULL, 0) == 0) - && ((kind == VARIABLES_DOMAIN - && SYMBOL_CLASS (sym) != LOC_TYPEDEF - && SYMBOL_CLASS (sym) != LOC_UNRESOLVED -@@ -3199,7 +3219,7 @@ search_symbols (char *regexp, domain_enu - tail = sort_search_symbols (&dummy, nfound); - sr = dummy.next; - -- old_chain = make_cleanup_free_search_symbols (sr); -+ make_cleanup_free_search_symbols (sr); - } - else - tail = sort_search_symbols (prevtail, nfound); -@@ -3221,8 +3241,9 @@ search_symbols (char *regexp, domain_enu - MSYMBOL_TYPE (msymbol) == ourtype3 || - MSYMBOL_TYPE (msymbol) == ourtype4) - { -- if (regexp == NULL -- || re_exec (SYMBOL_NATURAL_NAME (msymbol)) != 0) -+ if (!datum.preg_p -+ || regexec (&datum.preg, SYMBOL_NATURAL_NAME (msymbol), 0, -+ NULL, 0) == 0) - { - /* Functions: Look up by address. */ - if (kind != FUNCTIONS_DOMAIN || -@@ -3244,7 +3265,7 @@ search_symbols (char *regexp, domain_enu - if (tail == NULL) - { - sr = psr; -- old_chain = make_cleanup_free_search_symbols (sr); -+ make_cleanup_free_search_symbols (sr); - } - else - tail->next = psr; -@@ -3256,9 +3277,9 @@ search_symbols (char *regexp, domain_enu - } - } - -+ discard_cleanups (retval_chain); -+ do_cleanups (old_chain); - *matches = sr; -- if (sr != NULL) -- discard_cleanups (old_chain); - } - - /* Helper function for symtab_symbol_info, this function uses diff --git a/gdb-bz645773-case-insensitive-4of5.patch b/gdb-bz645773-case-insensitive-4of5.patch deleted file mode 100644 index 310a8c2..0000000 --- a/gdb-bz645773-case-insensitive-4of5.patch +++ /dev/null @@ -1,669 +0,0 @@ -http://sourceware.org/ml/gdb-patches/2011-04/msg00418.html -Subject: Re: [patch 3/3] case insensitive: the fix [rediff] - -On Fri, 22 Apr 2011 21:05:07 +0200, Eli Zaretskii wrote: -> This @table will look weird in the manual: it produces lines that -> begin with a lower-case letter. Perhaps reorder thusly: - -OK, thanks for the review. - - -Regards, -Jan - - -gdb/doc/ -2011-04-22 Jan Kratochvil - Eli Zaretskii - - * gdb.texinfo (Index Section Format): Change the version to 5. - Describe the different formula. - -gdb/ -2011-04-08 Jan Kratochvil - - * dwarf2read.c: Include ctype.h. - (struct mapped_index): New field version. - (mapped_index_string_hash): New parameter index_version. New comment - for it. Call tolower appropriately. - (find_slot_in_mapped_hash): New variable cmp, initialize it, use it. - Choose the right index version for mapped_index_string_hash. - (dwarf2_read_index): Support also the index version 5. Initialize the - new struct mapped_index field version. - (hash_strtab_entry): Pass INT_MAX for the new parameter, explain why. - (find_slot): Explain the version needs. Pass INT_MAX for the new - parameter. - (write_psymtabs_to_index): Produce version 5. - * minsyms.c (lookup_minimal_symbol): New variable cmp, initialize it, - use it. New comment for SYMBOL_MATCHES_SEARCH_NAME. - * psymtab.c (lookup_partial_symbol): Find the - SYMBOL_MATCHES_SEARCH_NAME start of the found block of matching - entries. - * symtab.c (lookup_symbol_in_language): Remove the case_sensitive_off - NAME lowercasing. - (search_symbols): Pass REG_ICASE to regcomp for case_sensitive_off. - (completion_list_add_name): New variable ncmp, initialize it, use it. - * symtab.h (SYMBOL_HASH_NEXT): Always call tolower. - * utils.c (strcmp_iw): Support case_sensitive_off. - (strcmp_iw_ordered): Sort in a way compatible with case_sensitive_off. - New function comment part. New variables saved_string1, - saved_string2 and case_pass. Add a proper second pass. - -gdb/testsuite/ -2011-04-08 Jan Kratochvil - - * gdb.base/fortran-sym-case.c: New file. - * gdb.base/fortran-sym-case.exp: New file. - * gdb.dwarf2/dw2-case-insensitive-debug.S: New file. - * gdb.dwarf2/dw2-case-insensitive.c: New file. - * gdb.dwarf2/dw2-case-insensitive.exp: New file. - -Index: gdb-7.2.90.20110525/gdb/dwarf2read.c -=================================================================== ---- gdb-7.2.90.20110525.orig/gdb/dwarf2read.c 2011-05-25 17:12:51.000000000 +0200 -+++ gdb-7.2.90.20110525/gdb/dwarf2read.c 2011-05-25 19:12:33.000000000 +0200 -@@ -152,6 +152,9 @@ DEF_VEC_I (offset_type); - a comment by the code that writes the index. */ - struct mapped_index - { -+ /* Index data format version. */ -+ int version; -+ - /* The total length of the buffer. */ - off_t total_size; - -@@ -1997,17 +2000,23 @@ create_addrmap_from_index (struct objfil - SYMBOL_HASH_NEXT, but we keep a separate copy to maintain control over the - implementation. This is necessary because the hash function is tied to the - format of the mapped index file. The hash values do not have to match with -- SYMBOL_HASH_NEXT. */ -+ SYMBOL_HASH_NEXT. -+ -+ Use INT_MAX for INDEX_VERSION if you generate the current index format. */ - - static hashval_t --mapped_index_string_hash (const void *p) -+mapped_index_string_hash (int index_version, const void *p) - { - const unsigned char *str = (const unsigned char *) p; - hashval_t r = 0; - unsigned char c; - - while ((c = *str++) != 0) -- r = r * 67 + c - 113; -+ { -+ if (index_version >= 5) -+ c = tolower (c); -+ r = r * 67 + c - 113; -+ } - - return r; - } -@@ -2023,6 +2032,7 @@ find_slot_in_mapped_hash (struct mapped_ - struct cleanup *back_to = make_cleanup (null_cleanup, 0); - offset_type hash; - offset_type slot, step; -+ int (*cmp) (const char *, const char *); - - if (current_language->la_language == language_cplus - || current_language->la_language == language_java -@@ -2045,9 +2055,16 @@ find_slot_in_mapped_hash (struct mapped_ - } - } - -- hash = mapped_index_string_hash (name); -+ /* Index version 4 did not support case insensitive searches. But the -+ indexes for case insensitive languages are built in lowercase, therefore -+ simulate our NAME being searched is also lowercased. */ -+ hash = mapped_index_string_hash ((index->version == 4 -+ && case_sensitivity == case_sensitive_off -+ ? 5 : index->version), -+ name); - slot = hash & (index->symbol_table_slots - 1); - step = ((hash * 17) & (index->symbol_table_slots - 1)) | 1; -+ cmp = (case_sensitivity == case_sensitive_on ? strcmp : strcasecmp); - - for (;;) - { -@@ -2061,7 +2078,7 @@ find_slot_in_mapped_hash (struct mapped_ - } - - str = index->constant_pool + MAYBE_SWAP (index->symbol_table[i]); -- if (!strcmp (name, str)) -+ if (!cmp (name, str)) - { - *vec_out = (offset_type *) (index->constant_pool - + MAYBE_SWAP (index->symbol_table[i + 1])); -@@ -2105,15 +2122,17 @@ dwarf2_read_index (struct objfile *objfi - /* Versions earlier than 3 emitted every copy of a psymbol. This - causes the index to behave very poorly for certain requests. Version 3 - contained incomplete addrmap. So, it seems better to just ignore such -- indices. */ -+ indices. Index version 4 uses a different hash function than index -+ version 5 and later. */ - if (version < 4) - return 0; - /* Indexes with higher version than the one supported by GDB may be no - longer backward compatible. */ -- if (version > 4) -+ if (version > 5) - return 0; - - map = OBSTACK_ZALLOC (&objfile->objfile_obstack, struct mapped_index); -+ map->version = version; - map->total_size = dwarf2_per_objfile->gdb_index.size; - - metadata = (offset_type *) (addr + sizeof (offset_type)); -@@ -15692,13 +15711,16 @@ struct strtab_entry - const char *str; - }; - --/* Hash function for a strtab_entry. */ -+/* Hash function for a strtab_entry. -+ -+ Function is used only during write_hash_table so no index format backward -+ compatibility is needed. */ - - static hashval_t - hash_strtab_entry (const void *e) - { - const struct strtab_entry *entry = e; -- return mapped_index_string_hash (entry->str); -+ return mapped_index_string_hash (INT_MAX, entry->str); - } - - /* Equality function for a strtab_entry. */ -@@ -15836,12 +15858,15 @@ cleanup_mapped_symtab (void *p) - } - - /* Find a slot in SYMTAB for the symbol NAME. Returns a pointer to -- the slot. */ -+ the slot. -+ -+ Function is used only during write_hash_table so no index format backward -+ compatibility is needed. */ - - static struct symtab_index_entry ** - find_slot (struct mapped_symtab *symtab, const char *name) - { -- offset_type index, step, hash = mapped_index_string_hash (name); -+ offset_type index, step, hash = mapped_index_string_hash (INT_MAX, name); - - index = hash & (symtab->size - 1); - step = ((hash * 17) & (symtab->size - 1)) | 1; -@@ -16369,7 +16394,7 @@ write_psymtabs_to_index (struct objfile - total_len = size_of_contents; - - /* The version number. */ -- val = MAYBE_SWAP (4); -+ val = MAYBE_SWAP (5); - obstack_grow (&contents, &val, sizeof (val)); - - /* The offset of the CU list from the start of the file. */ -Index: gdb-7.2.90.20110525/gdb/minsyms.c -=================================================================== ---- gdb-7.2.90.20110525.orig/gdb/minsyms.c 2011-05-25 17:12:51.000000000 +0200 -+++ gdb-7.2.90.20110525/gdb/minsyms.c 2011-05-25 17:13:13.000000000 +0200 -@@ -239,11 +239,16 @@ lookup_minimal_symbol (const char *name, - - if (pass == 1) - { -- match = strcmp (SYMBOL_LINKAGE_NAME (msymbol), -- modified_name) == 0; -+ int (*cmp) (const char *, const char *); -+ -+ cmp = (case_sensitivity == case_sensitive_on -+ ? strcmp : strcasecmp); -+ match = cmp (SYMBOL_LINKAGE_NAME (msymbol), -+ modified_name) == 0; - } - else - { -+ /* The function respects CASE_SENSITIVITY. */ - match = SYMBOL_MATCHES_SEARCH_NAME (msymbol, - modified_name); - } -Index: gdb-7.2.90.20110525/gdb/psymtab.c -=================================================================== ---- gdb-7.2.90.20110525.orig/gdb/psymtab.c 2011-04-20 22:10:29.000000000 +0200 -+++ gdb-7.2.90.20110525/gdb/psymtab.c 2011-05-25 17:13:13.000000000 +0200 -@@ -690,8 +690,15 @@ lookup_partial_symbol (struct partial_sy - internal_error (__FILE__, __LINE__, - _("failed internal consistency check")); - -- while (top <= real_top -- && SYMBOL_MATCHES_SEARCH_NAME (*top, search_name)) -+ /* For `case_sensitivity == case_sensitive_off' strcmp_iw_ordered will -+ search more exactly than what matches SYMBOL_MATCHES_SEARCH_NAME. */ -+ while (top >= start && SYMBOL_MATCHES_SEARCH_NAME (*top, search_name)) -+ top--; -+ -+ /* Fixup to have a symbol which matches SYMBOL_MATCHES_SEARCH_NAME. */ -+ top++; -+ -+ while (top <= real_top && SYMBOL_MATCHES_SEARCH_NAME (*top, search_name)) - { - if (symbol_matches_domain (SYMBOL_LANGUAGE (*top), - SYMBOL_DOMAIN (*top), domain)) -Index: gdb-7.2.90.20110525/gdb/symtab.c -=================================================================== ---- gdb-7.2.90.20110525.orig/gdb/symtab.c 2011-05-25 17:12:51.000000000 +0200 -+++ gdb-7.2.90.20110525/gdb/symtab.c 2011-05-25 17:13:49.000000000 +0200 -@@ -1062,19 +1062,6 @@ lookup_symbol_in_language (const char *n - } - } - -- if (case_sensitivity == case_sensitive_off) -- { -- char *copy; -- int len, i; -- -- len = strlen (name); -- copy = (char *) alloca (len + 1); -- for (i= 0; i < len; i++) -- copy[i] = tolower (name[i]); -- copy[len] = 0; -- modified_name = copy; -- } -- - returnval = lookup_symbol_aux (modified_name, block, domain, lang, - is_a_field_of_this); - do_cleanups (cleanup); -@@ -3106,7 +3093,9 @@ search_symbols (char *regexp, domain_enu - } - } - -- errcode = regcomp (&datum.preg, regexp, REG_NOSUB); -+ errcode = regcomp (&datum.preg, regexp, -+ REG_NOSUB | (case_sensitivity == case_sensitive_off -+ ? REG_ICASE : 0)); - if (errcode != 0) - { - char *err = get_regcomp_error (errcode, &datum.preg); -@@ -3546,7 +3535,11 @@ rbreak_command (char *regexp, int from_t - static int - compare_symbol_name (const char *name, const char *sym_text, int sym_text_len) - { -- if (strncmp (name, sym_text, sym_text_len) != 0) -+ int (*ncmp) (const char *, const char *, size_t); -+ -+ ncmp = (case_sensitivity == case_sensitive_on ? strncmp : strncasecmp); -+ -+ if (ncmp (name, sym_text, sym_text_len) != 0) - return 0; - - if (sym_text[sym_text_len] == '(') -Index: gdb-7.2.90.20110525/gdb/symtab.h -=================================================================== ---- gdb-7.2.90.20110525.orig/gdb/symtab.h 2011-05-25 17:12:51.000000000 +0200 -+++ gdb-7.2.90.20110525/gdb/symtab.h 2011-05-25 17:13:13.000000000 +0200 -@@ -1036,7 +1036,8 @@ extern unsigned int msymbol_hash (const - is only a GDB in-memory computed value with no external files compatibility - requirements. */ - --#define SYMBOL_HASH_NEXT(hash, c) ((hash) * 67 + (c) - 113) -+#define SYMBOL_HASH_NEXT(hash, c) \ -+ ((hash) * 67 + tolower ((unsigned char) (c)) - 113) - - extern struct objfile * msymbol_objfile (struct minimal_symbol *sym); - -Index: gdb-7.2.90.20110525/gdb/testsuite/gdb.base/fortran-sym-case.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110525/gdb/testsuite/gdb.base/fortran-sym-case.c 2011-05-25 17:13:13.000000000 +0200 -@@ -0,0 +1,22 @@ -+/* This testcase is part of GDB, the GNU debugger. -+ -+ Copyright 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 . */ -+ -+int -+main (int argc, char **aRGv) -+{ -+ return 0; -+} -Index: gdb-7.2.90.20110525/gdb/testsuite/gdb.base/fortran-sym-case.exp -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110525/gdb/testsuite/gdb.base/fortran-sym-case.exp 2011-05-25 17:13:13.000000000 +0200 -@@ -0,0 +1,27 @@ -+# Copyright (C) 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 . -+ -+set testfile fortran-sym-case -+if { [prepare_for_testing ${testfile}.exp ${testfile}] } { -+ return -1 -+} -+ -+if ![runto_main] { -+ return -1 -+} -+ -+gdb_test "set language fortran" {Warning: the current language does not match this frame\.} -+ -+gdb_test "frame" ", aRGv=.*" -Index: gdb-7.2.90.20110525/gdb/testsuite/gdb.dwarf2/dw2-case-insensitive-debug.S -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110525/gdb/testsuite/gdb.dwarf2/dw2-case-insensitive-debug.S 2011-05-25 17:13:13.000000000 +0200 -@@ -0,0 +1,102 @@ -+/* This testcase is part of GDB, the GNU debugger. -+ -+ Copyright 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 . */ -+ -+ .section .debug_info -+.Lcu1_begin: -+ /* CU header */ -+ .4byte .Lcu1_end - .Lcu1_start /* Length of Compilation Unit */ -+.Lcu1_start: -+ .2byte 2 /* DWARF Version */ -+ .4byte .Labbrev1_begin /* Offset into abbrev section */ -+ .byte 4 /* Pointer size */ -+ -+ /* CU die */ -+ .uleb128 1 /* Abbrev: DW_TAG_compile_unit */ -+ .ascii "file1.txt\0" /* DW_AT_name */ -+ .ascii "GNU C 3.3.3\0" /* DW_AT_producer */ -+ .byte 8 /* DW_AT_language (DW_LANG_Fortran90) */ -+ .4byte FUNC_lang /* DW_AT_low_pc */ -+ .4byte main /* DW_AT_high_pc */ -+ -+ .uleb128 3 /* Abbrev: DW_TAG_subprogram */ -+ .byte 1 /* DW_AT_external */ -+ .ascii "FUNC_lang\0" /* DW_AT_name */ -+ .4byte FUNC_lang /* DW_AT_low_pc */ -+ .4byte main /* DW_AT_high_pc */ -+ .byte 1 /* DW_AT_prototyped */ -+ .4byte .Ltype - .Lcu1_begin /* DW_AT_type */ -+ -+.Ltype: -+ .uleb128 0x5 /* Abbrev: DW_TAG_base_type */ -+ .byte 0x4 /* DW_AT_byte_size */ -+ .byte 0x5 /* DW_AT_encoding */ -+ .ascii "foo\0" /* DW_AT_name */ -+ -+ .byte 0 /* End of children of CU */ -+.Lcu1_end: -+ -+/* Abbrev table */ -+ .section .debug_abbrev -+.Labbrev1_begin: -+ .uleb128 1 /* Abbrev code */ -+ .uleb128 0x11 /* DW_TAG_compile_unit */ -+ .byte 1 /* has_children */ -+ .uleb128 0x3 /* DW_AT_name */ -+ .uleb128 0x8 /* DW_FORM_string */ -+ .uleb128 0x25 /* DW_AT_producer */ -+ .uleb128 0x8 /* DW_FORM_string */ -+ .uleb128 0x13 /* DW_AT_language */ -+ .uleb128 0xb /* DW_FORM_data1 */ -+ .uleb128 0x11 /* DW_AT_low_pc */ -+ .uleb128 0x1 /* DW_FORM_addr */ -+ .uleb128 0x12 /* DW_AT_high_pc */ -+ .uleb128 0x1 /* DW_FORM_addr */ -+ .byte 0x0 /* Terminator */ -+ .byte 0x0 /* Terminator */ -+ -+ .uleb128 3 /* Abbrev code */ -+ .uleb128 0x2e /* DW_TAG_subprogram */ -+ .byte 0 /* has_children */ -+ .uleb128 0x3f /* DW_AT_external */ -+ .uleb128 0xc /* DW_FORM_flag */ -+ .uleb128 0x3 /* DW_AT_name */ -+ .uleb128 0x8 /* DW_FORM_string */ -+ .uleb128 0x11 /* DW_AT_low_pc */ -+ .uleb128 0x1 /* DW_FORM_addr */ -+ .uleb128 0x12 /* DW_AT_high_pc */ -+ .uleb128 0x1 /* DW_FORM_addr */ -+ .uleb128 0x27 /* DW_AT_prototyped */ -+ .uleb128 0xc /* DW_FORM_flag */ -+ .uleb128 0x49 /* DW_AT_type */ -+ .uleb128 0x13 /* DW_FORM_ref4 */ -+ .byte 0x0 /* Terminator */ -+ .byte 0x0 /* Terminator */ -+ -+ .uleb128 0x5 /* Abbrev code */ -+ .uleb128 0x24 /* DW_TAG_base_type */ -+ .byte 0x0 /* DW_children_no */ -+ .uleb128 0xb /* DW_AT_byte_size */ -+ .uleb128 0xb /* DW_FORM_data1 */ -+ .uleb128 0x3e /* DW_AT_encoding */ -+ .uleb128 0xb /* DW_FORM_data1 */ -+ .uleb128 0x3 /* DW_AT_name */ -+ .uleb128 0x8 /* DW_FORM_string */ -+ .byte 0x0 /* Terminator */ -+ .byte 0x0 /* Terminator */ -+ -+ .byte 0x0 /* Terminator */ -+ .byte 0x0 /* Terminator */ -Index: gdb-7.2.90.20110525/gdb/testsuite/gdb.dwarf2/dw2-case-insensitive.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110525/gdb/testsuite/gdb.dwarf2/dw2-case-insensitive.c 2011-05-25 17:13:13.000000000 +0200 -@@ -0,0 +1,38 @@ -+/* This testcase is part of GDB, the GNU debugger. -+ -+ Copyright 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 . */ -+ -+/* Use DW_LANG_Fortran90 for case insensitive DWARF. */ -+ -+void -+FUNC_lang (void) -+{ -+} -+ -+/* Symbol is present only in ELF .symtab. */ -+ -+void -+FUNC_symtab (void) -+{ -+} -+ -+int -+main (void) -+{ -+ FUNC_lang (); -+ FUNC_symtab (); -+ return 0; -+} -Index: gdb-7.2.90.20110525/gdb/testsuite/gdb.dwarf2/dw2-case-insensitive.exp -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110525/gdb/testsuite/gdb.dwarf2/dw2-case-insensitive.exp 2011-05-25 17:13:13.000000000 +0200 -@@ -0,0 +1,49 @@ -+# Copyright 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 . -+load_lib dwarf.exp -+ -+# This test can only be run on targets which support DWARF-2 and use gas. -+if {![dwarf2_support]} { -+ return 0 -+} -+ -+set testfile "dw2-case-insensitive" -+ -+if { [prepare_for_testing ${testfile}.exp ${testfile} [list ${testfile}.c ${testfile}-debug.S] {nodebug}] } { -+ return -1 -+} -+ -+gdb_test "show case-sensitive" {Case sensitivity in name search is "auto; currently on"\.} -+ -+gdb_test "info functions fUnC_lang" \ -+ "All functions matching regular expression \"fUnC_lang\":" \ -+ "regexp case-sensitive on" -+ -+gdb_test "set case-sensitive off" {warning: the current case sensitivity setting does not match the language\.} -+ -+gdb_test "info functions fUnC_lang" \ -+ "All functions matching regular expression \"fUnC_lang\":\[\r\n\]+File file1.txt:\r\nfoo FUNC_lang\\(void\\);" \ -+ "regexp case-sensitive off" -+ -+gdb_test "p fuNC_lang" { = {foo \(void\)} 0x[0-9a-f]+ } -+gdb_test "p fuNC_symtab" { = {} 0x[0-9a-f]+ } -+ -+if {[gdb_breakpoint "fuNC_lang"] == 1} { -+ pass "setting breakpoint at fuNC_lang" -+} -+ -+if {[gdb_breakpoint "fuNC_symtab"] == 1} { -+ pass "setting breakpoint at fuNC_symtab" -+} -Index: gdb-7.2.90.20110525/gdb/utils.c -=================================================================== ---- gdb-7.2.90.20110525.orig/gdb/utils.c 2011-05-25 17:12:51.000000000 +0200 -+++ gdb-7.2.90.20110525/gdb/utils.c 2011-05-25 17:13:13.000000000 +0200 -@@ -3003,10 +3003,12 @@ strcmp_iw (const char *string1, const ch - { - string2++; - } -- if (*string1 != *string2) -- { -- break; -- } -+ if (case_sensitivity == case_sensitive_on && *string1 != *string2) -+ break; -+ if (case_sensitivity == case_sensitive_off -+ && (tolower ((unsigned char) *string1) -+ != tolower ((unsigned char) *string2))) -+ break; - if (*string1 != '\0') - { - string1++; -@@ -3027,6 +3029,10 @@ strcmp_iw (const char *string1, const ch - strcmp_iw(LIST_ELT, NAME), then the place to start looking is right - where this function would put NAME. - -+ This function must be neutral to the CASE_SENSITIVITY setting as the user -+ may choose it during later lookup. Therefore this function always sorts -+ primarily case-insensitively and secondarily case-sensitively. -+ - Here are some examples of why using strcmp to sort is a bad idea: - - Whitespace example: -@@ -3052,8 +3058,10 @@ strcmp_iw (const char *string1, const ch - int - strcmp_iw_ordered (const char *string1, const char *string2) - { -- /* Formatting stub. */ -- if (1) -+ const char *saved_string1 = string1, *saved_string2 = string2; -+ enum case_sensitivity case_pass = case_sensitive_off; -+ -+ for (;;) - { - /* C1 and C2 are valid only if *string1 != '\0' && *string2 != '\0'. - Provide stub characters if we are already at the end of one of the -@@ -3067,8 +3075,17 @@ strcmp_iw_ordered (const char *string1, - while (isspace (*string2)) - string2++; - -+ switch (case_pass) -+ { -+ case case_sensitive_off: -+ c1 = tolower ((unsigned char) *string1); -+ c2 = tolower ((unsigned char) *string2); -+ break; -+ case case_sensitive_on: - c1 = *string1; - c2 = *string2; -+ break; -+ } - if (c1 != c2) - break; - -@@ -3086,7 +3103,7 @@ strcmp_iw_ordered (const char *string1, - comparison in the cases where one of them is '\0' or '('. */ - case '\0': - if (*string2 == '\0') -- return 0; -+ break; - else - return -1; - case '(': -@@ -3097,9 +3114,22 @@ strcmp_iw_ordered (const char *string1, - default: - if (*string2 == '\0' || *string2 == '(') - return 1; -- else -- return c1 - c2; -+ else if (c1 > c2) -+ return 1; -+ else if (c1 < c2) -+ return -1; -+ /* PASSTHRU */ - } -+ -+ if (case_pass == case_sensitive_on) -+ return 0; -+ -+ /* Otherwise the strings were equal in case insensitive way, make -+ a more fine grained comparison in a case sensitive way. */ -+ -+ case_pass = case_sensitive_on; -+ string1 = saved_string1; -+ string2 = saved_string2; - } - } - diff --git a/gdb-bz701131-readline62-1of3.patch b/gdb-bz701131-readline62-1of3.patch deleted file mode 100644 index 333bb2f..0000000 --- a/gdb-bz701131-readline62-1of3.patch +++ /dev/null @@ -1,21252 +0,0 @@ -archer-jankratochvil-readline62 -b13706abbee9646f4de522c0552ddd68d1a4f43a - -Index: gdb-7.2.90.20110703/gdb/config.in -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/config.in 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/gdb/config.in 2011-07-03 10:41:21.000000000 +0200 -@@ -953,9 +953,6 @@ - /* Define to `int' if does not define. */ - #undef pid_t - --/* readline-6.0 started to use different name. */ --#undef readline_echoing_p -- - /* Define to the equivalent of the C99 'restrict' keyword, or to - nothing if this is not supported. Do not define if restrict is - supported directly. */ -Index: gdb-7.2.90.20110703/gdb/configure -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/configure 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/gdb/configure 2011-07-03 10:41:21.000000000 +0200 -@@ -10235,39 +10235,6 @@ if test "$with_system_readline" = yes; t - READLINE_DEPS= - READLINE_CFLAGS= - READLINE_TEXI_INCFLAG= -- -- # readline-6.0 started to use the name `_rl_echoing_p'. -- # `$(READLINE_DIR)/' of bundled readline would not resolve in configure. -- -- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for readline_echoing_p" >&5 --$as_echo_n "checking for readline_echoing_p... " >&6; } -- save_LIBS=$LIBS -- LIBS="$LIBS $READLINE" -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext --/* end confdefs.h. */ -- --int --main () --{ --extern int readline_echoing_p; -- return readline_echoing_p; -- ; -- return 0; --} --_ACEOF --if ac_fn_c_try_link "$LINENO"; then : -- READLINE_ECHOING_P=yes --else -- READLINE_ECHOING_P=no -- --$as_echo "#define readline_echoing_p _rl_echoing_p" >>confdefs.h -- --fi --rm -f core conftest.err conftest.$ac_objext \ -- conftest$ac_exeext conftest.$ac_ext -- LIBS="$save_LIBS" -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READLINE_ECHOING_P" >&5 --$as_echo "$READLINE_ECHOING_P" >&6; } - else - READLINE='$(READLINE_DIR)/libreadline.a' - READLINE_DEPS='$(READLINE)' -Index: gdb-7.2.90.20110703/gdb/configure.ac -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/configure.ac 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/gdb/configure.ac 2011-07-03 10:41:21.000000000 +0200 -@@ -732,21 +732,6 @@ if test "$with_system_readline" = yes; t - READLINE_DEPS= - READLINE_CFLAGS= - READLINE_TEXI_INCFLAG= -- -- # readline-6.0 started to use the name `_rl_echoing_p'. -- # `$(READLINE_DIR)/' of bundled readline would not resolve in configure. -- -- AC_MSG_CHECKING([for readline_echoing_p]) -- save_LIBS=$LIBS -- LIBS="$LIBS $READLINE" -- AC_LINK_IFELSE(AC_LANG_PROGRAM(,[[extern int readline_echoing_p; -- return readline_echoing_p;]]), -- [READLINE_ECHOING_P=yes], -- [READLINE_ECHOING_P=no -- AC_DEFINE([readline_echoing_p], [_rl_echoing_p], -- [readline-6.0 started to use different name.])]) -- LIBS="$save_LIBS" -- AC_MSG_RESULT([$READLINE_ECHOING_P]) - else - READLINE='$(READLINE_DIR)/libreadline.a' - READLINE_DEPS='$(READLINE)' -Index: gdb-7.2.90.20110703/gdb/tui/tui-io.c -=================================================================== ---- gdb-7.2.90.20110703.orig/gdb/tui/tui-io.c 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/gdb/tui/tui-io.c 2011-07-03 10:41:21.000000000 +0200 -@@ -133,7 +133,7 @@ static Function *tui_old_rl_getc_functio - static VFunction *tui_old_rl_redisplay_function; - static VFunction *tui_old_rl_prep_terminal; - static VFunction *tui_old_rl_deprep_terminal; --static int tui_old_readline_echoing_p; -+static int tui_old_rl_echoing_p; - - /* Readline output stream. - Should be removed when readline is clean. */ -@@ -506,8 +506,8 @@ tui_rl_display_match_list (char **matche - void - tui_setup_io (int mode) - { -- extern int readline_echoing_p; -- -+ extern int _rl_echoing_p; -+ - if (mode) - { - /* Redirect readline to TUI. */ -@@ -516,12 +516,12 @@ tui_setup_io (int mode) - tui_old_rl_prep_terminal = rl_prep_term_function; - tui_old_rl_getc_function = rl_getc_function; - tui_old_rl_outstream = rl_outstream; -- tui_old_readline_echoing_p = readline_echoing_p; -+ tui_old_rl_echoing_p = _rl_echoing_p; - rl_redisplay_function = tui_redisplay_readline; - rl_deprep_term_function = tui_deprep_terminal; - rl_prep_term_function = tui_prep_terminal; - rl_getc_function = tui_getc; -- readline_echoing_p = 0; -+ _rl_echoing_p = 0; - rl_outstream = tui_rl_outstream; - rl_prompt = 0; - rl_completion_display_matches_hook = tui_rl_display_match_list; -@@ -560,7 +560,7 @@ tui_setup_io (int mode) - rl_getc_function = tui_old_rl_getc_function; - rl_outstream = tui_old_rl_outstream; - rl_completion_display_matches_hook = 0; -- readline_echoing_p = tui_old_readline_echoing_p; -+ _rl_echoing_p = tui_old_rl_echoing_p; - rl_already_prompted = 0; - - /* Save tty for SIGCONT. */ -Index: gdb-7.2.90.20110703/readline/CHANGELOG -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/CHANGELOG 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/CHANGELOG 2011-07-03 10:41:21.000000000 +0200 -@@ -918,3 +918,178 @@ configure.in - - changed release status to `release' - - [readline-5.1 frozen] -+ -+ 12/9 -+ ---- -+[readline-5.1 released] -+ -+ 12/14 -+ ----- -+examples/rlfe/Makefile.in -+ - add @LIBS@ to LIBS assignment to pick up extra libraries from -+ configure -+ -+ 1/3/2006 -+ -------- -+support/shlib-install -+ - Install shared libraries with execute bit set on Linux -+ -+ 6/9 -+ --- -+[readline-5.2-alpha frozen] -+ -+ 6/26 -+ ---- -+configure.in -+ - set CROSS_COMPILE to the empty string by default, so we don't inherit -+ a random value from the environment -+ -+ 7/8 -+ --- -+[readline-5.2-alpha released] -+ -+ -+[readline-5.2-beta released] -+ -+ 9/12 -+ ---- -+config.h.in -+ - add defines for wcscoll, iswctype, iswupper, iswlower, towupper, -+ towlower functions -+ - replace define for wctomb with one for wcrtomb -+ - add defines for wchar_t, wint_t, wctype_t types -+ -+ 10/11 -+ ----- -+[readline-5.2 released] -+ -+ 11/9 -+ ---- -+examples/rlfe/{configure.in,Makefile.in,config.h.in,rlfe.c,pty.c} -+ - portability fixes from Mike Frysinger -+ -+ 11/21 -+ ----- -+Makefile.in -+ - add `install-examples' and `uninstall-examples' targets -+ -+examples/Makefile.in -+ - add correct variables to build examples on Windows -+ - add appropriate rules to install and uninstall example sources in -+ $(datadir)/readline -+ -+ 11/27 -+ ----- -+config.h.in -+ - move #undef of HAVE_STRCOLL out of config.h.in, since autoconf tries -+ to substitute it based on configure tests -+ -+ 4/27/2007 -+ --------- -+examples/autoconf -+ - new directory with example autoconf macros to detect readline and -+ return information about the installed version -+ -+ 6/13 -+ ---- -+support/shlib-install -+ - changes to support AIX 5.x shared library installation -+ -+ 3/20/2008 -+ --------- -+support/shlib-install -+ - add support for NetBSD and Interix shared library installation -+ -+ 4/22 -+ ---- -+support/wcwidth.c -+ - updated implementation from 2007-05 -+ -+ 7/18 -+ ---- -+support/shlib-install -+ - support for mingw32, contributed by Carlo Bramix -+ -+ 8/4 -+ --- -+configure.in -+ - changed to readline-6.0 -+ -+ 8/18 -+ ---- -+support/config.{guess,sub} -+ - updated to newer versions from autoconf-2.62 distribution -+ -+ 3/5/2009 -+ -------- -+support/shlib-install -+ - take a new -V host_vendor argument -+ - add ${host_vendor} to string tested in case statement for symlink -+ creation section -+ - add support for FreeBSD/gentoo, which uses Linux library naming -+ scheme -+ - change FreeBSD symlink rules, since FreeBSD 7+ has only ELF shared -+ libraries. DragonflyBSD rules are the same. Fix from Timothy -+ Redaelli -+ -+shlib/Makefile.in -+ - add definition of host_vendor, substituted by configure -+ - add -V host_vendor argument to all invocations of shlib-install. -+ Fix from Timothy Redaelli -+ -+ 3/10 -+ ---- -+configure.in -+ - add call to AC_SYS_LARGEFILE for readdir and largefile support on -+ Linux -+ -+config.h.in -+ - add _FILE_OFFSET_BITS define -+ -+ 4/19 -+ ---- -+Makefile.in -+ - add targets for making and installing documentation required by GNU -+ coding standards. Fix from Joseph Myers -+ -+posixselect.h -+ - pick up from bash. Inspired by Mike Frysinger -+ -+ 10/28 -+ ----- -+support/shlib-install -+ - decrease the default version of FreeBSD that installs shared libraries -+ to 4.x. Advice from Peter Jeremy -+ -+ 12/18 -+ ----- -+[readline-6.1-rc1 released] -+ -+ 12/23 -+ ----- -+doc/Makefile.in -+ - make sure $(topdir) is not ".." before removing all of the formatted -+ documentation in `make distclean'. $(topdir) is set to `..' if -+ readline is being built in the source directory. Fixes problem -+ noticed by THOUMIN Damien -+ -+ 12/29 -+ ----- -+[readline-6.1 frozen] -+ -+ 2/5/2010 -+ -------- -+examples/Makefile.in -+ - make sure to install example C files using $(srcdir)/$$f in case -+ we're building outside the source directory. Bug report and fix -+ from Peter Breitenlohner -+ -+ 7/25 -+ ---- -+xfree.c -+ - new file with xfree() implementation, moved from xmalloc.c -+ -+ 12/28 -+ ----- -+{examples,shlib}/Makefile.in -+ - Cygwin-based changes from Eric Blake -Index: gdb-7.2.90.20110703/readline/CHANGES -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/CHANGES 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/CHANGES 2011-07-03 10:41:21.000000000 +0200 -@@ -1,3 +1,320 @@ -+This document details the changes between this version, readline-6.2, -+and the previous version, readline-6.1. -+ -+1. Changes to Readline -+ -+a. Fixed a bug that caused the unconverted filename to be added to the list of -+ completions when the application specified filename conversion functions. -+ -+b. Fixed a bug that caused the wrong filename to be passed to opendir when the -+ application has specified a filename dequoting function. -+ -+c. Fixed a bug when repeating a character search in vi mode in the case where -+ there was no search to repeat. -+ -+d. When show-all-if-ambiguous is set, the completion routines no longer insert -+ a common match prefix that is shorter than the text being completed. -+ -+e. The full set of vi editing commands may now be used in callback mode. -+ -+f. Fixed a bug that caused readline to not update its idea of the terminal -+ dimensions while running in `no-echo' mode. -+ -+h. Fixed a bug that caused readline to dump core if an application called -+ rl_prep_terminal without setting rl_instream. -+ -+i. Fixed a bug that caused meta-prefixed characters bound to incremental -+ search forward or backward to not be recognized if they were typed -+ subsequently. -+ -+j. The incremental search code treats key sequences that map to the same -+ functions as (default) ^G, ^W, and ^Y as equivalent to those characters. -+ -+k. Fixed a bug in menu-complete that caused it to misbehave with large -+ negative argument. -+ -+l. Fixed a bug that caused vi-mode yank-last-arg to ring the bell when invoked -+ at the end of the line. -+ -+m. Fixed a bug that made an explicit argument of 0 to yank-last-arg behave -+ as if it were a negative argument. -+ -+n. Fixed a bug that caused directory names in words to be completed to not -+ be dequoted correctly. -+ -+2. New Features in Readline -+ -+a. The history library does not try to write the history filename in the -+ current directory if $HOME is unset. This closes a potential security -+ problem if the application does not specify a history filename. -+ -+b. New bindable variable `completion-display-width' to set the number of -+ columns used when displaying completions. -+ -+c. New bindable variable `completion-case-map' to cause case-insensitive -+ completion to treat `-' and `_' as identical. -+ -+d. There are new bindable vi-mode command names to avoid readline's case- -+ insensitive matching not allowing them to be bound separately. -+ -+e. New bindable variable `menu-complete-display-prefix' causes the menu -+ completion code to display the common prefix of the possible completions -+ before cycling through the list, instead of after. -+ -+------------------------------------------------------------------------------- -+This document details the changes between this version, readline-6.1, -+and the previous version, readline-6.0. -+ -+1. Changes to Readline -+ -+a. The SIGWINCH signal handler now avoids calling the redisplay code if -+ one arrives while in the middle of redisplay. -+ -+b. Changes to the timeout code to make sure that timeout values greater -+ than one second are handled better. -+ -+c. Fixed a bug in the redisplay code that was triggered by a prompt -+ containing invisible characters exactly the width of the screen. -+ -+d. Fixed a bug in the redisplay code encountered when running in horizontal -+ scroll mode. -+ -+e. Fixed a bug that prevented menu completion from properly completing -+ filenames. -+ -+f. Fixed a redisplay bug caused by a multibyte character causing a line to -+ wrap. -+ -+g. Fixed a bug that caused key sequences of two characters to not be -+ recognized when a longer sequence identical in the first two characters -+ was bound. -+ -+h. Fixed a bug that caused history expansion to be attempted on $'...' -+ single-quoted strings. -+ -+i. Fixed a bug that caused incorrect redisplay when the prompt contained -+ multibyte characters in an `invisible' sequence bracketed by \[ and -+ \]. -+ -+j. Fixed a bug that caused history expansion to short-circuit after -+ encountering a multibyte character. -+ -+k. Fixed a bug that caused applications using the callback interface to not -+ react to SIGINT (or other signals) until another character arrived. -+ -+2. New Features in Readline -+ -+a. New bindable function: menu-complete-backward. -+ -+b. In the vi insertion keymap, C-n is now bound to menu-complete by default, -+ and C-p to menu-complete-backward. -+ -+c. When in vi command mode, repeatedly hitting ESC now does nothing, even -+ when ESC introduces a bound key sequence. This is closer to how -+ historical vi behaves. -+ -+d. New bindable function: skip-csi-sequence. Can be used as a default to -+ consume key sequences generated by keys like Home and End without having -+ to bind all keys. -+ -+e. New application-settable function: rl_filename_rewrite_hook. Can be used -+ to rewite or modify filenames read from the file system before they are -+ compared to the word to be completed. -+ -+f. New bindable variable: skip-completed-text, active when completing in the -+ middle of a word. If enabled, it means that characters in the completion -+ that match characters in the remainder of the word are "skipped" rather -+ than inserted into the line. -+ -+g. The pre-readline-6.0 version of menu completion is available as -+ "old-menu-complete" for users who do not like the readline-6.0 version. -+ -+h. New bindable variable: echo-control-characters. If enabled, and the -+ tty ECHOCTL bit is set, controls the echoing of characters corresponding -+ to keyboard-generated signals. -+ -+i. New bindable variable: enable-meta-key. Controls whether or not readline -+ sends the smm/rmm sequences if the terminal indicates it has a meta key -+ that enables eight-bit characters. -+ -+------------------------------------------------------------------------------- -+This document details the changes between this version, readline-6.0, -+and the previous version, readline-5.2. -+ -+1. Changes to Readline -+ -+a. Fixed a number of redisplay errors in environments supporting multibyte -+ characters. -+ -+b. Fixed bugs in vi command mode that caused motion commands to inappropriately -+ set the mark. -+ -+c. When using the arrow keys in vi insertion mode, readline allows movement -+ beyond the current end of the line (unlike command mode). -+ -+d. Fixed bugs that caused readline to loop when the terminal has been taken -+ away and reads return -1/EIO. -+ -+e. Fixed bugs in redisplay occurring when displaying prompts containing -+ invisible characters. -+ -+f. Fixed a bug that caused the completion append character to not be reset to -+ the default after an application-specified completion function changed it. -+ -+g. Fixed a problem that caused incorrect positioning of the cursor while in -+ emacs editing mode when moving forward at the end of a line while using -+ a locale supporting multibyte characters. -+ -+h. Fixed an off-by-one error that caused readline to drop every 511th -+ character of buffered input. -+ -+i. Fixed a bug that resulted in SIGTERM not being caught or cleaned up. -+ -+j. Fixed redisplay bugs caused by multiline prompts with invisible characters -+ or no characters following the final newline. -+ -+k. Fixed redisplay bug caused by prompts consisting solely of invisible -+ characters. -+ -+l. Fixed a bug in the code that buffers characters received very quickly in -+ succession which caused characters to be dropped. -+ -+m. Fixed a bug that caused readline to reference uninitialized data structures -+ if it received a SIGWINCH before completing initialzation. -+ -+n. Fixed a bug that caused the vi-mode `last command' to be set incorrectly -+ and therefore unrepeatable. -+ -+o. Fixed a bug that caused readline to disable echoing when it was being used -+ with an output file descriptor that was not a terminal. -+ -+p. Readline now blocks SIGINT while manipulating internal data structures -+ during redisplay. -+ -+q. Fixed a bug in redisplay that caused readline to segfault when pasting a -+ very long line (over 130,000 characters). -+ -+r. Fixed bugs in redisplay when using prompts with no visible printing -+ characters. -+ -+s. Fixed a bug that caused redisplay errors when using prompts with invisible -+ characters and numeric arguments to a command in a multibyte locale. -+ -+t. Fixed a bug that caused redisplay errors when using prompts with invisible -+ characters spanning more than two physical screen lines. -+ -+2. New Features in Readline -+ -+a. A new variable, rl_sort_completion_matches; allows applications to inhibit -+ match list sorting (but beware: some things don't work right if -+ applications do this). -+ -+b. A new variable, rl_completion_invoking_key; allows applications to discover -+ the key that invoked rl_complete or rl_menu_complete. -+ -+c. The functions rl_block_sigint and rl_release_sigint are now public and -+ available to calling applications who want to protect critical sections -+ (like redisplay). -+ -+d. The functions rl_save_state and rl_restore_state are now public and -+ available to calling applications; documented rest of readline's state -+ flag values. -+ -+e. A new user-settable variable, `history-size', allows setting the maximum -+ number of entries in the history list. -+ -+f. There is a new implementation of menu completion, with several improvements -+ over the old; the most notable improvement is a better `completions -+ browsing' mode. -+ -+g. The menu completion code now uses the rl_menu_completion_entry_function -+ variable, allowing applications to provide their own menu completion -+ generators. -+ -+h. There is support for replacing a prefix of a pathname with a `...' when -+ displaying possible completions. This is controllable by setting the -+ `completion-prefix-display-length' variable. Matches with a common prefix -+ longer than this value have the common prefix replaced with `...'. -+ -+i. There is a new `revert-all-at-newline' variable. If enabled, readline will -+ undo all outstanding changes to all history lines when `accept-line' is -+ executed. -+ -+------------------------------------------------------------------------------- -+This document details the changes between this version, readline-5.2, -+and the previous version, readline-5.1. -+ -+1. Changes to Readline -+ -+a. Fixed a problem that caused segmentation faults when using readline in -+ callback mode and typing consecutive DEL characters on an empty line. -+ -+b. Fixed several redisplay problems with multibyte characters, all having to -+ do with the different code paths and variable meanings between single-byte -+ and multibyte character redisplay. -+ -+c. Fixed a problem with key sequence translation when presented with the -+ sequence \M-\C-x. -+ -+d. Fixed a problem that prevented the `a' command in vi mode from being -+ undone and redone properly. -+ -+e. Fixed a problem that prevented empty inserts in vi mode from being undone -+ properly. -+ -+f. Fixed a problem that caused readline to initialize with an incorrect idea -+ of whether or not the terminal can autowrap. -+ -+g. Fixed output of key bindings (like bash `bind -p') to honor the setting of -+ convert-meta and use \e where appropriate. -+ -+h. Changed the default filename completion function to call the filename -+ dequoting function if the directory completion hook isn't set. This means -+ that any directory completion hooks need to dequote the directory name, -+ since application-specific hooks need to know how the word was quoted, -+ even if no other changes are made. -+ -+i. Fixed a bug with creating the prompt for a non-interactive search string -+ when there are non-printing characters in the primary prompt. -+ -+j. Fixed a bug that caused prompts with invisible characters to be redrawn -+ multiple times in a multibyte locale. -+ -+k. Fixed a bug that could cause the key sequence scanning code to return the -+ wrong function. -+ -+l. Fixed a problem with the callback interface that caused it to fail when -+ using multi-character keyboard macros. -+ -+m. Fixed a bug that could cause a core dump when an edited history entry was -+ re-executed under certain conditions. -+ -+n. Fixed a bug that caused readline to reference freed memory when attmpting -+ to display a portion of the prompt. -+ -+o. Fixed a bug with prompt redisplay in a multi-byte locale to avoid redrawing -+ the prompt and input line multiple times. -+ -+p. Fixed history expansion to not be confused by here-string redirection. -+ -+q. Readline no longer treats read errors by converting them to newlines, as -+ it does with EOF. This caused partial lines to be returned from readline(). -+ -+r. Fixed a redisplay bug that occurred in multibyte-capable locales when the -+ prompt was one character longer than the screen width. -+ -+2. New Features in Readline -+ -+a. Calling applications can now set the keyboard timeout to 0, allowing -+ poll-like behavior. -+ -+b. The value of SYS_INPUTRC (configurable at compilation time) is now used as -+ the default last-ditch startup file. -+ -+c. The history file reading functions now allow windows-like \r\n line -+ terminators. -+ -+------------------------------------------------------------------------------- - This document details the changes between this version, readline-5.1, - and the previous version, readline-5.0. - -Index: gdb-7.2.90.20110703/readline/COPYING -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/COPYING 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/COPYING 2011-07-03 10:41:21.000000000 +0200 -@@ -1,285 +1,626 @@ -- GNU GENERAL PUBLIC LICENSE -- Version 2, June 1991 -+ GNU GENERAL PUBLIC LICENSE -+ Version 3, 29 June 2007 - -- Copyright (C) 1989, 1991 Free Software Foundation, Inc. -- 59 Temple Place, Suite 330, Boston, MA 02111 USA -+ Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -- Preamble -+ Preamble - -- The licenses for most software are designed to take away your --freedom to share and change it. By contrast, the GNU General Public --License is intended to guarantee your freedom to share and change free --software--to make sure the software is free for all its users. This --General Public License applies to most of the Free Software --Foundation's software and to any other program whose authors commit to --using it. (Some other Free Software Foundation software is covered by --the GNU Library General Public License instead.) You can apply it to -+ The GNU General Public License is a free, copyleft license for -+software and other kinds of works. -+ -+ The licenses for most software and other practical works are designed -+to take away your freedom to share and change the works. By contrast, -+the GNU General Public License is intended to guarantee your freedom to -+share and change all versions of a program--to make sure it remains free -+software for all its users. We, the Free Software Foundation, use the -+GNU General Public License for most of our software; it applies also to -+any other work released this way by its authors. You can apply it to - your programs, too. - - When we speak of free software, we are referring to freedom, not - price. Our General Public Licenses are designed to make sure that you - have the freedom to distribute copies of free software (and charge for --this service if you wish), that you receive source code or can get it --if you want it, that you can change the software or use pieces of it --in new free programs; and that you know you can do these things. -- -- To protect your rights, we need to make restrictions that forbid --anyone to deny you these rights or to ask you to surrender the rights. --These restrictions translate to certain responsibilities for you if you --distribute copies of the software, or if you modify it. -+them if you wish), that you receive source code or can get it if you -+want it, that you can change the software or use pieces of it in new -+free programs, and that you know you can do these things. -+ -+ To protect your rights, we need to prevent others from denying you -+these rights or asking you to surrender the rights. Therefore, you have -+certain responsibilities if you distribute copies of the software, or if -+you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether --gratis or for a fee, you must give the recipients all the rights that --you have. You must make sure that they, too, receive or can get the --source code. And you must show them these terms so they know their --rights. -- -- We protect your rights with two steps: (1) copyright the software, and --(2) offer you this license which gives you legal permission to copy, --distribute and/or modify the software. -- -- Also, for each author's protection and ours, we want to make certain --that everyone understands that there is no warranty for this free --software. If the software is modified by someone else and passed on, we --want its recipients to know that what they have is not the original, so --that any problems introduced by others will not reflect on the original --authors' reputations. -- -- Finally, any free program is threatened constantly by software --patents. We wish to avoid the danger that redistributors of a free --program will individually obtain patent licenses, in effect making the --program proprietary. To prevent this, we have made it clear that any --patent must be licensed for everyone's free use or not licensed at all. -+gratis or for a fee, you must pass on to the recipients the same -+freedoms that you received. You must make sure that they, too, receive -+or can get the source code. And you must show them these terms so they -+know their rights. -+ -+ Developers that use the GNU GPL protect your rights with two steps: -+(1) assert copyright on the software, and (2) offer you this License -+giving you legal permission to copy, distribute and/or modify it. -+ -+ For the developers' and authors' protection, the GPL clearly explains -+that there is no warranty for this free software. For both users' and -+authors' sake, the GPL requires that modified versions be marked as -+changed, so that their problems will not be attributed erroneously to -+authors of previous versions. -+ -+ Some devices are designed to deny users access to install or run -+modified versions of the software inside them, although the manufacturer -+can do so. This is fundamentally incompatible with the aim of -+protecting users' freedom to change the software. The systematic -+pattern of such abuse occurs in the area of products for individuals to -+use, which is precisely where it is most unacceptable. Therefore, we -+have designed this version of the GPL to prohibit the practice for those -+products. If such problems arise substantially in other domains, we -+stand ready to extend this provision to those domains in future versions -+of the GPL, as needed to protect the freedom of users. -+ -+ Finally, every program is threatened constantly by software patents. -+States should not allow patents to restrict development and use of -+software on general-purpose computers, but in those that do, we wish to -+avoid the special danger that patents applied to a free program could -+make it effectively proprietary. To prevent this, the GPL assures that -+patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and - modification follow. -- -- GNU GENERAL PUBLIC LICENSE -- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION -- -- 0. This License applies to any program or other work which contains --a notice placed by the copyright holder saying it may be distributed --under the terms of this General Public License. The "Program", below, --refers to any such program or work, and a "work based on the Program" --means either the Program or any derivative work under copyright law: --that is to say, a work containing the Program or a portion of it, --either verbatim or with modifications and/or translated into another --language. (Hereinafter, translation is included without limitation in --the term "modification".) Each licensee is addressed as "you". -- --Activities other than copying, distribution and modification are not --covered by this License; they are outside its scope. The act of --running the Program is not restricted, and the output from the Program --is covered only if its contents constitute a work based on the --Program (independent of having been made by running the Program). --Whether that is true depends on what the Program does. -- -- 1. You may copy and distribute verbatim copies of the Program's --source code as you receive it, in any medium, provided that you --conspicuously and appropriately publish on each copy an appropriate --copyright notice and disclaimer of warranty; keep intact all the --notices that refer to this License and to the absence of any warranty; --and give any other recipients of the Program a copy of this License --along with the Program. -- --You may charge a fee for the physical act of transferring a copy, and --you may at your option offer warranty protection in exchange for a fee. -- -- 2. You may modify your copy or copies of the Program or any portion --of it, thus forming a work based on the Program, and copy and --distribute such modifications or work under the terms of Section 1 --above, provided that you also meet all of these conditions: -- -- a) You must cause the modified files to carry prominent notices -- stating that you changed the files and the date of any change. -- -- b) You must cause any work that you distribute or publish, that in -- whole or in part contains or is derived from the Program or any -- part thereof, to be licensed as a whole at no charge to all third -- parties under the terms of this License. -- -- c) If the modified program normally reads commands interactively -- when run, you must cause it, when started running for such -- interactive use in the most ordinary way, to print or display an -- announcement including an appropriate copyright notice and a -- notice that there is no warranty (or else, saying that you provide -- a warranty) and that users may redistribute the program under -- these conditions, and telling the user how to view a copy of this -- License. (Exception: if the Program itself is interactive but -- does not normally print such an announcement, your work based on -- the Program is not required to print an announcement.) -- --These requirements apply to the modified work as a whole. If --identifiable sections of that work are not derived from the Program, --and can be reasonably considered independent and separate works in --themselves, then this License, and its terms, do not apply to those --sections when you distribute them as separate works. But when you --distribute the same sections as part of a whole which is a work based --on the Program, the distribution of the whole must be on the terms of --this License, whose permissions for other licensees extend to the --entire whole, and thus to each and every part regardless of who wrote it. -- --Thus, it is not the intent of this section to claim rights or contest --your rights to work written entirely by you; rather, the intent is to --exercise the right to control the distribution of derivative or --collective works based on the Program. -- --In addition, mere aggregation of another work not based on the Program --with the Program (or with a work based on the Program) on a volume of --a storage or distribution medium does not bring the other work under --the scope of this License. -- -- 3. You may copy and distribute the Program (or a work based on it, --under Section 2) in object code or executable form under the terms of --Sections 1 and 2 above provided that you also do one of the following: -- -- a) Accompany it with the complete corresponding machine-readable -- source code, which must be distributed under the terms of Sections -- 1 and 2 above on a medium customarily used for software interchange; or, -- -- b) Accompany it with a written offer, valid for at least three -- years, to give any third party, for a charge no more than your -- cost of physically performing source distribution, a complete -- machine-readable copy of the corresponding source code, to be -- distributed under the terms of Sections 1 and 2 above on a medium -- customarily used for software interchange; or, -- -- c) Accompany it with the information you received as to the offer -- to distribute corresponding source code. (This alternative is -- allowed only for noncommercial distribution and only if you -- received the program in object code or executable form with such -- an offer, in accord with Subsection b above.) -- --The source code for a work means the preferred form of the work for --making modifications to it. For an executable work, complete source --code means all the source code for all modules it contains, plus any --associated interface definition files, plus the scripts used to --control compilation and installation of the executable. However, as a --special exception, the source code distributed need not include --anything that is normally distributed (in either source or binary --form) with the major components (compiler, kernel, and so on) of the --operating system on which the executable runs, unless that component --itself accompanies the executable. -- --If distribution of executable or object code is made by offering --access to copy from a designated place, then offering equivalent --access to copy the source code from the same place counts as --distribution of the source code, even though third parties are not --compelled to copy the source along with the object code. -- -- 4. You may not copy, modify, sublicense, or distribute the Program --except as expressly provided under this License. Any attempt --otherwise to copy, modify, sublicense or distribute the Program is --void, and will automatically terminate your rights under this License. --However, parties who have received copies, or rights, from you under --this License will not have their licenses terminated so long as such --parties remain in full compliance. -- -- 5. You are not required to accept this License, since you have not --signed it. However, nothing else grants you permission to modify or --distribute the Program or its derivative works. These actions are --prohibited by law if you do not accept this License. Therefore, by --modifying or distributing the Program (or any work based on the --Program), you indicate your acceptance of this License to do so, and --all its terms and conditions for copying, distributing or modifying --the Program or works based on it. -- -- 6. Each time you redistribute the Program (or any work based on the --Program), the recipient automatically receives a license from the --original licensor to copy, distribute or modify the Program subject to --these terms and conditions. You may not impose any further --restrictions on the recipients' exercise of the rights granted herein. --You are not responsible for enforcing compliance by third parties to -+ -+ TERMS AND CONDITIONS -+ -+ 0. Definitions. -+ -+ "This License" refers to version 3 of the GNU General Public License. -+ -+ "Copyright" also means copyright-like laws that apply to other kinds of -+works, such as semiconductor masks. -+ -+ "The Program" refers to any copyrightable work licensed under this -+License. Each licensee is addressed as "you". "Licensees" and -+"recipients" may be individuals or organizations. -+ -+ To "modify" a work means to copy from or adapt all or part of the work -+in a fashion requiring copyright permission, other than the making of an -+exact copy. The resulting work is called a "modified version" of the -+earlier work or a work "based on" the earlier work. -+ -+ A "covered work" means either the unmodified Program or a work based -+on the Program. -+ -+ To "propagate" a work means to do anything with it that, without -+permission, would make you directly or secondarily liable for -+infringement under applicable copyright law, except executing it on a -+computer or modifying a private copy. Propagation includes copying, -+distribution (with or without modification), making available to the -+public, and in some countries other activities as well. -+ -+ To "convey" a work means any kind of propagation that enables other -+parties to make or receive copies. Mere interaction with a user through -+a computer network, with no transfer of a copy, is not conveying. -+ -+ An interactive user interface displays "Appropriate Legal Notices" -+to the extent that it includes a convenient and prominently visible -+feature that (1) displays an appropriate copyright notice, and (2) -+tells the user that there is no warranty for the work (except to the -+extent that warranties are provided), that licensees may convey the -+work under this License, and how to view a copy of this License. If -+the interface presents a list of user commands or options, such as a -+menu, a prominent item in the list meets this criterion. -+ -+ 1. Source Code. -+ -+ The "source code" for a work means the preferred form of the work -+for making modifications to it. "Object code" means any non-source -+form of a work. -+ -+ A "Standard Interface" means an interface that either is an official -+standard defined by a recognized standards body, or, in the case of -+interfaces specified for a particular programming language, one that -+is widely used among developers working in that language. -+ -+ The "System Libraries" of an executable work include anything, other -+than the work as a whole, that (a) is included in the normal form of -+packaging a Major Component, but which is not part of that Major -+Component, and (b) serves only to enable use of the work with that -+Major Component, or to implement a Standard Interface for which an -+implementation is available to the public in source code form. A -+"Major Component", in this context, means a major essential component -+(kernel, window system, and so on) of the specific operating system -+(if any) on which the executable work runs, or a compiler used to -+produce the work, or an object code interpreter used to run it. -+ -+ The "Corresponding Source" for a work in object code form means all -+the source code needed to generate, install, and (for an executable -+work) run the object code and to modify the work, including scripts to -+control those activities. However, it does not include the work's -+System Libraries, or general-purpose tools or generally available free -+programs which are used unmodified in performing those activities but -+which are not part of the work. For example, Corresponding Source -+includes interface definition files associated with source files for -+the work, and the source code for shared libraries and dynamically -+linked subprograms that the work is specifically designed to require, -+such as by intimate data communication or control flow between those -+subprograms and other parts of the work. -+ -+ The Corresponding Source need not include anything that users -+can regenerate automatically from other parts of the Corresponding -+Source. -+ -+ The Corresponding Source for a work in source code form is that -+same work. -+ -+ 2. Basic Permissions. -+ -+ All rights granted under this License are granted for the term of -+copyright on the Program, and are irrevocable provided the stated -+conditions are met. This License explicitly affirms your unlimited -+permission to run the unmodified Program. The output from running a -+covered work is covered by this License only if the output, given its -+content, constitutes a covered work. This License acknowledges your -+rights of fair use or other equivalent, as provided by copyright law. -+ -+ You may make, run and propagate covered works that you do not -+convey, without conditions so long as your license otherwise remains -+in force. You may convey covered works to others for the sole purpose -+of having them make modifications exclusively for you, or provide you -+with facilities for running those works, provided that you comply with -+the terms of this License in conveying all material for which you do -+not control copyright. Those thus making or running the covered works -+for you must do so exclusively on your behalf, under your direction -+and control, on terms that prohibit them from making any copies of -+your copyrighted material outside their relationship with you. -+ -+ Conveying under any other circumstances is permitted solely under -+the conditions stated below. Sublicensing is not allowed; section 10 -+makes it unnecessary. -+ -+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law. -+ -+ No covered work shall be deemed part of an effective technological -+measure under any applicable law fulfilling obligations under article -+11 of the WIPO copyright treaty adopted on 20 December 1996, or -+similar laws prohibiting or restricting circumvention of such -+measures. -+ -+ When you convey a covered work, you waive any legal power to forbid -+circumvention of technological measures to the extent such circumvention -+is effected by exercising rights under this License with respect to -+the covered work, and you disclaim any intention to limit operation or -+modification of the work as a means of enforcing, against the work's -+users, your or third parties' legal rights to forbid circumvention of -+technological measures. -+ -+ 4. Conveying Verbatim Copies. -+ -+ You may convey verbatim copies of the Program's source code as you -+receive it, in any medium, provided that you conspicuously and -+appropriately publish on each copy an appropriate copyright notice; -+keep intact all notices stating that this License and any -+non-permissive terms added in accord with section 7 apply to the code; -+keep intact all notices of the absence of any warranty; and give all -+recipients a copy of this License along with the Program. -+ -+ You may charge any price or no price for each copy that you convey, -+and you may offer support or warranty protection for a fee. -+ -+ 5. Conveying Modified Source Versions. -+ -+ You may convey a work based on the Program, or the modifications to -+produce it from the Program, in the form of source code under the -+terms of section 4, provided that you also meet all of these conditions: -+ -+ a) The work must carry prominent notices stating that you modified -+ it, and giving a relevant date. -+ -+ b) The work must carry prominent notices stating that it is -+ released under this License and any conditions added under section -+ 7. This requirement modifies the requirement in section 4 to -+ "keep intact all notices". -+ -+ c) You must license the entire work, as a whole, under this -+ License to anyone who comes into possession of a copy. This -+ License will therefore apply, along with any applicable section 7 -+ additional terms, to the whole of the work, and all its parts, -+ regardless of how they are packaged. This License gives no -+ permission to license the work in any other way, but it does not -+ invalidate such permission if you have separately received it. -+ -+ d) If the work has interactive user interfaces, each must display -+ Appropriate Legal Notices; however, if the Program has interactive -+ interfaces that do not display Appropriate Legal Notices, your -+ work need not make them do so. -+ -+ A compilation of a covered work with other separate and independent -+works, which are not by their nature extensions of the covered work, -+and which are not combined with it such as to form a larger program, -+in or on a volume of a storage or distribution medium, is called an -+"aggregate" if the compilation and its resulting copyright are not -+used to limit the access or legal rights of the compilation's users -+beyond what the individual works permit. Inclusion of a covered work -+in an aggregate does not cause this License to apply to the other -+parts of the aggregate. -+ -+ 6. Conveying Non-Source Forms. -+ -+ You may convey a covered work in object code form under the terms -+of sections 4 and 5, provided that you also convey the -+machine-readable Corresponding Source under the terms of this License, -+in one of these ways: -+ -+ a) Convey the object code in, or embodied in, a physical product -+ (including a physical distribution medium), accompanied by the -+ Corresponding Source fixed on a durable physical medium -+ customarily used for software interchange. -+ -+ b) Convey the object code in, or embodied in, a physical product -+ (including a physical distribution medium), accompanied by a -+ written offer, valid for at least three years and valid for as -+ long as you offer spare parts or customer support for that product -+ model, to give anyone who possesses the object code either (1) a -+ copy of the Corresponding Source for all the software in the -+ product that is covered by this License, on a durable physical -+ medium customarily used for software interchange, for a price no -+ more than your reasonable cost of physically performing this -+ conveying of source, or (2) access to copy the -+ Corresponding Source from a network server at no charge. -+ -+ c) Convey individual copies of the object code with a copy of the -+ written offer to provide the Corresponding Source. This -+ alternative is allowed only occasionally and noncommercially, and -+ only if you received the object code with such an offer, in accord -+ with subsection 6b. -+ -+ d) Convey the object code by offering access from a designated -+ place (gratis or for a charge), and offer equivalent access to the -+ Corresponding Source in the same way through the same place at no -+ further charge. You need not require recipients to copy the -+ Corresponding Source along with the object code. If the place to -+ copy the object code is a network server, the Corresponding Source -+ may be on a different server (operated by you or a third party) -+ that supports equivalent copying facilities, provided you maintain -+ clear directions next to the object code saying where to find the -+ Corresponding Source. Regardless of what server hosts the -+ Corresponding Source, you remain obligated to ensure that it is -+ available for as long as needed to satisfy these requirements. -+ -+ e) Convey the object code using peer-to-peer transmission, provided -+ you inform other peers where the object code and Corresponding -+ Source of the work are being offered to the general public at no -+ charge under subsection 6d. -+ -+ A separable portion of the object code, whose source code is excluded -+from the Corresponding Source as a System Library, need not be -+included in conveying the object code work. -+ -+ A "User Product" is either (1) a "consumer product", which means any -+tangible personal property which is normally used for personal, family, -+or household purposes, or (2) anything designed or sold for incorporation -+into a dwelling. In determining whether a product is a consumer product, -+doubtful cases shall be resolved in favor of coverage. For a particular -+product received by a particular user, "normally used" refers to a -+typical or common use of that class of product, regardless of the status -+of the particular user or of the way in which the particular user -+actually uses, or expects or is expected to use, the product. A product -+is a consumer product regardless of whether the product has substantial -+commercial, industrial or non-consumer uses, unless such uses represent -+the only significant mode of use of the product. -+ -+ "Installation Information" for a User Product means any methods, -+procedures, authorization keys, or other information required to install -+and execute modified versions of a covered work in that User Product from -+a modified version of its Corresponding Source. The information must -+suffice to ensure that the continued functioning of the modified object -+code is in no case prevented or interfered with solely because -+modification has been made. -+ -+ If you convey an object code work under this section in, or with, or -+specifically for use in, a User Product, and the conveying occurs as -+part of a transaction in which the right of possession and use of the -+User Product is transferred to the recipient in perpetuity or for a -+fixed term (regardless of how the transaction is characterized), the -+Corresponding Source conveyed under this section must be accompanied -+by the Installation Information. But this requirement does not apply -+if neither you nor any third party retains the ability to install -+modified object code on the User Product (for example, the work has -+been installed in ROM). -+ -+ The requirement to provide Installation Information does not include a -+requirement to continue to provide support service, warranty, or updates -+for a work that has been modified or installed by the recipient, or for -+the User Product in which it has been modified or installed. Access to a -+network may be denied when the modification itself materially and -+adversely affects the operation of the network or violates the rules and -+protocols for communication across the network. -+ -+ Corresponding Source conveyed, and Installation Information provided, -+in accord with this section must be in a format that is publicly -+documented (and with an implementation available to the public in -+source code form), and must require no special password or key for -+unpacking, reading or copying. -+ -+ 7. Additional Terms. -+ -+ "Additional permissions" are terms that supplement the terms of this -+License by making exceptions from one or more of its conditions. -+Additional permissions that are applicable to the entire Program shall -+be treated as though they were included in this License, to the extent -+that they are valid under applicable law. If additional permissions -+apply only to part of the Program, that part may be used separately -+under those permissions, but the entire Program remains governed by -+this License without regard to the additional permissions. -+ -+ When you convey a copy of a covered work, you may at your option -+remove any additional permissions from that copy, or from any part of -+it. (Additional permissions may be written to require their own -+removal in certain cases when you modify the work.) You may place -+additional permissions on material, added by you to a covered work, -+for which you have or can give appropriate copyright permission. -+ -+ Notwithstanding any other provision of this License, for material you -+add to a covered work, you may (if authorized by the copyright holders of -+that material) supplement the terms of this License with terms: -+ -+ a) Disclaiming warranty or limiting liability differently from the -+ terms of sections 15 and 16 of this License; or -+ -+ b) Requiring preservation of specified reasonable legal notices or -+ author attributions in that material or in the Appropriate Legal -+ Notices displayed by works containing it; or -+ -+ c) Prohibiting misrepresentation of the origin of that material, or -+ requiring that modified versions of such material be marked in -+ reasonable ways as different from the original version; or -+ -+ d) Limiting the use for publicity purposes of names of licensors or -+ authors of the material; or -+ -+ e) Declining to grant rights under trademark law for use of some -+ trade names, trademarks, or service marks; or -+ -+ f) Requiring indemnification of licensors and authors of that -+ material by anyone who conveys the material (or modified versions of -+ it) with contractual assumptions of liability to the recipient, for -+ any liability that these contractual assumptions directly impose on -+ those licensors and authors. -+ -+ All other non-permissive additional terms are considered "further -+restrictions" within the meaning of section 10. If the Program as you -+received it, or any part of it, contains a notice stating that it is -+governed by this License along with a term that is a further -+restriction, you may remove that term. If a license document contains -+a further restriction but permits relicensing or conveying under this -+License, you may add to a covered work material governed by the terms -+of that license document, provided that the further restriction does -+not survive such relicensing or conveying. -+ -+ If you add terms to a covered work in accord with this section, you -+must place, in the relevant source files, a statement of the -+additional terms that apply to those files, or a notice indicating -+where to find the applicable terms. -+ -+ Additional terms, permissive or non-permissive, may be stated in the -+form of a separately written license, or stated as exceptions; -+the above requirements apply either way. -+ -+ 8. Termination. -+ -+ You may not propagate or modify a covered work except as expressly -+provided under this License. Any attempt otherwise to propagate or -+modify it is void, and will automatically terminate your rights under -+this License (including any patent licenses granted under the third -+paragraph of section 11). -+ -+ However, if you cease all violation of this License, then your -+license from a particular copyright holder is reinstated (a) -+provisionally, unless and until the copyright holder explicitly and -+finally terminates your license, and (b) permanently, if the copyright -+holder fails to notify you of the violation by some reasonable means -+prior to 60 days after the cessation. -+ -+ Moreover, your license from a particular copyright holder is -+reinstated permanently if the copyright holder notifies you of the -+violation by some reasonable means, this is the first time you have -+received notice of violation of this License (for any work) from that -+copyright holder, and you cure the violation prior to 30 days after -+your receipt of the notice. -+ -+ Termination of your rights under this section does not terminate the -+licenses of parties who have received copies or rights from you under -+this License. If your rights have been terminated and not permanently -+reinstated, you do not qualify to receive new licenses for the same -+material under section 10. -+ -+ 9. Acceptance Not Required for Having Copies. -+ -+ You are not required to accept this License in order to receive or -+run a copy of the Program. Ancillary propagation of a covered work -+occurring solely as a consequence of using peer-to-peer transmission -+to receive a copy likewise does not require acceptance. However, -+nothing other than this License grants you permission to propagate or -+modify any covered work. These actions infringe copyright if you do -+not accept this License. Therefore, by modifying or propagating a -+covered work, you indicate your acceptance of this License to do so. -+ -+ 10. Automatic Licensing of Downstream Recipients. -+ -+ Each time you convey a covered work, the recipient automatically -+receives a license from the original licensors, to run, modify and -+propagate that work, subject to this License. You are not responsible -+for enforcing compliance by third parties with this License. -+ -+ An "entity transaction" is a transaction transferring control of an -+organization, or substantially all assets of one, or subdividing an -+organization, or merging organizations. If propagation of a covered -+work results from an entity transaction, each party to that -+transaction who receives a copy of the work also receives whatever -+licenses to the work the party's predecessor in interest had or could -+give under the previous paragraph, plus a right to possession of the -+Corresponding Source of the work from the predecessor in interest, if -+the predecessor has it or can get it with reasonable efforts. -+ -+ You may not impose any further restrictions on the exercise of the -+rights granted or affirmed under this License. For example, you may -+not impose a license fee, royalty, or other charge for exercise of -+rights granted under this License, and you may not initiate litigation -+(including a cross-claim or counterclaim in a lawsuit) alleging that -+any patent claim is infringed by making, using, selling, offering for -+sale, or importing the Program or any portion of it. -+ -+ 11. Patents. -+ -+ A "contributor" is a copyright holder who authorizes use under this -+License of the Program or a work on which the Program is based. The -+work thus licensed is called the contributor's "contributor version". -+ -+ A contributor's "essential patent claims" are all patent claims -+owned or controlled by the contributor, whether already acquired or -+hereafter acquired, that would be infringed by some manner, permitted -+by this License, of making, using, or selling its contributor version, -+but do not include claims that would be infringed only as a -+consequence of further modification of the contributor version. For -+purposes of this definition, "control" includes the right to grant -+patent sublicenses in a manner consistent with the requirements of - this License. - -- 7. If, as a consequence of a court judgment or allegation of patent --infringement or for any other reason (not limited to patent issues), --conditions are imposed on you (whether by court order, agreement or -+ Each contributor grants you a non-exclusive, worldwide, royalty-free -+patent license under the contributor's essential patent claims, to -+make, use, sell, offer for sale, import and otherwise run, modify and -+propagate the contents of its contributor version. -+ -+ In the following three paragraphs, a "patent license" is any express -+agreement or commitment, however denominated, not to enforce a patent -+(such as an express permission to practice a patent or covenant not to -+sue for patent infringement). To "grant" such a patent license to a -+party means to make such an agreement or commitment not to enforce a -+patent against the party. -+ -+ If you convey a covered work, knowingly relying on a patent license, -+and the Corresponding Source of the work is not available for anyone -+to copy, free of charge and under the terms of this License, through a -+publicly available network server or other readily accessible means, -+then you must either (1) cause the Corresponding Source to be so -+available, or (2) arrange to deprive yourself of the benefit of the -+patent license for this particular work, or (3) arrange, in a manner -+consistent with the requirements of this License, to extend the patent -+license to downstream recipients. "Knowingly relying" means you have -+actual knowledge that, but for the patent license, your conveying the -+covered work in a country, or your recipient's use of the covered work -+in a country, would infringe one or more identifiable patents in that -+country that you have reason to believe are valid. -+ -+ If, pursuant to or in connection with a single transaction or -+arrangement, you convey, or propagate by procuring conveyance of, a -+covered work, and grant a patent license to some of the parties -+receiving the covered work authorizing them to use, propagate, modify -+or convey a specific copy of the covered work, then the patent license -+you grant is automatically extended to all recipients of the covered -+work and works based on it. -+ -+ A patent license is "discriminatory" if it does not include within -+the scope of its coverage, prohibits the exercise of, or is -+conditioned on the non-exercise of one or more of the rights that are -+specifically granted under this License. You may not convey a covered -+work if you are a party to an arrangement with a third party that is -+in the business of distributing software, under which you make payment -+to the third party based on the extent of your activity of conveying -+the work, and under which the third party grants, to any of the -+parties who would receive the covered work from you, a discriminatory -+patent license (a) in connection with copies of the covered work -+conveyed by you (or copies made from those copies), or (b) primarily -+for and in connection with specific products or compilations that -+contain the covered work, unless you entered into that arrangement, -+or that patent license was granted, prior to 28 March 2007. -+ -+ Nothing in this License shall be construed as excluding or limiting -+any implied license or other defenses to infringement that may -+otherwise be available to you under applicable patent law. -+ -+ 12. No Surrender of Others' Freedom. -+ -+ If conditions are imposed on you (whether by court order, agreement or - otherwise) that contradict the conditions of this License, they do not --excuse you from the conditions of this License. If you cannot --distribute so as to satisfy simultaneously your obligations under this --License and any other pertinent obligations, then as a consequence you --may not distribute the Program at all. For example, if a patent --license would not permit royalty-free redistribution of the Program by --all those who receive copies directly or indirectly through you, then --the only way you could satisfy both it and this License would be to --refrain entirely from distribution of the Program. -- --If any portion of this section is held invalid or unenforceable under --any particular circumstance, the balance of the section is intended to --apply and the section as a whole is intended to apply in other --circumstances. -- --It is not the purpose of this section to induce you to infringe any --patents or other property right claims or to contest validity of any --such claims; this section has the sole purpose of protecting the --integrity of the free software distribution system, which is --implemented by public license practices. Many people have made --generous contributions to the wide range of software distributed --through that system in reliance on consistent application of that --system; it is up to the author/donor to decide if he or she is willing --to distribute software through any other system and a licensee cannot --impose that choice. -- --This section is intended to make thoroughly clear what is believed to --be a consequence of the rest of this License. -- -- 8. If the distribution and/or use of the Program is restricted in --certain countries either by patents or by copyrighted interfaces, the --original copyright holder who places the Program under this License --may add an explicit geographical distribution limitation excluding --those countries, so that distribution is permitted only in or among --countries not thus excluded. In such case, this License incorporates --the limitation as if written in the body of this License. -+excuse you from the conditions of this License. If you cannot convey a -+covered work so as to satisfy simultaneously your obligations under this -+License and any other pertinent obligations, then as a consequence you may -+not convey it at all. For example, if you agree to terms that obligate you -+to collect a royalty for further conveying from those to whom you convey -+the Program, the only way you could satisfy both those terms and this -+License would be to refrain entirely from conveying the Program. -+ -+ 13. Use with the GNU Affero General Public License. -+ -+ Notwithstanding any other provision of this License, you have -+permission to link or combine any covered work with a work licensed -+under version 3 of the GNU Affero General Public License into a single -+combined work, and to convey the resulting work. The terms of this -+License will continue to apply to the part which is the covered work, -+but the special requirements of the GNU Affero General Public License, -+section 13, concerning interaction through a network will apply to the -+combination as such. -+ -+ 14. Revised Versions of this License. - -- 9. The Free Software Foundation may publish revised and/or new versions --of the General Public License from time to time. Such new versions will -+ The Free Software Foundation may publish revised and/or new versions of -+the GNU General Public License from time to time. Such new versions will - be similar in spirit to the present version, but may differ in detail to - address new problems or concerns. - --Each version is given a distinguishing version number. If the Program --specifies a version number of this License which applies to it and "any --later version", you have the option of following the terms and conditions --either of that version or of any later version published by the Free --Software Foundation. If the Program does not specify a version number of --this License, you may choose any version ever published by the Free Software --Foundation. -- -- 10. If you wish to incorporate parts of the Program into other free --programs whose distribution conditions are different, write to the author --to ask for permission. For software which is copyrighted by the Free --Software Foundation, write to the Free Software Foundation; we sometimes --make exceptions for this. Our decision will be guided by the two goals --of preserving the free status of all derivatives of our free software and --of promoting the sharing and reuse of software generally. -- -- NO WARRANTY -- -- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY --FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN --OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES --PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED --OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF --MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS --TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE --PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, --REPAIR OR CORRECTION. -- -- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING --WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR --REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, --INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING --OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED --TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY --YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER --PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE --POSSIBILITY OF SUCH DAMAGES. -- -- END OF TERMS AND CONDITIONS -- -- Appendix: How to Apply These Terms to Your New Programs -+ Each version is given a distinguishing version number. If the -+Program specifies that a certain numbered version of the GNU General -+Public License "or any later version" applies to it, you have the -+option of following the terms and conditions either of that numbered -+version or of any later version published by the Free Software -+Foundation. If the Program does not specify a version number of the -+GNU General Public License, you may choose any version ever published -+by the Free Software Foundation. -+ -+ If the Program specifies that a proxy can decide which future -+versions of the GNU General Public License can be used, that proxy's -+public statement of acceptance of a version permanently authorizes you -+to choose that version for the Program. -+ -+ Later license versions may give you additional or different -+permissions. However, no additional obligations are imposed on any -+author or copyright holder as a result of your choosing to follow a -+later version. -+ -+ 15. Disclaimer of Warranty. -+ -+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -+ALL NECESSARY SERVICING, REPAIR OR CORRECTION. -+ -+ 16. Limitation of Liability. -+ -+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -+SUCH DAMAGES. -+ -+ 17. Interpretation of Sections 15 and 16. -+ -+ If the disclaimer of warranty and limitation of liability provided -+above cannot be given local legal effect according to their terms, -+reviewing courts shall apply local law that most closely approximates -+an absolute waiver of all civil liability in connection with the -+Program, unless a warranty or assumption of liability accompanies a -+copy of the Program in return for a fee. -+ -+ END OF TERMS AND CONDITIONS -+ -+ How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest - possible use to the public, the best way to achieve this is to make it -@@ -287,15 +628,15 @@ free software which everyone can redistr - - To do so, attach the following notices to the program. It is safest - to attach them to the start of each source file to most effectively --convey the exclusion of warranty; and each file should have at least -+state the exclusion of warranty; and each file should have at least - the "copyright" line and a pointer to where the full notice is found. - - -- Copyright (C) 19yy -+ Copyright (C) - -- This program is free software; you can redistribute it and/or modify -+ 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 2 of the License, or -+ 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, -@@ -304,36 +645,30 @@ the "copyright" line and a pointer to wh - 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, write to the Free Software -- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA -+ along with this program. If not, see . - - Also add information on how to contact you by electronic and paper mail. - --If the program is interactive, make it output a short notice like this --when it starts in an interactive mode: -+ If the program does terminal interaction, make it output a short -+notice like this when it starts in an interactive mode: - -- Gnomovision version 69, Copyright (C) 19yy name of author -- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. -+ Copyright (C) -+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - - The hypothetical commands `show w' and `show c' should show the appropriate --parts of the General Public License. Of course, the commands you use may --be called something other than `show w' and `show c'; they could even be --mouse-clicks or menu items--whatever suits your program. -- --You should also get your employer (if you work as a programmer) or your --school, if any, to sign a "copyright disclaimer" for the program, if --necessary. Here is a sample; alter the names: -- -- Yoyodyne, Inc., hereby disclaims all copyright interest in the program -- `Gnomovision' (which makes passes at compilers) written by James Hacker. -- -- , 1 April 1989 -- Ty Coon, President of Vice -- --This General Public License does not permit incorporating your program into --proprietary programs. If your program is a subroutine library, you may --consider it more useful to permit linking proprietary applications with the --library. If this is what you want to do, use the GNU Library General --Public License instead of this License. -+parts of the General Public License. Of course, your program's commands -+might be different; for a GUI interface, you would use an "about box". -+ -+ You should also get your employer (if you work as a programmer) or school, -+if any, to sign a "copyright disclaimer" for the program, if necessary. -+For more information on this, and how to apply and follow the GNU GPL, see -+. -+ -+ The GNU General Public License does not permit incorporating your program -+into proprietary programs. If your program is a subroutine library, you -+may consider it more useful to permit linking proprietary applications with -+the library. If this is what you want to do, use the GNU Lesser General -+Public License instead of this License. But first, please read -+. -Index: gdb-7.2.90.20110703/readline/ChangeLog.gdb -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/ChangeLog.gdb 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/ChangeLog.gdb 2011-07-03 10:41:21.000000000 +0200 -@@ -1,3 +1,12 @@ -+2011-04-30 Jan Kratochvil -+ -+ Workaround gdb.base/completion.exp regression on readline-6.2. -+ * complete.c (get_y_or_n): Disable the return on RL_STATE_CALLBACK. -+ -+2011-04-25 Jan Kratochvil -+ -+ Imported readline 6.2, and upstream patch 001. -+ - 2011-06-27 Jan Kratochvil - - Avoid free from a signal handler. -Index: gdb-7.2.90.20110703/readline/INSTALL -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/INSTALL 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/INSTALL 2011-07-03 10:41:21.000000000 +0200 -@@ -1,7 +1,7 @@ - Basic Installation - ================== - --These are installation instructions for Readline-5.1. -+These are installation instructions for Readline-6.2. - - The simplest way to compile readline is: - -Index: gdb-7.2.90.20110703/readline/MANIFEST -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/MANIFEST 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/MANIFEST 2011-07-03 10:41:21.000000000 +0200 -@@ -3,6 +3,7 @@ - # - doc d - examples d -+examples/autoconf d - examples/rlfe d - support d - shlib d -@@ -26,6 +27,7 @@ histlib.h f - keymaps.h f - posixdir.h f - posixjmp.h f -+posixselect.h f - posixstat.h f - readline.h f - rlconf.h f -@@ -69,11 +71,13 @@ undo.c f - util.c f - vi_keymap.c f - vi_mode.c f -+xfree.c f - xmalloc.c f - history.c f - histexpand.c f - histfile.c f - histsearch.c f -+patchlevel f - shlib/Makefile.in f - support/config.guess f - support/config.rpath f -@@ -107,12 +111,16 @@ examples/manexamp.c f - examples/readlinebuf.h f - examples/rl-fgets.c f - examples/rlcat.c f -+examples/rlevent.c f - examples/rltest.c f - examples/rl.c f - examples/rlptytest.c f - examples/rlversion.c f - examples/histexamp.c f - examples/Inputrc f -+examples/autoconf/BASH_CHECK_LIB_TERMCAP f -+examples/autoconf/RL_LIB_READLINE_VERSION f -+examples/autoconf/wi_LIB_READLINE f - examples/rlfe/ChangeLog f - examples/rlfe/Makefile.in f - examples/rlfe/README f -@@ -124,6 +132,7 @@ examples/rlfe/os.h f - examples/rlfe/pty.c f - examples/rlfe/rlfe.c f - examples/rlfe/screen.h f -+examples/rlwrap-0.30.tar.gz f - # formatted documentation, from MANIFEST.doc - doc/readline.ps f - doc/history.ps f -Index: gdb-7.2.90.20110703/readline/Makefile.in -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/Makefile.in 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/Makefile.in 2011-07-03 10:43:36.000000000 +0200 -@@ -1,20 +1,20 @@ - ## -*- text -*- ## - # Master Makefile for the GNU readline library. --# Copyright (C) 1994-2004 Free Software Foundation, Inc. -+# Copyright (C) 1994-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 . - --# 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 2, 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, write to the Free Software --# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - RL_LIBRARY_VERSION = @LIBVERSION@ - RL_LIBRARY_NAME = readline - -@@ -58,7 +58,7 @@ libdir = @libdir@ - mandir = @mandir@ - includedir = @includedir@ - datadir = @datadir@ --localedir = $(datadir)/locale -+localedir = @localedir@ - - infodir = @infodir@ - -@@ -68,7 +68,7 @@ man3dir = $(mandir)/man3 - DESTDIR = - - # Programs to make tags files. --ETAGS = etags -tw -+ETAGS = etags - CTAGS = ctags -tw - - CFLAGS = @CFLAGS@ -@@ -100,8 +100,6 @@ GCC_LINT_CFLAGS = $(XCCFLAGS) $(GCC_LINT - LIBRARY_NAME = libreadline.a - STATIC_LIBS = libreadline.a libhistory.a - --WCWIDTH_OBJ = @WCWIDTH_OBJ@ -- - # The C code source files for this library. - CSOURCES = $(srcdir)/readline.c $(srcdir)/funmap.c $(srcdir)/keymaps.c \ - $(srcdir)/vi_mode.c $(srcdir)/parens.c $(srcdir)/rltty.c \ -@@ -109,26 +107,28 @@ CSOURCES = $(srcdir)/readline.c $(srcdir - $(srcdir)/display.c $(srcdir)/signals.c $(srcdir)/emacs_keymap.c \ - $(srcdir)/vi_keymap.c $(srcdir)/util.c $(srcdir)/kill.c \ - $(srcdir)/undo.c $(srcdir)/macro.c $(srcdir)/input.c \ -- $(srcdir)/callback.c $(srcdir)/terminal.c $(srcdir)/xmalloc.c \ -+ $(srcdir)/callback.c $(srcdir)/terminal.c $(srcdir)/xmalloc.c $(srcdir)/xfree.c \ - $(srcdir)/history.c $(srcdir)/histsearch.c $(srcdir)/histexpand.c \ - $(srcdir)/histfile.c $(srcdir)/nls.c $(srcdir)/search.c \ - $(srcdir)/shell.c $(srcdir)/savestring.c $(srcdir)/tilde.c \ - $(srcdir)/text.c $(srcdir)/misc.c $(srcdir)/compat.c \ -- $(srcdir)/mbutil.c $(srcdir)/support/wcwidth.c -+ $(srcdir)/mbutil.c - - # The header files for this library. --HSOURCES = readline.h rldefs.h chardefs.h keymaps.h history.h histlib.h \ -- posixstat.h posixdir.h posixjmp.h tilde.h rlconf.h rltty.h \ -- ansi_stdlib.h tcap.h rlstdc.h xmalloc.h rlprivate.h rlshell.h \ -- rltypedefs.h rlmbutil.h -+HSOURCES = $(srcdir)/readline.h $(srcdir)/rldefs.h $(srcdir)/chardefs.h \ -+ $(srcdir)/keymaps.h $(srcdir)/history.h $(srcdir)/histlib.h \ -+ $(srcdir)/posixstat.h $(srcdir)/posixdir.h $(srcdir)/posixjmp.h \ -+ $(srcdir)/tilde.h $(srcdir)/rlconf.h $(srcdir)/rltty.h \ -+ $(srcdir)/ansi_stdlib.h $(srcdir)/tcap.h $(srcdir)/rlstdc.h \ -+ $(srcdir)/xmalloc.h $(srcdir)/rlprivate.h $(srcdir)/rlshell.h \ -+ $(srcdir)/rltypedefs.h $(srcdir)/rlmbutil.h - - HISTOBJ = history.o histexpand.o histfile.o histsearch.o shell.o mbutil.o - TILDEOBJ = tilde.o - OBJECTS = readline.o vi_mode.o funmap.o keymaps.o parens.o search.o \ - rltty.o complete.o bind.o isearch.o display.o signals.o \ - util.o kill.o undo.o macro.o input.o callback.o terminal.o \ -- text.o nls.o misc.o compat.o xmalloc.o $(HISTOBJ) $(TILDEOBJ) \ -- $(WCWIDTH_OBJ) -+ text.o nls.o misc.o compat.o xfree.o xmalloc.o $(HISTOBJ) $(TILDEOBJ) - - # The texinfo files which document this library. - DOCSOURCE = doc/rlman.texinfo doc/rltech.texinfo doc/rluser.texinfo -@@ -159,15 +159,11 @@ libreadline.a: $(OBJECTS) - $(AR) $(ARFLAGS) $@ $(OBJECTS) - -test -n "$(RANLIB)" && $(RANLIB) $@ - --libhistory.a: $(HISTOBJ) xmalloc.o -+libhistory.a: $(HISTOBJ) xmalloc.o xfree.o - $(RM) $@ -- $(AR) $(ARFLAGS) $@ $(HISTOBJ) xmalloc.o -+ $(AR) $(ARFLAGS) $@ $(HISTOBJ) xmalloc.o xfree.o - -test -n "$(RANLIB)" && $(RANLIB) $@ - --wcwidth.o: $(srcdir)/support/wcwidth.c -- $(RM) $@ -- $(CC) $(CCFLAGS) -c $(srcdir)/support/wcwidth.c -- - # Since tilde.c is shared between readline and bash, make sure we compile - # it with the right flags when it's built as part of readline - tilde.o: tilde.c -@@ -175,7 +171,7 @@ tilde.o: tilde.c - $(CC) $(CCFLAGS) -DREADLINE_LIBRARY -c $(srcdir)/tilde.c - - readline: $(OBJECTS) readline.h rldefs.h chardefs.h ./libreadline.a -- $(CC) $(CCFLAGS) -o $@ ./examples/rl.c ./libreadline.a ${TERMCAP_LIB} -+ $(CC) $(CCFLAGS) -DREADLINE_LIBRARY -o $@ $(top_srcdir)/examples/rl.c ./libreadline.a ${TERMCAP_LIB} - - lint: force - $(MAKE) $(MFLAGS) CCFLAGS='$(GCC_LINT_CFLAGS)' static -@@ -200,6 +196,7 @@ stamp-h: config.status $(srcdir)/config. - #$(srcdir)/configure: $(srcdir)/configure.in ## Comment-me-out in distribution - # cd $(srcdir) && autoconf ## Comment-me-out in distribution - -+ - shared: force - -test -d shlib || mkdir shlib - -( cd shlib ; ${MAKE} ${MFLAGS} all ) -@@ -214,17 +211,6 @@ examples: force - - force: - --install-headers: installdirs ${INSTALLED_HEADERS} -- for f in ${INSTALLED_HEADERS}; do \ -- $(INSTALL_DATA) $(srcdir)/$$f $(DESTDIR)$(includedir)/readline ; \ -- done -- --uninstall-headers: -- -test -n "$(includedir)" && cd $(DESTDIR)$(includedir)/readline && \ -- ${RM} ${INSTALLED_HEADERS} -- --maybe-uninstall-headers: uninstall-headers -- - ## GDB LOCAL - ## Don't mess with people's installed readline's. - ## This tries to install this version of readline over whatever -@@ -237,7 +223,18 @@ install: - - #install: $(INSTALL_TARGETS) - --install-static: installdirs $(STATIC_LIBS) install-headers install-doc -+install-headers: installdirs ${INSTALLED_HEADERS} -+ for f in ${INSTALLED_HEADERS}; do \ -+ $(INSTALL_DATA) $(srcdir)/$$f $(DESTDIR)$(includedir)/readline ; \ -+ done -+ -+uninstall-headers: -+ -test -n "$(includedir)" && cd $(DESTDIR)$(includedir)/readline && \ -+ ${RM} ${INSTALLED_HEADERS} -+ -+maybe-uninstall-headers: uninstall-headers -+ -+install-static: installdirs $(STATIC_LIBS) install-headers install-doc install-examples - -$(MV) $(DESTDIR)$(libdir)/libreadline.a $(DESTDIR)$(libdir)/libreadline.old - $(INSTALL_DATA) libreadline.a $(DESTDIR)$(libdir)/libreadline.a - -test -n "$(RANLIB)" && $(RANLIB) $(DESTDIR)$(libdir)/libreadline.a -@@ -250,7 +247,7 @@ installdirs: $(srcdir)/support/mkinstall - $(DESTDIR)$(includedir)/readline $(DESTDIR)$(libdir) \ - $(DESTDIR)$(infodir) $(DESTDIR)$(man3dir) - --uninstall: uninstall-headers uninstall-doc -+uninstall: uninstall-headers uninstall-doc uninstall-examples - -test -n "$(DESTDIR)$(libdir)" && cd $(DESTDIR)$(libdir) && \ - ${RM} libreadline.a libreadline.old libhistory.a libhistory.old $(SHARED_LIBS) - -( cd shlib; ${MAKE} ${MFLAGS} DESTDIR=${DESTDIR} uninstall ) -@@ -261,6 +258,12 @@ install-shared: installdirs install-head - uninstall-shared: maybe-uninstall-headers - -( cd shlib; ${MAKE} ${MFLAGS} DESTDIR=${DESTDIR} uninstall ) - -+install-examples: installdirs install-headers shared -+ -( cd examples ; ${MAKE} ${MFLAGS} DESTDIR=${DESTDIR} install ) -+ -+uninstall-examples: maybe-uninstall-headers -+ -( cd examples; ${MAKE} ${MFLAGS} DESTDIR=${DESTDIR} uninstall ) -+ - install-doc: installdirs - -( if test -d doc ; then \ - cd doc && \ -@@ -274,10 +277,10 @@ uninstall-doc: - fi ) - - TAGS: force -- $(ETAGS) $(CSOURCES) $(HSOURCES) -+ -( cd $(srcdir) && $(ETAGS) $(CSOURCES) $(HSOURCES) ) - - tags: force -- $(CTAGS) $(CSOURCES) $(HSOURCES) -+ -( cd $(srcdir) && $(CTAGS) $(CSOURCES) $(HSOURCES) ) - - clean: force - $(RM) $(OBJECTS) $(STATIC_LIBS) -@@ -299,12 +302,14 @@ distclean maintainer-clean: clean - $(RM) $(CREATED_CONFIGURE) - $(RM) $(CREATED_TAGS) - --info dvi html pdf: -+info dvi html pdf ps: - -( cd doc && $(MAKE) $(MFLAGS) $@ ) - - install-info: -+install-dvi: - install-html: - install-pdf: -+install-ps: - check: - installcheck: - -@@ -417,7 +422,7 @@ vi_mode.o: rldefs.h ${BUILD_DIR}/config. - vi_mode.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h - vi_mode.o: history.h ansi_stdlib.h rlstdc.h - xmalloc.o: ${BUILD_DIR}/config.h --xmalloc.o: ansi_stdlib.h readline.h -+xmalloc.o: ansi_stdlib.h - - bind.o: rlshell.h - histfile.o: rlshell.h -@@ -474,6 +479,7 @@ tilde.o: xmalloc.h - undo.o: xmalloc.h - util.o: xmalloc.h - vi_mode.o: xmalloc.h -+xfree.o: xmalloc.h readline.h - xmalloc.o: xmalloc.h - - complete.o: rlmbutil.h -@@ -515,6 +521,7 @@ tilde.o: $(srcdir)/tilde.c - undo.o: $(srcdir)/undo.c - util.o: $(srcdir)/util.c - vi_mode.o: $(srcdir)/vi_mode.c -+xfree.o: $(srcdir)/xfree.c - xmalloc.o: $(srcdir)/xmalloc.c - - histexpand.o: $(srcdir)/histexpand.c -@@ -549,6 +556,7 @@ tilde.o: tilde.c - undo.o: undo.c - util.o: util.c - vi_mode.o: vi_mode.c -+xfree.o: xfree.c - xmalloc.o: xmalloc.c - - histexpand.o: histexpand.c -Index: gdb-7.2.90.20110703/readline/NEWS -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/NEWS 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/NEWS 2011-07-03 10:41:21.000000000 +0200 -@@ -1,32 +1,19 @@ --This is a terse description of the new features added to readline-5.1 since --the release of readline-5.0. -+This is a terse description of the new features added to readline-6.2 since -+the release of readline-6.1. - --1. New Features in Readline -+a. The history library does not try to write the history filename in the -+ current directory if $HOME is unset. This closes a potential security -+ problem if the application does not specify a history filename. - --a. The key sequence sent by the keypad `delete' key is now automatically -- bound to delete-char. -+b. New bindable variable `completion-display-width' to set the number of -+ columns used when displaying completions. - --b. A negative argument to menu-complete now cycles backward through the -- completion list. -+c. New bindable variable `completion-case-map' to cause case-insensitive -+ completion to treat `-' and `_' as identical. - --c. A new bindable readline variable: bind-tty-special-chars. If non-zero, -- readline will bind the terminal special characters to their readline -- equivalents when it's called (on by default). -+d. There are new bindable vi-mode command names to avoid readline's case- -+ insensitive matching not allowing them to be bound separately. - --d. New bindable command: vi-rubout. Saves deleted text for possible -- reinsertion, as with any vi-mode `text modification' command; `X' is bound -- to this in vi command mode. -- --e. If the rl_completion_query_items is set to a value < 0, readline never -- asks the user whether or not to view the possible completions. -- --f. New application-callable auxiliary function, rl_variable_value, returns -- a string corresponding to a readline variable's value. -- --g. When parsing inputrc files and variable binding commands, the parser -- strips trailing whitespace from values assigned to boolean variables -- before checking them. -- --h. A new external application-controllable variable that allows the LINES -- and COLUMNS environment variables to set the window size regardless of -- what the kernel returns. -+e. New bindable variable `menu-complete-display-prefix' causes the menu -+ completion code to display the common prefix of the possible completions -+ before cycling through the list, instead of after. -Index: gdb-7.2.90.20110703/readline/README -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/README 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/README 2011-07-03 10:41:21.000000000 +0200 -@@ -1,7 +1,7 @@ - Introduction - ============ - --This is the Gnu Readline library, version 5.1. -+This is the Gnu Readline library, version 6.2. - - The Readline library provides a set of functions for use by applications - that allow users to edit command lines as they are typed in. Both -@@ -16,8 +16,9 @@ may be used without Readline in applicat - capabilities. - - The Readline library is free software, distributed under the terms of --the [GNU] General Public License, version 2. For more information, see --the file COPYING. -+the [GNU] General Public License as published by the Free Software -+Foundation, version 3 of the License. For more information, see the -+file COPYING. - - To build the library, try typing `./configure', then `make'. The - configuration process is automated, so no further intervention should -@@ -183,4 +184,4 @@ list (mirrored to the Usenet newsgroup g - Readline bug reports and fixes. - - Chet Ramey --chet@po.cwru.edu -+chet.ramey@case.edu -Index: gdb-7.2.90.20110703/readline/aclocal.m4 -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/aclocal.m4 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/aclocal.m4 2011-07-03 10:41:21.000000000 +0200 -@@ -80,6 +80,9 @@ AC_CACHE_VAL(bash_cv_type_$1, - #if HAVE_INTTYPES_H - #include - #endif -+#if HAVE_STDINT_H -+#include -+#endif - $2 - ], bash_cv_type_$1=yes, bash_cv_type_$1=no)]) - AC_MSG_RESULT($bash_cv_type_$1) -@@ -215,7 +218,7 @@ AC_CACHE_VAL(bash_cv_sys_siglist, - #ifdef HAVE_UNISTD_H - #include - #endif --#ifndef SYS_SIGLIST_DECLARED -+#if !HAVE_DECL_SYS_SIGLIST - extern char *sys_siglist[]; - #endif - main() -@@ -336,18 +339,18 @@ main() - { - DIR *dir; - int fd, err; --err = mkdir("/tmp/bash-aclocal", 0700); -+err = mkdir("bash-aclocal", 0700); - if (err < 0) { - perror("mkdir"); - exit(1); - } --unlink("/tmp/bash-aclocal/not_a_directory"); --fd = open("/tmp/bash-aclocal/not_a_directory", O_WRONLY|O_CREAT|O_EXCL, 0666); -+unlink("bash-aclocal/not_a_directory"); -+fd = open("bash-aclocal/not_a_directory", O_WRONLY|O_CREAT|O_EXCL, 0666); - write(fd, "\n", 1); - close(fd); --dir = opendir("/tmp/bash-aclocal/not_a_directory"); --unlink("/tmp/bash-aclocal/not_a_directory"); --rmdir("/tmp/bash-aclocal"); -+dir = opendir("bash-aclocal/not_a_directory"); -+unlink("bash-aclocal/not_a_directory"); -+rmdir("bash-aclocal"); - exit (dir == 0); - }], bash_cv_opendir_not_robust=yes,bash_cv_opendir_not_robust=no, - [AC_MSG_WARN(cannot check opendir if cross compiling -- defaulting to no) -@@ -531,6 +534,18 @@ AC_DEFINE(RLIMTYPE, rlim_t) - fi - ]) - -+AC_DEFUN(BASH_TYPE_SIG_ATOMIC_T, -+[AC_CACHE_CHECK([for sig_atomic_t in signal.h], ac_cv_have_sig_atomic_t, -+[AC_TRY_LINK([ -+#include -+],[ sig_atomic_t x; ], -+ac_cv_have_sig_atomic_t=yes, ac_cv_have_sig_atomic_t=no)]) -+if test "$ac_cv_have_sig_atomic_t" = "no" -+then -+ AC_CHECK_TYPE(sig_atomic_t,int) -+fi -+]) -+ - AC_DEFUN(BASH_FUNC_LSTAT, - [dnl Cannot use AC_CHECK_FUNCS(lstat) because Linux defines lstat() as an - dnl inline function in . -@@ -685,7 +700,7 @@ fi - ]) - - AC_DEFUN(BASH_FUNC_GETCWD, --[AC_MSG_CHECKING([if getcwd() will dynamically allocate memory]) -+[AC_MSG_CHECKING([if getcwd() will dynamically allocate memory with 0 size]) - AC_CACHE_VAL(bash_cv_getcwd_malloc, - [AC_TRY_RUN([ - #include -@@ -933,7 +948,7 @@ AC_DEFINE(HAVE_STRUCT_STAT_ST_BLOCKS) - fi - ]) - --AC_DEFUN(BASH_CHECK_LIB_TERMCAP, -+AC_DEFUN([BASH_CHECK_LIB_TERMCAP], - [ - if test "X$bash_cv_termcap_lib" = "X"; then - _bash_needmsg=yes -@@ -1423,19 +1438,19 @@ exit (1); - #if defined (NeXT) - exit (1); - #endif --err = mkdir("/tmp/bash-aclocal", 0700); -+err = mkdir("bash-aclocal", 0700); - if (err < 0) { - perror ("mkdir"); - exit(1); - } --fd = mknod ("/tmp/bash-aclocal/sh-np-autoconf", 0666 | S_IFIFO, 0); -+fd = mknod ("bash-aclocal/sh-np-autoconf", 0666 | S_IFIFO, 0); - if (fd == -1) { -- rmdir ("/tmp/bash-aclocal"); -+ rmdir ("bash-aclocal"); - exit (1); - } - close(fd); --unlink ("/tmp/bash-aclocal/sh-np-autoconf"); --rmdir ("/tmp/bash-aclocal"); -+unlink ("bash-aclocal/sh-np-autoconf"); -+rmdir ("bash-aclocal"); - exit(0); - }], bash_cv_sys_named_pipes=present, bash_cv_sys_named_pipes=missing, - [AC_MSG_WARN(cannot check for named pipes if cross-compiling -- defaulting to missing) -@@ -1540,20 +1555,22 @@ fi - AC_DEFUN(BASH_CHECK_DEV_FD, - [AC_MSG_CHECKING(whether /dev/fd is available) - AC_CACHE_VAL(bash_cv_dev_fd, --[if test -d /dev/fd && test -r /dev/fd/0 < /dev/null; then -+[bash_cv_dev_fd="" -+if test -d /dev/fd && (exec test -r /dev/fd/0 < /dev/null) ; then - # check for systems like FreeBSD 5 that only provide /dev/fd/[012] -- exec 3<&0 -- if test -r /dev/fd/3; then -+ if (exec test -r /dev/fd/3 3], [ -- mbstate_t ps; -- mbstate_t *psp; -- psp = (mbstate_t *)0; --], bash_cv_have_mbstate_t=yes, bash_cv_have_mbstate_t=no)]) --if test $bash_cv_have_mbstate_t = yes; then -+dnl checks for both mbrtowc and mbstate_t -+AC_FUNC_MBRTOWC -+if test $ac_cv_func_mbrtowc = yes; then - AC_DEFINE(HAVE_MBSTATE_T) - fi - -+AC_CHECK_FUNCS(iswlower iswupper towlower towupper iswctype) -+ - AC_CACHE_CHECK([for nl_langinfo and CODESET], bash_cv_langinfo_codeset, - [AC_TRY_LINK( - [#include ], -@@ -1707,6 +1726,50 @@ if test $bash_cv_langinfo_codeset = yes; - AC_DEFINE(HAVE_LANGINFO_CODESET) - fi - -+dnl check for wchar_t in -+AC_CACHE_CHECK([for wchar_t in wchar.h], bash_cv_type_wchar_t, -+[AC_TRY_COMPILE( -+[#include -+], -+[ -+ wchar_t foo; -+ foo = 0; -+], bash_cv_type_wchar_t=yes, bash_cv_type_wchar_t=no)]) -+if test $bash_cv_type_wchar_t = yes; then -+ AC_DEFINE(HAVE_WCHAR_T, 1, [systems should define this type here]) -+fi -+ -+dnl check for wctype_t in -+AC_CACHE_CHECK([for wctype_t in wctype.h], bash_cv_type_wctype_t, -+[AC_TRY_COMPILE( -+[#include ], -+[ -+ wctype_t foo; -+ foo = 0; -+], bash_cv_type_wctype_t=yes, bash_cv_type_wctype_t=no)]) -+if test $bash_cv_type_wctype_t = yes; then -+ AC_DEFINE(HAVE_WCTYPE_T, 1, [systems should define this type here]) -+fi -+ -+dnl check for wint_t in -+AC_CACHE_CHECK([for wint_t in wctype.h], bash_cv_type_wint_t, -+[AC_TRY_COMPILE( -+[#include ], -+[ -+ wint_t foo; -+ foo = 0; -+], bash_cv_type_wint_t=yes, bash_cv_type_wint_t=no)]) -+if test $bash_cv_type_wint_t = yes; then -+ AC_DEFINE(HAVE_WINT_T, 1, [systems should define this type here]) -+fi -+ -+if test "$am_cv_func_iconv" = yes; then -+ OLDLIBS="$LIBS" -+ LIBS="$LIBS $LIBICONV" -+ AC_CHECK_FUNCS(locale_charset) -+ LIBS="$OLDLIBS" -+fi -+ - ]) - - dnl need: prefix exec_prefix libdir includedir CC TERMCAP_LIB -@@ -1714,7 +1777,7 @@ dnl require: - dnl AC_PROG_CC - dnl BASH_CHECK_LIB_TERMCAP - --AC_DEFUN(RL_LIB_READLINE_VERSION, -+AC_DEFUN([RL_LIB_READLINE_VERSION], - [ - AC_REQUIRE([BASH_CHECK_LIB_TERMCAP]) - -@@ -2331,7 +2394,7 @@ AC_DEFUN([AM_INTL_SUBDIR], - AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \ - stdlib.h string.h unistd.h sys/param.h]) - AC_CHECK_FUNCS([feof_unlocked fgets_unlocked getc_unlocked getcwd getegid \ --geteuid getgid getuid mempcpy munmap putenv setenv setlocale stpcpy \ -+geteuid getgid getuid mempcpy munmap putenv setenv setlocale localeconv stpcpy \ - strcasecmp strdup strtoul tsearch __argz_count __argz_stringify __argz_next \ - __fsetlocking]) - -@@ -3964,3 +4027,143 @@ AC_DEFUN([jm_AC_TYPE_UNSIGNED_LONG_LONG] - [Define if you have the unsigned long long type.]) - fi - ]) -+ -+dnl From gnulib -+AC_DEFUN([BASH_FUNC_FPURGE], -+[ -+ AC_CHECK_FUNCS_ONCE([fpurge]) -+ AC_CHECK_FUNCS_ONCE([__fpurge]) -+ AC_CHECK_DECLS([fpurge], , , [#include ]) -+]) -+ -+AC_DEFUN([BASH_FUNC_SNPRINTF], -+[ -+ AC_CHECK_FUNCS_ONCE([snprintf]) -+ if test X$ac_cv_func_snprintf = Xyes; then -+ AC_CACHE_CHECK([for standard-conformant snprintf], [bash_cv_func_snprintf], -+ [AC_TRY_RUN([ -+#include -+ -+main() -+{ -+ int n; -+ n = snprintf (0, 0, "%s", "0123456"); -+ exit(n != 7); -+} -+], bash_cv_func_snprintf=yes, bash_cv_func_snprintf=no, -+ [AC_MSG_WARN([cannot check standard snprintf if cross-compiling]) -+ bash_cv_func_snprintf=yes] -+)]) -+ if test $bash_cv_func_snprintf = no; then -+ ac_cv_func_snprintf=no -+ fi -+ fi -+ if test $ac_cv_func_snprintf = no; then -+ AC_DEFINE(HAVE_SNPRINTF, 0, -+ [Define if you have a standard-conformant snprintf function.]) -+ fi -+]) -+ -+AC_DEFUN([BASH_FUNC_VSNPRINTF], -+[ -+ AC_CHECK_FUNCS_ONCE([vsnprintf]) -+ if test X$ac_cv_func_vsnprintf = Xyes; then -+ AC_CACHE_CHECK([for standard-conformant vsnprintf], [bash_cv_func_vsnprintf], -+ [AC_TRY_RUN([ -+#if HAVE_STDARG_H -+#include -+#else -+#include -+#endif -+#include -+#include -+ -+static int -+#if HAVE_STDARG_H -+foo(const char *fmt, ...) -+#else -+foo(format, va_alist) -+ const char *format; -+ va_dcl -+#endif -+{ -+ va_list args; -+ int n; -+ -+#if HAVE_STDARG_H -+ va_start(args, fmt); -+#else -+ va_start(args); -+#endif -+ n = vsnprintf(0, 0, fmt, args); -+ va_end (args); -+ return n; -+} -+ -+main() -+{ -+ int n; -+ n = foo("%s", "0123456"); -+ exit(n != 7); -+} -+], bash_cv_func_vsnprintf=yes, bash_cv_func_vsnprintf=no, -+ [AC_MSG_WARN([cannot check standard vsnprintf if cross-compiling]) -+ bash_cv_func_vsnprintf=yes] -+)]) -+ if test $bash_cv_func_vsnprintf = no; then -+ ac_cv_func_vsnprintf=no -+ fi -+ fi -+ if test $ac_cv_func_vsnprintf = no; then -+ AC_DEFINE(HAVE_VSNPRINTF, 0, -+ [Define if you have a standard-conformant vsnprintf function.]) -+ fi -+]) -+ -+AC_DEFUN(BASH_STRUCT_WEXITSTATUS_OFFSET, -+[AC_MSG_CHECKING(for offset of exit status in return status from wait) -+AC_CACHE_VAL(bash_cv_wexitstatus_offset, -+[AC_RUN_IFELSE([ -+#include -+#include -+ -+#include -+ -+main(c, v) -+ int c; -+ char **v; -+{ -+ pid_t pid, p; -+ int s, i, n; -+ -+ s = 0; -+ pid = fork(); -+ if (pid == 0) -+ exit (42); -+ -+ /* wait for the process */ -+ p = wait(&s); -+ if (p != pid) -+ exit (255); -+ -+ /* crack s */ -+ for (i = 0; i < (sizeof(s) - 8); i++) -+ { -+ n = (s >> i) & 0xff; -+ if (n == 42) -+ exit (i); -+ } -+ -+ exit (254); -+} -+], bash_cv_wexitstatus_offset=0, bash_cv_wexitstatus_offset=$?, -+ [AC_MSG_WARN(cannot check WEXITSTATUS offset if cross compiling -- defaulting to 0) -+ bash_cv_wexitstatus_offset=0] -+)]) -+if test "$bash_cv_wexitstatus_offset" -gt 32 ; then -+ AC_MSG_WARN(bad exit status from test program -- defaulting to 0) -+ bash_cv_wexitstatus_offset=0 -+fi -+AC_MSG_RESULT($bash_cv_wexitstatus_offset) -+AC_DEFINE_UNQUOTED([WEXITSTATUS_OFFSET], [$bash_cv_wexitstatus_offset], [Offset of exit status in wait status word]) -+]) -Index: gdb-7.2.90.20110703/readline/ansi_stdlib.h -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/ansi_stdlib.h 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/ansi_stdlib.h 2011-07-03 10:41:21.000000000 +0200 -@@ -6,19 +6,19 @@ - - This file is part of GNU Bash, the Bourne Again SHell. - -- Bash 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 2, or (at your option) any later -- version. -- -- Bash 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 Bash; see the file COPYING. If not, write to the Free Software -- Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ Bash 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. -+ -+ Bash 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 Bash. If not, see . -+*/ - - #if !defined (_STDLIB_H_) - #define _STDLIB_H_ 1 -Index: gdb-7.2.90.20110703/readline/bind.c -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/bind.c 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/bind.c 2011-07-03 10:41:21.000000000 +0200 -@@ -1,24 +1,23 @@ - /* bind.c -- key binding and startup file support for the readline library. */ - --/* Copyright (C) 1987-2005 Free Software Foundation, Inc. -+/* Copyright (C) 1987-2010 Free Software Foundation, Inc. - -- This file is part of the GNU Readline Library, a library for -- reading lines of text with interactive input and history editing. -+ This file is part of the GNU Readline Library (Readline), a library -+ for reading lines of text with interactive input and history editing. - -- The GNU Readline Library 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 2, or -+ Readline 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. - -- The GNU Readline Library 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 -+ Readline 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. - -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ You should have received a copy of the GNU General Public License -+ along with Readline. If not, see . -+*/ - - #define READLINE_LIBRARY - -@@ -80,7 +79,7 @@ static int glean_key_from_name PARAMS((c - static int find_boolean_var PARAMS((const char *)); - - static char *_rl_get_string_variable_value PARAMS((const char *)); --static int substring_member_of_array PARAMS((char *, const char **)); -+static int substring_member_of_array PARAMS((const char *, const char * const *)); - - static int currently_reading_init_file; - -@@ -317,7 +316,7 @@ rl_macro_bind (keyseq, macro, map) - - if (rl_translate_keyseq (macro, macro_keys, ¯o_keys_len)) - { -- free (macro_keys); -+ xfree (macro_keys); - return -1; - } - rl_generic_bind (ISMACR, keyseq, macro_keys, map); -@@ -347,7 +346,7 @@ rl_generic_bind (type, keyseq, data, map - if (keyseq == 0 || *keyseq == 0) - { - if (type == ISMACR) -- free (data); -+ xfree (data); - return -1; - } - -@@ -358,7 +357,7 @@ rl_generic_bind (type, keyseq, data, map - KEYS into KEYS_LEN. */ - if (rl_translate_keyseq (keyseq, keys, &keys_len)) - { -- free (keys); -+ xfree (keys); - return -1; - } - -@@ -370,7 +369,10 @@ rl_generic_bind (type, keyseq, data, map - - ic = uc; - if (ic < 0 || ic >= KEYMAP_SIZE) -- return -1; -+ { -+ xfree (keys); -+ return -1; -+ } - - if (META_CHAR (ic) && _rl_convert_meta_chars_to_ascii) - { -@@ -411,11 +413,18 @@ rl_generic_bind (type, keyseq, data, map - else - { - if (map[ic].type == ISMACR) -- free ((char *)map[ic].function); -+ xfree ((char *)map[ic].function); - else if (map[ic].type == ISKMAP) - { - map = FUNCTION_TO_KEYMAP (map, ic); - ic = ANYOTHERKEY; -+ /* If we're trying to override a keymap with a null function -+ (e.g., trying to unbind it), we can't use a null pointer -+ here because that's indistinguishable from having not been -+ overridden. We use a special bindable function that does -+ nothing. */ -+ if (type == ISFUNC && data == 0) -+ data = (char *)_rl_null_function; - } - - map[ic].function = KEYMAP_TO_FUNCTION (data); -@@ -424,7 +433,7 @@ rl_generic_bind (type, keyseq, data, map - - rl_binding_keymap = map; - } -- free (keys); -+ xfree (keys); - return 0; - } - -@@ -462,12 +471,21 @@ rl_translate_keyseq (seq, array, len) - } - else if (c == 'M') - { -- i++; -- /* XXX - should obey convert-meta setting? */ -+ i++; /* seq[i] == '-' */ -+ /* XXX - obey convert-meta setting */ - if (_rl_convert_meta_chars_to_ascii && _rl_keymap[ESC].type == ISKMAP) - array[l++] = ESC; /* ESC is meta-prefix */ -+ else if (seq[i+1] == '\\' && seq[i+2] == 'C' && seq[i+3] == '-') -+ { -+ i += 4; -+ temp = (seq[i] == '?') ? RUBOUT : CTRL (_rl_to_upper (seq[i])); -+ array[l++] = META (temp); -+ } - else - { -+ /* This doesn't yet handle things like \M-\a, which may -+ or may not have any reasonable meaning. You're -+ probably better off using straight octal or hex. */ - i++; - array[l++] = META (seq[i]); - } -@@ -565,6 +583,11 @@ rl_untranslate_keyseq (seq) - kseq[i++] = '-'; - c = UNMETA (c); - } -+ else if (c == ESC) -+ { -+ kseq[i++] = '\\'; -+ c = 'e'; -+ } - else if (CTRL_CHAR (c)) - { - kseq[i++] = '\\'; -@@ -613,7 +636,12 @@ _rl_untranslate_macro_value (seq) - *r++ = '-'; - c = UNMETA (c); - } -- else if (CTRL_CHAR (c) && c != ESC) -+ else if (c == ESC) -+ { -+ *r++ = '\\'; -+ c = 'e'; -+ } -+ else if (CTRL_CHAR (c)) - { - *r++ = '\\'; - *r++ = 'C'; -@@ -672,7 +700,7 @@ rl_function_of_keyseq (keyseq, map, type - { - register int i; - -- if (!map) -+ if (map == 0) - map = _rl_keymap; - - for (i = 0; keyseq && keyseq[i]; i++) -@@ -681,25 +709,27 @@ rl_function_of_keyseq (keyseq, map, type - - if (META_CHAR (ic) && _rl_convert_meta_chars_to_ascii) - { -- if (map[ESC].type != ISKMAP) -+ if (map[ESC].type == ISKMAP) -+ { -+ map = FUNCTION_TO_KEYMAP (map, ESC); -+ ic = UNMETA (ic); -+ } -+ /* XXX - should we just return NULL here, since this obviously -+ doesn't match? */ -+ else - { - if (type) - *type = map[ESC].type; - - return (map[ESC].function); - } -- else -- { -- map = FUNCTION_TO_KEYMAP (map, ESC); -- ic = UNMETA (ic); -- } - } - - if (map[ic].type == ISKMAP) - { - /* If this is the last key in the key sequence, return the - map. */ -- if (!keyseq[i + 1]) -+ if (keyseq[i + 1] == '\0') - { - if (type) - *type = ISKMAP; -@@ -709,7 +739,12 @@ rl_function_of_keyseq (keyseq, map, type - else - map = FUNCTION_TO_KEYMAP (map, ic); - } -- else -+ /* If we're not at the end of the key sequence, and the current key -+ is bound to something other than a keymap, then the entire key -+ sequence is not bound. */ -+ else if (map[ic].type != ISKMAP && keyseq[i+1]) -+ return ((rl_command_func_t *)NULL); -+ else /* map[ic].type != ISKMAP && keyseq[i+1] == 0 */ - { - if (type) - *type = map[ic].type; -@@ -764,10 +799,12 @@ _rl_read_file (filename, sizep) - - if (i < 0) - { -- free (buffer); -+ xfree (buffer); - return ((char *)NULL); - } - -+ RL_CHECK_SIGNALS (); -+ - buffer[i] = '\0'; - if (sizep) - *sizep = i; -@@ -791,6 +828,7 @@ rl_re_read_init_file (count, ignore) - 1. the filename used for the previous call - 2. the value of the shell variable `INPUTRC' - 3. ~/.inputrc -+ 4. /etc/inputrc - If the file existed and could be opened and read, 0 is returned, - otherwise errno is returned. */ - int -@@ -799,17 +837,18 @@ rl_read_init_file (filename) - { - /* Default the filename. */ - if (filename == 0) -+ filename = last_readline_init_file; -+ if (filename == 0) -+ filename = sh_get_env_value ("INPUTRC"); -+ if (filename == 0 || *filename == 0) - { -- filename = last_readline_init_file; -- if (filename == 0) -- filename = sh_get_env_value ("INPUTRC"); -- if (filename == 0) -- filename = DEFAULT_INPUTRC; -+ filename = DEFAULT_INPUTRC; -+ /* Try to read DEFAULT_INPUTRC; fall back to SYS_INPUTRC on failure */ -+ if (_rl_read_init_file (filename, 0) == 0) -+ return 0; -+ filename = SYS_INPUTRC; - } - -- if (*filename == 0) -- filename = DEFAULT_INPUTRC; -- - #if defined (__MSDOS__) - if (_rl_read_init_file (filename, 0) == 0) - return 0; -@@ -832,8 +871,9 @@ _rl_read_init_file (filename, include_le - - openname = tilde_expand (filename); - buffer = _rl_read_file (openname, &file_size); -- free (openname); -+ xfree (openname); - -+ RL_CHECK_SIGNALS (); - if (buffer == 0) - return (errno); - -@@ -880,7 +920,7 @@ _rl_read_init_file (filename, include_le - current_readline_init_lineno++; - } - -- free (buffer); -+ xfree (buffer); - currently_reading_init_file = 0; - return (0); - } -@@ -890,10 +930,10 @@ _rl_init_file_error (msg) - const char *msg; - { - if (currently_reading_init_file) -- fprintf (stderr, "readline: %s: line %d: %s\n", current_readline_init_file, -+ _rl_errmsg ("%s: line %d: %s\n", current_readline_init_file, - current_readline_init_lineno, msg); - else -- fprintf (stderr, "readline: %s\n", msg); -+ _rl_errmsg ("%s", msg); - } - - /* **************************************************************** */ -@@ -905,11 +945,11 @@ _rl_init_file_error (msg) - typedef int _rl_parser_func_t PARAMS((char *)); - - /* Things that mean `Control'. */ --const char *_rl_possible_control_prefixes[] = { -+const char * const _rl_possible_control_prefixes[] = { - "Control-", "C-", "CTRL-", (const char *)NULL - }; - --const char *_rl_possible_meta_prefixes[] = { -+const char * const _rl_possible_meta_prefixes[] = { - "Meta", "M-", (const char *)NULL - }; - -@@ -971,7 +1011,7 @@ parser_if (args) - `$if term=sun-cmd' into their .inputrc. */ - _rl_parsing_conditionalized_out = _rl_stricmp (args + 5, tname) && - _rl_stricmp (args + 5, rl_terminal_name); -- free (tname); -+ xfree (tname); - } - #if defined (VI_MODE) - else if (_rl_strnicmp (args, "mode=", 5) == 0) -@@ -1068,8 +1108,8 @@ parser_include (args) - } - - /* Associate textual names with actual functions. */ --static struct { -- const char *name; -+static const struct { -+ const char * const name; - _rl_parser_func_t *function; - } parser_directives [] = { - { "if", parser_if }, -@@ -1321,7 +1361,7 @@ rl_parse_and_bind (string) - else - rl_bind_keyseq (seq, rl_named_function (funname)); - -- free (seq); -+ xfree (seq); - return 0; - } - -@@ -1375,8 +1415,8 @@ rl_parse_and_bind (string) - - #define V_SPECIAL 0x1 - --static struct { -- const char *name; -+static const struct { -+ const char * const name; - int *value; - int flags; - } boolean_varlist [] = { -@@ -1384,9 +1424,12 @@ static struct { - { "blink-matching-paren", &rl_blink_matching_paren, V_SPECIAL }, - { "byte-oriented", &rl_byte_oriented, 0 }, - { "completion-ignore-case", &_rl_completion_case_fold, 0 }, -+ { "completion-map-case", &_rl_completion_case_map, 0 }, - { "convert-meta", &_rl_convert_meta_chars_to_ascii, 0 }, - { "disable-completion", &rl_inhibit_completion, 0 }, -+ { "echo-control-characters", &_rl_echo_control_chars, 0 }, - { "enable-keypad", &_rl_enable_keypad, 0 }, -+ { "enable-meta-key", &_rl_enable_meta, 0 }, - { "expand-tilde", &rl_complete_with_tilde_expansion, 0 }, - { "history-preserve-point", &_rl_history_preserve_point, 0 }, - { "horizontal-scroll-mode", &_rl_horizontal_scroll_mode, 0 }, -@@ -1395,17 +1438,20 @@ static struct { - { "mark-modified-lines", &_rl_mark_modified_lines, 0 }, - { "mark-symlinked-directories", &_rl_complete_mark_symlink_dirs, 0 }, - { "match-hidden-files", &_rl_match_hidden_files, 0 }, -+ { "menu-complete-display-prefix", &_rl_menu_complete_prefix_first, 0 }, - { "meta-flag", &_rl_meta_flag, 0 }, - { "output-meta", &_rl_output_meta_chars, 0 }, - { "page-completions", &_rl_page_completions, 0 }, - { "prefer-visible-bell", &_rl_prefer_visible_bell, V_SPECIAL }, - { "print-completions-horizontally", &_rl_print_completions_horizontally, 0 }, -+ { "revert-all-at-newline", &_rl_revert_all_at_newline, 0 }, - { "show-all-if-ambiguous", &_rl_complete_show_all, 0 }, - { "show-all-if-unmodified", &_rl_complete_show_unmodified, 0 }, -+ { "skip-completed-text", &_rl_skip_completed_text, 0 }, - #if defined (VISIBLE_STATS) - { "visible-stats", &rl_visible_stats, 0 }, - #endif /* VISIBLE_STATS */ -- { (char *)NULL, (int *)NULL } -+ { (char *)NULL, (int *)NULL, 0 } - }; - - static int -@@ -1458,23 +1504,29 @@ typedef int _rl_sv_func_t PARAMS((const - /* Forward declarations */ - static int sv_bell_style PARAMS((const char *)); - static int sv_combegin PARAMS((const char *)); -+static int sv_dispprefix PARAMS((const char *)); - static int sv_compquery PARAMS((const char *)); -+static int sv_compwidth PARAMS((const char *)); - static int sv_editmode PARAMS((const char *)); -+static int sv_histsize PARAMS((const char *)); - static int sv_isrchterm PARAMS((const char *)); - static int sv_keymap PARAMS((const char *)); - --static struct { -- const char *name; -+static const struct { -+ const char * const name; - int flags; - _rl_sv_func_t *set_func; - } string_varlist[] = { - { "bell-style", V_STRING, sv_bell_style }, - { "comment-begin", V_STRING, sv_combegin }, -+ { "completion-display-width", V_INT, sv_compwidth }, -+ { "completion-prefix-display-length", V_INT, sv_dispprefix }, - { "completion-query-items", V_INT, sv_compquery }, - { "editing-mode", V_STRING, sv_editmode }, -+ { "history-size", V_INT, sv_histsize }, - { "isearch-terminators", V_STRING, sv_isrchterm }, - { "keymap", V_STRING, sv_keymap }, -- { (char *)NULL, 0 } -+ { (char *)NULL, 0, (_rl_sv_func_t *)0 } - }; - - static int -@@ -1506,8 +1558,6 @@ rl_variable_value (name) - const char *name; - { - register int i; -- int v; -- char *ret; - - /* Check for simple variables first. */ - i = find_boolean_var (name); -@@ -1585,6 +1635,22 @@ sv_combegin (value) - } - - static int -+sv_dispprefix (value) -+ const char *value; -+{ -+ int nval = 0; -+ -+ if (value && *value) -+ { -+ nval = atoi (value); -+ if (nval < 0) -+ nval = 0; -+ } -+ _rl_completion_prefix_display_length = nval; -+ return 0; -+} -+ -+static int - sv_compquery (value) - const char *value; - { -@@ -1601,6 +1667,35 @@ sv_compquery (value) - } - - static int -+sv_compwidth (value) -+ const char *value; -+{ -+ int nval = -1; -+ -+ if (value && *value) -+ nval = atoi (value); -+ -+ _rl_completion_columns = nval; -+ return 0; -+} -+ -+static int -+sv_histsize (value) -+ const char *value; -+{ -+ int nval = 500; -+ -+ if (value && *value) -+ { -+ nval = atoi (value); -+ if (nval < 0) -+ return 1; -+ } -+ stifle_history (nval); -+ return 0; -+} -+ -+static int - sv_keymap (value) - const char *value; - { -@@ -1664,7 +1759,7 @@ sv_isrchterm (value) - rl_translate_keyseq (v + beg, _rl_isearch_terminators, &end); - _rl_isearch_terminators[end] = '\0'; - -- free (v); -+ xfree (v); - return 0; - } - -@@ -1672,11 +1767,11 @@ sv_isrchterm (value) - For example, `Space' returns ' '. */ - - typedef struct { -- const char *name; -+ const char * const name; - int value; - } assoc_list; - --static assoc_list name_key_alist[] = { -+static const assoc_list name_key_alist[] = { - { "DEL", 0x7f }, - { "ESC", '\033' }, - { "Escape", '\033' }, -@@ -1705,8 +1800,8 @@ glean_key_from_name (name) - } - - /* Auxiliary functions to manage keymaps. */ --static struct { -- const char *name; -+static const struct { -+ const char * const name; - Keymap map; - } keymap_names[] = { - { "emacs", emacs_standard_keymap }, -@@ -1809,7 +1904,7 @@ rl_list_funmap_names () - for (i = 0; funmap_names[i]; i++) - fprintf (rl_outstream, "%s\n", funmap_names[i]); - -- free (funmap_names); -+ xfree (funmap_names); - } - - static char * -@@ -1948,12 +2043,16 @@ rl_invoking_keyseqs_in_map (function, ma - char *keyname = (char *)xmalloc (6 + strlen (seqs[i])); - - if (key == ESC) --#if 0 -- sprintf (keyname, "\\e"); --#else -- /* XXX - experimental */ -- sprintf (keyname, "\\M-"); --#endif -+ { -+ /* If ESC is the meta prefix and we're converting chars -+ with the eighth bit set to ESC-prefixed sequences, then -+ we can use \M-. Otherwise we need to use the sequence -+ for ESC. */ -+ if (_rl_convert_meta_chars_to_ascii && map[ESC].type == ISKMAP) -+ sprintf (keyname, "\\M-"); -+ else -+ sprintf (keyname, "\\e"); -+ } - else if (CTRL_CHAR (key)) - sprintf (keyname, "\\C-%c", _rl_to_lower (UNCTRL (key))); - else if (key == RUBOUT) -@@ -1971,7 +2070,7 @@ rl_invoking_keyseqs_in_map (function, ma - } - - strcat (keyname, seqs[i]); -- free (seqs[i]); -+ xfree (seqs[i]); - - if (result_index + 2 > result_size) - { -@@ -1983,7 +2082,7 @@ rl_invoking_keyseqs_in_map (function, ma - result[result_index] = (char *)NULL; - } - -- free (seqs); -+ xfree (seqs); - } - break; - } -@@ -2035,10 +2134,10 @@ rl_function_dumper (print_readably) - { - fprintf (rl_outstream, "\"%s\": %s\n", - invokers[j], name); -- free (invokers[j]); -+ xfree (invokers[j]); - } - -- free (invokers); -+ xfree (invokers); - } - } - else -@@ -2062,9 +2161,9 @@ rl_function_dumper (print_readably) - fprintf (rl_outstream, "...\n"); - - for (j = 0; invokers[j]; j++) -- free (invokers[j]); -+ xfree (invokers[j]); - -- free (invokers); -+ xfree (invokers); - } - } - } -@@ -2111,8 +2210,8 @@ _rl_macro_dumper_internal (print_readabl - fprintf (rl_outstream, "%s%s outputs %s\n", prefix ? prefix : "", - keyname, - out ? out : ""); -- free (keyname); -- free (out); -+ xfree (keyname); -+ xfree (out); - break; - case ISFUNC: - break; -@@ -2135,13 +2234,13 @@ _rl_macro_dumper_internal (print_readabl - out = (char *)xmalloc (strlen (keyname) + prefix_len + 1); - strcpy (out, prefix); - strcpy (out + prefix_len, keyname); -- free (keyname); -+ xfree (keyname); - keyname = out; - } - } - - _rl_macro_dumper_internal (print_readably, FUNCTION_TO_KEYMAP (map, key), keyname); -- free (keyname); -+ xfree (keyname); - break; - } - } -@@ -2171,7 +2270,6 @@ _rl_get_string_variable_value (name) - { - static char numbuf[32]; - char *ret; -- int n; - - if (_rl_stricmp (name, "bell-style") == 0) - { -@@ -2188,6 +2286,16 @@ _rl_get_string_variable_value (name) - } - else if (_rl_stricmp (name, "comment-begin") == 0) - return (_rl_comment_begin ? _rl_comment_begin : RL_COMMENT_BEGIN_DEFAULT); -+ else if (_rl_stricmp (name, "completion-display-width") == 0) -+ { -+ sprintf (numbuf, "%d", _rl_completion_columns); -+ return (numbuf); -+ } -+ else if (_rl_stricmp (name, "completion-prefix-display-length") == 0) -+ { -+ sprintf (numbuf, "%d", _rl_completion_prefix_display_length); -+ return (numbuf); -+ } - else if (_rl_stricmp (name, "completion-query-items") == 0) - { - sprintf (numbuf, "%d", rl_completion_query_items); -@@ -2195,6 +2303,11 @@ _rl_get_string_variable_value (name) - } - else if (_rl_stricmp (name, "editing-mode") == 0) - return (rl_get_keymap_name_from_edit_mode ()); -+ else if (_rl_stricmp (name, "history-size") == 0) -+ { -+ sprintf (numbuf, "%d", history_is_stifled() ? history_max_entries : 0); -+ return (numbuf); -+ } - else if (_rl_stricmp (name, "isearch-terminators") == 0) - { - if (_rl_isearch_terminators == 0) -@@ -2203,7 +2316,7 @@ _rl_get_string_variable_value (name) - if (ret) - { - strncpy (numbuf, ret, sizeof (numbuf) - 1); -- free (ret); -+ xfree (ret); - numbuf[sizeof(numbuf) - 1] = '\0'; - } - else -@@ -2267,8 +2380,8 @@ rl_dump_variables (count, key) - /* Return non-zero if any members of ARRAY are a substring in STRING. */ - static int - substring_member_of_array (string, array) -- char *string; -- const char **array; -+ const char *string; -+ const char * const *array; - { - while (*array) - { -Index: gdb-7.2.90.20110703/readline/callback.c -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/callback.c 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/callback.c 2011-07-03 10:41:21.000000000 +0200 -@@ -1,24 +1,24 @@ - /* callback.c -- functions to use readline as an X `callback' mechanism. */ - --/* Copyright (C) 1987-2005 Free Software Foundation, Inc. -+/* Copyright (C) 1987-2009 Free Software Foundation, Inc. - -- This file is part of the GNU Readline Library, a library for -- reading lines of text with interactive input and history editing. -+ This file is part of the GNU Readline Library (Readline), a library -+ for reading lines of text with interactive input and history editing. - -- The GNU Readline Library 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 2, or -+ Readline 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. - -- The GNU Readline Library 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 -+ Readline 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. - -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ You should have received a copy of the GNU General Public License -+ along with Readline. If not, see . -+*/ -+ - #define READLINE_LIBRARY - - #if defined (HAVE_CONFIG_H) -@@ -87,6 +87,7 @@ _rl_callback_newline () - } - - readline_internal_setup (); -+ RL_CHECK_SIGNALS (); - } - - /* Install a readline handler, set up the terminal, and issue the prompt. */ -@@ -111,87 +112,101 @@ rl_callback_read_char () - - if (rl_linefunc == NULL) - { -- fprintf (stderr, "readline: readline_callback_read_char() called with no handler!\r\n"); -+ _rl_errmsg ("readline_callback_read_char() called with no handler!"); - abort (); - } - -- memcpy ((void *)olevel, (void *)readline_top_level, sizeof (procenv_t)); -- jcode = setjmp (readline_top_level); -+ memcpy ((void *)olevel, (void *)_rl_top_level, sizeof (procenv_t)); -+ jcode = setjmp (_rl_top_level); - if (jcode) - { - (*rl_redisplay_function) (); - _rl_want_redisplay = 0; -- memcpy ((void *)readline_top_level, (void *)olevel, sizeof (procenv_t)); -+ memcpy ((void *)_rl_top_level, (void *)olevel, sizeof (procenv_t)); - return; - } - -- if (RL_ISSTATE (RL_STATE_ISEARCH)) -+ do - { -- eof = _rl_isearch_callback (_rl_iscxt); -- if (eof == 0 && (RL_ISSTATE (RL_STATE_ISEARCH) == 0) && RL_ISSTATE (RL_STATE_INPUTPENDING)) -- rl_callback_read_char (); -+ RL_CHECK_SIGNALS (); -+ if (RL_ISSTATE (RL_STATE_ISEARCH)) -+ { -+ eof = _rl_isearch_callback (_rl_iscxt); -+ if (eof == 0 && (RL_ISSTATE (RL_STATE_ISEARCH) == 0) && RL_ISSTATE (RL_STATE_INPUTPENDING)) -+ rl_callback_read_char (); - -- return; -- } -- else if (RL_ISSTATE (RL_STATE_NSEARCH)) -- { -- eof = _rl_nsearch_callback (_rl_nscxt); -- return; -- } -- else if (RL_ISSTATE (RL_STATE_NUMERICARG)) -- { -- eof = _rl_arg_callback (_rl_argcxt); -- if (eof == 0 && (RL_ISSTATE (RL_STATE_NUMERICARG) == 0) && RL_ISSTATE (RL_STATE_INPUTPENDING)) -- rl_callback_read_char (); -- /* XXX - this should handle _rl_last_command_was_kill better */ -- else if (RL_ISSTATE (RL_STATE_NUMERICARG) == 0) -- _rl_internal_char_cleanup (); -+ return; -+ } -+ else if (RL_ISSTATE (RL_STATE_NSEARCH)) -+ { -+ eof = _rl_nsearch_callback (_rl_nscxt); -+ return; -+ } -+#if defined (VI_MODE) -+ else if (RL_ISSTATE (RL_STATE_VIMOTION)) -+ { -+ eof = _rl_vi_domove_callback (_rl_vimvcxt); -+ /* Should handle everything, including cleanup, numeric arguments, -+ and turning off RL_STATE_VIMOTION */ -+ if (RL_ISSTATE (RL_STATE_NUMERICARG) == 0) -+ _rl_internal_char_cleanup (); - -- return; -- } -- else if (RL_ISSTATE (RL_STATE_MULTIKEY)) -- { -- eof = _rl_dispatch_callback (_rl_kscxt); /* For now */ -- while ((eof == -1 || eof == -2) && RL_ISSTATE (RL_STATE_MULTIKEY) && _rl_kscxt && (_rl_kscxt->flags & KSEQ_DISPATCHED)) -- eof = _rl_dispatch_callback (_rl_kscxt); -- if (RL_ISSTATE (RL_STATE_MULTIKEY) == 0) -+ return; -+ } -+#endif -+ else if (RL_ISSTATE (RL_STATE_NUMERICARG)) -+ { -+ eof = _rl_arg_callback (_rl_argcxt); -+ if (eof == 0 && (RL_ISSTATE (RL_STATE_NUMERICARG) == 0) && RL_ISSTATE (RL_STATE_INPUTPENDING)) -+ rl_callback_read_char (); -+ /* XXX - this should handle _rl_last_command_was_kill better */ -+ else if (RL_ISSTATE (RL_STATE_NUMERICARG) == 0) -+ _rl_internal_char_cleanup (); -+ -+ return; -+ } -+ else if (RL_ISSTATE (RL_STATE_MULTIKEY)) - { -- _rl_internal_char_cleanup (); -- _rl_want_redisplay = 1; -+ eof = _rl_dispatch_callback (_rl_kscxt); /* For now */ -+ while ((eof == -1 || eof == -2) && RL_ISSTATE (RL_STATE_MULTIKEY) && _rl_kscxt && (_rl_kscxt->flags & KSEQ_DISPATCHED)) -+ eof = _rl_dispatch_callback (_rl_kscxt); -+ if (RL_ISSTATE (RL_STATE_MULTIKEY) == 0) -+ { -+ _rl_internal_char_cleanup (); -+ _rl_want_redisplay = 1; -+ } - } -- } -- else if (_rl_callback_func) -- { -- /* This allows functions that simply need to read an additional character -- (like quoted-insert) to register a function to be called when input is -- available. _rl_callback_data is simply a pointer to a struct that has -- the argument count originally passed to the registering function and -- space for any additional parameters. */ -- eof = (*_rl_callback_func) (_rl_callback_data); -- /* If the function `deregisters' itself, make sure the data is cleaned -- up. */ -- if (_rl_callback_func == 0) -+ else if (_rl_callback_func) - { -- if (_rl_callback_data) -+ /* This allows functions that simply need to read an additional -+ character (like quoted-insert) to register a function to be -+ called when input is available. _rl_callback_data is simply a -+ pointer to a struct that has the argument count originally -+ passed to the registering function and space for any additional -+ parameters. */ -+ eof = (*_rl_callback_func) (_rl_callback_data); -+ /* If the function `deregisters' itself, make sure the data is -+ cleaned up. */ -+ if (_rl_callback_func == 0) - { -- _rl_callback_data_dispose (_rl_callback_data); -- _rl_callback_data = 0; -+ if (_rl_callback_data) -+ { -+ _rl_callback_data_dispose (_rl_callback_data); -+ _rl_callback_data = 0; -+ } -+ _rl_internal_char_cleanup (); - } -- _rl_internal_char_cleanup (); - } -- } -- else -- eof = readline_internal_char (); -+ else -+ eof = readline_internal_char (); - -- if (rl_done == 0 && _rl_want_redisplay) -- { -- (*rl_redisplay_function) (); -- _rl_want_redisplay = 0; -- } -+ RL_CHECK_SIGNALS (); -+ if (rl_done == 0 && _rl_want_redisplay) -+ { -+ (*rl_redisplay_function) (); -+ _rl_want_redisplay = 0; -+ } - -- /* We loop in case some function has pushed input back with rl_execute_next. */ -- for (;;) -- { - if (rl_done) - { - line = readline_internal_teardown (eof); -@@ -213,11 +228,8 @@ rl_callback_read_char () - if (in_handler == 0 && rl_linefunc) - _rl_callback_newline (); - } -- if (rl_pending_input || _rl_pushed_input_available () || RL_ISSTATE (RL_STATE_MACROINPUT)) -- eof = readline_internal_char (); -- else -- break; - } -+ while (rl_pending_input || _rl_pushed_input_available () || RL_ISSTATE (RL_STATE_MACROINPUT)); - } - - /* Remove the handler, and make sure the terminal is in its normal state. */ -@@ -226,6 +238,7 @@ rl_callback_handler_remove () - { - rl_linefunc = NULL; - RL_UNSETSTATE (RL_STATE_CALLBACK); -+ RL_CHECK_SIGNALS (); - if (in_handler) - { - in_handler = 0; -@@ -254,8 +267,7 @@ _rl_callback_data_alloc (count) - void _rl_callback_data_dispose (arg) - _rl_callback_generic_arg *arg; - { -- if (arg) -- free (arg); -+ xfree (arg); - } - - #endif -Index: gdb-7.2.90.20110703/readline/chardefs.h -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/chardefs.h 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/chardefs.h 2011-07-03 10:41:21.000000000 +0200 -@@ -1,24 +1,23 @@ - /* chardefs.h -- Character definitions for readline. */ - --/* Copyright (C) 1994 Free Software Foundation, Inc. -+/* Copyright (C) 1994-2009 Free Software Foundation, Inc. - -- This file is part of the GNU Readline Library, a library for -- reading lines of text with interactive input and history editing. -+ This file is part of the GNU Readline Library (Readline), a library -+ for reading lines of text with interactive input and history editing. - -- The GNU Readline Library 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 2, or -+ Readline 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. - -- The GNU Readline Library 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 -+ Readline 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. - -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ You should have received a copy of the GNU General Public License -+ along with Readline. If not, see . -+*/ - - #ifndef _CHARDEFS_H_ - #define _CHARDEFS_H_ -Index: gdb-7.2.90.20110703/readline/compat.c -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/compat.c 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/compat.c 2011-07-03 10:41:21.000000000 +0200 -@@ -1,24 +1,24 @@ - /* compat.c -- backwards compatibility functions. */ - --/* Copyright (C) 2000 Free Software Foundation, Inc. -+/* Copyright (C) 2000-2009 Free Software Foundation, Inc. - -- This file is part of the GNU Readline Library, a library for -- reading lines of text with interactive input and history editing. -+ This file is part of the GNU Readline Library (Readline), a library -+ for reading lines of text with interactive input and history editing. - -- The GNU Readline Library 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 2, or -+ Readline 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. - -- The GNU Readline Library 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 -+ Readline 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. - -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ You should have received a copy of the GNU General Public License -+ along with Readline. If not, see . -+*/ -+ - #define READLINE_LIBRARY - - #if defined (HAVE_CONFIG_H) -Index: gdb-7.2.90.20110703/readline/complete.c -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/complete.c 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/complete.c 2011-07-03 10:41:21.000000000 +0200 -@@ -1,24 +1,24 @@ - /* complete.c -- filename completion for readline. */ - --/* Copyright (C) 1987-2005 Free Software Foundation, Inc. -+/* Copyright (C) 1987-2011 Free Software Foundation, Inc. - -- This file is part of the GNU Readline Library, a library for -- reading lines of text with interactive input and history editing. -+ This file is part of the GNU Readline Library (Readline), a library -+ for reading lines of text with interactive input and history editing. - -- The GNU Readline Library 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 2, or -+ Readline 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. - -- The GNU Readline Library 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 -+ Readline 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. - -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ You should have received a copy of the GNU General Public License -+ along with Readline. If not, see . -+*/ -+ - #define READLINE_LIBRARY - - #if defined (HAVE_CONFIG_H) -@@ -110,8 +110,8 @@ static int get_y_or_n PARAMS((int)); - static int _rl_internal_pager PARAMS((int)); - static char *printable_part PARAMS((char *)); - static int fnwidth PARAMS((const char *)); --static int fnprint PARAMS((const char *)); --static int print_filename PARAMS((char *, char *)); -+static int fnprint PARAMS((const char *, int)); -+static int print_filename PARAMS((char *, char *, int)); - - static char **gen_completion_matches PARAMS((char *, int, int, rl_compentry_func_t *, int, int)); - -@@ -119,9 +119,11 @@ static char **remove_duplicate_matches P - static void insert_match PARAMS((char *, int, int, char *)); - static int append_to_match PARAMS((char *, int, int, int)); - static void insert_all_matches PARAMS((char **, int, char *)); -+static int complete_fncmp PARAMS((const char *, int, const char *, int)); - static void display_matches PARAMS((char **)); - static int compute_lcd_of_matches PARAMS((char **, int, const char *)); - static int postprocess_matches PARAMS((char ***, int)); -+static int complete_get_screenwidth PARAMS((void)); - - static char *make_quoted_replacement PARAMS((char *, int, char *)); - -@@ -157,13 +159,27 @@ int _rl_print_completions_horizontally; - #if defined (__MSDOS__) && !defined (__DJGPP__) - int _rl_completion_case_fold = 1; - #else --int _rl_completion_case_fold; -+int _rl_completion_case_fold = 0; - #endif - --/* If non-zero, don't match hidden files (filenames beginning with a `.' on -+/* Non-zero means that `-' and `_' are equivalent when comparing filenames -+ for completion. */ -+int _rl_completion_case_map = 0; -+ -+/* If zero, don't match hidden files (filenames beginning with a `.' on - Unix) when doing filename completion. */ - int _rl_match_hidden_files = 1; - -+/* Length in characters of a common prefix replaced with an ellipsis (`...') -+ when displaying completion matches. Matches whose printable portion has -+ more than this number of displaying characters in common will have the common -+ display prefix replaced with an ellipsis. */ -+int _rl_completion_prefix_display_length = 0; -+ -+/* The readline-private number of screen columns to use when displaying -+ matches. If < 0 or > _rl_screenwidth, it is ignored. */ -+int _rl_completion_columns = -1; -+ - /* Global variables available to applications using readline. */ - - #if defined (VISIBLE_STATS) -@@ -173,6 +189,16 @@ int _rl_match_hidden_files = 1; - int rl_visible_stats = 0; - #endif /* VISIBLE_STATS */ - -+/* If non-zero, when completing in the middle of a word, don't insert -+ characters from the match that match characters following point in -+ the word. This means, for instance, completing when the cursor is -+ after the `e' in `Makefile' won't result in `Makefilefile'. */ -+int _rl_skip_completed_text = 0; -+ -+/* If non-zero, menu completion displays the common prefix first in the -+ cycle of possible completions instead of the last. */ -+int _rl_menu_complete_prefix_first = 0; -+ - /* If non-zero, then this is the address of a function to call when - completing on a directory name. The function is called with - the address of a string (the current directory name) as an arg. */ -@@ -180,6 +206,17 @@ rl_icppfunc_t *rl_directory_completion_h - - rl_icppfunc_t *rl_directory_rewrite_hook = (rl_icppfunc_t *)NULL; - -+/* If non-zero, this is the address of a function to call when reading -+ directory entries from the filesystem for completion and comparing -+ them to the partial word to be completed. The function should -+ either return its first argument (if no conversion takes place) or -+ newly-allocated memory. This can, for instance, convert filenames -+ between character sets for comparison against what's typed at the -+ keyboard. The returned value is what is added to the list of -+ matches. The second argument is the length of the filename to be -+ converted. */ -+rl_dequote_func_t *rl_filename_rewrite_hook = (rl_dequote_func_t *)NULL; -+ - /* Non-zero means readline completion functions perform tilde expansion. */ - int rl_complete_with_tilde_expansion = 0; - -@@ -188,6 +225,10 @@ int rl_complete_with_tilde_expansion = 0 - completer. */ - rl_compentry_func_t *rl_completion_entry_function = (rl_compentry_func_t *)NULL; - -+/* Pointer to generator function for rl_menu_complete (). NULL means to use -+ *rl_completion_entry_function (see above). */ -+rl_compentry_func_t *rl_menu_completion_entry_function = (rl_compentry_func_t *)NULL; -+ - /* Pointer to alternative function to create matches. - Function is called with TEXT, START, and END. - START and END are indices in RL_LINE_BUFFER saying what the boundaries -@@ -325,11 +366,20 @@ int rl_completion_mark_symlink_dirs; - /* If non-zero, inhibit completion (temporarily). */ - int rl_inhibit_completion; - -+/* Set to the last key used to invoke one of the completion functions */ -+int rl_completion_invoking_key; -+ -+/* If non-zero, sort the completion matches. On by default. */ -+int rl_sort_completion_matches = 1; -+ - /* Variables local to this file. */ - - /* Local variable states what happened during the last completion attempt. */ - static int completion_changed_buffer; - -+/* The result of the query to the user about displaying completion matches */ -+static int completion_y_or_n; -+ - /*************************************/ - /* */ - /* Bindable completion functions */ -@@ -343,6 +393,8 @@ int - rl_complete (ignore, invoking_key) - int ignore, invoking_key; - { -+ rl_completion_invoking_key = invoking_key; -+ - if (rl_inhibit_completion) - return (_rl_insert_char (ignore, invoking_key)); - else if (rl_last_func == rl_complete && !completion_changed_buffer) -@@ -360,6 +412,7 @@ int - rl_possible_completions (ignore, invoking_key) - int ignore, invoking_key; - { -+ rl_completion_invoking_key = invoking_key; - return (rl_complete_internal ('?')); - } - -@@ -367,6 +420,7 @@ int - rl_insert_completions (ignore, invoking_key) - int ignore, invoking_key; - { -+ rl_completion_invoking_key = invoking_key; - return (rl_complete_internal ('*')); - } - -@@ -395,6 +449,14 @@ rl_completion_mode (cfunc) - /* */ - /************************************/ - -+/* Reset readline state on a signal or other event. */ -+void -+_rl_reset_completion_state () -+{ -+ rl_completion_found_quote = 0; -+ rl_completion_quote_character = 0; -+} -+ - /* Set default values for readline word completion. These are the variables - that application completion functions can change or inspect. */ - static void -@@ -406,6 +468,7 @@ set_completion_defaults (what_to_do) - rl_filename_quoting_desired = 1; - rl_completion_type = what_to_do; - rl_completion_suppress_append = rl_completion_suppress_quote = 0; -+ rl_completion_append_character = ' '; - - /* The completion entry function may optionally change this. */ - rl_completion_mark_symlink_dirs = _rl_complete_mark_symlink_dirs; -@@ -418,6 +481,19 @@ get_y_or_n (for_pager) - { - int c; - -+/* Disabled for GDB due to the gdb.base/readline-ask.exp regression. -+ [patch] testsuite: Test readline-6.2 "ask" regression -+ http://sourceware.org/ml/gdb-patches/2011-05/msg00002.html */ -+#if 0 -+ /* For now, disable pager in callback mode, until we later convert to state -+ driven functions. Have to wait until next major version to add new -+ state definition, since it will change value of RL_STATE_DONE. */ -+#if defined (READLINE_CALLBACKS) -+ if (RL_ISSTATE (RL_STATE_CALLBACK)) -+ return 1; -+#endif -+#endif -+ - for (;;) - { - RL_SETSTATE(RL_STATE_MOREINPUT); -@@ -428,7 +504,7 @@ get_y_or_n (for_pager) - return (1); - if (c == 'n' || c == 'N' || c == RUBOUT) - return (0); -- if (c == ABORT_CHAR) -+ if (c == ABORT_CHAR || c < 0) - _rl_abort_internal (); - if (for_pager && (c == NEWLINE || c == RETURN)) - return (2); -@@ -481,6 +557,13 @@ stat_char (filename) - struct stat finfo; - int character, r; - -+ /* Short-circuit a //server on cygwin, since that will always behave as -+ a directory. */ -+#if __CYGWIN__ -+ if (filename[0] == '/' && filename[1] == '/' && strchr (filename+2, '/') == 0) -+ return '/'; -+#endif -+ - #if defined (HAVE_LSTAT) && defined (S_ISLNK) - r = lstat (filename, &finfo); - #else -@@ -581,7 +664,7 @@ fnwidth (string) - width = pos = 0; - while (string[pos]) - { -- if (CTRL_CHAR (*string) || *string == RUBOUT) -+ if (CTRL_CHAR (string[pos]) || string[pos] == RUBOUT) - { - width += 2; - pos++; -@@ -614,17 +697,20 @@ fnwidth (string) - return width; - } - -+#define ELLIPSIS_LEN 3 -+ - static int --fnprint (to_print) -+fnprint (to_print, prefix_bytes) - const char *to_print; -+ int prefix_bytes; - { -- int printed_len; -+ int printed_len, w; - const char *s; - #if defined (HANDLE_MULTIBYTE) - mbstate_t ps; - const char *end; - size_t tlen; -- int width, w; -+ int width; - wchar_t wc; - - end = to_print + strlen (to_print) + 1; -@@ -632,7 +718,23 @@ fnprint (to_print) - #endif - - printed_len = 0; -- s = to_print; -+ -+ /* Don't print only the ellipsis if the common prefix is one of the -+ possible completions */ -+ if (to_print[prefix_bytes] == '\0') -+ prefix_bytes = 0; -+ -+ if (prefix_bytes) -+ { -+ char ellipsis; -+ -+ ellipsis = (to_print[prefix_bytes] == '.') ? '_' : '.'; -+ for (w = 0; w < ELLIPSIS_LEN; w++) -+ putc (ellipsis, rl_outstream); -+ printed_len = ELLIPSIS_LEN; -+ } -+ -+ s = to_print + prefix_bytes; - while (*s) - { - if (CTRL_CHAR (*s)) -@@ -691,14 +793,15 @@ fnprint (to_print) - filenames. Return the number of characters we output. */ - - static int --print_filename (to_print, full_pathname) -+print_filename (to_print, full_pathname, prefix_bytes) - char *to_print, *full_pathname; -+ int prefix_bytes; - { - int printed_len, extension_char, slen, tlen; - char *s, c, *new_full_pathname, *dn; - - extension_char = 0; -- printed_len = fnprint (to_print); -+ printed_len = fnprint (to_print, prefix_bytes); - - #if defined (VISIBLE_STATS) - if (rl_filename_completion_desired && (rl_visible_stats || _rl_complete_mark_directories)) -@@ -753,7 +856,7 @@ print_filename (to_print, full_pathname) - if (path_isdir (new_full_pathname)) - extension_char = '/'; - -- free (new_full_pathname); -+ xfree (new_full_pathname); - to_print[-1] = c; - } - else -@@ -768,7 +871,7 @@ print_filename (to_print, full_pathname) - extension_char = '/'; - } - -- free (s); -+ xfree (s); - if (extension_char) - { - putc (extension_char, rl_outstream); -@@ -950,7 +1053,7 @@ gen_completion_matches (text, start, end - rl_compentry_func_t *our_func; - int found_quote, quote_char; - { -- char **matches, *temp; -+ char **matches; - - rl_completion_found_quote = found_quote; - rl_completion_quote_character = quote_char; -@@ -960,7 +1063,10 @@ gen_completion_matches (text, start, end - variable rl_attempted_completion_function. */ - if (rl_attempted_completion_function) - { -+ _rl_interrupt_immediately++; - matches = (*rl_attempted_completion_function) (text, start, end); -+ if (_rl_interrupt_immediately > 0) -+ _rl_interrupt_immediately--; - - if (matches || rl_attempted_completion_over) - { -@@ -969,21 +1075,9 @@ gen_completion_matches (text, start, end - } - } - -- /* Beware -- we're stripping the quotes here. Do this only if we know -- we are doing filename completion and the application has defined a -- filename dequoting function. */ -- temp = (char *)NULL; -- -- if (found_quote && our_func == rl_filename_completion_function && -- rl_filename_dequoting_function) -- { -- /* delete single and double quotes */ -- temp = (*rl_filename_dequoting_function) (text, quote_char); -- text = temp; /* not freeing text is not a memory leak */ -- } -+ /* XXX -- filename dequoting moved into rl_filename_completion_function */ - - matches = rl_completion_matches (text, our_func); -- FREE (temp); - return matches; - } - -@@ -1004,7 +1098,7 @@ remove_duplicate_matches (matches) - - /* Sort the array without matches[0], since we need it to - stay in place no matter what. */ -- if (i) -+ if (i && rl_sort_completion_matches) - qsort (matches+1, i-1, sizeof (char *), (QSFUNC *)_rl_qsort_string_compare); - - /* Remember the lowest common denominator for it may be unique. */ -@@ -1014,7 +1108,7 @@ remove_duplicate_matches (matches) - { - if (strcmp (matches[i], matches[i + 1]) == 0) - { -- free (matches[i]); -+ xfree (matches[i]); - matches[i] = (char *)&dead_slot; - } - else -@@ -1032,7 +1126,7 @@ remove_duplicate_matches (matches) - temp_array[j] = (char *)NULL; - - if (matches[0] != (char *)&dead_slot) -- free (matches[0]); -+ xfree (matches[0]); - - /* Place the lowest common denominator back in [0]. */ - temp_array[0] = lowest_common; -@@ -1042,7 +1136,7 @@ remove_duplicate_matches (matches) - insert. */ - if (j == 2 && strcmp (temp_array[0], temp_array[1]) == 0) - { -- free (temp_array[1]); -+ xfree (temp_array[1]); - temp_array[1] = (char *)NULL; - } - return (temp_array); -@@ -1116,7 +1210,8 @@ compute_lcd_of_matches (match_list, matc - #if defined (HANDLE_MULTIBYTE) - if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) - { -- mbstate_t ps_back = ps1; -+ mbstate_t ps_back; -+ ps_back = ps1; - if (!_rl_compare_chars (match_list[i], si, &ps1, match_list[i+1], si, &ps2)) - break; - else if ((v = _rl_get_char_len (&match_list[i][si], &ps_back)) > 1) -@@ -1220,7 +1315,7 @@ postprocess_matches (matchesp, matching_ - if (rl_ignore_completion_duplicates) - { - temp_matches = remove_duplicate_matches (matches); -- free (matches); -+ xfree (matches); - matches = temp_matches; - } - -@@ -1257,6 +1352,23 @@ postprocess_matches (matchesp, matching_ - return (1); - } - -+static int -+complete_get_screenwidth () -+{ -+ int cols; -+ char *envcols; -+ -+ cols = _rl_completion_columns; -+ if (cols >= 0 && cols <= _rl_screenwidth) -+ return cols; -+ envcols = getenv ("COLUMNS"); -+ if (envcols && *envcols) -+ cols = atoi (envcols); -+ if (cols >= 0 && cols <= _rl_screenwidth) -+ return cols; -+ return _rl_screenwidth; -+} -+ - /* A convenience function for displaying a list of strings in - columnar format on readline's output stream. MATCHES is the list - of strings, in argv format, LEN is the number of strings in MATCHES, -@@ -1266,17 +1378,38 @@ rl_display_match_list (matches, len, max - char **matches; - int len, max; - { -- int count, limit, printed_len, lines; -- int i, j, k, l; -- char *temp; -+ int count, limit, printed_len, lines, cols; -+ int i, j, k, l, common_length, sind; -+ char *temp, *t; -+ -+ /* Find the length of the prefix common to all items: length as displayed -+ characters (common_length) and as a byte index into the matches (sind) */ -+ common_length = sind = 0; -+ if (_rl_completion_prefix_display_length > 0) -+ { -+ t = printable_part (matches[0]); -+ temp = strrchr (t, '/'); -+ common_length = temp ? fnwidth (temp) : fnwidth (t); -+ sind = temp ? strlen (temp) : strlen (t); -+ -+ if (common_length > _rl_completion_prefix_display_length && common_length > ELLIPSIS_LEN) -+ max -= common_length - ELLIPSIS_LEN; -+ else -+ common_length = sind = 0; -+ } - - /* How many items of MAX length can we fit in the screen window? */ -+ cols = complete_get_screenwidth (); - max += 2; -- limit = _rl_screenwidth / max; -- if (limit != 1 && (limit * max == _rl_screenwidth)) -+ limit = cols / max; -+ if (limit != 1 && (limit * max == cols)) - limit--; - -- /* Avoid a possible floating exception. If max > _rl_screenwidth, -+ /* If cols == 0, limit will end up -1 */ -+ if (cols < _rl_screenwidth && limit < 0) -+ limit = 1; -+ -+ /* Avoid a possible floating exception. If max > cols, - limit will be 0 and a divide-by-zero fault will result. */ - if (limit == 0) - limit = 1; -@@ -1289,7 +1422,7 @@ rl_display_match_list (matches, len, max - 0 < len <= limit implies count = 1. */ - - /* Sort the items if they are not already sorted. */ -- if (rl_ignore_completion_duplicates == 0) -+ if (rl_ignore_completion_duplicates == 0 && rl_sort_completion_matches) - qsort (matches + 1, len, sizeof (char *), (QSFUNC *)_rl_qsort_string_compare); - - rl_crlf (); -@@ -1307,7 +1440,7 @@ rl_display_match_list (matches, len, max - else - { - temp = printable_part (matches[l]); -- printed_len = print_filename (temp, matches[l]); -+ printed_len = print_filename (temp, matches[l], sind); - - if (j + 1 < limit) - for (k = 0; k < max - printed_len; k++) -@@ -1331,7 +1464,7 @@ rl_display_match_list (matches, len, max - for (i = 1; matches[i]; i++) - { - temp = printable_part (matches[i]); -- printed_len = print_filename (temp, matches[i]); -+ printed_len = print_filename (temp, matches[i], sind); - /* Have we reached the end of this line? */ - if (matches[i+1]) - { -@@ -1381,7 +1514,7 @@ display_matches (matches) - { - temp = printable_part (matches[0]); - rl_crlf (); -- print_filename (temp, matches[0]); -+ print_filename (temp, matches[0], 0); - rl_crlf (); - - rl_forced_update_display (); -@@ -1417,7 +1550,7 @@ display_matches (matches) - rl_crlf (); - fprintf (rl_outstream, "Display all %d possibilities? (y or n)", len); - fflush (rl_outstream); -- if (get_y_or_n (0) == 0) -+ if ((completion_y_or_n = get_y_or_n (0)) == 0) - { - rl_crlf (); - -@@ -1485,8 +1618,9 @@ insert_match (match, start, mtype, qc) - int start, mtype; - char *qc; - { -- char *replacement; -+ char *replacement, *r; - char oqc; -+ int end, rlen; - - oqc = qc ? *qc : '\0'; - replacement = make_quoted_replacement (match, mtype, qc); -@@ -1494,6 +1628,7 @@ insert_match (match, start, mtype, qc) - /* Now insert the match. */ - if (replacement) - { -+ rlen = strlen (replacement); - /* Don't double an opening quote character. */ - if (qc && *qc && start && rl_line_buffer[start - 1] == *qc && - replacement[0] == *qc) -@@ -1503,9 +1638,26 @@ insert_match (match, start, mtype, qc) - else if (qc && (*qc != oqc) && start && rl_line_buffer[start - 1] == oqc && - replacement[0] != oqc) - start--; -- _rl_replace_text (replacement, start, rl_point - 1); -+ end = rl_point - 1; -+ /* Don't double a closing quote character */ -+ if (qc && *qc && end && rl_line_buffer[rl_point] == *qc && replacement[rlen - 1] == *qc) -+ end++; -+ if (_rl_skip_completed_text) -+ { -+ r = replacement; -+ while (start < rl_end && *r && rl_line_buffer[start] == *r) -+ { -+ start++; -+ r++; -+ } -+ if (start <= end || *r) -+ _rl_replace_text (r, start, end); -+ rl_point = start + strlen (r); -+ } -+ else -+ _rl_replace_text (replacement, start, end); - if (replacement != match) -- free (replacement); -+ xfree (replacement); - } - } - -@@ -1572,7 +1724,7 @@ append_to_match (text, delimiter, quote_ - if (rl_point == rl_end && temp_string_index) - rl_insert_text (temp_string); - } -- free (filename); -+ xfree (filename); - } - else - { -@@ -1608,7 +1760,7 @@ insert_all_matches (matches, point, qc) - rl_insert_text (rp); - rl_insert_text (" "); - if (rp != matches[i]) -- free (rp); -+ xfree (rp); - } - } - else -@@ -1617,7 +1769,7 @@ insert_all_matches (matches, point, qc) - rl_insert_text (rp); - rl_insert_text (" "); - if (rp != matches[0]) -- free (rp); -+ xfree (rp); - } - rl_end_undo_group (); - } -@@ -1632,8 +1784,8 @@ _rl_free_match_list (matches) - return; - - for (i = 0; matches[i]; i++) -- free (matches[i]); -- free (matches); -+ xfree (matches[i]); -+ xfree (matches); - } - - /* Complete the word at or before point. -@@ -1654,6 +1806,9 @@ rl_complete_internal (what_to_do) - int start, end, delimiter, found_quote, i, nontrivial_lcd; - char *text, *saved_line_buffer; - char quote_char; -+#if 1 -+ int tlen, mlen; -+#endif - - RL_SETSTATE(RL_STATE_COMPLETING); - -@@ -1681,7 +1836,11 @@ rl_complete_internal (what_to_do) - /* nontrivial_lcd is set if the common prefix adds something to the word - being completed. */ - nontrivial_lcd = matches && strcmp (text, matches[0]) != 0; -- free (text); -+#if 1 -+ if (what_to_do == '!' || what_to_do == '@') -+ tlen = strlen (text); -+#endif -+ xfree (text); - - if (matches == 0) - { -@@ -1689,6 +1848,7 @@ rl_complete_internal (what_to_do) - FREE (saved_line_buffer); - completion_changed_buffer = 0; - RL_UNSETSTATE(RL_STATE_COMPLETING); -+ _rl_reset_completion_state (); - return (0); - } - -@@ -1703,6 +1863,7 @@ rl_complete_internal (what_to_do) - FREE (saved_line_buffer); - completion_changed_buffer = 0; - RL_UNSETSTATE(RL_STATE_COMPLETING); -+ _rl_reset_completion_state (); - return (0); - } - -@@ -1712,8 +1873,25 @@ rl_complete_internal (what_to_do) - case '!': - case '@': - /* Insert the first match with proper quoting. */ -+#if 0 - if (*matches[0]) - insert_match (matches[0], start, matches[1] ? MULT_MATCH : SINGLE_MATCH, "e_char); -+#else -+ if (what_to_do == TAB) -+ { -+ if (*matches[0]) -+ insert_match (matches[0], start, matches[1] ? MULT_MATCH : SINGLE_MATCH, "e_char); -+ } -+ else if (*matches[0] && matches[1] == 0) -+ /* should we perform the check only if there are multiple matches? */ -+ insert_match (matches[0], start, matches[1] ? MULT_MATCH : SINGLE_MATCH, "e_char); -+ else if (*matches[0]) /* what_to_do != TAB && multiple matches */ -+ { -+ mlen = *matches[0] ? strlen (matches[0]) : 0; -+ if (mlen >= tlen) -+ insert_match (matches[0], start, matches[1] ? MULT_MATCH : SINGLE_MATCH, "e_char); -+ } -+#endif - - /* If there are more matches, ring the bell to indicate. - If we are in vi mode, Posix.2 says to not ring the bell. -@@ -1753,10 +1931,11 @@ rl_complete_internal (what_to_do) - break; - - default: -- fprintf (stderr, "\r\nreadline: bad value %d for what_to_do in rl_complete\n", what_to_do); -+ _rl_ttymsg ("bad value %d for what_to_do in rl_complete", what_to_do); - rl_ding (); - FREE (saved_line_buffer); - RL_UNSETSTATE(RL_STATE_COMPLETING); -+ _rl_reset_completion_state (); - return 1; - } - -@@ -1766,10 +1945,11 @@ rl_complete_internal (what_to_do) - if (saved_line_buffer) - { - completion_changed_buffer = strcmp (rl_line_buffer, saved_line_buffer) != 0; -- free (saved_line_buffer); -+ xfree (saved_line_buffer); - } - - RL_UNSETSTATE(RL_STATE_COMPLETING); -+ _rl_reset_completion_state (); - return 0; - } - -@@ -1813,6 +1993,7 @@ rl_completion_matches (text, entry_funct - match_list = (char **)xmalloc ((match_list_size + 1) * sizeof (char *)); - match_list[1] = (char *)NULL; - -+ _rl_interrupt_immediately++; - while (string = (*entry_function) (text, matches)) - { - if (matches + 1 == match_list_size) -@@ -1822,6 +2003,8 @@ rl_completion_matches (text, entry_funct - match_list[++matches] = string; - match_list[matches + 1] = (char *)NULL; - } -+ if (_rl_interrupt_immediately > 0) -+ _rl_interrupt_immediately--; - - /* If there were any matches, then look through them finding out the - lowest common denominator. That then becomes match_list[0]. */ -@@ -1829,7 +2012,7 @@ rl_completion_matches (text, entry_funct - compute_lcd_of_matches (match_list, matches, text); - else /* There were no matches. */ - { -- free (match_list); -+ xfree (match_list); - match_list = (char **)NULL; - } - return (match_list); -@@ -1895,6 +2078,62 @@ rl_username_completion_function (text, s - #endif /* !__WIN32__ && !__OPENNT */ - } - -+/* Return non-zero if CONVFN matches FILENAME up to the length of FILENAME -+ (FILENAME_LEN). If _rl_completion_case_fold is set, compare without -+ regard to the alphabetic case of characters. CONVFN is the possibly- -+ converted directory entry; FILENAME is what the user typed. */ -+static int -+complete_fncmp (convfn, convlen, filename, filename_len) -+ const char *convfn; -+ int convlen; -+ const char *filename; -+ int filename_len; -+{ -+ register char *s1, *s2; -+ int d, len; -+ -+ /* Otherwise, if these match up to the length of filename, then -+ it is a match. */ -+ if (_rl_completion_case_fold && _rl_completion_case_map) -+ { -+ /* Case-insensitive comparison treating _ and - as equivalent */ -+ if (filename_len == 0) -+ return 1; -+ if (convlen < filename_len) -+ return 0; -+ s1 = (char *)convfn; -+ s2 = (char *)filename; -+ len = filename_len; -+ do -+ { -+ d = _rl_to_lower (*s1) - _rl_to_lower (*s2); -+ /* *s1 == [-_] && *s2 == [-_] */ -+ if ((*s1 == '-' || *s1 == '_') && (*s2 == '-' || *s2 == '_')) -+ d = 0; -+ if (d != 0) -+ return 0; -+ s1++; s2++; /* already checked convlen >= filename_len */ -+ } -+ while (--len != 0); -+ return 1; -+ } -+ else if (_rl_completion_case_fold) -+ { -+ if ((_rl_to_lower (convfn[0]) == _rl_to_lower (filename[0])) && -+ (convlen >= filename_len) && -+ (_rl_strnicmp (filename, convfn, filename_len) == 0)) -+ return 1; -+ } -+ else -+ { -+ if ((convfn[0] == filename[0]) && -+ (convlen >= filename_len) && -+ (strncmp (filename, convfn, filename_len) == 0)) -+ return 1; -+ } -+ return 0; -+} -+ - /* Okay, now we write the entry_function for filename completion. In the - general case. Note that completion in the shell is a little different - because of all the pathnames that must be followed when looking up the -@@ -1909,8 +2148,8 @@ rl_filename_completion_function (text, s - static char *dirname = (char *)NULL; - static char *users_dirname = (char *)NULL; - static int filename_len; -- char *temp; -- int dirlen; -+ char *temp, *dentry, *convfn; -+ int dirlen, dentlen, convlen; - struct dirent *entry; - - /* If we don't have any state, then do some initialization. */ -@@ -1961,26 +2200,52 @@ rl_filename_completion_function (text, s - - /* We aren't done yet. We also support the "~user" syntax. */ - -- /* Save the version of the directory that the user typed. */ -- users_dirname = savestring (dirname); -+ /* Save the version of the directory that the user typed, dequoting -+ it if necessary. */ -+ if (rl_completion_found_quote && rl_filename_dequoting_function) -+ users_dirname = (*rl_filename_dequoting_function) (dirname, rl_completion_quote_character); -+ else -+ users_dirname = savestring (dirname); - - if (*dirname == '~') - { - temp = tilde_expand (dirname); -- free (dirname); -+ xfree (dirname); - dirname = temp; - } - -+ /* We have saved the possibly-dequoted version of the directory name -+ the user typed. Now transform the directory name we're going to -+ pass to opendir(2). The directory rewrite hook modifies only the -+ directory name; the directory completion hook modifies both the -+ directory name passed to opendir(2) and the version the user -+ typed. Both the directory completion and rewrite hooks should perform -+ any necessary dequoting. The hook functions return 1 if they modify -+ the directory name argument. If either hook returns 0, it should -+ not modify the directory name pointer passed as an argument. */ - if (rl_directory_rewrite_hook) - (*rl_directory_rewrite_hook) (&dirname); -- -- if (rl_directory_completion_hook && (*rl_directory_completion_hook) (&dirname)) -+ else if (rl_directory_completion_hook && (*rl_directory_completion_hook) (&dirname)) - { -- free (users_dirname); -+ xfree (users_dirname); - users_dirname = savestring (dirname); - } -- -+ else if (rl_completion_found_quote && rl_filename_dequoting_function) -+ { -+ /* delete single and double quotes */ -+ xfree (dirname); -+ dirname = savestring (users_dirname); -+ } - directory = opendir (dirname); -+ -+ /* Now dequote a non-null filename. */ -+ if (filename && *filename && rl_completion_found_quote && rl_filename_dequoting_function) -+ { -+ /* delete single and double quotes */ -+ temp = (*rl_filename_dequoting_function) (filename, rl_completion_quote_character); -+ xfree (filename); -+ filename = temp; -+ } - filename_len = strlen (filename); - - rl_filename_completion_desired = 1; -@@ -1997,37 +2262,31 @@ rl_filename_completion_function (text, s - entry = (struct dirent *)NULL; - while (directory && (entry = readdir (directory))) - { -+ convfn = dentry = entry->d_name; -+ convlen = dentlen = D_NAMLEN (entry); -+ -+ if (rl_filename_rewrite_hook) -+ { -+ convfn = (*rl_filename_rewrite_hook) (dentry, dentlen); -+ convlen = (convfn == dentry) ? dentlen : strlen (convfn); -+ } -+ - /* Special case for no filename. If the user has disabled the - `match-hidden-files' variable, skip filenames beginning with `.'. - All other entries except "." and ".." match. */ - if (filename_len == 0) - { -- if (_rl_match_hidden_files == 0 && HIDDEN_FILE (entry->d_name)) -+ if (_rl_match_hidden_files == 0 && HIDDEN_FILE (convfn)) - continue; - -- if (entry->d_name[0] != '.' || -- (entry->d_name[1] && -- (entry->d_name[1] != '.' || entry->d_name[2]))) -+ if (convfn[0] != '.' || -+ (convfn[1] && (convfn[1] != '.' || convfn[2]))) - break; - } - else - { -- /* Otherwise, if these match up to the length of filename, then -- it is a match. */ -- if (_rl_completion_case_fold) -- { -- if ((_rl_to_lower (entry->d_name[0]) == _rl_to_lower (filename[0])) && -- (((int)D_NAMLEN (entry)) >= filename_len) && -- (_rl_strnicmp (filename, entry->d_name, filename_len) == 0)) -- break; -- } -- else -- { -- if ((entry->d_name[0] == filename[0]) && -- (((int)D_NAMLEN (entry)) >= filename_len) && -- (strncmp (filename, entry->d_name, filename_len) == 0)) -- break; -- } -+ if (complete_fncmp (convfn, convlen, filename, filename_len)) -+ break; - } - } - -@@ -2040,17 +2299,17 @@ rl_filename_completion_function (text, s - } - if (dirname) - { -- free (dirname); -+ xfree (dirname); - dirname = (char *)NULL; - } - if (filename) - { -- free (filename); -+ xfree (filename); - filename = (char *)NULL; - } - if (users_dirname) - { -- free (users_dirname); -+ xfree (users_dirname); - users_dirname = (char *)NULL; - } - -@@ -2084,27 +2343,30 @@ rl_filename_completion_function (text, s - temp[dirlen++] = '/'; - } - -- strcpy (temp + dirlen, entry->d_name); -+ strcpy (temp + dirlen, convfn); - } - else -- temp = savestring (entry->d_name); -+ temp = savestring (convfn); -+ -+ if (convfn != dentry) -+ xfree (convfn); - - return (temp); - } - } - - /* An initial implementation of a menu completion function a la tcsh. The -- first time (if the last readline command was not rl_menu_complete), we -+ first time (if the last readline command was not rl_old_menu_complete), we - generate the list of matches. This code is very similar to the code in - rl_complete_internal -- there should be a way to combine the two. Then, - for each item in the list of matches, we insert the match in an undoable - fashion, with the appropriate character appended (this happens on the -- second and subsequent consecutive calls to rl_menu_complete). When we -+ second and subsequent consecutive calls to rl_old_menu_complete). When we - hit the end of the match list, we restore the original unmatched text, - ring the bell, and reset the counter to zero. */ - int --rl_menu_complete (count, ignore) -- int count, ignore; -+rl_old_menu_complete (count, invoking_key) -+ int count, invoking_key; - { - rl_compentry_func_t *our_func; - int matching_filenames, found_quote; -@@ -2119,7 +2381,7 @@ rl_menu_complete (count, ignore) - - /* The first time through, we generate the list of matches and set things - up to insert them. */ -- if (rl_last_func != rl_menu_complete) -+ if (rl_last_func != rl_old_menu_complete) - { - /* Clean up from previous call, if any. */ - FREE (orig_text); -@@ -2129,10 +2391,16 @@ rl_menu_complete (count, ignore) - match_list_index = match_list_size = 0; - matches = (char **)NULL; - -+ rl_completion_invoking_key = invoking_key; -+ -+ RL_SETSTATE(RL_STATE_COMPLETING); -+ - /* Only the completion entry function can change these. */ - set_completion_defaults ('%'); - -- our_func = rl_completion_entry_function -+ our_func = rl_menu_completion_entry_function; -+ if (our_func == 0) -+ our_func = rl_completion_entry_function - ? rl_completion_entry_function - : rl_filename_completion_function; - -@@ -2160,19 +2428,25 @@ rl_menu_complete (count, ignore) - - if (matches == 0 || postprocess_matches (&matches, matching_filenames) == 0) - { -- rl_ding (); -+ rl_ding (); - FREE (matches); - matches = (char **)0; - FREE (orig_text); - orig_text = (char *)0; -- completion_changed_buffer = 0; -- return (0); -+ completion_changed_buffer = 0; -+ RL_UNSETSTATE(RL_STATE_COMPLETING); -+ return (0); - } - -+ RL_UNSETSTATE(RL_STATE_COMPLETING); -+ - for (match_list_size = 0; matches[match_list_size]; match_list_size++) - ; - /* matches[0] is lcd if match_list_size > 1, but the circular buffer - code below should take care of it. */ -+ -+ if (match_list_size > 1 && _rl_complete_show_all) -+ display_matches (matches); - } - - /* Now we have the list of matches. Replace the text between -@@ -2190,7 +2464,10 @@ rl_menu_complete (count, ignore) - - match_list_index += count; - if (match_list_index < 0) -- match_list_index += match_list_size; -+ { -+ while (match_list_index < 0) -+ match_list_index += match_list_size; -+ } - else - match_list_index %= match_list_size; - -@@ -2209,3 +2486,180 @@ rl_menu_complete (count, ignore) - completion_changed_buffer = 1; - return (0); - } -+ -+int -+rl_menu_complete (count, ignore) -+ int count, ignore; -+{ -+ rl_compentry_func_t *our_func; -+ int matching_filenames, found_quote; -+ -+ static char *orig_text; -+ static char **matches = (char **)0; -+ static int match_list_index = 0; -+ static int match_list_size = 0; -+ static int nontrivial_lcd = 0; -+ static int full_completion = 0; /* set to 1 if menu completion should reinitialize on next call */ -+ static int orig_start, orig_end; -+ static char quote_char; -+ static int delimiter, cstate; -+ -+ /* The first time through, we generate the list of matches and set things -+ up to insert them. */ -+ if ((rl_last_func != rl_menu_complete && rl_last_func != rl_backward_menu_complete) || full_completion) -+ { -+ /* Clean up from previous call, if any. */ -+ FREE (orig_text); -+ if (matches) -+ _rl_free_match_list (matches); -+ -+ match_list_index = match_list_size = 0; -+ matches = (char **)NULL; -+ -+ full_completion = 0; -+ -+ RL_SETSTATE(RL_STATE_COMPLETING); -+ -+ /* Only the completion entry function can change these. */ -+ set_completion_defaults ('%'); -+ -+ our_func = rl_menu_completion_entry_function; -+ if (our_func == 0) -+ our_func = rl_completion_entry_function -+ ? rl_completion_entry_function -+ : rl_filename_completion_function; -+ -+ /* We now look backwards for the start of a filename/variable word. */ -+ orig_end = rl_point; -+ found_quote = delimiter = 0; -+ quote_char = '\0'; -+ -+ if (rl_point) -+ /* This (possibly) changes rl_point. If it returns a non-zero char, -+ we know we have an open quote. */ -+ quote_char = _rl_find_completion_word (&found_quote, &delimiter); -+ -+ orig_start = rl_point; -+ rl_point = orig_end; -+ -+ orig_text = rl_copy_text (orig_start, orig_end); -+ matches = gen_completion_matches (orig_text, orig_start, orig_end, -+ our_func, found_quote, quote_char); -+ -+ nontrivial_lcd = matches && strcmp (orig_text, matches[0]) != 0; -+ -+ /* If we are matching filenames, the attempted completion function will -+ have set rl_filename_completion_desired to a non-zero value. The basic -+ rl_filename_completion_function does this. */ -+ matching_filenames = rl_filename_completion_desired; -+ -+ if (matches == 0 || postprocess_matches (&matches, matching_filenames) == 0) -+ { -+ rl_ding (); -+ FREE (matches); -+ matches = (char **)0; -+ FREE (orig_text); -+ orig_text = (char *)0; -+ completion_changed_buffer = 0; -+ RL_UNSETSTATE(RL_STATE_COMPLETING); -+ return (0); -+ } -+ -+ RL_UNSETSTATE(RL_STATE_COMPLETING); -+ -+ for (match_list_size = 0; matches[match_list_size]; match_list_size++) -+ ; -+ -+ if (match_list_size == 0) -+ { -+ rl_ding (); -+ FREE (matches); -+ matches = (char **)0; -+ match_list_index = 0; -+ completion_changed_buffer = 0; -+ return (0); -+ } -+ -+ /* matches[0] is lcd if match_list_size > 1, but the circular buffer -+ code below should take care of it. */ -+ if (*matches[0]) -+ { -+ insert_match (matches[0], orig_start, matches[1] ? MULT_MATCH : SINGLE_MATCH, "e_char); -+ orig_end = orig_start + strlen (matches[0]); -+ completion_changed_buffer = STREQ (orig_text, matches[0]) == 0; -+ } -+ -+ if (match_list_size > 1 && _rl_complete_show_all) -+ { -+ display_matches (matches); -+ /* If there are so many matches that the user has to be asked -+ whether or not he wants to see the matches, menu completion -+ is unwieldy. */ -+ if (rl_completion_query_items > 0 && match_list_size >= rl_completion_query_items) -+ { -+ rl_ding (); -+ FREE (matches); -+ matches = (char **)0; -+ full_completion = 1; -+ return (0); -+ } -+ } -+ else if (match_list_size <= 1) -+ { -+ append_to_match (matches[0], delimiter, quote_char, nontrivial_lcd); -+ full_completion = 1; -+ return (0); -+ } -+ else if (_rl_menu_complete_prefix_first && match_list_size > 1) -+ { -+ rl_ding (); -+ return (0); -+ } -+ } -+ -+ /* Now we have the list of matches. Replace the text between -+ rl_line_buffer[orig_start] and rl_line_buffer[rl_point] with -+ matches[match_list_index], and add any necessary closing char. */ -+ -+ if (matches == 0 || match_list_size == 0) -+ { -+ rl_ding (); -+ FREE (matches); -+ matches = (char **)0; -+ completion_changed_buffer = 0; -+ return (0); -+ } -+ -+ match_list_index += count; -+ if (match_list_index < 0) -+ { -+ while (match_list_index < 0) -+ match_list_index += match_list_size; -+ } -+ else -+ match_list_index %= match_list_size; -+ -+ if (match_list_index == 0 && match_list_size > 1) -+ { -+ rl_ding (); -+ insert_match (matches[0], orig_start, MULT_MATCH, "e_char); -+ } -+ else -+ { -+ insert_match (matches[match_list_index], orig_start, SINGLE_MATCH, "e_char); -+ append_to_match (matches[match_list_index], delimiter, quote_char, -+ strcmp (orig_text, matches[match_list_index])); -+ } -+ -+ completion_changed_buffer = 1; -+ return (0); -+} -+ -+int -+rl_backward_menu_complete (count, key) -+ int count, key; -+{ -+ /* Positive arguments to backward-menu-complete translate into negative -+ arguments for menu-complete, and vice versa. */ -+ return (rl_menu_complete (-count, key)); -+} -Index: gdb-7.2.90.20110703/readline/config.h.in -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/config.h.in 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/config.h.in 2011-07-03 10:41:21.000000000 +0200 -@@ -4,6 +4,8 @@ - characters, even if the OS supports them. */ - #undef NO_MULTIBYTE_SUPPORT - -+#undef _FILE_OFFSET_BITS -+ - /* Define if on MINIX. */ - #undef _MINIX - -@@ -13,12 +15,16 @@ - #undef VOID_SIGHANDLER - - /* Characteristics of the compiler. */ --#undef const -+#undef sig_atomic_t - - #undef size_t - - #undef ssize_t - -+#undef const -+ -+#undef volatile -+ - #undef PROTOTYPES - - #undef __CHAR_UNSIGNED__ -@@ -41,6 +47,15 @@ - /* Define if you have the isascii function. */ - #undef HAVE_ISASCII - -+/* Define if you have the iswctype function. */ -+#undef HAVE_ISWCTYPE -+ -+/* Define if you have the iswlower function. */ -+#undef HAVE_ISWLOWER -+ -+/* Define if you have the iswupper function. */ -+#undef HAVE_ISWUPPER -+ - /* Define if you have the isxdigit function. */ - #undef HAVE_ISXDIGIT - -@@ -88,11 +103,23 @@ - /* Define if you have the tcgetattr function. */ - #undef HAVE_TCGETATTR - -+/* Define if you have the towlower function. */ -+#undef HAVE_TOWLOWER -+ -+/* Define if you have the towupper function. */ -+#undef HAVE_TOWUPPER -+ - /* Define if you have the vsnprintf function. */ - #undef HAVE_VSNPRINTF - --/* Define if you have the wctomb function. */ --#undef HAVE_WCTOMB -+/* Define if you have the wcrtomb function. */ -+#undef HAVE_WCRTOMB -+ -+/* Define if you have the wcscoll function. */ -+#undef HAVE_WCSCOLL -+ -+/* Define if you have the wctype function. */ -+#undef HAVE_WCTYPE - - /* Define if you have the wcwidth function. */ - #undef HAVE_WCWIDTH -@@ -174,11 +201,20 @@ - /* Define if you have the header file. */ - #undef HAVE_WCHAR_H - --/* Define if you have the header file. */ -+/* Define if you have the header file. */ - #undef HAVE_WCTYPE_H - - #undef HAVE_MBSTATE_T - -+/* Define if you have wchar_t in . */ -+#undef HAVE_WCHAR_T -+ -+/* Define if you have wctype_t in . */ -+#undef HAVE_WCTYPE_T -+ -+/* Define if you have wint_t in . */ -+#undef HAVE_WINT_T -+ - /* Define if you have and nl_langinfo(CODESET). */ - #undef HAVE_LANGINFO_CODESET - -@@ -223,10 +259,6 @@ - # define TERMIOS_MISSING - #endif - --#if defined (STRCOLL_BROKEN) --# undef HAVE_STRCOLL --#endif -- - #if defined (__STDC__) && defined (HAVE_STDARG_H) - # define PREFER_STDARG - # define USE_VARARGS -Index: gdb-7.2.90.20110703/readline/configure -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/configure 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/configure 2011-07-03 10:41:21.000000000 +0200 -@@ -1,7 +1,7 @@ - #! /bin/sh --# From configure.in for Readline 5.1, version 2.59. -+# From configure.in for Readline 6.2, version 2.67. - # Guess values for system-dependent variables and create Makefiles. --# Generated by GNU Autoconf 2.64 for readline 5.1-release. -+# Generated by GNU Autoconf 2.64 for readline 6.2. - # - # Report bugs to . - # -@@ -550,8 +550,8 @@ MAKEFLAGS= - # Identity of this package. - PACKAGE_NAME='readline' - PACKAGE_TARNAME='readline' --PACKAGE_VERSION='5.1-release' --PACKAGE_STRING='readline 5.1-release' -+PACKAGE_VERSION='6.2' -+PACKAGE_STRING='readline 6.2' - PACKAGE_BUGREPORT='bug-readline@gnu.org' - PACKAGE_URL='' - -@@ -593,7 +593,6 @@ ac_includes_default="\ - #endif" - - ac_subst_vars='LTLIBOBJS --LIBOBJS - TERMCAP_LIB - LIBVERSION - ARFLAGS -@@ -623,14 +622,13 @@ SHOBJ_LDFLAGS - SHOBJ_LD - SHOBJ_CFLAGS - SHOBJ_CC --WCWIDTH_OBJ -+LIBOBJS - MAKE_SHELL - RANLIB - AR - INSTALL_DATA - INSTALL_SCRIPT - INSTALL_PROGRAM --CC_FOR_BUILD - EGREP - GREP - CPP -@@ -696,6 +694,7 @@ with_curses - with_purify - enable_multibyte - enable_static -+enable_largefile - ' - ac_precious_vars='build_alias - host_alias -@@ -1247,7 +1246,7 @@ if test "$ac_init_help" = "long"; then - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat <<_ACEOF --\`configure' configures readline 5.1-release to adapt to many kinds of systems. -+\`configure' configures readline 6.2 to adapt to many kinds of systems. - - Usage: $0 [OPTION]... [VAR=VALUE]... - -@@ -1312,7 +1311,7 @@ fi - - if test -n "$ac_init_help"; then - case $ac_init_help in -- short | recursive ) echo "Configuration of readline 5.1-release:";; -+ short | recursive ) echo "Configuration of readline 6.2:";; - esac - cat <<\_ACEOF - -@@ -1322,6 +1321,7 @@ Optional Features: - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --enable-multibyte enable multibyte characters if OS supports them - --enable-static build static libraries [default=YES] -+ --disable-largefile omit support for large files - - Optional Packages: - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] -@@ -1406,7 +1406,7 @@ fi - test -n "$ac_init_help" && exit $ac_status - if $ac_init_version; then - cat <<\_ACEOF --readline configure 5.1-release -+readline configure 6.2 - generated by GNU Autoconf 2.64 - - Copyright (C) 2009 Free Software Foundation, Inc. -@@ -1831,7 +1831,7 @@ cat >config.log <<_ACEOF - This file contains any messages produced by compilers while - running configure, to aid debugging if configure makes a mistake. - --It was created by readline $as_me 5.1-release, which was -+It was created by readline $as_me 6.2, which was - generated by GNU Autoconf 2.64. Invocation command line was - - $ $0 $@ -@@ -2211,7 +2211,7 @@ ac_configure="$SHELL $ac_aux_dir/configu - ac_config_headers="$ac_config_headers config.h" - - --LIBVERSION=5.1 -+LIBVERSION=6.2 - - # Make sure we can run config.sub. - $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || -@@ -3622,39 +3622,6 @@ $as_echo "$ac_cv_safe_to_define___extens - - - -- --if test "x$cross_compiling" = "xyes"; then -- case "${host}" in -- *-cygwin*) -- cross_cache=${srcdir}/cross-build/cygwin.cache -- LOCAL_CFLAGS="$LOCAL_CFLAGS -I${srcdir}/../libtermcap" -- ;; -- *-mingw32*) -- cross_cache=${srcdir}/cross-build/mingw.cache -- ;; -- *) echo "configure: cross-compiling for a non-cygwin target is not supported" >&2 -- ;; -- esac -- -- if test "x$cross_cache" != "x"; then -- if test -r "${cross_cache}"; then -- echo "loading cross-build cache file ${cross_cache}" -- . ${cross_cache} -- fi -- unset cross_cache -- fi --fi -- --if test -z "$CC_FOR_BUILD"; then -- if test "x$cross_compiling" = "xno"; then -- CC_FOR_BUILD='$(CC)' -- else -- CC_FOR_BUILD=gcc -- fi --fi -- -- -- - # If we're using gcc and the user hasn't specified CFLAGS, add -O to CFLAGS. - test -n "$GCC" && test -n "$auto_cflags" && CFLAGS="$CFLAGS -O" - -@@ -4056,6 +4023,40 @@ if test $ac_cv_c_char_unsigned = yes && - - fi - -+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working volatile" >&5 -+$as_echo_n "checking for working volatile... " >&6; } -+if test "${ac_cv_c_volatile+set}" = set; then : -+ $as_echo_n "(cached) " >&6 -+else -+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+/* end confdefs.h. */ -+ -+int -+main () -+{ -+ -+volatile int x; -+int * volatile y = (int *) 0; -+return !x && !y; -+ ; -+ return 0; -+} -+_ACEOF -+if ac_fn_c_try_compile "$LINENO"; then : -+ ac_cv_c_volatile=yes -+else -+ ac_cv_c_volatile=no -+fi -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi -+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_volatile" >&5 -+$as_echo "$ac_cv_c_volatile" >&6; } -+if test $ac_cv_c_volatile = no; then -+ -+$as_echo "#define volatile /**/" >>confdefs.h -+ -+fi -+ - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers" >&5 - $as_echo_n "checking return type of signal handlers... " >&6; } -@@ -4571,6 +4572,205 @@ fi - done - - -+# Check whether --enable-largefile was given. -+if test "${enable_largefile+set}" = set; then : -+ enableval=$enable_largefile; -+fi -+ -+if test "$enable_largefile" != no; then -+ -+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 -+$as_echo_n "checking for special C compiler options needed for large files... " >&6; } -+if test "${ac_cv_sys_largefile_CC+set}" = set; then : -+ $as_echo_n "(cached) " >&6 -+else -+ ac_cv_sys_largefile_CC=no -+ if test "$GCC" != yes; then -+ ac_save_CC=$CC -+ while :; do -+ # IRIX 6.2 and later do not support large files by default, -+ # so use the C compiler's -n32 option if that helps. -+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+/* end confdefs.h. */ -+#include -+ /* Check that off_t can represent 2**63 - 1 correctly. -+ We can't simply define LARGE_OFF_T to be 9223372036854775807, -+ since some C++ compilers masquerading as C compilers -+ incorrectly reject 9223372036854775807. */ -+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) -+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 -+ && LARGE_OFF_T % 2147483647 == 1) -+ ? 1 : -1]; -+int -+main () -+{ -+ -+ ; -+ return 0; -+} -+_ACEOF -+ if ac_fn_c_try_compile "$LINENO"; then : -+ break -+fi -+rm -f core conftest.err conftest.$ac_objext -+ CC="$CC -n32" -+ if ac_fn_c_try_compile "$LINENO"; then : -+ ac_cv_sys_largefile_CC=' -n32'; break -+fi -+rm -f core conftest.err conftest.$ac_objext -+ break -+ done -+ CC=$ac_save_CC -+ rm -f conftest.$ac_ext -+ fi -+fi -+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 -+$as_echo "$ac_cv_sys_largefile_CC" >&6; } -+ if test "$ac_cv_sys_largefile_CC" != no; then -+ CC=$CC$ac_cv_sys_largefile_CC -+ fi -+ -+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 -+$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } -+if test "${ac_cv_sys_file_offset_bits+set}" = set; then : -+ $as_echo_n "(cached) " >&6 -+else -+ while :; do -+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+/* end confdefs.h. */ -+#include -+ /* Check that off_t can represent 2**63 - 1 correctly. -+ We can't simply define LARGE_OFF_T to be 9223372036854775807, -+ since some C++ compilers masquerading as C compilers -+ incorrectly reject 9223372036854775807. */ -+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) -+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 -+ && LARGE_OFF_T % 2147483647 == 1) -+ ? 1 : -1]; -+int -+main () -+{ -+ -+ ; -+ return 0; -+} -+_ACEOF -+if ac_fn_c_try_compile "$LINENO"; then : -+ ac_cv_sys_file_offset_bits=no; break -+fi -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+/* end confdefs.h. */ -+#define _FILE_OFFSET_BITS 64 -+#include -+ /* Check that off_t can represent 2**63 - 1 correctly. -+ We can't simply define LARGE_OFF_T to be 9223372036854775807, -+ since some C++ compilers masquerading as C compilers -+ incorrectly reject 9223372036854775807. */ -+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) -+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 -+ && LARGE_OFF_T % 2147483647 == 1) -+ ? 1 : -1]; -+int -+main () -+{ -+ -+ ; -+ return 0; -+} -+_ACEOF -+if ac_fn_c_try_compile "$LINENO"; then : -+ ac_cv_sys_file_offset_bits=64; break -+fi -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+ ac_cv_sys_file_offset_bits=unknown -+ break -+done -+fi -+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 -+$as_echo "$ac_cv_sys_file_offset_bits" >&6; } -+case $ac_cv_sys_file_offset_bits in #( -+ no | unknown) ;; -+ *) -+cat >>confdefs.h <<_ACEOF -+#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits -+_ACEOF -+;; -+esac -+rm -rf conftest* -+ if test $ac_cv_sys_file_offset_bits = unknown; then -+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 -+$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } -+if test "${ac_cv_sys_large_files+set}" = set; then : -+ $as_echo_n "(cached) " >&6 -+else -+ while :; do -+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+/* end confdefs.h. */ -+#include -+ /* Check that off_t can represent 2**63 - 1 correctly. -+ We can't simply define LARGE_OFF_T to be 9223372036854775807, -+ since some C++ compilers masquerading as C compilers -+ incorrectly reject 9223372036854775807. */ -+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) -+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 -+ && LARGE_OFF_T % 2147483647 == 1) -+ ? 1 : -1]; -+int -+main () -+{ -+ -+ ; -+ return 0; -+} -+_ACEOF -+if ac_fn_c_try_compile "$LINENO"; then : -+ ac_cv_sys_large_files=no; break -+fi -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+/* end confdefs.h. */ -+#define _LARGE_FILES 1 -+#include -+ /* Check that off_t can represent 2**63 - 1 correctly. -+ We can't simply define LARGE_OFF_T to be 9223372036854775807, -+ since some C++ compilers masquerading as C compilers -+ incorrectly reject 9223372036854775807. */ -+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) -+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 -+ && LARGE_OFF_T % 2147483647 == 1) -+ ? 1 : -1]; -+int -+main () -+{ -+ -+ ; -+ return 0; -+} -+_ACEOF -+if ac_fn_c_try_compile "$LINENO"; then : -+ ac_cv_sys_large_files=1; break -+fi -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+ ac_cv_sys_large_files=unknown -+ break -+done -+fi -+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 -+$as_echo "$ac_cv_sys_large_files" >&6; } -+case $ac_cv_sys_large_files in #( -+ no | unknown) ;; -+ *) -+cat >>confdefs.h <<_ACEOF -+#define _LARGE_FILES $ac_cv_sys_large_files -+_ACEOF -+;; -+esac -+rm -rf conftest* -+ fi -+fi -+ -+ - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for type of signal functions" >&5 - $as_echo_n "checking for type of signal functions... " >&6; } -@@ -5078,6 +5278,49 @@ $as_echo "#define GWINSZ_IN_SYS_IOCTL 1" - fi - - -+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sig_atomic_t in signal.h" >&5 -+$as_echo_n "checking for sig_atomic_t in signal.h... " >&6; } -+if test "${ac_cv_have_sig_atomic_t+set}" = set; then : -+ $as_echo_n "(cached) " >&6 -+else -+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+/* end confdefs.h. */ -+ -+#include -+ -+int -+main () -+{ -+ sig_atomic_t x; -+ ; -+ return 0; -+} -+_ACEOF -+if ac_fn_c_try_link "$LINENO"; then : -+ ac_cv_have_sig_atomic_t=yes -+else -+ ac_cv_have_sig_atomic_t=no -+fi -+rm -f core conftest.err conftest.$ac_objext \ -+ conftest$ac_exeext conftest.$ac_ext -+fi -+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_sig_atomic_t" >&5 -+$as_echo "$ac_cv_have_sig_atomic_t" >&6; } -+if test "$ac_cv_have_sig_atomic_t" = "no" -+then -+ ac_fn_c_check_type "$LINENO" "sig_atomic_t" "ac_cv_type_sig_atomic_t" "$ac_includes_default" -+if test "x$ac_cv_type_sig_atomic_t" = x""yes; then : -+ -+else -+ -+cat >>confdefs.h <<_ACEOF -+#define sig_atomic_t int -+_ACEOF -+ -+fi -+ -+fi -+ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether signal handlers are of type void" >&5 - $as_echo_n "checking whether signal handlers are of type void... " >&6; } - if test "${bash_cv_void_sighandler+set}" = set; then : -@@ -5116,6 +5359,7 @@ $as_echo "#define VOID_SIGHANDLER 1" >>c - - fi - -+ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TIOCSTAT in sys/ioctl.h" >&5 - $as_echo_n "checking for TIOCSTAT in sys/ioctl.h... " >&6; } - if test "${bash_cv_tiocstat_in_ioctl+set}" = set; then : -@@ -5638,27 +5882,73 @@ fi - done - - -+ac_fn_c_check_func "$LINENO" "mbrlen" "ac_cv_func_mbrlen" -+if test "x$ac_cv_func_mbrlen" = x""yes; then : -+ $as_echo "#define HAVE_MBRLEN 1" >>confdefs.h -+ -+fi -+ -+ac_fn_c_check_func "$LINENO" "mbscasecmp" "ac_cv_func_mbscasecmp" -+if test "x$ac_cv_func_mbscasecmp" = x""yes; then : -+ $as_echo "#define HAVE_MBSCMP 1" >>confdefs.h -+ -+fi -+ -+ac_fn_c_check_func "$LINENO" "mbscmp" "ac_cv_func_mbscmp" -+if test "x$ac_cv_func_mbscmp" = x""yes; then : -+ $as_echo "#define HAVE_MBSCMP 1" >>confdefs.h -+ -+fi -+ -+ac_fn_c_check_func "$LINENO" "mbsnrtowcs" "ac_cv_func_mbsnrtowcs" -+if test "x$ac_cv_func_mbsnrtowcs" = x""yes; then : -+ $as_echo "#define HAVE_MBSNRTOWCS 1" >>confdefs.h -+ -+fi -+ - ac_fn_c_check_func "$LINENO" "mbsrtowcs" "ac_cv_func_mbsrtowcs" - if test "x$ac_cv_func_mbsrtowcs" = x""yes; then : - $as_echo "#define HAVE_MBSRTOWCS 1" >>confdefs.h - - fi - --ac_fn_c_check_func "$LINENO" "mbrtowc" "ac_cv_func_mbrtowc" --if test "x$ac_cv_func_mbrtowc" = x""yes; then : -- $as_echo "#define HAVE_MBRTOWC 1" >>confdefs.h -+ -+ -+for ac_func in mbschr -+do : -+ ac_fn_c_check_func "$LINENO" "mbschr" "ac_cv_func_mbschr" -+if test "x$ac_cv_func_mbschr" = x""yes; then : -+ cat >>confdefs.h <<_ACEOF -+#define HAVE_MBSCHR 1 -+_ACEOF -+ -+else -+ case " $LIBOBJS " in -+ *" $ac_func.$ac_objext "* ) ;; -+ *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext" -+ ;; -+esac - - fi -+done - --ac_fn_c_check_func "$LINENO" "mbrlen" "ac_cv_func_mbrlen" --if test "x$ac_cv_func_mbrlen" = x""yes; then : -- $as_echo "#define HAVE_MBRLEN 1" >>confdefs.h -+ -+ -+ac_fn_c_check_func "$LINENO" "wcrtomb" "ac_cv_func_wcrtomb" -+if test "x$ac_cv_func_wcrtomb" = x""yes; then : -+ $as_echo "#define HAVE_WCRTOMB 1" >>confdefs.h - - fi - --ac_fn_c_check_func "$LINENO" "wctomb" "ac_cv_func_wctomb" --if test "x$ac_cv_func_wctomb" = x""yes; then : -- $as_echo "#define HAVE_WCTOMB 1" >>confdefs.h -+ac_fn_c_check_func "$LINENO" "wcscoll" "ac_cv_func_wcscoll" -+if test "x$ac_cv_func_wcscoll" = x""yes; then : -+ $as_echo "#define HAVE_WCSCOLL 1" >>confdefs.h -+ -+fi -+ -+ac_fn_c_check_func "$LINENO" "wcsdup" "ac_cv_func_wcsdup" -+if test "x$ac_cv_func_wcsdup" = x""yes; then : -+ $as_echo "#define HAVE_WCSDUP 1" >>confdefs.h - - fi - -@@ -5668,55 +5958,89 @@ if test "x$ac_cv_func_wcwidth" = x""yes; - - fi - --ac_fn_c_check_func "$LINENO" "wcsdup" "ac_cv_func_wcsdup" --if test "x$ac_cv_func_wcsdup" = x""yes; then : -- $as_echo "#define HAVE_WCSDUP 1" >>confdefs.h -+ac_fn_c_check_func "$LINENO" "wctype" "ac_cv_func_wctype" -+if test "x$ac_cv_func_wctype" = x""yes; then : -+ $as_echo "#define HAVE_WCTYPE 1" >>confdefs.h - - fi - - --if test "$ac_cv_func_wcwidth" = no && test "$ac_cv_header_wchar_h" = yes; then -- WCWIDTH_OBJ=wcwidth.o -+for ac_func in wcswidth -+do : -+ ac_fn_c_check_func "$LINENO" "wcswidth" "ac_cv_func_wcswidth" -+if test "x$ac_cv_func_wcswidth" = x""yes; then : -+ cat >>confdefs.h <<_ACEOF -+#define HAVE_WCSWIDTH 1 -+_ACEOF -+ - else -- WCWIDTH_OBJ= -+ case " $LIBOBJS " in -+ *" $ac_func.$ac_objext "* ) ;; -+ *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext" -+ ;; -+esac -+ - fi -+done -+ -+ - - --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for mbstate_t" >&5 --$as_echo_n "checking for mbstate_t... " >&6; } --if test "${bash_cv_have_mbstate_t+set}" = set; then : -+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc and mbstate_t are properly declared" >&5 -+$as_echo_n "checking whether mbrtowc and mbstate_t are properly declared... " >&6; } -+if test "${ac_cv_func_mbrtowc+set}" = set; then : - $as_echo_n "(cached) " >&6 - else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext - /* end confdefs.h. */ -- - #include - int - main () - { -- -- mbstate_t ps; -- mbstate_t *psp; -- psp = (mbstate_t *)0; -- -+wchar_t wc; -+ char const s[] = ""; -+ size_t n = 1; -+ mbstate_t state; -+ return ! (sizeof state && (mbrtowc) (&wc, s, n, &state)); - ; - return 0; - } - _ACEOF --if ac_fn_c_try_compile "$LINENO"; then : -- bash_cv_have_mbstate_t=yes -+if ac_fn_c_try_link "$LINENO"; then : -+ ac_cv_func_mbrtowc=yes - else -- bash_cv_have_mbstate_t=no -+ ac_cv_func_mbrtowc=no - fi --rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+rm -f core conftest.err conftest.$ac_objext \ -+ conftest$ac_exeext conftest.$ac_ext - fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_have_mbstate_t" >&5 --$as_echo "$bash_cv_have_mbstate_t" >&6; } --if test $bash_cv_have_mbstate_t = yes; then -+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mbrtowc" >&5 -+$as_echo "$ac_cv_func_mbrtowc" >&6; } -+ if test $ac_cv_func_mbrtowc = yes; then -+ -+$as_echo "#define HAVE_MBRTOWC 1" >>confdefs.h -+ -+ fi -+ -+if test $ac_cv_func_mbrtowc = yes; then - $as_echo "#define HAVE_MBSTATE_T 1" >>confdefs.h - - fi - -+for ac_func in iswlower iswupper towlower towupper iswctype -+do : -+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -+eval as_val=\$$as_ac_var -+ if test "x$as_val" = x""yes; then : -+ cat >>confdefs.h <<_ACEOF -+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -+_ACEOF -+ -+fi -+done -+ -+ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo and CODESET" >&5 - $as_echo_n "checking for nl_langinfo and CODESET... " >&6; } - if test "${bash_cv_langinfo_codeset+set}" = set; then : -@@ -5748,6 +6072,126 @@ if test $bash_cv_langinfo_codeset = yes; - - fi - -+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for wchar_t in wchar.h" >&5 -+$as_echo_n "checking for wchar_t in wchar.h... " >&6; } -+if test "${bash_cv_type_wchar_t+set}" = set; then : -+ $as_echo_n "(cached) " >&6 -+else -+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+/* end confdefs.h. */ -+#include -+ -+int -+main () -+{ -+ -+ wchar_t foo; -+ foo = 0; -+ -+ ; -+ return 0; -+} -+_ACEOF -+if ac_fn_c_try_compile "$LINENO"; then : -+ bash_cv_type_wchar_t=yes -+else -+ bash_cv_type_wchar_t=no -+fi -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi -+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_wchar_t" >&5 -+$as_echo "$bash_cv_type_wchar_t" >&6; } -+if test $bash_cv_type_wchar_t = yes; then -+ -+$as_echo "#define HAVE_WCHAR_T 1" >>confdefs.h -+ -+fi -+ -+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for wctype_t in wctype.h" >&5 -+$as_echo_n "checking for wctype_t in wctype.h... " >&6; } -+if test "${bash_cv_type_wctype_t+set}" = set; then : -+ $as_echo_n "(cached) " >&6 -+else -+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+/* end confdefs.h. */ -+#include -+int -+main () -+{ -+ -+ wctype_t foo; -+ foo = 0; -+ -+ ; -+ return 0; -+} -+_ACEOF -+if ac_fn_c_try_compile "$LINENO"; then : -+ bash_cv_type_wctype_t=yes -+else -+ bash_cv_type_wctype_t=no -+fi -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi -+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_wctype_t" >&5 -+$as_echo "$bash_cv_type_wctype_t" >&6; } -+if test $bash_cv_type_wctype_t = yes; then -+ -+$as_echo "#define HAVE_WCTYPE_T 1" >>confdefs.h -+ -+fi -+ -+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for wint_t in wctype.h" >&5 -+$as_echo_n "checking for wint_t in wctype.h... " >&6; } -+if test "${bash_cv_type_wint_t+set}" = set; then : -+ $as_echo_n "(cached) " >&6 -+else -+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+/* end confdefs.h. */ -+#include -+int -+main () -+{ -+ -+ wint_t foo; -+ foo = 0; -+ -+ ; -+ return 0; -+} -+_ACEOF -+if ac_fn_c_try_compile "$LINENO"; then : -+ bash_cv_type_wint_t=yes -+else -+ bash_cv_type_wint_t=no -+fi -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi -+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_wint_t" >&5 -+$as_echo "$bash_cv_type_wint_t" >&6; } -+if test $bash_cv_type_wint_t = yes; then -+ -+$as_echo "#define HAVE_WINT_T 1" >>confdefs.h -+ -+fi -+ -+if test "$am_cv_func_iconv" = yes; then -+ OLDLIBS="$LIBS" -+ LIBS="$LIBS $LIBICONV" -+ for ac_func in locale_charset -+do : -+ ac_fn_c_check_func "$LINENO" "locale_charset" "ac_cv_func_locale_charset" -+if test "x$ac_cv_func_locale_charset" = x""yes; then : -+ cat >>confdefs.h <<_ACEOF -+#define HAVE_LOCALE_CHARSET 1 -+_ACEOF -+ -+fi -+done -+ -+ LIBS="$OLDLIBS" -+fi -+ - - - case "$host_cpu" in -@@ -6357,7 +6801,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_wri - # report actual input values of CONFIG_FILES etc. instead of their - # values after options handling. - ac_log=" --This file was extended by readline $as_me 5.1-release, which was -+This file was extended by readline $as_me 6.2, which was - generated by GNU Autoconf 2.64. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES -@@ -6421,7 +6865,7 @@ Report bugs to ." - _ACEOF - cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - ac_cs_version="\\ --readline config.status 5.1-release -+readline config.status 6.2 - configured by $0, generated by GNU Autoconf 2.64, - with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" - -Index: gdb-7.2.90.20110703/readline/configure.in -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/configure.in 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/configure.in 2011-07-03 10:41:21.000000000 +0200 -@@ -5,28 +5,26 @@ dnl report bugs to chet@po.cwru.edu - dnl - dnl Process this file with autoconf to produce a configure script. - --# Copyright (C) 1987-2005 Free Software Foundation, Inc. -+# Copyright (C) 1987-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 2, 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, write to the Free Software --# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA --# 02111-1307, USA. -+# 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. - --AC_REVISION([for Readline 5.1, version 2.59]) -+# You should have received a copy of the GNU General Public License -+# along with this program. If not, see . -+ -+AC_REVISION([for Readline 6.2, version 2.67]) - - m4_include([../config/override.m4]) - --AC_INIT(readline, 5.1-release, bug-readline@gnu.org) -+AC_INIT(readline, 6.2, bug-readline@gnu.org) - - dnl make sure we are using a recent autoconf version - AC_PREREQ(2.50) -@@ -38,7 +36,7 @@ AC_CONFIG_AUX_DIR(`cd $srcdir;pwd`/..) - AC_CONFIG_HEADERS(config.h) - - dnl update the value of RL_READLINE_VERSION in readline.h when this changes --LIBVERSION=5.1 -+LIBVERSION=6.2 - - AC_CANONICAL_HOST - -@@ -115,44 +113,6 @@ AC_PROG_CC - dnl AC_AIX - AC_MINIX - --dnl BEGIN changes for CYGNUS cross-building for Cygwin --dnl NOTE: Some of these changes may no longer be necessary. -- --dnl load up the cross-building cache file -- add more cases and cache --dnl files as necessary --if test "x$cross_compiling" = "xyes"; then -- case "${host}" in -- *-cygwin*) -- cross_cache=${srcdir}/cross-build/cygwin.cache -- LOCAL_CFLAGS="$LOCAL_CFLAGS -I${srcdir}/../libtermcap" -- ;; -- *-mingw32*) -- cross_cache=${srcdir}/cross-build/mingw.cache -- ;; -- *) echo "configure: cross-compiling for a non-cygwin target is not supported" >&2 -- ;; -- esac -- -- if test "x$cross_cache" != "x"; then -- if test -r "${cross_cache}"; then -- echo "loading cross-build cache file ${cross_cache}" -- . ${cross_cache} -- fi -- unset cross_cache -- fi --fi -- --if test -z "$CC_FOR_BUILD"; then -- if test "x$cross_compiling" = "xno"; then -- CC_FOR_BUILD='$(CC)' -- else -- CC_FOR_BUILD=gcc -- fi --fi --AC_SUBST(CC_FOR_BUILD) -- --dnl END changes for CYGNUS cross-building for Cygwin -- - # If we're using gcc and the user hasn't specified CFLAGS, add -O to CFLAGS. - test -n "$GCC" && test -n "$auto_cflags" && CFLAGS="$CFLAGS -O" - -@@ -170,6 +130,7 @@ AC_SUBST(MAKE_SHELL) - AC_C_CONST - AC_C_PROTOTYPES - AC_C_CHAR_UNSIGNED -+AC_C_VOLATILE - - AC_TYPE_SIGNAL - -@@ -200,6 +161,8 @@ AC_CHECK_HEADERS(sys/ptem.h,,, - #endif - ]]) - -+AC_SYS_LARGEFILE -+ - BASH_SYS_SIGNAL_VINTAGE - BASH_SYS_REINSTALL_SIGHANDLERS - -@@ -212,7 +175,9 @@ BASH_CHECK_GETPW_FUNCS - - AC_HEADER_TIOCGWINSZ - -+BASH_TYPE_SIG_ATOMIC_T - BASH_TYPE_SIGHANDLER -+ - BASH_HAVE_TIOCSTAT - BASH_HAVE_FIONREAD - BASH_CHECK_SPEED_T -Index: gdb-7.2.90.20110703/readline/display.c -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/display.c 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/display.c 2011-07-03 10:41:21.000000000 +0200 -@@ -1,24 +1,24 @@ - /* display.c -- readline redisplay facility. */ - --/* Copyright (C) 1987-2005 Free Software Foundation, Inc. -+/* Copyright (C) 1987-2009 Free Software Foundation, Inc. - -- This file is part of the GNU Readline Library, a library for -- reading lines of text with interactive input and history editing. -+ This file is part of the GNU Readline Library (Readline), a library -+ for reading lines of text with interactive input and history editing. - -- The GNU Readline Library 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 2, or -+ Readline 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. - -- The GNU Readline Library 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 -+ Readline 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. - -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ You should have received a copy of the GNU General Public License -+ along with Readline. If not, see . -+*/ -+ - #define READLINE_LIBRARY - - #if defined (HAVE_CONFIG_H) -@@ -63,30 +63,59 @@ - extern char *strchr (), *strrchr (); - #endif /* !strchr && !__STDC__ */ - --#if defined (HACK_TERMCAP_MOTION) --extern char *_rl_term_forward_char; --#endif -- - static void update_line PARAMS((char *, char *, int, int, int, int)); - static void space_to_eol PARAMS((int)); - static void delete_chars PARAMS((int)); - static void insert_some_chars PARAMS((char *, int, int)); - static void cr PARAMS((void)); - -+/* State of visible and invisible lines. */ -+struct line_state -+ { -+ char *line; -+ int *lbreaks; -+ int lbsize; - #if defined (HANDLE_MULTIBYTE) --static int _rl_col_width PARAMS((const char *, int, int)); --static int *_rl_wrapped_line; --#else --# define _rl_col_width(l, s, e) (((e) <= (s)) ? 0 : (e) - (s)) -+ int *wrapped_line; -+ int wbsize; - #endif -+ }; -+ -+/* The line display buffers. One is the line currently displayed on -+ the screen. The other is the line about to be displayed. */ -+static struct line_state line_state_array[2]; -+static struct line_state *line_state_visible = &line_state_array[0]; -+static struct line_state *line_state_invisible = &line_state_array[1]; -+static int line_structures_initialized = 0; - --static int *inv_lbreaks, *vis_lbreaks; --static int inv_lbsize, vis_lbsize; -+/* Backwards-compatible names. */ -+#define inv_lbreaks (line_state_invisible->lbreaks) -+#define inv_lbsize (line_state_invisible->lbsize) -+#define vis_lbreaks (line_state_visible->lbreaks) -+#define vis_lbsize (line_state_visible->lbsize) -+ -+#define visible_line (line_state_visible->line) -+#define invisible_line (line_state_invisible->line) -+ -+#if defined (HANDLE_MULTIBYTE) -+static int _rl_col_width PARAMS((const char *, int, int, int)); -+#else -+# define _rl_col_width(l, s, e, f) (((e) <= (s)) ? 0 : (e) - (s)) -+#endif - - /* Heuristic used to decide whether it is faster to move from CUR to NEW -- by backing up or outputting a carriage return and moving forward. */ -+ by backing up or outputting a carriage return and moving forward. CUR -+ and NEW are either both buffer positions or absolute screen positions. */ - #define CR_FASTER(new, cur) (((new) + 1) < ((cur) - (new))) - -+/* _rl_last_c_pos is an absolute cursor position in multibyte locales and a -+ buffer index in others. This macro is used when deciding whether the -+ current cursor position is in the middle of a prompt string containing -+ invisible characters. XXX - might need to take `modmark' into account. */ -+#define PROMPT_ENDING_INDEX \ -+ ((MB_CUR_MAX > 1 && rl_byte_oriented == 0) ? prompt_physical_chars : prompt_last_invisible+1) -+ -+ - /* **************************************************************** */ - /* */ - /* Display stuff */ -@@ -139,6 +168,8 @@ int _rl_last_c_pos = 0; - int _rl_last_v_pos = 0; - - static int cpos_adjusted; -+static int cpos_buffer_position; -+static int prompt_multibyte_chars; - - /* Number of lines currently on screen minus 1. */ - int _rl_vis_botlin = 0; -@@ -148,11 +179,6 @@ int _rl_vis_botlin = 0; - doing horizontal scrolling. It shifts in thirds of a screenwidth. */ - static int last_lmargin; - --/* The line display buffers. One is the line currently displayed on -- the screen. The other is the line about to be displayed. */ --static char *visible_line = (char *)NULL; --static char *invisible_line = (char *)NULL; -- - /* A buffer for `modeline' messages. */ - static char msg_buf[128]; - -@@ -166,6 +192,7 @@ static int line_size = 1024; - include invisible characters. */ - - static char *local_prompt, *local_prompt_prefix; -+static int local_prompt_len; - static int prompt_visible_length, prompt_prefix_length; - - /* The number of invisible characters in the line currently being -@@ -192,6 +219,10 @@ static int prompt_last_screen_line; - - static int prompt_physical_chars; - -+/* set to a non-zero value by rl_redisplay if we are marking modified history -+ lines and the current line is so marked. */ -+static int modmark; -+ - /* Variables to save and restore prompt and display information. */ - - /* These are getting numerous enough that it's time to create a struct. */ -@@ -201,6 +232,7 @@ static char *saved_local_prefix; - static int saved_last_invisible; - static int saved_visible_length; - static int saved_prefix_length; -+static int saved_local_length; - static int saved_invis_chars_first_line; - static int saved_physical_chars; - -@@ -224,7 +256,7 @@ expand_prompt (pmt, lp, lip, niflp, vlp) - char *pmt; - int *lp, *lip, *niflp, *vlp; - { -- char *r, *ret, *p; -+ char *r, *ret, *p, *igstart; - int l, rl, last, ignoring, ninvis, invfl, invflset, ind, pind, physchars; - - /* Short-circuit if we can. */ -@@ -248,19 +280,21 @@ expand_prompt (pmt, lp, lip, niflp, vlp) - invfl = 0; /* invisible chars in first line of prompt */ - invflset = 0; /* we only want to set invfl once */ - -+ igstart = 0; - for (rl = ignoring = last = ninvis = physchars = 0, p = pmt; p && *p; p++) - { - /* This code strips the invisible character string markers - RL_PROMPT_START_IGNORE and RL_PROMPT_END_IGNORE */ -- if (*p == RL_PROMPT_START_IGNORE) -+ if (ignoring == 0 && *p == RL_PROMPT_START_IGNORE) /* XXX - check ignoring? */ - { -- ignoring++; -+ ignoring = 1; -+ igstart = p; - continue; - } - else if (ignoring && *p == RL_PROMPT_END_IGNORE) - { - ignoring = 0; -- if (p[-1] != RL_PROMPT_START_IGNORE) -+ if (p != (igstart + 1)) - last = r - ret - 1; - continue; - } -@@ -276,8 +310,13 @@ expand_prompt (pmt, lp, lip, niflp, vlp) - *r++ = *p++; - if (!ignoring) - { -+ /* rl ends up being assigned to prompt_visible_length, -+ which is the number of characters in the buffer that -+ contribute to characters on the screen, which might -+ not be the same as the number of physical characters -+ on the screen in the presence of multibyte characters */ - rl += ind - pind; -- physchars += _rl_col_width (pmt, pind, ind); -+ physchars += _rl_col_width (pmt, pind, ind, 0); - } - else - ninvis += ind - pind; -@@ -360,6 +399,7 @@ rl_expand_prompt (prompt) - FREE (local_prompt_prefix); - - local_prompt = local_prompt_prefix = (char *)0; -+ local_prompt_len = 0; - prompt_last_invisible = prompt_invis_chars_first_line = 0; - prompt_visible_length = prompt_physical_chars = 0; - -@@ -375,6 +415,7 @@ rl_expand_prompt (prompt) - &prompt_invis_chars_first_line, - &prompt_physical_chars); - local_prompt_prefix = (char *)0; -+ local_prompt_len = local_prompt ? strlen (local_prompt) : 0; - return (prompt_visible_length); - } - else -@@ -383,16 +424,17 @@ rl_expand_prompt (prompt) - t = ++p; - local_prompt = expand_prompt (p, &prompt_visible_length, - &prompt_last_invisible, -- (int *)NULL, -+ &prompt_invis_chars_first_line, - &prompt_physical_chars); - c = *t; *t = '\0'; - /* The portion of the prompt string up to and including the - final newline is now null-terminated. */ - local_prompt_prefix = expand_prompt (prompt, &prompt_prefix_length, - (int *)NULL, -- &prompt_invis_chars_first_line, -+ (int *)NULL, - (int *)NULL); - *t = c; -+ local_prompt_len = local_prompt ? strlen (local_prompt) : 0; - return (prompt_prefix_length); - } - } -@@ -434,13 +476,21 @@ init_line_structures (minsize) - { - /* should be enough. */ - inv_lbsize = vis_lbsize = 256; -- inv_lbreaks = (int *)xmalloc (inv_lbsize * sizeof (int)); -- vis_lbreaks = (int *)xmalloc (vis_lbsize * sizeof (int)); -+ - #if defined (HANDLE_MULTIBYTE) -- _rl_wrapped_line = (int *)xmalloc (vis_lbsize * sizeof (int)); -+ line_state_visible->wbsize = vis_lbsize; -+ line_state_visible->wrapped_line = (int *)xmalloc (line_state_visible->wbsize * sizeof (int)); -+ -+ line_state_invisible->wbsize = inv_lbsize; -+ line_state_invisible->wrapped_line = (int *)xmalloc (line_state_invisible->wbsize * sizeof (int)); - #endif -+ -+ inv_lbreaks = (int *)xmalloc (inv_lbsize * sizeof (int)); -+ vis_lbreaks = (int *)xmalloc (vis_lbsize * sizeof (int)); - inv_lbreaks[0] = vis_lbreaks[0] = 0; - } -+ -+ line_structures_initialized = 1; - } - - /* Basic redisplay algorithm. */ -@@ -449,8 +499,8 @@ rl_redisplay () - { - register int in, out, c, linenum, cursor_linenum; - register char *line; -- int c_pos, inv_botlin, lb_botlin, lb_linenum, o_cpos; -- int newlines, lpos, temp, modmark, n0, num; -+ int inv_botlin, lb_botlin, lb_linenum, o_cpos; -+ int newlines, lpos, temp, n0, num, prompt_lines_estimate; - char *prompt_this_line; - #if defined (HANDLE_MULTIBYTE) - wchar_t wc; -@@ -460,24 +510,27 @@ rl_redisplay () - int _rl_wrapped_multicolumn = 0; - #endif - -- if (!readline_echoing_p) -+ if (_rl_echoing_p == 0) - return; - -- /* Signals are blocked through this function as the global data structures -- could get corrupted upon modifications from an invoked signal handler. */ -- _rl_block_sigint (); -+ /* Block keyboard interrupts because this function manipulates global -+ data structures. */ -+ _rl_block_sigint (); -+ RL_SETSTATE (RL_STATE_REDISPLAYING); - - if (!rl_display_prompt) - rl_display_prompt = ""; - -- if (invisible_line == 0 || vis_lbreaks == 0) -+ if (line_structures_initialized == 0) - { - init_line_structures (0); - rl_on_new_line (); - } - - /* Draw the line into the buffer. */ -- c_pos = -1; -+ cpos_buffer_position = -1; -+ -+ prompt_multibyte_chars = prompt_visible_length - prompt_physical_chars; - - line = invisible_line; - out = inv_botlin = 0; -@@ -504,24 +557,23 @@ rl_redisplay () - number of non-visible characters in the prompt string. */ - if (rl_display_prompt == rl_prompt || local_prompt) - { -- int local_len = local_prompt ? strlen (local_prompt) : 0; - if (local_prompt_prefix && forced_display) - _rl_output_some_chars (local_prompt_prefix, strlen (local_prompt_prefix)); - -- if (local_len > 0) -+ if (local_prompt_len > 0) - { -- temp = local_len + out + 2; -+ temp = local_prompt_len + out + 2; - if (temp >= line_size) - { - line_size = (temp + 1024) - (temp % 1024); - visible_line = (char *)xrealloc (visible_line, line_size); - line = invisible_line = (char *)xrealloc (invisible_line, line_size); - } -- strncpy (line + out, local_prompt, local_len); -- out += local_len; -+ strncpy (line + out, local_prompt, local_prompt_len); -+ out += local_prompt_len; - } - line[out] = '\0'; -- wrap_offset = local_len - prompt_visible_length; -+ wrap_offset = local_prompt_len - prompt_visible_length; - } - else - { -@@ -576,10 +628,14 @@ rl_redisplay () - { \ - inv_lbsize *= 2; \ - inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \ -- _rl_wrapped_line = (int *)xrealloc (_rl_wrapped_line, inv_lbsize * sizeof (int)); \ - } \ - inv_lbreaks[++newlines] = out; \ -- _rl_wrapped_line[newlines] = _rl_wrapped_multicolumn; \ -+ if (newlines >= (line_state_invisible->wbsize - 1)) \ -+ { \ -+ line_state_invisible->wbsize *= 2; \ -+ line_state_invisible->wrapped_line = (int *)xrealloc (line_state_invisible->wrapped_line, line_state_invisible->wbsize * sizeof(int)); \ -+ } \ -+ line_state_invisible->wrapped_line[newlines] = _rl_wrapped_multicolumn; \ - lpos = 0; \ - } \ - } while (0) -@@ -602,26 +658,26 @@ rl_redisplay () - - /* inv_lbreaks[i] is where line i starts in the buffer. */ - inv_lbreaks[newlines = 0] = 0; --#if 0 -- lpos = out - wrap_offset; --#else - lpos = prompt_physical_chars + modmark; --#endif - - #if defined (HANDLE_MULTIBYTE) -- memset (_rl_wrapped_line, 0, vis_lbsize); -+ memset (line_state_invisible->wrapped_line, 0, line_state_invisible->wbsize * sizeof (int)); - num = 0; - #endif - - /* prompt_invis_chars_first_line is the number of invisible characters in - the first physical line of the prompt. - wrap_offset - prompt_invis_chars_first_line is the number of invis -- chars on the second line. */ -+ chars on the second (or, more generally, last) line. */ -+ -+ /* This is zero-based, used to set the newlines */ -+ prompt_lines_estimate = lpos / _rl_screenwidth; - - /* what if lpos is already >= _rl_screenwidth before we start drawing the - contents of the command line? */ - while (lpos >= _rl_screenwidth) - { -+ int z; - /* fix from Darin Johnson for prompt string with - invisible characters that is longer than the screen width. The - prompt_invis_chars_first_line variable could be made into an array -@@ -630,37 +686,48 @@ rl_redisplay () - prompts that exceed two physical lines? - Additional logic fix from Edward Catmur */ - #if defined (HANDLE_MULTIBYTE) -- n0 = num; -- temp = local_prompt ? strlen (local_prompt) : 0; -- while (num < temp) -+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0 && prompt_multibyte_chars > 0) - { -- if (_rl_col_width (local_prompt, n0, num) > _rl_screenwidth) -+ n0 = num; -+ temp = local_prompt_len; -+ while (num < temp) - { -- num = _rl_find_prev_mbchar (local_prompt, num, MB_FIND_ANY); -- break; -+ z = _rl_col_width (local_prompt, n0, num, 1); -+ if (z > _rl_screenwidth) -+ { -+ num = _rl_find_prev_mbchar (local_prompt, num, MB_FIND_ANY); -+ break; -+ } -+ else if (z == _rl_screenwidth) -+ break; -+ num++; - } -- num++; -+ temp = num; - } -- temp = num + --#else -- temp = ((newlines + 1) * _rl_screenwidth) + -+ else - #endif /* !HANDLE_MULTIBYTE */ -- ((local_prompt_prefix == 0) ? ((newlines == 0) ? prompt_invis_chars_first_line -- : ((newlines == 1) ? wrap_offset : 0)) -- : ((newlines == 0) ? wrap_offset :0)); -+ temp = ((newlines + 1) * _rl_screenwidth); -+ -+ /* Now account for invisible characters in the current line. */ -+ /* XXX - this assumes that the invisible characters may be split, but only -+ between the first and the last lines. */ -+ temp += ((local_prompt_prefix == 0) ? ((newlines == 0) ? prompt_invis_chars_first_line -+ : ((newlines == prompt_lines_estimate) ? wrap_offset : prompt_invis_chars_first_line)) -+ : ((newlines == 0) ? wrap_offset : 0)); - - inv_lbreaks[++newlines] = temp; - #if defined (HANDLE_MULTIBYTE) -- lpos -= _rl_col_width (local_prompt, n0, num); --#else -- lpos -= _rl_screenwidth; -+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0 && prompt_multibyte_chars > 0) -+ lpos -= _rl_col_width (local_prompt, n0, num, 1); -+ else - #endif -+ lpos -= _rl_screenwidth; - } - - prompt_last_screen_line = newlines; - - /* Draw the rest of the line (after the prompt) into invisible_line, keeping -- track of where the cursor is (c_pos), the number of the line containing -+ track of where the cursor is (cpos_buffer_position), the number of the line containing - the cursor (lb_linenum), the last line number (lb_botlin and inv_botlin). - It maintains an array of line breaks for display (inv_lbreaks). - This handles expanding tabs for display and displaying meta characters. */ -@@ -670,6 +737,7 @@ rl_redisplay () - if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) - { - memset (&ps, 0, sizeof (mbstate_t)); -+ /* XXX - what if wc_bytes ends up <= 0? check for MB_INVALIDCH */ - wc_bytes = mbrtowc (&wc, rl_line_buffer, rl_end, &ps); - } - else -@@ -713,7 +781,7 @@ rl_redisplay () - - if (in == rl_point) - { -- c_pos = out; -+ cpos_buffer_position = out; - lb_linenum = newlines; - } - -@@ -807,7 +875,7 @@ rl_redisplay () - } - if (in == rl_point) - { -- c_pos = out; -+ cpos_buffer_position = out; - lb_linenum = newlines; - } - for (i = in; i < in+wc_bytes; i++) -@@ -830,6 +898,7 @@ rl_redisplay () - if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) - { - in += wc_bytes; -+ /* XXX - what if wc_bytes ends up <= 0? check for MB_INVALIDCH */ - wc_bytes = mbrtowc (&wc, rl_line_buffer + in, rl_end - in, &ps); - } - else -@@ -838,9 +907,9 @@ rl_redisplay () - - } - line[out] = '\0'; -- if (c_pos < 0) -+ if (cpos_buffer_position < 0) - { -- c_pos = out; -+ cpos_buffer_position = out; - lb_linenum = newlines; - } - -@@ -849,7 +918,7 @@ rl_redisplay () - inv_lbreaks[newlines+1] = out; - cursor_linenum = lb_linenum; - -- /* C_POS == position in buffer where cursor should be placed. -+ /* CPOS_BUFFER_POSITION == position in buffer where cursor should be placed. - CURSOR_LINENUM == line number where the cursor should be placed. */ - - /* PWP: now is when things get a bit hairy. The visible and invisible -@@ -884,6 +953,10 @@ rl_redisplay () - second and subsequent lines start at inv_lbreaks[N], offset by - OFFSET (which has already been calculated above). */ - -+#define INVIS_FIRST() (prompt_physical_chars > _rl_screenwidth ? prompt_invis_chars_first_line : wrap_offset) -+#define WRAP_OFFSET(line, offset) ((line == 0) \ -+ ? (offset ? INVIS_FIRST() : 0) \ -+ : ((line == prompt_last_screen_line) ? wrap_offset-prompt_invis_chars_first_line : 0)) - #define W_OFFSET(line, offset) ((line) == 0 ? offset : 0) - #define VIS_LLEN(l) ((l) > _rl_vis_botlin ? 0 : (vis_lbreaks[l+1] - vis_lbreaks[l])) - #define INV_LLEN(l) (inv_lbreaks[l+1] - inv_lbreaks[l]) -@@ -891,9 +964,16 @@ rl_redisplay () - #define VIS_LINE(line) ((line) > _rl_vis_botlin) ? "" : VIS_CHARS(line) - #define INV_LINE(line) (invisible_line + inv_lbreaks[line]) - -+#define OLD_CPOS_IN_PROMPT() (cpos_adjusted == 0 && \ -+ _rl_last_c_pos != o_cpos && \ -+ _rl_last_c_pos > wrap_offset && \ -+ o_cpos < prompt_last_invisible) -+ - /* For each line in the buffer, do the updating display. */ - for (linenum = 0; linenum <= inv_botlin; linenum++) - { -+ /* This can lead us astray if we execute a program that changes -+ the locale from a non-multibyte to a multibyte one. */ - o_cpos = _rl_last_c_pos; - cpos_adjusted = 0; - update_line (VIS_LINE(linenum), INV_LINE(linenum), linenum, -@@ -903,16 +983,22 @@ rl_redisplay () - take invisible characters into account, since _rl_last_c_pos - is an absolute cursor position in a multibyte locale. See - if compensating here is the right thing, or if we have to -- change update_line itself. There is one case in which -+ change update_line itself. There are several cases in which - update_line adjusts _rl_last_c_pos itself (so it can pass - _rl_move_cursor_relative accurate values); it communicates -- this back by setting cpos_adjusted */ -- if (linenum == 0 && (MB_CUR_MAX > 1 && rl_byte_oriented == 0) && -- cpos_adjusted == 0 && -- _rl_last_c_pos != o_cpos && -- _rl_last_c_pos > wrap_offset && -- o_cpos < prompt_last_invisible) -- _rl_last_c_pos -= wrap_offset; -+ this back by setting cpos_adjusted. If we assume that -+ _rl_last_c_pos is correct (an absolute cursor position) each -+ time update_line is called, then we can assume in our -+ calculations that o_cpos does not need to be adjusted by -+ wrap_offset. */ -+ if (linenum == 0 && (MB_CUR_MAX > 1 && rl_byte_oriented == 0) && OLD_CPOS_IN_PROMPT()) -+ _rl_last_c_pos -= prompt_invis_chars_first_line; /* XXX - was wrap_offset */ -+ else if (linenum == prompt_last_screen_line && prompt_physical_chars > _rl_screenwidth && -+ (MB_CUR_MAX > 1 && rl_byte_oriented == 0) && -+ cpos_adjusted == 0 && -+ _rl_last_c_pos != o_cpos && -+ _rl_last_c_pos > (prompt_last_invisible - _rl_screenwidth - prompt_invis_chars_first_line)) -+ _rl_last_c_pos -= (wrap_offset-prompt_invis_chars_first_line); - - /* If this is the line with the prompt, we might need to - compensate for invisible characters in the new line. Do -@@ -932,6 +1018,19 @@ rl_redisplay () - if (nleft) - _rl_clear_to_eol (nleft); - } -+#if 0 -+ /* This segment is intended to handle the case where the prompt -+ has invisible characters on the second line and the new line -+ to be displayed needs to clear the rest of the old characters -+ out (e.g., when printing the i-search prompt). In general, -+ the case of the new line being shorter than the old. -+ Incomplete */ -+ else if (linenum == prompt_last_screen_line && -+ prompt_physical_chars > _rl_screenwidth && -+ wrap_offset != prompt_invis_chars_first_line && -+ _rl_last_c_pos == out && -+#endif -+ - - /* Since the new first line is now visible, save its length. */ - if (linenum == 0) -@@ -975,7 +1074,11 @@ rl_redisplay () - invisible character in the prompt string. */ - nleft = prompt_visible_length + wrap_offset; - if (cursor_linenum == 0 && wrap_offset > 0 && _rl_last_c_pos > 0 && -- _rl_last_c_pos <= prompt_last_invisible && local_prompt) -+#if 0 -+ _rl_last_c_pos <= PROMPT_ENDING_INDEX && local_prompt) -+#else -+ _rl_last_c_pos < PROMPT_ENDING_INDEX && local_prompt) -+#endif - { - #if defined (__MSDOS__) - putc ('\r', rl_outstream); -@@ -983,19 +1086,22 @@ rl_redisplay () - if (_rl_term_cr) - tputs (_rl_term_cr, 1, _rl_output_character_function); - #endif -+ if (modmark) -+ _rl_output_some_chars ("*", 1); -+ - _rl_output_some_chars (local_prompt, nleft); - if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) -- _rl_last_c_pos = _rl_col_width (local_prompt, 0, nleft) - wrap_offset; -+ _rl_last_c_pos = _rl_col_width (local_prompt, 0, nleft, 1) - wrap_offset + modmark; - else -- _rl_last_c_pos = nleft; -+ _rl_last_c_pos = nleft + modmark; - } - - /* Where on that line? And where does that line start - in the buffer? */ - pos = inv_lbreaks[cursor_linenum]; - /* nleft == number of characters in the line buffer between the -- start of the line and the cursor position. */ -- nleft = c_pos - pos; -+ start of the line and the desired cursor position. */ -+ nleft = cpos_buffer_position - pos; - - /* NLEFT is now a number of characters in a buffer. When in a - multibyte locale, however, _rl_last_c_pos is an absolute cursor -@@ -1007,11 +1113,12 @@ rl_redisplay () - those characters here and call _rl_backspace() directly. */ - if (wrap_offset && cursor_linenum == 0 && nleft < _rl_last_c_pos) - { -+ /* TX == new physical cursor position in multibyte locale. */ - if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) -- tx = _rl_col_width (&visible_line[pos], 0, nleft) - visible_wrap_offset; -+ tx = _rl_col_width (&visible_line[pos], 0, nleft, 1) - visible_wrap_offset; - else - tx = nleft; -- if (_rl_last_c_pos > tx) -+ if (tx >= 0 && _rl_last_c_pos > tx) - { - _rl_backspace (_rl_last_c_pos - tx); /* XXX */ - _rl_last_c_pos = tx; -@@ -1040,11 +1147,11 @@ rl_redisplay () - will be LMARGIN. */ - - /* The number of characters that will be displayed before the cursor. */ -- ndisp = c_pos - wrap_offset; -+ ndisp = cpos_buffer_position - wrap_offset; - nleft = prompt_visible_length + wrap_offset; - /* Where the new cursor position will be on the screen. This can be - longer than SCREENWIDTH; if it is, lmargin will be adjusted. */ -- phys_c_pos = c_pos - (last_lmargin ? last_lmargin : wrap_offset); -+ phys_c_pos = cpos_buffer_position - (last_lmargin ? last_lmargin : wrap_offset); - t = _rl_screenwidth / 3; - - /* If the number of characters had already exceeded the screenwidth, -@@ -1055,7 +1162,7 @@ rl_redisplay () - two-thirds of the way across the screen. */ - if (phys_c_pos > _rl_screenwidth - 2) - { -- lmargin = c_pos - (2 * t); -+ lmargin = cpos_buffer_position - (2 * t); - if (lmargin < 0) - lmargin = 0; - /* If the left margin would be in the middle of a prompt with -@@ -1069,7 +1176,7 @@ rl_redisplay () - { - /* If we are moving back towards the beginning of the line and - the last margin is no longer correct, compute a new one. */ -- lmargin = ((c_pos - 1) / t) * t; /* XXX */ -+ lmargin = ((cpos_buffer_position - 1) / t) * t; /* XXX */ - if (wrap_offset && lmargin > 0 && lmargin < nleft) - lmargin = nleft; - } -@@ -1089,9 +1196,11 @@ rl_redisplay () - if (t < out) - line[t - 1] = '>'; - -- if (!rl_display_fixed || forced_display || lmargin != last_lmargin) -+ if (rl_display_fixed == 0 || forced_display || lmargin != last_lmargin) - { - forced_display = 0; -+ o_cpos = _rl_last_c_pos; -+ cpos_adjusted = 0; - update_line (&visible_line[last_lmargin], - &invisible_line[lmargin], - 0, -@@ -1099,6 +1208,9 @@ rl_redisplay () - _rl_screenwidth + (lmargin ? 0 : wrap_offset), - 0); - -+ if ((MB_CUR_MAX > 1 && rl_byte_oriented == 0) && OLD_CPOS_IN_PROMPT()) -+ _rl_last_c_pos -= prompt_invis_chars_first_line; /* XXX - was wrap_offset */ -+ - /* If the visible new line is shorter than the old, but the number - of invisible characters is greater, and we are at the end of - the new line, we need to clear to eol. */ -@@ -1114,7 +1226,7 @@ rl_redisplay () - if (visible_first_line_len > _rl_screenwidth) - visible_first_line_len = _rl_screenwidth; - -- _rl_move_cursor_relative (c_pos - lmargin, &invisible_line[lmargin]); -+ _rl_move_cursor_relative (cpos_buffer_position - lmargin, &invisible_line[lmargin]); - last_lmargin = lmargin; - } - } -@@ -1122,17 +1234,10 @@ rl_redisplay () - - /* Swap visible and non-visible lines. */ - { -- char *vtemp = visible_line; -- int *itemp = vis_lbreaks, ntemp = vis_lbsize; -+ struct line_state *vtemp = line_state_visible; - -- visible_line = invisible_line; -- invisible_line = vtemp; -- -- vis_lbreaks = inv_lbreaks; -- inv_lbreaks = itemp; -- -- vis_lbsize = inv_lbsize; -- inv_lbsize = ntemp; -+ line_state_visible = line_state_invisible; -+ line_state_invisible = vtemp; - - rl_display_fixed = 0; - /* If we are displaying on a single line, and last_lmargin is > 0, we -@@ -1144,6 +1249,7 @@ rl_redisplay () - visible_wrap_offset = wrap_offset; - } - -+ RL_UNSETSTATE (RL_STATE_REDISPLAYING); - _rl_release_sigint (); - } - -@@ -1169,12 +1275,12 @@ update_line (old, new, current_line, oma - int current_line, omax, nmax, inv_botlin; - { - register char *ofd, *ols, *oe, *nfd, *nls, *ne; -- int temp, lendiff, wsatend, od, nd; -+ int temp, lendiff, wsatend, od, nd, twidth, o_cpos; - int current_invis_chars; - int col_lendiff, col_temp; - #if defined (HANDLE_MULTIBYTE) - mbstate_t ps_new, ps_old; -- int new_offset, old_offset, tmp; -+ int new_offset, old_offset; - #endif - - /* If we're at the right edge of a terminal that supports xn, we're -@@ -1185,7 +1291,7 @@ update_line (old, new, current_line, oma - if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) - temp = _rl_last_c_pos; - else -- temp = _rl_last_c_pos - W_OFFSET(_rl_last_v_pos, visible_wrap_offset); -+ temp = _rl_last_c_pos - WRAP_OFFSET (_rl_last_v_pos, visible_wrap_offset); - if (temp == _rl_screenwidth && _rl_term_autowrap && !_rl_horizontal_scroll_mode - && _rl_last_v_pos == current_line - 1) - { -@@ -1200,8 +1306,8 @@ update_line (old, new, current_line, oma - /* This fixes only double-column characters, but if the wrapped - character comsumes more than three columns, spaces will be - inserted in the string buffer. */ -- if (_rl_wrapped_line[current_line] > 0) -- _rl_clear_to_eol (_rl_wrapped_line[current_line]); -+ if (current_line < line_state_visible->wbsize && line_state_visible->wrapped_line[current_line] > 0) -+ _rl_clear_to_eol (line_state_visible->wrapped_line[current_line]); - - memset (&ps, 0, sizeof (mbstate_t)); - ret = mbrtowc (&wc, new, MB_CUR_MAX, &ps); -@@ -1217,7 +1323,7 @@ update_line (old, new, current_line, oma - - if (tempwidth > 0) - { -- int count; -+ int count, i; - bytes = ret; - for (count = 0; count < bytes; count++) - putc (new[count], rl_outstream); -@@ -1228,10 +1334,13 @@ update_line (old, new, current_line, oma - if (ret != 0 && bytes != 0) - { - if (MB_INVALIDCH (ret)) -- memmove (old+bytes, old+1, strlen (old+1)); -- else -- memmove (old+bytes, old+ret, strlen (old+ret)); -+ ret = 1; -+ memmove (old+bytes, old+ret, strlen (old+ret)); - memcpy (old, new, bytes); -+ /* Fix up indices if we copy data from one line to another */ -+ omax += bytes - ret; -+ for (i = current_line+1; i < inv_botlin+1; i++) -+ vis_lbreaks[i] += bytes - ret; - } - } - else -@@ -1265,7 +1374,7 @@ update_line (old, new, current_line, oma - /* See if the old line is a subset of the new line, so that the - only change is adding characters. */ - temp = (omax < nmax) ? omax : nmax; -- if (memcmp (old, new, temp) == 0) -+ if (memcmp (old, new, temp) == 0) /* adding at the end */ - { - ofd = old + temp; - nfd = new + temp; -@@ -1407,30 +1516,48 @@ update_line (old, new, current_line, oma - sequences (like drawing the `unbold' sequence without a corresponding - `bold') that manifests itself on certain terminals. */ - -- lendiff = local_prompt ? strlen (local_prompt) : 0; -+ lendiff = local_prompt_len; - od = ofd - old; /* index of first difference in visible line */ - if (current_line == 0 && !_rl_horizontal_scroll_mode && - _rl_term_cr && lendiff > prompt_visible_length && _rl_last_c_pos > 0 && -- od >= lendiff && _rl_last_c_pos <= prompt_last_invisible) -+ od >= lendiff && _rl_last_c_pos < PROMPT_ENDING_INDEX) - { - #if defined (__MSDOS__) - putc ('\r', rl_outstream); - #else - tputs (_rl_term_cr, 1, _rl_output_character_function); - #endif -+ if (modmark) -+ _rl_output_some_chars ("*", 1); - _rl_output_some_chars (local_prompt, lendiff); - if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) - { - /* We take wrap_offset into account here so we can pass correct - information to _rl_move_cursor_relative. */ -- _rl_last_c_pos = _rl_col_width (local_prompt, 0, lendiff) - wrap_offset; -+ _rl_last_c_pos = _rl_col_width (local_prompt, 0, lendiff, 1) - wrap_offset + modmark; - cpos_adjusted = 1; - } - else -- _rl_last_c_pos = lendiff; -+ _rl_last_c_pos = lendiff + modmark; - } - -+ o_cpos = _rl_last_c_pos; -+ -+ /* When this function returns, _rl_last_c_pos is correct, and an absolute -+ cursor postion in multibyte mode, but a buffer index when not in a -+ multibyte locale. */ - _rl_move_cursor_relative (od, old); -+#if 1 -+#if defined (HANDLE_MULTIBYTE) -+ /* We need to indicate that the cursor position is correct in the presence of -+ invisible characters in the prompt string. Let's see if setting this when -+ we make sure we're at the end of the drawn prompt string works. */ -+ if (current_line == 0 && MB_CUR_MAX > 1 && rl_byte_oriented == 0 && -+ (_rl_last_c_pos > 0 || o_cpos > 0) && -+ _rl_last_c_pos == prompt_physical_chars) -+ cpos_adjusted = 1; -+#endif -+#endif - - /* if (len (new) > len (old)) - lendiff == difference in buffer -@@ -1438,7 +1565,7 @@ update_line (old, new, current_line, oma - When not using multibyte characters, these are equal */ - lendiff = (nls - nfd) - (ols - ofd); - if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) -- col_lendiff = _rl_col_width (new, nfd - new, nls - new) - _rl_col_width (old, ofd - old, ols - old); -+ col_lendiff = _rl_col_width (new, nfd - new, nls - new, 1) - _rl_col_width (old, ofd - old, ols - old, 1); - else - col_lendiff = lendiff; - -@@ -1463,7 +1590,7 @@ update_line (old, new, current_line, oma - /* Insert (diff (len (old), len (new)) ch. */ - temp = ne - nfd; - if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) -- col_temp = _rl_col_width (new, nfd - new, ne - new); -+ col_temp = _rl_col_width (new, nfd - new, ne - new, 1); - else - col_temp = temp; - -@@ -1471,22 +1598,60 @@ update_line (old, new, current_line, oma - { - /* Non-zero if we're increasing the number of lines. */ - int gl = current_line >= _rl_vis_botlin && inv_botlin > _rl_vis_botlin; -+ /* If col_lendiff is > 0, implying that the new string takes up more -+ screen real estate than the old, but lendiff is < 0, meaning that it -+ takes fewer bytes, we need to just output the characters starting -+ from the first difference. These will overwrite what is on the -+ display, so there's no reason to do a smart update. This can really -+ only happen in a multibyte environment. */ -+ if (lendiff < 0) -+ { -+ _rl_output_some_chars (nfd, temp); -+ _rl_last_c_pos += _rl_col_width (nfd, 0, temp, 1); -+ /* If nfd begins before any invisible characters in the prompt, -+ adjust _rl_last_c_pos to account for wrap_offset and set -+ cpos_adjusted to let the caller know. */ -+ if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible)) -+ { -+ _rl_last_c_pos -= wrap_offset; -+ cpos_adjusted = 1; -+ } -+ return; -+ } - /* Sometimes it is cheaper to print the characters rather than - use the terminal's capabilities. If we're growing the number - of lines, make sure we actually cause the new line to wrap - around on auto-wrapping terminals. */ -- if (_rl_terminal_can_insert && ((2 * col_temp) >= col_lendiff || _rl_term_IC) && (!_rl_term_autowrap || !gl)) -+ else if (_rl_terminal_can_insert && ((2 * col_temp) >= col_lendiff || _rl_term_IC) && (!_rl_term_autowrap || !gl)) - { - /* If lendiff > prompt_visible_length and _rl_last_c_pos == 0 and - _rl_horizontal_scroll_mode == 1, inserting the characters with - _rl_term_IC or _rl_term_ic will screw up the screen because of the - invisible characters. We need to just draw them. */ -- if (*ols && (!_rl_horizontal_scroll_mode || _rl_last_c_pos > 0 || -- lendiff <= prompt_visible_length || !current_invis_chars)) -+ /* The same thing happens if we're trying to draw before the last -+ invisible character in the prompt string or we're increasing the -+ number of invisible characters in the line and we're not drawing -+ the entire prompt string. */ -+ if (*ols && ((_rl_horizontal_scroll_mode && -+ _rl_last_c_pos == 0 && -+ lendiff > prompt_visible_length && -+ current_invis_chars > 0) == 0) && -+ (((MB_CUR_MAX > 1 && rl_byte_oriented == 0) && -+ current_line == 0 && wrap_offset && -+ ((nfd - new) <= prompt_last_invisible) && -+ (col_lendiff < prompt_visible_length)) == 0) && -+ (visible_wrap_offset >= current_invis_chars)) - { - insert_some_chars (nfd, lendiff, col_lendiff); - _rl_last_c_pos += col_lendiff; - } -+#if 0 /* XXX - for now */ -+ else if ((MB_CUR_MAX > 1 && rl_byte_oriented == 0) && _rl_last_c_pos == 0 && wrap_offset && (nfd-new) <= prompt_last_invisible && col_lendiff < prompt_visible_length && visible_wrap_offset >= current_invis_chars) -+ { -+ _rl_output_some_chars (nfd, lendiff); -+ _rl_last_c_pos += col_lendiff; -+ } -+#endif - else if ((MB_CUR_MAX == 1 || rl_byte_oriented != 0) && *ols == 0 && lendiff > 0) - { - /* At the end of a line the characters do not have to -@@ -1498,11 +1663,16 @@ update_line (old, new, current_line, oma - } - else - { -- /* We have horizontal scrolling and we are not inserting at -- the end. We have invisible characters in this line. This -- is a dumb update. */ - _rl_output_some_chars (nfd, temp); - _rl_last_c_pos += col_temp; -+ /* If nfd begins before the last invisible character in the -+ prompt, adjust _rl_last_c_pos to account for wrap_offset -+ and set cpos_adjusted to let the caller know. */ -+ if ((MB_CUR_MAX > 1 && rl_byte_oriented == 0) && current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible)) -+ { -+ _rl_last_c_pos -= wrap_offset; -+ cpos_adjusted = 1; -+ } - return; - } - /* Copy (new) chars to screen from first diff to last match. */ -@@ -1510,15 +1680,23 @@ update_line (old, new, current_line, oma - if ((temp - lendiff) > 0) - { - _rl_output_some_chars (nfd + lendiff, temp - lendiff); --#if 1 - /* XXX -- this bears closer inspection. Fixes a redisplay bug - reported against bash-3.0-alpha by Andreas Schwab involving - multibyte characters and prompt strings with invisible - characters, but was previously disabled. */ -- _rl_last_c_pos += _rl_col_width (nfd+lendiff, 0, temp-col_lendiff); --#else -- _rl_last_c_pos += _rl_col_width (nfd+lendiff, 0, temp-lendiff); --#endif -+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) -+ twidth = _rl_col_width (nfd+lendiff, 0, temp-col_lendiff, 1); -+ else -+ twidth = temp - lendiff; -+ _rl_last_c_pos += twidth; -+ /* If nfd begins before the last invisible character in the -+ prompt, adjust _rl_last_c_pos to account for wrap_offset -+ and set cpos_adjusted to let the caller know. */ -+ if ((MB_CUR_MAX > 1 && rl_byte_oriented == 0) && current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible)) -+ { -+ _rl_last_c_pos -= wrap_offset; -+ cpos_adjusted = 1; -+ } - } - } - else -@@ -1530,6 +1708,14 @@ update_line (old, new, current_line, oma - char in the current line (which implies we just output some invisible - characters) we need to adjust _rl_last_c_pos, since it represents - a physical character position. */ -+ if ((MB_CUR_MAX > 1 && rl_byte_oriented == 0) && -+ current_line == prompt_last_screen_line && wrap_offset && -+ wrap_offset != prompt_invis_chars_first_line && -+ ((nfd-new) < (prompt_last_invisible-(current_line*_rl_screenwidth)))) -+ { -+ _rl_last_c_pos -= wrap_offset - prompt_invis_chars_first_line; -+ cpos_adjusted = 1; -+ } - } - } - else /* Delete characters from line. */ -@@ -1551,8 +1737,22 @@ update_line (old, new, current_line, oma - temp = nls - nfd; - if (temp > 0) - { -+ /* If nfd begins at the prompt, or before the invisible -+ characters in the prompt, we need to adjust _rl_last_c_pos -+ in a multibyte locale to account for the wrap offset and -+ set cpos_adjusted accordingly. */ - _rl_output_some_chars (nfd, temp); -- _rl_last_c_pos += _rl_col_width (nfd, 0, temp);; -+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) -+ { -+ _rl_last_c_pos += _rl_col_width (nfd, 0, temp, 1); -+ if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible)) -+ { -+ _rl_last_c_pos -= wrap_offset; -+ cpos_adjusted = 1; -+ } -+ } -+ else -+ _rl_last_c_pos += temp; - } - } - /* Otherwise, print over the existing material. */ -@@ -1560,16 +1760,37 @@ update_line (old, new, current_line, oma - { - if (temp > 0) - { -+ /* If nfd begins at the prompt, or before the invisible -+ characters in the prompt, we need to adjust _rl_last_c_pos -+ in a multibyte locale to account for the wrap offset and -+ set cpos_adjusted accordingly. */ - _rl_output_some_chars (nfd, temp); - _rl_last_c_pos += col_temp; /* XXX */ -+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) -+ { -+ if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible)) -+ { -+ _rl_last_c_pos -= wrap_offset; -+ cpos_adjusted = 1; -+ } -+ } - } - lendiff = (oe - old) - (ne - new); - if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) -- col_lendiff = _rl_col_width (old, 0, oe - old) - _rl_col_width (new, 0, ne - new); -+ col_lendiff = _rl_col_width (old, 0, oe - old, 1) - _rl_col_width (new, 0, ne - new, 1); - else - col_lendiff = lendiff; - -+#if 0 - if (col_lendiff) -+#else -+ /* If we've already printed over the entire width of the screen, -+ including the old material, then col_lendiff doesn't matter and -+ space_to_eol will insert too many spaces. XXX - maybe we should -+ adjust col_lendiff based on the difference between _rl_last_c_pos -+ and _rl_screenwidth */ -+ if (col_lendiff && ((MB_CUR_MAX == 1 || rl_byte_oriented) || (_rl_last_c_pos < _rl_screenwidth))) -+#endif - { - if (_rl_term_autowrap && current_line < inv_botlin) - space_to_eol (col_lendiff); -@@ -1623,7 +1844,7 @@ rl_on_new_line_with_prompt () - - l = strlen (prompt_last_line); - if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) -- _rl_last_c_pos = _rl_col_width (prompt_last_line, 0, l); /* XXX */ -+ _rl_last_c_pos = _rl_col_width (prompt_last_line, 0, l, 1); /* XXX */ - else - _rl_last_c_pos = l; - -@@ -1658,10 +1879,11 @@ rl_on_new_line_with_prompt () - int - rl_forced_update_display () - { -+ register char *temp; -+ - if (visible_line) - { -- register char *temp = visible_line; -- -+ temp = visible_line; - while (*temp) - *temp++ = '\0'; - } -@@ -1684,9 +1906,14 @@ _rl_move_cursor_relative (new, data) - register int i; - int woff; /* number of invisible chars on current line */ - int cpos, dpos; /* current and desired cursor positions */ -+ int adjust; - -- woff = W_OFFSET (_rl_last_v_pos, wrap_offset); -+ woff = WRAP_OFFSET (_rl_last_v_pos, wrap_offset); - cpos = _rl_last_c_pos; -+ -+ if (cpos == 0 && cpos == new) -+ return; -+ - #if defined (HANDLE_MULTIBYTE) - /* If we have multibyte characters, NEW is indexed by the buffer point in - a multibyte string, but _rl_last_c_pos is the display position. In -@@ -1695,9 +1922,42 @@ _rl_move_cursor_relative (new, data) - as long as we are past them and they are counted by _rl_col_width. */ - if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) - { -- dpos = _rl_col_width (data, 0, new); -- if (dpos > woff) -- dpos -= woff; -+ adjust = 1; -+ /* Try to short-circuit common cases and eliminate a bunch of multibyte -+ character function calls. */ -+ /* 1. prompt string */ -+ if (new == local_prompt_len && memcmp (data, local_prompt, new) == 0) -+ { -+ dpos = prompt_physical_chars; -+ cpos_adjusted = 1; -+ adjust = 0; -+ } -+ /* 2. prompt_string + line contents */ -+ else if (new > local_prompt_len && local_prompt && memcmp (data, local_prompt, local_prompt_len) == 0) -+ { -+ dpos = prompt_physical_chars + _rl_col_width (data, local_prompt_len, new, 1); -+ cpos_adjusted = 1; -+ adjust = 0; -+ } -+ else -+ dpos = _rl_col_width (data, 0, new, 1); -+ -+ /* Use NEW when comparing against the last invisible character in the -+ prompt string, since they're both buffer indices and DPOS is a -+ desired display position. */ -+ if (adjust && ((new > prompt_last_invisible) || /* XXX - don't use woff here */ -+ (prompt_physical_chars >= _rl_screenwidth && -+ _rl_last_v_pos == prompt_last_screen_line && -+ wrap_offset >= woff && dpos >= woff && -+ new > (prompt_last_invisible-(_rl_screenwidth*_rl_last_v_pos)-wrap_offset)))) -+ /* XXX last comparison might need to be >= */ -+ { -+ dpos -= woff; -+ /* Since this will be assigned to _rl_last_c_pos at the end (more -+ precisely, _rl_last_c_pos == dpos when this function returns), -+ let the caller know. */ -+ cpos_adjusted = 1; -+ } - } - else - #endif -@@ -1716,7 +1976,7 @@ _rl_move_cursor_relative (new, data) - else - #endif - i = _rl_last_c_pos - woff; -- if (new == 0 || CR_FASTER (new, _rl_last_c_pos) || -+ if (dpos == 0 || CR_FASTER (dpos, _rl_last_c_pos) || - (_rl_term_autowrap && i == _rl_screenwidth)) - { - #if defined (__MSDOS__) -@@ -1738,19 +1998,27 @@ _rl_move_cursor_relative (new, data) - sequence telling the terminal to move forward one character. - That kind of control is for people who don't know what the - data is underneath the cursor. */ --#if defined (HACK_TERMCAP_MOTION) -- if (_rl_term_forward_char) -- { -- for (i = cpos; i < dpos; i++) -- tputs (_rl_term_forward_char, 1, _rl_output_character_function); -- } -- else --#endif /* HACK_TERMCAP_MOTION */ -+ -+ /* However, we need a handle on where the current display position is -+ in the buffer for the immediately preceding comment to be true. -+ In multibyte locales, we don't currently have that info available. -+ Without it, we don't know where the data we have to display begins -+ in the buffer and we have to go back to the beginning of the screen -+ line. In this case, we can use the terminal sequence to move forward -+ if it's available. */ - if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) - { -- tputs (_rl_term_cr, 1, _rl_output_character_function); -- for (i = 0; i < new; i++) -- putc (data[i], rl_outstream); -+ if (_rl_term_forward_char) -+ { -+ for (i = cpos; i < dpos; i++) -+ tputs (_rl_term_forward_char, 1, _rl_output_character_function); -+ } -+ else -+ { -+ tputs (_rl_term_cr, 1, _rl_output_character_function); -+ for (i = 0; i < new; i++) -+ putc (data[i], rl_outstream); -+ } - } - else - for (i = cpos; i < new; i++) -@@ -1908,6 +2176,7 @@ rl_message (va_alist) - &prompt_invis_chars_first_line, - &prompt_physical_chars); - local_prompt_prefix = (char *)NULL; -+ local_prompt_len = local_prompt ? strlen (local_prompt) : 0; - (*rl_redisplay_function) (); - - return 0; -@@ -1931,6 +2200,7 @@ rl_message (format, arg1, arg2) - &prompt_invis_chars_first_line, - &prompt_physical_chars); - local_prompt_prefix = (char *)NULL; -+ local_prompt_len = local_prompt ? strlen (local_prompt) : 0; - (*rl_redisplay_function) (); - - return 0; -@@ -1967,12 +2237,14 @@ rl_save_prompt () - saved_local_prompt = local_prompt; - saved_local_prefix = local_prompt_prefix; - saved_prefix_length = prompt_prefix_length; -+ saved_local_length = local_prompt_len; - saved_last_invisible = prompt_last_invisible; - saved_visible_length = prompt_visible_length; - saved_invis_chars_first_line = prompt_invis_chars_first_line; - saved_physical_chars = prompt_physical_chars; - - local_prompt = local_prompt_prefix = (char *)0; -+ local_prompt_len = 0; - prompt_last_invisible = prompt_visible_length = prompt_prefix_length = 0; - prompt_invis_chars_first_line = prompt_physical_chars = 0; - } -@@ -1985,6 +2257,7 @@ rl_restore_prompt () - - local_prompt = saved_local_prompt; - local_prompt_prefix = saved_local_prefix; -+ local_prompt_len = saved_local_length; - prompt_prefix_length = saved_prefix_length; - prompt_last_invisible = saved_last_invisible; - prompt_visible_length = saved_visible_length; -@@ -1993,6 +2266,7 @@ rl_restore_prompt () - - /* can test saved_local_prompt to see if prompt info has been saved. */ - saved_local_prompt = saved_local_prefix = (char *)0; -+ saved_local_length = 0; - saved_last_invisible = saved_visible_length = saved_prefix_length = 0; - saved_invis_chars_first_line = saved_physical_chars = 0; - } -@@ -2106,7 +2380,7 @@ insert_some_chars (string, count, col) - /* DEBUGGING */ - if (MB_CUR_MAX == 1 || rl_byte_oriented) - if (count != col) -- fprintf(stderr, "readline: debug: insert_some_chars: count (%d) != col (%d)\n", count, col); -+ _rl_ttymsg ("debug: insert_some_chars: count (%d) != col (%d)", count, col); - - /* If IC is defined, then we do not have to "enter" insert mode. */ - if (_rl_term_IC) -@@ -2189,7 +2463,8 @@ _rl_update_final () - char *last_line; - - last_line = &visible_line[vis_lbreaks[_rl_vis_botlin]]; -- _rl_move_cursor_relative (_rl_screenwidth - 1, last_line); -+ cpos_buffer_position = -1; /* don't know where we are in buffer */ -+ _rl_move_cursor_relative (_rl_screenwidth - 1, last_line); /* XXX */ - _rl_clear_to_eol (0); - putc (last_line[_rl_screenwidth - 1], rl_outstream); - } -@@ -2232,6 +2507,7 @@ redraw_prompt (t) - &prompt_invis_chars_first_line, - &prompt_physical_chars); - local_prompt_prefix = (char *)NULL; -+ local_prompt_len = local_prompt ? strlen (local_prompt) : 0; - - rl_forced_update_display (); - -@@ -2245,10 +2521,14 @@ _rl_redisplay_after_sigwinch () - { - char *t; - -- /* Clear the current line and put the cursor at column 0. Make sure -- the right thing happens if we have wrapped to a new screen line. */ -+ /* Clear the last line (assuming that the screen size change will result in -+ either more or fewer characters on that line only) and put the cursor at -+ column 0. Make sure the right thing happens if we have wrapped to a new -+ screen line. */ - if (_rl_term_cr) - { -+ _rl_move_vert (_rl_vis_botlin); -+ - #if defined (__MSDOS__) - putc ('\r', rl_outstream); - #else -@@ -2284,7 +2564,7 @@ _rl_redisplay_after_sigwinch () - void - _rl_clean_up_for_exit () - { -- if (readline_echoing_p) -+ if (_rl_echoing_p) - { - _rl_move_vert (_rl_vis_botlin); - _rl_vis_botlin = 0; -@@ -2329,20 +2609,41 @@ _rl_current_display_line () - In the case of multibyte characters with stateful encoding, we have to - scan from the beginning of the string to take the state into account. */ - static int --_rl_col_width (str, start, end) -+_rl_col_width (str, start, end, flags) - const char *str; -- int start, end; -+ int start, end, flags; - { - wchar_t wc; -- mbstate_t ps = {0}; -+ mbstate_t ps; - int tmp, point, width, max; - - if (end <= start) - return 0; -+ if (MB_CUR_MAX == 1 || rl_byte_oriented) -+{ -+_rl_ttymsg ("_rl_col_width: called with MB_CUR_MAX == 1"); -+ return (end - start); -+} -+ -+ memset (&ps, 0, sizeof (mbstate_t)); - - point = 0; - max = end; - -+ /* Try to short-circuit common cases. The adjustment to remove wrap_offset -+ is done by the caller. */ -+ /* 1. prompt string */ -+ if (flags && start == 0 && end == local_prompt_len && memcmp (str, local_prompt, local_prompt_len) == 0) -+ return (prompt_physical_chars + wrap_offset); -+ /* 2. prompt string + line contents */ -+ else if (flags && start == 0 && local_prompt_len > 0 && end > local_prompt_len && local_prompt && memcmp (str, local_prompt, local_prompt_len) == 0) -+ { -+ tmp = prompt_physical_chars + wrap_offset; -+ /* XXX - try to call ourselves recursively with non-prompt portion */ -+ tmp += _rl_col_width (str, local_prompt_len, end, flags); -+ return (tmp); -+ } -+ - while (point < start) - { - tmp = mbrlen (str + point, max, &ps); -Index: gdb-7.2.90.20110703/readline/doc/ChangeLog.gdb -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/doc/ChangeLog.gdb 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/doc/ChangeLog.gdb 2011-07-03 10:41:21.000000000 +0200 -@@ -1,3 +1,7 @@ -+2011-04-25 Jan Kratochvil -+ -+ Imported readline 6.2, and upstream patch 001. -+ - 2006-04-24 Daniel Jacobowitz - - Imported readline 5.1, and upstream patches 001-004. -Index: gdb-7.2.90.20110703/readline/doc/Makefile.in -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/doc/Makefile.in 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/doc/Makefile.in 2011-07-03 10:41:21.000000000 +0200 -@@ -1,25 +1,24 @@ - # This makefile for Readline library documentation is in -*- text -*- mode. - # Emacs likes it that way. - --# Copyright (C) 1996-2004 Free Software Foundation, Inc. -+# Copyright (C) 1996-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 2, 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, write to the Free Software --# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. -+# 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 . - - topdir = @top_srcdir@ - srcdir = @srcdir@ --VPATH = .:@srcdir@ -+VPATH = @srcdir@ - - prefix = @prefix@ - -@@ -64,9 +63,9 @@ PSPDF = gs -sPAPERSIZE=${PAPERSIZE - - RLSRC = $(srcdir)/rlman.texi $(srcdir)/rluser.texi \ - $(srcdir)/rltech.texi $(srcdir)/version.texi \ -- $(srcdir)/rluserman.texi -+ $(srcdir)/rluserman.texi $(srcdir)/fdl.texi - HISTSRC = $(srcdir)/history.texi $(srcdir)/hsuser.texi \ -- $(srcdir)/hstech.texi $(srcdir)/version.texi -+ $(srcdir)/hstech.texi $(srcdir)/version.texi $(srcdir)/fdl.texi - - # This should be a program that converts troff to an ascii-readable format - NROFF = groff -Tascii -@@ -83,7 +82,7 @@ PDFOBJ = readline.pdf history.pdf rluser - - INTERMEDIATE_OBJ = rlman.dvi - --DIST_DOCS = $(DVIOBJ) $(PSOBJ) $(HTMLOBJ) $(INFOOBJ) $(TEXTOBJ) -+DIST_DOCS = $(DVIOBJ) $(PSOBJ) $(HTMLOBJ) $(INFOOBJ) $(TEXTOBJ) $(PDFOBJ) - - .SUFFIXES: .0 .3 .ps .txt .dvi .html .pdf - -@@ -99,9 +98,11 @@ DIST_DOCS = $(DVIOBJ) $(PSOBJ) $(HTMLOBJ - $(RM) $@ - -${DVIPDF} $< - --all: info dvi html ps text -+all: info dvi html ps text pdf - nodvi: info html text - -+xdist: $(DIST_DOCS) -+ - info: $(INFOOBJ) - dvi: $(DVIOBJ) - ps: $(PSOBJ) -@@ -156,13 +157,13 @@ history.html: ${HISTSRC} - - readline.0: readline.3 - --readline_3.ps: readline.3 -+readline_3.ps: $(srcdir)/readline.3 - ${RM} $@ - ${GROFF} -man < $(srcdir)/readline.3 > $@ - - history.0: history.3 - --history_3.ps: history.3 -+history_3.ps: $(srcdir)/history.3 - ${RM} $@ - ${GROFF} -man < $(srcdir)/history.3 > $@ - -@@ -182,7 +183,7 @@ distclean: clean maybe-clean - $(RM) Makefile - - maybe-clean: -- -if test "X$(topdir)" != "X$(BUILD_DIR)"; then \ -+ -if test "X$(topdir)" != "X.." && test "X$(topdir)" != "X$(BUILD_DIR)"; then \ - $(RM) $(DIST_DOCS); \ - fi - -Index: gdb-7.2.90.20110703/readline/doc/fdl.texi -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/doc/fdl.texi 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/doc/fdl.texi 2011-07-03 10:41:21.000000000 +0200 -@@ -1,13 +1,12 @@ -+@c The GNU Free Documentation License. -+@center Version 1.3, 3 November 2008 - --@node GNU Free Documentation License --@appendixsec GNU Free Documentation License -- --@cindex FDL, GNU Free Documentation License --@center Version 1.2, November 2002 -+@c This file is intended to be included within another document, -+@c hence no sectioning command or @node. - - @display --Copyright @copyright{} 2000,2001,2002 Free Software Foundation, Inc. --59 Temple Place, Suite 330, Boston, MA 02111-1307, USA -+Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. -+@uref{http://fsf.org/} - - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. -@@ -112,6 +111,9 @@ formats which do not have any title page - the text near the most prominent appearance of the work's title, - preceding the beginning of the body of the text. - -+The ``publisher'' means any person or entity that distributes copies -+of the Document to the public. -+ - A section ``Entitled XYZ'' means a named subunit of the Document whose - title either is precisely XYZ or contains XYZ in parentheses following - text that translates XYZ in another language. (Here XYZ stands for a -@@ -344,7 +346,7 @@ and independent documents or works, in o - distribution medium, is called an ``aggregate'' if the copyright - resulting from the compilation is not used to limit the legal rights - of the compilation's users beyond what the individual works permit. --When the Document is included an aggregate, this License does not -+When the Document is included in an aggregate, this License does not - apply to the other works in the aggregate which are not themselves - derivative works of the Document. - -@@ -380,13 +382,30 @@ title. - @item - TERMINATION - --You may not copy, modify, sublicense, or distribute the Document except --as expressly provided for under this License. Any other attempt to --copy, modify, sublicense or distribute the Document is void, and will --automatically terminate your rights under this License. However, --parties who have received copies, or rights, from you under this --License will not have their licenses terminated so long as such --parties remain in full compliance. -+You may not copy, modify, sublicense, or distribute the Document -+except as expressly provided under this License. Any attempt -+otherwise to copy, modify, sublicense, or distribute it is void, and -+will automatically terminate your rights under this License. -+ -+However, if you cease all violation of this License, then your license -+from a particular copyright holder is reinstated (a) provisionally, -+unless and until the copyright holder explicitly and finally -+terminates your license, and (b) permanently, if the copyright holder -+fails to notify you of the violation by some reasonable means prior to -+60 days after the cessation. -+ -+Moreover, your license from a particular copyright holder is -+reinstated permanently if the copyright holder notifies you of the -+violation by some reasonable means, this is the first time you have -+received notice of violation of this License (for any work) from that -+copyright holder, and you cure the violation prior to 30 days after -+your receipt of the notice. -+ -+Termination of your rights under this section does not terminate the -+licenses of parties who have received copies or rights from you under -+this License. If your rights have been terminated and not permanently -+reinstated, receipt of a copy of some or all of the same material does -+not give you any rights to use it. - - @item - FUTURE REVISIONS OF THIS LICENSE -@@ -404,11 +423,46 @@ following the terms and conditions eithe - of any later version that has been published (not as a draft) by the - Free Software Foundation. If the Document does not specify a version - number of this License, you may choose any version ever published (not --as a draft) by the Free Software Foundation. -+as a draft) by the Free Software Foundation. If the Document -+specifies that a proxy can decide which future versions of this -+License can be used, that proxy's public statement of acceptance of a -+version permanently authorizes you to choose that version for the -+Document. -+ -+@item -+RELICENSING -+ -+``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any -+World Wide Web server that publishes copyrightable works and also -+provides prominent facilities for anybody to edit those works. A -+public wiki that anybody can edit is an example of such a server. A -+``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the -+site means any set of copyrightable works thus published on the MMC -+site. -+ -+``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0 -+license published by Creative Commons Corporation, a not-for-profit -+corporation with a principal place of business in San Francisco, -+California, as well as future copyleft versions of that license -+published by that same organization. -+ -+``Incorporate'' means to publish or republish a Document, in whole or -+in part, as part of another Document. -+ -+An MMC is ``eligible for relicensing'' if it is licensed under this -+License, and if all works that were first published under this License -+somewhere other than this MMC, and subsequently incorporated in whole -+or in part into the MMC, (1) had no cover texts or invariant sections, -+and (2) were thus incorporated prior to November 1, 2008. -+ -+The operator of an MMC Site may republish an MMC contained in the site -+under CC-BY-SA on the same site at any time before August 1, 2009, -+provided the MMC is eligible for relicensing. -+ - @end enumerate - - @page --@appendixsubsec ADDENDUM: How to use this License for your documents -+@heading ADDENDUM: How to use this License for your documents - - To use this License in a document you have written, include a copy of - the License in the document and put the following copyright and -@@ -418,16 +472,16 @@ license notices just after the title pag - @group - Copyright (C) @var{year} @var{your name}. - Permission is granted to copy, distribute and/or modify this document -- under the terms of the GNU Free Documentation License, Version 1.2 -+ under the terms of the GNU Free Documentation License, Version 1.3 - or any later version published by the Free Software Foundation; -- with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. -- A copy of the license is included in the section entitled ``GNU -+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover -+ Texts. A copy of the license is included in the section entitled ``GNU - Free Documentation License''. - @end group - @end smallexample - - If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, --replace the ``with...Texts.'' line with this: -+replace the ``with@dots{}Texts.'' line with this: - - @smallexample - @group -Index: gdb-7.2.90.20110703/readline/doc/history.3 -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/doc/history.3 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/doc/history.3 2011-07-03 10:41:21.000000000 +0200 -@@ -6,9 +6,9 @@ - .\" Case Western Reserve University - .\" chet@ins.CWRU.Edu - .\" --.\" Last Change: Thu Jul 31 08:46:08 EDT 2003 -+.\" Last Change: Thu Aug 12 22:24:41 EDT 2010 - .\" --.TH HISTORY 3 "2003 July 31" "GNU History 5.0" -+.TH HISTORY 3 "2010 August 12" "GNU History 6.2" - .\" - .\" File Name macro. This used to be `.PN', for Path Name, - .\" but Sun doesn't seem to like that very much. -@@ -40,8 +40,8 @@ - .SH NAME - history \- GNU History Library - .SH COPYRIGHT --.if t The GNU History Library is Copyright \(co 1989-2002 by the Free Software Foundation, Inc. --.if n The GNU History Library is Copyright (C) 1989-2002 by the Free Software Foundation, Inc. -+.if t The GNU History Library is Copyright \(co 1989-2011 by the Free Software Foundation, Inc. -+.if n The GNU History Library is Copyright (C) 1989-2011 by the Free Software Foundation, Inc. - .SH DESCRIPTION - Many programs read input from the user a line at a time. The GNU - History library is able to keep track of those lines, associate arbitrary -@@ -83,6 +83,8 @@ the history expansion character. - .PP - An event designator is a reference to a command line entry in the - history list. -+Unless the reference is absolute, events are relative to the current -+position in the history list. - .PP - .PD 0 - .TP -@@ -96,18 +98,22 @@ Refer to command line - .IR n . - .TP - .B !\-\fIn\fR --Refer to the current command line minus -+Refer to the current command minus - .IR n . - .TP - .B !! - Refer to the previous command. This is a synonym for `!\-1'. - .TP - .B !\fIstring\fR --Refer to the most recent command starting with -+Refer to the most recent command -+preceding the current position in the history list -+starting with - .IR string . - .TP - .B !?\fIstring\fR\fB[?]\fR --Refer to the most recent command containing -+Refer to the most recent command -+preceding the current postition in the history list -+containing - .IR string . - The trailing \fB?\fP may be omitted if - .I string -@@ -569,10 +575,13 @@ The number of entries currently stored i - The maximum number of history entries. This must be changed using - \fBstifle_history()\fP. - --.Vb int history_write_timestamps -+.Vb int history_wite_timestamps - If non-zero, timestamps are written to the history file, so they can be - preserved between sessions. The default value is 0, meaning that - timestamps are not saved. -+The current timestamp format uses the value of \fIhistory_comment_char\fP -+to delimit timestamp entries in the history file. If that variable does -+not have a value (the default), timestamps will not be written. - - .Vb char history_expansion_char - The character that introduces a history event. The default is \fB!\fP. -Index: gdb-7.2.90.20110703/readline/doc/history.texi -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/doc/history.texi 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/doc/history.texi 2011-07-03 10:41:21.000000000 +0200 -@@ -4,8 +4,6 @@ - @settitle GNU History Library - @c %**end of header (This is for running Texinfo on a region.) - --@setchapternewpage odd -- - @include version.texi - - @copying -@@ -14,7 +12,7 @@ This document describes the GNU History - a programming tool that provides a consistent user interface for - recalling lines of previously typed input. - --Copyright @copyright{} 1988-2004 Free Software Foundation, Inc. -+Copyright @copyright{} 1988--2011 Free Software Foundation, Inc. - - Permission is granted to make and distribute verbatim copies of - this manual provided the copyright notice and this permission notice -@@ -22,15 +20,16 @@ are preserved on all copies. - - @quotation - Permission is granted to copy, distribute and/or modify this document --under the terms of the GNU Free Documentation License, Version 1.1 or -+under the terms of the GNU Free Documentation License, Version 1.3 or - any later version published by the Free Software Foundation; with no --Invariant Sections, with the Front-Cover texts being ``A GNU Manual,'' -+Invariant Sections, with the Front-Cover texts being ``A GNU Manual'', - and with the Back-Cover Texts as in (a) below. A copy of the license is --included in the section entitled ``GNU Free Documentation License.'' -+included in the section entitled ``GNU Free Documentation License''. -+ -+(a) The FSF's Back-Cover Text is: You are free to copy and modify -+this GNU manual. Buying copies from GNU Press supports the FSF in -+developing GNU and promoting software freedom.'' - --(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify --this GNU Manual, like GNU software. Copies published by the Free --Software Foundation raise funds for GNU development.'' - @end quotation - @end copying - -@@ -72,7 +71,7 @@ typed input. - @menu - * Using History Interactively:: GNU History User's Manual. - * Programming with GNU History:: GNU History Programmer's Manual. --* Copying This Manual:: Copying This Manual. -+* GNU Free Documentation License:: License for copying this manual. - * Concept Index:: Index of concepts described in this manual. - * Function and Variable Index:: Index of externally visible functions - and variables. -@@ -84,12 +83,8 @@ typed input. - @include hsuser.texi - @include hstech.texi - --@node Copying This Manual --@appendix Copying This Manual -- --@menu --* GNU Free Documentation License:: License for copying this manual. --@end menu -+@node GNU Free Documentation License -+@appendix GNU Free Documentation License - - @include fdl.texi - -Index: gdb-7.2.90.20110703/readline/doc/hstech.texi -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/doc/hstech.texi 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/doc/hstech.texi 2011-07-03 10:41:21.000000000 +0200 -@@ -1,7 +1,7 @@ - @ignore - This file documents the user interface to the GNU History library. - --Copyright (C) 1988-2002 Free Software Foundation, Inc. -+Copyright (C) 1988-2011 Free Software Foundation, Inc. - Authored by Brian Fox and Chet Ramey. - - Permission is granted to make and distribute verbatim copies of this manual -@@ -426,6 +426,10 @@ The maximum number of history entries. - If non-zero, timestamps are written to the history file, so they can be - preserved between sessions. The default value is 0, meaning that - timestamps are not saved. -+ -+The current timestamp format uses the value of @var{history_comment_char} -+to delimit timestamp entries in the history file. If that variable does -+not have a value (the default), timestamps will not be written. - @end deftypevar - - @deftypevar char history_expansion_char -Index: gdb-7.2.90.20110703/readline/doc/hsuser.texi -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/doc/hsuser.texi 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/doc/hsuser.texi 2011-07-03 10:41:21.000000000 +0200 -@@ -1,7 +1,7 @@ - @ignore - This file documents the user interface to the GNU History library. - --Copyright (C) 1988-2002 Free Software Foundation, Inc. -+Copyright (C) 1988--2011 Free Software Foundation, Inc. - Authored by Brian Fox and Chet Ramey. - - Permission is granted to make and distribute verbatim copies of this manual -@@ -97,7 +97,11 @@ to contain no more than @env{$HISTFILESI - lines. If @env{HISTFILESIZE} is not set, no truncation is performed. - - If the @env{HISTTIMEFORMAT} is set, the time stamp information --associated with each history entry is written to the history file. -+associated with each history entry is written to the history file, -+marked with the history comment character. -+When the history file is read, lines beginning with the history -+comment character followed immediately by a digit are interpreted -+as timestamps for the previous history line. - - The builtin command @code{fc} may be used to list or edit and re-execute - a portion of the history list. -@@ -133,7 +137,7 @@ history list and history file. - @item fc - @btindex fc - @example --@code{fc [-e @var{ename}] [-nlr] [@var{first}] [@var{last}]} -+@code{fc [-e @var{ename}] [-lnr] [@var{first}] [@var{last}]} - @code{fc -s [@var{pat}=@var{rep}] [@var{command}]} - @end example - -@@ -277,7 +281,10 @@ them, so that they are available for sub - This is most useful in conjunction with Readline. - - The shell allows control of the various characters used by the --history expansion mechanism with the @code{histchars} variable. -+history expansion mechanism with the @code{histchars} variable, -+as explained above (@pxref{Bash Variables}). The shell uses -+the history comment character to mark history timestamps when -+writing the history file. - @end ifset - - @menu -@@ -292,6 +299,8 @@ history expansion mechanism with the @co - - An event designator is a reference to a command line entry in the - history list. -+Unless the reference is absolute, events are relative to the current -+position in the history list. - @cindex history events - - @table @asis -@@ -317,10 +326,15 @@ Refer to the command @var{n} lines back. - Refer to the previous command. This is a synonym for @samp{!-1}. - - @item @code{!@var{string}} --Refer to the most recent command starting with @var{string}. -+Refer to the most recent command -+preceding the current position in the history list -+starting with @var{string}. - - @item @code{!?@var{string}[?]} --Refer to the most recent command containing @var{string}. The trailing -+Refer to the most recent command -+preceding the current position in the history list -+containing @var{string}. -+The trailing - @samp{?} may be omitted if the @var{string} is followed immediately by - a newline. - -@@ -412,7 +426,7 @@ of the following modifiers, each precede - Remove a trailing pathname component, leaving only the head. - - @item t --Remove all leading pathname components, leaving the tail. -+Remove all leading pathname components, leaving the tail. - - @item r - Remove a trailing suffix of the form @samp{.@var{suffix}}, leaving -Index: gdb-7.2.90.20110703/readline/doc/inc-hist.texinfo -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/doc/inc-hist.texinfo 2011-07-03 10:40:53.000000000 +0200 -+++ /dev/null 1970-01-01 00:00:00.000000000 +0000 -@@ -1,457 +0,0 @@ --@ignore --This file documents the user interface to the GNU History library. -- --Copyright (C) 1988-2002 Free Software Foundation, Inc. --Authored by Brian Fox and Chet Ramey. -- --Permission is granted to make and distribute verbatim copies of this manual --provided the copyright notice and this permission notice are preserved on --all copies. -- --Permission is granted to process this file through Tex and print the --results, provided the printed document carries copying permission notice --identical to this one except for the removal of this paragraph (this --paragraph not being relevant to the printed manual). -- --Permission is granted to copy and distribute modified versions of this --manual under the conditions for verbatim copying, provided also that the --GNU Copyright statement is available to the distributee, and provided that --the entire resulting derived work is distributed under the terms of a --permission notice identical to this one. -- --Permission is granted to copy and distribute translations of this manual --into another language, under the above conditions for modified versions. --@end ignore -- --@node Using History Interactively --@chapter Using History Interactively -- --@c @ifclear BashFeatures --@c @defcodeindex bt --@c @end ifclear -- --@ifset BashFeatures --This chapter describes how to use the @sc{gnu} History Library --interactively, from a user's standpoint. --It should be considered a user's guide. --For information on using the @sc{gnu} History Library in other programs, --see the @sc{gnu} Readline Library Manual. --@end ifset --@ifclear BashFeatures --This chapter describes how to use the @sc{gnu} History Library interactively, --from a user's standpoint. It should be considered a user's guide. --For information on using the @sc{gnu} History Library in other programs, --see the @sc{gnu} Readline Library Manual. --@end ifclear -- --@ifset BashFeatures --@menu --* Bash History Facilities:: How Bash lets you manipulate your command -- history. --* Bash History Builtins:: The Bash builtin commands that manipulate -- the command history. --* History Interaction:: What it feels like using History as a user. --@end menu --@end ifset --@ifclear BashFeatures --@menu --* History Interaction:: What it feels like using History as a user. --@end menu --@end ifclear -- --@ifset BashFeatures --@node Bash History Facilities --@section Bash History Facilities --@cindex command history --@cindex history list -- --When the @option{-o history} option to the @code{set} builtin --is enabled (@pxref{The Set Builtin}), --the shell provides access to the @dfn{command history}, --the list of commands previously typed. --The value of the @env{HISTSIZE} shell variable is used as the --number of commands to save in a history list. --The text of the last @env{$HISTSIZE} --commands (default 500) is saved. --The shell stores each command in the history list prior to --parameter and variable expansion --but after history expansion is performed, subject to the --values of the shell variables --@env{HISTIGNORE} and @env{HISTCONTROL}. -- --When the shell starts up, the history is initialized from the --file named by the @env{HISTFILE} variable (default @file{~/.bash_history}). --The file named by the value of @env{HISTFILE} is truncated, if --necessary, to contain no more than the number of lines specified by --the value of the @env{HISTFILESIZE} variable. --When an interactive shell exits, the last --@env{$HISTSIZE} lines are copied from the history list to the file --named by @env{$HISTFILE}. --If the @code{histappend} shell option is set (@pxref{Bash Builtins}), --the lines are appended to the history file, --otherwise the history file is overwritten. --If @env{HISTFILE} --is unset, or if the history file is unwritable, the history is --not saved. After saving the history, the history file is truncated --to contain no more than @env{$HISTFILESIZE} --lines. If @env{HISTFILESIZE} is not set, no truncation is performed. -- --If the @env{HISTTIMEFORMAT} is set, the time stamp information --associated with each history entry is written to the history file. -- --The builtin command @code{fc} may be used to list or edit and re-execute --a portion of the history list. --The @code{history} builtin may be used to display or modify the history --list and manipulate the history file. --When using command-line editing, search commands --are available in each editing mode that provide access to the --history list (@pxref{Commands For History}). -- --The shell allows control over which commands are saved on the history --list. The @env{HISTCONTROL} and @env{HISTIGNORE} --variables may be set to cause the shell to save only a subset of the --commands entered. --The @code{cmdhist} --shell option, if enabled, causes the shell to attempt to save each --line of a multi-line command in the same history entry, adding --semicolons where necessary to preserve syntactic correctness. --The @code{lithist} --shell option causes the shell to save the command with embedded newlines --instead of semicolons. --The @code{shopt} builtin is used to set these options. --@xref{Bash Builtins}, for a description of @code{shopt}. -- --@node Bash History Builtins --@section Bash History Builtins --@cindex history builtins -- --Bash provides two builtin commands which manipulate the --history list and history file. -- --@table @code -- --@item fc --@btindex fc --@example --@code{fc [-e @var{ename}] [-nlr] [@var{first}] [@var{last}]} --@code{fc -s [@var{pat}=@var{rep}] [@var{command}]} --@end example -- --Fix Command. In the first form, a range of commands from @var{first} to --@var{last} is selected from the history list. Both @var{first} and --@var{last} may be specified as a string (to locate the most recent --command beginning with that string) or as a number (an index into the --history list, where a negative number is used as an offset from the --current command number). If @var{last} is not specified it is set to --@var{first}. If @var{first} is not specified it is set to the previous --command for editing and @minus{}16 for listing. If the @option{-l} flag is --given, the commands are listed on standard output. The @option{-n} flag --suppresses the command numbers when listing. The @option{-r} flag --reverses the order of the listing. Otherwise, the editor given by --@var{ename} is invoked on a file containing those commands. If --@var{ename} is not given, the value of the following variable expansion --is used: @code{$@{FCEDIT:-$@{EDITOR:-vi@}@}}. This says to use the --value of the @env{FCEDIT} variable if set, or the value of the --@env{EDITOR} variable if that is set, or @code{vi} if neither is set. --When editing is complete, the edited commands are echoed and executed. -- --In the second form, @var{command} is re-executed after each instance --of @var{pat} in the selected command is replaced by @var{rep}. -- --A useful alias to use with the @code{fc} command is @code{r='fc -s'}, so --that typing @samp{r cc} runs the last command beginning with @code{cc} --and typing @samp{r} re-executes the last command (@pxref{Aliases}). -- --@item history --@btindex history --@example --history [@var{n}] --history -c --history -d @var{offset} --history [-anrw] [@var{filename}] --history -ps @var{arg} --@end example -- --With no options, display the history list with line numbers. --Lines prefixed with a @samp{*} have been modified. --An argument of @var{n} lists only the last @var{n} lines. --If the shell variable @env{HISTTIMEFORMAT} is set and not null, --it is used as a format string for @var{strftime} to display --the time stamp associated with each displayed history entry. --No intervening blank is printed between the formatted time stamp --and the history line. -- --Options, if supplied, have the following meanings: -- --@table @code --@item -c --Clear the history list. This may be combined --with the other options to replace the history list completely. -- --@item -d @var{offset} --Delete the history entry at position @var{offset}. --@var{offset} should be specified as it appears when the history is --displayed. -- --@item -a --Append the new --history lines (history lines entered since the beginning of the --current Bash session) to the history file. -- --@item -n --Append the history lines not already read from the history file --to the current history list. These are lines appended to the history --file since the beginning of the current Bash session. -- --@item -r --Read the current history file and append its contents to --the history list. -- --@item -w --Write out the current history to the history file. -- --@item -p --Perform history substitution on the @var{arg}s and display the result --on the standard output, without storing the results in the history list. -- --@item -s --The @var{arg}s are added to the end of --the history list as a single entry. -- --@end table -- --When any of the @option{-w}, @option{-r}, @option{-a}, or @option{-n} options is --used, if @var{filename} --is given, then it is used as the history file. If not, then --the value of the @env{HISTFILE} variable is used. -- --@end table --@end ifset -- --@node History Interaction --@section History Expansion --@cindex history expansion -- --The History library provides a history expansion feature that is similar --to the history expansion provided by @code{csh}. This section --describes the syntax used to manipulate the history information. -- --History expansions introduce words from the history list into --the input stream, making it easy to repeat commands, insert the --arguments to a previous command into the current input line, or --fix errors in previous commands quickly. -- --History expansion takes place in two parts. The first is to determine --which line from the history list should be used during substitution. --The second is to select portions of that line for inclusion into the --current one. The line selected from the history is called the --@dfn{event}, and the portions of that line that are acted upon are --called @dfn{words}. Various @dfn{modifiers} are available to manipulate --the selected words. The line is broken into words in the same fashion --that Bash does, so that several words --surrounded by quotes are considered one word. --History expansions are introduced by the appearance of the --history expansion character, which is @samp{!} by default. --@ifset BashFeatures --Only @samp{\} and @samp{'} may be used to escape the history expansion --character. --@end ifset -- --@ifset BashFeatures --Several shell options settable with the @code{shopt} --builtin (@pxref{Bash Builtins}) may be used to tailor --the behavior of history expansion. If the --@code{histverify} shell option is enabled, and Readline --is being used, history substitutions are not immediately passed to --the shell parser. --Instead, the expanded line is reloaded into the Readline --editing buffer for further modification. --If Readline is being used, and the @code{histreedit} --shell option is enabled, a failed history expansion will be --reloaded into the Readline editing buffer for correction. --The @option{-p} option to the @code{history} builtin command --may be used to see what a history expansion will do before using it. --The @option{-s} option to the @code{history} builtin may be used to --add commands to the end of the history list without actually executing --them, so that they are available for subsequent recall. --This is most useful in conjunction with Readline. -- --The shell allows control of the various characters used by the --history expansion mechanism with the @code{histchars} variable. --@end ifset -- --@menu --* Event Designators:: How to specify which history line to use. --* Word Designators:: Specifying which words are of interest. --* Modifiers:: Modifying the results of substitution. --@end menu -- --@node Event Designators --@subsection Event Designators --@cindex event designators -- --An event designator is a reference to a command line entry in the --history list. --@cindex history events -- --@table @asis -- --@item @code{!} --@ifset BashFeatures --Start a history substitution, except when followed by a space, tab, --the end of the line, @samp{=} or @samp{(} (when the --@code{extglob} shell option is enabled using the @code{shopt} builtin). --@end ifset --@ifclear BashFeatures --Start a history substitution, except when followed by a space, tab, --the end of the line, or @samp{=}. --@end ifclear -- --@item @code{!@var{n}} --Refer to command line @var{n}. -- --@item @code{!-@var{n}} --Refer to the command @var{n} lines back. -- --@item @code{!!} --Refer to the previous command. This is a synonym for @samp{!-1}. -- --@item @code{!@var{string}} --Refer to the most recent command starting with @var{string}. -- --@item @code{!?@var{string}[?]} --Refer to the most recent command containing @var{string}. The trailing --@samp{?} may be omitted if the @var{string} is followed immediately by --a newline. -- --@item @code{^@var{string1}^@var{string2}^} --Quick Substitution. Repeat the last command, replacing @var{string1} --with @var{string2}. Equivalent to --@code{!!:s/@var{string1}/@var{string2}/}. -- --@item @code{!#} --The entire command line typed so far. -- --@end table -- --@node Word Designators --@subsection Word Designators -- --Word designators are used to select desired words from the event. --A @samp{:} separates the event specification from the word designator. It --may be omitted if the word designator begins with a @samp{^}, @samp{$}, --@samp{*}, @samp{-}, or @samp{%}. Words are numbered from the beginning --of the line, with the first word being denoted by 0 (zero). Words are --inserted into the current line separated by single spaces. -- --@need 0.75 --For example, -- --@table @code --@item !! --designates the preceding command. When you type this, the preceding --command is repeated in toto. -- --@item !!:$ --designates the last argument of the preceding command. This may be --shortened to @code{!$}. -- --@item !fi:2 --designates the second argument of the most recent command starting with --the letters @code{fi}. --@end table -- --@need 0.75 --Here are the word designators: -- --@table @code -- --@item 0 (zero) --The @code{0}th word. For many applications, this is the command word. -- --@item @var{n} --The @var{n}th word. -- --@item ^ --The first argument; that is, word 1. -- --@item $ --The last argument. -- --@item % --The word matched by the most recent @samp{?@var{string}?} search. -- --@item @var{x}-@var{y} --A range of words; @samp{-@var{y}} abbreviates @samp{0-@var{y}}. -- --@item * --All of the words, except the @code{0}th. This is a synonym for @samp{1-$}. --It is not an error to use @samp{*} if there is just one word in the event; --the empty string is returned in that case. -- --@item @var{x}* --Abbreviates @samp{@var{x}-$} -- --@item @var{x}- --Abbreviates @samp{@var{x}-$} like @samp{@var{x}*}, but omits the last word. -- --@end table -- --If a word designator is supplied without an event specification, the --previous command is used as the event. -- --@node Modifiers --@subsection Modifiers -- --After the optional word designator, you can add a sequence of one or more --of the following modifiers, each preceded by a @samp{:}. -- --@table @code -- --@item h --Remove a trailing pathname component, leaving only the head. -- --@item t --Remove all leading pathname components, leaving the tail. -- --@item r --Remove a trailing suffix of the form @samp{.@var{suffix}}, leaving --the basename. -- --@item e --Remove all but the trailing suffix. -- --@item p --Print the new command but do not execute it. -- --@ifset BashFeatures --@item q --Quote the substituted words, escaping further substitutions. -- --@item x --Quote the substituted words as with @samp{q}, --but break into words at spaces, tabs, and newlines. --@end ifset -- --@item s/@var{old}/@var{new}/ --Substitute @var{new} for the first occurrence of @var{old} in the --event line. Any delimiter may be used in place of @samp{/}. --The delimiter may be quoted in @var{old} and @var{new} --with a single backslash. If @samp{&} appears in @var{new}, --it is replaced by @var{old}. A single backslash will quote --the @samp{&}. The final delimiter is optional if it is the last --character on the input line. -- --@item & --Repeat the previous substitution. -- --@item g --@itemx a --Cause changes to be applied over the entire event line. Used in --conjunction with @samp{s}, as in @code{gs/@var{old}/@var{new}/}, --or with @samp{&}. -- --@item G --Apply the following @samp{s} modifier once to each word in the event. -- --@end table -Index: gdb-7.2.90.20110703/readline/doc/readline.3 -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/doc/readline.3 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/doc/readline.3 2011-07-03 10:41:21.000000000 +0200 -@@ -6,9 +6,9 @@ - .\" Case Western Reserve University - .\" chet@ins.CWRU.Edu - .\" --.\" Last Change: Tue Sep 13 12:07:26 EDT 2005 -+.\" Last Change: Sat Aug 28 18:56:32 EDT 2010 - .\" --.TH READLINE 3 "2005 Sep 13" "GNU Readline 5.1-beta1" -+.TH READLINE 3 "2010 August 28" "GNU Readline 6.2" - .\" - .\" File Name macro. This used to be `.PN', for Path Name, - .\" but Sun doesn't seem to like that very much. -@@ -34,8 +34,8 @@ readline \- get a line from a user with - \fBreadline\fP (\fIconst char *prompt\fP); - .fi - .SH COPYRIGHT --.if n Readline is Copyright (C) 1989\-2004 by the Free Software Foundation, Inc. --.if t Readline is Copyright \(co 1989\-2004 by the Free Software Foundation, Inc. -+.if n Readline is Copyright (C) 1989\-2011 Free Software Foundation, Inc. -+.if t Readline is Copyright \(co 1989\-2011 Free Software Foundation, Inc. - .SH DESCRIPTION - .LP - .B readline -@@ -76,7 +76,7 @@ is read with a non\-empty line, it is - treated as a newline. - .SH NOTATION - .LP --An emacs-style notation is used to denote -+An Emacs-style notation is used to denote - keystrokes. Control keys are denoted by C\-\fIkey\fR, e.g., C\-n - means Control\-N. Similarly, - .I meta -@@ -116,6 +116,8 @@ The name of this file is taken from the - .B INPUTRC - environment variable. If that variable is unset, the default is - .IR ~/.inputrc . -+If that file does not exist or cannot be read, the ultimate default is -+.IR /etc/inputrc . - When a program which uses the readline library starts up, the - init file is read, and the key bindings and variables are set. - There are only a few basic constructs allowed in the -@@ -168,6 +170,8 @@ command or the text of a macro and a key - it should be bound. The name may be specified in one of two ways: - as a symbolic key name, possibly with \fIMeta\-\fP or \fIControl\-\fP - prefixes, or as a key sequence. -+The name and key sequence are separated by a colon. There can be no -+whitespace between the name and the colon. - .PP - When using the form \fBkeyname\fP:\^\fIfunction-name\fP or \fImacro\fP, - .I keyname -@@ -356,11 +360,30 @@ This command is bound to - in emacs mode and to - .B # - in vi command mode. -+.TP -+.B completion\-display\-width (-1) -+The number of screen columns used to display possible matches -+when performing completion. -+The value is ignored if it is less than 0 or greater than the terminal -+screen width. -+A value of 0 will cause matches to be displayed one per line. -+The default value is -1. - .TP - .B completion\-ignore\-case (Off) - If set to \fBOn\fP, readline performs filename matching and completion - in a case\-insensitive fashion. - .TP -+.B completion\-map\-case (Off) -+If set to \fBOn\fP, and \fBcompletion\-ignore\-case\fP is enabled, readline -+treats hyphens (\fI\-\fP) and underscores (\fI_\fP) as equivalent when -+performing case\-insensitive filename matching and completion. -+.TP -+.B completion\-prefix\-display\-length (0) -+The length in characters of the common prefix of a list of possible -+completions that is displayed without modification. When set to a -+value greater than zero, common prefixes longer than this value are -+replaced with an ellipsis when displaying possible completions. -+.TP - .B completion\-query\-items (100) - This determines when the user is queried about viewing - the number of possible completions -@@ -384,27 +407,41 @@ mapped to \fBself-insert\fP. - .TP - .B editing\-mode (emacs) - Controls whether readline begins with a set of key bindings similar --to emacs or vi. -+to \fIEmacs\fP or \fIvi\fP. - .B editing\-mode - can be set to either - .B emacs - or - .BR vi . - .TP -+.B echo\-control\-characters (On) -+When set to \fBOn\fP, on operating systems that indicate they support it, -+readline echoes a character corresponding to a signal generated from the -+keyboard. -+.TP - .B enable\-keypad (Off) - When set to \fBOn\fP, readline will try to enable the application - keypad when it is called. Some systems need this to enable the - arrow keys. - .TP -+.B enable\-meta\-key (On) -+When set to \fBOn\fP, readline will try to enable any meta modifier -+key the terminal claims to support when it is called. On many terminals, -+the meta key is used to send eight-bit characters. -+.TP - .B expand\-tilde (Off) --If set to \fBon\fP, tilde expansion is performed when readline -+If set to \fBOn\fP, tilde expansion is performed when readline - attempts word completion. - .TP - .B history\-preserve\-point (Off) --If set to \fBon\fP, the history code attempts to place point at the -+If set to \fBOn\fP, the history code attempts to place point at the - same location on each history line retrieved with \fBprevious-history\fP - or \fBnext-history\fP. - .TP -+.B history\-size (0) -+Set the maximum number of history entries saved in the history list. If -+set to zero, the number of entries in the history list is not limited. -+.TP - .B horizontal\-scroll\-mode (Off) - When set to \fBOn\fP, makes readline use a single line for display, - scrolling the input horizontally on a single screen line when it -@@ -451,9 +488,15 @@ have a slash appended (subject to the va - .B match\-hidden\-files (On) - This variable, when set to \fBOn\fP, causes readline to match files whose - names begin with a `.' (hidden files) when performing filename --completion, unless the leading `.' is -+completion. -+If set to \fBOff\fP, the leading `.' must be - supplied by the user in the filename to be completed. - .TP -+.B menu\-complete\-display\-prefix (Off) -+If set to \fBOn\fP, menu completion displays the common prefix of the -+list of possible completions (which may be empty) before cycling through -+the list. -+.TP - .B output\-meta (Off) - If set to \fBOn\fP, readline will display characters with the - eighth bit set directly rather than as a meta-prefixed escape -@@ -467,10 +510,16 @@ to display a screenful of possible compl - If set to \fBOn\fP, readline will display completions with matches - sorted horizontally in alphabetical order, rather than down the screen. - .TP -+.B revert\-all\-at\-newline (Off) -+If set to \fBOn\fP, readline will undo all changes to history lines -+before returning when \fBaccept\-line\fP is executed. By default, -+history lines may be modified and retain individual undo lists across -+calls to \fBreadline\fP. -+.TP - .B show\-all\-if\-ambiguous (Off) - This alters the default behavior of the completion functions. If - set to --.BR on , -+.BR On , - words which have more than one possible completion cause the - matches to be listed immediately instead of ringing the bell. - .TP -@@ -478,12 +527,20 @@ matches to be listed immediately instead - This alters the default behavior of the completion functions in - a fashion similar to \fBshow\-all\-if\-ambiguous\fP. - If set to --.BR on , -+.BR On , - words which have more than one possible completion without any - possible partial completion (the possible completions don't share - a common prefix) cause the matches to be listed immediately instead - of ringing the bell. - .TP -+.B skip\-completed\-text (Off) -+If set to \fBOn\fP, this alters the default completion behavior when -+inserting a single match into the line. It's only active when -+performing completion in the middle of a word. If enabled, readline -+does not insert characters from the completion that match characters -+after point in the word being completed, so portions of the word -+following the cursor are not duplicated. -+.TP - .B visible\-stats (Off) - If set to \fBOn\fP, a character denoting a file's type as reported - by \fIstat\fP(2) is appended to the filename when listing possible -@@ -530,7 +587,7 @@ library sets the \fIapplication name\fP, - file can test for a particular value. - This could be used to bind key sequences to functions useful for - a specific program. For instance, the following command adds a --key sequence that quotes the current or previous word in Bash: -+key sequence that quotes the current or previous word in \fBbash\fP: - .sp 1 - .RS - .nf -@@ -706,10 +763,14 @@ as if the "!\fIn\fP" history expansion h - .B - yank\-last\-arg (M\-.\^, M\-_\^) - Insert the last argument to the previous command (the last word of --the previous history entry). With an argument, --behave exactly like \fByank\-nth\-arg\fP. -+the previous history entry). -+With a numeric argument, behave exactly like \fByank\-nth\-arg\fP. - Successive calls to \fByank\-last\-arg\fP move back through the history --list, inserting the last argument of each line in turn. -+list, inserting the last word (or the word specified by the argument to -+the first call) of each line in turn. -+Any numeric argument supplied to these successive calls determines -+the direction to move through the history. A negative argument switches -+the direction through the history (back or forward). - The history expansion facilities are used to extract the last argument, - as if the "!$" history expansion had been specified. - .PD -@@ -884,6 +945,12 @@ only attempts filename completion under - .TP - .B possible\-completions (M\-?) - List the possible completions of the text before point. -+When displaying completions, readline sets the number of columns used -+for display to the value of \fBcompletion-display-width\fP, the value of -+the environment variable -+.SM -+.BR COLUMNS , -+or the screen width, in that order. - .TP - .B insert\-completions (M\-*) - Insert all completions of the text before point -@@ -904,6 +971,11 @@ through the list. - This command is intended to be bound to \fBTAB\fP, but is unbound - by default. - .TP -+.B menu\-complete\-backward -+Identical to \fBmenu\-complete\fP, but moves backward through the list -+of possible completions, as if \fBmenu\-complete\fP had been given a -+negative argument. This command is unbound by default. -+.TP - .B delete\-char\-or\-list - Deletes the character under the cursor if not at the beginning or - end of the line (like \fBdelete-char\fP). -@@ -977,6 +1049,15 @@ character. A negative count searches fo - A character is read and point is moved to the previous occurrence of that - character. A negative count searches for subsequent occurrences. - .TP -+.B skip\-csi\-sequence -+Read enough characters to consume a multi-key sequence such as those -+defined for keys like Home and End. Such sequences begin with a -+Control Sequence Indicator (CSI), usually ESC\-[. If this sequence is -+bound to "\e[", keys producing such sequences will have no effect -+unless explicitly bound to a readline command, instead of inserting -+stray characters into the editing buffer. This is unbound by default, -+but usually bound to ESC\-[. -+.TP - .B insert\-comment (M\-#) - Without a numeric argument, the value of the readline - .B comment\-begin -Index: gdb-7.2.90.20110703/readline/doc/rlman.texi -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/doc/rlman.texi 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/doc/rlman.texi 2011-07-03 10:41:21.000000000 +0200 -@@ -4,7 +4,6 @@ - @settitle GNU Readline Library - @comment %**end of header (This is for running Texinfo on a region.) - @synindex vr fn --@setchapternewpage odd - - @include version.texi - -@@ -14,7 +13,7 @@ This manual describes the GNU Readline L - consistency of user interface across discrete programs which provide - a command line interface. - --Copyright @copyright{} 1988-2004 Free Software Foundation, Inc. -+Copyright @copyright{} 1988--2011 Free Software Foundation, Inc. - - Permission is granted to make and distribute verbatim copies of - this manual provided the copyright notice and this permission notice -@@ -22,15 +21,16 @@ are preserved on all copies. - - @quotation - Permission is granted to copy, distribute and/or modify this document --under the terms of the GNU Free Documentation License, Version 1.1 or -+under the terms of the GNU Free Documentation License, Version 1.3 or - any later version published by the Free Software Foundation; with no --Invariant Sections, with the Front-Cover texts being ``A GNU Manual,'' -+Invariant Sections, with the Front-Cover texts being ``A GNU Manual'', - and with the Back-Cover Texts as in (a) below. A copy of the license is --included in the section entitled ``GNU Free Documentation License.'' -+included in the section entitled ``GNU Free Documentation License''. -+ -+(a) The FSF's Back-Cover Text is: You are free to copy and modify -+this GNU manual. Buying copies from GNU Press supports the FSF in -+developing GNU and promoting software freedom.'' - --(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify --this GNU Manual, like GNU software. Copies published by the Free --Software Foundation raise funds for GNU development.'' - @end quotation - @end copying - -@@ -71,7 +71,7 @@ provide a command line interface. - @menu - * Command Line Editing:: GNU Readline User's Manual. - * Programming with GNU Readline:: GNU Readline Programmer's Manual. --* Copying This Manual:: Copying this manual. -+* GNU Free Documentation License:: License for copying this manual. - * Concept Index:: Index of concepts described in this manual. - * Function and Variable Index:: Index of externally visible functions - and variables. -@@ -81,12 +81,8 @@ provide a command line interface. - @include rluser.texi - @include rltech.texi - --@node Copying This Manual --@appendix Copying This Manual -- --@menu --* GNU Free Documentation License:: License for copying this manual. --@end menu -+@node GNU Free Documentation License -+@appendix GNU Free Documentation License - - @include fdl.texi - -Index: gdb-7.2.90.20110703/readline/doc/rltech.texi -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/doc/rltech.texi 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/doc/rltech.texi 2011-07-03 10:41:21.000000000 +0200 -@@ -1,14 +1,13 @@ - @comment %**start of header (This is for running Texinfo on a region.) - @setfilename rltech.info - @comment %**end of header (This is for running Texinfo on a region.) --@setchapternewpage odd - - @ifinfo - This document describes the GNU Readline Library, a utility for aiding - in the consistency of user interface across discrete programs that need - to provide a command line interface. - --Copyright (C) 1988-2005 Free Software Foundation, Inc. -+Copyright (C) 1988--2011 Free Software Foundation, Inc. - - Permission is granted to make and distribute verbatim copies of - this manual provided the copyright notice and this permission notice -@@ -351,6 +350,12 @@ The @code{rl_set_prompt()} function (@px - be used to modify the prompt string after calling @code{readline()}. - @end deftypevar - -+@deftypevar {char *} rl_display_prompt -+The string displayed as the prompt. This is usually identical to -+@var{rl_prompt}, but may be changed temporarily by functions that -+use the prompt string as a message area, such as incremental search. -+@end deftypevar -+ - @deftypevar int rl_already_prompted - If an application wishes to display the prompt itself, rather than have - Readline do it the first time @code{readline()} is called, it should set -@@ -518,6 +523,20 @@ Readline is performing word completion. - Readline is currently executing the readline signal handler. - @item RL_STATE_UNDOING - Readline is performing an undo. -+@item RL_STATE_INPUTPENDING -+Readline has input pending due to a call to @code{rl_execute_next()}. -+@item RL_STATE_TTYCSAVED -+Readline has saved the values of the terminal's special characters. -+@item RL_STATE_CALLBACK -+Readline is currently using the alternate (callback) interface -+(@pxref{Alternate Interface}). -+@item RL_STATE_VIMOTION -+Readline is reading the argument to a vi-mode "motion" command. -+@item RL_STATE_MULTIKEY -+Readline is reading a multiple-keystroke command. -+@item RL_STATE_VICMDONCE -+Readline has entered vi command (movement) mode at least one time during -+the current call to @code{readline()}. - @item RL_STATE_DONE - Readline has read a key sequence bound to @code{accept-line} - and is about to return the line to the caller. -@@ -603,7 +622,7 @@ Readline which keymap to use. - @deftypefun Keymap rl_make_bare_keymap (void) - Returns a new, empty keymap. The space for the keymap is allocated with - @code{malloc()}; the caller should free it by calling --@code{rl_discard_keymap()} when done. -+@code{rl_free_keymap()} when done. - @end deftypefun - - @deftypefun Keymap rl_copy_keymap (Keymap map) -@@ -617,7 +636,13 @@ the Meta digits bound to produce numeric - @end deftypefun - - @deftypefun void rl_discard_keymap (Keymap keymap) --Free the storage associated with @var{keymap}. -+Free the storage associated with the data in @var{keymap}. -+The caller should free @var{keymap}. -+@end deftypefun -+ -+@deftypefun void rl_free_keymap (Keymap keymap) -+Free all storage associated with @var{keymap}. This calls -+@code{rl_discard_keymap} to free subordindate keymaps and macros. - @end deftypefun - - Readline has several internal keymaps. These functions allow you to -@@ -793,7 +818,8 @@ Print the names of all bindable Readline - @deftypefun {const char **} rl_funmap_names (void) - Return a NULL terminated array of known function names. The array is - sorted. The array itself is allocated, but not the strings inside. You --should @code{free()} the array when you are done, but not the pointers. -+should free the array, but not the pointers, using @code{free} or -+@code{rl_free} when you are done. - @end deftypefun - - @deftypefun int rl_add_funmap_entry (const char *name, rl_command_func_t *function) -@@ -1033,8 +1059,10 @@ pending input has not already been read - @deftypefun int rl_set_keyboard_input_timeout (int u) - While waiting for keyboard input in @code{rl_read_key()}, Readline will - wait for @var{u} microseconds for input before calling any function --assigned to @code{rl_event_hook}. The default waiting period is --one-tenth of a second. Returns the old timeout value. -+assigned to @code{rl_event_hook}. @var{u} must be greater than or equal -+to zero (a zero-length timeout is equivalent to a poll). -+The default waiting period is one-tenth of a second. -+Returns the old timeout value. - @end deftypefun - - @node Terminal Management -@@ -1075,6 +1103,26 @@ environment variable is used. - @node Utility Functions - @subsection Utility Functions - -+@deftypefun int rl_save_state (struct readline_state *sp) -+Save a snapshot of Readline's internal state to @var{sp}. -+The contents of the @var{readline_state} structure are documented -+in @file{readline.h}. -+The caller is responsible for allocating the structure. -+@end deftypefun -+ -+@deftypefun int rl_restore_state (struct readline_state *sp) -+Restore Readline's internal state to that stored in @var{sp}, which must -+have been saved by a call to @code{rl_save_state}. -+The contents of the @var{readline_state} structure are documented -+in @file{readline.h}. -+The caller is responsible for freeing the structure. -+@end deftypefun -+ -+@deftypefun void rl_free (void *mem) -+Deallocate the memory pointed to by @var{mem}. @var{mem} must have been -+allocated by @code{malloc}. -+@end deftypefun -+ - @deftypefun void rl_replace_line (const char *text, int clear_undo) - Replace the contents of @code{rl_line_buffer} with @var{text}. - The point and mark are preserved, if possible. -@@ -1082,7 +1130,7 @@ If @var{clear_undo} is non-zero, the und - current line is cleared. - @end deftypefun - --@deftypefun int rl_extend_line_buffer (int len) -+@deftypefun void rl_extend_line_buffer (int len) - Ensure that @code{rl_line_buffer} has enough space to hold @var{len} - characters, possibly reallocating it if necessary. - @end deftypefun -@@ -1109,6 +1157,9 @@ of strings, in argv format, such as a li - is the length of the longest string in @code{matches}. This function uses - the setting of @code{print-completions-horizontally} to select how the - matches are displayed (@pxref{Readline Init File Syntax}). -+When displaying completions, this function sets the number of columns used -+for display to the value of @code{completion-display-width}, the value of -+the environment variable @env{COLUMNS}, or the screen width, in that order. - @end deftypefun - - The following are implemented as macros, defined in @code{chardefs.h}. -@@ -1392,6 +1443,13 @@ call @code{rl_resize_terminal()} or @cod - Readline to update its idea of the terminal size when a @code{SIGWINCH} - is received. - -+@deftypefun void rl_echo_signal_char (int sig) -+If an application wishes to install its own signal handlers, but still -+have readline display characters that generate signals, calling this -+function with @var{sig} set to @code{SIGINT}, @code{SIGQUIT}, or -+@code{SIGTSTP} will display the character generating that signal. -+@end deftypefun -+ - @deftypefun void rl_resize_terminal (void) - Update Readline's internal screen size by reading values from the kernel. - @end deftypefun -@@ -1659,15 +1717,49 @@ from the array must be freed. - - @deftypevar {rl_icppfunc_t *} rl_directory_completion_hook - This function, if defined, is allowed to modify the directory portion --of filenames Readline completes. It is called with the address of a --string (the current directory name) as an argument, and may modify that string. -+of filenames Readline completes. -+It could be used to expand symbolic links or shell variables in pathnames. -+It is called with the address of a string (the current directory name) as an -+argument, and may modify that string. - If the string is replaced with a new string, the old value should be freed. - Any modified directory name should have a trailing slash. --The modified value will be displayed as part of the completion, replacing -+The modified value will be used as part of the completion, replacing - the directory portion of the pathname the user typed. --It returns an integer that should be non-zero if the function modifies --its directory argument. --It could be used to expand symbolic links or shell variables in pathnames. -+At the least, even if no other expansion is performed, this function should -+remove any quote characters from the directory name, because its result will -+be passed directly to @code{opendir()}. -+The directory completion hook returns an integer that should be non-zero if -+the function modifies its directory argument. -+The function should not modify the directory argument if it returns 0. -+@end deftypevar -+ -+@ignore -+@deftypevar extern rl_icppfunc_t *rl_directory_rewrite_hook; -+If non-zero, this is the address of a function to call when completing -+a directory name. This function takes the address of the directory name -+to be modified as an argument. Unlike @code{rl_directory_completion_hook}, -+it only modifies the directory name used in @code{opendir}, not what is -+displayed when the possible completions are printed or inserted. It is -+called before rl_directory_completion_hook. -+ -+I'm not happy with how this works yet, so it's undocumented. -+@end deftypevar -+@end ignore -+ -+@deftypevar {rl_dequote_func_t *} rl_filename_rewrite_hook -+If non-zero, this is the address of a function called when reading -+directory entries from the filesystem for completion and comparing -+them to the partial word to be completed. The function should -+perform any necesary application or system-specific conversion on -+the filename, such as converting between character sets or converting -+from a filesystem format to a character input format. -+The function takes two arguments: @var{fname}, the filename to be converted, -+and @var{fnlen}, its length in bytes. -+It must either return its first argument (if no conversion takes place) -+or the converted filename in newly-allocated memory. The converted -+form is used to compare against the word to be completed, and, if it -+matches, is added to the list of matches. Readline will free the -+allocated string. - @end deftypevar - - @deftypevar {rl_compdisp_func_t *} rl_completion_display_matches_hook -@@ -1822,6 +1914,15 @@ if the application's completion function - It should be set only by an application's completion function. - @end deftypevar - -+@deftypevar int rl_sort_completion_matches -+If an application sets this variable to 0, Readline will not sort the -+list of completions (which implies that it cannot remove any duplicate -+completions). The default value is 1, which means that Readline will -+sort the completions and, depending on the value of -+@code{rl_ignore_completion_duplicates}, will attempt to remove duplicate -+matches. -+@end deftypevar -+ - @deftypevar int rl_completion_type - Set to a character describing the type of completion Readline is currently - attempting; see the description of @code{rl_complete_internal()} -@@ -1831,6 +1932,13 @@ completion function is called, allowing - the same interface as @code{rl_complete()}. - @end deftypevar - -+@deftypevar int rl_completion_invoking_key -+Set to the final character in the key sequence that invoked one of the -+completion functions that call @code{rl_complete_internal()}. This is -+set to the appropriate value before any application-specific completion -+function is called. -+@end deftypevar -+ - @deftypevar int rl_inhibit_completion - If this variable is non-zero, completion is inhibited. The completion - character will be inserted as any other bound to @code{self-insert}. -@@ -1851,27 +1959,51 @@ history list. - GNU Readline library. This application interactively allows users - to manipulate files and their modes. */ - --#include -+#ifdef HAVE_CONFIG_H -+# include -+#endif -+ - #include --#include -+#ifdef HAVE_SYS_FILE_H -+# include -+#endif - #include --#include -+ -+#ifdef HAVE_UNISTD_H -+# include -+#endif -+ -+#include -+#include -+#include -+ -+#if defined (HAVE_STRING_H) -+# include -+#else /* !HAVE_STRING_H */ -+# include -+#endif /* !HAVE_STRING_H */ -+ -+#ifdef HAVE_STDLIB_H -+# include -+#endif -+ -+#include - - #include - #include - --extern char *xmalloc (); -+extern char *xmalloc PARAMS((size_t)); - - /* The names of functions that actually do the manipulation. */ --int com_list __P((char *)); --int com_view __P((char *)); --int com_rename __P((char *)); --int com_stat __P((char *)); --int com_pwd __P((char *)); --int com_delete __P((char *)); --int com_help __P((char *)); --int com_cd __P((char *)); --int com_quit __P((char *)); -+int com_list PARAMS((char *)); -+int com_view PARAMS((char *)); -+int com_rename PARAMS((char *)); -+int com_stat PARAMS((char *)); -+int com_pwd PARAMS((char *)); -+int com_delete PARAMS((char *)); -+int com_help PARAMS((char *)); -+int com_cd PARAMS((char *)); -+int com_quit PARAMS((char *)); - - /* A structure which contains information on the commands this program - can understand. */ -@@ -1904,12 +2036,12 @@ COMMAND *find_command (); - /* The name of this program, as taken from argv[0]. */ - char *progname; - --/* When non-zero, this means the user is done using this program. */ -+/* When non-zero, this global means the user is done using this program. */ - int done; - - char * - dupstr (s) -- int s; -+ char *s; - @{ - char *r; - -@@ -2034,12 +2166,12 @@ stripwhite (string) - /* */ - /* **************************************************************** */ - --char *command_generator __P((const char *, int)); --char **fileman_completion __P((const char *, int, int)); -+char *command_generator PARAMS((const char *, int)); -+char **fileman_completion PARAMS((const char *, int, int)); - --/* Tell the GNU Readline library how to complete. We want to try to -- complete on command names if this is the first word in the line, or -- on filenames if not. */ -+/* Tell the GNU Readline library how to complete. We want to try to complete -+ on command names if this is the first word in the line, or on filenames -+ if not. */ - initialize_readline () - @{ - /* Allow conditional parsing of the ~/.inputrc file. */ -@@ -2049,11 +2181,11 @@ initialize_readline () - rl_attempted_completion_function = fileman_completion; - @} - --/* Attempt to complete on the contents of TEXT. START and END -- bound the region of rl_line_buffer that contains the word to -- complete. TEXT is the word to complete. We can use the entire -- contents of rl_line_buffer in case we want to do some simple -- parsing. Returnthe array of matches, or NULL if there aren't any. */ -+/* Attempt to complete on the contents of TEXT. START and END bound the -+ region of rl_line_buffer that contains the word to complete. TEXT is -+ the word to complete. We can use the entire contents of rl_line_buffer -+ in case we want to do some simple parsing. Return the array of matches, -+ or NULL if there aren't any. */ - char ** - fileman_completion (text, start, end) - const char *text; -@@ -2072,9 +2204,9 @@ fileman_completion (text, start, end) - return (matches); - @} - --/* Generator function for command completion. STATE lets us -- know whether to start from scratch; without any state -- (i.e. STATE == 0), then we start at the top of the list. */ -+/* Generator function for command completion. STATE lets us know whether -+ to start from scratch; without any state (i.e. STATE == 0), then we -+ start at the top of the list. */ - char * - command_generator (text, state) - const char *text; -@@ -2083,17 +2215,16 @@ command_generator (text, state) - static int list_index, len; - char *name; - -- /* If this is a new word to complete, initialize now. This -- includes saving the length of TEXT for efficiency, and -- initializing the index variable to 0. */ -+ /* If this is a new word to complete, initialize now. This includes -+ saving the length of TEXT for efficiency, and initializing the index -+ variable to 0. */ - if (!state) - @{ - list_index = 0; - len = strlen (text); - @} - -- /* Return the next name which partially matches from the -- command list. */ -+ /* Return the next name which partially matches from the command list. */ - while (name = commands[list_index].name) - @{ - list_index++; -@@ -2133,7 +2264,12 @@ com_view (arg) - if (!valid_argument ("view", arg)) - return 1; - -+#if defined (__MSDOS__) -+ /* more.com doesn't grok slashes in pathnames */ -+ sprintf (syscom, "less %s", arg); -+#else - sprintf (syscom, "more %s", arg); -+#endif - return (system (syscom)); - @} - -@@ -2160,7 +2296,8 @@ com_stat (arg) - - printf ("Statistics for `%s':\n", arg); - -- printf ("%s has %d link%s, and is %d byte%s in length.\n", arg, -+ printf ("%s has %d link%s, and is %d byte%s in length.\n", -+ arg, - finfo.st_nlink, - (finfo.st_nlink == 1) ? "" : "s", - finfo.st_size, -@@ -2249,8 +2386,7 @@ com_pwd (ignore) - return 0; - @} - --/* The user wishes to quit using this program. Just set DONE -- non-zero. */ -+/* The user wishes to quit using this program. Just set DONE non-zero. */ - com_quit (arg) - char *arg; - @{ -@@ -2263,13 +2399,12 @@ too_dangerous (caller) - char *caller; - @{ - fprintf (stderr, -- "%s: Too dangerous for me to distribute.\n", -+ "%s: Too dangerous for me to distribute. Write it yourself.\n", - caller); -- fprintf (stderr, "Write it yourself.\n"); - @} - --/* Return non-zero if ARG is a valid argument for CALLER, -- else print an error message and return zero. */ -+/* Return non-zero if ARG is a valid argument for CALLER, else print -+ an error message and return zero. */ - int - valid_argument (caller, arg) - char *caller, *arg; -Index: gdb-7.2.90.20110703/readline/doc/rluser.texi -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/doc/rluser.texi 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/doc/rluser.texi 2011-07-03 10:41:21.000000000 +0200 -@@ -1,7 +1,6 @@ - @comment %**start of header (This is for running Texinfo on a region.) - @setfilename rluser.info - @comment %**end of header (This is for running Texinfo on a region.) --@setchapternewpage odd - - @ignore - This file documents the end user interface to the GNU command line -@@ -10,7 +9,7 @@ use these features. There is a document - which contains both end-user and programmer documentation for the - GNU Readline Library. - --Copyright (C) 1988-2005 Free Software Foundation, Inc. -+Copyright (C) 1988--2011 Free Software Foundation, Inc. - - Authored by Brian Fox and Chet Ramey. - -@@ -48,6 +47,16 @@ command line editing interface. - @ifset BashFeatures - Command line editing is provided by the Readline library, which is - used by several different programs, including Bash. -+Command line editing is enabled by default when using an interactive shell, -+unless the @option{--noediting} option is supplied at shell invocation. -+Line editing is also used when using the @option{-e} option to the -+@code{read} builtin command (@pxref{Bash Builtins}). -+By default, the line editing commands are similar to those of Emacs. -+A vi-style line editing interface is also available. -+Line editing can be enabled at any time using the @option{-o emacs} or -+@option{-o vi} options to the @code{set} builtin command -+(@pxref{The Set Builtin}), or disabled using the @option{+o emacs} or -+@option{+o vi} options to @code{set}. - @end ifset - - @menu -@@ -336,7 +345,9 @@ file is taken from the value of the shel - @ifclear BashFeatures - file is taken from the value of the environment variable @env{INPUTRC}. If - @end ifclear --that variable is unset, the default is @file{~/.inputrc}. -+that variable is unset, the default is @file{~/.inputrc}. If that -+file does not exist or cannot be read, the ultimate default is -+@file{/etc/inputrc}. - - When a program which uses the Readline library starts up, the - init file is read, and the key bindings are set. -@@ -420,11 +431,34 @@ The string to insert at the beginning of - @code{insert-comment} command is executed. The default value - is @code{"#"}. - -+@item completion-display-width -+@vindex completion-display-width -+The number of screen columns used to display possible matches -+when performing completion. -+The value is ignored if it is less than 0 or greater than the terminal -+screen width. -+A value of 0 will cause matches to be displayed one per line. -+The default value is -1. -+ - @item completion-ignore-case -+@vindex completion-ignore-case - If set to @samp{on}, Readline performs filename matching and completion - in a case-insensitive fashion. - The default value is @samp{off}. - -+@item completion-map-case -+@vindex completion-map-case -+If set to @samp{on}, and @var{completion-ignore-case} is enabled, Readline -+treats hyphens (@samp{-}) and underscores (@samp{_}) as equivalent when -+performing case-insensitive filename matching and completion. -+ -+@item completion-prefix-display-length -+@vindex completion-prefix-display-length -+The length in characters of the common prefix of a list of possible -+completions that is displayed without modification. When set to a -+value greater than zero, common prefixes longer than this value are -+replaced with an ellipsis when displaying possible completions. -+ - @item completion-query-items - @vindex completion-query-items - The number of possible completions that determines when the user is -@@ -456,12 +490,23 @@ key bindings is used. By default, Readl - mode, where the keystrokes are most similar to Emacs. This variable can be - set to either @samp{emacs} or @samp{vi}. - -+@item echo-control-characters -+When set to @samp{on}, on operating systems that indicate they support it, -+readline echoes a character corresponding to a signal generated from the -+keyboard. The default is @samp{on}. -+ - @item enable-keypad - @vindex enable-keypad - When set to @samp{on}, Readline will try to enable the application - keypad when it is called. Some systems need this to enable the - arrow keys. The default is @samp{off}. - -+@item enable-meta-key -+When set to @samp{on}, Readline will try to enable any meta modifier -+key the terminal claims to support when it is called. On many terminals, -+the meta key is used to send eight-bit characters. -+The default is @samp{on}. -+ - @item expand-tilde - @vindex expand-tilde - If set to @samp{on}, tilde expansion is performed when Readline -@@ -469,10 +514,16 @@ attempts word completion. The default i - - @item history-preserve-point - @vindex history-preserve-point --If set to @samp{on}, the history code attempts to place point at the -+If set to @samp{on}, the history code attempts to place the point (the -+current cursor position) at the - same location on each history line retrieved with @code{previous-history} - or @code{next-history}. The default is @samp{off}. - -+@item history-size -+@vindex history-size -+Set the maximum number of history entries saved in the history list. If -+set to zero, the number of entries in the history list is not limited. -+ - @item horizontal-scroll-mode - @vindex horizontal-scroll-mode - This variable can be set to either @samp{on} or @samp{off}. Setting it -@@ -535,10 +586,17 @@ The default is @samp{off}. - @vindex match-hidden-files - This variable, when set to @samp{on}, causes Readline to match files whose - names begin with a @samp{.} (hidden files) when performing filename --completion, unless the leading @samp{.} is -+completion. -+If set to @samp{off}, the leading @samp{.} must be - supplied by the user in the filename to be completed. - This variable is @samp{on} by default. - -+@item menu-complete-display-prefix -+@vindex menu-complete-display-prefix -+If set to @samp{on}, menu completion displays the common prefix of the -+list of possible completions (which may be empty) before cycling through -+the list. The default is @samp{off}. -+ - @item output-meta - @vindex output-meta - If set to @samp{on}, Readline will display characters with the -@@ -556,6 +614,13 @@ If set to @samp{on}, Readline will displ - sorted horizontally in alphabetical order, rather than down the screen. - The default is @samp{off}. - -+@item revert-all-at-newline -+@vindex revert-all-at-newline -+If set to @samp{on}, Readline will undo all changes to history lines -+before returning when @code{accept-line} is executed. By default, -+history lines may be modified and retain individual undo lists across -+calls to @code{readline}. The default is @samp{off}. -+ - @item show-all-if-ambiguous - @vindex show-all-if-ambiguous - This alters the default behavior of the completion functions. If -@@ -575,6 +640,20 @@ a common prefix) cause the matches to be - of ringing the bell. - The default value is @samp{off}. - -+@item skip-completed-text -+@vindex skip-completed-text -+If set to @samp{on}, this alters the default completion behavior when -+inserting a single match into the line. It's only active when -+performing completion in the middle of a word. If enabled, readline -+does not insert characters from the completion that match characters -+after point in the word being completed, so portions of the word -+following the cursor are not duplicated. -+For instance, if this is enabled, attempting completion when the cursor -+is after the @samp{e} in @samp{Makefile} will result in @samp{Makefile} -+rather than @samp{Makefilefile}, assuming there is a single possible -+completion. -+The default value is @samp{off}. -+ - @item visible-stats - @vindex visible-stats - If set to @samp{on}, a character denoting a file's type -@@ -593,9 +672,11 @@ the command does. - Once you know the name of the command, simply place on a line - in the init file the name of the key - you wish to bind the command to, a colon, and then the name of the --command. The name of the key --can be expressed in different ways, depending on what you find most --comfortable. -+command. -+There can be no space between the key name and the colon -- that will be -+interpreted as part of the key name. -+The name of the key can be expressed in different ways, depending on -+what you find most comfortable. - - In addition to command names, readline allows keys to be bound - to a string that is inserted when the key is pressed (a @var{macro}). -@@ -937,12 +1018,22 @@ Move forward a character. - Move back a character. - - @item forward-word (M-f) --Move forward to the end of the next word. Words are composed of --letters and digits. -+Move forward to the end of the next word. -+Words are composed of letters and digits. - - @item backward-word (M-b) --Move back to the start of the current or previous word. Words are --composed of letters and digits. -+Move back to the start of the current or previous word. -+Words are composed of letters and digits. -+ -+@ifset BashFeatures -+@item shell-forward-word () -+Move forward to the end of the next word. -+Words are delimited by non-quoted shell metacharacters. -+ -+@item shell-backward-word () -+Move back to the start of the current or previous word. -+Words are delimited by non-quoted shell metacharacters. -+@end ifset - - @item clear-screen (C-l) - Clear the screen and redraw the current line, -@@ -1029,10 +1120,14 @@ as if the @samp{!@var{n}} history expans - - @item yank-last-arg (M-. or M-_) - Insert last argument to the previous command (the last word of the --previous history entry). With an --argument, behave exactly like @code{yank-nth-arg}. -+previous history entry). -+With a numeric argument, behave exactly like @code{yank-nth-arg}. - Successive calls to @code{yank-last-arg} move back through the history --list, inserting the last argument of each line in turn. -+list, inserting the last word (or the word specified by the argument to -+the first call) of each line in turn. -+Any numeric argument supplied to these successive calls determines -+the direction to move through the history. A negative argument switches -+the direction through the history (back or forward). - The history expansion facilities are used to extract the last argument, - as if the @samp{!$} history expansion had been specified. - -@@ -1138,6 +1233,17 @@ Word boundaries are the same as @code{fo - Kill the word behind point. - Word boundaries are the same as @code{backward-word}. - -+@ifset BashFeatures -+@item shell-kill-word () -+Kill from point to the end of the current word, or if between -+words, to the end of the next word. -+Word boundaries are the same as @code{shell-forward-word}. -+ -+@item shell-backward-kill-word () -+Kill the word behind point. -+Word boundaries are the same as @code{shell-backward-word}. -+@end ifset -+ - @item unix-word-rubout (C-w) - Kill the word behind point, using white space as a word boundary. - The killed text is saved on the kill-ring. -@@ -1219,6 +1325,9 @@ The default is filename completion. - - @item possible-completions (M-?) - List the possible completions of the text before point. -+When displaying completions, Readline sets the number of columns used -+for display to the value of @code{completion-display-width}, the value of -+the environment variable @env{COLUMNS}, or the screen width, in that order. - - @item insert-completions (M-*) - Insert all completions of the text before point that would have -@@ -1238,6 +1347,11 @@ through the list. - This command is intended to be bound to @key{TAB}, but is unbound - by default. - -+@item menu-complete-backward () -+Identical to @code{menu-complete}, but moves backward through the list -+of possible completions, as if @code{menu-complete} had been given a -+negative argument. -+ - @item delete-char-or-list () - Deletes the character under the cursor if not at the beginning or - end of the line (like @code{delete-char}). -@@ -1293,6 +1407,11 @@ Attempt completion on the text before po - the text against lines from the history list for possible - completion matches. - -+@item dabbrev-expand () -+Attempt menu completion on the text before point, comparing -+the text against lines from the history list for possible -+completion matches. -+ - @item complete-into-braces (M-@{) - Perform filename completion and insert the list of possible completions - enclosed within braces so the list is available to the shell -@@ -1372,6 +1491,15 @@ A character is read and point is moved t - of that character. A negative count searches for subsequent - occurrences. - -+@item skip-csi-sequence () -+Read enough characters to consume a multi-key sequence such as those -+defined for keys like Home and End. Such sequences begin with a -+Control Sequence Indicator (CSI), usually ESC-[. If this sequence is -+bound to "\e[", keys producing such sequences will have no effect -+unless explicitly bound to a readline command, instead of inserting -+stray characters into the editing buffer. This is unbound by default, -+but usually bound to ESC-[. -+ - @item insert-comment (M-#) - Without a numeric argument, the value of the @code{comment-begin} - variable is inserted at the beginning of the current line. -@@ -1481,7 +1609,7 @@ editing mode. - While the Readline library does not have a full set of @code{vi} - editing functions, it does contain enough to allow simple editing - of the line. The Readline @code{vi} mode behaves as specified in --the @sc{posix} 1003.2 standard. -+the @sc{posix} standard. - - @ifset BashFeatures - In order to switch interactively between @code{emacs} and @code{vi} -@@ -1515,10 +1643,15 @@ the programmable completion facilities a - First, the command name is identified. - If a compspec has been defined for that command, the - compspec is used to generate the list of possible completions for the word. -+If the command word is the empty string (completion attempted at the -+beginning of an empty line), any compspec defined with -+the @option{-E} option to @code{complete} is used. - If the command word is a full pathname, a compspec for the full - pathname is searched for first. - If no compspec is found for the full pathname, an attempt is made to - find a compspec for the portion following the final slash. -+If those searches do not result in a compspec, any compspec defined with -+the @option{-D} option to @code{complete} is used as the default. - - Once a compspec has been found, it is used to generate the list of - matching words. -@@ -1555,9 +1688,9 @@ completed, and the matching words become - - After these matches have been generated, any shell function or command - specified with the @option{-F} and @option{-C} options is invoked. --When the command or function is invoked, the @env{COMP_LINE} and --@env{COMP_POINT} variables are assigned values as described above --(@pxref{Bash Variables}). -+When the command or function is invoked, the @env{COMP_LINE}, -+@env{COMP_POINT}, @env{COMP_KEY}, and @env{COMP_TYPE} variables are -+assigned values as described above (@pxref{Bash Variables}). - If a shell function is being invoked, the @env{COMP_WORDS} and - @env{COMP_CWORD} variables are also set. - When the function or command is invoked, the first argument is the -@@ -1570,7 +1703,7 @@ the matches. - - Any function specified with @option{-F} is invoked first. - The function may use any of the shell facilities, including the --@code{compgen} builtin described below -+@code{compgen} and @code{compopt} builtins described below - (@pxref{Programmable Completion Builtins}), to generate the matches. - It must put the possible completions in the @env{COMPREPLY} array - variable. -@@ -1622,6 +1755,30 @@ to completed names which are symbolic li - the value of the @var{mark-directories} Readline variable, regardless - of the setting of the @var{mark-symlinked-directories} Readline variable. - -+There is some support for dynamically modifying completions. This is -+most useful when used in combination with a default completion specified -+with @option{-D}. It's possible for shell functions executed as completion -+handlers to indicate that completion should be retried by returning an -+exit status of 124. If a shell function returns 124, and changes -+the compspec associated with the command on which completion is being -+attempted (supplied as the first argument when the function is executed), -+programmable completion restarts from the beginning, with an -+attempt to find a new compspec for that command. This allows a set of -+completions to be built dynamically as completion is attempted, rather than -+being loaded all at once. -+ -+For instance, assuming that there is a library of compspecs, each kept in a -+file corresponding to the name of the command, the following default -+completion function would load completions dynamically: -+ -+@example -+_completion_loader() -+@{ -+ . "/etc/bash_completion.d/$1.sh" >/dev/null 2>&1 && return 124 -+@} -+complete -D -F _completion_loader -+@end example -+ - @node Programmable Completion Builtins - @section Programmable Completion Builtins - @cindex completion builtins -@@ -1657,10 +1814,10 @@ matches were generated. - @item complete - @btindex complete - @example --@code{complete [-abcdefgjksuv] [-o @var{comp-option}] [-A @var{action}] [-G @var{globpat}] [-W @var{wordlist}] --[-P @var{prefix}] [-S @var{suffix}] [-X @var{filterpat}] [-F @var{function}] --[-C @var{command}] @var{name} [@var{name} @dots{}]} --@code{complete -pr [@var{name} @dots{}]} -+@code{complete [-abcdefgjksuv] [-o @var{comp-option}] [-DE] [-A @var{action}] [-G @var{globpat}] [-W @var{wordlist}] -+[-F @var{function}] [-C @var{command}] [-X @var{filterpat}] -+[-P @var{prefix}] [-S @var{suffix}] @var{name} [@var{name} @dots{}]} -+@code{complete -pr [-DE] [@var{name} @dots{}]} - @end example - - Specify how arguments to each @var{name} should be completed. -@@ -1670,9 +1827,16 @@ reused as input. - The @option{-r} option removes a completion specification for - each @var{name}, or, if no @var{name}s are supplied, all - completion specifications. -+The @option{-D} option indicates that the remaining options and actions should -+apply to the ``default'' command completion; that is, completion attempted -+on a command for which no completion has previously been defined. -+The @option{-E} option indicates that the remaining options and actions should -+apply to ``empty'' command completion; that is, completion attempted on a -+blank line. - - The process of applying these completion specifications when word completion --is attempted is described above (@pxref{Programmable Completion}). -+is attempted is described above (@pxref{Programmable Completion}). The -+@option{-D} option takes precedence over @option{-E}. - - Other options, if specified, have the following meanings. - The arguments to the @option{-G}, @option{-W}, and @option{-X} options -@@ -1702,9 +1866,10 @@ Perform directory name completion if the - - @item filenames - Tell Readline that the compspec generates filenames, so it can perform any --filename-specific processing (like adding a slash to directory names or --suppressing trailing spaces). This option is intended to be used with --shell functions specified with @option{-F}. -+filename-specific processing (like adding a slash to directory names -+quoting special characters, or suppressing trailing spaces). -+This option is intended to be used with shell functions specified -+with @option{-F}. - - @item nospace - Tell Readline not to append a space (the default) to words completed at -@@ -1798,17 +1963,6 @@ User names. May also be specified as @o - Names of all shell variables. May also be specified as @option{-v}. - @end table - --@item -G @var{globpat} --The filename expansion pattern @var{globpat} is expanded to generate --the possible completions. -- --@item -W @var{wordlist} --The @var{wordlist} is split using the characters in the --@env{IFS} special variable as delimiters, and each resultant word --is expanded. --The possible completions are the members of the resultant list which --match the word being completed. -- - @item -C @var{command} - @var{command} is executed in a subshell environment, and its output is - used as the possible completions. -@@ -1819,13 +1973,9 @@ environment. - When it finishes, the possible completions are retrieved from the value - of the @env{COMPREPLY} array variable. - --@item -X @var{filterpat} --@var{filterpat} is a pattern as used for filename expansion. --It is applied to the list of possible completions generated by the --preceding options and arguments, and each completion matching --@var{filterpat} is removed from the list. --A leading @samp{!} in @var{filterpat} negates the pattern; in this --case, any completion not matching @var{filterpat} is removed. -+@item -G @var{globpat} -+The filename expansion pattern @var{globpat} is expanded to generate -+the possible completions. - - @item -P @var{prefix} - @var{prefix} is added at the beginning of each possible completion -@@ -1834,6 +1984,21 @@ after all other options have been applie - @item -S @var{suffix} - @var{suffix} is appended to each possible completion - after all other options have been applied. -+ -+@item -W @var{wordlist} -+The @var{wordlist} is split using the characters in the -+@env{IFS} special variable as delimiters, and each resultant word -+is expanded. -+The possible completions are the members of the resultant list which -+match the word being completed. -+ -+@item -X @var{filterpat} -+@var{filterpat} is a pattern as used for filename expansion. -+It is applied to the list of possible completions generated by the -+preceding options and arguments, and each completion matching -+@var{filterpat} is removed from the list. -+A leading @samp{!} in @var{filterpat} negates the pattern; in this -+case, any completion not matching @var{filterpat} is removed. - @end table - - The return value is true unless an invalid option is supplied, an option -@@ -1842,5 +2007,31 @@ argument, an attempt is made to remove a - a @var{name} for which no specification exists, or - an error occurs adding a completion specification. - -+@item compopt -+@btindex compopt -+@example -+@code{compopt} [-o @var{option}] [-DE] [+o @var{option}] [@var{name}] -+@end example -+Modify completion options for each @var{name} according to the -+@var{option}s, or for the currently-executing completion if no @var{name}s -+are supplied. -+If no @var{option}s are given, display the completion options for each -+@var{name} or the current completion. -+The possible values of @var{option} are those valid for the @code{complete} -+builtin described above. -+The @option{-D} option indicates that the remaining options should -+apply to the ``default'' command completion; that is, completion attempted -+on a command for which no completion has previously been defined. -+The @option{-E} option indicates that the remaining options should -+apply to ``empty'' command completion; that is, completion attempted on a -+blank line. -+ -+The @option{-D} option takes precedence over @option{-E}. -+ -+The return value is true unless an invalid option is supplied, an attempt -+is made to modify the options for a @var{name} for which no completion -+specification exists, or an output error occurs. -+ - @end table -+ - @end ifset -Index: gdb-7.2.90.20110703/readline/doc/rluserman.texi -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/doc/rluserman.texi 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/doc/rluserman.texi 2011-07-03 10:41:21.000000000 +0200 -@@ -4,8 +4,6 @@ - @settitle GNU Readline Library - @comment %**end of header (This is for running Texinfo on a region.) - --@setchapternewpage odd -- - @include version.texi - - @copying -@@ -14,7 +12,7 @@ This manual describes the end user inter - consistency of user interface across discrete programs which provide - a command line interface. - --Copyright @copyright{} 1988-2005 Free Software Foundation, Inc. -+Copyright @copyright{} 1988--2011 Free Software Foundation, Inc. - - Permission is granted to make and distribute verbatim copies of - this manual provided the copyright notice and this permission notice -@@ -22,15 +20,16 @@ are preserved on all copies. - - @quotation - Permission is granted to copy, distribute and/or modify this document --under the terms of the GNU Free Documentation License, Version 1.1 or -+under the terms of the GNU Free Documentation License, Version 1.3 or - any later version published by the Free Software Foundation; with no --Invariant Sections, with the Front-Cover texts being ``A GNU Manual,'' -+Invariant Sections, with the Front-Cover texts being ``A GNU Manual'', - and with the Back-Cover Texts as in (a) below. A copy of the license is --included in the section entitled ``GNU Free Documentation License.'' -+included in the section entitled ``GNU Free Documentation License''. -+ -+(a) The FSF's Back-Cover Text is: You are free to copy and modify -+this GNU manual. Buying copies from GNU Press supports the FSF in -+developing GNU and promoting software freedom.'' - --(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify --this GNU Manual, like GNU software. Copies published by the Free --Software Foundation raise funds for GNU development.'' - @end quotation - @end copying - -@@ -70,18 +69,14 @@ programs which provide a command line in - - @menu - * Command Line Editing:: GNU Readline User's Manual. --* Copying This Manual:: Copying This Manual. -+* GNU Free Documentation License:: License for copying this manual. - @end menu - @end ifnottex - - @include rluser.texi - --@node Copying This Manual --@appendix Copying This Manual -- --@menu --* GNU Free Documentation License:: License for copying this manual. --@end menu -+@node GNU Free Documentation License -+@appendix GNU Free Documentation License - - @include fdl.texi - -Index: gdb-7.2.90.20110703/readline/doc/texi2dvi -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/doc/texi2dvi 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/doc/texi2dvi 2011-07-03 10:41:21.000000000 +0200 -@@ -5,20 +5,18 @@ - # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, - # 2002, 2003 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 2, or (at your option) --# any later version. -+# 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. -+# 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, you can either send email to this --# program's maintainer or write to: The Free Software Foundation, --# Inc.; 59 Temple Place, Suite 330; Boston, MA 02111-1307, USA. -+# You should have received a copy of the GNU General Public License -+# along with this program. If not, see . - # - # Original author: Noah Friedman . - # -Index: gdb-7.2.90.20110703/readline/doc/texi2html -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/doc/texi2html 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/doc/texi2html 2011-07-03 10:41:21.000000000 +0200 -@@ -7,20 +7,19 @@ - # - # Copyright (C) 1999, 2000 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 2 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, write to the Free Software --# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --# -+# 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 . -+# - #-############################################################################## - - # This requires perl version 5 or higher -@@ -3564,7 +3563,7 @@ INPUT_LINE: while ($_ = &next_line) { - $name = &normalise_node($name); - $level = $sec2level{$tag}; - # check for index -- $first_index_chapter = $name -+ $first_index_chapter = $node - if ($level == 1 && !$first_index_chapter && - $name =~ /index/i); - if ($in_top && /heading/){ -Index: gdb-7.2.90.20110703/readline/doc/version.texi -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/doc/version.texi 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/doc/version.texi 2011-07-03 10:41:21.000000000 +0200 -@@ -1,10 +1,10 @@ - @ignore --Copyright (C) 1988-2005 Free Software Foundation, Inc. -+Copyright (C) 1988-2011 Free Software Foundation, Inc. - @end ignore - --@set EDITION 5.1-beta1 --@set VERSION 5.1-beta1 --@set UPDATED 11 November 2005 --@set UPDATED-MONTH November 2005 -+@set EDITION 6.2 -+@set VERSION 6.2 -+@set UPDATED September 6 2010 -+@set UPDATED-MONTH September 2010 - --@set LASTCHANGE Fri Nov 11 19:50:51 EST 2005 -+@set LASTCHANGE Mon Sep 6 22:07:10 EDT 2010 -Index: gdb-7.2.90.20110703/readline/emacs_keymap.c -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/emacs_keymap.c 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/emacs_keymap.c 2011-07-03 10:41:21.000000000 +0200 -@@ -1,24 +1,23 @@ - /* emacs_keymap.c -- the keymap for emacs_mode in readline (). */ - --/* Copyright (C) 1987, 1989, 1992 Free Software Foundation, Inc. -+/* Copyright (C) 1987-2009 Free Software Foundation, Inc. - -- This file is part of the GNU Readline Library, a library for -- reading lines of text with interactive input and history editing. -+ This file is part of the GNU Readline Library (Readline), a library -+ for reading lines of text with interactive input and history editing. - -- The GNU Readline Library 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 2, or -+ Readline 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. - -- The GNU Readline Library 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 -+ Readline 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. - -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ You should have received a copy of the GNU General Public License -+ along with Readline. If not, see . -+*/ - - #if !defined (BUFSIZ) - #include -Index: gdb-7.2.90.20110703/readline/examples/ChangeLog.gdb -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/examples/ChangeLog.gdb 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/examples/ChangeLog.gdb 2011-07-03 10:41:21.000000000 +0200 -@@ -1,3 +1,7 @@ -+2011-04-25 Jan Kratochvil -+ -+ Imported readline 6.2, and upstream patch 001. -+ - 2006-04-24 Daniel Jacobowitz - - Imported readline 5.1, and upstream patches 001-004. -Index: gdb-7.2.90.20110703/readline/examples/Inputrc -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/examples/Inputrc 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/examples/Inputrc 2011-07-03 10:41:21.000000000 +0200 -@@ -4,21 +4,21 @@ - # on which program is running, or what terminal is active. - # - --# Copyright (C) 1989-2002 Free Software Foundation, Inc. -+# Copyright (C) 1989-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 2, or (at your option) --# any later version. -+# 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. -+# 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 . - # --# You should have received a copy of the GNU General Public License --# along with this program; if not, write to the Free Software --# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - # In all programs, all terminals, make sure this is bound. - "\C-x\C-r": re-read-init-file -Index: gdb-7.2.90.20110703/readline/examples/Makefile.in -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/examples/Makefile.in 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/examples/Makefile.in 2011-07-03 10:41:21.000000000 +0200 -@@ -1,30 +1,46 @@ - # - # This is the Makefile for the readline examples subdirectory. - # --# Copyright (C) 1994 Free Software Foundation, Inc. -+# Copyright (C) 1994,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 . - --# 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 2, 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, write to the Free Software --# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - RL_LIBRARY_VERSION = @LIBVERSION@ - - SHELL = @MAKE_SHELL@ - RM = rm -f - -+prefix = @prefix@ -+exec_prefix = @exec_prefix@ -+ -+datarootdir = @datarootdir@ -+ -+bindir = @bindir@ - srcdir = @srcdir@ --VPATH = .:@srcdir@ -+datadir = @datadir@ -+VPATH = @srcdir@ - top_srcdir = @top_srcdir@ --BUILD_DIR = . -+#BUILD_DIR = . -+BUILD_DIR = @BUILD_DIR@ -+installdir = $(datadir)/readline -+ -+INSTALL = @INSTALL@ -+INSTALL_PROGRAM = @INSTALL_PROGRAM@ -+INSTALL_DATA = @INSTALL_DATA@ -+ -+EXEEXT = @EXEEXT@ -+OBJEXT = @OBJEXT@ - - # Support an alternate destination root directory for package building - DESTDIR = -@@ -51,31 +67,56 @@ TERMCAP_LIB = @TERMCAP_LIB@ - ${RM} $@ - $(CC) $(CCFLAGS) -c $< - --EXECUTABLES = fileman rltest rl rlcat rlversion histexamp --OBJECTS = fileman.o rltest.o rl.o rlcat.o rlversion.o histexamp.o -+SOURCES = excallback.c fileman.c histexamp.c manexamp.c rl-fgets.c rl.c \ -+ rlcat.c rlevent.c rlptytest.c rltest.c rlversion.c -+ -+EXECUTABLES = fileman$(EXEEXT) rltest$(EXEEXT) rl$(EXEEXT) rlcat$(EXEEXT) \ -+ rlevent$(EXEEXT) rlversion$(EXEEXT) histexamp$(EXEEXT) -+OBJECTS = fileman.o rltest.o rl.o rlevent.o rlcat.o rlversion.o histexamp.o - - all: $(EXECUTABLES) - everything: all - --rl: rl.o $(READLINE_LIB) -+check: rlversion$(EXEEXT) -+ @echo Readline version: `rlversion$(EXEEXT)` -+ -+installdirs: -+ -$(SHELL) $(top_srcdir)/support/mkdirs $(DESTDIR)$(installdir) -+ -+install: installdirs -+ @for f in $(SOURCES); do \ -+ $(RM) $(DESTDIR)$(installdir)/$$f ; \ -+ $(INSTALL_DATA) $(srcdir)/$$f $(DESTDIR)$(installdir) ; \ -+ done -+ -+uninstall: -+ @for f in $(SOURCES); do \ -+ $(RM) $(DESTDIR)$(installdir)/$$f ; \ -+ done -+ -rmdir $(DESTDIR)$(installdir) -+ -+rl$(EXEEXT): rl.o $(READLINE_LIB) - $(PURIFY) $(CC) $(LDFLAGS) -o $@ rl.o $(READLINE_LIB) $(TERMCAP_LIB) - --rlcat: rlcat.o $(READLINE_LIB) -+rlcat$(EXEEXT): rlcat.o $(READLINE_LIB) - $(PURIFY) $(CC) $(LDFLAGS) -o $@ rlcat.o $(READLINE_LIB) $(TERMCAP_LIB) - --fileman: fileman.o $(READLINE_LIB) -+rlevent$(EXEEXT): rlevent.o $(READLINE_LIB) -+ $(PURIFY) $(CC) $(LDFLAGS) -o $@ rlevent.o $(READLINE_LIB) $(TERMCAP_LIB) -+ -+fileman$(EXEEXT): fileman.o $(READLINE_LIB) - $(PURIFY) $(CC) $(LDFLAGS) -o $@ fileman.o $(READLINE_LIB) $(TERMCAP_LIB) - --rltest: rltest.o $(READLINE_LIB) -+rltest$(EXEEXT): rltest.o $(READLINE_LIB) - $(PURIFY) $(CC) $(LDFLAGS) -o $@ rltest.o $(READLINE_LIB) $(TERMCAP_LIB) - --rlptytest: rlptytest.o $(READLINE_LIB) -+rlptytest$(EXEEXT): rlptytest.o $(READLINE_LIB) - $(PURIFY) $(CC) $(LDFLAGS) -o $@ rlptytest.o $(READLINE_LIB) $(TERMCAP_LIB) - --rlversion: rlversion.o $(READLINE_LIB) -+rlversion$(EXEEXT): rlversion.o $(READLINE_LIB) - $(CC) $(LDFLAGS) -o $@ rlversion.o $(READLINE_LIB) $(TERMCAP_LIB) - --histexamp: histexamp.o $(HISTORY_LIB) -+histexamp$(EXEEXT): histexamp.o $(HISTORY_LIB) - $(PURIFY) $(CC) $(LDFLAGS) -o $@ histexamp.o -lhistory $(TERMCAP_LIB) - - clean mostlyclean: -Index: gdb-7.2.90.20110703/readline/examples/autoconf/BASH_CHECK_LIB_TERMCAP -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/readline/examples/autoconf/BASH_CHECK_LIB_TERMCAP 2011-07-03 10:41:21.000000000 +0200 -@@ -0,0 +1,40 @@ -+AC_DEFUN([BASH_CHECK_LIB_TERMCAP], -+[ -+if test "X$bash_cv_termcap_lib" = "X"; then -+_bash_needmsg=yes -+else -+AC_MSG_CHECKING(which library has the termcap functions) -+_bash_needmsg= -+fi -+AC_CACHE_VAL(bash_cv_termcap_lib, -+[AC_CHECK_FUNC(tgetent, bash_cv_termcap_lib=libc, -+ [AC_CHECK_LIB(termcap, tgetent, bash_cv_termcap_lib=libtermcap, -+ [AC_CHECK_LIB(tinfo, tgetent, bash_cv_termcap_lib=libtinfo, -+ [AC_CHECK_LIB(curses, tgetent, bash_cv_termcap_lib=libcurses, -+ [AC_CHECK_LIB(ncurses, tgetent, bash_cv_termcap_lib=libncurses, -+ bash_cv_termcap_lib=gnutermcap)])])])])]) -+if test "X$_bash_needmsg" = "Xyes"; then -+AC_MSG_CHECKING(which library has the termcap functions) -+fi -+AC_MSG_RESULT(using $bash_cv_termcap_lib) -+if test $bash_cv_termcap_lib = gnutermcap && test -z "$prefer_curses"; then -+LDFLAGS="$LDFLAGS -L./lib/termcap" -+TERMCAP_LIB="./lib/termcap/libtermcap.a" -+TERMCAP_DEP="./lib/termcap/libtermcap.a" -+elif test $bash_cv_termcap_lib = libtermcap && test -z "$prefer_curses"; then -+TERMCAP_LIB=-ltermcap -+TERMCAP_DEP= -+elif test $bash_cv_termcap_lib = libtinfo; then -+TERMCAP_LIB=-ltinfo -+TERMCAP_DEP= -+elif test $bash_cv_termcap_lib = libncurses; then -+TERMCAP_LIB=-lncurses -+TERMCAP_DEP= -+elif test $bash_cv_termcap_lib = libc; then -+TERMCAP_LIB= -+TERMCAP_DEP= -+else -+TERMCAP_LIB=-lcurses -+TERMCAP_DEP= -+fi -+]) -Index: gdb-7.2.90.20110703/readline/examples/autoconf/RL_LIB_READLINE_VERSION -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/readline/examples/autoconf/RL_LIB_READLINE_VERSION 2011-07-03 10:41:21.000000000 +0200 -@@ -0,0 +1,118 @@ -+dnl need: prefix exec_prefix libdir includedir CC TERMCAP_LIB -+dnl require: -+dnl AC_PROG_CC -+dnl BASH_CHECK_LIB_TERMCAP -+ -+AC_DEFUN([RL_LIB_READLINE_VERSION], -+[ -+AC_REQUIRE([BASH_CHECK_LIB_TERMCAP]) -+ -+AC_MSG_CHECKING([version of installed readline library]) -+ -+# What a pain in the ass this is. -+ -+# save cpp and ld options -+_save_CFLAGS="$CFLAGS" -+_save_LDFLAGS="$LDFLAGS" -+_save_LIBS="$LIBS" -+ -+# Don't set ac_cv_rl_prefix if the caller has already assigned a value. This -+# allows the caller to do something like $_rl_prefix=$withval if the user -+# specifies --with-installed-readline=PREFIX as an argument to configure -+ -+if test -z "$ac_cv_rl_prefix"; then -+test "x$prefix" = xNONE && ac_cv_rl_prefix=$ac_default_prefix || ac_cv_rl_prefix=${prefix} -+fi -+ -+eval ac_cv_rl_includedir=${ac_cv_rl_prefix}/include -+eval ac_cv_rl_libdir=${ac_cv_rl_prefix}/lib -+ -+LIBS="$LIBS -lreadline ${TERMCAP_LIB}" -+CFLAGS="$CFLAGS -I${ac_cv_rl_includedir}" -+LDFLAGS="$LDFLAGS -L${ac_cv_rl_libdir}" -+ -+AC_CACHE_VAL(ac_cv_rl_version, -+[AC_TRY_RUN([ -+#include -+#include -+ -+extern int rl_gnu_readline_p; -+ -+main() -+{ -+ FILE *fp; -+ fp = fopen("conftest.rlv", "w"); -+ if (fp == 0) -+ exit(1); -+ if (rl_gnu_readline_p != 1) -+ fprintf(fp, "0.0\n"); -+ else -+ fprintf(fp, "%s\n", rl_library_version ? rl_library_version : "0.0"); -+ fclose(fp); -+ exit(0); -+} -+], -+ac_cv_rl_version=`cat conftest.rlv`, -+ac_cv_rl_version='0.0', -+ac_cv_rl_version='4.2')]) -+ -+CFLAGS="$_save_CFLAGS" -+LDFLAGS="$_save_LDFLAGS" -+LIBS="$_save_LIBS" -+ -+RL_MAJOR=0 -+RL_MINOR=0 -+ -+# ( -+case "$ac_cv_rl_version" in -+2*|3*|4*|5*|6*|7*|8*|9*) -+ RL_MAJOR=`echo $ac_cv_rl_version | sed 's:\..*$::'` -+ RL_MINOR=`echo $ac_cv_rl_version | sed -e 's:^.*\.::' -e 's:[[a-zA-Z]]*$::'` -+ ;; -+esac -+ -+# ((( -+case $RL_MAJOR in -+[[0-9][0-9]]) _RL_MAJOR=$RL_MAJOR ;; -+[[0-9]]) _RL_MAJOR=0$RL_MAJOR ;; -+*) _RL_MAJOR=00 ;; -+esac -+ -+# ((( -+case $RL_MINOR in -+[[0-9][0-9]]) _RL_MINOR=$RL_MINOR ;; -+[[0-9]]) _RL_MINOR=0$RL_MINOR ;; -+*) _RL_MINOR=00 ;; -+esac -+ -+RL_VERSION="0x${_RL_MAJOR}${_RL_MINOR}" -+ -+# Readline versions greater than 4.2 have these defines in readline.h -+ -+if test $ac_cv_rl_version = '0.0' ; then -+ AC_MSG_WARN([Could not test version of installed readline library.]) -+elif test $RL_MAJOR -gt 4 || { test $RL_MAJOR = 4 && test $RL_MINOR -gt 2 ; } ; then -+ # set these for use by the caller -+ RL_PREFIX=$ac_cv_rl_prefix -+ RL_LIBDIR=$ac_cv_rl_libdir -+ RL_INCLUDEDIR=$ac_cv_rl_includedir -+ AC_MSG_RESULT($ac_cv_rl_version) -+else -+ -+AC_DEFINE_UNQUOTED(RL_READLINE_VERSION, $RL_VERSION, [encoded version of the installed readline library]) -+AC_DEFINE_UNQUOTED(RL_VERSION_MAJOR, $RL_MAJOR, [major version of installed readline library]) -+AC_DEFINE_UNQUOTED(RL_VERSION_MINOR, $RL_MINOR, [minor version of installed readline library]) -+ -+AC_SUBST(RL_VERSION) -+AC_SUBST(RL_MAJOR) -+AC_SUBST(RL_MINOR) -+ -+# set these for use by the caller -+RL_PREFIX=$ac_cv_rl_prefix -+RL_LIBDIR=$ac_cv_rl_libdir -+RL_INCLUDEDIR=$ac_cv_rl_includedir -+ -+AC_MSG_RESULT($ac_cv_rl_version) -+ -+fi -+]) -Index: gdb-7.2.90.20110703/readline/examples/autoconf/wi_LIB_READLINE -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/readline/examples/autoconf/wi_LIB_READLINE 2011-07-03 10:41:21.000000000 +0200 -@@ -0,0 +1,76 @@ -+dnl Borut Razem -+dnl -+dnl This macro checks for the presence of the readline library. -+dnl It works also in cross-compilation environment. -+dnl -+dnl To get it into the aclocal.m4 dnl file, do this: -+dnl aclocal -I . --verbose -+dnl -+dnl The --verbose will show all of the files that are searched -+dnl for .m4 macros. -+ -+AC_DEFUN([wi_LIB_READLINE], [ -+ dnl check for the readline.h header file -+ -+ AC_CHECK_HEADER(readline/readline.h) -+ -+ if test "$ac_cv_header_readline_readline_h" = yes; then -+ dnl check the readline version -+ -+ cat > conftest.$ac_ext < -+#include -+wi_LIB_READLINE_VERSION RL_VERSION_MAJOR RL_VERSION_MINOR -+EOF -+ -+ wi_READLINE_VERSION=$($CPP $CPPFLAGS conftest.$ac_ext | sed -n -e "s/^wi_LIB_READLINE_VERSION *\([[0-9\]][[0-9\]]*\) *\([[0-9\]][[0-9\]]*\)$/\1.\2/p") -+ rm -rf conftest* -+ -+ if test -n "$wi_READLINE_VERSION"; then -+ wi_MAJOR=$(expr $wi_READLINE_VERSION : '\([[0-9]][[0-9]]*\)\.') -+ wi_MINOR=$(expr $wi_READLINE_VERSION : '[[0-9]][[0-9]]*\.\([[0-9]][[0-9]]*$\)') -+ if test $wi_MINOR -lt 10; then -+ wi_MINOR=$(expr $wi_MINOR \* 10) -+ fi -+ wi_READLINE_VERSION=$(expr $wi_MAJOR \* 100 + $wi_MINOR) -+ else -+ wi_READLINE_VERSION=-1 -+ fi -+ -+ dnl check for the readline library -+ -+ ac_save_LIBS="$LIBS" -+ # Note: $LIBCURSES is permitted to be empty. -+ -+ for LIBREADLINE in "-lreadline.dll" "-lreadline" "-lreadline $LIBCURSES" "-lreadline -ltermcap" "-lreadline -lncurses" "-lreadline -lcurses" -+ do -+ AC_MSG_CHECKING([for GNU Readline library $LIBREADLINE]) -+ -+ LIBS="$ac_save_LIBS $LIBREADLINE" -+ -+ AC_TRY_LINK([ -+ /* includes */ -+ #include -+ #include -+ ],[ -+ /* function-body */ -+ int dummy = rl_completion_append_character; /* rl_completion_append_character appeared in version 2.1 */ -+ readline(NULL); -+ ],[ -+ wi_cv_lib_readline=yes -+ AC_MSG_RESULT(yes) -+ ],[ -+ wi_cv_lib_readline=no -+ AC_MSG_RESULT(no) -+ ]) -+ -+ if test "$wi_cv_lib_readline" = yes; then -+ AC_SUBST(LIBREADLINE) -+ AC_DEFINE_UNQUOTED(HAVE_LIBREADLINE, $wi_READLINE_VERSION, [Readline]) -+ break -+ fi -+ done -+ -+ LIBS="$ac_save_LIBS" -+ fi -+]) -Index: gdb-7.2.90.20110703/readline/examples/excallback.c -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/examples/excallback.c 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/examples/excallback.c 2011-07-03 10:41:21.000000000 +0200 -@@ -32,6 +32,9 @@ Let me know what you think. - - Jeff - */ -+/* -+Copyright (C) 1999 Jeff Solomon -+*/ - - #if defined (HAVE_CONFIG_H) - #include -Index: gdb-7.2.90.20110703/readline/examples/fileman.c -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/examples/fileman.c 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/examples/fileman.c 2011-07-03 10:41:21.000000000 +0200 -@@ -1,22 +1,23 @@ --/* Copyright (C) 1987-2002 Free Software Foundation, Inc. -+/* fileman.c - file manager example for readline library. */ - -- This file is part of the GNU Readline Library, a library for -+/* Copyright (C) 1987-2009 Free Software Foundation, Inc. -+ -+ This file is part of the GNU Readline Library (Readline), a library for - reading lines of text with interactive input and history editing. - -- The GNU Readline Library 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 2, or -+ Readline 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. - -- The GNU Readline Library 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 -+ Readline 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. - -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ You should have received a copy of the GNU General Public License -+ along with Readline. If not, see . -+*/ - - /* fileman.c -- A tiny application which demonstrates how to use the - GNU Readline library. This application interactively allows users -@@ -50,6 +51,8 @@ - # include - #endif - -+#include -+ - #ifdef READLINE_LIBRARY - # include "readline.h" - # include "history.h" -@@ -58,7 +61,7 @@ - # include - #endif - --extern char *xmalloc (); -+extern char *xmalloc PARAMS((size_t)); - - /* The names of functions that actually do the manipulation. */ - int com_list PARAMS((char *)); -Index: gdb-7.2.90.20110703/readline/examples/histexamp.c -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/examples/histexamp.c 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/examples/histexamp.c 2011-07-03 10:41:21.000000000 +0200 -@@ -1,22 +1,23 @@ --/* Copyright (C) 1987-2002 Free Software Foundation, Inc. -+/* histexamp.c - history library example program. */ - -- This file is part of the GNU Readline Library, a library for -+/* Copyright (C) 1987-2009 Free Software Foundation, Inc. -+ -+ This file is part of the GNU Readline Library (Readline), a library for - reading lines of text with interactive input and history editing. - -- The GNU Readline Library 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 2, or -+ Readline 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. - -- The GNU Readline Library 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 -+ Readline 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. - -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ You should have received a copy of the GNU General Public License -+ along with Readline. If not, see . -+*/ - - #include - -Index: gdb-7.2.90.20110703/readline/examples/manexamp.c -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/examples/manexamp.c 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/examples/manexamp.c 2011-07-03 10:41:21.000000000 +0200 -@@ -1,24 +1,23 @@ - /* manexamp.c -- The examples which appear in the documentation are here. */ - --/* Copyright (C) 1987-2002 Free Software Foundation, Inc. -+/* Copyright (C) 1987-2009 Free Software Foundation, Inc. - -- This file is part of the GNU Readline Library, a library for -+ This file is part of the GNU Readline Library (Readline), a library for - reading lines of text with interactive input and history editing. - -- The GNU Readline Library 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 2, or -+ Readline 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. - -- The GNU Readline Library 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 -+ Readline 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. - -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ You should have received a copy of the GNU General Public License -+ along with Readline. If not, see . -+*/ - - #include - #include -Index: gdb-7.2.90.20110703/readline/examples/readlinebuf.h -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/examples/readlinebuf.h 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/examples/readlinebuf.h 2011-07-03 10:41:21.000000000 +0200 -@@ -8,7 +8,7 @@ - * - * 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 2 of the License, or -+ * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, -Index: gdb-7.2.90.20110703/readline/examples/rl.c -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/examples/rl.c 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/examples/rl.c 2011-07-03 10:41:21.000000000 +0200 -@@ -5,25 +5,24 @@ - * usage: rl [-p prompt] [-u unit] [-d default] [-n nchars] - */ - --/* Copyright (C) 1987-2002 Free Software Foundation, Inc. -+/* Copyright (C) 1987-2009 Free Software Foundation, Inc. - -- This file is part of the GNU Readline Library, a library for -+ This file is part of the GNU Readline Library (Readline), a library for - reading lines of text with interactive input and history editing. - -- The GNU Readline Library 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 2, or -+ Readline 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. - -- The GNU Readline Library 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 -+ Readline 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. - -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ You should have received a copy of the GNU General Public License -+ along with Readline. If not, see . -+*/ - - #if defined (HAVE_CONFIG_H) - # include -Index: gdb-7.2.90.20110703/readline/examples/rlcat.c -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/examples/rlcat.c 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/examples/rlcat.c 2011-07-03 10:41:21.000000000 +0200 -@@ -4,25 +4,24 @@ - * usage: rlcat - */ - --/* Copyright (C) 1987-2002 Free Software Foundation, Inc. -+/* Copyright (C) 1987-2009 Free Software Foundation, Inc. - -- This file is part of the GNU Readline Library, a library for -+ This file is part of the GNU Readline Library (Readline), a library for - reading lines of text with interactive input and history editing. - -- The GNU Readline Library 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 2, or -+ Readline 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. - -- The GNU Readline Library 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 -+ Readline 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. - -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ You should have received a copy of the GNU General Public License -+ along with Readline. If not, see . -+*/ - - #if defined (HAVE_CONFIG_H) - # include -Index: gdb-7.2.90.20110703/readline/examples/rlevent.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/readline/examples/rlevent.c 2011-07-03 10:41:21.000000000 +0200 -@@ -0,0 +1,166 @@ -+/* -+ * rl - command-line interface to read a line from the standard input -+ * (or another fd) using readline. -+ * -+ * usage: rl [-p prompt] [-u unit] [-d default] [-n nchars] -+ */ -+ -+/* Copyright (C) 1987-2009 Free Software Foundation, Inc. -+ -+ This file is part of the GNU Readline Library (Readline), a library for -+ reading lines of text with interactive input and history editing. -+ -+ Readline 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. -+ -+ Readline 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 Readline. If not, see . -+*/ -+ -+#if defined (HAVE_CONFIG_H) -+# include -+#endif -+ -+#include -+#include -+ -+#ifdef HAVE_STDLIB_H -+# include -+#else -+extern void exit(); -+#endif -+ -+#if defined (READLINE_LIBRARY) -+# include "posixstat.h" -+# include "readline.h" -+# include "history.h" -+#else -+# include -+# include -+# include -+#endif -+ -+extern int optind; -+extern char *optarg; -+ -+#if !defined (strchr) && !defined (__STDC__) -+extern char *strrchr(); -+#endif -+ -+static char *progname; -+static char *deftext; -+ -+static int -+event_hook () -+{ -+ fprintf (stderr, "ding!\n"); -+ sleep (1); -+ return 0; -+} -+ -+static int -+set_deftext () -+{ -+ if (deftext) -+ { -+ rl_insert_text (deftext); -+ deftext = (char *)NULL; -+ rl_startup_hook = (rl_hook_func_t *)NULL; -+ } -+ return 0; -+} -+ -+static void -+usage() -+{ -+ fprintf (stderr, "%s: usage: %s [-p prompt] [-u unit] [-d default] [-n nchars]\n", -+ progname, progname); -+} -+ -+int -+main (argc, argv) -+ int argc; -+ char **argv; -+{ -+ char *temp, *prompt; -+ struct stat sb; -+ int opt, fd, nch; -+ FILE *ifp; -+ -+ progname = strrchr(argv[0], '/'); -+ if (progname == 0) -+ progname = argv[0]; -+ else -+ progname++; -+ -+ /* defaults */ -+ prompt = "readline$ "; -+ fd = nch = 0; -+ deftext = (char *)0; -+ -+ while ((opt = getopt(argc, argv, "p:u:d:n:")) != EOF) -+ { -+ switch (opt) -+ { -+ case 'p': -+ prompt = optarg; -+ break; -+ case 'u': -+ fd = atoi(optarg); -+ if (fd < 0) -+ { -+ fprintf (stderr, "%s: bad file descriptor `%s'\n", progname, optarg); -+ exit (2); -+ } -+ break; -+ case 'd': -+ deftext = optarg; -+ break; -+ case 'n': -+ nch = atoi(optarg); -+ if (nch < 0) -+ { -+ fprintf (stderr, "%s: bad value for -n: `%s'\n", progname, optarg); -+ exit (2); -+ } -+ break; -+ default: -+ usage (); -+ exit (2); -+ } -+ } -+ -+ if (fd != 0) -+ { -+ if (fstat (fd, &sb) < 0) -+ { -+ fprintf (stderr, "%s: %d: bad file descriptor\n", progname, fd); -+ exit (1); -+ } -+ ifp = fdopen (fd, "r"); -+ rl_instream = ifp; -+ } -+ -+ if (deftext && *deftext) -+ rl_startup_hook = set_deftext; -+ -+ if (nch > 0) -+ rl_num_chars_to_read = nch; -+ -+ rl_event_hook = event_hook; -+ temp = readline (prompt); -+ -+ /* Test for EOF. */ -+ if (temp == 0) -+ exit (1); -+ -+ printf ("%s\n", temp); -+ exit (0); -+} -Index: gdb-7.2.90.20110703/readline/examples/rlfe/ChangeLog -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/examples/rlfe/ChangeLog 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/examples/rlfe/ChangeLog 2011-07-03 10:41:21.000000000 +0200 -@@ -1,14 +1,3 @@ --2009-08-22 Ralf Wildenhues -- -- * configure: Regenerate. -- -- * configure.in: m4_include toplevel config/override.m4. -- * configure: Regenerate. -- --2009-07-30 Ralf Wildenhues -- -- * configure.in: Correctly quote AC_PROGRAM_SOURCE definition. -- - 2004-11-04 Per Bothner - - * pty.c: Import from screen-4.0.2. -Index: gdb-7.2.90.20110703/readline/examples/rlfe/Makefile.in -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/examples/rlfe/Makefile.in 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/examples/rlfe/Makefile.in 2011-07-03 10:41:21.000000000 +0200 -@@ -25,7 +25,7 @@ CFLAGS = @CFLAGS@ - CPPFLAGS = @CPPFLAGS@ - #LDFLAGS = -L$(READLINE_DIR) - LDFLAGS = @LDFLAGS@ --LIBS = -lreadline -lhistory -lncurses -+LIBS = -lreadline -lhistory @LIBS@ - - CPP=@CPP@ - CPP_DEPEND=$(CC) -MM -@@ -55,7 +55,7 @@ rlfe-$(VERSION).tar.gz: - tar czf $@ $(CFILES) $(HFILES) $(EXTRA_DIST) - - .c.o: -- $(CC) -c -I. -I$(srcdir) $(M_CFLAGS) $(DEFS) $(OPTIONS) $(CFLAGS) $< -+ $(CC) -c -I. -I$(srcdir) $(CPPFLAGS) $(M_CFLAGS) $(DEFS) $(OPTIONS) $(CFLAGS) $< - - install_bin: .version screen - -if [ -f $(DESTDIR)$(bindir)/$(SCREEN) ] && [ ! -f $(DESTDIR)$(bindir)/$(SCREEN).old ]; \ -@@ -68,7 +68,6 @@ install_bin: .version screen - (cd $(DESTDIR)$(bindir) && ln -sf $(SCREEN) screen) - cp $(srcdir)/utf8encodings/?? $(DESTDIR)$(SCREENENCODINGS) - -- - uninstall: .version - rm -f $(DESTDIR)$(bindir)/$(SCREEN) - rm -f $(DESTDIR)$(bindir)/screen -@@ -170,6 +169,15 @@ depend.in: $(CFILES) term.h - for i in $(CFILES); do echo $$i; $(CPP_DEPEND) $$i >> tmp_make; done - mv tmp_make Makefile.in - -+Makefile makefile: config.status $(srcdir)/Makefile.in -+ CONFIG_FILES=Makefile CONFIG_HEADERS= $(SHELL) ./config.status -+ -+config.status: $(srcdir)/configure -+ $(SHELL) ./config.status --recheck -+ -+$(srcdir)/configure: $(srcdir)/configure.in -+ cd $(srcdir) && autoconf -+ - ############################################################################### - - ### Dependencies: -Index: gdb-7.2.90.20110703/readline/examples/rlfe/config.h.in -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/examples/rlfe/config.h.in 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/examples/rlfe/config.h.in 2011-07-03 10:41:21.000000000 +0200 -@@ -373,3 +373,7 @@ - #undef PTYRANGE1 - - #define USEVARARGS -+ -+#undef HAVE_SYS_STROPTS_H -+ -+#undef HAVE_SYS_WAIT_H -Index: gdb-7.2.90.20110703/readline/examples/rlfe/configure -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/examples/rlfe/configure 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/examples/rlfe/configure 2011-07-03 10:41:21.000000000 +0200 -@@ -552,6 +552,42 @@ PACKAGE_BUGREPORT= - PACKAGE_URL= - - ac_unique_file="rlfe.c" -+# Factoring default headers for most tests. -+ac_includes_default="\ -+#include -+#ifdef HAVE_SYS_TYPES_H -+# include -+#endif -+#ifdef HAVE_SYS_STAT_H -+# include -+#endif -+#ifdef STDC_HEADERS -+# include -+# include -+#else -+# ifdef HAVE_STDLIB_H -+# include -+# endif -+#endif -+#ifdef HAVE_STRING_H -+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -+# include -+# endif -+# include -+#endif -+#ifdef HAVE_STRINGS_H -+# include -+#endif -+#ifdef HAVE_INTTYPES_H -+# include -+#endif -+#ifdef HAVE_STDINT_H -+# include -+#endif -+#ifdef HAVE_UNISTD_H -+# include -+#endif" -+ - ac_subst_vars='LTLIBOBJS - LIBOBJS - XTERMPATH -@@ -1550,6 +1586,124 @@ $as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - - } # ac_fn_c_check_func -+ -+# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES -+# ------------------------------------------------------- -+# Tests whether HEADER exists, giving a warning if it cannot be compiled using -+# the include files in INCLUDES and setting the cache variable VAR -+# accordingly. -+ac_fn_c_check_header_mongrel () -+{ -+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack -+ if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : -+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -+$as_echo_n "checking for $2... " >&6; } -+if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : -+ $as_echo_n "(cached) " >&6 -+fi -+eval ac_res=\$$3 -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -+$as_echo "$ac_res" >&6; } -+else -+ # Is the header compilable? -+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -+$as_echo_n "checking $2 usability... " >&6; } -+cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+/* end confdefs.h. */ -+$4 -+#include <$2> -+_ACEOF -+if ac_fn_c_try_compile "$LINENO"; then : -+ ac_header_compiler=yes -+else -+ ac_header_compiler=no -+fi -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -+$as_echo "$ac_header_compiler" >&6; } -+ -+# Is the header present? -+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -+$as_echo_n "checking $2 presence... " >&6; } -+cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+/* end confdefs.h. */ -+#include <$2> -+_ACEOF -+if ac_fn_c_try_cpp "$LINENO"; then : -+ ac_header_preproc=yes -+else -+ ac_header_preproc=no -+fi -+rm -f conftest.err conftest.$ac_ext -+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -+$as_echo "$ac_header_preproc" >&6; } -+ -+# So? What about this header? -+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( -+ yes:no: ) -+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -+$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} -+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} -+ ;; -+ no:yes:* ) -+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -+$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} -+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -+$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} -+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -+$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} -+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -+$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} -+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} -+ ;; -+esac -+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -+$as_echo_n "checking for $2... " >&6; } -+if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : -+ $as_echo_n "(cached) " >&6 -+else -+ eval "$3=\$ac_header_compiler" -+fi -+eval ac_res=\$$3 -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -+$as_echo "$ac_res" >&6; } -+fi -+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} -+ -+} # ac_fn_c_check_header_mongrel -+ -+# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES -+# ------------------------------------------------------- -+# Tests whether HEADER exists and can be compiled using the include files in -+# INCLUDES, setting the cache variable VAR accordingly. -+ac_fn_c_check_header_compile () -+{ -+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack -+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -+$as_echo_n "checking for $2... " >&6; } -+if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : -+ $as_echo_n "(cached) " >&6 -+else -+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+/* end confdefs.h. */ -+$4 -+#include <$2> -+_ACEOF -+if ac_fn_c_try_compile "$LINENO"; then : -+ eval "$3=yes" -+else -+ eval "$3=no" -+fi -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+fi -+eval ac_res=\$$3 -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -+$as_echo "$ac_res" >&6; } -+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} -+ -+} # ac_fn_c_check_header_compile - cat >config.log <<_ACEOF - This file contains any messages produced by compilers while - running configure, to aid debugging if configure makes a mistake. -@@ -4003,6 +4157,151 @@ fi - - fi - -+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -+$as_echo_n "checking for ANSI C header files... " >&6; } -+if test "${ac_cv_header_stdc+set}" = set; then : -+ $as_echo_n "(cached) " >&6 -+else -+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+/* end confdefs.h. */ -+#include -+#include -+#include -+#include -+ -+int -+main () -+{ -+ -+ ; -+ return 0; -+} -+_ACEOF -+if ac_fn_c_try_compile "$LINENO"; then : -+ ac_cv_header_stdc=yes -+else -+ ac_cv_header_stdc=no -+fi -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+ -+if test $ac_cv_header_stdc = yes; then -+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI. -+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+/* end confdefs.h. */ -+#include -+ -+_ACEOF -+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | -+ $EGREP "memchr" >/dev/null 2>&1; then : -+ -+else -+ ac_cv_header_stdc=no -+fi -+rm -f conftest* -+ -+fi -+ -+if test $ac_cv_header_stdc = yes; then -+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. -+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+/* end confdefs.h. */ -+#include -+ -+_ACEOF -+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | -+ $EGREP "free" >/dev/null 2>&1; then : -+ -+else -+ ac_cv_header_stdc=no -+fi -+rm -f conftest* -+ -+fi -+ -+if test $ac_cv_header_stdc = yes; then -+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. -+ if test "$cross_compiling" = yes; then : -+ : -+else -+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+/* end confdefs.h. */ -+#include -+#include -+#if ((' ' & 0x0FF) == 0x020) -+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -+#else -+# define ISLOWER(c) \ -+ (('a' <= (c) && (c) <= 'i') \ -+ || ('j' <= (c) && (c) <= 'r') \ -+ || ('s' <= (c) && (c) <= 'z')) -+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -+#endif -+ -+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -+int -+main () -+{ -+ int i; -+ for (i = 0; i < 256; i++) -+ if (XOR (islower (i), ISLOWER (i)) -+ || toupper (i) != TOUPPER (i)) -+ return 2; -+ return 0; -+} -+_ACEOF -+if ac_fn_c_try_run "$LINENO"; then : -+ -+else -+ ac_cv_header_stdc=no -+fi -+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ -+ conftest.$ac_objext conftest.beam conftest.$ac_ext -+fi -+ -+fi -+fi -+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -+$as_echo "$ac_cv_header_stdc" >&6; } -+if test $ac_cv_header_stdc = yes; then -+ -+$as_echo "#define STDC_HEADERS 1" >>confdefs.h -+ -+fi -+ -+# On IRIX 5.3, sys/types and inttypes.h are conflicting. -+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ -+ inttypes.h stdint.h unistd.h -+do : -+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -+" -+eval as_val=\$$as_ac_Header -+ if test "x$as_val" = x""yes; then : -+ cat >>confdefs.h <<_ACEOF -+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -+_ACEOF -+ -+fi -+ -+done -+ -+ -+for ac_header in sys/stropts.h sys/wait.h -+do : -+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -+eval as_val=\$$as_ac_Header -+ if test "x$as_val" = x""yes; then : -+ cat >>confdefs.h <<_ACEOF -+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -+_ACEOF -+ -+fi -+ -+done -+ -+ - ac_config_files="$ac_config_files Makefile" - - cat >confcache <<\_ACEOF -Index: gdb-7.2.90.20110703/readline/examples/rlfe/configure.in -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/examples/rlfe/configure.in 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/examples/rlfe/configure.in 2011-07-03 10:41:21.000000000 +0200 -@@ -437,4 +437,6 @@ main() - - fi - -+AC_CHECK_HEADERS(sys/stropts.h sys/wait.h) -+ - AC_OUTPUT(Makefile) -Index: gdb-7.2.90.20110703/readline/examples/rlfe/extern.h -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/examples/rlfe/extern.h 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/examples/rlfe/extern.h 2011-07-03 10:41:21.000000000 +0200 -@@ -27,7 +27,14 @@ - #define __attribute__(x) - #endif - -+#if !defined (__P) -+# if defined (__STDC__) || defined (__GNUC__) || defined (__cplusplus) -+# define __P(protos) protos -+# else -+# define __P(protos) () -+# endif -+#endif -+ - /* pty.c */ - extern int OpenPTY __P((char **)); - extern void InitPTY __P((int)); -- -Index: gdb-7.2.90.20110703/readline/examples/rlfe/os.h -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/examples/rlfe/os.h 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/examples/rlfe/os.h 2011-07-03 10:41:21.000000000 +0200 -@@ -186,7 +186,7 @@ extern int errno; - * terminal handling - */ - --#ifdef POSIX -+#if defined (POSIX) || defined (__FreeBSD__) - # include - # ifdef hpux - # include -@@ -527,4 +527,3 @@ typedef struct fd_set { int fds_bits[1]; - * how many characters your pty's can buffer. - */ - #define IOSIZE 4096 -- -Index: gdb-7.2.90.20110703/readline/examples/rlfe/pty.c -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/examples/rlfe/pty.c 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/examples/rlfe/pty.c 2011-07-03 10:41:21.000000000 +0200 -@@ -20,13 +20,15 @@ - * - **************************************************************** - */ -+#include "config.h" - - #include - #include - #include - #include - --#include "config.h" -+#include -+ - #include "screen.h" - - #ifndef sun -@@ -34,7 +36,7 @@ - #endif - - /* for solaris 2.1, Unixware (SVR4.2) and possibly others */ --#ifdef HAVE_SVR4_PTYS -+#if defined (HAVE_SVR4_PTYS) && defined (HAVE_SYS_STROPTS_H) - # include - #endif - -@@ -384,4 +386,3 @@ char **ttyn; - return -1; - } - #endif -- -Index: gdb-7.2.90.20110703/readline/examples/rlfe/rlfe.c -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/examples/rlfe/rlfe.c 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/examples/rlfe/rlfe.c 2011-07-03 10:41:21.000000000 +0200 -@@ -73,6 +73,11 @@ - #include - - #include "config.h" -+#include "extern.h" -+ -+#if defined (HAVE_SYS_WAIT_H) -+# include -+#endif - - #ifdef READLINE_LIBRARY - # include "readline.h" -@@ -588,7 +593,7 @@ main(int argc, char** argv) - } - if (FD_ISSET (in_from_tty_fd, &in_set)) - { -- extern int readline_echoing_p; -+ extern int _rl_echoing_p; - struct termios term_master; - int do_canon = 1; - int do_icrnl = 1; -@@ -605,9 +610,9 @@ main(int argc, char** argv) - { - do_canon = (term_master.c_lflag & ICANON) != 0; - do_icrnl = (term_master.c_lflag & ICRNL) != 0; -- readline_echoing_p = (term_master.c_lflag & ECHO) != 0; -+ _rl_echoing_p = (term_master.c_lflag & ECHO) != 0; - DPRINT1 ("echo,canon,crnl:%03d\n", -- 100 * readline_echoing_p -+ 100 * _rl_echoing_p - + 10 * do_canon - + 1 * do_icrnl); - } -@@ -757,7 +762,7 @@ static void set_edit_mode () - vi = 1; - break; - } -- shellopts = index (shellopts + 1, ':'); -+ shellopts = strchr (shellopts + 1, ':'); - } - - if (!vi) -Index: gdb-7.2.90.20110703/readline/examples/rltest.c -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/examples/rltest.c 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/examples/rltest.c 2011-07-03 10:41:21.000000000 +0200 -@@ -4,25 +4,24 @@ - /* */ - /* **************************************************************** */ - --/* Copyright (C) 1987-2002 Free Software Foundation, Inc. -+/* Copyright (C) 1987-2009 Free Software Foundation, Inc. - -- This file is part of the GNU Readline Library, a library for -+ This file is part of the GNU Readline Library (Readline), a library for - reading lines of text with interactive input and history editing. - -- The GNU Readline Library 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 2, or -+ Readline 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. - -- The GNU Readline Library 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 -+ Readline 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. - -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ You should have received a copy of the GNU General Public License -+ along with Readline. If not, see . -+*/ - - #if defined (HAVE_CONFIG_H) - #include -Index: gdb-7.2.90.20110703/readline/examples/rlversion.c -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/examples/rlversion.c 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/examples/rlversion.c 2011-07-03 10:41:21.000000000 +0200 -@@ -2,25 +2,24 @@ - * rlversion -- print out readline's version number - */ - --/* Copyright (C) 1987-2002 Free Software Foundation, Inc. -+/* Copyright (C) 1987-2009 Free Software Foundation, Inc. - -- This file is part of the GNU Readline Library, a library for -+ This file is part of the GNU Readline Library (Readline), a library for - reading lines of text with interactive input and history editing. - -- The GNU Readline Library 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 2, or -+ Readline 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. - -- The GNU Readline Library 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 -+ Readline 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. - -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ You should have received a copy of the GNU General Public License -+ along with Readline. If not, see . -+*/ - - #if defined (HAVE_CONFIG_H) - # include -Index: gdb-7.2.90.20110703/readline/funmap.c -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/funmap.c 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/funmap.c 2011-07-03 10:41:21.000000000 +0200 -@@ -1,24 +1,24 @@ - /* funmap.c -- attach names to functions. */ - --/* Copyright (C) 1987, 1989, 1992 Free Software Foundation, Inc. -+/* Copyright (C) 1987-2010 Free Software Foundation, Inc. - -- This file is part of the GNU Readline Library, a library for -- reading lines of text with interactive input and history editing. -+ This file is part of the GNU Readline Library (Readline), a library -+ for reading lines of text with interactive input and history editing. - -- The GNU Readline Library 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 2, or -+ Readline 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. - -- The GNU Readline Library 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 -+ Readline 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. - -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ You should have received a copy of the GNU General Public License -+ along with Readline. If not, see . -+*/ -+ - #define READLINE_LIBRARY - - #if defined (HAVE_CONFIG_H) -@@ -56,7 +56,7 @@ static int funmap_entry; - program specific function. */ - int funmap_program_specific_entry_start; - --static FUNMAP default_funmap[] = { -+static const FUNMAP default_funmap[] = { - { "abort", rl_abort }, - { "accept-line", rl_newline }, - { "arrow-key-prefix", rl_arrow_keys }, -@@ -105,11 +105,13 @@ static FUNMAP default_funmap[] = { - { "kill-region", rl_kill_region }, - { "kill-word", rl_kill_word }, - { "menu-complete", rl_menu_complete }, -+ { "menu-complete-backward", rl_backward_menu_complete }, - { "next-history", rl_get_next_history }, - { "non-incremental-forward-search-history", rl_noninc_forward_search }, - { "non-incremental-reverse-search-history", rl_noninc_reverse_search }, - { "non-incremental-forward-search-history-again", rl_noninc_forward_search_again }, - { "non-incremental-reverse-search-history-again", rl_noninc_reverse_search_again }, -+ { "old-menu-complete", rl_old_menu_complete }, - { "overwrite-mode", rl_overwrite_mode }, - #ifdef __CYGWIN__ - { "paste-from-clipboard", rl_paste_from_clipboard }, -@@ -123,6 +125,7 @@ static FUNMAP default_funmap[] = { - { "revert-line", rl_revert_line }, - { "self-insert", rl_insert }, - { "set-mark", rl_set_mark }, -+ { "skip-csi-sequence", rl_skip_csi_sequence }, - { "start-kbd-macro", rl_start_kbd_macro }, - { "tab-insert", rl_tab_insert }, - { "tilde-expand", rl_tilde_expand }, -@@ -145,6 +148,8 @@ static FUNMAP default_funmap[] = { - { "vi-append-mode", rl_vi_append_mode }, - { "vi-arg-digit", rl_vi_arg_digit }, - { "vi-back-to-indent", rl_vi_back_to_indent }, -+ { "vi-backward-bigword", rl_vi_bWord }, -+ { "vi-backward-word", rl_vi_bword }, - { "vi-bWord", rl_vi_bWord }, - { "vi-bword", rl_vi_bword }, - { "vi-change-case", rl_vi_change_case }, -@@ -157,12 +162,15 @@ static FUNMAP default_funmap[] = { - { "vi-delete-to", rl_vi_delete_to }, - { "vi-eWord", rl_vi_eWord }, - { "vi-editing-mode", rl_vi_editing_mode }, -+ { "vi-end-bigword", rl_vi_eWord }, - { "vi-end-word", rl_vi_end_word }, - { "vi-eof-maybe", rl_vi_eof_maybe }, - { "vi-eword", rl_vi_eword }, - { "vi-fWord", rl_vi_fWord }, - { "vi-fetch-history", rl_vi_fetch_history }, - { "vi-first-print", rl_vi_first_print }, -+ { "vi-forward-bigword", rl_vi_fWord }, -+ { "vi-forward-word", rl_vi_fword }, - { "vi-fword", rl_vi_fword }, - { "vi-goto-mark", rl_vi_goto_mark }, - { "vi-insert-beg", rl_vi_insert_beg }, -Index: gdb-7.2.90.20110703/readline/histexpand.c -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/histexpand.c 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/histexpand.c 2011-07-03 10:41:21.000000000 +0200 -@@ -1,24 +1,23 @@ - /* histexpand.c -- history expansion. */ - --/* Copyright (C) 1989-2004 Free Software Foundation, Inc. -+/* Copyright (C) 1989-2010 Free Software Foundation, Inc. - -- This file contains the GNU History Library (the Library), a set of -+ This file contains the GNU History Library (History), a set of - routines for managing the text of previously typed lines. - -- The Library is free software; you can redistribute it and/or modify -+ History 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 2, or (at your option) -- any later version. -+ the Free Software Foundation, either version 3 of the License, or -+ (at your option) any later version. - -- The Library 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. -- -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ History 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 History. If not, see . -+*/ - - #define READLINE_LIBRARY - -@@ -56,8 +55,6 @@ - - typedef int _hist_search_func_t PARAMS((const char *, int)); - --extern int rl_byte_oriented; /* declared in mbutil.c */ -- - static char error_pointer; - - static char *subst_lhs; -@@ -66,9 +63,11 @@ static int subst_lhs_len; - static int subst_rhs_len; - - static char *get_history_word_specifier PARAMS((char *, char *, int *)); --static char *history_find_word PARAMS((char *, int)); - static int history_tokenize_word PARAMS((const char *, int)); -+static char **history_tokenize_internal PARAMS((const char *, int, int *)); - static char *history_substring PARAMS((const char *, int, int)); -+static void freewords PARAMS((char **, int)); -+static char *history_find_word PARAMS((char *, int)); - - static char *quote_breaks PARAMS((char *)); - -@@ -246,7 +245,7 @@ get_history_event (string, caller_index, - - #define FAIL_SEARCH() \ - do { \ -- history_offset = history_length; free (temp) ; return (char *)NULL; \ -+ history_offset = history_length; xfree (temp) ; return (char *)NULL; \ - } while (0) - - /* If there is no search string, try to use the previous search string, -@@ -255,7 +254,7 @@ get_history_event (string, caller_index, - { - if (search_string) - { -- free (temp); -+ xfree (temp); - temp = savestring (search_string); - } - else -@@ -286,7 +285,7 @@ get_history_event (string, caller_index, - search_match = history_find_word (entry->line, local_index); - } - else -- free (temp); -+ xfree (temp); - - return (entry->line); - } -@@ -306,16 +305,20 @@ get_history_event (string, caller_index, - /* Extract the contents of STRING as if it is enclosed in single quotes. - SINDEX, when passed in, is the offset of the character immediately - following the opening single quote; on exit, SINDEX is left pointing -- to the closing single quote. */ -+ to the closing single quote. FLAGS currently used to allow backslash -+ to escape a single quote (e.g., for bash $'...'). */ - static void --hist_string_extract_single_quoted (string, sindex) -+hist_string_extract_single_quoted (string, sindex, flags) - char *string; -- int *sindex; -+ int *sindex, flags; - { - register int i; - - for (i = *sindex; string[i] && string[i] != '\''; i++) -- ; -+ { -+ if ((flags & 1) && string[i] == '\\' && string[i+1]) -+ i++; -+ } - - *sindex = i; - } -@@ -505,7 +508,7 @@ postproc_subst_rhs () - } - } - new[j] = '\0'; -- free (subst_rhs); -+ xfree (subst_rhs); - subst_rhs = new; - subst_rhs_len = j; - } -@@ -564,12 +567,12 @@ history_expand_internal (string, start, - #if defined (HANDLE_MULTIBYTE) - if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) - { -- int c, l; -+ int ch, l; - l = _rl_find_prev_mbchar (string, i, MB_FIND_ANY); -- c = string[l]; -+ ch = string[l]; - /* XXX - original patch had i - 1 ??? If i == 0 it would fail. */ -- if (i && (c == '\'' || c == '"')) -- quoted_search_delimiter = c; -+ if (i && (ch == '\'' || ch == '"')) -+ quoted_search_delimiter = ch; - } - else - #endif /* HANDLE_MULTIBYTE */ -@@ -582,7 +585,7 @@ history_expand_internal (string, start, - if (event == 0) - { - *ret_string = hist_error (string, start, i, EVENT_NOT_FOUND); -- free (result); -+ xfree (result); - return (-1); - } - -@@ -596,7 +599,7 @@ history_expand_internal (string, start, - if (word_spec == (char *)&error_pointer) - { - *ret_string = hist_error (string, starting_index, i, BAD_WORD_SPEC); -- free (result); -+ xfree (result); - return (-1); - } - -@@ -629,8 +632,8 @@ history_expand_internal (string, start, - { - default: - *ret_string = hist_error (string, i+1, i+2, BAD_MODIFIER); -- free (result); -- free (temp); -+ xfree (result); -+ xfree (temp); - return -1; - - case 'q': -@@ -655,7 +658,7 @@ history_expand_internal (string, start, - { - tstr++; - t = savestring (tstr); -- free (temp); -+ xfree (temp); - temp = t; - } - break; -@@ -680,7 +683,7 @@ history_expand_internal (string, start, - if (tstr) - { - t = savestring (tstr); -- free (temp); -+ xfree (temp); - temp = t; - } - break; -@@ -756,8 +759,8 @@ history_expand_internal (string, start, - if (subst_lhs_len == 0) - { - *ret_string = hist_error (string, starting_index, i, NO_PREV_SUBST); -- free (result); -- free (temp); -+ xfree (result); -+ xfree (temp); - return -1; - } - -@@ -766,8 +769,8 @@ history_expand_internal (string, start, - if (subst_lhs_len > l_temp) - { - *ret_string = hist_error (string, starting_index, i, SUBST_FAILED); -- free (result); -- free (temp); -+ xfree (result); -+ xfree (temp); - return (-1); - } - -@@ -808,7 +811,7 @@ history_expand_internal (string, start, - temp + si + subst_lhs_len, - l_temp - (si + subst_lhs_len)); - new_event[len] = '\0'; -- free (temp); -+ xfree (temp); - temp = new_event; - - failed = 0; -@@ -844,8 +847,8 @@ history_expand_internal (string, start, - continue; /* don't want to increment i */ - - *ret_string = hist_error (string, starting_index, i, SUBST_FAILED); -- free (result); -- free (temp); -+ xfree (result); -+ xfree (temp); - return (-1); - } - } -@@ -866,7 +869,7 @@ history_expand_internal (string, start, - else - x = savestring (temp); - -- free (temp); -+ xfree (temp); - temp = x; - } - -@@ -874,7 +877,7 @@ history_expand_internal (string, start, - if (n >= result_len) - result = (char *)xrealloc (result, n + 2); - strcpy (result, temp); -- free (temp); -+ xfree (temp); - - *end_index_ptr = i; - *ret_string = result; -@@ -925,7 +928,7 @@ history_expand (hstring, output) - char **output; - { - register int j; -- int i, r, l, passc, cc, modified, eindex, only_printing, dquote; -+ int i, r, l, passc, cc, modified, eindex, only_printing, dquote, flag; - char *string; - - /* The output string, and its length. */ -@@ -1017,7 +1020,7 @@ history_expand (hstring, output) - } - else if (string[i] == history_expansion_char) - { -- if (!cc || member (cc, history_no_expand_chars)) -+ if (cc == 0 || member (cc, history_no_expand_chars)) - continue; - /* If the calling application has set - history_inhibit_expansion_function to a function that checks -@@ -1045,8 +1048,9 @@ history_expand (hstring, output) - else if (dquote == 0 && history_quotes_inhibit_expansion && string[i] == '\'') - { - /* If this is bash, single quotes inhibit history expansion. */ -+ flag = (i > 0 && string[i - 1] == '$'); - i++; -- hist_string_extract_single_quoted (string, &i); -+ hist_string_extract_single_quoted (string, &i, flag); - } - else if (history_quotes_inhibit_expansion && string[i] == '\\') - { -@@ -1060,7 +1064,7 @@ history_expand (hstring, output) - - if (string[i] != history_expansion_char) - { -- free (result); -+ xfree (result); - *output = savestring (string); - return (0); - } -@@ -1097,7 +1101,7 @@ history_expand (hstring, output) - if (strlen (mb) > 1) - { - ADD_STRING (mb); -- break; -+ continue; - } - } - #endif /* HANDLE_MULTIBYTE */ -@@ -1131,15 +1135,16 @@ history_expand (hstring, output) - { - int quote, slen; - -+ flag = (i > 0 && string[i - 1] == '$'); - quote = i++; -- hist_string_extract_single_quoted (string, &i); -+ hist_string_extract_single_quoted (string, &i, flag); - - slen = i - quote + 2; - temp = (char *)xmalloc (slen); - strncpy (temp, string + quote, slen); - temp[slen - 1] = '\0'; - ADD_STRING (temp); -- free (temp); -+ xfree (temp); - } - else - ADD_CHAR (string[i]); -@@ -1152,7 +1157,7 @@ history_expand (hstring, output) - temp = (char *)xmalloc (l - i + 1); - strcpy (temp, string + i); - ADD_STRING (temp); -- free (temp); -+ xfree (temp); - i = l; - } - else -@@ -1165,7 +1170,8 @@ history_expand (hstring, output) - /* If the history_expansion_char is followed by one of the - characters in history_no_expand_chars, then it is not a - candidate for expansion of any kind. */ -- if (member (cc, history_no_expand_chars)) -+ if (cc == 0 || member (cc, history_no_expand_chars) || -+ (history_inhibit_expansion_function && (*history_inhibit_expansion_function) (string, i))) - { - ADD_CHAR (string[i]); - break; -@@ -1184,7 +1190,7 @@ history_expand (hstring, output) - temp = (char *)xmalloc (1 + strlen (result)); - strcpy (temp, result); - ADD_STRING (temp); -- free (temp); -+ xfree (temp); - } - i++; - break; -@@ -1195,9 +1201,9 @@ history_expand (hstring, output) - if (r < 0) - { - *output = temp; -- free (result); -+ xfree (result); - if (string != hstring) -- free (string); -+ xfree (string); - return -1; - } - else -@@ -1207,7 +1213,7 @@ history_expand (hstring, output) - modified++; - if (*temp) - ADD_STRING (temp); -- free (temp); -+ xfree (temp); - } - only_printing = r == 1; - i = eindex; -@@ -1218,7 +1224,7 @@ history_expand (hstring, output) - - *output = result; - if (string != hstring) -- free (string); -+ xfree (string); - - if (only_printing) - { -@@ -1399,8 +1405,8 @@ history_arg_extract (first, last, string - } - - for (i = 0; i < len; i++) -- free (list[i]); -- free (list); -+ xfree (list[i]); -+ xfree (list); - - return (result); - } -@@ -1411,10 +1417,10 @@ history_tokenize_word (string, ind) - int ind; - { - register int i; -- int delimiter; -+ int delimiter, nestdelim, delimopen; - - i = ind; -- delimiter = 0; -+ delimiter = nestdelim = 0; - - if (member (string[i], "()\n")) - { -@@ -1430,20 +1436,34 @@ history_tokenize_word (string, ind) - { - if (peek == '<' && string[i + 2] == '-') - i++; -+ else if (peek == '<' && string[i + 2] == '<') -+ i++; - i += 2; - return i; - } -- else -+ else if ((peek == '&' && (string[i] == '>' || string[i] == '<')) || -+ (peek == '>' && string[i] == '&')) - { -- if ((peek == '&' && (string[i] == '>' || string[i] == '<')) || -- (peek == '>' && string[i] == '&') || -- (peek == '(' && (string[i] == '>' || string[i] == '<')) || /* ) */ -- (peek == '(' && string[i] == '$')) /* ) */ -- { -- i += 2; -- return i; -- } -+ i += 2; -+ return i; -+ } -+ /* XXX - separated out for later -- bash-4.2 */ -+ else if ((peek == '(' && (string[i] == '>' || string[i] == '<')) || /* ) */ -+ (peek == '(' && string[i] == '$')) /*)*/ -+ { -+ i += 2; -+ delimopen = '('; -+ delimiter = ')'; -+ nestdelim = 1; -+ goto get_word; - } -+#if 0 -+ else if (peek == '\'' && string[i] == '$') -+ { -+ i += 2; /* XXX */ -+ return i; -+ } -+#endif - - if (string[i] != '$') - { -@@ -1452,9 +1472,25 @@ history_tokenize_word (string, ind) - } - } - -+ /* same code also used for $(...)/<(...)/>(...) above */ -+ if (member (string[i], "!@?+*")) -+ { -+ int peek = string[i + 1]; -+ -+ if (peek == '(') /*)*/ -+ { -+ /* Shell extended globbing patterns */ -+ i += 2; -+ delimopen = '('; -+ delimiter = ')'; /* XXX - not perfect */ -+ nestdelim = 1; -+ } -+ } -+ -+get_word: - /* Get word from string + i; */ - -- if (member (string[i], HISTORY_QUOTE_CHARACTERS)) -+ if (delimiter == 0 && member (string[i], HISTORY_QUOTE_CHARACTERS)) - delimiter = string[i++]; - - for (; string[i]; i++) -@@ -1472,16 +1508,31 @@ history_tokenize_word (string, ind) - continue; - } - -+ /* delimiter must be set and set to something other than a quote if -+ nestdelim is set, so these tests are safe. */ -+ if (nestdelim && string[i] == delimopen) -+ { -+ nestdelim++; -+ continue; -+ } -+ if (nestdelim && string[i] == delimiter) -+ { -+ nestdelim--; -+ if (nestdelim == 0) -+ delimiter = 0; -+ continue; -+ } -+ - if (delimiter && string[i] == delimiter) - { - delimiter = 0; - continue; - } - -- if (!delimiter && (member (string[i], history_word_delimiters))) -+ if (delimiter == 0 && (member (string[i], history_word_delimiters))) - break; - -- if (!delimiter && member (string[i], HISTORY_QUOTE_CHARACTERS)) -+ if (delimiter == 0 && member (string[i], HISTORY_QUOTE_CHARACTERS)) - delimiter = string[i]; - } - -@@ -1569,6 +1620,18 @@ history_tokenize (string) - return (history_tokenize_internal (string, -1, (int *)NULL)); - } - -+/* Free members of WORDS from START to an empty string */ -+static void -+freewords (words, start) -+ char **words; -+ int start; -+{ -+ register int i; -+ -+ for (i = start; words[i]; i++) -+ xfree (words[i]); -+} -+ - /* Find and return the word which contains the character at index IND - in the history line LINE. Used to save the word matched by the - last history !?string? search. */ -@@ -1582,12 +1645,16 @@ history_find_word (line, ind) - - words = history_tokenize_internal (line, ind, &wind); - if (wind == -1 || words == 0) -- return ((char *)NULL); -+ { -+ if (words) -+ freewords (words, 0); -+ FREE (words); -+ return ((char *)NULL); -+ } - s = words[wind]; - for (i = 0; i < wind; i++) -- free (words[i]); -- for (i = wind + 1; words[i]; i++) -- free (words[i]); -- free (words); -+ xfree (words[i]); -+ freewords (words, wind + 1); -+ xfree (words); - return s; - } -Index: gdb-7.2.90.20110703/readline/histfile.c -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/histfile.c 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/histfile.c 2011-07-03 10:41:21.000000000 +0200 -@@ -1,24 +1,23 @@ - /* histfile.c - functions to manipulate the history file. */ - --/* Copyright (C) 1989-2003 Free Software Foundation, Inc. -+/* Copyright (C) 1989-2010 Free Software Foundation, Inc. - -- This file contains the GNU History Library (the Library), a set of -+ This file contains the GNU History Library (History), a set of - routines for managing the text of previously typed lines. - -- The Library is free software; you can redistribute it and/or modify -+ History 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 2, or (at your option) -- any later version. -+ the Free Software Foundation, either version 3 of the License, or -+ (at your option) any later version. - -- The Library 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. -- -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ History 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 History. If not, see . -+*/ - - /* The goal is to make the implementation transparent, so that you - don't have to know what data types are used, just what functions -@@ -53,7 +52,9 @@ - # include - #endif - --#if defined (__EMX__) || defined (__CYGWIN__) -+#include -+ -+#if defined (__EMX__) - # undef HAVE_MMAP - #endif - -@@ -103,7 +104,7 @@ int history_write_timestamps = 0; - - /* Does S look like the beginning of a history timestamp entry? Placeholder - for more extensive tests. */ --#define HIST_TIMESTAMP_START(s) (*(s) == history_comment_char) -+#define HIST_TIMESTAMP_START(s) (*(s) == history_comment_char && isdigit ((s)[1]) ) - - /* Return the string that should be used in the place of this - filename. This only matters when you don't specify the -@@ -125,8 +126,12 @@ history_filename (filename) - - if (home == 0) - { -+#if 0 - home = "."; - home_len = 1; -+#else -+ return (NULL); -+#endif - } - else - home_len = strlen (home); -@@ -178,7 +183,7 @@ read_history_range (filename, from, to) - - buffer = last_ts = (char *)NULL; - input = history_filename (filename); -- file = open (input, O_RDONLY|O_BINARY, 0666); -+ file = input ? open (input, O_RDONLY|O_BINARY, 0666) : -1; - - if ((file < 0) || (fstat (file, &finfo) == -1)) - goto error_and_exit; -@@ -256,8 +261,9 @@ read_history_range (filename, from, to) - for (line_end = line_start; line_end < bufend; line_end++) - if (*line_end == '\n') - { -- if (line_end - 1 >= line_start && *(line_end - 1) == '\r') -- *(line_end - 1) = '\0'; -+ /* Change to allow Windows-like \r\n end of line delimiter. */ -+ if (line_end > line_start && line_end[-1] == '\r') -+ line_end[-1] = '\0'; - else - *line_end = '\0'; - -@@ -312,7 +318,7 @@ history_truncate_file (fname, lines) - - buffer = (char *)NULL; - filename = history_filename (fname); -- file = open (filename, O_RDONLY|O_BINARY, 0666); -+ file = filename ? open (filename, O_RDONLY|O_BINARY, 0666) : -1; - rv = 0; - - /* Don't try to truncate non-regular files. */ -@@ -411,7 +417,7 @@ history_truncate_file (fname, lines) - - FREE (buffer); - -- free (filename); -+ xfree (filename); - return rv; - } - -@@ -434,9 +440,10 @@ history_do_write (filename, nelements, o - mode = overwrite ? O_WRONLY|O_CREAT|O_TRUNC|O_BINARY : O_WRONLY|O_APPEND|O_BINARY; - #endif - output = history_filename (filename); -+ file = output ? open (output, mode, 0600) : -1; - rv = 0; - -- if ((file = open (output, mode, 0600)) == -1) -+ if (file == -1) - { - FREE (output); - return (errno); -@@ -513,7 +520,7 @@ mmap_error: - #else - if (write (file, buffer, buffer_size) < 0) - rv = errno; -- free (buffer); -+ xfree (buffer); - #endif - } - -Index: gdb-7.2.90.20110703/readline/histlib.h -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/histlib.h 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/histlib.h 2011-07-03 10:41:21.000000000 +0200 -@@ -1,23 +1,23 @@ - /* histlib.h -- internal definitions for the history library. */ --/* Copyright (C) 1989, 1992 Free Software Foundation, Inc. - -- This file contains the GNU History Library (the Library), a set of -+/* Copyright (C) 1989-2009 Free Software Foundation, Inc. -+ -+ This file contains the GNU History Library (History), a set of - routines for managing the text of previously typed lines. - -- The Library is free software; you can redistribute it and/or modify -+ History 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 2, or (at your option) -- any later version. -+ the Free Software Foundation, either version 3 of the License, or -+ (at your option) any later version. - -- The Library 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. -- -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ History 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 History. If not, see . -+*/ - - #if !defined (_HISTLIB_H_) - #define _HISTLIB_H_ -Index: gdb-7.2.90.20110703/readline/history.c -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/history.c 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/history.c 2011-07-03 10:41:21.000000000 +0200 -@@ -1,24 +1,23 @@ - /* history.c -- standalone history library */ - --/* Copyright (C) 1989-2005 Free Software Foundation, Inc. -+/* Copyright (C) 1989-2009 Free Software Foundation, Inc. - -- This file contains the GNU History Library (the Library), a set of -+ This file contains the GNU History Library (History), a set of - routines for managing the text of previously typed lines. - -- The Library is free software; you can redistribute it and/or modify -+ History 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 2, or (at your option) -- any later version. -+ the Free Software Foundation, either version 3 of the License, or -+ (at your option) any later version. - -- The Library 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. -- -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ History 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 History. If not, see . -+*/ - - /* The goal is to make the implementation transparent, so that you - don't have to know what data types are used, just what functions -@@ -158,7 +157,7 @@ history_set_pos (pos) - return (1); - } - --/* Return the current history array. The caller has to be carefull, since this -+/* Return the current history array. The caller has to be careful, since this - is the actual array of data, and could be bashed or made corrupt easily. - The array is terminated with a NULL pointer. */ - HIST_ENTRY ** -@@ -209,6 +208,22 @@ history_get (offset) - : the_history[local_index]; - } - -+HIST_ENTRY * -+alloc_history_entry (string, ts) -+ char *string; -+ char *ts; -+{ -+ HIST_ENTRY *temp; -+ -+ temp = (HIST_ENTRY *)xmalloc (sizeof (HIST_ENTRY)); -+ -+ temp->line = string ? savestring (string) : string; -+ temp->data = (char *)NULL; -+ temp->timestamp = ts; -+ -+ return temp; -+} -+ - time_t - history_get_time (hist) - HIST_ENTRY *hist; -@@ -290,11 +305,7 @@ add_history (string) - } - } - -- temp = (HIST_ENTRY *)xmalloc (sizeof (HIST_ENTRY)); -- temp->line = savestring (string); -- temp->data = (char *)NULL; -- -- temp->timestamp = hist_inittime (); -+ temp = alloc_history_entry (string, hist_inittime ()); - - the_history[history_length] = (HIST_ENTRY *)NULL; - the_history[history_length - 1] = temp; -@@ -307,6 +318,8 @@ add_history_time (string) - { - HIST_ENTRY *hs; - -+ if (string == 0) -+ return; - hs = the_history[history_length - 1]; - FREE (hs->timestamp); - hs->timestamp = savestring (string); -@@ -325,9 +338,29 @@ free_history_entry (hist) - FREE (hist->line); - FREE (hist->timestamp); - x = hist->data; -- free (hist); -+ xfree (hist); - return (x); - } -+ -+HIST_ENTRY * -+copy_history_entry (hist) -+ HIST_ENTRY *hist; -+{ -+ HIST_ENTRY *ret; -+ char *ts; -+ -+ if (hist == 0) -+ return hist; -+ -+ ret = alloc_history_entry (hist->line, (char *)NULL); -+ -+ ts = hist->timestamp ? savestring (hist->timestamp) : hist->timestamp; -+ ret->timestamp = ts; -+ -+ ret->data = hist->data; -+ -+ return ret; -+} - - /* Make the history entry at WHICH have LINE and DATA. This returns - the old entry so you can dispose of the data. In the case of an -@@ -354,6 +387,51 @@ replace_history_entry (which, line, data - return (old_value); - } - -+/* Replace the DATA in the specified history entries, replacing OLD with -+ NEW. WHICH says which one(s) to replace: WHICH == -1 means to replace -+ all of the history entries where entry->data == OLD; WHICH == -2 means -+ to replace the `newest' history entry where entry->data == OLD; and -+ WHICH >= 0 means to replace that particular history entry's data, as -+ long as it matches OLD. */ -+void -+replace_history_data (which,old, new) -+ int which; -+ histdata_t *old, *new; -+{ -+ HIST_ENTRY *entry; -+ register int i, last; -+ -+ if (which < -2 || which >= history_length || history_length == 0 || the_history == 0) -+ return; -+ -+ if (which >= 0) -+ { -+ entry = the_history[which]; -+ if (entry && entry->data == old) -+ entry->data = new; -+ return; -+ } -+ -+ last = -1; -+ for (i = 0; i < history_length; i++) -+ { -+ entry = the_history[i]; -+ if (entry == 0) -+ continue; -+ if (entry->data == old) -+ { -+ last = i; -+ if (which == -1) -+ entry->data = new; -+ } -+ } -+ if (which == -2 && last >= 0) -+ { -+ entry = the_history[last]; -+ entry->data = new; /* XXX - we don't check entry->old */ -+ } -+} -+ - /* Remove history element WHICH from the history. The removed - element is returned to you so you can free the line, data, - and containing structure. */ -@@ -406,7 +484,7 @@ stifle_history (max) - - /* Stop stifling the history. This returns the previous maximum - number of history entries. The value is positive if the history -- was stifled, negative if it wasn't. */ -+ was stifled, negative if it wasn't. */ - int - unstifle_history () - { -Index: gdb-7.2.90.20110703/readline/history.h -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/history.h 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/history.h 2011-07-03 10:41:21.000000000 +0200 -@@ -1,23 +1,23 @@ - /* history.h -- the names of functions that you can call in history. */ --/* Copyright (C) 1989-2003 Free Software Foundation, Inc. - -- This file contains the GNU History Library (the Library), a set of -+/* Copyright (C) 1989-2009 Free Software Foundation, Inc. -+ -+ This file contains the GNU History Library (History), a set of - routines for managing the text of previously typed lines. - -- The Library is free software; you can redistribute it and/or modify -+ History 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 2, or (at your option) -- any later version. -+ the Free Software Foundation, either version 3 of the License, or -+ (at your option) any later version. - -- The Library 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. -- -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ History 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 History. If not, see . -+*/ - - #ifndef _HISTORY_H_ - #define _HISTORY_H_ -Index: gdb-7.2.90.20110703/readline/histsearch.c -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/histsearch.c 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/histsearch.c 2011-07-03 10:41:21.000000000 +0200 -@@ -1,24 +1,23 @@ - /* histsearch.c -- searching the history list. */ - --/* Copyright (C) 1989, 1992 Free Software Foundation, Inc. -+/* Copyright (C) 1989, 1992-2009 Free Software Foundation, Inc. - -- This file contains the GNU History Library (the Library), a set of -+ This file contains the GNU History Library (History), a set of - routines for managing the text of previously typed lines. - -- The Library is free software; you can redistribute it and/or modify -+ History 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 2, or (at your option) -- any later version. -+ the Free Software Foundation, either version 3 of the License, or -+ (at your option) any later version. - -- The Library 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. -- -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ History 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 History. If not, see . -+*/ - - #define READLINE_LIBRARY - -Index: gdb-7.2.90.20110703/readline/input.c -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/input.c 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/input.c 2011-07-03 10:41:21.000000000 +0200 -@@ -1,24 +1,24 @@ - /* input.c -- character input functions for readline. */ - --/* Copyright (C) 1994-2005 Free Software Foundation, Inc. -+/* Copyright (C) 1994-2010 Free Software Foundation, Inc. - -- This file is part of the GNU Readline Library, a library for -- reading lines of text with interactive input and history editing. -+ This file is part of the GNU Readline Library (Readline), a library -+ for reading lines of text with interactive input and history editing. - -- The GNU Readline Library 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 2, or -+ Readline 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. - -- The GNU Readline Library 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 -+ Readline 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. - -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ You should have received a copy of the GNU General Public License -+ along with Readline. If not, see . -+*/ -+ - #define READLINE_LIBRARY - - #if defined (__TANDEM) -@@ -45,14 +45,7 @@ - # include "ansi_stdlib.h" - #endif /* HAVE_STDLIB_H */ - --#if defined (HAVE_SELECT) --# if !defined (HAVE_SYS_SELECT_H) || !defined (M_UNIX) --# include --# endif --#endif /* HAVE_SELECT */ --#if defined (HAVE_SYS_SELECT_H) --# include --#endif -+#include "posixselect.h" - - #if defined (FIONREAD_IN_SYS_IOCTL) - # include -@@ -133,8 +126,11 @@ rl_get_char (key) - return (0); - - *key = ibuffer[pop_index++]; -- -+#if 0 - if (pop_index >= ibuffer_len) -+#else -+ if (pop_index > ibuffer_len) -+#endif - pop_index = 0; - - return (1); -@@ -151,7 +147,7 @@ _rl_unget_char (key) - { - pop_index--; - if (pop_index < 0) -- pop_index = ibuffer_len - 1; -+ pop_index = ibuffer_len; - ibuffer[pop_index] = key; - return (1); - } -@@ -179,6 +175,7 @@ rl_gather_tyi () - struct timeval timeout; - #endif - -+ chars_avail = 0; - tty = fileno (rl_instream); - - #if defined (HAVE_SELECT) -@@ -186,8 +183,7 @@ rl_gather_tyi () - FD_ZERO (&exceptfds); - FD_SET (tty, &readfds); - FD_SET (tty, &exceptfds); -- timeout.tv_sec = 0; -- timeout.tv_usec = _keyboard_input_timeout; -+ USEC_TO_TIMEVAL (_keyboard_input_timeout, timeout); - result = select (tty + 1, &readfds, (fd_set *)NULL, &exceptfds, &timeout); - if (result <= 0) - return 0; /* Nothing to read. */ -@@ -221,13 +217,10 @@ rl_gather_tyi () - #endif /* O_NDELAY */ - - #if defined (__MINGW32__) -- /* We use getch to read console input, so use the same -- mechanism to check for more. Otherwise, we don't know. */ -- if (isatty (fileno (rl_instream))) -- chars_avail = _kbhit (); -- else -- chars_avail = 0; -- result = 0; -+ /* Use getch/_kbhit to check for available console input, in the same way -+ that we read it normally. */ -+ chars_avail = isatty (tty) ? _kbhit () : 0; -+ result = 0; - #endif - - /* If there's nothing available, don't waste time trying to read -@@ -251,8 +244,10 @@ rl_gather_tyi () - { - while (chars_avail--) - { -+ RL_CHECK_SIGNALS (); - k = (*rl_getc_function) (rl_instream); -- rl_stuff_char (k); -+ if (rl_stuff_char (k) == 0) -+ break; /* some problem; no more room */ - if (k == NEWLINE || k == RETURN) - break; - } -@@ -273,7 +268,7 @@ rl_set_keyboard_input_timeout (u) - int o; - - o = _keyboard_input_timeout; -- if (u > 0) -+ if (u >= 0) - _keyboard_input_timeout = u; - return (o); - } -@@ -316,10 +311,8 @@ _rl_input_available () - #endif - - #if defined (__MINGW32__) -- /* We use getch to read console input, so use the same -- mechanism to check for more. Otherwise, we don't know. */ -- if (isatty (fileno (rl_instream))) -- return _kbhit (); -+ if (isatty (tty)) -+ return (_kbhit ()); - #endif - - return 0; -@@ -358,7 +351,7 @@ _rl_insert_typein (c) - - string[i] = '\0'; - rl_insert_text (string); -- free (string); -+ xfree (string); - } - - /* Add KEY to the buffer of characters to be read. Returns 1 if the -@@ -377,7 +370,11 @@ rl_stuff_char (key) - RL_SETSTATE (RL_STATE_INPUTPENDING); - } - ibuffer[push_index++] = key; -+#if 0 - if (push_index >= ibuffer_len) -+#else -+ if (push_index > ibuffer_len) -+#endif - push_index = 0; - - return 1; -@@ -430,22 +427,26 @@ rl_read_key () - /* If the user has an event function, then call it periodically. */ - if (rl_event_hook) - { -- while (rl_event_hook && rl_get_char (&c) == 0) -+ while (rl_event_hook) - { -- (*rl_event_hook) (); -- if (rl_done) /* XXX - experimental */ -- return ('\n'); - if (rl_gather_tyi () < 0) /* XXX - EIO */ - { - rl_done = 1; - return ('\n'); - } -+ RL_CHECK_SIGNALS (); -+ if (rl_get_char (&c) != 0) -+ break; -+ if (rl_done) /* XXX - experimental */ -+ return ('\n'); -+ (*rl_event_hook) (); - } - } - else - { - if (rl_get_char (&c) == 0) - c = (*rl_getc_function) (rl_instream); -+ RL_CHECK_SIGNALS (); - } - } - -@@ -461,6 +462,8 @@ rl_getc (stream) - - while (1) - { -+ RL_CHECK_SIGNALS (); -+ - #if defined (__MINGW32__) - if (isatty (fileno (stream))) - return (getch ()); -@@ -506,7 +509,7 @@ rl_getc (stream) - this is simply an interrupted system call to read (). - Otherwise, some error ocurred, also signifying EOF. */ - if (errno != EINTR) -- return (EOF); -+ return (RL_ISSTATE (RL_STATE_READCMD) ? READERR : EOF); - } - } - -@@ -517,20 +520,26 @@ _rl_read_mbchar (mbchar, size) - char *mbchar; - int size; - { -- int mb_len = 0; -+ int mb_len, c; - size_t mbchar_bytes_length; - wchar_t wc; - mbstate_t ps, ps_back; - - memset(&ps, 0, sizeof (mbstate_t)); - memset(&ps_back, 0, sizeof (mbstate_t)); -- -+ -+ mb_len = 0; - while (mb_len < size) - { - RL_SETSTATE(RL_STATE_MOREINPUT); -- mbchar[mb_len++] = rl_read_key (); -+ c = rl_read_key (); - RL_UNSETSTATE(RL_STATE_MOREINPUT); - -+ if (c < 0) -+ break; -+ -+ mbchar[mb_len++] = c; -+ - mbchar_bytes_length = mbrtowc (&wc, mbchar, mb_len, &ps); - if (mbchar_bytes_length == (size_t)(-1)) - break; /* invalid byte sequence for the current locale */ -@@ -554,21 +563,21 @@ _rl_read_mbchar (mbchar, size) - } - - /* Read a multibyte-character string whose first character is FIRST into -- the buffer MB of length MBLEN. Returns the last character read, which -+ the buffer MB of length MLEN. Returns the last character read, which - may be FIRST. Used by the search functions, among others. Very similar - to _rl_read_mbchar. */ - int --_rl_read_mbstring (first, mb, mblen) -+_rl_read_mbstring (first, mb, mlen) - int first; - char *mb; -- int mblen; -+ int mlen; - { - int i, c; - mbstate_t ps; - - c = first; -- memset (mb, 0, mblen); -- for (i = 0; i < mblen; i++) -+ memset (mb, 0, mlen); -+ for (i = 0; c >= 0 && i < mlen; i++) - { - mb[i] = (char)c; - memset (&ps, 0, sizeof (mbstate_t)); -Index: gdb-7.2.90.20110703/readline/isearch.c -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/isearch.c 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/isearch.c 2011-07-03 10:41:21.000000000 +0200 -@@ -1,29 +1,30 @@ -+/* isearch.c - incremental searching */ -+ - /* **************************************************************** */ - /* */ - /* I-Search and Searching */ - /* */ - /* **************************************************************** */ - --/* Copyright (C) 1987-2005 Free Software Foundation, Inc. -+/* Copyright (C) 1987-2009 Free Software Foundation, Inc. - -- This file contains the Readline Library (the Library), a set of -- routines for providing Emacs style line input to programs that ask -- for it. -+ This file is part of the GNU Readline Library (Readline), a library -+ for reading lines of text with interactive input and history editing. - -- The Library is free software; you can redistribute it and/or modify -+ Readline 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 2, or (at your option) -- any later version. -+ the Free Software Foundation, either version 3 of the License, or -+ (at your option) any later version. -+ -+ Readline 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 Readline. If not, see . -+*/ - -- The Library 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. -- -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ - #define READLINE_LIBRARY - - #if defined (HAVE_CONFIG_H) -@@ -68,14 +69,14 @@ static void _rl_isearch_fini PARAMS((_rl - static int _rl_isearch_cleanup PARAMS((_rl_search_cxt *, int)); - - /* Last line found by the current incremental search, so we don't `find' -- identical lines many times in a row. */ --static char *prev_line_found; -+ identical lines many times in a row. Now part of isearch context. */ -+/* static char *prev_line_found; */ - - /* Last search string and its length. */ - static char *last_isearch_string; - static int last_isearch_string_len; - --static char *default_isearch_terminators = "\033\012"; -+static char * const default_isearch_terminators = "\033\012"; - - _rl_search_cxt * - _rl_scxt_alloc (type, flags) -@@ -103,6 +104,9 @@ _rl_scxt_alloc (type, flags) - - cxt->save_undo_list = 0; - -+ cxt->keymap = _rl_keymap; -+ cxt->okeymap = _rl_keymap; -+ - cxt->history_pos = 0; - cxt->direction = 0; - -@@ -125,7 +129,7 @@ _rl_scxt_dispose (cxt, flags) - FREE (cxt->allocated_line); - FREE (cxt->lines); - -- free (cxt); -+ xfree (cxt); - } - - /* Search backwards through the history looking for a string which is typed -@@ -192,7 +196,7 @@ rl_display_search (search_string, revers - strcpy (message + msglen, "': "); - - rl_message ("%s", message); -- free (message); -+ xfree (message); - (*rl_redisplay_function) (); - } - -@@ -327,11 +331,30 @@ _rl_isearch_dispatch (cxt, c) - rl_command_func_t *f; - - f = (rl_command_func_t *)NULL; -- -- /* Translate the keys we do something with to opcodes. */ -- if (c >= 0 && _rl_keymap[c].type == ISFUNC) -+ -+ if (c < 0) - { -- f = _rl_keymap[c].function; -+ cxt->sflags |= SF_FAILED; -+ cxt->history_pos = cxt->last_found_line; -+ return -1; -+ } -+ -+ /* If we are moving into a new keymap, modify cxt->keymap and go on. -+ This can be a problem if c == ESC and we want to terminate the -+ incremental search, so we check */ -+ if (c >= 0 && cxt->keymap[c].type == ISKMAP && strchr (cxt->search_terminators, cxt->lastc) == 0) -+ { -+ cxt->keymap = FUNCTION_TO_KEYMAP (cxt->keymap, c); -+ cxt->sflags |= SF_CHGKMAP; -+ /* XXX - we should probably save this sequence, so we can do -+ something useful if this doesn't end up mapping to a command. */ -+ return 1; -+ } -+ -+ /* Translate the keys we do something with to opcodes. */ -+ if (c >= 0 && cxt->keymap[c].type == ISFUNC) -+ { -+ f = cxt->keymap[c].function; - - if (f == rl_reverse_search_history) - cxt->lastc = (cxt->sflags & SF_REVERSE) ? -1 : -2; -@@ -339,19 +362,27 @@ _rl_isearch_dispatch (cxt, c) - cxt->lastc = (cxt->sflags & SF_REVERSE) ? -2 : -1; - else if (f == rl_rubout) - cxt->lastc = -3; -- else if (c == CTRL ('G')) -+ else if (c == CTRL ('G') || f == rl_abort) - cxt->lastc = -4; -- else if (c == CTRL ('W')) /* XXX */ -+ else if (c == CTRL ('W') || f == rl_unix_word_rubout) /* XXX */ - cxt->lastc = -5; -- else if (c == CTRL ('Y')) /* XXX */ -+ else if (c == CTRL ('Y') || f == rl_yank) /* XXX */ - cxt->lastc = -6; - } - -+ /* If we changed the keymap earlier while translating a key sequence into -+ a command, restore it now that we've succeeded. */ -+ if (cxt->sflags & SF_CHGKMAP) -+ { -+ cxt->keymap = cxt->okeymap; -+ cxt->sflags &= ~SF_CHGKMAP; -+ } -+ - /* The characters in isearch_terminators (set from the user-settable - variable isearch-terminators) are used to terminate the search but - not subsequently execute the character as a command. The default - value is "\033\012" (ESC and C-J). */ -- if (strchr (cxt->search_terminators, cxt->lastc)) -+ if (cxt->lastc > 0 && strchr (cxt->search_terminators, cxt->lastc)) - { - /* ESC still terminates the search, but if there is pending - input or if input arrives within 0.1 seconds (on systems -@@ -375,7 +406,7 @@ _rl_isearch_dispatch (cxt, c) - { - if (cxt->lastc >= 0 && (cxt->mb[0] && cxt->mb[1] == '\0') && ENDSRCH_CHAR (cxt->lastc)) - { -- /* This sets rl_pending_input to c; it will be picked up the next -+ /* This sets rl_pending_input to LASTC; it will be picked up the next - time rl_read_key is called. */ - rl_execute_next (cxt->lastc); - return (0); -Index: gdb-7.2.90.20110703/readline/keymaps.c -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/keymaps.c 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/keymaps.c 2011-07-03 10:41:21.000000000 +0200 -@@ -1,23 +1,24 @@ - /* keymaps.c -- Functions and keymaps for the GNU Readline library. */ - --/* Copyright (C) 1988,1989 Free Software Foundation, Inc. -+/* Copyright (C) 1988,1989-2009 Free Software Foundation, Inc. - -- This file is part of GNU Readline, a library for reading lines -- of text with interactive input and history editing. -+ This file is part of the GNU Readline Library (Readline), a library -+ for reading lines of text with interactive input and history editing. - -- Readline 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 2, or (at your option) any -- later version. -- -- Readline 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. -+ Readline 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. -+ -+ Readline 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 Readline; see the file COPYING. If not, write to the Free -- Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ along with Readline. If not, see . -+*/ -+ - #define READLINE_LIBRARY - - #if defined (HAVE_CONFIG_H) -@@ -56,8 +57,9 @@ Keymap - rl_make_bare_keymap () - { - register int i; -- Keymap keymap = (Keymap)xmalloc (KEYMAP_SIZE * sizeof (KEYMAP_ENTRY)); -+ Keymap keymap; - -+ keymap = (Keymap)xmalloc (KEYMAP_SIZE * sizeof (KEYMAP_ENTRY)); - for (i = 0; i < KEYMAP_SIZE; i++) - { - keymap[i].type = ISFUNC; -@@ -75,7 +77,8 @@ rl_make_bare_keymap () - return (keymap); - } - --/* Return a new keymap which is a copy of MAP. */ -+/* Return a new keymap which is a copy of MAP. Just copies pointers, does -+ not copy text of macros or descend into child keymaps. */ - Keymap - rl_copy_keymap (map) - Keymap map; -@@ -127,7 +130,7 @@ rl_discard_keymap (map) - { - int i; - -- if (!map) -+ if (map == 0) - return; - - for (i = 0; i < KEYMAP_SIZE; i++) -@@ -139,11 +142,21 @@ rl_discard_keymap (map) - - case ISKMAP: - rl_discard_keymap ((Keymap)map[i].function); -+ xfree ((char *)map[i].function); - break; - - case ISMACR: -- free ((char *)map[i].function); -+ xfree ((char *)map[i].function); - break; - } - } - } -+ -+/* Convenience function that discards, then frees, MAP. */ -+void -+rl_free_keymap (map) -+ Keymap map; -+{ -+ rl_discard_keymap (map); -+ xfree ((char *)map); -+} -Index: gdb-7.2.90.20110703/readline/keymaps.h -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/keymaps.h 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/keymaps.h 2011-07-03 10:41:21.000000000 +0200 -@@ -2,23 +2,22 @@ - - /* Copyright (C) 1987, 1989, 1992 Free Software Foundation, Inc. - -- This file is part of the GNU Readline Library, a library for -- reading lines of text with interactive input and history editing. -+ This file is part of the GNU Readline Library (Readline), a library -+ for reading lines of text with interactive input and history editing. - -- The GNU Readline Library 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 2, or -+ Readline 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. - -- The GNU Readline Library 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 -+ Readline 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. - -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ You should have received a copy of the GNU General Public License -+ along with Readline. If not, see . -+*/ - - #ifndef _KEYMAPS_H_ - #define _KEYMAPS_H_ -@@ -53,11 +52,6 @@ typedef struct _keymap_entry { - #define KEYMAP_SIZE 257 - #define ANYOTHERKEY KEYMAP_SIZE-1 - --/* I wanted to make the above structure contain a union of: -- union { rl_command_func_t *function; struct _keymap_entry *keymap; } value; -- but this made it impossible for me to create a static array. -- Maybe I need C lessons. */ -- - typedef KEYMAP_ENTRY KEYMAP_ENTRY_ARRAY[KEYMAP_SIZE]; - typedef KEYMAP_ENTRY *Keymap; - -Index: gdb-7.2.90.20110703/readline/kill.c -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/kill.c 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/kill.c 2011-07-03 10:41:21.000000000 +0200 -@@ -2,23 +2,23 @@ - - /* Copyright (C) 1994 Free Software Foundation, Inc. - -- This file is part of the GNU Readline Library, a library for -- reading lines of text with interactive input and history editing. -+ This file is part of the GNU Readline Library (Readline), a library -+ for reading lines of text with interactive input and history editing. - -- The GNU Readline Library 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 2, or -+ Readline 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. - -- The GNU Readline Library 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 -+ Readline 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. - -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ You should have received a copy of the GNU General Public License -+ along with Readline. If not, see . -+*/ -+ - #define READLINE_LIBRARY - - #if defined (HAVE_CONFIG_H) -@@ -115,7 +115,7 @@ _rl_copy_to_kill_ring (text, append) - if (slot == rl_max_kills) - { - register int i; -- free (rl_kill_ring[0]); -+ xfree (rl_kill_ring[0]); - for (i = 0; i < slot; i++) - rl_kill_ring[i] = rl_kill_ring[i + 1]; - } -@@ -146,8 +146,8 @@ _rl_copy_to_kill_ring (text, append) - strcpy (new, text); - strcat (new, old); - } -- free (old); -- free (text); -+ xfree (old); -+ xfree (text); - rl_kill_ring[slot] = new; - } - else -@@ -582,6 +582,7 @@ rl_yank_nth_arg_internal (count, ignore, - if (!arg || !*arg) - { - rl_ding (); -+ FREE (arg); - return -1; - } - -@@ -600,7 +601,7 @@ rl_yank_nth_arg_internal (count, ignore, - #endif /* VI_MODE */ - - rl_insert_text (arg); -- free (arg); -+ xfree (arg); - - rl_end_undo_group (); - return 0; -@@ -639,7 +640,7 @@ rl_yank_last_arg (count, key) - { - if (undo_needed) - rl_do_undo (); -- if (count < 1) -+ if (count < 0) /* XXX - was < 1 */ - direction = -direction; - history_skip += direction; - if (history_skip < 0) -@@ -685,7 +686,7 @@ rl_paste_from_clipboard (count, key) - _rl_set_mark_at_pos (rl_point); - rl_insert_text (ptr); - if (ptr != data) -- free (ptr); -+ xfree (ptr); - CloseClipboard (); - } - return (0); -Index: gdb-7.2.90.20110703/readline/macro.c -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/macro.c 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/macro.c 2011-07-03 10:41:21.000000000 +0200 -@@ -1,24 +1,24 @@ - /* macro.c -- keyboard macros for readline. */ - --/* Copyright (C) 1994 Free Software Foundation, Inc. -+/* Copyright (C) 1994-2009 Free Software Foundation, Inc. - -- This file is part of the GNU Readline Library, a library for -- reading lines of text with interactive input and history editing. -+ This file is part of the GNU Readline Library (Readline), a library -+ for reading lines of text with interactive input and history editing. - -- The GNU Readline Library 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 2, or -+ Readline 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. - -- The GNU Readline Library 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 -+ Readline 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. - -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ You should have received a copy of the GNU General Public License -+ along with Readline. If not, see . -+*/ -+ - #define READLINE_LIBRARY - - #if defined (HAVE_CONFIG_H) -@@ -113,7 +113,7 @@ _rl_next_macro_key () - - #if defined (READLINE_CALLBACKS) - c = rl_executing_macro[executing_macro_index++]; -- if (RL_ISSTATE (RL_STATE_CALLBACK) && RL_ISSTATE (RL_STATE_READCMD) && rl_executing_macro[executing_macro_index] == 0) -+ if (RL_ISSTATE (RL_STATE_CALLBACK) && RL_ISSTATE (RL_STATE_READCMD|RL_STATE_MOREINPUT) && rl_executing_macro[executing_macro_index] == 0) - _rl_pop_executing_macro (); - return c; - #else -@@ -152,7 +152,7 @@ _rl_pop_executing_macro () - rl_executing_macro = macro_list->string; - executing_macro_index = macro_list->sindex; - macro_list = macro_list->next; -- free (macro); -+ xfree (macro); - } - - if (rl_executing_macro == 0) -@@ -181,7 +181,7 @@ _rl_kill_kbd_macro () - { - if (current_macro) - { -- free (current_macro); -+ xfree (current_macro); - current_macro = (char *) NULL; - } - current_macro_size = current_macro_index = 0; -Index: gdb-7.2.90.20110703/readline/mbutil.c -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/mbutil.c 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/mbutil.c 2011-07-03 10:41:21.000000000 +0200 -@@ -1,24 +1,24 @@ - /* mbutil.c -- readline multibyte character utility functions */ - --/* Copyright (C) 2001-2005 Free Software Foundation, Inc. -+/* Copyright (C) 2001-2009 Free Software Foundation, Inc. - -- This file is part of the GNU Readline Library, a library for -- reading lines of text with interactive input and history editing. -+ This file is part of the GNU Readline Library (Readline), a library -+ for reading lines of text with interactive input and history editing. - -- The GNU Readline Library 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 2, or -+ Readline 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. - -- The GNU Readline Library 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 -+ Readline 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. - -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ You should have received a copy of the GNU General Public License -+ along with Readline. If not, see . -+*/ -+ - #define READLINE_LIBRARY - - #if defined (HAVE_CONFIG_H) -@@ -77,7 +77,7 @@ _rl_find_next_mbchar_internal (string, s - char *string; - int seed, count, find_non_zero; - { -- size_t tmp; -+ size_t tmp, len; - mbstate_t ps; - int point; - wchar_t wc; -@@ -91,17 +91,21 @@ _rl_find_next_mbchar_internal (string, s - return seed; - - point = seed + _rl_adjust_point (string, seed, &ps); -- /* if this is true, means that seed was not pointed character -- started byte. So correct the point and consume count */ -+ /* if this is true, means that seed was not pointing to a byte indicating -+ the beginning of a multibyte character. Correct the point and consume -+ one char. */ - if (seed < point) - count--; - - while (count > 0) - { -- tmp = mbrtowc (&wc, string+point, strlen(string + point), &ps); -+ len = strlen (string + point); -+ if (len == 0) -+ break; -+ tmp = mbrtowc (&wc, string+point, len, &ps); - if (MB_INVALIDCH ((size_t)tmp)) - { -- /* invalid bytes. asume a byte represents a character */ -+ /* invalid bytes. assume a byte represents a character */ - point++; - count--; - /* reset states. */ -@@ -128,12 +132,10 @@ _rl_find_next_mbchar_internal (string, s - if (find_non_zero) - { - tmp = mbrtowc (&wc, string + point, strlen (string + point), &ps); -- while (tmp > 0 && wcwidth (wc) == 0) -+ while (MB_NULLWCH (tmp) == 0 && MB_INVALIDCH (tmp) == 0 && wcwidth (wc) == 0) - { - point += tmp; - tmp = mbrtowc (&wc, string + point, strlen (string + point), &ps); -- if (MB_NULLWCH (tmp) || MB_INVALIDCH (tmp)) -- break; - } - } - -Index: gdb-7.2.90.20110703/readline/misc.c -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/misc.c 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/misc.c 2011-07-03 10:41:21.000000000 +0200 -@@ -1,24 +1,24 @@ - /* misc.c -- miscellaneous bindable readline functions. */ - --/* Copyright (C) 1987-2005 Free Software Foundation, Inc. -+/* Copyright (C) 1987-2009 Free Software Foundation, Inc. - -- This file is part of the GNU Readline Library, a library for -- reading lines of text with interactive input and history editing. -+ This file is part of the GNU Readline Library (Readline), a library -+ for reading lines of text with interactive input and history editing. - -- The GNU Readline Library 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 2, or -+ Readline 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. - -- The GNU Readline Library 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 -+ Readline 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. - -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ You should have received a copy of the GNU General Public License -+ along with Readline. If not, see . -+*/ -+ - #define READLINE_LIBRARY - - #if defined (HAVE_CONFIG_H) -@@ -146,6 +146,8 @@ _rl_arg_dispatch (cxt, c) - rl_restore_prompt (); - rl_clear_message (); - RL_UNSETSTATE(RL_STATE_NUMERICARG); -+ if (key < 0) -+ return -1; - return (_rl_dispatch (key, _rl_keymap)); - } - } -@@ -212,6 +214,8 @@ rl_digit_loop () - if (r <= 0 || (RL_ISSTATE (RL_STATE_NUMERICARG) == 0)) - break; - } -+ -+ return r; - } - - /* Create a default argument. */ -@@ -324,7 +328,7 @@ _rl_free_history_entry (entry) - FREE (entry->line); - FREE (entry->timestamp); - -- free (entry); -+ xfree (entry); - } - - /* Perhaps put back the current line if it has changed. */ -@@ -338,9 +342,9 @@ rl_maybe_replace_line () - if (temp && ((UNDO_LIST *)(temp->data) != rl_undo_list)) - { - temp = replace_history_entry (where_history (), rl_line_buffer, (histdata_t)rl_undo_list); -- free (temp->line); -+ xfree (temp->line); - FREE (temp->timestamp); -- free (temp); -+ xfree (temp); - } - return 0; - } -@@ -427,6 +431,56 @@ rl_replace_from_history (entry, flags) - rl_mark = rl_end; - } - #endif -+} -+ -+/* Process and free undo lists attached to each history entry prior to the -+ current entry, inclusive, reverting each line to its saved state. This -+ is destructive, and state about the current line is lost. This is not -+ intended to be called while actively editing, and the current line is -+ not assumed to have been added to the history list. */ -+void -+_rl_revert_all_lines () -+{ -+ int hpos; -+ HIST_ENTRY *entry; -+ UNDO_LIST *ul, *saved_undo_list; -+ char *lbuf; -+ -+ lbuf = savestring (rl_line_buffer); -+ saved_undo_list = rl_undo_list; -+ hpos = where_history (); -+ -+ entry = (hpos == history_length) ? previous_history () : current_history (); -+ while (entry) -+ { -+ if (ul = (UNDO_LIST *)entry->data) -+ { -+ if (ul == saved_undo_list) -+ saved_undo_list = 0; -+ /* Set up rl_line_buffer and other variables from history entry */ -+ rl_replace_from_history (entry, 0); /* entry->line is now current */ -+ /* Undo all changes to this history entry */ -+ while (rl_undo_list) -+ rl_do_undo (); -+ /* And copy the reverted line back to the history entry, preserving -+ the timestamp. */ -+ FREE (entry->line); -+ entry->line = savestring (rl_line_buffer); -+ entry->data = 0; -+ } -+ entry = previous_history (); -+ } -+ -+ /* Restore history state */ -+ rl_undo_list = saved_undo_list; /* may have been set to null */ -+ history_set_pos (hpos); -+ -+ /* reset the line buffer */ -+ rl_replace_line (lbuf, 0); -+ _rl_set_the_line (); -+ -+ /* and clean up */ -+ xfree (lbuf); - } - - /* **************************************************************** */ -@@ -556,7 +610,7 @@ rl_vi_editing_mode (count, key) - #if defined (VI_MODE) - _rl_set_insert_mode (RL_IM_INSERT, 1); /* vi mode ignores insert mode */ - rl_editing_mode = vi_mode; -- rl_vi_insertion_mode (1, key); -+ rl_vi_insert_mode (1, key); - #endif /* VI_MODE */ - - return 0; -Index: gdb-7.2.90.20110703/readline/nls.c -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/nls.c 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/nls.c 2011-07-03 10:41:21.000000000 +0200 -@@ -1,24 +1,24 @@ - /* nls.c -- skeletal internationalization code. */ - --/* Copyright (C) 1996 Free Software Foundation, Inc. -+/* Copyright (C) 1996-2009 Free Software Foundation, Inc. - -- This file is part of the GNU Readline Library, a library for -- reading lines of text with interactive input and history editing. -+ This file is part of the GNU Readline Library (Readline), a library -+ for reading lines of text with interactive input and history editing. - -- The GNU Readline Library 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 2, or -+ Readline 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. - -- The GNU Readline Library 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 -+ Readline 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. - -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ You should have received a copy of the GNU General Public License -+ along with Readline. If not, see . -+*/ -+ - #define READLINE_LIBRARY - - #if defined (HAVE_CONFIG_H) -@@ -145,7 +145,7 @@ _rl_init_eightbit () - _rl_output_meta_chars = 1; - break; - } -- free (t); -+ xfree (t); - return (legal_lang_values[i] ? 1 : 0); - - #endif /* !HAVE_SETLOCALE */ -Index: gdb-7.2.90.20110703/readline/parens.c -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/parens.c 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/parens.c 2011-07-03 10:41:21.000000000 +0200 -@@ -1,24 +1,24 @@ --/* parens.c -- Implementation of matching parentheses feature. */ -+/* parens.c -- implementation of matching parentheses feature. */ - --/* Copyright (C) 1987, 1989, 1992 Free Software Foundation, Inc. -+/* Copyright (C) 1987, 1989, 1992-2009 Free Software Foundation, Inc. - -- This file is part of the GNU Readline Library, a library for -- reading lines of text with interactive input and history editing. -+ This file is part of the GNU Readline Library (Readline), a library -+ for reading lines of text with interactive input and history editing. - -- The GNU Readline Library 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 2, or -+ Readline 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. - -- The GNU Readline Library 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 -+ Readline 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. - -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ You should have received a copy of the GNU General Public License -+ along with Readline. If not, see . -+*/ -+ - #define READLINE_LIBRARY - - #if defined (__TANDEM) -@@ -38,16 +38,7 @@ - # include - #endif - --#if defined (FD_SET) && !defined (HAVE_SELECT) --# define HAVE_SELECT --#endif -- --#if defined (HAVE_SELECT) --# include --#endif /* HAVE_SELECT */ --#if defined (HAVE_SYS_SELECT_H) --# include --#endif -+#include "posixselect.h" - - #if defined (HAVE_STRING_H) - # include -@@ -130,8 +121,7 @@ rl_insert_close (count, invoking_key) - - FD_ZERO (&readfds); - FD_SET (fileno (rl_instream), &readfds); -- timer.tv_sec = 0; -- timer.tv_usec = _paren_blink_usec; -+ USEC_TO_TIMEVAL (_paren_blink_usec, timer); - - orig_point = rl_point; - rl_point = match_point; -Index: gdb-7.2.90.20110703/readline/patchlevel -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/readline/patchlevel 2011-07-03 10:41:21.000000000 +0200 -@@ -0,0 +1,3 @@ -+# Do not edit -- exists only for use by patch -+ -+1 -Index: gdb-7.2.90.20110703/readline/posixdir.h -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/posixdir.h 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/posixdir.h 2011-07-03 10:41:21.000000000 +0200 -@@ -4,19 +4,19 @@ - - This file is part of GNU Bash, the Bourne Again SHell. - -- Bash 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 2, or (at your option) -- any later version. -- -- Bash 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. -+ Bash 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. -+ -+ Bash 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 Bash; see the file COPYING. If not, write to the Free -- Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ along with Bash. If not, see . -+*/ - - /* This file should be included instead of or . */ - -Index: gdb-7.2.90.20110703/readline/posixjmp.h -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/posixjmp.h 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/posixjmp.h 2011-07-03 10:41:21.000000000 +0200 -@@ -4,19 +4,19 @@ - - This file is part of GNU Bash, the Bourne Again SHell. - -- Bash 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 2, or (at your option) -- any later version. -- -- Bash 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. -+ Bash 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. -+ -+ Bash 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 Bash; see the file COPYING. If not, write to the Free -- Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ along with Bash. If not, see . -+*/ - - #ifndef _POSIXJMP_H_ - #define _POSIXJMP_H_ -Index: gdb-7.2.90.20110703/readline/posixselect.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/readline/posixselect.h 2011-07-03 10:41:21.000000000 +0200 -@@ -0,0 +1,47 @@ -+/* posixselect.h -- wrapper for select(2) includes and definitions */ -+ -+/* Copyright (C) 2009 Free Software Foundation, Inc. -+ -+ This file is part of GNU Bash, the Bourne Again SHell. -+ -+ Bash 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. -+ -+ Bash 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 Bash. If not, see . -+*/ -+ -+#ifndef _POSIXSELECT_H_ -+#define _POSIXSELECT_H_ -+ -+#if defined (FD_SET) && !defined (HAVE_SELECT) -+# define HAVE_SELECT 1 -+#endif -+ -+#if defined (HAVE_SELECT) -+# if !defined (HAVE_SYS_SELECT_H) || !defined (M_UNIX) -+# include -+# endif -+#endif /* HAVE_SELECT */ -+#if defined (HAVE_SYS_SELECT_H) -+# include -+#endif -+ -+#ifndef USEC_PER_SEC -+# define USEC_PER_SEC 1000000 -+#endif -+ -+#define USEC_TO_TIMEVAL(us, tv) \ -+do { \ -+ (tv).tv_sec = (us) / USEC_PER_SEC; \ -+ (tv).tv_usec = (us) % USEC_PER_SEC; \ -+} while (0) -+ -+#endif /* _POSIXSELECT_H_ */ -Index: gdb-7.2.90.20110703/readline/posixstat.h -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/posixstat.h 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/posixstat.h 2011-07-03 10:41:21.000000000 +0200 -@@ -5,19 +5,19 @@ - - This file is part of GNU Bash, the Bourne Again SHell. - -- Bash 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 2, or (at your option) -- any later version. -- -- Bash 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. -+ Bash 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. -+ -+ Bash 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 Bash; see the file COPYING. If not, write to the Free -- Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ along with Bash. If not, see . -+*/ - - /* This file should be included instead of . - It relies on the local sys/stat.h to work though. */ -Index: gdb-7.2.90.20110703/readline/readline.c -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/readline.c 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/readline.c 2011-07-03 10:41:21.000000000 +0200 -@@ -1,25 +1,25 @@ - /* readline.c -- a general facility for reading lines of input - with emacs style editing and completion. */ - --/* Copyright (C) 1987-2005 Free Software Foundation, Inc. -+/* Copyright (C) 1987-2009 Free Software Foundation, Inc. - -- This file is part of the GNU Readline Library, a library for -- reading lines of text with interactive input and history editing. -+ This file is part of the GNU Readline Library (Readline), a library -+ for reading lines of text with interactive input and history editing. - -- The GNU Readline Library 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 2, or -+ Readline 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. - -- The GNU Readline Library 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 -+ Readline 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. - -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ You should have received a copy of the GNU General Public License -+ along with Readline. If not, see . -+*/ -+ - #define READLINE_LIBRARY - - #if defined (HAVE_CONFIG_H) -@@ -49,6 +49,11 @@ - - #include - #include "posixjmp.h" -+#include -+ -+#if !defined (errno) -+extern int errno; -+#endif /* !errno */ - - /* System-specific feature definitions and include files. */ - #include "rldefs.h" -@@ -158,7 +163,7 @@ int rl_done; - rl_command_func_t *rl_last_func = (rl_command_func_t *)NULL; - - /* Top level environment for readline_internal (). */ --procenv_t readline_top_level; -+procenv_t _rl_top_level; - - /* The streams we interact with. */ - FILE *_rl_in_stream, *_rl_out_stream; -@@ -171,7 +176,7 @@ FILE *rl_outstream = (FILE *)NULL; - set to 1 if there is a controlling terminal, we can get its attributes, - and the attributes include `echo'. Look at rltty.c:prepare_terminal_settings - for the code that sets it. */ --int readline_echoing_p = 0; -+int _rl_echoing_p = 0; - - /* Current prompt. */ - char *rl_prompt = (char *)NULL; -@@ -265,6 +270,15 @@ int _rl_output_meta_chars = 0; - them to equivalent readline functions at startup. */ - int _rl_bind_stty_chars = 1; - -+/* Non-zero means to go through the history list at every newline (or -+ whenever rl_done is set and readline returns) and revert each line to -+ its initial state. */ -+int _rl_revert_all_at_newline = 0; -+ -+/* Non-zero means to honor the termios ECHOCTL bit and echo control -+ characters corresponding to keyboard-generated signals. */ -+int _rl_echo_control_chars = 1; -+ - /* **************************************************************** */ - /* */ - /* Top Level Functions */ -@@ -295,6 +309,9 @@ readline (prompt) - const char *prompt; - { - char *value; -+#if 0 -+ int in_callback; -+#endif - - /* If we are at EOF return a NULL string. */ - if (rl_pending_input == EOF) -@@ -303,6 +320,15 @@ readline (prompt) - return ((char *)NULL); - } - -+#if 0 -+ /* If readline() is called after installing a callback handler, temporarily -+ turn off the callback state to avoid ensuing messiness. Patch supplied -+ by the gdb folks. XXX -- disabled. This can be fooled and readline -+ left in a strange state by a poorly-timed longjmp. */ -+ if (in_callback = RL_ISSTATE (RL_STATE_CALLBACK)) -+ RL_UNSETSTATE (RL_STATE_CALLBACK); -+#endif -+ - rl_set_prompt (prompt); - - rl_initialize (); -@@ -321,6 +347,11 @@ readline (prompt) - rl_clear_signals (); - #endif - -+#if 0 -+ if (in_callback) -+ RL_SETSTATE (RL_STATE_CALLBACK); -+#endif -+ - return (value); - } - -@@ -344,14 +375,14 @@ readline_internal_setup () - /* If we're not echoing, we still want to at least print a prompt, because - rl_redisplay will not do it for us. If the calling application has a - custom redisplay function, though, let that function handle it. */ -- if (readline_echoing_p == 0 && rl_redisplay_function == rl_redisplay) -+ if (_rl_echoing_p == 0 && rl_redisplay_function == rl_redisplay) - { - if (rl_prompt && rl_already_prompted == 0) - { - nprompt = _rl_strip_prompt (rl_prompt); - fprintf (_rl_out_stream, "%s", nprompt); - fflush (_rl_out_stream); -- free (nprompt); -+ xfree (nprompt); - } - } - else -@@ -365,11 +396,13 @@ readline_internal_setup () - - #if defined (VI_MODE) - if (rl_editing_mode == vi_mode) -- rl_vi_insertion_mode (1, 'i'); -+ rl_vi_insert_mode (1, 'i'); - #endif /* VI_MODE */ - - if (rl_pre_input_hook) - (*rl_pre_input_hook) (); -+ -+ RL_CHECK_SIGNALS (); - } - - STATIC_CALLBACK char * -@@ -379,6 +412,8 @@ readline_internal_teardown (eof) - char *temp; - HIST_ENTRY *entry; - -+ RL_CHECK_SIGNALS (); -+ - /* Restore the original of this history line, iff the line that we - are editing was originally in the history, AND the line has changed. */ - entry = current_history (); -@@ -391,9 +426,12 @@ readline_internal_teardown (eof) - _rl_free_history_entry (entry); - - strcpy (the_line, temp); -- free (temp); -+ xfree (temp); - } - -+ if (_rl_revert_all_at_newline) -+ _rl_revert_all_lines (); -+ - /* At any rate, it is highly likely that this line has an undo list. Get - rid of it now. */ - if (rl_undo_list) -@@ -454,7 +492,7 @@ readline_internal_charloop () - #endif - lk = _rl_last_command_was_kill; - -- code = setjmp (readline_top_level); -+ code = setjmp (_rl_top_level); - - if (code) - { -@@ -462,7 +500,7 @@ readline_internal_charloop () - _rl_want_redisplay = 0; - /* If we get here, we're not being called from something dispatched - from _rl_callback_read_char(), which sets up its own value of -- readline_top_level (saving and restoring the old, of course), so -+ _rl_top_level (saving and restoring the old, of course), so - we can just return here. */ - if (RL_ISSTATE (RL_STATE_CALLBACK)) - return (0); -@@ -479,6 +517,20 @@ readline_internal_charloop () - c = rl_read_key (); - RL_UNSETSTATE(RL_STATE_READCMD); - -+ /* look at input.c:rl_getc() for the circumstances under which this will -+ be returned; punt immediately on read error without converting it to -+ a newline. */ -+ if (c == READERR) -+ { -+#if defined (READLINE_CALLBACKS) -+ RL_SETSTATE(RL_STATE_DONE); -+ return (rl_done = 1); -+#else -+ eof_found = 1; -+ break; -+#endif -+ } -+ - /* EOF typed to a non-blank line is a . */ - if (c == EOF && rl_end) - c = NEWLINE; -@@ -498,6 +550,7 @@ readline_internal_charloop () - - lastc = c; - _rl_dispatch ((unsigned char)c, _rl_keymap); -+ RL_CHECK_SIGNALS (); - - /* If there was no change in _rl_last_command_was_kill, then no kill - has taken place. Note that if input is pending we are reading -@@ -576,7 +629,7 @@ void - _rl_keyseq_cxt_dispose (cxt) - _rl_keyseq_cxt *cxt; - { -- free (cxt); -+ xfree (cxt); - } - - void -@@ -618,7 +671,6 @@ _rl_dispatch_callback (cxt) - int nkey, r; - - /* For now */ --#if 1 - /* The first time this context is used, we want to read input and dispatch - on it. When traversing the chain of contexts back `up', we want to use - the value from the next context down. We're simulating recursion using -@@ -626,18 +678,22 @@ _rl_dispatch_callback (cxt) - if ((cxt->flags & KSEQ_DISPATCHED) == 0) - { - nkey = _rl_subseq_getchar (cxt->okey); -+ if (nkey < 0) -+ { -+ _rl_abort_internal (); -+ return -1; -+ } - r = _rl_dispatch_subseq (nkey, cxt->dmap, cxt->subseq_arg); - cxt->flags |= KSEQ_DISPATCHED; - } - else - r = cxt->childval; --#else -- r = _rl_dispatch_subseq (nkey, cxt->dmap, cxt->subseq_arg); --#endif - - /* For now */ -- r = _rl_subseq_result (r, cxt->oldmap, cxt->okey, (cxt->flags & KSEQ_SUBSEQ)); -+ if (r != -3) /* don't do this if we indicate there will be other matches */ -+ r = _rl_subseq_result (r, cxt->oldmap, cxt->okey, (cxt->flags & KSEQ_SUBSEQ)); - -+ RL_CHECK_SIGNALS (); - if (r == 0) /* success! */ - { - _rl_keyseq_chain_dispose (); -@@ -724,6 +780,8 @@ _rl_dispatch_subseq (key, map, got_subse - remember the last command executed in this variable. */ - if (rl_pending_input == 0 && map[key].function != rl_digit_argument) - rl_last_func = map[key].function; -+ -+ RL_CHECK_SIGNALS (); - } - else if (map[ANYOTHERKEY].function) - { -@@ -778,7 +836,7 @@ _rl_dispatch_subseq (key, map, got_subse - { - /* Return 0 only the first time, to indicate success to - _rl_callback_read_char. The rest of the time, we're called -- from _rl_dispatch_callback, so we return 3 to indicate -+ from _rl_dispatch_callback, so we return -3 to indicate - special handling is necessary. */ - r = RL_ISSTATE (RL_STATE_MULTIKEY) ? -3 : 0; - cxt = _rl_keyseq_cxt_alloc (); -@@ -842,7 +900,7 @@ _rl_subseq_result (r, map, key, got_subs - Keymap m; - int type, nt; - rl_command_func_t *func, *nf; -- -+ - if (r == -2) - /* We didn't match anything, and the keymap we're indexed into - shadowed a function previously bound to that prefix. Call -@@ -1116,6 +1174,10 @@ bind_arrow_keys () - - #if defined (VI_MODE) - bind_arrow_keys_internal (vi_movement_keymap); -+ /* Unbind vi_movement_keymap[ESC] to allow users to repeatedly hit ESC -+ in vi command mode while still allowing the arrow keys to work. */ -+ if (vi_movement_keymap[ESC].type == ISKMAP) -+ rl_bind_keyseq_in_map ("\033", (rl_command_func_t *)NULL, vi_movement_keymap); - bind_arrow_keys_internal (vi_insertion_keymap); - #endif - } -Index: gdb-7.2.90.20110703/readline/readline.h -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/readline.h 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/readline.h 2011-07-03 10:41:21.000000000 +0200 -@@ -1,24 +1,23 @@ - /* Readline.h -- the names of functions callable from within readline. */ - --/* Copyright (C) 1987-2005 Free Software Foundation, Inc. -+/* Copyright (C) 1987-2011 Free Software Foundation, Inc. - -- This file is part of the GNU Readline Library, a library for -- reading lines of text with interactive input and history editing. -+ This file is part of the GNU Readline Library (Readline), a library -+ for reading lines of text with interactive input and history editing. - -- The GNU Readline Library 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 2, or -+ Readline 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. - -- The GNU Readline Library 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 -+ Readline 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. - -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ You should have received a copy of the GNU General Public License -+ along with Readline. If not, see . -+*/ - - #if !defined (_READLINE_H_) - #define _READLINE_H_ -@@ -40,9 +39,9 @@ extern "C" { - #endif - - /* Hex-encoded Readline version number. */ --#define RL_READLINE_VERSION 0x0501 /* Readline 5.1 */ --#define RL_VERSION_MAJOR 5 --#define RL_VERSION_MINOR 1 -+#define RL_READLINE_VERSION 0x0602 /* Readline 6.2 */ -+#define RL_VERSION_MAJOR 6 -+#define RL_VERSION_MINOR 2 - - /* Readline data structures. */ - -@@ -96,6 +95,7 @@ extern int rl_forward_word PARAMS((int, - extern int rl_backward_word PARAMS((int, int)); - extern int rl_refresh_line PARAMS((int, int)); - extern int rl_clear_screen PARAMS((int, int)); -+extern int rl_skip_csi_sequence PARAMS((int, int)); - extern int rl_arrow_keys PARAMS((int, int)); - - /* Bindable commands for inserting and deleting text. */ -@@ -151,7 +151,9 @@ extern int rl_dump_variables PARAMS((int - extern int rl_complete PARAMS((int, int)); - extern int rl_possible_completions PARAMS((int, int)); - extern int rl_insert_completions PARAMS((int, int)); -+extern int rl_old_menu_complete PARAMS((int, int)); - extern int rl_menu_complete PARAMS((int, int)); -+extern int rl_backward_menu_complete PARAMS((int, int)); - - /* Bindable commands for killing and yanking text, and managing the kill ring. */ - extern int rl_kill_word PARAMS((int, int)); -@@ -233,6 +235,7 @@ extern int rl_vi_append_mode PARAMS((int - extern int rl_vi_append_eol PARAMS((int, int)); - extern int rl_vi_eof_maybe PARAMS((int, int)); - extern int rl_vi_insertion_mode PARAMS((int, int)); -+extern int rl_vi_insert_mode PARAMS((int, int)); - extern int rl_vi_movement_mode PARAMS((int, int)); - extern int rl_vi_arg_digit PARAMS((int, int)); - extern int rl_vi_change_case PARAMS((int, int)); -@@ -420,6 +423,7 @@ extern int rl_set_keyboard_input_timeout - extern void rl_extend_line_buffer PARAMS((int)); - extern int rl_ding PARAMS((void)); - extern int rl_alphabetic PARAMS((int)); -+extern void rl_free PARAMS((void *)); - - /* Readline signal handling, from signals.c */ - extern int rl_set_signals PARAMS((void)); -@@ -427,7 +431,9 @@ extern int rl_clear_signals PARAMS((void - extern void rl_cleanup_after_signal PARAMS((void)); - extern void rl_reset_after_signal PARAMS((void)); - extern void rl_free_line_state PARAMS((void)); -- -+ -+extern void rl_echo_signal_char PARAMS((int)); -+ - extern int rl_set_paren_blink_timeout PARAMS((int)); - - /* Undocumented. */ -@@ -493,6 +499,10 @@ extern const char *rl_readline_name; - readline (), and should not be assigned to directly. */ - extern char *rl_prompt; - -+/* The prompt string that is actually displayed by rl_redisplay. Public so -+ applications can more easily supply their own redisplay functions. */ -+extern char *rl_display_prompt; -+ - /* The line buffer that is in use. */ - extern char *rl_line_buffer; - -@@ -599,6 +609,10 @@ extern int rl_catch_sigwinch; - filename completer. */ - extern rl_compentry_func_t *rl_completion_entry_function; - -+/* Optional generator for menu completion. Default is -+ rl_completion_entry_function (rl_filename_completion_function). */ -+ extern rl_compentry_func_t *rl_menu_completion_entry_function; -+ - /* If rl_ignore_some_completions_function is non-NULL it is the address - of a function to call after all of the possible matches have been - generated, but before the actual completion is done to the input line. -@@ -652,18 +666,37 @@ extern const char *rl_special_prefixes; - completing on a directory name. The function is called with - the address of a string (the current directory name) as an arg. It - changes what is displayed when the possible completions are printed -- or inserted. */ -+ or inserted. The directory completion hook should perform -+ any necessary dequoting. This function should return 1 if it modifies -+ the directory name pointer passed as an argument. If the directory -+ completion hook returns 0, it should not modify the directory name -+ pointer passed as an argument. */ - extern rl_icppfunc_t *rl_directory_completion_hook; - - /* If non-zero, this is the address of a function to call when completing - a directory name. This function takes the address of the directory name - to be modified as an argument. Unlike rl_directory_completion_hook, it - only modifies the directory name used in opendir(2), not what is displayed -- when the possible completions are printed or inserted. It is called -- before rl_directory_completion_hook. I'm not happy with how this works -- yet, so it's undocumented. */ -+ when the possible completions are printed or inserted. If set, it takes -+ precedence over rl_directory_completion_hook. The directory rewrite -+ hook should perform any necessary dequoting. This function has the same -+ return value properties as the directory_completion_hook. -+ -+ I'm not happy with how this works yet, so it's undocumented. I'm trying -+ it in bash to see how well it goes. */ - extern rl_icppfunc_t *rl_directory_rewrite_hook; - -+/* If non-zero, this is the address of a function to call when reading -+ directory entries from the filesystem for completion and comparing -+ them to the partial word to be completed. The function should -+ either return its first argument (if no conversion takes place) or -+ newly-allocated memory. This can, for instance, convert filenames -+ between character sets for comparison against what's typed at the -+ keyboard. The returned value is what is added to the list of -+ matches. The second argument is the length of the filename to be -+ converted. */ -+extern rl_dequote_func_t *rl_filename_rewrite_hook; -+ - /* Backwards compatibility with previous versions of readline. */ - #define rl_symbolic_link_hook rl_directory_completion_hook - -@@ -713,6 +746,9 @@ extern int rl_attempted_completion_over; - functions. */ - extern int rl_completion_type; - -+/* Set to the last key used to invoke one of the completion functions */ -+extern int rl_completion_invoking_key; -+ - /* Up to this many items will be displayed in response to a - possible-completions call. After that, we ask the user if she - is sure she wants to see them all. The default value is 100. */ -@@ -739,6 +775,9 @@ extern int rl_completion_found_quote; - application-specific completion function. */ - extern int rl_completion_suppress_quote; - -+/* If non-zero, readline will sort the completion matches. On by default. */ -+extern int rl_sort_completion_matches; -+ - /* If non-zero, a slash will be appended to completed filenames that are - symbolic links to directory names, subject to the value of the - mark-directories variable (which is user-settable). This exists so -@@ -757,6 +796,10 @@ extern int rl_ignore_completion_duplicat - completion character will be inserted as any other. */ - extern int rl_inhibit_completion; - -+/* Input error; can be returned by (*rl_getc_function) if readline is reading -+ a top-level command (RL_ISSTATE (RL_STATE_READCMD)). */ -+#define READERR (-2) -+ - /* Definitions available for use by readline clients. */ - #define RL_PROMPT_START_IGNORE '\001' - #define RL_PROMPT_END_IGNORE '\002' -@@ -770,31 +813,32 @@ extern int rl_inhibit_completion; - /* Possible state values for rl_readline_state */ - #define RL_STATE_NONE 0x000000 /* no state; before first call */ - --#define RL_STATE_INITIALIZING 0x000001 /* initializing */ --#define RL_STATE_INITIALIZED 0x000002 /* initialization done */ --#define RL_STATE_TERMPREPPED 0x000004 /* terminal is prepped */ --#define RL_STATE_READCMD 0x000008 /* reading a command key */ --#define RL_STATE_METANEXT 0x000010 /* reading input after ESC */ --#define RL_STATE_DISPATCHING 0x000020 /* dispatching to a command */ --#define RL_STATE_MOREINPUT 0x000040 /* reading more input in a command function */ --#define RL_STATE_ISEARCH 0x000080 /* doing incremental search */ --#define RL_STATE_NSEARCH 0x000100 /* doing non-inc search */ --#define RL_STATE_SEARCH 0x000200 /* doing a history search */ --#define RL_STATE_NUMERICARG 0x000400 /* reading numeric argument */ --#define RL_STATE_MACROINPUT 0x000800 /* getting input from a macro */ --#define RL_STATE_MACRODEF 0x001000 /* defining keyboard macro */ --#define RL_STATE_OVERWRITE 0x002000 /* overwrite mode */ --#define RL_STATE_COMPLETING 0x004000 /* doing completion */ --#define RL_STATE_SIGHANDLER 0x008000 /* in readline sighandler */ --#define RL_STATE_UNDOING 0x010000 /* doing an undo */ --#define RL_STATE_INPUTPENDING 0x020000 /* rl_execute_next called */ --#define RL_STATE_TTYCSAVED 0x040000 /* tty special chars saved */ --#define RL_STATE_CALLBACK 0x080000 /* using the callback interface */ --#define RL_STATE_VIMOTION 0x100000 /* reading vi motion arg */ --#define RL_STATE_MULTIKEY 0x200000 /* reading multiple-key command */ --#define RL_STATE_VICMDONCE 0x400000 /* entered vi command mode at least once */ -+#define RL_STATE_INITIALIZING 0x0000001 /* initializing */ -+#define RL_STATE_INITIALIZED 0x0000002 /* initialization done */ -+#define RL_STATE_TERMPREPPED 0x0000004 /* terminal is prepped */ -+#define RL_STATE_READCMD 0x0000008 /* reading a command key */ -+#define RL_STATE_METANEXT 0x0000010 /* reading input after ESC */ -+#define RL_STATE_DISPATCHING 0x0000020 /* dispatching to a command */ -+#define RL_STATE_MOREINPUT 0x0000040 /* reading more input in a command function */ -+#define RL_STATE_ISEARCH 0x0000080 /* doing incremental search */ -+#define RL_STATE_NSEARCH 0x0000100 /* doing non-inc search */ -+#define RL_STATE_SEARCH 0x0000200 /* doing a history search */ -+#define RL_STATE_NUMERICARG 0x0000400 /* reading numeric argument */ -+#define RL_STATE_MACROINPUT 0x0000800 /* getting input from a macro */ -+#define RL_STATE_MACRODEF 0x0001000 /* defining keyboard macro */ -+#define RL_STATE_OVERWRITE 0x0002000 /* overwrite mode */ -+#define RL_STATE_COMPLETING 0x0004000 /* doing completion */ -+#define RL_STATE_SIGHANDLER 0x0008000 /* in readline sighandler */ -+#define RL_STATE_UNDOING 0x0010000 /* doing an undo */ -+#define RL_STATE_INPUTPENDING 0x0020000 /* rl_execute_next called */ -+#define RL_STATE_TTYCSAVED 0x0040000 /* tty special chars saved */ -+#define RL_STATE_CALLBACK 0x0080000 /* using the callback interface */ -+#define RL_STATE_VIMOTION 0x0100000 /* reading vi motion arg */ -+#define RL_STATE_MULTIKEY 0x0200000 /* reading multiple-key command */ -+#define RL_STATE_VICMDONCE 0x0400000 /* entered vi command mode at least once */ -+#define RL_STATE_REDISPLAYING 0x0800000 /* updating terminal display */ - --#define RL_STATE_DONE 0x800000 /* done; accepted line */ -+#define RL_STATE_DONE 0x1000000 /* done; accepted line */ - - #define RL_SETSTATE(x) (rl_readline_state |= (x)) - #define RL_UNSETSTATE(x) (rl_readline_state &= ~(x)) -Index: gdb-7.2.90.20110703/readline/rlconf.h -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/rlconf.h 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/rlconf.h 2011-07-03 10:41:21.000000000 +0200 -@@ -1,25 +1,23 @@ - /* rlconf.h -- readline configuration definitions */ - --/* Copyright (C) 1994 Free Software Foundation, Inc. -+/* Copyright (C) 1992-2009 Free Software Foundation, Inc. - -- This file contains the Readline Library (the Library), a set of -- routines for providing Emacs style line input to programs that ask -- for it. -+ This file is part of the GNU Readline Library (Readline), a library -+ for reading lines of text with interactive input and history editing. - -- The Library is free software; you can redistribute it and/or modify -+ Readline 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 2, or (at your option) -- any later version. -+ the Free Software Foundation, either version 3 of the License, or -+ (at your option) any later version. - -- The Library 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. -- -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ Readline 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 Readline. If not, see . -+*/ - - #if !defined (_RLCONF_H_) - #define _RLCONF_H_ -@@ -37,9 +35,12 @@ - /* Ugly but working hack for binding prefix meta. */ - #define PREFIX_META_HACK - --/* The final, last-ditch effort file name for an init file. */ -+/* The next-to-last-ditch effort file name for a user-specific init file. */ - #define DEFAULT_INPUTRC "~/.inputrc" - -+/* The ultimate last-ditch filenname for an init file -- system-wide. */ -+#define SYS_INPUTRC "/etc/inputrc" -+ - /* If defined, expand tabs to spaces. */ - #define DISPLAY_TABS - -Index: gdb-7.2.90.20110703/readline/rldefs.h -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/rldefs.h 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/rldefs.h 2011-07-03 10:41:21.000000000 +0200 -@@ -2,26 +2,24 @@ - for readline. This should be included after any files that define - system-specific constants like _POSIX_VERSION or USG. */ - --/* Copyright (C) 1987-2005 Free Software Foundation, Inc. -+/* Copyright (C) 1987-2009 Free Software Foundation, Inc. - -- This file contains the Readline Library (the Library), a set of -- routines for providing Emacs style line input to programs that ask -- for it. -+ This file is part of the GNU Readline Library (Readline), a library -+ for reading lines of text with interactive input and history editing. - -- The Library is free software; you can redistribute it and/or modify -+ Readline 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 2, or (at your option) -- any later version. -+ the Free Software Foundation, either version 3 of the License, or -+ (at your option) any later version. - -- The Library 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. -- -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ Readline 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 Readline. If not, see . -+*/ - - #if !defined (_RLDEFS_H_) - #define _RLDEFS_H_ -@@ -32,6 +30,10 @@ - - #include "rlstdc.h" - -+#if defined (STRCOLL_BROKEN) -+# undef HAVE_STRCOLL -+#endif -+ - #if defined (_POSIX_VERSION) && !defined (TERMIOS_MISSING) - # define TERMIOS_TTY_DRIVER - #else -Index: gdb-7.2.90.20110703/readline/rlmbutil.h -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/rlmbutil.h 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/rlmbutil.h 2011-07-03 10:41:21.000000000 +0200 -@@ -1,24 +1,23 @@ - /* rlmbutil.h -- utility functions for multibyte characters. */ - --/* Copyright (C) 2001, 2003 Free Software Foundation, Inc. -+/* Copyright (C) 2001-2009 Free Software Foundation, Inc. - -- This file is part of the GNU Readline Library, a library for -- reading lines of text with interactive input and history editing. -+ This file is part of the GNU Readline Library (Readline), a library -+ for reading lines of text with interactive input and history editing. - -- The GNU Readline Library 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 2, or -+ Readline 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. - -- The GNU Readline Library 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 -+ Readline 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. - -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ You should have received a copy of the GNU General Public License -+ along with Readline. If not, see . -+*/ - - #if !defined (_RL_MBUTIL_H_) - #define _RL_MBUTIL_H_ -@@ -30,22 +29,21 @@ - /************************************************/ - - /* For platforms which support the ISO C amendement 1 functionality we -- support user defined character classes. -- -- Some platforms have the multibyte functions such as mbsrtowcs but -- are lacking the multitype type mbstate_t. BeOS (unknown version) -- and HP/UX 11.23 without _XOPEN_SOURCE=500 are like this. -- -- We really need mbstate_t type to operate properly. For example, see -- compute_lcd_of_matches, where two mbstate_t's are active at the same -- time. So we require both the functions and the mbstate_t type in -- order to enable multibyte support. */ -- -+ support user defined character classes. */ - /* Solaris 2.5 has a bug: must be included before . */ --#if defined (HAVE_WCTYPE_H) && defined (HAVE_WCHAR_H) -+#if defined (HAVE_WCTYPE_H) && defined (HAVE_WCHAR_H) && defined (HAVE_LOCALE_H) - # include - # include --# if defined (HAVE_MBSTATE_T) && defined (HAVE_MBSRTOWCS) && defined (HAVE_MBRTOWC) && defined (HAVE_MBRLEN) && defined (HAVE_WCWIDTH) -+# if defined (HAVE_ISWCTYPE) && \ -+ defined (HAVE_ISWLOWER) && \ -+ defined (HAVE_ISWUPPER) && \ -+ defined (HAVE_MBSRTOWCS) && \ -+ defined (HAVE_MBRTOWC) && \ -+ defined (HAVE_MBRLEN) && \ -+ defined (HAVE_TOWLOWER) && \ -+ defined (HAVE_TOWUPPER) && \ -+ defined (HAVE_WCHAR_T) && \ -+ defined (HAVE_WCWIDTH) - /* system is supposed to support XPG5 */ - # define HANDLE_MULTIBYTE 1 - # endif -Index: gdb-7.2.90.20110703/readline/rlprivate.h -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/rlprivate.h 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/rlprivate.h 2011-07-03 10:41:21.000000000 +0200 -@@ -1,25 +1,24 @@ - /* rlprivate.h -- functions and variables global to the readline library, - but not intended for use by applications. */ - --/* Copyright (C) 1999-2005 Free Software Foundation, Inc. -+/* Copyright (C) 1999-2010 Free Software Foundation, Inc. - -- This file is part of the GNU Readline Library, a library for -- reading lines of text with interactive input and history editing. -+ This file is part of the GNU Readline Library (Readline), a library -+ for reading lines of text with interactive input and history editing. - -- The GNU Readline Library 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 2, or -+ Readline 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. - -- The GNU Readline Library 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 -+ Readline 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. - -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ You should have received a copy of the GNU General Public License -+ along with Readline. If not, see . -+*/ - - #if !defined (_RL_PRIVATE_H_) - #define _RL_PRIVATE_H_ -@@ -30,6 +29,21 @@ - - /************************************************************************* - * * -+ * Convenience definitions * -+ * * -+ *************************************************************************/ -+ -+#define EMACS_MODE() (rl_editing_mode == emacs_mode) -+#define VI_COMMAND_MODE() (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap) -+#define VI_INSERT_MODE() (rl_editing_mode == vi_mode && _rl_keymap == vi_insertion_keymap) -+ -+#define RL_CHECK_SIGNALS() \ -+ do { \ -+ if (_rl_caught_signal) _rl_signal_handler (_rl_caught_signal); \ -+ } while (0) -+ -+/************************************************************************* -+ * * - * Global structs undocumented in texinfo manual and not in readline.h * - * * - *************************************************************************/ -@@ -42,6 +56,7 @@ - #define SF_REVERSE 0x01 - #define SF_FOUND 0x02 - #define SF_FAILED 0x04 -+#define SF_CHGKMAP 0x08 - - typedef struct __rl_search_context - { -@@ -65,6 +80,9 @@ typedef struct __rl_search_context - - UNDO_LIST *save_undo_list; - -+ Keymap keymap; /* used when dispatching commands in search string */ -+ Keymap okeymap; /* original keymap */ -+ - int history_pos; - int direction; - -@@ -106,7 +124,28 @@ typedef struct __rl_keyseq_context - int childval; - } _rl_keyseq_cxt; - -- /* fill in more as needed */ -+/* vi-mode commands that use result of motion command to define boundaries */ -+#define VIM_DELETE 0x01 -+#define VIM_CHANGE 0x02 -+#define VIM_YANK 0x04 -+ -+/* various states for vi-mode commands that use motion commands. reflects -+ RL_READLINE_STATE */ -+#define VMSTATE_READ 0x01 -+#define VMSTATE_NUMARG 0x02 -+ -+typedef struct __rl_vimotion_context -+{ -+ int op; -+ int state; -+ int flags; /* reserved */ -+ _rl_arg_cxt ncxt; -+ int numeric_arg; -+ int start, end; /* rl_point, rl_end */ -+ int key, motion; /* initial key, motion command */ -+} _rl_vimotion_cxt; -+ -+/* fill in more as needed */ - /* `Generic' callback data and functions */ - typedef struct __rl_callback_generic_arg - { -@@ -139,12 +178,9 @@ extern int rl_visible_stats; - extern int rl_line_buffer_len; - extern int rl_arg_sign; - extern int rl_visible_prompt_length; --extern int readline_echoing_p; - extern int rl_key_sequence_length; - extern int rl_byte_oriented; - --extern _rl_keyseq_cxt *_rl_kscxt; -- - /* display.c */ - extern int rl_display_fixed; - -@@ -206,6 +242,7 @@ extern void _rl_callback_data_dispose PA - /* bind.c */ - - /* complete.c */ -+extern void _rl_reset_completion_state PARAMS((void)); - extern char _rl_find_completion_word PARAMS((int *, int *)); - extern void _rl_free_match_list PARAMS((char **)); - -@@ -261,6 +298,8 @@ extern void _rl_start_using_history PARA - extern int _rl_free_saved_history_line PARAMS((void)); - extern void _rl_set_insert_mode PARAMS((int, int)); - -+extern void _rl_revert_all_lines PARAMS((void)); -+ - /* nls.c */ - extern int _rl_init_eightbit PARAMS((void)); - -@@ -281,6 +320,14 @@ extern int _rl_restore_tty_signals PARAM - /* search.c */ - extern int _rl_nsearch_callback PARAMS((_rl_search_cxt *)); - -+/* signals.c */ -+extern void _rl_signal_handler PARAMS((int)); -+ -+extern void _rl_block_sigint PARAMS((void)); -+extern void _rl_release_sigint PARAMS((void)); -+extern void _rl_block_sigwinch PARAMS((void)); -+extern void _rl_release_sigwinch PARAMS((void)); -+ - /* terminal.c */ - extern void _rl_get_screen_size PARAMS((int, int)); - extern int _rl_init_terminal_io PARAMS((const char *)); -@@ -298,6 +345,7 @@ extern void _rl_set_cursor PARAMS((int, - /* text.c */ - extern void _rl_fix_point PARAMS((int)); - extern int _rl_replace_text PARAMS((const char *, int, int)); -+extern int _rl_forward_char_internal PARAMS((int)); - extern int _rl_insert_char PARAMS((int, int)); - extern int _rl_overwrite_char PARAMS((int, int)); - extern int _rl_overwrite_rubout PARAMS((int, int)); -@@ -309,8 +357,25 @@ extern int _rl_char_search_internal PARA - #endif - extern int _rl_set_mark_at_pos PARAMS((int)); - -+/* undo.c */ -+extern UNDO_LIST *_rl_copy_undo_entry PARAMS((UNDO_LIST *)); -+extern UNDO_LIST *_rl_copy_undo_list PARAMS((UNDO_LIST *)); -+ - /* util.c */ -+#if defined (USE_VARARGS) && defined (PREFER_STDARG) -+extern void _rl_ttymsg (const char *, ...) __attribute__((__format__ (printf, 1, 2))); -+extern void _rl_errmsg (const char *, ...) __attribute__((__format__ (printf, 1, 2))); -+extern void _rl_trace (const char *, ...) __attribute__((__format__ (printf, 1, 2))); -+#else -+extern void _rl_ttymsg (); -+extern void _rl_errmsg (); -+extern void _rl_trace (); -+#endif -+ -+extern int _rl_tropen PARAMS((void)); -+ - extern int _rl_abort_internal PARAMS((void)); -+extern int _rl_null_function PARAMS((int, int)); - extern char *_rl_strindex PARAMS((const char *, const char *)); - extern int _rl_qsort_string_compare PARAMS((char **, char **)); - extern int (_rl_uppercase_p) PARAMS((int)); -@@ -327,14 +392,15 @@ extern void _rl_vi_reset_last PARAMS((vo - extern void _rl_vi_set_last PARAMS((int, int, int)); - extern int _rl_vi_textmod_command PARAMS((int)); - extern void _rl_vi_done_inserting PARAMS((void)); -+extern int _rl_vi_domove_callback PARAMS((_rl_vimotion_cxt *)); - - /************************************************************************* - * Undocumented private variables * - *************************************************************************/ - - /* bind.c */ --extern const char *_rl_possible_control_prefixes[]; --extern const char *_rl_possible_meta_prefixes[]; -+extern const char * const _rl_possible_control_prefixes[]; -+extern const char * const _rl_possible_meta_prefixes[]; - - /* callback.c */ - extern _rl_callback_func_t *_rl_callback_func; -@@ -345,17 +411,21 @@ extern int _rl_complete_show_all; - extern int _rl_complete_show_unmodified; - extern int _rl_complete_mark_directories; - extern int _rl_complete_mark_symlink_dirs; -+extern int _rl_completion_prefix_display_length; -+extern int _rl_completion_columns; - extern int _rl_print_completions_horizontally; - extern int _rl_completion_case_fold; -+extern int _rl_completion_case_map; - extern int _rl_match_hidden_files; - extern int _rl_page_completions; -+extern int _rl_skip_completed_text; -+extern int _rl_menu_complete_prefix_first; - - /* display.c */ - extern int _rl_vis_botlin; - extern int _rl_last_c_pos; - extern int _rl_suppress_redisplay; - extern int _rl_want_redisplay; --extern char *rl_display_prompt; - - /* isearch.c */ - extern char *_rl_isearch_terminators; -@@ -372,6 +442,7 @@ extern int _rl_history_saved_point; - extern _rl_arg_cxt _rl_argcxt; - - /* readline.c */ -+extern int _rl_echoing_p; - extern int _rl_horizontal_scroll_mode; - extern int _rl_mark_modified_lines; - extern int _rl_bell_preference; -@@ -379,6 +450,8 @@ extern int _rl_meta_flag; - extern int _rl_convert_meta_chars_to_ascii; - extern int _rl_output_meta_chars; - extern int _rl_bind_stty_chars; -+extern int _rl_revert_all_at_newline; -+extern int _rl_echo_control_chars; - extern char *_rl_comment_begin; - extern unsigned char _rl_parsing_conditionalized_out; - extern Keymap _rl_keymap; -@@ -386,11 +459,22 @@ extern FILE *_rl_in_stream; - extern FILE *_rl_out_stream; - extern int _rl_last_command_was_kill; - extern int _rl_eof_char; --extern procenv_t readline_top_level; -+extern procenv_t _rl_top_level; -+extern _rl_keyseq_cxt *_rl_kscxt; - - /* search.c */ - extern _rl_search_cxt *_rl_nscxt; - -+/* signals.c */ -+extern int _rl_interrupt_immediately; -+extern int volatile _rl_caught_signal; -+ -+extern int _rl_echoctl; -+ -+extern int _rl_intr_char; -+extern int _rl_quit_char; -+extern int _rl_susp_char; -+ - /* terminal.c */ - extern int _rl_enable_keypad; - extern int _rl_enable_meta; -@@ -404,6 +488,7 @@ extern char *_rl_term_up; - extern char *_rl_term_dc; - extern char *_rl_term_cr; - extern char *_rl_term_IC; -+extern char *_rl_term_forward_char; - extern int _rl_screenheight; - extern int _rl_screenwidth; - extern int _rl_screenchars; -@@ -416,5 +501,6 @@ extern int _rl_undo_group_level; - - /* vi_mode.c */ - extern int _rl_vi_last_command; -+extern _rl_vimotion_cxt *_rl_vimvcxt; - - #endif /* _RL_PRIVATE_H_ */ -Index: gdb-7.2.90.20110703/readline/rlshell.h -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/rlshell.h 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/rlshell.h 2011-07-03 10:41:21.000000000 +0200 -@@ -1,24 +1,23 @@ - /* rlshell.h -- utility functions normally provided by bash. */ - --/* Copyright (C) 1999 Free Software Foundation, Inc. -+/* Copyright (C) 1999-2009 Free Software Foundation, Inc. - -- This file is part of the GNU Readline Library, a library for -- reading lines of text with interactive input and history editing. -+ This file is part of the GNU Readline Library (Readline), a library -+ for reading lines of text with interactive input and history editing. - -- The GNU Readline Library 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 2, or -+ Readline 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. - -- The GNU Readline Library 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 -+ Readline 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. - -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ You should have received a copy of the GNU General Public License -+ along with Readline. If not, see . -+*/ - - #if !defined (_RL_SHELL_H_) - #define _RL_SHELL_H_ -Index: gdb-7.2.90.20110703/readline/rlstdc.h -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/rlstdc.h 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/rlstdc.h 2011-07-03 10:41:21.000000000 +0200 -@@ -1,23 +1,23 @@ --/* stdc.h -- macros to make source compile on both ANSI C and K&R C -- compilers. */ -+/* stdc.h -- macros to make source compile on both ANSI C and K&R C compilers. */ - --/* Copyright (C) 1993 Free Software Foundation, Inc. -+/* Copyright (C) 1993-2009 Free Software Foundation, Inc. - -- This file is part of GNU Bash, the Bourne Again SHell. -+ This file is part of the GNU Readline Library (Readline), a library -+ for reading lines of text with interactive input and history editing. - -- Bash 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 2, or (at your option) -- any later version. -- -- Bash 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. -+ Readline 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. -+ -+ Readline 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 Bash; see the file COPYING. If not, write to the Free -- Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ along with Readline. If not, see . -+*/ - - #if !defined (_RL_STDC_H_) - #define _RL_STDC_H_ -Index: gdb-7.2.90.20110703/readline/rltty.c -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/rltty.c 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/rltty.c 2011-07-03 10:41:21.000000000 +0200 -@@ -3,23 +3,23 @@ - - /* Copyright (C) 1992-2005 Free Software Foundation, Inc. - -- This file is part of the GNU Readline Library, a library for -- reading lines of text with interactive input and history editing. -+ This file is part of the GNU Readline Library (Readline), a library -+ for reading lines of text with interactive input and history editing. - -- The GNU Readline Library 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 2, or -+ Readline 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. - -- The GNU Readline Library 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 -+ Readline 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. - -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ You should have received a copy of the GNU General Public License -+ along with Readline. If not, see . -+*/ -+ - #define READLINE_LIBRARY - - #if defined (HAVE_CONFIG_H) -@@ -52,77 +52,10 @@ extern int errno; - rl_vintfunc_t *rl_prep_term_function = rl_prep_terminal; - rl_voidfunc_t *rl_deprep_term_function = rl_deprep_terminal; - --void _rl_block_sigint PARAMS((void)); --void _rl_release_sigint PARAMS((void)); -- - static void set_winsize PARAMS((int)); - - /* **************************************************************** */ - /* */ --/* Signal Management */ --/* */ --/* **************************************************************** */ -- --#if defined (HAVE_POSIX_SIGNALS) --static sigset_t sigint_set, sigint_oset; --#else /* !HAVE_POSIX_SIGNALS */ --# if defined (HAVE_BSD_SIGNALS) --static int sigint_oldmask; --# endif /* HAVE_BSD_SIGNALS */ --#endif /* !HAVE_POSIX_SIGNALS */ -- --static int sigint_blocked; -- --/* Cause SIGINT to not be delivered until the corresponding call to -- _rl_release_sigint(). */ --void --_rl_block_sigint () --{ -- if (sigint_blocked) -- return; -- --#if defined (HAVE_POSIX_SIGNALS) -- sigemptyset (&sigint_set); -- sigemptyset (&sigint_oset); -- sigaddset (&sigint_set, SIGINT); -- sigprocmask (SIG_BLOCK, &sigint_set, &sigint_oset); --#else /* !HAVE_POSIX_SIGNALS */ --# if defined (HAVE_BSD_SIGNALS) -- sigint_oldmask = sigblock (sigmask (SIGINT)); --# else /* !HAVE_BSD_SIGNALS */ --# if defined (HAVE_USG_SIGHOLD) -- sighold (SIGINT); --# endif /* HAVE_USG_SIGHOLD */ --# endif /* !HAVE_BSD_SIGNALS */ --#endif /* !HAVE_POSIX_SIGNALS */ -- -- sigint_blocked = 1; --} -- --/* Allow SIGINT to be delivered. */ --void --_rl_release_sigint () --{ -- if (sigint_blocked == 0) -- return; -- --#if defined (HAVE_POSIX_SIGNALS) -- sigprocmask (SIG_SETMASK, &sigint_oset, (sigset_t *)NULL); --#else --# if defined (HAVE_BSD_SIGNALS) -- sigsetmask (sigint_oldmask); --# else /* !HAVE_BSD_SIGNALS */ --# if defined (HAVE_USG_SIGHOLD) -- sigrelse (SIGINT); --# endif /* HAVE_USG_SIGHOLD */ --# endif /* !HAVE_BSD_SIGNALS */ --#endif /* !HAVE_POSIX_SIGNALS */ -- -- sigint_blocked = 0; --} -- --/* **************************************************************** */ --/* */ - /* Saving and Restoring the TTY */ - /* */ - /* **************************************************************** */ -@@ -204,8 +137,9 @@ save_tty_chars (tiop) - - if (tiop->flags & TCHARS_SET) - { -- _rl_tty_chars.t_intr = tiop->tchars.t_intrc; -- _rl_tty_chars.t_quit = tiop->tchars.t_quitc; -+ _rl_intr_char = _rl_tty_chars.t_intr = tiop->tchars.t_intrc; -+ _rl_quit_char = _rl_tty_chars.t_quit = tiop->tchars.t_quitc; -+ - _rl_tty_chars.t_start = tiop->tchars.t_startc; - _rl_tty_chars.t_stop = tiop->tchars.t_stopc; - _rl_tty_chars.t_eof = tiop->tchars.t_eofc; -@@ -215,7 +149,8 @@ save_tty_chars (tiop) - - if (tiop->flags & LTCHARS_SET) - { -- _rl_tty_chars.t_susp = tiop->ltchars.t_suspc; -+ _rl_susp_char = _rl_tty_chars.t_susp = tiop->ltchars.t_suspc; -+ - _rl_tty_chars.t_dsusp = tiop->ltchars.t_dsuspc; - _rl_tty_chars.t_reprint = tiop->ltchars.t_rprntc; - _rl_tty_chars.t_flush = tiop->ltchars.t_flushc; -@@ -268,7 +203,7 @@ set_tty_settings (tty, tiop) - ioctl (tty, TIOCSETN, &(tiop->sgttyb)); - tiop->flags &= ~SGTTY_SET; - } -- readline_echoing_p = 1; -+ _rl_echoing_p = 1; - - #if defined (TIOCLSET) - if (tiop->flags & LFLAG_SET) -@@ -302,7 +237,8 @@ prepare_terminal_settings (meta_flag, ol - int meta_flag; - TIOTYPE oldtio, *tiop; - { -- readline_echoing_p = (oldtio.sgttyb.sg_flags & ECHO); -+ _rl_echoing_p = (oldtio.sgttyb.sg_flags & ECHO); -+ _rl_echoctl = (oldtio.sgttyb.sg_flags & ECHOCTL); - - /* Copy the original settings to the structure we're going to use for - our settings. */ -@@ -433,10 +369,10 @@ save_tty_chars (tiop) - #ifdef VREPRINT - _rl_tty_chars.t_reprint = tiop->c_cc[VREPRINT]; - #endif -- _rl_tty_chars.t_intr = tiop->c_cc[VINTR]; -- _rl_tty_chars.t_quit = tiop->c_cc[VQUIT]; -+ _rl_intr_char = _rl_tty_chars.t_intr = tiop->c_cc[VINTR]; -+ _rl_quit_char = _rl_tty_chars.t_quit = tiop->c_cc[VQUIT]; - #ifdef VSUSP -- _rl_tty_chars.t_susp = tiop->c_cc[VSUSP]; -+ _rl_susp_char = _rl_tty_chars.t_susp = tiop->c_cc[VSUSP]; - #endif - #ifdef VDSUSP - _rl_tty_chars.t_dsusp = tiop->c_cc[VDSUSP]; -@@ -464,7 +400,7 @@ static void - rltty_warning (msg) - char *msg; - { -- fprintf (stderr, "readline: warning: %s\n", msg); -+ _rl_errmsg ("warning: %s", msg); - } - #endif - -@@ -475,7 +411,7 @@ TIOTYPE *tp; - { - if ((tp->c_oflag & OPOST) == 0) - { -- rltty_warning ("turning on OPOST for terminal\r"); -+ _rl_errmsg ("warning: turning on OPOST for terminal\r"); - tp->c_oflag |= OPOST|ONLCR; - } - } -@@ -500,8 +436,8 @@ _get_tty_settings (tty, tiop) - } - if (OUTPUT_BEING_FLUSHED (tiop)) - { --#if defined (FLUSHO) && defined (_AIX41) -- rltty_warning ("turning off output flushing"); -+#if defined (FLUSHO) -+ _rl_errmsg ("warning: turning off output flushing"); - tiop->c_lflag &= ~FLUSHO; - break; - #else -@@ -580,7 +516,10 @@ prepare_terminal_settings (meta_flag, ol - int meta_flag; - TIOTYPE oldtio, *tiop; - { -- readline_echoing_p = (oldtio.c_lflag & ECHO); -+ _rl_echoing_p = (oldtio.c_lflag & ECHO); -+#if defined (ECHOCTL) -+ _rl_echoctl = (oldtio.c_lflag & ECHOCTL); -+#endif - - tiop->c_lflag &= ~(ICANON | ECHO); - -@@ -643,7 +582,7 @@ void - rl_prep_terminal (meta_flag) - int meta_flag; - { -- readline_echoing_p = 1; -+ _rl_echoing_p = 1; - } - - void -@@ -665,17 +604,19 @@ rl_prep_terminal (meta_flag) - /* Try to keep this function from being INTerrupted. */ - _rl_block_sigint (); - -- tty = fileno (rl_instream); -+ tty = rl_instream ? fileno (rl_instream) : fileno (stdin); - - if (get_tty_settings (tty, &tio) < 0) - { - #if defined (ENOTSUP) -- /* MacOS X, at least, lies about the value of errno if tcgetattr fails. */ -- if (errno == ENOTTY || errno == ENOTSUP) -+ /* MacOS X and Linux, at least, lie about the value of errno if -+ tcgetattr fails. */ -+ if (errno == ENOTTY || errno == EINVAL || errno == ENOTSUP) - #else -- if (errno == ENOTTY) -+ if (errno == ENOTTY || errno == EINVAL) - #endif -- readline_echoing_p = 1; /* XXX */ -+ _rl_echoing_p = 1; /* XXX */ -+ - _rl_release_sigint (); - return; - } -@@ -737,7 +678,7 @@ rl_deprep_terminal () - /* Try to keep this function from being interrupted. */ - _rl_block_sigint (); - -- tty = fileno (rl_instream); -+ tty = rl_instream ? fileno (rl_instream) : fileno (stdout); - - if (_rl_enable_keypad) - _rl_control_keypad (0); -@@ -862,7 +803,7 @@ set_special_char (kmap, tiop, sc, func) - } - - #define RESET_SPECIAL(c) \ -- if (c != -1 && kmap[(unsigned char)c].type == ISFUNC) -+ if (c != -1 && kmap[(unsigned char)c].type == ISFUNC) \ - kmap[(unsigned char)c].function = rl_insert; - - static void -@@ -933,7 +874,6 @@ rltty_set_default_bindings (kmap) - #if !defined (NO_TTY_DRIVER) - TIOTYPE ttybuff; - int tty; -- static int called = 0; - - tty = fileno (rl_instream); - -Index: gdb-7.2.90.20110703/readline/rltty.h -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/rltty.h 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/rltty.h 2011-07-03 10:41:21.000000000 +0200 -@@ -1,25 +1,23 @@ - /* rltty.h - tty driver-related definitions used by some library files. */ - --/* Copyright (C) 1995 Free Software Foundation, Inc. -+/* Copyright (C) 1995-2009 Free Software Foundation, Inc. - -- This file contains the Readline Library (the Library), a set of -- routines for providing Emacs style line input to programs that ask -- for it. -+ This file is part of the GNU Readline Library (Readline), a library -+ for reading lines of text with interactive input and history editing. - -- The Library is free software; you can redistribute it and/or modify -+ Readline 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 2, or (at your option) -- any later version. -+ the Free Software Foundation, either version 3 of the License, or -+ (at your option) any later version. - -- The Library 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. -- -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ Readline 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 Readline. If not, see . -+*/ - - #if !defined (_RLTTY_H_) - #define _RLTTY_H_ -@@ -79,7 +77,4 @@ typedef struct _rl_tty_chars { - unsigned char t_status; - } _RL_TTY_CHARS; - --extern void _rl_block_sigint PARAMS((void)); --extern void _rl_release_sigint PARAMS((void)); -- - #endif /* _RLTTY_H_ */ -Index: gdb-7.2.90.20110703/readline/rltypedefs.h -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/rltypedefs.h 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/rltypedefs.h 2011-07-03 10:41:21.000000000 +0200 -@@ -1,24 +1,23 @@ - /* rltypedefs.h -- Type declarations for readline functions. */ - --/* Copyright (C) 2000-2004 Free Software Foundation, Inc. -+/* Copyright (C) 2000-2009 Free Software Foundation, Inc. - -- This file is part of the GNU Readline Library, a library for -- reading lines of text with interactive input and history editing. -+ This file is part of the GNU Readline Library (Readline), a library -+ for reading lines of text with interactive input and history editing. - -- The GNU Readline Library 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 2, or -+ Readline 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. - -- The GNU Readline Library 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 -+ Readline 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. - -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ You should have received a copy of the GNU General Public License -+ along with Readline. If not, see . -+*/ - - #ifndef _RL_TYPEDEFS_H_ - #define _RL_TYPEDEFS_H_ -Index: gdb-7.2.90.20110703/readline/rlwinsize.h -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/rlwinsize.h 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/rlwinsize.h 2011-07-03 10:41:21.000000000 +0200 -@@ -1,26 +1,24 @@ - /* rlwinsize.h -- an attempt to isolate some of the system-specific defines - for `struct winsize' and TIOCGWINSZ. */ - --/* Copyright (C) 1997 Free Software Foundation, Inc. -+/* Copyright (C) 1997-2009 Free Software Foundation, Inc. - -- This file contains the Readline Library (the Library), a set of -- routines for providing Emacs style line input to programs that ask -- for it. -+ This file is part of the GNU Readline Library (Readline), a library -+ for reading lines of text with interactive input and history editing. - -- The Library is free software; you can redistribute it and/or modify -+ Readline 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 2, or (at your option) -- any later version. -+ the Free Software Foundation, either version 3 of the License, or -+ (at your option) any later version. - -- The Library 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. -- -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ Readline 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 Readline. If not, see . -+*/ - - #if !defined (_RLWINSIZE_H_) - #define _RLWINSIZE_H_ -@@ -53,5 +51,8 @@ - # endif /* HAVE_SYS_PTE_H */ - #endif /* !STRUCT_WINSIZE_IN_TERMIOS && !STRUCT_WINSIZE_IN_SYS_IOCTL */ - --#endif /* _RL_WINSIZE_H */ -+#if defined (M_UNIX) && !defined (_SCO_DS) && !defined (tcflow) -+# define tcflow(fd, action) ioctl(fd, TCXONC, action) -+#endif - -+#endif /* _RL_WINSIZE_H */ -Index: gdb-7.2.90.20110703/readline/savestring.c -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/savestring.c 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/savestring.c 2011-07-03 10:41:21.000000000 +0200 -@@ -1,24 +1,24 @@ --/* savestring.c */ -+/* savestring.c - function version of savestring for backwards compatibility */ - - /* Copyright (C) 1998,2003 Free Software Foundation, Inc. - -- This file is part of the GNU Readline Library, a library for -- reading lines of text with interactive input and history editing. -+ This file is part of the GNU Readline Library (Readline), a library -+ for reading lines of text with interactive input and history editing. - -- The GNU Readline Library 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 2, or -+ Readline 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. - -- The GNU Readline Library 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 -+ Readline 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. - -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ You should have received a copy of the GNU General Public License -+ along with Readline. If not, see . -+*/ -+ - #define READLINE_LIBRARY - - #include -@@ -33,5 +33,9 @@ char * - savestring (s) - const char *s; - { -- return ((char *)strcpy ((char *)xmalloc (1 + strlen (s)), (s))); -+ char *ret; -+ -+ ret = (char *)xmalloc (strlen (s) + 1); -+ strcpy (ret, s); -+ return ret; - } -Index: gdb-7.2.90.20110703/readline/search.c -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/search.c 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/search.c 2011-07-03 10:41:21.000000000 +0200 -@@ -1,25 +1,24 @@ - /* search.c - code for non-incremental searching in emacs and vi modes. */ - --/* Copyright (C) 1992-2005 Free Software Foundation, Inc. -+/* Copyright (C) 1992-2009 Free Software Foundation, Inc. - -- This file is part of the Readline Library (the Library), a set of -- routines for providing Emacs style line input to programs that ask -- for it. -+ This file is part of the GNU Readline Library (Readline), a library -+ for reading lines of text with interactive input and history editing. - -- The Library is free software; you can redistribute it and/or modify -+ Readline 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 2, or (at your option) -- any later version. -+ the Free Software Foundation, either version 3 of the License, or -+ (at your option) any later version. -+ -+ Readline 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 Readline. If not, see . -+*/ - -- The Library 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. -- -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ - #define READLINE_LIBRARY - - #if defined (HAVE_CONFIG_H) -@@ -70,7 +69,6 @@ static int rl_history_search_pos; - static char *history_search_string; - static int history_string_size; - --static UNDO_LIST *noninc_saved_undo_list; - static void make_history_line_current PARAMS((HIST_ENTRY *)); - static int noninc_search_from_pos PARAMS((char *, int, int)); - static int noninc_dosearch PARAMS((char *, int)); -@@ -212,8 +210,8 @@ _rl_nsearch_init (dir, pchar) - rl_end = rl_point = 0; - - p = _rl_make_prompt_for_search (pchar ? pchar : ':'); -- rl_message (p, 0, 0); -- free (p); -+ rl_message ("%s", p, 0); -+ xfree (p); - - RL_SETSTATE(RL_STATE_NSEARCH); - -Index: gdb-7.2.90.20110703/readline/shell.c -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/shell.c 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/shell.c 2011-07-03 10:41:21.000000000 +0200 -@@ -1,25 +1,25 @@ - /* shell.c -- readline utility functions that are normally provided by - bash when readline is linked as part of the shell. */ - --/* Copyright (C) 1997 Free Software Foundation, Inc. -+/* Copyright (C) 1997-2009 Free Software Foundation, Inc. - -- This file is part of the GNU Readline Library, a library for -- reading lines of text with interactive input and history editing. -+ This file is part of the GNU Readline Library (Readline), a library -+ for reading lines of text with interactive input and history editing. - -- The GNU Readline Library 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 2, or -+ Readline 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. - -- The GNU Readline Library 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 -+ Readline 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. - -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ You should have received a copy of the GNU General Public License -+ along with Readline. If not, see . -+*/ -+ - #define READLINE_LIBRARY - - #if defined (HAVE_CONFIG_H) -@@ -130,12 +130,12 @@ sh_set_lines_and_columns (lines, cols) - b = (char *)xmalloc (INT_STRLEN_BOUND (int) + 1); - sprintf (b, "%d", lines); - setenv ("LINES", b, 1); -- free (b); -+ xfree (b); - - b = (char *)xmalloc (INT_STRLEN_BOUND (int) + 1); - sprintf (b, "%d", cols); - setenv ("COLUMNS", b, 1); -- free (b); -+ xfree (b); - #else /* !HAVE_SETENV */ - # if defined (HAVE_PUTENV) - b = (char *)xmalloc (INT_STRLEN_BOUND (int) + sizeof ("LINES=") + 1); -Index: gdb-7.2.90.20110703/readline/shlib/Makefile.in -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/shlib/Makefile.in 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/shlib/Makefile.in 2011-07-03 10:41:21.000000000 +0200 -@@ -1,21 +1,20 @@ - ## -*- text -*- ## - # Makefile for the GNU readline library shared library support. - # --# Copyright (C) 1998-2003 Free Software Foundation, Inc. -+# Copyright (C) 1998-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 2, 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, write to the Free Software --# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. -+# 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 . - - PACKAGE = @PACKAGE_NAME@ - VERSION = @PACKAGE_VERSION@ -@@ -31,7 +30,7 @@ RL_LIBRARY_NAME = readline - datarootdir = @datarootdir@ - - srcdir = @srcdir@ --VPATH = .:@top_srcdir@ -+VPATH = @top_srcdir@ - topdir = @top_srcdir@ - BUILD_DIR = @BUILD_DIR@ - -@@ -51,6 +50,7 @@ LN = ln - SHELL = @MAKE_SHELL@ - - host_os = @host_os@ -+host_vendor = @host_vendor@ - - prefix = @prefix@ - exec_prefix = @exec_prefix@ -@@ -58,7 +58,7 @@ includedir = @includedir@ - bindir = @bindir@ - libdir = @libdir@ - datadir = @datadir@ --localedir = $(datadir)/locale -+localedir = @localedir@ - - # Support an alternate destination root directory for package building - DESTDIR = -@@ -122,8 +122,6 @@ SHARED_READLINE = $(SHLIB_LIBPREF)readli - SHARED_HISTORY = $(SHLIB_LIBPREF)history$(SHLIB_DOT)$(SHLIB_LIBVERSION) - SHARED_LIBS = $(SHARED_READLINE) $(SHARED_HISTORY) - --WCWIDTH_OBJ = @WCWIDTH_OBJ@ -- - # The C code source files for this library. - CSOURCES = $(topdir)/readline.c $(topdir)/funmap.c $(topdir)/keymaps.c \ - $(topdir)/vi_mode.c $(topdir)/parens.c $(topdir)/rltty.c \ -@@ -131,12 +129,12 @@ CSOURCES = $(topdir)/readline.c $(topdir - $(topdir)/display.c $(topdir)/signals.c $(topdir)/emacs_keymap.c \ - $(topdir)/vi_keymap.c $(topdir)/util.c $(topdir)/kill.c \ - $(topdir)/undo.c $(topdir)/macro.c $(topdir)/input.c \ -- $(topdir)/callback.c $(topdir)/terminal.c $(topdir)/xmalloc.c \ -+ $(topdir)/callback.c $(topdir)/terminal.c $(topdir)/xmalloc.c $(topdir)/xfree.c \ - $(topdir)/history.c $(topdir)/histsearch.c $(topdir)/histexpand.c \ - $(topdir)/histfile.c $(topdir)/nls.c $(topdir)/search.c \ - $(topdir)/shell.c $(topdir)/savestring.c $(topdir)/tilde.c \ - $(topdir)/text.c $(topdir)/misc.c $(topdir)/compat.c \ -- $(topdir)/mbutil.c $(topdir)/support/wcwidth.c -+ $(topdir)/mbutil.c - - # The header files for this library. - HSOURCES = readline.h rldefs.h chardefs.h keymaps.h history.h histlib.h \ -@@ -149,8 +147,8 @@ SHARED_TILDEOBJ = tilde.so - SHARED_OBJ = readline.so vi_mode.so funmap.so keymaps.so parens.so search.so \ - rltty.so complete.so bind.so isearch.so display.so signals.so \ - util.so kill.so undo.so macro.so input.so callback.so terminal.so \ -- text.so nls.so misc.so xmalloc.so $(SHARED_HISTOBJ) $(SHARED_TILDEOBJ) \ -- compat.so $(WCWIDTH_OBJ) -+ text.so nls.so misc.so xmalloc.so xfree.so $(SHARED_HISTOBJ) $(SHARED_TILDEOBJ) \ -+ compat.so - - ########################################################################## - -@@ -170,13 +168,9 @@ $(SHARED_READLINE): $(SHARED_OBJ) - $(RM) $@ - $(SHOBJ_LD) ${SHOBJ_LDFLAGS} ${SHLIB_XLDFLAGS} -o $@ $(SHARED_OBJ) $(SHLIB_LIBS) - --$(SHARED_HISTORY): $(SHARED_HISTOBJ) xmalloc.so -- $(RM) $@ -- $(SHOBJ_LD) ${SHOBJ_LDFLAGS} ${SHLIB_XLDFLAGS} -o $@ $(SHARED_HISTOBJ) xmalloc.so $(SHLIB_LIBS) -- --wcwidth.o: $(srcdir)/support/wcwidth.c -+$(SHARED_HISTORY): $(SHARED_HISTOBJ) xmalloc.so xfree.so - $(RM) $@ -- $(SHOBJ_CC) -c $(CCFLAGS) $(SHOBJ_FLAGS) $(srcdir)/support/wcwidth.c -+ $(SHOBJ_LD) ${SHOBJ_LDFLAGS} ${SHLIB_XLDFLAGS} -o $@ $(SHARED_HISTOBJ) xmalloc.so xfree.so $(SHLIB_LIBS) - - # Since tilde.c is shared between readline and bash, make sure we compile - # it with the right flags when it's built as part of readline -@@ -187,15 +181,16 @@ tilde.so: tilde.c - - installdirs: $(topdir)/support/mkdirs - -$(SHELL) $(topdir)/support/mkdirs $(DESTDIR)$(libdir) -+ -$(SHELL) $(topdir)/support/mkdirs $(DESTDIR)$(bindir) - - install: installdirs $(SHLIB_STATUS) -- $(SHELL) $(topdir)/support/shlib-install -O $(host_os) -d $(DESTDIR)$(libdir) -b $(DESTDIR)$(bindir) -i "$(INSTALL_DATA)" $(SHARED_HISTORY) -- $(SHELL) $(topdir)/support/shlib-install -O $(host_os) -d $(DESTDIR)$(libdir) -b $(DESTDIR)$(bindir) -i "$(INSTALL_DATA)" $(SHARED_READLINE) -+ $(SHELL) $(topdir)/support/shlib-install -O $(host_os) -V $(host_vendor) -d $(DESTDIR)$(libdir) -b $(DESTDIR)$(bindir) -i "$(INSTALL_DATA)" $(SHARED_HISTORY) -+ $(SHELL) $(topdir)/support/shlib-install -O $(host_os) -V $(host_vendor) -d $(DESTDIR)$(libdir) -b $(DESTDIR)$(bindir) -i "$(INSTALL_DATA)" $(SHARED_READLINE) - @echo install: you may need to run ldconfig - - uninstall: -- $(SHELL) $(topdir)/support/shlib-install -O $(host_os) -d $(DESTDIR)$(libdir) -b $(DESTDIR)$(bindir) -U $(SHARED_HISTORY) -- $(SHELL) $(topdir)/support/shlib-install -O $(host_os) -d $(DESTDIR)$(libdir) -b $(DESTDIR)$(bindir) -U $(SHARED_READLINE) -+ $(SHELL) $(topdir)/support/shlib-install -O $(host_os) -V $(host_vendor) -d $(DESTDIR)$(libdir) -b $(DESTDIR)$(bindir) -U $(SHARED_HISTORY) -+ $(SHELL) $(topdir)/support/shlib-install -O $(host_os) -V $(host_vendor) -d $(DESTDIR)$(libdir) -b $(DESTDIR)$(bindir) -U $(SHARED_READLINE) - @echo uninstall: you may need to run ldconfig - - clean mostlyclean: force -@@ -322,6 +317,8 @@ vi_mode.so: $(topdir)/rldefs.h ${BUILD_D - vi_mode.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h - vi_mode.so: $(topdir)/history.h $(topdir)/ansi_stdlib.h $(topdir)/tilde.h - vi_mode.so: $(topdir)/rltypedefs.h -+xfree.so: ${BUILD_DIR}/config.h -+xfree.so: $(topdir)/ansi_stdlib.h - xmalloc.so: ${BUILD_DIR}/config.h - xmalloc.so: $(topdir)/ansi_stdlib.h - -@@ -379,6 +376,7 @@ tilde.so: $(topdir)/xmalloc.h - undo.so: $(topdir)/xmalloc.h - util.so: $(topdir)/xmalloc.h - vi_mode.so: $(topdir)/xmalloc.h -+xfree.so: $(topdir)/xmalloc.h - xmalloc.so: $(topdir)/xmalloc.h - - complete.o: $(topdir)/rlmbutil.h -@@ -420,6 +418,7 @@ tilde.so: $(topdir)/tilde.c - undo.so: $(topdir)/undo.c - util.so: $(topdir)/util.c - vi_mode.so: $(topdir)/vi_mode.c -+xfree.so: $(topdir)/xfree.c - xmalloc.so: $(topdir)/xmalloc.c - - histexpand.so: $(topdir)/histexpand.c -@@ -454,6 +453,7 @@ tilde.so: tilde.c - undo.so: undo.c - util.so: util.c - vi_mode.so: vi_mode.c -+xfree.so: xfree.c - xmalloc.so: xmalloc.c - - histexpand.so: histexpand.c -Index: gdb-7.2.90.20110703/readline/signals.c -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/signals.c 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/signals.c 2011-07-03 10:41:21.000000000 +0200 -@@ -1,24 +1,24 @@ - /* signals.c -- signal handling support for readline. */ - --/* Copyright (C) 1987-2005 Free Software Foundation, Inc. -+/* Copyright (C) 1987-2009 Free Software Foundation, Inc. - -- This file is part of the GNU Readline Library, a library for -- reading lines of text with interactive input and history editing. -+ This file is part of the GNU Readline Library (Readline), a library -+ for reading lines of text with interactive input and history editing. - -- The GNU Readline Library 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 2, or -+ Readline 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. - -- The GNU Readline Library 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 -+ Readline 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. - -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ You should have received a copy of the GNU General Public License -+ along with Readline. If not, see . -+*/ -+ - #define READLINE_LIBRARY - - #if defined (HAVE_CONFIG_H) -@@ -40,13 +40,14 @@ - # include - #endif /* GWINSZ_IN_SYS_IOCTL */ - --#if defined (HANDLE_SIGNALS) - /* Some standard library routines. */ - #include "readline.h" - #include "history.h" - - #include "rlprivate.h" - -+#if defined (HANDLE_SIGNALS) -+ - #if !defined (RETSIGTYPE) - # if defined (VOID_SIGHANDLER) - # define RETSIGTYPE void -@@ -80,6 +81,9 @@ typedef struct { SigHandler *sa_handler; - static SigHandler *rl_set_sighandler PARAMS((int, SigHandler *, sighandler_cxt *)); - static void rl_maybe_set_sighandler PARAMS((int, SigHandler *, sighandler_cxt *)); - -+static RETSIGTYPE rl_signal_handler PARAMS((int)); -+static RETSIGTYPE _rl_handle_signal PARAMS((int)); -+ - /* Exported variables for use by applications. */ - - /* If non-zero, readline will install its own signal handlers for -@@ -93,6 +97,18 @@ int rl_catch_sigwinch = 1; - int rl_catch_sigwinch = 0; /* for the readline state struct in readline.c */ - #endif - -+/* Private variables. */ -+int _rl_interrupt_immediately = 0; -+int volatile _rl_caught_signal = 0; /* should be sig_atomic_t, but that requires including everywhere */ -+ -+/* If non-zero, print characters corresponding to received signals as long as -+ the user has indicated his desire to do so (_rl_echo_control_chars). */ -+int _rl_echoctl = 0; -+ -+int _rl_intr_char = 0; -+int _rl_quit_char = 0; -+int _rl_susp_char = 0; -+ - static int signals_set_flag; - static int sigwinch_set_flag; - -@@ -112,10 +128,36 @@ static sighandler_cxt old_winch; - - /* Readline signal handler functions. */ - -+/* Called from RL_CHECK_SIGNALS() macro */ -+RETSIGTYPE -+_rl_signal_handler (sig) -+ int sig; -+{ -+ _rl_caught_signal = 0; /* XXX */ -+ -+ _rl_handle_signal (sig); -+ SIGHANDLER_RETURN; -+} -+ - static RETSIGTYPE - rl_signal_handler (sig) - int sig; - { -+ if (_rl_interrupt_immediately || RL_ISSTATE(RL_STATE_CALLBACK)) -+ { -+ _rl_interrupt_immediately = 0; -+ _rl_handle_signal (sig); -+ } -+ else -+ _rl_caught_signal = sig; -+ -+ SIGHANDLER_RETURN; -+} -+ -+static RETSIGTYPE -+_rl_handle_signal (sig) -+ int sig; -+{ - #if defined (HAVE_POSIX_SIGNALS) - sigset_t set; - #else /* !HAVE_POSIX_SIGNALS */ -@@ -142,6 +184,7 @@ rl_signal_handler (sig) - switch (sig) - { - case SIGINT: -+ _rl_reset_completion_state (); - rl_free_line_state (); - /* FALLTHROUGH */ - -@@ -157,9 +200,11 @@ rl_signal_handler (sig) - #if defined (SIGQUIT) - case SIGQUIT: - #endif -+ rl_echo_signal_char (sig); - rl_cleanup_after_signal (); - - #if defined (HAVE_POSIX_SIGNALS) -+ sigemptyset (&set); - sigprocmask (SIG_BLOCK, (sigset_t *)NULL, &set); - sigdelset (&set, sig); - #else /* !HAVE_POSIX_SIGNALS */ -@@ -251,11 +296,11 @@ rl_set_sighandler (sig, handler, ohandle - struct sigaction act; - - act.sa_handler = handler; --#if defined (SIGWINCH) -+# if defined (SIGWINCH) - act.sa_flags = (sig == SIGWINCH) ? SA_RESTART : 0; --#else -+# else - act.sa_flags = 0; --#endif -+# endif /* SIGWINCH */ - sigemptyset (&act.sa_mask); - sigemptyset (&ohandler->sa_mask); - sigaction (sig, &act, &old_handler); -@@ -292,9 +337,44 @@ rl_set_signals () - { - sighandler_cxt dummy; - SigHandler *oh; -+#if defined (HAVE_POSIX_SIGNALS) -+ static int sigmask_set = 0; -+ static sigset_t bset, oset; -+#endif -+ -+#if defined (HAVE_POSIX_SIGNALS) -+ if (rl_catch_signals && sigmask_set == 0) -+ { -+ sigemptyset (&bset); -+ -+ sigaddset (&bset, SIGINT); -+ sigaddset (&bset, SIGTERM); -+#if defined (SIGQUIT) -+ sigaddset (&bset, SIGQUIT); -+#endif -+#if defined (SIGALRM) -+ sigaddset (&bset, SIGALRM); -+#endif -+#if defined (SIGTSTP) -+ sigaddset (&bset, SIGTSTP); -+#endif -+#if defined (SIGTTIN) -+ sigaddset (&bset, SIGTTIN); -+#endif -+#if defined (SIGTTOU) -+ sigaddset (&bset, SIGTTOU); -+#endif -+ sigmask_set = 1; -+ } -+#endif /* HAVE_POSIX_SIGNALS */ - - if (rl_catch_signals && signals_set_flag == 0) - { -+#if defined (HAVE_POSIX_SIGNALS) -+ sigemptyset (&oset); -+ sigprocmask (SIG_BLOCK, &bset, &oset); -+#endif -+ - rl_maybe_set_sighandler (SIGINT, rl_signal_handler, &old_int); - rl_maybe_set_sighandler (SIGTERM, rl_signal_handler, &old_term); - #if defined (SIGQUIT) -@@ -328,6 +408,10 @@ rl_set_signals () - #endif /* SIGTTIN */ - - signals_set_flag = 1; -+ -+#if defined (HAVE_POSIX_SIGNALS) -+ sigprocmask (SIG_SETMASK, &oset, (sigset_t *)NULL); -+#endif - } - - #if defined (SIGWINCH) -@@ -394,8 +478,8 @@ rl_cleanup_after_signal () - _rl_clean_up_for_exit (); - if (rl_deprep_term_function) - (*rl_deprep_term_function) (); -- rl_clear_signals (); - rl_clear_pending_input (); -+ rl_clear_signals (); - } - - /* Reset the terminal and readline state after a signal handler returns. */ -@@ -428,3 +512,160 @@ rl_free_line_state () - } - - #endif /* HANDLE_SIGNALS */ -+ -+/* **************************************************************** */ -+/* */ -+/* SIGINT Management */ -+/* */ -+/* **************************************************************** */ -+ -+#if defined (HAVE_POSIX_SIGNALS) -+static sigset_t sigint_set, sigint_oset; -+static sigset_t sigwinch_set, sigwinch_oset; -+#else /* !HAVE_POSIX_SIGNALS */ -+# if defined (HAVE_BSD_SIGNALS) -+static int sigint_oldmask; -+static int sigwinch_oldmask; -+# endif /* HAVE_BSD_SIGNALS */ -+#endif /* !HAVE_POSIX_SIGNALS */ -+ -+static int sigint_blocked; -+static int sigwinch_blocked; -+ -+/* Cause SIGINT to not be delivered until the corresponding call to -+ release_sigint(). */ -+void -+_rl_block_sigint () -+{ -+ if (sigint_blocked) -+ return; -+ -+#if defined (HAVE_POSIX_SIGNALS) -+ sigemptyset (&sigint_set); -+ sigemptyset (&sigint_oset); -+ sigaddset (&sigint_set, SIGINT); -+ sigprocmask (SIG_BLOCK, &sigint_set, &sigint_oset); -+#else /* !HAVE_POSIX_SIGNALS */ -+# if defined (HAVE_BSD_SIGNALS) -+ sigint_oldmask = sigblock (sigmask (SIGINT)); -+# else /* !HAVE_BSD_SIGNALS */ -+# if defined (HAVE_USG_SIGHOLD) -+ sighold (SIGINT); -+# endif /* HAVE_USG_SIGHOLD */ -+# endif /* !HAVE_BSD_SIGNALS */ -+#endif /* !HAVE_POSIX_SIGNALS */ -+ -+ sigint_blocked = 1; -+} -+ -+/* Allow SIGINT to be delivered. */ -+void -+_rl_release_sigint () -+{ -+ if (sigint_blocked == 0) -+ return; -+ -+#if defined (HAVE_POSIX_SIGNALS) -+ sigprocmask (SIG_SETMASK, &sigint_oset, (sigset_t *)NULL); -+#else -+# if defined (HAVE_BSD_SIGNALS) -+ sigsetmask (sigint_oldmask); -+# else /* !HAVE_BSD_SIGNALS */ -+# if defined (HAVE_USG_SIGHOLD) -+ sigrelse (SIGINT); -+# endif /* HAVE_USG_SIGHOLD */ -+# endif /* !HAVE_BSD_SIGNALS */ -+#endif /* !HAVE_POSIX_SIGNALS */ -+ -+ sigint_blocked = 0; -+} -+ -+/* Cause SIGWINCH to not be delivered until the corresponding call to -+ release_sigwinch(). */ -+void -+_rl_block_sigwinch () -+{ -+ if (sigwinch_blocked) -+ return; -+ -+#if defined (HAVE_POSIX_SIGNALS) -+ sigemptyset (&sigwinch_set); -+ sigemptyset (&sigwinch_oset); -+ sigaddset (&sigwinch_set, SIGWINCH); -+ sigprocmask (SIG_BLOCK, &sigwinch_set, &sigwinch_oset); -+#else /* !HAVE_POSIX_SIGNALS */ -+# if defined (HAVE_BSD_SIGNALS) -+ sigwinch_oldmask = sigblock (sigmask (SIGWINCH)); -+# else /* !HAVE_BSD_SIGNALS */ -+# if defined (HAVE_USG_SIGHOLD) -+ sighold (SIGWINCH); -+# endif /* HAVE_USG_SIGHOLD */ -+# endif /* !HAVE_BSD_SIGNALS */ -+#endif /* !HAVE_POSIX_SIGNALS */ -+ -+ sigwinch_blocked = 1; -+} -+ -+/* Allow SIGWINCH to be delivered. */ -+void -+_rl_release_sigwinch () -+{ -+ if (sigwinch_blocked == 0) -+ return; -+ -+#if defined (HAVE_POSIX_SIGNALS) -+ sigprocmask (SIG_SETMASK, &sigwinch_oset, (sigset_t *)NULL); -+#else -+# if defined (HAVE_BSD_SIGNALS) -+ sigsetmask (sigwinch_oldmask); -+# else /* !HAVE_BSD_SIGNALS */ -+# if defined (HAVE_USG_SIGHOLD) -+ sigrelse (SIGWINCH); -+# endif /* HAVE_USG_SIGHOLD */ -+# endif /* !HAVE_BSD_SIGNALS */ -+#endif /* !HAVE_POSIX_SIGNALS */ -+ -+ sigwinch_blocked = 0; -+} -+ -+/* **************************************************************** */ -+/* */ -+/* Echoing special control characters */ -+/* */ -+/* **************************************************************** */ -+void -+rl_echo_signal_char (sig) -+ int sig; -+{ -+ char cstr[3]; -+ int cslen, c; -+ -+ if (_rl_echoctl == 0 || _rl_echo_control_chars == 0) -+ return; -+ -+ switch (sig) -+ { -+ case SIGINT: c = _rl_intr_char; break; -+#if defined (SIGQUIT) -+ case SIGQUIT: c = _rl_quit_char; break; -+#endif -+#if defined (SIGTSTP) -+ case SIGTSTP: c = _rl_susp_char; break; -+#endif -+ default: return; -+ } -+ -+ if (CTRL_CHAR (c) || c == RUBOUT) -+ { -+ cstr[0] = '^'; -+ cstr[1] = CTRL_CHAR (c) ? UNCTRL (c) : '?'; -+ cstr[cslen = 2] = '\0'; -+ } -+ else -+ { -+ cstr[0] = c; -+ cstr[cslen = 1] = '\0'; -+ } -+ -+ _rl_output_some_chars (cstr, cslen); -+} -Index: gdb-7.2.90.20110703/readline/support/config.guess -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/support/config.guess 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/support/config.guess 2011-07-03 10:41:21.000000000 +0200 -@@ -1,9 +1,10 @@ - #! /bin/sh - # Attempt to guess a canonical system name. - # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, --# 2000, 2001, 2002, 2003 Free Software Foundation, Inc. -+# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 -+# Free Software Foundation, Inc. - --timestamp='2004-02-16' -+timestamp='2008-03-12' - - # This file is free software; you can redistribute it and/or modify it - # under the terms of the GNU General Public License as published by -@@ -17,13 +18,15 @@ timestamp='2004-02-16' - # - # You should have received a copy of the GNU General Public License - # along with this program; if not, write to the Free Software --# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA -+# 02110-1301, USA. - # - # As a special exception to the GNU General Public License, if you - # distribute this file as part of a program that contains a - # configuration script generated by Autoconf, you may include it under - # the same distribution terms that you use for the rest of that program. - -+ - # Originally written by Per Bothner . - # Please send patches to . Submit a context - # diff and a properly formatted ChangeLog entry. -@@ -53,8 +56,8 @@ version="\ - GNU config.guess ($timestamp) - - Originally written by Per Bothner. --Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 --Free Software Foundation, Inc. -+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, -+2002, 2003, 2004, 2005, 2006, 2007, 2008,2009 Free Software Foundation, Inc. - - This is free software; see the source for copying conditions. There is NO - warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." -@@ -66,11 +69,11 @@ Try \`$me --help' for more information." - while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) -- echo "$timestamp" ; exit 0 ;; -+ echo "$timestamp" ; exit ;; - --version | -v ) -- echo "$version" ; exit 0 ;; -+ echo "$version" ; exit ;; - --help | --h* | -h ) -- echo "$usage"; exit 0 ;; -+ echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. -@@ -104,7 +107,7 @@ set_cc_for_build=' - trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; - trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; - : ${TMPDIR=/tmp} ; -- { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || -+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || - { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || - { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || - { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; -@@ -123,7 +126,7 @@ case $CC_FOR_BUILD,$HOST_CC,$CC in - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; --esac ;' -+esac ; set_cc_for_build= ;' - - # This is needed to find uname on a Pyramid OSx when run in the BSD universe. - # (ghazi@noc.rutgers.edu 1994-08-24) -@@ -158,6 +161,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$ - arm*) machine=arm-unknown ;; - sh3el) machine=shl-unknown ;; - sh3eb) machine=sh-unknown ;; -+ sh5el) machine=sh5le-unknown ;; - *) machine=${UNAME_MACHINE_ARCH}-unknown ;; - esac - # The Operating System including object format, if it has switched -@@ -196,68 +200,32 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$ - # contains redundant information, the shorter form: - # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" -- exit 0 ;; -- amd64:OpenBSD:*:*) -- echo x86_64-unknown-openbsd${UNAME_RELEASE} -- exit 0 ;; -- amiga:OpenBSD:*:*) -- echo m68k-unknown-openbsd${UNAME_RELEASE} -- exit 0 ;; -- arc:OpenBSD:*:*) -- echo mipsel-unknown-openbsd${UNAME_RELEASE} -- exit 0 ;; -- cats:OpenBSD:*:*) -- echo arm-unknown-openbsd${UNAME_RELEASE} -- exit 0 ;; -- hp300:OpenBSD:*:*) -- echo m68k-unknown-openbsd${UNAME_RELEASE} -- exit 0 ;; -- mac68k:OpenBSD:*:*) -- echo m68k-unknown-openbsd${UNAME_RELEASE} -- exit 0 ;; -- macppc:OpenBSD:*:*) -- echo powerpc-unknown-openbsd${UNAME_RELEASE} -- exit 0 ;; -- mvme68k:OpenBSD:*:*) -- echo m68k-unknown-openbsd${UNAME_RELEASE} -- exit 0 ;; -- mvme88k:OpenBSD:*:*) -- echo m88k-unknown-openbsd${UNAME_RELEASE} -- exit 0 ;; -- mvmeppc:OpenBSD:*:*) -- echo powerpc-unknown-openbsd${UNAME_RELEASE} -- exit 0 ;; -- pegasos:OpenBSD:*:*) -- echo powerpc-unknown-openbsd${UNAME_RELEASE} -- exit 0 ;; -- pmax:OpenBSD:*:*) -- echo mipsel-unknown-openbsd${UNAME_RELEASE} -- exit 0 ;; -- sgi:OpenBSD:*:*) -- echo mipseb-unknown-openbsd${UNAME_RELEASE} -- exit 0 ;; -- sun3:OpenBSD:*:*) -- echo m68k-unknown-openbsd${UNAME_RELEASE} -- exit 0 ;; -- wgrisc:OpenBSD:*:*) -- echo mipsel-unknown-openbsd${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - *:OpenBSD:*:*) -- echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} -- exit 0 ;; -+ UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` -+ echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} -+ exit ;; - *:ekkoBSD:*:*) - echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; -+ *:SolidBSD:*:*) -+ echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} -+ exit ;; - macppc:MirBSD:*:*) -- echo powerppc-unknown-mirbsd${UNAME_RELEASE} -- exit 0 ;; -+ echo powerpc-unknown-mirbsd${UNAME_RELEASE} -+ exit ;; - *:MirBSD:*:*) - echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - alpha:OSF1:*:*) -- if test $UNAME_RELEASE = "V4.0"; then -+ case $UNAME_RELEASE in -+ *4.0) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` -- fi -+ ;; -+ *5.*) -+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` -+ ;; -+ esac - # According to Compaq, /usr/sbin/psrinfo has been available on - # OSF/1 and Tru64 systems produced since 1995. I hope that - # covers most systems running today. This code pipes the CPU -@@ -295,45 +263,49 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$ - "EV7.9 (21364A)") - UNAME_MACHINE="alphaev79" ;; - esac -+ # A Pn.n version is a patched version. - # A Vn.n version is a released version. - # A Tn.n version is a released field test version. - # A Xn.n version is an unreleased experimental baselevel. - # 1.2 uses "1.2" for uname -r. -- echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` -- exit 0 ;; -- Alpha*:OpenVMS:*:*) -- echo alpha-hp-vms -- exit 0 ;; -+ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` -+ exit ;; - Alpha\ *:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # Should we change UNAME_MACHINE based on the output of uname instead - # of the specific Alpha model? - echo alpha-pc-interix -- exit 0 ;; -+ exit ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 -- exit 0 ;; -+ exit ;; - Amiga*:UNIX_System_V:4.0:*) - echo m68k-unknown-sysv4 -- exit 0;; -+ exit ;; - *:[Aa]miga[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-amigaos -- exit 0 ;; -+ exit ;; - *:[Mm]orph[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-morphos -- exit 0 ;; -+ exit ;; - *:OS/390:*:*) - echo i370-ibm-openedition -- exit 0 ;; -+ exit ;; -+ *:z/VM:*:*) -+ echo s390-ibm-zvmoe -+ exit ;; - *:OS400:*:*) - echo powerpc-ibm-os400 -- exit 0 ;; -+ exit ;; - arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} -- exit 0;; -+ exit ;; -+ arm:riscos:*:*|arm:RISCOS:*:*) -+ echo arm-unknown-riscos -+ exit ;; - SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) - echo hppa1.1-hitachi-hiuxmpp -- exit 0;; -+ exit ;; - Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) - # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. - if test "`(/bin/universe) 2>/dev/null`" = att ; then -@@ -341,32 +313,32 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$ - else - echo pyramid-pyramid-bsd - fi -- exit 0 ;; -+ exit ;; - NILE*:*:*:dcosx) - echo pyramid-pyramid-svr4 -- exit 0 ;; -+ exit ;; - DRS?6000:unix:4.0:6*) - echo sparc-icl-nx6 -- exit 0 ;; -- DRS?6000:UNIX_SV:4.2*:7*) -+ exit ;; -+ DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) - case `/usr/bin/uname -p` in -- sparc) echo sparc-icl-nx7 && exit 0 ;; -+ sparc) echo sparc-icl-nx7; exit ;; - esac ;; - sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` -- exit 0 ;; -+ exit ;; - sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` -- exit 0 ;; -- i86pc:SunOS:5.*:*) -+ exit ;; -+ i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) - echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` -- exit 0 ;; -+ exit ;; - sun4*:SunOS:6*:*) - # According to config.sub, this is the proper way to canonicalize - # SunOS6. Hard to guess exactly what SunOS6 will be like, but - # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` -- exit 0 ;; -+ exit ;; - sun4*:SunOS:*:*) - case "`/usr/bin/arch -k`" in - Series*|S4*) -@@ -375,10 +347,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$ - esac - # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` -- exit 0 ;; -+ exit ;; - sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - sun*:*:4.2BSD:*) - UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 -@@ -390,10 +362,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$ - echo sparc-sun-sunos${UNAME_RELEASE} - ;; - esac -- exit 0 ;; -+ exit ;; - aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - # The situation for MiNT is a little confusing. The machine name - # can be virtually everything (everything which is not - # "atarist" or "atariste" at least should have a processor -@@ -404,40 +376,40 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$ - # be no problem. - atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - m68k:machten:*:*) - echo m68k-apple-machten${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - powerpc:machten:*:*) - echo powerpc-apple-machten${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - RISC*:Mach:*:*) - echo mips-dec-mach_bsd4.3 -- exit 0 ;; -+ exit ;; - RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - mips:*:*:UMIPS | mips:*:*:RISCos) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c -@@ -461,32 +433,33 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$ - exit (-1); - } - EOF -- $CC_FOR_BUILD -o $dummy $dummy.c \ -- && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ -- && exit 0 -+ $CC_FOR_BUILD -o $dummy $dummy.c && -+ dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && -+ SYSTEM_NAME=`$dummy $dummyarg` && -+ { echo "$SYSTEM_NAME"; exit; } - echo mips-mips-riscos${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - Motorola:PowerMAX_OS:*:*) - echo powerpc-motorola-powermax -- exit 0 ;; -+ exit ;; - Motorola:*:4.3:PL8-*) - echo powerpc-harris-powermax -- exit 0 ;; -+ exit ;; - Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) - echo powerpc-harris-powermax -- exit 0 ;; -+ exit ;; - Night_Hawk:Power_UNIX:*:*) - echo powerpc-harris-powerunix -- exit 0 ;; -+ exit ;; - m88k:CX/UX:7*:*) - echo m88k-harris-cxux7 -- exit 0 ;; -+ exit ;; - m88k:*:4*:R4*) - echo m88k-motorola-sysv4 -- exit 0 ;; -+ exit ;; - m88k:*:3*:R3*) - echo m88k-motorola-sysv3 -- exit 0 ;; -+ exit ;; - AViiON:dgux:*:*) - # DG/UX returns AViiON for all architectures - UNAME_PROCESSOR=`/usr/bin/uname -p` -@@ -502,29 +475,29 @@ EOF - else - echo i586-dg-dgux${UNAME_RELEASE} - fi -- exit 0 ;; -+ exit ;; - M88*:DolphinOS:*:*) # DolphinOS (SVR3) - echo m88k-dolphin-sysv3 -- exit 0 ;; -+ exit ;; - M88*:*:R3*:*) - # Delta 88k system running SVR3 - echo m88k-motorola-sysv3 -- exit 0 ;; -+ exit ;; - XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) - echo m88k-tektronix-sysv3 -- exit 0 ;; -+ exit ;; - Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) - echo m68k-tektronix-bsd -- exit 0 ;; -+ exit ;; - *:IRIX*:*:*) - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` -- exit 0 ;; -+ exit ;; - ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. -- echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id -- exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' -+ echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id -+ exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' - i*86:AIX:*:*) - echo i386-ibm-aix -- exit 0 ;; -+ exit ;; - ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` -@@ -532,7 +505,7 @@ EOF - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} -- exit 0 ;; -+ exit ;; - *:AIX:2:3) - if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval $set_cc_for_build -@@ -547,15 +520,19 @@ EOF - exit(0); - } - EOF -- $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 -- echo rs6000-ibm-aix3.2.5 -+ if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` -+ then -+ echo "$SYSTEM_NAME" -+ else -+ echo rs6000-ibm-aix3.2.5 -+ fi - elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then - echo rs6000-ibm-aix3.2.4 - else - echo rs6000-ibm-aix3.2 - fi -- exit 0 ;; -- *:AIX:*:[45]) -+ exit ;; -+ *:AIX:*:[456]) - IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` - if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then - IBM_ARCH=rs6000 -@@ -568,28 +545,28 @@ EOF - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${IBM_ARCH}-ibm-aix${IBM_REV} -- exit 0 ;; -+ exit ;; - *:AIX:*:*) - echo rs6000-ibm-aix -- exit 0 ;; -+ exit ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) - echo romp-ibm-bsd4.4 -- exit 0 ;; -+ exit ;; - ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to -- exit 0 ;; # report: romp-ibm BSD 4.3 -+ exit ;; # report: romp-ibm BSD 4.3 - *:BOSX:*:*) - echo rs6000-bull-bosx -- exit 0 ;; -+ exit ;; - DPX/2?00:B.O.S.:*:*) - echo m68k-bull-sysv3 -- exit 0 ;; -+ exit ;; - 9000/[34]??:4.3bsd:1.*:*) - echo m68k-hp-bsd -- exit 0 ;; -+ exit ;; - hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) - echo m68k-hp-bsd4.4 -- exit 0 ;; -+ exit ;; - 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - case "${UNAME_MACHINE}" in -@@ -651,9 +628,19 @@ EOF - esac - if [ ${HP_ARCH} = "hppa2.0w" ] - then -- # avoid double evaluation of $set_cc_for_build -- test -n "$CC_FOR_BUILD" || eval $set_cc_for_build -- if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null -+ eval $set_cc_for_build -+ -+ # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating -+ # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler -+ # generating 64-bit code. GNU and HP use different nomenclature: -+ # -+ # $ CC_FOR_BUILD=cc ./config.guess -+ # => hppa2.0w-hp-hpux11.23 -+ # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess -+ # => hppa64-hp-hpux11.23 -+ -+ if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | -+ grep __LP64__ >/dev/null - then - HP_ARCH="hppa2.0w" - else -@@ -661,11 +648,11 @@ EOF - fi - fi - echo ${HP_ARCH}-hp-hpux${HPUX_REV} -- exit 0 ;; -+ exit ;; - ia64:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux${HPUX_REV} -- exit 0 ;; -+ exit ;; - 3050*:HI-UX:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c -@@ -693,163 +680,192 @@ EOF - exit (0); - } - EOF -- $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 -+ $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && -+ { echo "$SYSTEM_NAME"; exit; } - echo unknown-hitachi-hiuxwe2 -- exit 0 ;; -+ exit ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) - echo hppa1.1-hp-bsd -- exit 0 ;; -+ exit ;; - 9000/8??:4.3bsd:*:*) - echo hppa1.0-hp-bsd -- exit 0 ;; -+ exit ;; - *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) - echo hppa1.0-hp-mpeix -- exit 0 ;; -+ exit ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) - echo hppa1.1-hp-osf -- exit 0 ;; -+ exit ;; - hp8??:OSF1:*:*) - echo hppa1.0-hp-osf -- exit 0 ;; -+ exit ;; - i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-unknown-osf1mk - else - echo ${UNAME_MACHINE}-unknown-osf1 - fi -- exit 0 ;; -+ exit ;; - parisc*:Lites*:*:*) - echo hppa1.1-hp-lites -- exit 0 ;; -+ exit ;; - C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) - echo c1-convex-bsd -- exit 0 ;; -+ exit ;; - C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi -- exit 0 ;; -+ exit ;; - C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) - echo c34-convex-bsd -- exit 0 ;; -+ exit ;; - C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) - echo c38-convex-bsd -- exit 0 ;; -+ exit ;; - C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) - echo c4-convex-bsd -- exit 0 ;; -+ exit ;; - CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' -- exit 0 ;; -+ exit ;; - CRAY*[A-Z]90:*:*:*) - echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ - | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ - -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ - -e 's/\.[^.]*$/.X/' -- exit 0 ;; -+ exit ;; - CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' -- exit 0 ;; -+ exit ;; - CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' -- exit 0 ;; -+ exit ;; - CRAY*SV1:*:*:*) - echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' -- exit 0 ;; -+ exit ;; - *:UNICOS/mp:*:*) -- echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' -- exit 0 ;; -+ echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' -+ exit ;; - F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` - echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" -- exit 0 ;; -+ exit ;; - 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` - echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" -- exit 0 ;; -+ exit ;; - i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - *:FreeBSD:*:*) -- # Determine whether the default compiler uses glibc. -- eval $set_cc_for_build -- sed 's/^ //' << EOF >$dummy.c -- #include -- #if __GLIBC__ >= 2 -- LIBC=gnu -- #else -- LIBC= -- #endif --EOF -- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` -- # GNU/KFreeBSD systems have a "k" prefix to indicate we are using -- # FreeBSD's kernel, but not the complete OS. -- case ${LIBC} in gnu) kernel_only='k' ;; esac -- echo ${UNAME_MACHINE}-unknown-${kernel_only}freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC} -- exit 0 ;; -+ case ${UNAME_MACHINE} in -+ pc98) -+ echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; -+ amd64) -+ echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; -+ *) -+ echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; -+ esac -+ exit ;; - i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin -- exit 0 ;; -- i*:MINGW*:*) -+ exit ;; -+ *:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 -- exit 0 ;; -+ exit ;; -+ i*:windows32*:*) -+ # uname -m includes "-pc" on this system. -+ echo ${UNAME_MACHINE}-mingw32 -+ exit ;; - i*:PW*:*) - echo ${UNAME_MACHINE}-pc-pw32 -- exit 0 ;; -- x86:Interix*:[34]*) -- echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//' -- exit 0 ;; -+ exit ;; -+ *:Interix*:[3456]*) -+ case ${UNAME_MACHINE} in -+ x86) -+ echo i586-pc-interix${UNAME_RELEASE} -+ exit ;; -+ EM64T | authenticamd) -+ echo x86_64-unknown-interix${UNAME_RELEASE} -+ exit ;; -+ IA64) -+ echo ia64-unknown-interix${UNAME_RELEASE} -+ exit ;; -+ esac ;; - [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) - echo i${UNAME_MACHINE}-pc-mks -- exit 0 ;; -+ exit ;; - i*:Windows_NT*:* | Pentium*:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we - # UNAME_MACHINE based on the output of uname instead of i386? - echo i586-pc-interix -- exit 0 ;; -+ exit ;; - i*:UWIN*:*) - echo ${UNAME_MACHINE}-pc-uwin -- exit 0 ;; -+ exit ;; -+ amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) -+ echo x86_64-unknown-cygwin -+ exit ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin -- exit 0 ;; -+ exit ;; - prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` -- exit 0 ;; -+ exit ;; - *:GNU:*:*) - # the GNU system - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` -- exit 0 ;; -+ exit ;; - *:GNU/*:*:*) - # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu -- exit 0 ;; -+ exit ;; - i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix -- exit 0 ;; -+ exit ;; - arm*:Linux:*:*) -+ eval $set_cc_for_build -+ if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ -+ | grep -q __ARM_EABI__ -+ then -+ echo ${UNAME_MACHINE}-unknown-linux-gnu -+ else -+ echo ${UNAME_MACHINE}-unknown-linux-gnueabi -+ fi -+ exit ;; -+ avr32*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu -- exit 0 ;; -+ exit ;; - cris:Linux:*:*) - echo cris-axis-linux-gnu -- exit 0 ;; -+ exit ;; -+ crisv32:Linux:*:*) -+ echo crisv32-axis-linux-gnu -+ exit ;; -+ frv:Linux:*:*) -+ echo frv-unknown-linux-gnu -+ exit ;; - ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu -- exit 0 ;; -+ exit ;; -+ m32r*:Linux:*:*) -+ echo ${UNAME_MACHINE}-unknown-linux-gnu -+ exit ;; - m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu -- exit 0 ;; -+ exit ;; - mips:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c -@@ -866,8 +882,12 @@ EOF - #endif - #endif - EOF -- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` -- test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 -+ eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' -+ /^CPU/{ -+ s: ::g -+ p -+ }'`" -+ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } - ;; - mips64:Linux:*:*) - eval $set_cc_for_build -@@ -885,15 +905,22 @@ EOF - #endif - #endif - EOF -- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` -- test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 -+ eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' -+ /^CPU/{ -+ s: ::g -+ p -+ }'`" -+ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } - ;; -+ or32:Linux:*:*) -+ echo or32-unknown-linux-gnu -+ exit ;; - ppc:Linux:*:*) - echo powerpc-unknown-linux-gnu -- exit 0 ;; -+ exit ;; - ppc64:Linux:*:*) - echo powerpc64-unknown-linux-gnu -- exit 0 ;; -+ exit ;; - alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in - EV5) UNAME_MACHINE=alphaev5 ;; -@@ -907,7 +934,7 @@ EOF - objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null - if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi - echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} -- exit 0 ;; -+ exit ;; - parisc:Linux:*:* | hppa:Linux:*:*) - # Look for CPU level - case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in -@@ -915,25 +942,31 @@ EOF - PA8*) echo hppa2.0-unknown-linux-gnu ;; - *) echo hppa-unknown-linux-gnu ;; - esac -- exit 0 ;; -+ exit ;; - parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-gnu -- exit 0 ;; -+ exit ;; - s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux -- exit 0 ;; -+ exit ;; - sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu -- exit 0 ;; -+ exit ;; - sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu -- exit 0 ;; -+ exit ;; - sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu -- exit 0 ;; -+ exit ;; -+ vax:Linux:*:*) -+ echo ${UNAME_MACHINE}-dec-linux-gnu -+ exit ;; - x86_64:Linux:*:*) - echo x86_64-unknown-linux-gnu -- exit 0 ;; -+ exit ;; -+ xtensa*:Linux:*:*) -+ echo ${UNAME_MACHINE}-unknown-linux-gnu -+ exit ;; - i*86:Linux:*:*) - # The BFD linker knows what the default object file format is, so - # first see if it will tell us. cd to the root directory to prevent -@@ -951,15 +984,15 @@ EOF - ;; - a.out-i386-linux) - echo "${UNAME_MACHINE}-pc-linux-gnuaout" -- exit 0 ;; -+ exit ;; - coff-i386) - echo "${UNAME_MACHINE}-pc-linux-gnucoff" -- exit 0 ;; -+ exit ;; - "") - # Either a pre-BFD a.out linker (linux-gnuoldld) or - # one that does not give us useful --help. - echo "${UNAME_MACHINE}-pc-linux-gnuoldld" -- exit 0 ;; -+ exit ;; - esac - # Determine whether the default compiler is a.out or elf - eval $set_cc_for_build -@@ -976,7 +1009,7 @@ EOF - LIBC=gnulibc1 - # endif - #else -- #ifdef __INTEL_COMPILER -+ #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) - LIBC=gnu - #else - LIBC=gnuaout -@@ -986,16 +1019,23 @@ EOF - LIBC=dietlibc - #endif - EOF -- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` -- test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0 -- test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 -+ eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' -+ /^LIBC/{ -+ s: ::g -+ p -+ }'`" -+ test x"${LIBC}" != x && { -+ echo "${UNAME_MACHINE}-pc-linux-${LIBC}" -+ exit -+ } -+ test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } - ;; - i*86:DYNIX/ptx:4*:*) - # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. - # earlier versions are messed up and put the nodename in both - # sysname and nodename. - echo i386-sequent-sysv4 -- exit 0 ;; -+ exit ;; - i*86:UNIX_SV:4.2MP:2.*) - # Unixware is an offshoot of SVR4, but it has its own version - # number series starting with 2... -@@ -1003,27 +1043,27 @@ EOF - # I just have to hope. -- rms. - # Use sysv4.2uw... so that sysv4* matches it. - echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} -- exit 0 ;; -+ exit ;; - i*86:OS/2:*:*) - # If we were able to find `uname', then EMX Unix compatibility - # is probably installed. - echo ${UNAME_MACHINE}-pc-os2-emx -- exit 0 ;; -+ exit ;; - i*86:XTS-300:*:STOP) - echo ${UNAME_MACHINE}-unknown-stop -- exit 0 ;; -+ exit ;; - i*86:atheos:*:*) - echo ${UNAME_MACHINE}-unknown-atheos -- exit 0 ;; -- i*86:syllable:*:*) -+ exit ;; -+ i*86:syllable:*:*) - echo ${UNAME_MACHINE}-pc-syllable -- exit 0 ;; -+ exit ;; - i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - i*86:*DOS:*:*) - echo ${UNAME_MACHINE}-pc-msdosdjgpp -- exit 0 ;; -+ exit ;; - i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) - UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` - if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then -@@ -1031,15 +1071,16 @@ EOF - else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} - fi -- exit 0 ;; -- i*86:*:5:[78]*) -+ exit ;; -+ i*86:*:5:[678]*) -+ # UnixWare 7.x, OpenUNIX and OpenServer 6. - case `/bin/uname -X | grep "^Machine"` in - *486*) UNAME_MACHINE=i486 ;; - *Pentium) UNAME_MACHINE=i586 ;; - *Pent*|*Celeron) UNAME_MACHINE=i686 ;; - esac - echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} -- exit 0 ;; -+ exit ;; - i*86:*:3.2:*) - if test -f /usr/options/cb.name; then - UNAME_REL=`sed -n 's/.*Version //p' /dev/null 2>&1 ; then - echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 - else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 - fi -- exit 0 ;; -+ exit ;; - mini*:CTIX:SYS*5:*) - # "miniframe" - echo m68010-convergent-sysv -- exit 0 ;; -+ exit ;; - mc68k:UNIX:SYSTEM5:3.51m) - echo m68k-convergent-sysv -- exit 0 ;; -+ exit ;; - M680?0:D-NIX:5.3:*) - echo m68k-diab-dnix -- exit 0 ;; -- M68*:*:R3V[567]*:*) -- test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; -- 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0) -+ exit ;; -+ M68*:*:R3V[5678]*:*) -+ test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; -+ 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) - OS_REL='' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ -- && echo i486-ncr-sysv4.3${OS_REL} && exit 0 -+ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ -- && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; -+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ -- && echo i486-ncr-sysv4 && exit 0 ;; -+ && { echo i486-ncr-sysv4; exit; } ;; - m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - mc68030:UNIX_System_V:4.*:*) - echo m68k-atari-sysv4 -- exit 0 ;; -+ exit ;; - TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) - echo powerpc-unknown-lynxos${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - RM*:ReliantUNIX-*:*:*) - echo mips-sni-sysv4 -- exit 0 ;; -+ exit ;; - RM*:SINIX-*:*:*) - echo mips-sni-sysv4 -- exit 0 ;; -+ exit ;; - *:SINIX-*:*:*) - if uname -p 2>/dev/null >/dev/null ; then - UNAME_MACHINE=`(uname -p) 2>/dev/null` -@@ -1131,68 +1172,84 @@ EOF - else - echo ns32k-sni-sysv - fi -- exit 0 ;; -+ exit ;; - PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort - # says - echo i586-unisys-sysv4 -- exit 0 ;; -+ exit ;; - *:UNIX_System_V:4*:FTX*) - # From Gerald Hewes . - # How about differentiating between stratus architectures? -djm - echo hppa1.1-stratus-sysv4 -- exit 0 ;; -+ exit ;; - *:*:*:FTX*) - # From seanf@swdc.stratus.com. - echo i860-stratus-sysv4 -- exit 0 ;; -+ exit ;; -+ i*86:VOS:*:*) -+ # From Paul.Green@stratus.com. -+ echo ${UNAME_MACHINE}-stratus-vos -+ exit ;; - *:VOS:*:*) - # From Paul.Green@stratus.com. - echo hppa1.1-stratus-vos -- exit 0 ;; -+ exit ;; - mc68*:A/UX:*:*) - echo m68k-apple-aux${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - news*:NEWS-OS:6*:*) - echo mips-sony-newsos6 -- exit 0 ;; -+ exit ;; - R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} - else - echo mips-unknown-sysv${UNAME_RELEASE} - fi -- exit 0 ;; -+ exit ;; - BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. - echo powerpc-be-beos -- exit 0 ;; -+ exit ;; - BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. - echo powerpc-apple-beos -- exit 0 ;; -+ exit ;; - BePC:BeOS:*:*) # BeOS running on Intel PC compatible. - echo i586-pc-beos -- exit 0 ;; -+ exit ;; -+ BePC:Haiku:*:*) # Haiku running on Intel PC compatible. -+ echo i586-pc-haiku -+ exit ;; - SX-4:SUPER-UX:*:*) - echo sx4-nec-superux${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - SX-5:SUPER-UX:*:*) - echo sx5-nec-superux${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - SX-6:SUPER-UX:*:*) - echo sx6-nec-superux${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; -+ SX-7:SUPER-UX:*:*) -+ echo sx7-nec-superux${UNAME_RELEASE} -+ exit ;; -+ SX-8:SUPER-UX:*:*) -+ echo sx8-nec-superux${UNAME_RELEASE} -+ exit ;; -+ SX-8R:SUPER-UX:*:*) -+ echo sx8r-nec-superux${UNAME_RELEASE} -+ exit ;; - Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - *:Rhapsody:*:*) - echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - *:Darwin:*:*) -- case `uname -p` in -- *86) UNAME_PROCESSOR=i686 ;; -- powerpc) UNAME_PROCESSOR=powerpc ;; -+ UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown -+ case $UNAME_PROCESSOR in -+ unknown) UNAME_PROCESSOR=powerpc ;; - esac - echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - *:procnto*:*:* | *:QNX:[0123456789]*:*) - UNAME_PROCESSOR=`uname -p` - if test "$UNAME_PROCESSOR" = "x86"; then -@@ -1200,22 +1257,25 @@ EOF - UNAME_MACHINE=pc - fi - echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - *:QNX:*:4*) - echo i386-pc-qnx -- exit 0 ;; -+ exit ;; -+ NSE-?:NONSTOP_KERNEL:*:*) -+ echo nse-tandem-nsk${UNAME_RELEASE} -+ exit ;; - NSR-?:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - *:NonStop-UX:*:*) - echo mips-compaq-nonstopux -- exit 0 ;; -+ exit ;; - BS2000:POSIX*:*:*) - echo bs2000-siemens-sysv -- exit 0 ;; -+ exit ;; - DS/*:UNIX_System_V:*:*) - echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - *:Plan9:*:*) - # "uname -m" is not consistent, so use $cputype instead. 386 - # is converted to i386 for consistency with other x86 -@@ -1226,31 +1286,47 @@ EOF - UNAME_MACHINE="$cputype" - fi - echo ${UNAME_MACHINE}-unknown-plan9 -- exit 0 ;; -+ exit ;; - *:TOPS-10:*:*) - echo pdp10-unknown-tops10 -- exit 0 ;; -+ exit ;; - *:TENEX:*:*) - echo pdp10-unknown-tenex -- exit 0 ;; -+ exit ;; - KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) - echo pdp10-dec-tops20 -- exit 0 ;; -+ exit ;; - XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) - echo pdp10-xkl-tops20 -- exit 0 ;; -+ exit ;; - *:TOPS-20:*:*) - echo pdp10-unknown-tops20 -- exit 0 ;; -+ exit ;; - *:ITS:*:*) - echo pdp10-unknown-its -- exit 0 ;; -+ exit ;; - SEI:*:*:SEIUX) - echo mips-sei-seiux${UNAME_RELEASE} -- exit 0 ;; -+ exit ;; - *:DragonFly:*:*) - echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` -- exit 0 ;; -+ exit ;; -+ *:*VMS:*:*) -+ UNAME_MACHINE=`(uname -p) 2>/dev/null` -+ case "${UNAME_MACHINE}" in -+ A*) echo alpha-dec-vms ; exit ;; -+ I*) echo ia64-dec-vms ; exit ;; -+ V*) echo vax-dec-vms ; exit ;; -+ esac ;; -+ *:XENIX:*:SysV) -+ echo i386-pc-xenix -+ exit ;; -+ i*86:skyos:*:*) -+ echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' -+ exit ;; -+ i*86:rdos:*:*) -+ echo ${UNAME_MACHINE}-pc-rdos -+ exit ;; - esac - - #echo '(No uname command or uname output not recognized.)' 1>&2 -@@ -1282,7 +1358,7 @@ main () - #endif - - #if defined (__arm) && defined (__acorn) && defined (__unix) -- printf ("arm-acorn-riscix"); exit (0); -+ printf ("arm-acorn-riscix\n"); exit (0); - #endif - - #if defined (hp300) && !defined (hpux) -@@ -1371,11 +1447,12 @@ main () - } - EOF - --$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0 -+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && -+ { echo "$SYSTEM_NAME"; exit; } - - # Apollos put the system type in the environment. - --test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } -+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } - - # Convex versions that predate uname can use getsysinfo(1) - -@@ -1384,22 +1461,22 @@ then - case `getsysinfo -f cpu_type` in - c1*) - echo c1-convex-bsd -- exit 0 ;; -+ exit ;; - c2*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi -- exit 0 ;; -+ exit ;; - c34*) - echo c34-convex-bsd -- exit 0 ;; -+ exit ;; - c38*) - echo c38-convex-bsd -- exit 0 ;; -+ exit ;; - c4*) - echo c4-convex-bsd -- exit 0 ;; -+ exit ;; - esac - fi - -@@ -1410,7 +1487,9 @@ This script, last modified $timestamp, h - the operating system you are using. It is advised that you - download the most up to date version of the config scripts from - -- ftp://ftp.gnu.org/pub/gnu/config/ -+ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD -+and -+ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD - - If the version you run ($0) is already up to date, please - send the following data and any information you think might be -Index: gdb-7.2.90.20110703/readline/support/config.rpath -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/support/config.rpath 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/support/config.rpath 2011-07-03 10:41:21.000000000 +0200 -@@ -6,19 +6,18 @@ - # Taken from GNU libtool, 2001 - # Originally by Gordon Matzigkeit , 1996 - # --# This program is free software; you can redistribute it and/or modify -+# 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 2 of the License, or -+# 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. -+# 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, write to the Free Software --# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+# along with this program. If not, see . - # - # As a special exception to the GNU General Public License, if you - # distribute this file as part of a program that contains a -Index: gdb-7.2.90.20110703/readline/support/config.sub -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/support/config.sub 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/support/config.sub 2011-07-03 10:41:21.000000000 +0200 -@@ -1,9 +1,10 @@ - #! /bin/sh - # Configuration validation subroutine script. - # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, --# 2000, 2001, 2002, 2003 Free Software Foundation, Inc. -+# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 20098 -+# Free Software Foundation, Inc. - --timestamp='2004-02-16' -+timestamp='2008-03-26' - - # This file is (in principle) common to ALL GNU software. - # The presence of a machine in this file suggests that SOME GNU software -@@ -21,14 +22,15 @@ timestamp='2004-02-16' - # - # You should have received a copy of the GNU General Public License - # along with this program; if not, write to the Free Software --# Foundation, Inc., 59 Temple Place - Suite 330, --# Boston, MA 02111-1307, USA. -- -+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA -+# 02110-1301, USA. -+# - # As a special exception to the GNU General Public License, if you - # distribute this file as part of a program that contains a - # configuration script generated by Autoconf, you may include it under - # the same distribution terms that you use for the rest of that program. - -+ - # Please send patches to . Submit a context - # diff and a properly formatted ChangeLog entry. - # -@@ -70,8 +72,8 @@ Report bugs and patches to . - - for dir - do -Index: gdb-7.2.90.20110703/readline/support/mkdist -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/support/mkdist 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/support/mkdist 2011-07-03 10:41:21.000000000 +0200 -@@ -12,19 +12,19 @@ - - # Copyright (C) 1996-2002 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 2, or (at your option) --# any later version. -+# 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. -+# 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 . - # --# You should have received a copy of the GNU General Public License --# along with this program; if not, write to the Free Software --# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - SRCDIR=src - ROOTNAME=bash -Index: gdb-7.2.90.20110703/readline/support/shlib-install -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/support/shlib-install 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/support/shlib-install 2011-07-03 10:41:21.000000000 +0200 -@@ -3,7 +3,7 @@ - # shlib-install - install a shared library and do any necessary host-specific - # post-installation configuration (like ldconfig) - # --# usage: shlib-install [-D] -O host_os -d installation-dir [-b bin-dir] -i install-prog [-U] library -+# usage: shlib-install [-D] -O host_os [-V host_vendor] -d installation-dir [-b bin-dir] -i install-prog [-U] library - # - # Chet Ramey - # chet@po.cwru.edu -@@ -15,13 +15,14 @@ INSTALLDIR=/usr/local/lib - LDCONFIG=ldconfig - - PROGNAME=`basename $0` --USAGE="$PROGNAME [-D] -O host_os -d installation-dir [-b bin-dir] -i install-prog [-U] library" -+USAGE="$PROGNAME [-D] -O host_os [-V host_vendor] -d installation-dir [-b bin-dir] -i install-prog [-U] library" - - # process options - - while [ $# -gt 0 ]; do - case "$1" in - -O) shift; host_os="$1"; shift ;; -+ -V) shift; host_vendor="$1"; shift ;; - -d) shift; INSTALLDIR="$1"; shift ;; - -b) shift; BINDIR="$1" ; shift ;; - -i) shift; INSTALLPROG="$1" ; shift ;; -@@ -65,14 +66,15 @@ fi - # post-install/uninstall - - # HP-UX and Darwin/MacOS X require that a shared library have execute permission -+# Linux does, too, and ldd warns about it - # Cygwin installs both a dll (which must go in $BINDIR) and an implicit - # link library (in $libdir) - case "$host_os" in --hpux*|darwin*|macosx*) -+hpux*|darwin*|macosx*|linux*) - if [ -z "$uninstall" ]; then - chmod 555 ${INSTALLDIR}/${LIBNAME} - fi ;; --cygwin*) -+cygwin*|mingw*) - IMPLIBNAME=`echo ${LIBNAME} \ - | sed -e 's,^cyg,lib,' -e 's,[0-9]*.dll$,.dll.a,'` - if [ -z "$uninstall" ]; then -@@ -114,8 +116,8 @@ INSTALL_LINK2='${echo} cd $INSTALLDIR && - # - # Create symlinks to the installed library. This section is incomplete. - # --case "$host_os" in --*linux*) -+case "$host_os-$host_vendor" in -+*linux*|freebsd*-gentoo) - # libname.so.M -> libname.so.M.N - ${echo} ${RM} ${INSTALLDIR}/$LINK2 - if [ -z "$uninstall" ]; then -@@ -129,7 +131,7 @@ case "$host_os" in - fi - ;; - --bsdi4*|*gnu*|darwin*|macosx*|k*bsd*-gnu) -+bsdi4*|*gnu*|darwin*|macosx*|netbsd*) - # libname.so.M -> libname.so.M.N - ${echo} ${RM} ${INSTALLDIR}/$LINK2 - if [ -z "$uninstall" ]; then -@@ -143,7 +145,7 @@ bsdi4*|*gnu*|darwin*|macosx*|k*bsd*-gnu) - fi - ;; - --solaris2*|aix4.[2-9]*|osf*|irix[56]*|sysv[45]*|dgux*) -+solaris2*|aix4.[2-9]*|aix[5-9]*|osf*|irix[56]*|sysv[45]*|dgux*|interix*) - # libname.so -> libname.so.M - ${echo} ${RM} ${INSTALLDIR}/$LINK1 - if [ -z "$uninstall" ]; then -@@ -153,7 +155,7 @@ solaris2*|aix4.[2-9]*|osf*|irix[56]*|sys - - - # FreeBSD 3.x and above can have either a.out or ELF shared libraries --freebsd[3-9]*|freebsdelf[3-9]*|freebsdaout[3-9]*) -+freebsd3*|freebsdaout*) - if [ -x /usr/bin/objformat ] && [ "`/usr/bin/objformat`" = "elf" ]; then - # libname.so -> libname.so.M - ${echo} ${RM} ${INSTALLDIR}/$LINK1 -@@ -175,6 +177,14 @@ freebsd[3-9]*|freebsdelf[3-9]*|freebsdao - fi - ;; - -+freebsd[4-9]*|freebsdelf*|dragonfly*) -+ # libname.so -> libname.so.M -+ ${echo} ${RM} ${INSTALLDIR}/$LINK1 -+ if [ -z "$uninstall" ]; then -+ eval $INSTALL_LINK1 -+ fi -+ ;; -+ - hpux1*) - # libname.sl -> libname.M - ${echo} ${RM} ${INSTALLDIR}/$LINK1.sl -@@ -183,7 +193,7 @@ hpux1*) - fi - ;; - --cygwin*) -+cygwin*|mingw*) - # Links to .dlls don't work. Hence shobj-conf used DLLVERSION.dll - # instead of so.SHLIB_MAJOR.SHLIB_MINOR. The postinstall above - # took care of everything else. -Index: gdb-7.2.90.20110703/readline/support/shobj-conf -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/support/shobj-conf 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/support/shobj-conf 2011-07-03 10:41:21.000000000 +0200 -@@ -10,21 +10,23 @@ - # Chet Ramey - # chet@po.cwru.edu - --# Copyright (C) 1996-2002 Free Software Foundation, Inc. -+# Copyright (C) 1996-2009 Free Software Foundation, Inc. -+# -+# This file is part of GNU Bash, the Bourne Again SHell. -+# -+# 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 . - # --# 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 2, 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, write to the Free Software --# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - # - # defaults -@@ -62,7 +64,7 @@ while [ $# -gt 0 ]; do - esac - done - --case "${host_os}-${SHOBJ_CC}" in -+case "${host_os}-${SHOBJ_CC}-${host_vendor}" in - sunos4*-*gcc*) - SHOBJ_CFLAGS=-fpic - SHOBJ_LD=/usr/bin/ld -@@ -80,15 +82,17 @@ sunos4*) - ;; - - sunos5*-*gcc*|solaris2*-*gcc*) -- SHOBJ_CFLAGS=-fpic - SHOBJ_LD='${CC}' - ld_used=`gcc -print-prog-name=ld` - if ${ld_used} -V 2>&1 | grep GNU >/dev/null 2>&1; then - # This line works for the GNU ld - SHOBJ_LDFLAGS='-shared -Wl,-h,$@' -+ # http://sourceware.org/ml/binutils/2001-08/msg00361.html -+ SHOBJ_CFLAGS=-fPIC - else - # This line works for the Solaris linker in /usr/ccs/bin/ld - SHOBJ_LDFLAGS='-shared -Wl,-i -Wl,-h,$@' -+ SHOBJ_CFLAGS=-fpic - fi - - # SHLIB_XLDFLAGS='-R $(libdir)' -@@ -104,8 +108,8 @@ sunos5*|solaris2*) - SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' - ;; - --# All versions of Linux or the semi-mythical GNU Hurd. --linux*-*|gnu*-*|k*bsd*-gnu-*) -+# All versions of Linux (including Gentoo/FreeBSD) or the semi-mythical GNU Hurd. -+linux*-*|gnu*-*|k*bsd*-gnu-*|freebsd*-gentoo) - SHOBJ_CFLAGS=-fPIC - SHOBJ_LD='${CC}' - SHOBJ_LDFLAGS='-shared -Wl,-soname,$@' -@@ -114,7 +118,7 @@ linux*-*|gnu*-*|k*bsd*-gnu-*) - SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' - ;; - --freebsd2* | netbsd*) -+freebsd2*) - SHOBJ_CFLAGS=-fpic - SHOBJ_LD=ld - SHOBJ_LDFLAGS='-x -Bshareable' -@@ -124,8 +128,8 @@ freebsd2* | netbsd*) - ;; - - # FreeBSD-3.x ELF --freebsd[3-9]*|freebsdelf[3-9]*|freebsdaout[3-9]*|dragonfly*) -- SHOBJ_CFLAGS=-fpic -+freebsd3*|freebsdaout*) -+ SHOBJ_CFLAGS=-fPIC - SHOBJ_LD='${CC}' - - if [ -x /usr/bin/objformat ] && [ "`/usr/bin/objformat`" = "elf" ]; then -@@ -141,7 +145,35 @@ freebsd[3-9]*|freebsdelf[3-9]*|freebsdao - fi - ;; - -+# FreeBSD-4.x and later have only ELF -+freebsd[4-9]*|freebsdelf*|dragonfly*) -+ SHOBJ_CFLAGS=-fPIC -+ SHOBJ_LD='${CC}' -+ -+ SHOBJ_LDFLAGS='-shared -Wl,-soname,$@' -+ SHLIB_XLDFLAGS='-Wl,-rpath,$(libdir)' -+ -+ SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' -+ ;; -+ - # Darwin/MacOS X -+darwin[89]*|darwin10*) -+ SHOBJ_STATUS=supported -+ SHLIB_STATUS=supported -+ -+ SHOBJ_CFLAGS='-fno-common' -+ -+ SHOBJ_LD='MACOSX_DEPLOYMENT_TARGET=10.3 ${CC}' -+ -+ SHLIB_LIBVERSION='$(SHLIB_MAJOR)$(SHLIB_MINOR).$(SHLIB_LIBSUFF)' -+ SHLIB_LIBSUFF='dylib' -+ -+ SHOBJ_LDFLAGS='-dynamiclib -dynamic -undefined dynamic_lookup -arch_only `/usr/bin/arch`' -+ SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v' -+ -+ SHLIB_LIBS='-lncurses' # see if -lcurses works on MacOS X 10.1 -+ ;; -+ - darwin*|macosx*) - SHOBJ_STATUS=unsupported - SHLIB_STATUS=supported -@@ -154,7 +186,7 @@ darwin*|macosx*) - SHLIB_LIBSUFF='dylib' - - case "${host_os}" in -- darwin[78]*) SHOBJ_LDFLAGS='' -+ darwin[789]*|darwin10*) SHOBJ_LDFLAGS='' - SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v' - ;; - *) SHOBJ_LDFLAGS='-dynamic' -@@ -165,7 +197,7 @@ darwin*|macosx*) - SHLIB_LIBS='-lncurses' # see if -lcurses works on MacOS X 10.1 - ;; - --openbsd*) -+openbsd*|netbsd*) - SHOBJ_CFLAGS=-fPIC - SHOBJ_LD='${CC}' - SHOBJ_LDFLAGS='-shared' -@@ -230,7 +262,7 @@ osf*) - SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' - ;; - --aix4.[2-9]*-*gcc*) # lightly tested by jik@cisco.com -+aix4.[2-9]*-*gcc*|aix[5-9].*-*gcc*) # lightly tested by jik@cisco.com - SHOBJ_CFLAGS=-fpic - SHOBJ_LD='ld' - SHOBJ_LDFLAGS='-bdynamic -bnoentry -bexpall' -@@ -241,7 +273,7 @@ aix4.[2-9]*-*gcc*) # lightly tested by - SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' - ;; - --aix4.[2-9]*) -+aix4.[2-9]*|aix[5-9].*) - SHOBJ_CFLAGS=-K - SHOBJ_LD='ld' - SHOBJ_LDFLAGS='-bdynamic -bnoentry -bexpall' -@@ -312,7 +344,7 @@ hpux10*-*gcc*) - SHOBJ_LD='${CC}' - # if you have problems linking here, moving the `-Wl,+h,$@' from - # SHLIB_XLDFLAGS to SHOBJ_LDFLAGS has been reported to work -- SHOBJ_LDFLAGS='-shared -Wl,-b -Wl,+s' -+ SHOBJ_LDFLAGS='-shared -fpic -Wl,-b -Wl,+s' - - SHLIB_XLDFLAGS='-Wl,+h,$@ -Wl,+b,$(libdir)' - SHLIB_LIBSUFF='sl' -@@ -472,20 +504,37 @@ msdos*) - - cygwin*) - SHOBJ_LD='$(CC)' -- SHOBJ_LDFLAGS='-shared -Wl,--enable-auto-import -Wl,--enable-auto-image-base -Wl,--export-all -Wl,--out-implib=$(@).a' -- SHLIB_LIBPREF='cyg' -- SHLIB_LIBSUFF='dll' -- SHLIB_LIBVERSION='$(SHLIB_DLLVERSION).$(SHLIB_LIBSUFF)' -- SHLIB_LIBS='$(TERMCAP_LIB)' -+ SHOBJ_LDFLAGS='-shared -Wl,--enable-auto-import -Wl,--enable-auto-image-base -Wl,--export-all -Wl,--out-implib=$(@).a' -+ SHLIB_LIBPREF='cyg' -+ SHLIB_LIBSUFF='dll' -+ SHLIB_LIBVERSION='$(SHLIB_DLLVERSION).$(SHLIB_LIBSUFF)' -+ SHLIB_LIBS='$(TERMCAP_LIB)' - - SHLIB_DOT= -- # For official cygwin releases, DLLVERSION will be defined in the -- # environment of configure, and will be incremented any time the API -- # changes in a non-backwards compatible manner. Otherwise, it is just -- # SHLIB_MAJOR. -- if [ -n "$DLLVERSION" ] ; then -+ # For official cygwin releases, DLLVERSION will be defined in the -+ # environment of configure, and will be incremented any time the API -+ # changes in a non-backwards compatible manner. Otherwise, it is just -+ # SHLIB_MAJOR. -+ if [ -n "$DLLVERSION" ] ; then - SHLIB_DLLVERSION="$DLLVERSION" -- fi -+ fi -+ ;; -+ -+mingw*) -+ SHOBJ_LD='$(CC)' -+ SHOBJ_LDFLAGS='-shared -Wl,--enable-auto-import -Wl,--enable-auto-image-base -Wl,--export-all -Wl,--out-implib=$(@).a' -+ SHLIB_LIBSUFF='dll' -+ SHLIB_LIBVERSION='$(SHLIB_DLLVERSION).$(SHLIB_LIBSUFF)' -+ SHLIB_LIBS='$(TERMCAP_LIB)' -+ -+ SHLIB_DOT= -+ # For official cygwin releases, DLLVERSION will be defined in the -+ # environment of configure, and will be incremented any time the API -+ # changes in a non-backwards compatible manner. Otherwise, it is just -+ # SHLIB_MAJOR. -+ if [ -n "$DLLVERSION" ] ; then -+ SHLIB_DLLVERSION="$DLLVERSION" -+ fi - ;; - - # -Index: gdb-7.2.90.20110703/readline/support/wcwidth.c -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/support/wcwidth.c 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/support/wcwidth.c 2011-07-03 10:41:21.000000000 +0200 -@@ -1,21 +1,73 @@ - /* -- * This is an implementation of wcwidth() and wcswidth() as defined in -- * "The Single UNIX Specification, Version 2, The Open Group, 1997" -- * -+ * This is an implementation of wcwidth() and wcswidth() (defined in -+ * IEEE Std 1002.1-2001) for Unicode. - * -- * Markus Kuhn -- 2001-09-08 -- public domain -+ * http://www.opengroup.org/onlinepubs/007904975/functions/wcwidth.html -+ * http://www.opengroup.org/onlinepubs/007904975/functions/wcswidth.html -+ * -+ * In fixed-width output devices, Latin characters all occupy a single -+ * "cell" position of equal width, whereas ideographic CJK characters -+ * occupy two such cells. Interoperability between terminal-line -+ * applications and (teletype-style) character terminals using the -+ * UTF-8 encoding requires agreement on which character should advance -+ * the cursor by how many cell positions. No established formal -+ * standards exist at present on which Unicode character shall occupy -+ * how many cell positions on character terminals. These routines are -+ * a first attempt of defining such behavior based on simple rules -+ * applied to data provided by the Unicode Consortium. -+ * -+ * For some graphical characters, the Unicode standard explicitly -+ * defines a character-cell width via the definition of the East Asian -+ * FullWidth (F), Wide (W), Half-width (H), and Narrow (Na) classes. -+ * In all these cases, there is no ambiguity about which width a -+ * terminal shall use. For characters in the East Asian Ambiguous (A) -+ * class, the width choice depends purely on a preference of backward -+ * compatibility with either historic CJK or Western practice. -+ * Choosing single-width for these characters is easy to justify as -+ * the appropriate long-term solution, as the CJK practice of -+ * displaying these characters as double-width comes from historic -+ * implementation simplicity (8-bit encoded characters were displayed -+ * single-width and 16-bit ones double-width, even for Greek, -+ * Cyrillic, etc.) and not any typographic considerations. -+ * -+ * Much less clear is the choice of width for the Not East Asian -+ * (Neutral) class. Existing practice does not dictate a width for any -+ * of these characters. It would nevertheless make sense -+ * typographically to allocate two character cells to characters such -+ * as for instance EM SPACE or VOLUME INTEGRAL, which cannot be -+ * represented adequately with a single-width glyph. The following -+ * routines at present merely assign a single-cell width to all -+ * neutral characters, in the interest of simplicity. This is not -+ * entirely satisfactory and should be reconsidered before -+ * establishing a formal standard in this area. At the moment, the -+ * decision which Not East Asian (Neutral) characters should be -+ * represented by double-width glyphs cannot yet be answered by -+ * applying a simple rule from the Unicode database content. Setting -+ * up a proper standard for the behavior of UTF-8 character terminals -+ * will require a careful analysis not only of each Unicode character, -+ * but also of each presentation form, something the author of these -+ * routines has avoided to do so far. -+ * -+ * http://www.unicode.org/unicode/reports/tr11/ -+ * -+ * Markus Kuhn -- 2007-05-26 (Unicode 5.0) -+ * -+ * Permission to use, copy, modify, and distribute this software -+ * for any purpose and without fee is hereby granted. The author -+ * disclaims all warranties with regard to this software. -+ * -+ * Latest version: http://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c - */ - - #ifdef __GO32__ --/* DJGPP needs to include this before including wchar.h. */ --# include -+# include - #endif - - #include - - struct interval { -- unsigned short first; -- unsigned short last; -+ int first; -+ int last; - }; - - /* auxiliary function for binary search in interval table */ -@@ -39,7 +91,7 @@ static int bisearch(wchar_t ucs, const s - } - - --/* The following functions define the column width of an ISO 10646 -+/* The following two functions define the column width of an ISO 10646 - * character as follows: - * - * - The null character (U+0000) has a column width of 0. -@@ -51,6 +103,8 @@ static int bisearch(wchar_t ucs, const s - * category code Mn or Me in the Unicode database) have a - * column width of 0. - * -+ * - SOFT HYPHEN (U+00AD) has a column width of 1. -+ * - * - Other format characters (general category code Cf in the Unicode - * database) and ZERO WIDTH SPACE (U+200B) have a column width of 0. - * -@@ -58,7 +112,7 @@ static int bisearch(wchar_t ucs, const s - * have a column width of 0. - * - * - Spacing characters in the East Asian Wide (W) or East Asian -- * FullWidth (F) category as defined in Unicode Technical -+ * Full-width (F) category as defined in Unicode Technical - * Report #11 have a column width of 2. - * - * - All remaining characters (including all printable -@@ -69,44 +123,59 @@ static int bisearch(wchar_t ucs, const s - * in ISO 10646. - */ - --int wcwidth(wchar_t ucs) -+int mk_wcwidth(wchar_t ucs) - { - /* sorted list of non-overlapping intervals of non-spacing characters */ -+ /* generated by "uniset +cat=Me +cat=Mn +cat=Cf -00AD +1160-11FF +200B c" */ - static const struct interval combining[] = { -- { 0x0300, 0x034E }, { 0x0360, 0x0362 }, { 0x0483, 0x0486 }, -- { 0x0488, 0x0489 }, { 0x0591, 0x05A1 }, { 0x05A3, 0x05B9 }, -- { 0x05BB, 0x05BD }, { 0x05BF, 0x05BF }, { 0x05C1, 0x05C2 }, -- { 0x05C4, 0x05C4 }, { 0x064B, 0x0655 }, { 0x0670, 0x0670 }, -+ { 0x0300, 0x036F }, { 0x0483, 0x0486 }, { 0x0488, 0x0489 }, -+ { 0x0591, 0x05BD }, { 0x05BF, 0x05BF }, { 0x05C1, 0x05C2 }, -+ { 0x05C4, 0x05C5 }, { 0x05C7, 0x05C7 }, { 0x0600, 0x0603 }, -+ { 0x0610, 0x0615 }, { 0x064B, 0x065E }, { 0x0670, 0x0670 }, - { 0x06D6, 0x06E4 }, { 0x06E7, 0x06E8 }, { 0x06EA, 0x06ED }, - { 0x070F, 0x070F }, { 0x0711, 0x0711 }, { 0x0730, 0x074A }, -- { 0x07A6, 0x07B0 }, { 0x0901, 0x0902 }, { 0x093C, 0x093C }, -- { 0x0941, 0x0948 }, { 0x094D, 0x094D }, { 0x0951, 0x0954 }, -- { 0x0962, 0x0963 }, { 0x0981, 0x0981 }, { 0x09BC, 0x09BC }, -- { 0x09C1, 0x09C4 }, { 0x09CD, 0x09CD }, { 0x09E2, 0x09E3 }, -- { 0x0A02, 0x0A02 }, { 0x0A3C, 0x0A3C }, { 0x0A41, 0x0A42 }, -- { 0x0A47, 0x0A48 }, { 0x0A4B, 0x0A4D }, { 0x0A70, 0x0A71 }, -- { 0x0A81, 0x0A82 }, { 0x0ABC, 0x0ABC }, { 0x0AC1, 0x0AC5 }, -- { 0x0AC7, 0x0AC8 }, { 0x0ACD, 0x0ACD }, { 0x0B01, 0x0B01 }, -- { 0x0B3C, 0x0B3C }, { 0x0B3F, 0x0B3F }, { 0x0B41, 0x0B43 }, -- { 0x0B4D, 0x0B4D }, { 0x0B56, 0x0B56 }, { 0x0B82, 0x0B82 }, -- { 0x0BC0, 0x0BC0 }, { 0x0BCD, 0x0BCD }, { 0x0C3E, 0x0C40 }, -- { 0x0C46, 0x0C48 }, { 0x0C4A, 0x0C4D }, { 0x0C55, 0x0C56 }, -+ { 0x07A6, 0x07B0 }, { 0x07EB, 0x07F3 }, { 0x0901, 0x0902 }, -+ { 0x093C, 0x093C }, { 0x0941, 0x0948 }, { 0x094D, 0x094D }, -+ { 0x0951, 0x0954 }, { 0x0962, 0x0963 }, { 0x0981, 0x0981 }, -+ { 0x09BC, 0x09BC }, { 0x09C1, 0x09C4 }, { 0x09CD, 0x09CD }, -+ { 0x09E2, 0x09E3 }, { 0x0A01, 0x0A02 }, { 0x0A3C, 0x0A3C }, -+ { 0x0A41, 0x0A42 }, { 0x0A47, 0x0A48 }, { 0x0A4B, 0x0A4D }, -+ { 0x0A70, 0x0A71 }, { 0x0A81, 0x0A82 }, { 0x0ABC, 0x0ABC }, -+ { 0x0AC1, 0x0AC5 }, { 0x0AC7, 0x0AC8 }, { 0x0ACD, 0x0ACD }, -+ { 0x0AE2, 0x0AE3 }, { 0x0B01, 0x0B01 }, { 0x0B3C, 0x0B3C }, -+ { 0x0B3F, 0x0B3F }, { 0x0B41, 0x0B43 }, { 0x0B4D, 0x0B4D }, -+ { 0x0B56, 0x0B56 }, { 0x0B82, 0x0B82 }, { 0x0BC0, 0x0BC0 }, -+ { 0x0BCD, 0x0BCD }, { 0x0C3E, 0x0C40 }, { 0x0C46, 0x0C48 }, -+ { 0x0C4A, 0x0C4D }, { 0x0C55, 0x0C56 }, { 0x0CBC, 0x0CBC }, - { 0x0CBF, 0x0CBF }, { 0x0CC6, 0x0CC6 }, { 0x0CCC, 0x0CCD }, -- { 0x0D41, 0x0D43 }, { 0x0D4D, 0x0D4D }, { 0x0DCA, 0x0DCA }, -- { 0x0DD2, 0x0DD4 }, { 0x0DD6, 0x0DD6 }, { 0x0E31, 0x0E31 }, -- { 0x0E34, 0x0E3A }, { 0x0E47, 0x0E4E }, { 0x0EB1, 0x0EB1 }, -- { 0x0EB4, 0x0EB9 }, { 0x0EBB, 0x0EBC }, { 0x0EC8, 0x0ECD }, -- { 0x0F18, 0x0F19 }, { 0x0F35, 0x0F35 }, { 0x0F37, 0x0F37 }, -- { 0x0F39, 0x0F39 }, { 0x0F71, 0x0F7E }, { 0x0F80, 0x0F84 }, -- { 0x0F86, 0x0F87 }, { 0x0F90, 0x0F97 }, { 0x0F99, 0x0FBC }, -- { 0x0FC6, 0x0FC6 }, { 0x102D, 0x1030 }, { 0x1032, 0x1032 }, -- { 0x1036, 0x1037 }, { 0x1039, 0x1039 }, { 0x1058, 0x1059 }, -- { 0x1160, 0x11FF }, { 0x17B7, 0x17BD }, { 0x17C6, 0x17C6 }, -- { 0x17C9, 0x17D3 }, { 0x180B, 0x180E }, { 0x18A9, 0x18A9 }, -- { 0x200B, 0x200F }, { 0x202A, 0x202E }, { 0x206A, 0x206F }, -- { 0x20D0, 0x20E3 }, { 0x302A, 0x302F }, { 0x3099, 0x309A }, -- { 0xFB1E, 0xFB1E }, { 0xFE20, 0xFE23 }, { 0xFEFF, 0xFEFF }, -- { 0xFFF9, 0xFFFB } -+ { 0x0CE2, 0x0CE3 }, { 0x0D41, 0x0D43 }, { 0x0D4D, 0x0D4D }, -+ { 0x0DCA, 0x0DCA }, { 0x0DD2, 0x0DD4 }, { 0x0DD6, 0x0DD6 }, -+ { 0x0E31, 0x0E31 }, { 0x0E34, 0x0E3A }, { 0x0E47, 0x0E4E }, -+ { 0x0EB1, 0x0EB1 }, { 0x0EB4, 0x0EB9 }, { 0x0EBB, 0x0EBC }, -+ { 0x0EC8, 0x0ECD }, { 0x0F18, 0x0F19 }, { 0x0F35, 0x0F35 }, -+ { 0x0F37, 0x0F37 }, { 0x0F39, 0x0F39 }, { 0x0F71, 0x0F7E }, -+ { 0x0F80, 0x0F84 }, { 0x0F86, 0x0F87 }, { 0x0F90, 0x0F97 }, -+ { 0x0F99, 0x0FBC }, { 0x0FC6, 0x0FC6 }, { 0x102D, 0x1030 }, -+ { 0x1032, 0x1032 }, { 0x1036, 0x1037 }, { 0x1039, 0x1039 }, -+ { 0x1058, 0x1059 }, { 0x1160, 0x11FF }, { 0x135F, 0x135F }, -+ { 0x1712, 0x1714 }, { 0x1732, 0x1734 }, { 0x1752, 0x1753 }, -+ { 0x1772, 0x1773 }, { 0x17B4, 0x17B5 }, { 0x17B7, 0x17BD }, -+ { 0x17C6, 0x17C6 }, { 0x17C9, 0x17D3 }, { 0x17DD, 0x17DD }, -+ { 0x180B, 0x180D }, { 0x18A9, 0x18A9 }, { 0x1920, 0x1922 }, -+ { 0x1927, 0x1928 }, { 0x1932, 0x1932 }, { 0x1939, 0x193B }, -+ { 0x1A17, 0x1A18 }, { 0x1B00, 0x1B03 }, { 0x1B34, 0x1B34 }, -+ { 0x1B36, 0x1B3A }, { 0x1B3C, 0x1B3C }, { 0x1B42, 0x1B42 }, -+ { 0x1B6B, 0x1B73 }, { 0x1DC0, 0x1DCA }, { 0x1DFE, 0x1DFF }, -+ { 0x200B, 0x200F }, { 0x202A, 0x202E }, { 0x2060, 0x2063 }, -+ { 0x206A, 0x206F }, { 0x20D0, 0x20EF }, { 0x302A, 0x302F }, -+ { 0x3099, 0x309A }, { 0xA806, 0xA806 }, { 0xA80B, 0xA80B }, -+ { 0xA825, 0xA826 }, { 0xFB1E, 0xFB1E }, { 0xFE00, 0xFE0F }, -+ { 0xFE20, 0xFE23 }, { 0xFEFF, 0xFEFF }, { 0xFFF9, 0xFFFB }, -+ { 0x10A01, 0x10A03 }, { 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A0F }, -+ { 0x10A38, 0x10A3A }, { 0x10A3F, 0x10A3F }, { 0x1D167, 0x1D169 }, -+ { 0x1D173, 0x1D182 }, { 0x1D185, 0x1D18B }, { 0x1D1AA, 0x1D1AD }, -+ { 0x1D242, 0x1D244 }, { 0xE0001, 0xE0001 }, { 0xE0020, 0xE007F }, -+ { 0xE0100, 0xE01EF } - }; - - /* test for 8-bit control characters */ -@@ -125,23 +194,26 @@ int wcwidth(wchar_t ucs) - return 1 + - (ucs >= 0x1100 && - (ucs <= 0x115f || /* Hangul Jamo init. consonants */ -- (ucs >= 0x2e80 && ucs <= 0xa4cf && (ucs & ~0x0011) != 0x300a && -+ ucs == 0x2329 || ucs == 0x232a || -+ (ucs >= 0x2e80 && ucs <= 0xa4cf && - ucs != 0x303f) || /* CJK ... Yi */ - (ucs >= 0xac00 && ucs <= 0xd7a3) || /* Hangul Syllables */ - (ucs >= 0xf900 && ucs <= 0xfaff) || /* CJK Compatibility Ideographs */ -+ (ucs >= 0xfe10 && ucs <= 0xfe19) || /* Vertical forms */ - (ucs >= 0xfe30 && ucs <= 0xfe6f) || /* CJK Compatibility Forms */ -- (ucs >= 0xff00 && ucs <= 0xff5f) || /* Fullwidth Forms */ -+ (ucs >= 0xff00 && ucs <= 0xff60) || /* Fullwidth Forms */ - (ucs >= 0xffe0 && ucs <= 0xffe6) || -- (ucs >= 0x20000 && ucs <= 0x2ffff))); -+ (ucs >= 0x20000 && ucs <= 0x2fffd) || -+ (ucs >= 0x30000 && ucs <= 0x3fffd))); - } - - --int wcswidth(const wchar_t *pwcs, size_t n) -+int mk_wcswidth(const wchar_t *pwcs, size_t n) - { - int w, width = 0; - - for (;*pwcs && n-- > 0; pwcs++) -- if ((w = wcwidth(*pwcs)) < 0) -+ if ((w = mk_wcwidth(*pwcs)) < 0) - return -1; - else - width += w; -@@ -151,20 +223,21 @@ int wcswidth(const wchar_t *pwcs, size_t - - - /* -- * The following function is the same as wcwidth(), except that -- * spacing characters in the East Asian Ambiguous (A) category as -- * defined in Unicode Technical Report #11 have a column width of 2. -- * This experimental variant might be useful for users of CJK legacy -- * encodings who want to migrate to UCS. It is not otherwise -- * recommended for general use. -+ * The following functions are the same as mk_wcwidth() and -+ * mk_wcswidth(), except that spacing characters in the East Asian -+ * Ambiguous (A) category as defined in Unicode Technical Report #11 -+ * have a column width of 2. This variant might be useful for users of -+ * CJK legacy encodings who want to migrate to UCS without changing -+ * the traditional terminal character-width behaviour. It is not -+ * otherwise recommended for general use. - */ --static int wcwidth_cjk(wchar_t ucs) -+int mk_wcwidth_cjk(wchar_t ucs) - { - /* sorted list of non-overlapping intervals of East Asian Ambiguous -- * characters */ -+ * characters, generated by "uniset +WIDTH-A -cat=Me -cat=Mn -cat=Cf c" */ - static const struct interval ambiguous[] = { - { 0x00A1, 0x00A1 }, { 0x00A4, 0x00A4 }, { 0x00A7, 0x00A8 }, -- { 0x00AA, 0x00AA }, { 0x00AD, 0x00AE }, { 0x00B0, 0x00B4 }, -+ { 0x00AA, 0x00AA }, { 0x00AE, 0x00AE }, { 0x00B0, 0x00B4 }, - { 0x00B6, 0x00BA }, { 0x00BC, 0x00BF }, { 0x00C6, 0x00C6 }, - { 0x00D0, 0x00D0 }, { 0x00D7, 0x00D8 }, { 0x00DE, 0x00E1 }, - { 0x00E6, 0x00E6 }, { 0x00E8, 0x00EA }, { 0x00EC, 0x00ED }, -@@ -180,42 +253,41 @@ static int wcwidth_cjk(wchar_t ucs) - { 0x01DC, 0x01DC }, { 0x0251, 0x0251 }, { 0x0261, 0x0261 }, - { 0x02C4, 0x02C4 }, { 0x02C7, 0x02C7 }, { 0x02C9, 0x02CB }, - { 0x02CD, 0x02CD }, { 0x02D0, 0x02D0 }, { 0x02D8, 0x02DB }, -- { 0x02DD, 0x02DD }, { 0x02DF, 0x02DF }, { 0x0300, 0x034E }, -- { 0x0360, 0x0362 }, { 0x0391, 0x03A1 }, { 0x03A3, 0x03A9 }, -- { 0x03B1, 0x03C1 }, { 0x03C3, 0x03C9 }, { 0x0401, 0x0401 }, -- { 0x0410, 0x044F }, { 0x0451, 0x0451 }, { 0x2010, 0x2010 }, -- { 0x2013, 0x2016 }, { 0x2018, 0x2019 }, { 0x201C, 0x201D }, -- { 0x2020, 0x2022 }, { 0x2024, 0x2027 }, { 0x2030, 0x2030 }, -- { 0x2032, 0x2033 }, { 0x2035, 0x2035 }, { 0x203B, 0x203B }, -- { 0x203E, 0x203E }, { 0x2074, 0x2074 }, { 0x207F, 0x207F }, -- { 0x2081, 0x2084 }, { 0x20AC, 0x20AC }, { 0x2103, 0x2103 }, -- { 0x2105, 0x2105 }, { 0x2109, 0x2109 }, { 0x2113, 0x2113 }, -- { 0x2116, 0x2116 }, { 0x2121, 0x2122 }, { 0x2126, 0x2126 }, -- { 0x212B, 0x212B }, { 0x2153, 0x2155 }, { 0x215B, 0x215E }, -- { 0x2160, 0x216B }, { 0x2170, 0x2179 }, { 0x2190, 0x2199 }, -- { 0x21B8, 0x21B9 }, { 0x21D2, 0x21D2 }, { 0x21D4, 0x21D4 }, -- { 0x21E7, 0x21E7 }, { 0x2200, 0x2200 }, { 0x2202, 0x2203 }, -- { 0x2207, 0x2208 }, { 0x220B, 0x220B }, { 0x220F, 0x220F }, -- { 0x2211, 0x2211 }, { 0x2215, 0x2215 }, { 0x221A, 0x221A }, -- { 0x221D, 0x2220 }, { 0x2223, 0x2223 }, { 0x2225, 0x2225 }, -- { 0x2227, 0x222C }, { 0x222E, 0x222E }, { 0x2234, 0x2237 }, -- { 0x223C, 0x223D }, { 0x2248, 0x2248 }, { 0x224C, 0x224C }, -- { 0x2252, 0x2252 }, { 0x2260, 0x2261 }, { 0x2264, 0x2267 }, -- { 0x226A, 0x226B }, { 0x226E, 0x226F }, { 0x2282, 0x2283 }, -- { 0x2286, 0x2287 }, { 0x2295, 0x2295 }, { 0x2299, 0x2299 }, -- { 0x22A5, 0x22A5 }, { 0x22BF, 0x22BF }, { 0x2312, 0x2312 }, -- { 0x2329, 0x232A }, { 0x2460, 0x24BF }, { 0x24D0, 0x24E9 }, -- { 0x2500, 0x254B }, { 0x2550, 0x2574 }, { 0x2580, 0x258F }, -- { 0x2592, 0x2595 }, { 0x25A0, 0x25A1 }, { 0x25A3, 0x25A9 }, -- { 0x25B2, 0x25B3 }, { 0x25B6, 0x25B7 }, { 0x25BC, 0x25BD }, -- { 0x25C0, 0x25C1 }, { 0x25C6, 0x25C8 }, { 0x25CB, 0x25CB }, -- { 0x25CE, 0x25D1 }, { 0x25E2, 0x25E5 }, { 0x25EF, 0x25EF }, -- { 0x2605, 0x2606 }, { 0x2609, 0x2609 }, { 0x260E, 0x260F }, -+ { 0x02DD, 0x02DD }, { 0x02DF, 0x02DF }, { 0x0391, 0x03A1 }, -+ { 0x03A3, 0x03A9 }, { 0x03B1, 0x03C1 }, { 0x03C3, 0x03C9 }, -+ { 0x0401, 0x0401 }, { 0x0410, 0x044F }, { 0x0451, 0x0451 }, -+ { 0x2010, 0x2010 }, { 0x2013, 0x2016 }, { 0x2018, 0x2019 }, -+ { 0x201C, 0x201D }, { 0x2020, 0x2022 }, { 0x2024, 0x2027 }, -+ { 0x2030, 0x2030 }, { 0x2032, 0x2033 }, { 0x2035, 0x2035 }, -+ { 0x203B, 0x203B }, { 0x203E, 0x203E }, { 0x2074, 0x2074 }, -+ { 0x207F, 0x207F }, { 0x2081, 0x2084 }, { 0x20AC, 0x20AC }, -+ { 0x2103, 0x2103 }, { 0x2105, 0x2105 }, { 0x2109, 0x2109 }, -+ { 0x2113, 0x2113 }, { 0x2116, 0x2116 }, { 0x2121, 0x2122 }, -+ { 0x2126, 0x2126 }, { 0x212B, 0x212B }, { 0x2153, 0x2154 }, -+ { 0x215B, 0x215E }, { 0x2160, 0x216B }, { 0x2170, 0x2179 }, -+ { 0x2190, 0x2199 }, { 0x21B8, 0x21B9 }, { 0x21D2, 0x21D2 }, -+ { 0x21D4, 0x21D4 }, { 0x21E7, 0x21E7 }, { 0x2200, 0x2200 }, -+ { 0x2202, 0x2203 }, { 0x2207, 0x2208 }, { 0x220B, 0x220B }, -+ { 0x220F, 0x220F }, { 0x2211, 0x2211 }, { 0x2215, 0x2215 }, -+ { 0x221A, 0x221A }, { 0x221D, 0x2220 }, { 0x2223, 0x2223 }, -+ { 0x2225, 0x2225 }, { 0x2227, 0x222C }, { 0x222E, 0x222E }, -+ { 0x2234, 0x2237 }, { 0x223C, 0x223D }, { 0x2248, 0x2248 }, -+ { 0x224C, 0x224C }, { 0x2252, 0x2252 }, { 0x2260, 0x2261 }, -+ { 0x2264, 0x2267 }, { 0x226A, 0x226B }, { 0x226E, 0x226F }, -+ { 0x2282, 0x2283 }, { 0x2286, 0x2287 }, { 0x2295, 0x2295 }, -+ { 0x2299, 0x2299 }, { 0x22A5, 0x22A5 }, { 0x22BF, 0x22BF }, -+ { 0x2312, 0x2312 }, { 0x2460, 0x24E9 }, { 0x24EB, 0x254B }, -+ { 0x2550, 0x2573 }, { 0x2580, 0x258F }, { 0x2592, 0x2595 }, -+ { 0x25A0, 0x25A1 }, { 0x25A3, 0x25A9 }, { 0x25B2, 0x25B3 }, -+ { 0x25B6, 0x25B7 }, { 0x25BC, 0x25BD }, { 0x25C0, 0x25C1 }, -+ { 0x25C6, 0x25C8 }, { 0x25CB, 0x25CB }, { 0x25CE, 0x25D1 }, -+ { 0x25E2, 0x25E5 }, { 0x25EF, 0x25EF }, { 0x2605, 0x2606 }, -+ { 0x2609, 0x2609 }, { 0x260E, 0x260F }, { 0x2614, 0x2615 }, - { 0x261C, 0x261C }, { 0x261E, 0x261E }, { 0x2640, 0x2640 }, - { 0x2642, 0x2642 }, { 0x2660, 0x2661 }, { 0x2663, 0x2665 }, - { 0x2667, 0x266A }, { 0x266C, 0x266D }, { 0x266F, 0x266F }, -- { 0x273D, 0x273D }, { 0x3008, 0x300B }, { 0x3014, 0x3015 }, -- { 0x3018, 0x301B }, { 0xFFFD, 0xFFFD } -+ { 0x273D, 0x273D }, { 0x2776, 0x277F }, { 0xE000, 0xF8FF }, -+ { 0xFFFD, 0xFFFD }, { 0xF0000, 0xFFFFD }, { 0x100000, 0x10FFFD } - }; - - /* binary search in table of non-spacing characters */ -@@ -223,16 +295,16 @@ static int wcwidth_cjk(wchar_t ucs) - sizeof(ambiguous) / sizeof(struct interval) - 1)) - return 2; - -- return wcwidth(ucs); -+ return mk_wcwidth(ucs); - } - - --int wcswidth_cjk(const wchar_t *pwcs, size_t n) -+int mk_wcswidth_cjk(const wchar_t *pwcs, size_t n) - { - int w, width = 0; - - for (;*pwcs && n-- > 0; pwcs++) -- if ((w = wcwidth_cjk(*pwcs)) < 0) -+ if ((w = mk_wcwidth_cjk(*pwcs)) < 0) - return -1; - else - width += w; -Index: gdb-7.2.90.20110703/readline/tcap.h -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/tcap.h 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/tcap.h 2011-07-03 10:41:21.000000000 +0200 -@@ -1,25 +1,23 @@ - /* tcap.h -- termcap library functions and variables. */ - --/* Copyright (C) 1996 Free Software Foundation, Inc. -+/* Copyright (C) 1996-2009 Free Software Foundation, Inc. - -- This file contains the Readline Library (the Library), a set of -- routines for providing Emacs style line input to programs that ask -- for it. -+ This file is part of the GNU Readline Library (Readline), a library -+ for reading lines of text with interactive input and history editing. - -- The Library is free software; you can redistribute it and/or modify -+ Readline 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 2, or (at your option) -- any later version. -+ the Free Software Foundation, either version 3 of the License, or -+ (at your option) any later version. - -- The Library 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. -- -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ Readline 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 Readline. If not, see . -+*/ - - #if !defined (_RLTCAP_H_) - #define _RLTCAP_H_ -Index: gdb-7.2.90.20110703/readline/terminal.c -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/terminal.c 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/terminal.c 2011-07-03 10:41:21.000000000 +0200 -@@ -1,24 +1,24 @@ - /* terminal.c -- controlling the terminal with termcap. */ - --/* Copyright (C) 1996-2005 Free Software Foundation, Inc. -+/* Copyright (C) 1996-2009 Free Software Foundation, Inc. - -- This file is part of the GNU Readline Library, a library for -- reading lines of text with interactive input and history editing. -+ This file is part of the GNU Readline Library (Readline), a library -+ for reading lines of text with interactive input and history editing. - -- The GNU Readline Library 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 2, or -+ Readline 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. - -- The GNU Readline Library 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 -+ Readline 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. - -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ You should have received a copy of the GNU General Public License -+ along with Readline. If not, see . -+*/ -+ - #define READLINE_LIBRARY - - #if defined (HAVE_CONFIG_H) -@@ -71,6 +71,17 @@ - #include "xmalloc.h" - - #if defined (__MINGW32__) -+# include -+# include -+ -+static void _win_get_screensize PARAMS((int *, int *)); -+#endif -+ -+#if defined (__EMX__) -+static void _emx_get_screensize PARAMS((int *, int *)); -+#endif -+ -+#if defined (__MINGW32__) - # include - # include - #endif -@@ -78,7 +89,10 @@ - #define CUSTOM_REDISPLAY_FUNC() (rl_redisplay_function != rl_redisplay) - #define CUSTOM_INPUT_FUNC() (rl_getc_function != rl_getc) - --int rl_prefer_env_winsize; -+/* If the calling application sets this to a non-zero value, readline will -+ use the $LINES and $COLUMNS environment variables to set its idea of the -+ window size before interrogating the kernel. */ -+int rl_prefer_env_winsize = 0; - - /* **************************************************************** */ - /* */ -@@ -93,12 +107,12 @@ static char *term_string_buffer = (char - - static int tcap_initialized; - --#if !defined (__linux__) -+#if !defined (__linux__) && !defined (NCURSES_VERSION) - # if defined (__EMX__) || defined (NEED_EXTERN_PC) - extern - # endif /* __EMX__ || NEED_EXTERN_PC */ - char PC, *BC, *UP; --#endif /* __linux__ */ -+#endif /* !__linux__ && !NCURSES_VERSION */ - - /* Some strings to control terminal actions. These are output by tputs (). */ - char *_rl_term_clreol; -@@ -122,9 +136,7 @@ char *_rl_term_IC; - char *_rl_term_dc; - char *_rl_term_DC; - --#if defined (HACK_TERMCAP_MOTION) - char *_rl_term_forward_char; --#endif /* HACK_TERMCAP_MOTION */ - - /* How to go up a line. */ - char *_rl_term_up; -@@ -195,6 +207,26 @@ _emx_get_screensize (swp, shp) - } - #endif - -+#if defined (__MINGW32__) -+static void -+_win_get_screensize (swp, shp) -+ int *swp, *shp; -+{ -+ HANDLE hConOut; -+ CONSOLE_SCREEN_BUFFER_INFO scr; -+ -+ hConOut = GetStdHandle (STD_OUTPUT_HANDLE); -+ if (hConOut != INVALID_HANDLE_VALUE) -+ { -+ if (GetConsoleScreenBufferInfo (hConOut, &scr)) -+ { -+ *swp = scr.dwSize.X; -+ *shp = scr.srWindow.Bottom - scr.srWindow.Top + 1; -+ } -+ } -+} -+#endif -+ - /* Get readline's idea of the screen size. TTY is a file descriptor open - to the terminal. If IGNORE_ENV is true, we do not pay attention to the - values of $LINES and $COLUMNS. The tests for TERM_STRING_BUFFER being -@@ -233,7 +265,9 @@ _rl_get_screen_size (tty, ignore_env) - #endif - - #if defined (__EMX__) -- _emx_get_screensize (&_rl_screenwidth, &_rl_screenheight); -+ _emx_get_screensize (&wc, &wr); -+#elif defined (__MINGW32__) -+ _win_get_screensize (&wc, &wr); - #endif - - if (ignore_env || rl_prefer_env_winsize == 0) -@@ -347,24 +381,24 @@ rl_reset_screen_size () - void - rl_resize_terminal () - { -- if (readline_echoing_p) -+ _rl_get_screen_size (fileno (rl_instream), 1); -+ if (_rl_echoing_p) - { -- _rl_get_screen_size (fileno (rl_instream), 1); - if (CUSTOM_REDISPLAY_FUNC ()) - rl_forced_update_display (); -- else -+ else if (RL_ISSTATE(RL_STATE_REDISPLAYING) == 0) - _rl_redisplay_after_sigwinch (); - } - } - - struct _tc_string { -- const char *tc_var; -+ const char * const tc_var; - char **tc_value; - }; - - /* This should be kept sorted, just in case we decide to change the - search algorithm to something smarter. */ --static struct _tc_string tc_strings[] = -+static const struct _tc_string tc_strings[] = - { - { "@7", &_rl_term_at7 }, - { "DC", &_rl_term_DC }, -@@ -389,9 +423,7 @@ static struct _tc_string tc_strings[] = - { "le", &_rl_term_backspace }, - { "mm", &_rl_term_mm }, - { "mo", &_rl_term_mo }, --#if defined (HACK_TERMCAP_MOTION) - { "nd", &_rl_term_forward_char }, --#endif - { "pc", &_rl_term_pc }, - { "up", &_rl_term_up }, - { "vb", &_rl_visible_bell }, -@@ -505,9 +537,7 @@ _rl_init_terminal_io (terminal_name) - _rl_term_ks = _rl_term_ke = _rl_term_at7 = (char *)NULL; - _rl_term_mm = _rl_term_mo = (char *)NULL; - _rl_term_ve = _rl_term_vs = (char *)NULL; --#if defined (HACK_TERMCAP_MOTION) -- term_forward_char = (char *)NULL; --#endif -+ _rl_term_forward_char = (char *)NULL; - _rl_terminal_can_insert = term_has_meta = 0; - - /* Reasonable defaults for tgoto(). Readline currently only uses -@@ -546,8 +576,8 @@ _rl_init_terminal_io (terminal_name) - - /* Check to see if this terminal has a meta key and clear the capability - variables if there is none. */ -- term_has_meta = (tgetflag ("km") || tgetflag ("MT")); -- if (!term_has_meta) -+ term_has_meta = tgetflag ("km") != 0; -+ if (term_has_meta == 0) - _rl_term_mm = _rl_term_mo = (char *)NULL; - - #endif /* !__MSDOS__ */ -@@ -663,10 +693,10 @@ _rl_backspace (count) - int - rl_crlf () - { --#if defined (NEW_TTY_DRIVER) -+#if defined (NEW_TTY_DRIVER) || defined (__MINT__) - if (_rl_term_cr) - tputs (_rl_term_cr, 1, _rl_output_character_function); --#endif /* NEW_TTY_DRIVER */ -+#endif /* NEW_TTY_DRIVER || __MINT__ */ - putc ('\n', _rl_out_stream); - return 0; - } -@@ -675,7 +705,7 @@ rl_crlf () - int - rl_ding () - { -- if (readline_echoing_p) -+ if (_rl_echoing_p) - { - switch (_rl_bell_preference) - { -Index: gdb-7.2.90.20110703/readline/text.c -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/text.c 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/text.c 2011-07-03 10:41:21.000000000 +0200 -@@ -1,24 +1,24 @@ - /* text.c -- text handling commands for readline. */ - --/* Copyright (C) 1987-2005 Free Software Foundation, Inc. -+/* Copyright (C) 1987-2010 Free Software Foundation, Inc. - -- This file is part of the GNU Readline Library, a library for -- reading lines of text with interactive input and history editing. -+ This file is part of the GNU Readline Library (Readline), a library -+ for reading lines of text with interactive input and history editing. - -- The GNU Readline Library 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 2, or -+ Readline 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. - -- The GNU Readline Library 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 -+ Readline 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. - -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ You should have received a copy of the GNU General Public License -+ along with Readline. If not, see . -+*/ -+ - #define READLINE_LIBRARY - - #if defined (HAVE_CONFIG_H) -@@ -67,6 +67,10 @@ static int _rl_insert_next_callback PARA - static int _rl_char_search_callback PARAMS((_rl_callback_generic_arg *)); - #endif - -+/* The largest chunk of text that can be inserted in one call to -+ rl_insert_text. Text blocks larger than this are divided. */ -+#define TEXT_COUNT_MAX 1024 -+ - /* **************************************************************** */ - /* */ - /* Insert and Delete */ -@@ -146,7 +150,7 @@ rl_delete_text (from, to) - if (_rl_doing_an_undo == 0) - rl_add_undo (UNDO_DELETE, from, to, text); - else -- free (text); -+ xfree (text); - - rl_end -= diff; - rl_line_buffer[rl_end] = '\0'; -@@ -185,10 +189,13 @@ _rl_replace_text (text, start, end) - { - int n; - -+ n = 0; - rl_begin_undo_group (); -- rl_delete_text (start, end + 1); -+ if (start <= end) -+ rl_delete_text (start, end + 1); - rl_point = start; -- n = rl_insert_text (text); -+ if (*text) -+ n = rl_insert_text (text); - rl_end_undo_group (); - - return n; -@@ -258,11 +265,13 @@ rl_forward_byte (count, key) - - if (count > 0) - { -- int end = rl_point + count; -+ int end, lend; -+ -+ end = rl_point + count; - #if defined (VI_MODE) -- int lend = rl_end > 0 ? rl_end - (rl_editing_mode == vi_mode) : rl_end; -+ lend = rl_end > 0 ? rl_end - (VI_COMMAND_MODE()) : rl_end; - #else -- int lend = rl_end; -+ lend = rl_end; - #endif - - if (end > lend) -@@ -280,6 +289,31 @@ rl_forward_byte (count, key) - return 0; - } - -+int -+_rl_forward_char_internal (count) -+ int count; -+{ -+ int point; -+ -+#if defined (HANDLE_MULTIBYTE) -+ point = _rl_find_next_mbchar (rl_line_buffer, rl_point, count, MB_FIND_NONZERO); -+ -+#if defined (VI_MODE) -+ if (point >= rl_end && VI_COMMAND_MODE()) -+ point = _rl_find_prev_mbchar (rl_line_buffer, rl_end, MB_FIND_NONZERO); -+#endif -+ -+ if (rl_end < 0) -+ rl_end = 0; -+#else -+ point = rl_point + count; -+ if (point > rl_end) -+ point = rl_end; -+#endif -+ -+ return (point); -+} -+ - #if defined (HANDLE_MULTIBYTE) - /* Move forward COUNT characters. */ - int -@@ -296,20 +330,18 @@ rl_forward_char (count, key) - - if (count > 0) - { -- point = _rl_find_next_mbchar (rl_line_buffer, rl_point, count, MB_FIND_NONZERO); -+ if (rl_point == rl_end && EMACS_MODE()) -+ { -+ rl_ding (); -+ return 0; -+ } - --#if defined (VI_MODE) -- if (rl_end <= point && rl_editing_mode == vi_mode) -- point = _rl_find_prev_mbchar (rl_line_buffer, rl_end, MB_FIND_NONZERO); --#endif -+ point = _rl_forward_char_internal (count); - - if (rl_point == point) - rl_ding (); - - rl_point = point; -- -- if (rl_end < 0) -- rl_end = 0; - } - - return 0; -@@ -565,6 +597,21 @@ rl_clear_screen (count, key) - } - - int -+rl_skip_csi_sequence (count, key) -+ int count, key; -+{ -+ int ch; -+ -+ RL_SETSTATE (RL_STATE_MOREINPUT); -+ do -+ ch = rl_read_key (); -+ while (ch >= 0x20 && ch < 0x40); -+ RL_UNSETSTATE (RL_STATE_MOREINPUT); -+ -+ return 0; -+} -+ -+int - rl_arrow_keys (count, c) - int count, c; - { -@@ -701,7 +748,7 @@ _rl_insert_char (count, c) - - /* If we can optimize, then do it. But don't let people crash - readline because of extra large arguments. */ -- if (count > 1 && count <= 1024) -+ if (count > 1 && count <= TEXT_COUNT_MAX) - { - #if defined (HANDLE_MULTIBYTE) - string_size = count * incoming_length; -@@ -724,16 +771,16 @@ _rl_insert_char (count, c) - - string[i] = '\0'; - rl_insert_text (string); -- free (string); -+ xfree (string); - - return 0; - } - -- if (count > 1024) -+ if (count > TEXT_COUNT_MAX) - { - int decreaser; - #if defined (HANDLE_MULTIBYTE) -- string_size = incoming_length * 1024; -+ string_size = incoming_length * TEXT_COUNT_MAX; - string = (char *)xmalloc (1 + string_size); - - i = 0; -@@ -745,24 +792,24 @@ _rl_insert_char (count, c) - - while (count) - { -- decreaser = (count > 1024) ? 1024 : count; -+ decreaser = (count > TEXT_COUNT_MAX) ? TEXT_COUNT_MAX : count; - string[decreaser*incoming_length] = '\0'; - rl_insert_text (string); - count -= decreaser; - } - -- free (string); -+ xfree (string); - incoming_length = 0; - stored_count = 0; - #else /* !HANDLE_MULTIBYTE */ -- char str[1024+1]; -+ char str[TEXT_COUNT_MAX+1]; - -- for (i = 0; i < 1024; i++) -+ for (i = 0; i < TEXT_COUNT_MAX; i++) - str[i] = c; - - while (count) - { -- decreaser = (count > 1024 ? 1024 : count); -+ decreaser = (count > TEXT_COUNT_MAX ? TEXT_COUNT_MAX : count); - str[decreaser] = '\0'; - rl_insert_text (str); - count -= decreaser; -@@ -777,8 +824,9 @@ _rl_insert_char (count, c) - /* We are inserting a single character. - If there is pending input, then make a string of all of the - pending characters that are bound to rl_insert, and insert -- them all. */ -- if (_rl_any_typein ()) -+ them all. Don't do this if we're current reading input from -+ a macro. */ -+ if ((RL_ISSTATE (RL_STATE_MACROINPUT) == 0) && _rl_any_typein ()) - _rl_insert_typein (c); - else - { -@@ -857,6 +905,9 @@ _rl_insert_next (count) - c = rl_read_key (); - RL_UNSETSTATE(RL_STATE_MOREINPUT); - -+ if (c < 0) -+ return -1; -+ - #if defined (HANDLE_SIGNALS) - if (RL_ISSTATE (RL_STATE_CALLBACK) == 0) - _rl_restore_tty_signals (); -@@ -940,7 +991,7 @@ rl_newline (count, key) - if (rl_erase_empty_line && rl_point == 0 && rl_end == 0) - return 0; - -- if (readline_echoing_p) -+ if (_rl_echoing_p) - _rl_update_final (); - return 0; - } -@@ -1071,6 +1122,8 @@ int - rl_delete (count, key) - int count, key; - { -+ int xpoint; -+ - if (count < 0) - return (_rl_rubout_char (-count, key)); - -@@ -1082,21 +1135,19 @@ rl_delete (count, key) - - if (count > 1 || rl_explicit_arg) - { -- int orig_point = rl_point; -+ xpoint = rl_point; - if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) - rl_forward_char (count, key); - else - rl_forward_byte (count, key); - -- rl_kill_text (orig_point, rl_point); -- rl_point = orig_point; -+ rl_kill_text (xpoint, rl_point); -+ rl_point = xpoint; - } - else - { -- int new_point; -- -- new_point = MB_NEXTCHAR (rl_line_buffer, rl_point, 1, MB_FIND_NONZERO); -- rl_delete_text (rl_point, new_point); -+ xpoint = MB_NEXTCHAR (rl_line_buffer, rl_point, 1, MB_FIND_NONZERO); -+ rl_delete_text (rl_point, xpoint); - } - return 0; - } -@@ -1120,7 +1171,7 @@ int - rl_delete_horizontal_space (count, ignore) - int count, ignore; - { -- int start = rl_point; -+ int start; - - while (rl_point && whitespace (rl_line_buffer[rl_point - 1])) - rl_point--; -@@ -1237,8 +1288,9 @@ rl_change_case (count, op) - #if defined (HANDLE_MULTIBYTE) - wchar_t wc, nwc; - char mb[MB_LEN_MAX+1]; -- int mblen, p; -- mbstate_t ps; -+ int mlen; -+ size_t m; -+ mbstate_t mps; - #endif - - start = rl_point; -@@ -1255,7 +1307,7 @@ rl_change_case (count, op) - SWAP (start, end); - - #if defined (HANDLE_MULTIBYTE) -- memset (&ps, 0, sizeof (mbstate_t)); -+ memset (&mps, 0, sizeof (mbstate_t)); - #endif - - /* We are going to modify some text, so let's prepare to undo it. */ -@@ -1290,15 +1342,19 @@ rl_change_case (count, op) - #if defined (HANDLE_MULTIBYTE) - else - { -- mbrtowc (&wc, rl_line_buffer + start, end - start, &ps); -+ m = mbrtowc (&wc, rl_line_buffer + start, end - start, &mps); -+ if (MB_INVALIDCH (m)) -+ wc = (wchar_t)rl_line_buffer[start]; -+ else if (MB_NULLWCH (m)) -+ wc = L'\0'; - nwc = (nop == UpCase) ? _rl_to_wupper (wc) : _rl_to_wlower (wc); - if (nwc != wc) /* just skip unchanged characters */ - { -- mblen = wcrtomb (mb, nwc, &ps); -- if (mblen > 0) -- mb[mblen] = '\0'; -+ mlen = wcrtomb (mb, nwc, &mps); -+ if (mlen > 0) -+ mb[mlen] = '\0'; - /* Assume the same width */ -- strncpy (rl_line_buffer + start, mb, mblen); -+ strncpy (rl_line_buffer + start, mb, mlen); - } - } - #endif -@@ -1371,8 +1427,8 @@ rl_transpose_words (count, key) - - /* I think that does it. */ - rl_end_undo_group (); -- free (word1); -- free (word2); -+ xfree (word1); -+ xfree (word2); - - return 0; - } -@@ -1431,7 +1487,7 @@ rl_transpose_chars (count, key) - rl_end_undo_group (); - - #if defined (HANDLE_MULTIBYTE) -- free (dummy); -+ xfree (dummy); - #endif - - return 0; -@@ -1459,6 +1515,9 @@ _rl_char_search_internal (count, dir, sc - int prepos; - #endif - -+ if (dir == 0) -+ return -1; -+ - pos = rl_point; - inc = (dir < 0) ? -1 : 1; - while (count) -@@ -1520,6 +1579,9 @@ _rl_char_search (count, fdir, bdir) - - mb_len = _rl_read_mbchar (mbchar, MB_LEN_MAX); - -+ if (mb_len <= 0) -+ return -1; -+ - if (count < 0) - return (_rl_char_search_internal (-count, bdir, mbchar, mb_len)); - else -@@ -1536,6 +1598,9 @@ _rl_char_search (count, fdir, bdir) - c = rl_read_key (); - RL_UNSETSTATE(RL_STATE_MOREINPUT); - -+ if (c < 0) -+ return -1; -+ - if (count < 0) - return (_rl_char_search_internal (-count, bdir, c)); - else -Index: gdb-7.2.90.20110703/readline/tilde.c -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/tilde.c 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/tilde.c 2011-07-03 10:41:21.000000000 +0200 -@@ -1,23 +1,23 @@ - /* tilde.c -- Tilde expansion code (~/foo := $HOME/foo). */ - --/* Copyright (C) 1988,1989 Free Software Foundation, Inc. -+/* Copyright (C) 1988-2009 Free Software Foundation, Inc. - -- This file is part of GNU Readline, a library for reading lines -- of text with interactive input and history editing. -+ This file is part of the GNU Readline Library (Readline), a library -+ for reading lines of text with interactive input and history editing. - -- Readline 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 2, or (at your option) any -- later version. -- -- Readline 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. -+ Readline 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. -+ -+ Readline 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 Readline; see the file COPYING. If not, write to the Free -- Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ along with Readline. If not, see . -+*/ - - #if defined (HAVE_CONFIG_H) - # include -@@ -236,7 +236,7 @@ tilde_expand (string) - string += end; - - expansion = tilde_expand_word (tilde_word); -- free (tilde_word); -+ xfree (tilde_word); - - len = strlen (expansion); - #ifdef __CYGWIN__ -@@ -251,7 +251,7 @@ tilde_expand (string) - strcpy (result + result_index, expansion); - result_index += len; - } -- free (expansion); -+ xfree (expansion); - } - - result[result_index] = '\0'; -@@ -377,8 +377,8 @@ tilde_expand_word (filename) - if (expansion) - { - dirname = glue_prefix_and_suffix (expansion, filename, user_len); -- free (username); -- free (expansion); -+ xfree (username); -+ xfree (expansion); - return (dirname); - } - } -@@ -401,10 +401,9 @@ tilde_expand_word (filename) - if (expansion) - { - dirname = glue_prefix_and_suffix (expansion, filename, user_len); -- free (expansion); -+ xfree (expansion); - } - } -- free (username); - /* If we don't have a failure hook, or if the failure hook did not - expand the tilde, return a copy of what we were passed. */ - if (dirname == 0) -@@ -412,10 +411,11 @@ tilde_expand_word (filename) - } - #if defined (HAVE_GETPWENT) - else -- { -- free (username); -- dirname = glue_prefix_and_suffix (user_entry->pw_dir, filename, user_len); -- } -+ dirname = glue_prefix_and_suffix (user_entry->pw_dir, filename, user_len); -+#endif -+ -+ xfree (username); -+#if defined (HAVE_GETPWENT) - endpwent (); - #endif - return (dirname); -Index: gdb-7.2.90.20110703/readline/tilde.h -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/tilde.h 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/tilde.h 2011-07-03 10:41:21.000000000 +0200 -@@ -1,25 +1,24 @@ - /* tilde.h: Externally available variables and function in libtilde.a. */ - --/* Copyright (C) 1992 Free Software Foundation, Inc. -+/* Copyright (C) 1992-2009 Free Software Foundation, Inc. - -- This file contains the Readline Library (the Library), a set of -+ This file contains the Readline Library (Readline), a set of - routines for providing Emacs style line input to programs that ask - for it. - -- The Library is free software; you can redistribute it and/or modify -+ Readline 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 2, or (at your option) -- any later version. -+ the Free Software Foundation, either version 3 of the License, or -+ (at your option) any later version. - -- The Library 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. -- -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ Readline 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 Readline. If not, see . -+*/ - - #if !defined (_TILDE_H_) - # define _TILDE_H_ -Index: gdb-7.2.90.20110703/readline/undo.c -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/undo.c 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/undo.c 2011-07-03 10:41:21.000000000 +0200 -@@ -1,25 +1,25 @@ - /* readline.c -- a general facility for reading lines of input - with emacs style editing and completion. */ - --/* Copyright (C) 1987, 1989, 1992 Free Software Foundation, Inc. -+/* Copyright (C) 1987-2009 Free Software Foundation, Inc. - -- This file is part of the GNU Readline Library, a library for -- reading lines of text with interactive input and history editing. -+ This file is part of the GNU Readline Library (Readline), a library -+ for reading lines of text with interactive input and history editing. - -- The GNU Readline Library 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 2, or -+ Readline 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. - -- The GNU Readline Library 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 -+ Readline 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. - -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ You should have received a copy of the GNU General Public License -+ along with Readline. If not, see . -+*/ -+ - #define READLINE_LIBRARY - - #if defined (HAVE_CONFIG_H) -@@ -50,6 +50,8 @@ - #include "rlprivate.h" - #include "xmalloc.h" - -+extern void replace_history_data PARAMS((int, histdata_t *, histdata_t *)); -+ - /* Non-zero tells rl_delete_text and rl_insert_text to not add to - the undo list. */ - int _rl_doing_an_undo = 0; -@@ -66,19 +68,35 @@ UNDO_LIST *rl_undo_list = (UNDO_LIST *)N - /* */ - /* **************************************************************** */ - --/* Remember how to undo something. Concatenate some undos if that -- seems right. */ --void --rl_add_undo (what, start, end, text) -+static UNDO_LIST * -+alloc_undo_entry (what, start, end, text) - enum undo_code what; - int start, end; - char *text; - { -- UNDO_LIST *temp = (UNDO_LIST *)xmalloc (sizeof (UNDO_LIST)); -+ UNDO_LIST *temp; -+ -+ temp = (UNDO_LIST *)xmalloc (sizeof (UNDO_LIST)); - temp->what = what; - temp->start = start; - temp->end = end; - temp->text = text; -+ -+ temp->next = (UNDO_LIST *)NULL; -+ return temp; -+} -+ -+/* Remember how to undo something. Concatenate some undos if that -+ seems right. */ -+void -+rl_add_undo (what, start, end, text) -+ enum undo_code what; -+ int start, end; -+ char *text; -+{ -+ UNDO_LIST *temp; -+ -+ temp = alloc_undo_entry (what, start, end, text); - temp->next = rl_undo_list; - rl_undo_list = temp; - } -@@ -87,17 +105,60 @@ rl_add_undo (what, start, end, text) - void - rl_free_undo_list () - { -+ UNDO_LIST *release, *orig_list; -+ -+ orig_list = rl_undo_list; - while (rl_undo_list) - { -- UNDO_LIST *release = rl_undo_list; -+ release = rl_undo_list; - rl_undo_list = rl_undo_list->next; - - if (release->what == UNDO_DELETE) -- free (release->text); -+ xfree (release->text); - -- free (release); -+ xfree (release); - } - rl_undo_list = (UNDO_LIST *)NULL; -+ replace_history_data (-1, (histdata_t *)orig_list, (histdata_t *)NULL); -+} -+ -+UNDO_LIST * -+_rl_copy_undo_entry (entry) -+ UNDO_LIST *entry; -+{ -+ UNDO_LIST *new; -+ -+ new = alloc_undo_entry (entry->what, entry->start, entry->end, (char *)NULL); -+ new->text = entry->text ? savestring (entry->text) : 0; -+ return new; -+} -+ -+UNDO_LIST * -+_rl_copy_undo_list (head) -+ UNDO_LIST *head; -+{ -+ UNDO_LIST *list, *new, *roving, *c; -+ -+ if (head == 0) -+ return head; -+ -+ list = head; -+ new = 0; -+ while (list) -+ { -+ c = _rl_copy_undo_entry (list); -+ if (new == 0) -+ roving = new = c; -+ else -+ { -+ roving->next = c; -+ roving = roving->next; -+ } -+ list = list->next; -+ } -+ -+ roving->next = 0; -+ return new; - } - - /* Undo the next thing in the list. Return 0 if there -@@ -113,7 +174,7 @@ rl_do_undo () - start = end = waiting_for_begin = 0; - do - { -- if (!rl_undo_list) -+ if (rl_undo_list == 0) - return (0); - - _rl_doing_an_undo = 1; -@@ -133,7 +194,7 @@ rl_do_undo () - case UNDO_DELETE: - rl_point = start; - rl_insert_text (rl_undo_list->text); -- free (rl_undo_list->text); -+ xfree (rl_undo_list->text); - break; - - /* Undoing inserts means deleting some text. */ -@@ -161,7 +222,9 @@ rl_do_undo () - - release = rl_undo_list; - rl_undo_list = rl_undo_list->next; -- free (release); -+ replace_history_data (-1, (histdata_t *)release, (histdata_t *)rl_undo_list); -+ -+ xfree (release); - } - while (waiting_for_begin); - -@@ -231,7 +294,7 @@ int - rl_revert_line (count, key) - int count, key; - { -- if (!rl_undo_list) -+ if (rl_undo_list == 0) - rl_ding (); - else - { -Index: gdb-7.2.90.20110703/readline/util.c -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/util.c 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/util.c 2011-07-03 10:41:21.000000000 +0200 -@@ -1,24 +1,24 @@ - /* util.c -- readline utility functions */ - --/* Copyright (C) 1987-2005 Free Software Foundation, Inc. -+/* Copyright (C) 1987-2010 Free Software Foundation, Inc. - -- This file is part of the GNU Readline Library, a library for -- reading lines of text with interactive input and history editing. -+ This file is part of the GNU Readline Library (Readline), a library -+ for reading lines of text with interactive input and history editing. - -- The GNU Readline Library 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 2, or -+ Readline 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. - -- The GNU Readline Library 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 -+ Readline 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. - -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ You should have received a copy of the GNU General Public License -+ along with Readline. If not, see . -+*/ -+ - #define READLINE_LIBRARY - - #if defined (HAVE_CONFIG_H) -@@ -66,7 +66,7 @@ - in words, or 1 if it is. */ - - int _rl_allow_pathname_alphabetic_chars = 0; --static const char *pathname_alphabetic_chars = "/-_=~.#$"; -+static const char * const pathname_alphabetic_chars = "/-_=~.#$"; - - int - rl_alphabetic (c) -@@ -81,8 +81,7 @@ rl_alphabetic (c) - - #if defined (HANDLE_MULTIBYTE) - int --_rl_walphabetic (wc) -- wchar_t wc; -+_rl_walphabetic (wchar_t wc) - { - int c; - -@@ -109,7 +108,7 @@ _rl_abort_internal () - _rl_pop_executing_macro (); - - rl_last_func = (rl_command_func_t *)NULL; -- longjmp (readline_top_level, 1); -+ longjmp (_rl_top_level, 1); - return (0); - } - -@@ -121,6 +120,13 @@ rl_abort (count, key) - } - - int -+_rl_null_function (count, key) -+ int count, key; -+{ -+ return 0; -+} -+ -+int - rl_tty_status (count, key) - int count, key; - { -@@ -185,6 +191,7 @@ rl_tilde_expand (ignore, key) - { - homedir = tilde_expand ("~"); - _rl_replace_text (homedir, start, end); -+ xfree (homedir); - return (0); - } - else if (rl_line_buffer[start] != '~') -@@ -212,14 +219,96 @@ rl_tilde_expand (ignore, key) - strncpy (temp, rl_line_buffer + start, len); - temp[len] = '\0'; - homedir = tilde_expand (temp); -- free (temp); -+ xfree (temp); - - _rl_replace_text (homedir, start, end); -+ xfree (homedir); - } - - return (0); - } - -+#if defined (USE_VARARGS) -+void -+#if defined (PREFER_STDARG) -+_rl_ttymsg (const char *format, ...) -+#else -+_rl_ttymsg (va_alist) -+ va_dcl -+#endif -+{ -+ va_list args; -+#if defined (PREFER_VARARGS) -+ char *format; -+#endif -+ -+#if defined (PREFER_STDARG) -+ va_start (args, format); -+#else -+ va_start (args); -+ format = va_arg (args, char *); -+#endif -+ -+ fprintf (stderr, "readline: "); -+ vfprintf (stderr, format, args); -+ fprintf (stderr, "\n"); -+ fflush (stderr); -+ -+ va_end (args); -+ -+ rl_forced_update_display (); -+} -+ -+void -+#if defined (PREFER_STDARG) -+_rl_errmsg (const char *format, ...) -+#else -+_rl_errmsg (va_alist) -+ va_dcl -+#endif -+{ -+ va_list args; -+#if defined (PREFER_VARARGS) -+ char *format; -+#endif -+ -+#if defined (PREFER_STDARG) -+ va_start (args, format); -+#else -+ va_start (args); -+ format = va_arg (args, char *); -+#endif -+ -+ fprintf (stderr, "readline: "); -+ vfprintf (stderr, format, args); -+ fprintf (stderr, "\n"); -+ fflush (stderr); -+ -+ va_end (args); -+} -+ -+#else /* !USE_VARARGS */ -+void -+_rl_ttymsg (format, arg1, arg2) -+ char *format; -+{ -+ fprintf (stderr, "readline: "); -+ fprintf (stderr, format, arg1, arg2); -+ fprintf (stderr, "\n"); -+ -+ rl_forced_update_display (); -+} -+ -+void -+_rl_errmsg (format, arg1, arg2) -+ char *format; -+{ -+ fprintf (stderr, "readline: "); -+ fprintf (stderr, format, arg1, arg2); -+ fprintf (stderr, "\n"); -+} -+#endif /* !USE_VARARGS */ -+ - /* **************************************************************** */ - /* */ - /* String Utility Functions */ -@@ -277,41 +366,56 @@ _rl_strpbrk (string1, string2) - - #if !defined (HAVE_STRCASECMP) - /* Compare at most COUNT characters from string1 to string2. Case -- doesn't matter. */ -+ doesn't matter (strncasecmp). */ - int - _rl_strnicmp (string1, string2, count) - char *string1, *string2; - int count; - { -- register char ch1, ch2; -+ register char *s1, *s2; -+ int d; -+ -+ if (count <= 0 || (string1 == string2)) -+ return 0; - -- while (count) -+ s1 = string1; -+ s2 = string2; -+ do - { -- ch1 = *string1++; -- ch2 = *string2++; -- if (_rl_to_upper(ch1) == _rl_to_upper(ch2)) -- count--; -- else -+ d = _rl_to_lower (*s1) - _rl_to_lower (*s2); /* XXX - cast to unsigned char? */ -+ if (d != 0) -+ return d; -+ if (*s1++ == '\0') - break; -+ s2++; - } -- return (count); -+ while (--count != 0) -+ -+ return (0); - } - --/* strcmp (), but caseless. */ -+/* strcmp (), but caseless (strcasecmp). */ - int - _rl_stricmp (string1, string2) - char *string1, *string2; - { -- register char ch1, ch2; -+ register char *s1, *s2; -+ int d; -+ -+ s1 = string1; -+ s2 = string2; -+ -+ if (s1 == s2) -+ return 0; - -- while (*string1 && *string2) -+ while ((d = _rl_to_lower (*s1) - _rl_to_lower (*s2)) == 0) - { -- ch1 = *string1++; -- ch2 = *string2++; -- if (_rl_to_upper(ch1) != _rl_to_upper(ch2)) -- return (1); -+ if (*s1++ == '\0') -+ return 0; -+ s2++; - } -- return (*string1 - *string2); -+ -+ return (d); - } - #endif /* !HAVE_STRCASECMP */ - -@@ -344,6 +448,16 @@ FUNCTION_FOR_MACRO (_rl_to_lower) - FUNCTION_FOR_MACRO (_rl_to_upper) - FUNCTION_FOR_MACRO (_rl_uppercase_p) - -+/* A convenience function, to force memory deallocation to be performed -+ by readline. DLLs on Windows apparently require this. */ -+void -+rl_free (mem) -+ void *mem; -+{ -+ if (mem) -+ free (mem); -+} -+ - /* Backwards compatibility, now that savestring has been removed from - all `public' readline header files. */ - #undef _rl_savestring -@@ -353,3 +467,60 @@ _rl_savestring (s) - { - return (strcpy ((char *)xmalloc (1 + (int)strlen (s)), (s))); - } -+ -+#if defined (USE_VARARGS) -+static FILE *_rl_tracefp; -+ -+void -+#if defined (PREFER_STDARG) -+_rl_trace (const char *format, ...) -+#else -+_rl_trace (va_alist) -+ va_dcl -+#endif -+{ -+ va_list args; -+#if defined (PREFER_VARARGS) -+ char *format; -+#endif -+ -+#if defined (PREFER_STDARG) -+ va_start (args, format); -+#else -+ va_start (args); -+ format = va_arg (args, char *); -+#endif -+ -+ if (_rl_tracefp == 0) -+ _rl_tropen (); -+ vfprintf (_rl_tracefp, format, args); -+ fprintf (_rl_tracefp, "\n"); -+ fflush (_rl_tracefp); -+ -+ va_end (args); -+} -+ -+int -+_rl_tropen () -+{ -+ char fnbuf[128]; -+ -+ if (_rl_tracefp) -+ fclose (_rl_tracefp); -+ sprintf (fnbuf, "/var/tmp/rltrace.%ld", getpid()); -+ unlink(fnbuf); -+ _rl_tracefp = fopen (fnbuf, "w+"); -+ return _rl_tracefp != 0; -+} -+ -+int -+_rl_trclose () -+{ -+ int r; -+ -+ r = fclose (_rl_tracefp); -+ _rl_tracefp = 0; -+ return r; -+} -+ -+#endif -Index: gdb-7.2.90.20110703/readline/vi_keymap.c -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/vi_keymap.c 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/vi_keymap.c 2011-07-03 10:41:21.000000000 +0200 -@@ -1,24 +1,23 @@ - /* vi_keymap.c -- the keymap for vi_mode in readline (). */ - --/* Copyright (C) 1987, 1989, 1992 Free Software Foundation, Inc. -+/* Copyright (C) 1987-2009 Free Software Foundation, Inc. - -- This file is part of the GNU Readline Library, a library for -- reading lines of text with interactive input and history editing. -+ This file is part of the GNU Readline Library (Readline), a library -+ for reading lines of text with interactive input and history editing. - -- The GNU Readline Library 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 2, or -+ Readline 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. - -- The GNU Readline Library 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 -+ Readline 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. - -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ You should have received a copy of the GNU General Public License -+ along with Readline. If not, see . -+*/ - - #if !defined (BUFSIZ) - #include -@@ -151,7 +150,7 @@ KEYMAP_ENTRY_ARRAY vi_movement_keymap = - { ISFUNC, rl_vi_char_search }, /* f */ - { ISFUNC, (rl_command_func_t *)0x0 }, /* g */ - { ISFUNC, rl_backward_char }, /* h */ -- { ISFUNC, rl_vi_insertion_mode }, /* i */ -+ { ISFUNC, rl_vi_insert_mode }, /* i */ - { ISFUNC, rl_get_next_history }, /* j */ - { ISFUNC, rl_get_previous_history }, /* k */ - { ISFUNC, rl_forward_char }, /* l */ -@@ -327,9 +326,9 @@ KEYMAP_ENTRY_ARRAY vi_insertion_keymap = - { ISFUNC, rl_insert }, /* Control-k */ - { ISFUNC, rl_insert }, /* Control-l */ - { ISFUNC, rl_newline }, /* Control-m */ -- { ISFUNC, rl_insert }, /* Control-n */ -+ { ISFUNC, rl_menu_complete}, /* Control-n */ - { ISFUNC, rl_insert }, /* Control-o */ -- { ISFUNC, rl_insert }, /* Control-p */ -+ { ISFUNC, rl_backward_menu_complete }, /* Control-p */ - { ISFUNC, rl_insert }, /* Control-q */ - { ISFUNC, rl_reverse_search_history }, /* Control-r */ - { ISFUNC, rl_forward_search_history }, /* Control-s */ -Index: gdb-7.2.90.20110703/readline/vi_mode.c -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/vi_mode.c 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/vi_mode.c 2011-07-03 10:41:21.000000000 +0200 -@@ -1,25 +1,25 @@ - /* vi_mode.c -- A vi emulation mode for Bash. - Derived from code written by Jeff Sparkes (jsparkes@bnr.ca). */ - --/* Copyright (C) 1987-2005 Free Software Foundation, Inc. -+/* Copyright (C) 1987-2010 Free Software Foundation, Inc. - -- This file is part of the GNU Readline Library, a library for -- reading lines of text with interactive input and history editing. -+ This file is part of the GNU Readline Library (Readline), a library -+ for reading lines of text with interactive input and history editing. - -- The GNU Readline Library 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 2, or -+ Readline 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. - -- The GNU Readline Library 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 -+ Readline 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. - -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ You should have received a copy of the GNU General Public License -+ along with Readline. If not, see . -+*/ -+ - #define READLINE_LIBRARY - - /* **************************************************************** */ -@@ -65,11 +65,13 @@ - - int _rl_vi_last_command = 'i'; /* default `.' puts you in insert mode */ - -+_rl_vimotion_cxt *_rl_vimvcxt = 0; -+ - /* Non-zero means enter insertion mode. */ - static int _rl_vi_doing_insert; - - /* Command keys which do movement for xxx_to commands. */ --static const char *vi_motion = " hl^$0ftFT;,%wbeWBE|"; -+static const char * const vi_motion = " hl^$0ftFT;,%wbeWBE|`"; - - /* Keymap used for vi replace characters. Created dynamically since - rarely used. */ -@@ -101,7 +103,7 @@ static int _rl_vi_last_key_before_insert - static int vi_redoing; - - /* Text modification commands. These are the `redoable' commands. */ --static const char *vi_textmod = "_*\\AaIiCcDdPpYyRrSsXx~"; -+static const char * const vi_textmod = "_*\\AaIiCcDdPpYyRrSsXx~"; - - /* Arrays for the saved marks. */ - static int vi_mark_chars['z' - 'a' + 1]; -@@ -109,12 +111,16 @@ static int vi_mark_chars['z' - 'a' + 1]; - static void _rl_vi_stuff_insert PARAMS((int)); - static void _rl_vi_save_insert PARAMS((UNDO_LIST *)); - -+static void _rl_vi_backup PARAMS((void)); -+ - static int _rl_vi_arg_dispatch PARAMS((int)); - static int rl_digit_loop1 PARAMS((void)); - - static int _rl_vi_set_mark PARAMS((void)); - static int _rl_vi_goto_mark PARAMS((void)); - -+static void _rl_vi_append_forward PARAMS((int)); -+ - static int _rl_vi_callback_getchar PARAMS((char *, int)); - - #if defined (READLINE_CALLBACKS) -@@ -124,12 +130,23 @@ static int _rl_vi_callback_change_char P - static int _rl_vi_callback_char_search PARAMS((_rl_callback_generic_arg *)); - #endif - -+static int rl_domove_read_callback PARAMS((_rl_vimotion_cxt *)); -+static int rl_domove_motion_callback PARAMS((_rl_vimotion_cxt *)); -+static int rl_vi_domove_getchar PARAMS((_rl_vimotion_cxt *)); -+ -+static int vi_change_dispatch PARAMS((_rl_vimotion_cxt *)); -+static int vi_delete_dispatch PARAMS((_rl_vimotion_cxt *)); -+static int vi_yank_dispatch PARAMS((_rl_vimotion_cxt *)); -+ -+static int vidomove_dispatch PARAMS((_rl_vimotion_cxt *)); -+ - void - _rl_vi_initialize_line () - { -- register int i; -+ register int i, n; - -- for (i = 0; i < sizeof (vi_mark_chars) / sizeof (int); i++) -+ n = sizeof (vi_mark_chars) / sizeof (vi_mark_chars[0]); -+ for (i = 0; i < n; i++) - vi_mark_chars[i] = -1; - - RL_UNSETSTATE(RL_STATE_VICMDONCE); -@@ -205,7 +222,34 @@ rl_vi_redo (count, c) - _rl_vi_stuff_insert (count); - /* And back up point over the last character inserted. */ - if (rl_point > 0) -- rl_point--; -+ _rl_vi_backup (); -+ } -+ /* Ditto for redoing an insert with `I', but move to the beginning of the -+ line like the `I' command does. */ -+ else if (_rl_vi_last_command == 'I' && vi_insert_buffer && *vi_insert_buffer) -+ { -+ rl_beg_of_line (1, 'I'); -+ _rl_vi_stuff_insert (count); -+ if (rl_point > 0) -+ _rl_vi_backup (); -+ } -+ /* Ditto for redoing an insert with `a', but move forward a character first -+ like the `a' command does. */ -+ else if (_rl_vi_last_command == 'a' && vi_insert_buffer && *vi_insert_buffer) -+ { -+ _rl_vi_append_forward ('a'); -+ _rl_vi_stuff_insert (count); -+ if (rl_point > 0) -+ _rl_vi_backup (); -+ } -+ /* Ditto for redoing an insert with `A', but move to the end of the line -+ like the `A' command does. */ -+ else if (_rl_vi_last_command == 'A' && vi_insert_buffer && *vi_insert_buffer) -+ { -+ rl_end_of_line (1, 'A'); -+ _rl_vi_stuff_insert (count); -+ if (rl_point > 0) -+ _rl_vi_backup (); - } - else - r = _rl_dispatch (_rl_vi_last_command, _rl_keymap); -@@ -571,27 +615,40 @@ rl_vi_insert_beg (count, key) - int count, key; - { - rl_beg_of_line (1, key); -- rl_vi_insertion_mode (1, key); -+ rl_vi_insert_mode (1, key); - return (0); - } - --int --rl_vi_append_mode (count, key) -- int count, key; -+static void -+_rl_vi_append_forward (key) -+ int key; - { -+ int point; -+ - if (rl_point < rl_end) - { - if (MB_CUR_MAX == 1 || rl_byte_oriented) - rl_point++; - else -- { -- int point = rl_point; -- rl_forward_char (1, key); -- if (point == rl_point) -- rl_point = rl_end; -- } -+ { -+ point = rl_point; -+#if 0 -+ rl_forward_char (1, key); -+#else -+ rl_point = _rl_forward_char_internal (1); -+#endif -+ if (point == rl_point) -+ rl_point = rl_end; -+ } - } -- rl_vi_insertion_mode (1, key); -+} -+ -+int -+rl_vi_append_mode (count, key) -+ int count, key; -+{ -+ _rl_vi_append_forward (key); -+ rl_vi_start_inserting (key, 1, rl_arg_sign); - return (0); - } - -@@ -625,13 +682,21 @@ rl_vi_insertion_mode (count, key) - return (0); - } - -+int -+rl_vi_insert_mode (count, key) -+ int count, key; -+{ -+ rl_vi_start_inserting (key, 1, rl_arg_sign); -+ return (0); -+} -+ - static void - _rl_vi_save_insert (up) - UNDO_LIST *up; - { - int len, start, end; - -- if (up == 0) -+ if (up == 0 || up->what != UNDO_INSERT) - { - if (vi_insert_buffer_size >= 1) - vi_insert_buffer[0] = '\0'; -@@ -668,8 +733,11 @@ _rl_vi_done_inserting () - } - else - { -- if ((_rl_vi_last_key_before_insert == 'i' || _rl_vi_last_key_before_insert == 'a') && rl_undo_list) -- _rl_vi_save_insert (rl_undo_list); -+ if (rl_undo_list && (_rl_vi_last_key_before_insert == 'i' || -+ _rl_vi_last_key_before_insert == 'a' || -+ _rl_vi_last_key_before_insert == 'I' || -+ _rl_vi_last_key_before_insert == 'A')) -+ _rl_vi_save_insert (rl_undo_list); - /* XXX - Other keys probably need to be checked. */ - else if (_rl_vi_last_key_before_insert == 'C') - rl_end_undo_group (); -@@ -716,7 +784,8 @@ _rl_vi_change_mbchar_case (count) - { - wchar_t wc; - char mb[MB_LEN_MAX+1]; -- int mblen, p; -+ int mlen, p; -+ size_t m; - mbstate_t ps; - - memset (&ps, 0, sizeof (mbstate_t)); -@@ -724,7 +793,11 @@ _rl_vi_change_mbchar_case (count) - count--; - while (count-- && rl_point < rl_end) - { -- mbrtowc (&wc, rl_line_buffer + rl_point, rl_end - rl_point, &ps); -+ m = mbrtowc (&wc, rl_line_buffer + rl_point, rl_end - rl_point, &ps); -+ if (MB_INVALIDCH (m)) -+ wc = (wchar_t)rl_line_buffer[rl_point]; -+ else if (MB_NULLWCH (m)) -+ wc = L'\0'; - if (iswupper (wc)) - wc = towlower (wc); - else if (iswlower (wc)) -@@ -740,9 +813,9 @@ _rl_vi_change_mbchar_case (count) - if (wc) - { - p = rl_point; -- mblen = wcrtomb (mb, wc, &ps); -- if (mblen >= 0) -- mb[mblen] = '\0'; -+ mlen = wcrtomb (mb, wc, &ps); -+ if (mlen >= 0) -+ mb[mlen] = '\0'; - rl_begin_undo_group (); - rl_vi_delete (1, 0); - if (rl_point < p) /* Did we retreat at EOL? */ -@@ -752,7 +825,7 @@ _rl_vi_change_mbchar_case (count) - rl_vi_check (); - } - else -- rl_forward_char (1, 0); -+ rl_forward_char (1, 0); - } - - return 0; -@@ -799,7 +872,7 @@ rl_vi_change_case (count, ignore) - _rl_insert_char (1, c); - rl_end_undo_group (); - rl_vi_check (); -- } -+ } - else - rl_forward_char (1, c); - } -@@ -820,6 +893,15 @@ rl_vi_put (count, key) - return (0); - } - -+static void -+_rl_vi_backup () -+{ -+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) -+ rl_point = _rl_find_prev_mbchar (rl_line_buffer, rl_point, MB_FIND_NONZERO); -+ else -+ rl_point--; -+} -+ - int - rl_vi_check () - { -@@ -828,7 +910,7 @@ rl_vi_check () - if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) - rl_point = _rl_find_prev_mbchar (rl_line_buffer, rl_point, MB_FIND_NONZERO); - else -- rl_point--; -+ rl_point--; - } - return (0); - } -@@ -844,47 +926,106 @@ rl_vi_column (count, key) - return (0); - } - --int --rl_vi_domove (key, nextkey) -- int key, *nextkey; -+/* Process C as part of the current numeric argument. Return -1 if the -+ argument should be aborted, 0 if we should not read any more chars, and -+ 1 if we should continue to read chars. */ -+static int -+_rl_vi_arg_dispatch (c) -+ int c; - { -- int c, save; -- int old_end; -+ int key; - -- rl_mark = rl_point; -- RL_SETSTATE(RL_STATE_MOREINPUT); -- c = rl_read_key (); -- RL_UNSETSTATE(RL_STATE_MOREINPUT); -- *nextkey = c; -+ key = c; -+ if (c >= 0 && _rl_keymap[c].type == ISFUNC && _rl_keymap[c].function == rl_universal_argument) -+ { -+ rl_numeric_arg *= 4; -+ return 1; -+ } -+ -+ c = UNMETA (c); - -- if (!member (c, vi_motion)) -+ if (_rl_digit_p (c)) - { -- if (_rl_digit_p (c)) -- { -- save = rl_numeric_arg; -- rl_numeric_arg = _rl_digit_value (c); -- rl_explicit_arg = 1; -- RL_SETSTATE (RL_STATE_NUMERICARG|RL_STATE_VIMOTION); -- rl_digit_loop1 (); -- RL_UNSETSTATE (RL_STATE_VIMOTION); -- rl_numeric_arg *= save; -- RL_SETSTATE(RL_STATE_MOREINPUT); -- c = rl_read_key (); /* real command */ -- RL_UNSETSTATE(RL_STATE_MOREINPUT); -- *nextkey = c; -- } -- else if (key == c && (key == 'd' || key == 'y' || key == 'c')) -- { -- rl_mark = rl_end; -- rl_beg_of_line (1, c); -- _rl_vi_last_motion = c; -- return (0); -- } -+ if (rl_explicit_arg) -+ rl_numeric_arg = (rl_numeric_arg * 10) + _rl_digit_value (c); - else -- return (-1); -+ rl_numeric_arg = _rl_digit_value (c); -+ rl_explicit_arg = 1; -+ return 1; /* keep going */ - } -+ else -+ { -+ rl_clear_message (); -+ rl_stuff_char (key); -+ return 0; /* done */ -+ } -+} -+ -+/* A simplified loop for vi. Don't dispatch key at end. -+ Don't recognize minus sign? -+ Should this do rl_save_prompt/rl_restore_prompt? */ -+static int -+rl_digit_loop1 () -+{ -+ int c, r; -+ -+ while (1) -+ { -+ if (_rl_arg_overflow ()) -+ return 1; -+ -+ c = _rl_arg_getchar (); -+ -+ r = _rl_vi_arg_dispatch (c); -+ if (r <= 0) -+ break; -+ } -+ -+ RL_UNSETSTATE(RL_STATE_NUMERICARG); -+ return (0); -+} -+ -+static void -+_rl_mvcxt_init (m, op, key) -+ _rl_vimotion_cxt *m; -+ int op, key; -+{ -+ m->op = op; -+ m->state = m->flags = 0; -+ m->ncxt = 0; -+ m->numeric_arg = -1; -+ m->start = rl_point; -+ m->end = rl_end; -+ m->key = key; -+ m->motion = -1; -+} -+ -+static _rl_vimotion_cxt * -+_rl_mvcxt_alloc (op, key) -+ int op, key; -+{ -+ _rl_vimotion_cxt *m; -+ -+ m = xmalloc (sizeof (_rl_vimotion_cxt)); -+ _rl_mvcxt_init (m, op, key); -+ return m; -+} -+ -+static void -+_rl_mvcxt_dispose (m) -+ _rl_vimotion_cxt *m; -+{ -+ xfree (m); -+} - -- _rl_vi_last_motion = c; -+static int -+rl_domove_motion_callback (m) -+ _rl_vimotion_cxt *m; -+{ -+ int c, save, r; -+ int old_end; -+ -+ _rl_vi_last_motion = c = m->motion; - - /* Append a blank character temporarily so that the motion routines - work right at the end of the line. */ -@@ -913,7 +1054,7 @@ rl_vi_domove (key, nextkey) - - /* If cw or cW, back up to the end of a word, so the behaviour of ce - or cE is the actual result. Brute-force, no subtlety. */ -- if (key == 'c' && rl_point >= rl_mark && (_rl_to_upper (c) == 'W')) -+ if (m->key == 'c' && rl_point >= rl_mark && (_rl_to_upper (c) == 'W')) - { - /* Don't move farther back than where we started. */ - while (rl_point > rl_mark && whitespace (rl_line_buffer[rl_point])) -@@ -922,7 +1063,7 @@ rl_vi_domove (key, nextkey) - /* Posix.2 says that if cw or cW moves the cursor towards the end of - the line, the character under the cursor should be deleted. */ - if (rl_point == rl_mark) -- rl_point++; -+ rl_point++; - else - { - /* Move past the end of the word so that the kill doesn't -@@ -936,88 +1077,142 @@ rl_vi_domove (key, nextkey) - if (rl_mark < rl_point) - SWAP (rl_point, rl_mark); - -- return (0); -+#if defined (READLINE_CALLBACKS) -+ if (RL_ISSTATE (RL_STATE_CALLBACK)) -+ (*rl_redisplay_function)(); /* make sure motion is displayed */ -+#endif -+ -+ r = vidomove_dispatch (m); -+ -+ return (r); - } - --/* Process C as part of the current numeric argument. Return -1 if the -- argument should be aborted, 0 if we should not read any more chars, and -- 1 if we should continue to read chars. */ -+#define RL_VIMOVENUMARG() (RL_ISSTATE (RL_STATE_VIMOTION) && RL_ISSTATE (RL_STATE_NUMERICARG)) -+ - static int --_rl_vi_arg_dispatch (c) -- int c; -+rl_domove_read_callback (m) -+ _rl_vimotion_cxt *m; - { -- int key; -+ int c, save; - -- key = c; -- if (c >= 0 && _rl_keymap[c].type == ISFUNC && _rl_keymap[c].function == rl_universal_argument) -+ c = m->motion; -+ -+ if (member (c, vi_motion)) - { -- rl_numeric_arg *= 4; -- return 1; -+#if defined (READLINE_CALLBACKS) -+ /* If we just read a vi-mode motion command numeric argument, turn off -+ the `reading numeric arg' state */ -+ if (RL_ISSTATE (RL_STATE_CALLBACK) && RL_VIMOVENUMARG()) -+ RL_UNSETSTATE (RL_STATE_NUMERICARG); -+#endif -+ /* Should do everything, including turning off RL_STATE_VIMOTION */ -+ return (rl_domove_motion_callback (m)); -+ } -+ else if (m->key == c && (m->key == 'd' || m->key == 'y' || m->key == 'c')) -+ { -+ rl_mark = rl_end; -+ rl_beg_of_line (1, c); -+ _rl_vi_last_motion = c; -+ RL_UNSETSTATE (RL_STATE_VIMOTION); -+ return (vidomove_dispatch (m)); - } -- -- c = UNMETA (c); -- -- if (_rl_digit_p (c)) -+#if defined (READLINE_CALLBACKS) -+ /* XXX - these need to handle rl_universal_argument bindings */ -+ /* Reading vi motion char continuing numeric argument */ -+ else if (_rl_digit_p (c) && RL_ISSTATE (RL_STATE_CALLBACK) && RL_VIMOVENUMARG()) - { -- if (rl_explicit_arg) -- rl_numeric_arg = (rl_numeric_arg * 10) + _rl_digit_value (c); -- else -- rl_numeric_arg = _rl_digit_value (c); -+ return (_rl_vi_arg_dispatch (c)); -+ } -+ /* Readine vi motion char starting numeric argument */ -+ else if (_rl_digit_p (c) && RL_ISSTATE (RL_STATE_CALLBACK) && RL_ISSTATE (RL_STATE_VIMOTION) && (RL_ISSTATE (RL_STATE_NUMERICARG) == 0)) -+ { -+ RL_SETSTATE (RL_STATE_NUMERICARG); -+ return (_rl_vi_arg_dispatch (c)); -+ } -+#endif -+ else if (_rl_digit_p (c)) -+ { -+ /* This code path taken when not in callback mode */ -+ save = rl_numeric_arg; -+ rl_numeric_arg = _rl_digit_value (c); - rl_explicit_arg = 1; -- return 1; -+ RL_SETSTATE (RL_STATE_NUMERICARG); -+ rl_digit_loop1 (); -+ rl_numeric_arg *= save; -+ c = rl_vi_domove_getchar (m); -+ if (c < 0) -+ { -+ m->motion = 0; -+ return -1; -+ } -+ m->motion = c; -+ return (rl_domove_motion_callback (m)); - } - else - { -- rl_clear_message (); -- rl_stuff_char (key); -- return 0; -+ RL_UNSETSTATE (RL_STATE_VIMOTION); -+ RL_UNSETSTATE (RL_STATE_NUMERICARG); -+ return (1); - } - } - --/* A simplified loop for vi. Don't dispatch key at end. -- Don't recognize minus sign? -- Should this do rl_save_prompt/rl_restore_prompt? */ - static int --rl_digit_loop1 () -+rl_vi_domove_getchar (m) -+ _rl_vimotion_cxt *m; - { -- int c, r; -+ int c; - -- while (1) -- { -- if (_rl_arg_overflow ()) -- return 1; -+ RL_SETSTATE(RL_STATE_MOREINPUT); -+ c = rl_read_key (); -+ RL_UNSETSTATE(RL_STATE_MOREINPUT); - -- c = _rl_arg_getchar (); -+ return c; -+} - -- r = _rl_vi_arg_dispatch (c); -- if (r <= 0) -- break; -- } -+#if defined (READLINE_CALLBACKS) -+int -+_rl_vi_domove_callback (m) -+ _rl_vimotion_cxt *m; -+{ -+ int c, r; - -- RL_UNSETSTATE(RL_STATE_NUMERICARG); -- return (0); -+ m->motion = c = rl_vi_domove_getchar (m); -+ /* XXX - what to do if this returns -1? Should we return 1 for eof to -+ callback code? */ -+ r = rl_domove_read_callback (m); -+ -+ return ((r == 0) ? r : 1); /* normalize return values */ - } -+#endif - -+/* This code path taken when not in callback mode. */ - int --rl_vi_delete_to (count, key) -- int count, key; -+rl_vi_domove (x, ignore) -+ int x, *ignore; - { -- int c; -+ int r; -+ _rl_vimotion_cxt *m; - -- if (_rl_uppercase_p (key)) -- rl_stuff_char ('$'); -- else if (vi_redoing) -- rl_stuff_char (_rl_vi_last_motion); -+ m = _rl_vimvcxt; -+ *ignore = m->motion = rl_vi_domove_getchar (m); - -- if (rl_vi_domove (key, &c)) -+ if (m->motion < 0) - { -- rl_ding (); -+ m->motion = 0; - return -1; - } - -+ return (rl_domove_read_callback (m)); -+} -+ -+static int -+vi_delete_dispatch (m) -+ _rl_vimotion_cxt *m; -+{ - /* These are the motion commands that do not require adjusting the - mark. */ -- if ((strchr (" l|h^0bB", c) == 0) && (rl_mark < rl_end)) -+ if (((strchr (" l|h^0bBFT`", m->motion) == 0) && (rl_point >= m->start)) && -+ (rl_mark < rl_end)) - rl_mark++; - - rl_kill_text (rl_point, rl_mark); -@@ -1025,33 +1220,61 @@ rl_vi_delete_to (count, key) - } - - int --rl_vi_change_to (count, key) -+rl_vi_delete_to (count, key) - int count, key; - { -- int c, start_pos; -+ int c, r; - -+ _rl_vimvcxt = _rl_mvcxt_alloc (VIM_DELETE, key); -+ _rl_vimvcxt->start = rl_point; -+ -+ rl_mark = rl_point; - if (_rl_uppercase_p (key)) -- rl_stuff_char ('$'); -+ { -+ _rl_vimvcxt->motion = '$'; -+ r = rl_domove_motion_callback (_rl_vimvcxt); -+ } - else if (vi_redoing) -- rl_stuff_char (_rl_vi_last_motion); -- -- start_pos = rl_point; -+ { -+ _rl_vimvcxt->motion = _rl_vi_last_motion; -+ r = rl_domove_motion_callback (_rl_vimvcxt); -+ } -+#if defined (READLINE_CALLBACKS) -+ else if (RL_ISSTATE (RL_STATE_CALLBACK)) -+ { -+ RL_SETSTATE (RL_STATE_VIMOTION); -+ return (0); -+ } -+#endif -+ else -+ r = rl_vi_domove (key, &c); - -- if (rl_vi_domove (key, &c)) -+ if (r < 0) - { - rl_ding (); -- return -1; -+ r = -1; - } - -+ _rl_mvcxt_dispose (_rl_vimvcxt); -+ _rl_vimvcxt = 0; -+ -+ return r; -+} -+ -+static int -+vi_change_dispatch (m) -+ _rl_vimotion_cxt *m; -+{ - /* These are the motion commands that do not require adjusting the - mark. c[wW] are handled by special-case code in rl_vi_domove(), - and already leave the mark at the correct location. */ -- if ((strchr (" l|hwW^0bB", c) == 0) && (rl_mark < rl_end)) -+ if (((strchr (" l|hwW^0bBFT`", m->motion) == 0) && (rl_point >= m->start)) && -+ (rl_mark < rl_end)) - rl_mark++; - - /* The cursor never moves with c[wW]. */ -- if ((_rl_to_upper (c) == 'W') && rl_point < start_pos) -- rl_point = start_pos; -+ if ((_rl_to_upper (m->motion) == 'W') && rl_point < m->start) -+ rl_point = m->start; - - if (vi_redoing) - { -@@ -1069,49 +1292,145 @@ rl_vi_change_to (count, key) - rl_begin_undo_group (); /* to make the `u' command work */ - rl_kill_text (rl_point, rl_mark); - /* `C' does not save the text inserted for undoing or redoing. */ -- if (_rl_uppercase_p (key) == 0) -- _rl_vi_doing_insert = 1; -- rl_vi_start_inserting (key, rl_numeric_arg, rl_arg_sign); -+ if (_rl_uppercase_p (m->key) == 0) -+ _rl_vi_doing_insert = 1; -+ /* XXX -- TODO -- use m->numericarg? */ -+ rl_vi_start_inserting (m->key, rl_numeric_arg, rl_arg_sign); - } - - return (0); - } - - int --rl_vi_yank_to (count, key) -+rl_vi_change_to (count, key) - int count, key; - { -- int c, save; -+ int c, r; -+ -+ _rl_vimvcxt = _rl_mvcxt_alloc (VIM_CHANGE, key); -+ _rl_vimvcxt->start = rl_point; - -- save = rl_point; -+ rl_mark = rl_point; - if (_rl_uppercase_p (key)) -- rl_stuff_char ('$'); -+ { -+ _rl_vimvcxt->motion = '$'; -+ r = rl_domove_motion_callback (_rl_vimvcxt); -+ } -+ else if (vi_redoing) -+ { -+ _rl_vimvcxt->motion = _rl_vi_last_motion; -+ r = rl_domove_motion_callback (_rl_vimvcxt); -+ } -+#if defined (READLINE_CALLBACKS) -+ else if (RL_ISSTATE (RL_STATE_CALLBACK)) -+ { -+ RL_SETSTATE (RL_STATE_VIMOTION); -+ return (0); -+ } -+#endif -+ else -+ r = rl_vi_domove (key, &c); - -- if (rl_vi_domove (key, &c)) -+ if (r < 0) - { - rl_ding (); -- return -1; -+ r = -1; /* normalize return value */ - } - -+ _rl_mvcxt_dispose (_rl_vimvcxt); -+ _rl_vimvcxt = 0; -+ -+ return r; -+} -+ -+static int -+vi_yank_dispatch (m) -+ _rl_vimotion_cxt *m; -+{ - /* These are the motion commands that do not require adjusting the - mark. */ -- if ((strchr (" l|h^0%bB", c) == 0) && (rl_mark < rl_end)) -+ if (((strchr (" l|h^0%bBFT`", m->motion) == 0) && (rl_point >= m->start)) && -+ (rl_mark < rl_end)) - rl_mark++; - - rl_begin_undo_group (); - rl_kill_text (rl_point, rl_mark); - rl_end_undo_group (); - rl_do_undo (); -- rl_point = save; -+ rl_point = m->start; - - return (0); - } - - int -+rl_vi_yank_to (count, key) -+ int count, key; -+{ -+ int c, r; -+ -+ _rl_vimvcxt = _rl_mvcxt_alloc (VIM_YANK, key); -+ _rl_vimvcxt->start = rl_point; -+ -+ rl_mark = rl_point; -+ if (_rl_uppercase_p (key)) -+ { -+ _rl_vimvcxt->motion = '$'; -+ r = rl_domove_motion_callback (_rl_vimvcxt); -+ } -+#if defined (READLINE_CALLBACKS) -+ else if (RL_ISSTATE (RL_STATE_CALLBACK)) -+ { -+ RL_SETSTATE (RL_STATE_VIMOTION); -+ return (0); -+ } -+#endif -+ else -+ r = rl_vi_domove (key, &c); -+ -+ if (r < 0) -+ { -+ rl_ding (); -+ r = -1; -+ } -+ -+ _rl_mvcxt_dispose (_rl_vimvcxt); -+ _rl_vimvcxt = 0; -+ -+ return r; -+} -+ -+static int -+vidomove_dispatch (m) -+ _rl_vimotion_cxt *m; -+{ -+ int r; -+ -+ switch (m->op) -+ { -+ case VIM_DELETE: -+ r = vi_delete_dispatch (m); -+ break; -+ case VIM_CHANGE: -+ r = vi_change_dispatch (m); -+ break; -+ case VIM_YANK: -+ r = vi_yank_dispatch (m); -+ break; -+ default: -+ _rl_errmsg ("vidomove_dispatch: unknown operator %d", m->op); -+ r = 1; -+ break; -+ } -+ -+ RL_UNSETSTATE (RL_STATE_VIMOTION); -+ return r; -+} -+ -+int - rl_vi_rubout (count, key) - int count, key; - { -- int p, opoint; -+ int opoint; - - if (count < 0) - return (rl_vi_delete (-count, key)); -@@ -1193,14 +1512,22 @@ static int - _rl_vi_callback_char_search (data) - _rl_callback_generic_arg *data; - { -+ int c; - #if defined (HANDLE_MULTIBYTE) -- _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX); -+ c = _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX); - #else - RL_SETSTATE(RL_STATE_MOREINPUT); -- _rl_vi_last_search_char = rl_read_key (); -+ c = rl_read_key (); - RL_UNSETSTATE(RL_STATE_MOREINPUT); - #endif - -+ if (c <= 0) -+ return -1; -+ -+#if !defined (HANDLE_MULTIBYTE) -+ _rl_vi_last_search_char = c; -+#endif -+ - _rl_callback_func = 0; - _rl_want_redisplay = 1; - -@@ -1216,6 +1543,7 @@ int - rl_vi_char_search (count, key) - int count, key; - { -+ int c; - #if defined (HANDLE_MULTIBYTE) - static char *target; - static int tlen; -@@ -1224,27 +1552,38 @@ rl_vi_char_search (count, key) - #endif - - if (key == ';' || key == ',') -- _rl_cs_dir = (key == ';') ? _rl_cs_orig_dir : -_rl_cs_orig_dir; -+ { -+ if (_rl_cs_orig_dir == 0) -+ return -1; -+#if defined (HANDLE_MULTIBYTE) -+ if (_rl_vi_last_search_mblen == 0) -+ return -1; -+#else -+ if (_rl_vi_last_search_char == 0) -+ return -1; -+#endif -+ _rl_cs_dir = (key == ';') ? _rl_cs_orig_dir : -_rl_cs_orig_dir; -+ } - else - { - switch (key) -- { -- case 't': -- _rl_cs_orig_dir = _rl_cs_dir = FTO; -- break; -- -- case 'T': -- _rl_cs_orig_dir = _rl_cs_dir = BTO; -- break; -- -- case 'f': -- _rl_cs_orig_dir = _rl_cs_dir = FFIND; -- break; -- -- case 'F': -- _rl_cs_orig_dir = _rl_cs_dir = BFIND; -- break; -- } -+ { -+ case 't': -+ _rl_cs_orig_dir = _rl_cs_dir = FTO; -+ break; -+ -+ case 'T': -+ _rl_cs_orig_dir = _rl_cs_dir = BTO; -+ break; -+ -+ case 'f': -+ _rl_cs_orig_dir = _rl_cs_dir = FFIND; -+ break; -+ -+ case 'F': -+ _rl_cs_orig_dir = _rl_cs_dir = BFIND; -+ break; -+ } - - if (vi_redoing) - { -@@ -1252,21 +1591,27 @@ rl_vi_char_search (count, key) - } - #if defined (READLINE_CALLBACKS) - else if (RL_ISSTATE (RL_STATE_CALLBACK)) -- { -- _rl_callback_data = _rl_callback_data_alloc (count); -- _rl_callback_data->i1 = _rl_cs_dir; -- _rl_callback_func = _rl_vi_callback_char_search; -- return (0); -- } -+ { -+ _rl_callback_data = _rl_callback_data_alloc (count); -+ _rl_callback_data->i1 = _rl_cs_dir; -+ _rl_callback_func = _rl_vi_callback_char_search; -+ return (0); -+ } - #endif - else - { - #if defined (HANDLE_MULTIBYTE) -- _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX); -+ c = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX); -+ if (c <= 0) -+ return -1; -+ _rl_vi_last_search_mblen = c; - #else - RL_SETSTATE(RL_STATE_MOREINPUT); -- _rl_vi_last_search_char = rl_read_key (); -+ c = rl_read_key (); - RL_UNSETSTATE(RL_STATE_MOREINPUT); -+ if (c < 0) -+ return -1; -+ _rl_vi_last_search_char = c; - #endif - } - } -@@ -1302,7 +1647,7 @@ rl_vi_match (ignore, key) - pre = rl_point; - rl_forward_char (1, key); - if (pre == rl_point) -- break; -+ break; - } - } - else -@@ -1331,7 +1676,7 @@ rl_vi_match (ignore, key) - { - pos = _rl_find_prev_mbchar (rl_line_buffer, pos, MB_FIND_ANY); - if (tmp == pos) -- pos--; -+ pos--; - } - if (pos >= 0) - { -@@ -1426,9 +1771,9 @@ _rl_vi_change_char (count, c, mb) - } - - static int --_rl_vi_callback_getchar (mb, mblen) -+_rl_vi_callback_getchar (mb, mlen) - char *mb; -- int mblen; -+ int mlen; - { - int c; - -@@ -1436,9 +1781,12 @@ _rl_vi_callback_getchar (mb, mblen) - c = rl_read_key (); - RL_UNSETSTATE(RL_STATE_MOREINPUT); - -+ if (c < 0) -+ return -1; -+ - #if defined (HANDLE_MULTIBYTE) - if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) -- c = _rl_read_mbstring (c, mb, mblen); -+ c = _rl_read_mbstring (c, mb, mlen); - #endif - - return c; -@@ -1454,6 +1802,9 @@ _rl_vi_callback_change_char (data) - - _rl_vi_last_replacement = c = _rl_vi_callback_getchar (mb, MB_LEN_MAX); - -+ if (c < 0) -+ return -1; -+ - _rl_callback_func = 0; - _rl_want_redisplay = 1; - -@@ -1485,6 +1836,9 @@ rl_vi_change_char (count, key) - else - _rl_vi_last_replacement = c = _rl_vi_callback_getchar (mb, MB_LEN_MAX); - -+ if (c < 0) -+ return -1; -+ - return (_rl_vi_change_char (count, c, mb)); - } - -@@ -1570,8 +1924,8 @@ rl_vi_replace (count, key) - vi_replace_map[NEWLINE].function = rl_newline; - - /* If the normal vi insertion keymap has ^H bound to erase, do the -- same here. Probably should remove the assignment to RUBOUT up -- there, but I don't think it will make a difference in real life. */ -+ same here. Probably should remove the assignment to RUBOUT up -+ there, but I don't think it will make a difference in real life. */ - if (vi_insertion_keymap[CTRL ('H')].type == ISFUNC && - vi_insertion_keymap[CTRL ('H')].function == rl_rubout) - vi_replace_map[CTRL ('H')].function = rl_vi_overstrike_delete; -@@ -1619,7 +1973,7 @@ _rl_vi_set_mark () - ch = rl_read_key (); - RL_UNSETSTATE(RL_STATE_MOREINPUT); - -- if (ch < 'a' || ch > 'z') -+ if (ch < 0 || ch < 'a' || ch > 'z') /* make test against 0 explicit */ - { - rl_ding (); - return -1; -@@ -1671,7 +2025,7 @@ _rl_vi_goto_mark () - rl_point = rl_mark; - return 0; - } -- else if (ch < 'a' || ch > 'z') -+ else if (ch < 0 || ch < 'a' || ch > 'z') /* make test against 0 explicit */ - { - rl_ding (); - return -1; -Index: gdb-7.2.90.20110703/readline/xfree.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110703/readline/xfree.c 2011-07-03 10:44:45.000000000 +0200 -@@ -0,0 +1,57 @@ -+/* xfree.c -- safe version of free that ignores attempts to free NUL */ -+ -+/* Copyright (C) 1991-2010 Free Software Foundation, Inc. -+ -+ This file is part of the GNU Readline Library (Readline), a library -+ for reading lines of text with interactive input and history editing. -+ -+ Readline 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. -+ -+ Readline 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 Readline. If not, see . -+*/ -+ -+#define READLINE_LIBRARY -+ -+#if defined (HAVE_CONFIG_H) -+#include -+#endif -+ -+#if defined (HAVE_STDLIB_H) -+# include -+#else -+# include "ansi_stdlib.h" -+#endif /* HAVE_STDLIB_H */ -+ -+#include -+ -+#include "xmalloc.h" -+#include "readline.h" -+ -+/* **************************************************************** */ -+/* */ -+/* Memory Deallocation. */ -+/* */ -+/* **************************************************************** */ -+ -+/* Use this as the function to call when adding unwind protects so we -+ don't need to know what free() returns. */ -+void -+xfree (string) -+ PTR_T string; -+{ -+ /* Leak a bit. */ -+ if (RL_ISSTATE(RL_STATE_SIGHANDLER)) -+ return; -+ -+ if (string) -+ free (string); -+} -Index: gdb-7.2.90.20110703/readline/xmalloc.c -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/xmalloc.c 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/xmalloc.c 2011-07-03 10:43:54.000000000 +0200 -@@ -1,23 +1,24 @@ - /* xmalloc.c -- safe versions of malloc and realloc */ - --/* Copyright (C) 1991 Free Software Foundation, Inc. -+/* Copyright (C) 1991-2009 Free Software Foundation, Inc. - -- This file is part of GNU Readline, a library for reading lines -- of text with interactive input and history editing. -+ This file is part of the GNU Readline Library (Readline), a library -+ for reading lines of text with interactive input and history editing. - -- Readline 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 2, or (at your option) any -- later version. -- -- Readline 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. -+ Readline 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. -+ -+ Readline 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 Readline; see the file COPYING. If not, write to the Free -- Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ along with Readline. If not, see . -+*/ -+ - #define READLINE_LIBRARY - - #if defined (HAVE_CONFIG_H) -@@ -33,7 +34,6 @@ - #endif /* HAVE_STDLIB_H */ - - #include "xmalloc.h" --#include "readline.h" - - /* **************************************************************** */ - /* */ -@@ -41,9 +41,6 @@ - /* */ - /* **************************************************************** */ - --/* xmalloc and xrealloc are provided by GDB. */ --#if 0 -- - static void - memory_error_and_abort (fname) - char *fname; -@@ -80,21 +77,3 @@ xrealloc (pointer, bytes) - memory_error_and_abort ("xrealloc"); - return (temp); - } -- --/* xmalloc and xrealloc are provided by GDB. */ --#endif /* 0 */ -- --/* Use this as the function to call when adding unwind protects so we -- don't need to know what free() returns. */ --void --xfree (string) -- PTR_T string; --{ -- /* Leak a bit. */ -- if (RL_ISSTATE(RL_STATE_SIGHANDLER)) -- return; -- --#undef free -- if (string) -- free (string); --} -Index: gdb-7.2.90.20110703/readline/xmalloc.h -=================================================================== ---- gdb-7.2.90.20110703.orig/readline/xmalloc.h 2011-07-03 10:40:53.000000000 +0200 -+++ gdb-7.2.90.20110703/readline/xmalloc.h 2011-07-03 10:41:21.000000000 +0200 -@@ -1,24 +1,23 @@ - /* xmalloc.h -- memory allocation that aborts on errors. */ - --/* Copyright (C) 1999 Free Software Foundation, Inc. -+/* Copyright (C) 1999-2009 Free Software Foundation, Inc. - -- This file is part of the GNU Readline Library, a library for -- reading lines of text with interactive input and history editing. -+ This file is part of the GNU Readline Library (Readline), a library -+ for reading lines of text with interactive input and history editing. - -- The GNU Readline Library 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 2, or -+ Readline 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. - -- The GNU Readline Library 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 -+ Readline 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. - -- The GNU General Public License is often shipped with GNU software, and -- is generally kept in a file called COPYING or LICENSE. If you do not -- have a copy of the license, write to the Free Software Foundation, -- 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -+ You should have received a copy of the GNU General Public License -+ along with Readline. If not, see . -+*/ - - #if !defined (_XMALLOC_H_) - #define _XMALLOC_H_ -@@ -42,9 +41,6 @@ - /* xmalloc and xrealloc should be also protected from RL_STATE_SIGHANDLER. */ - #define xfree xfree_readline - --/* readline-5.1 backport. */ --#define free xfree -- - extern PTR_T xmalloc PARAMS((size_t)); - extern PTR_T xrealloc PARAMS((void *, size_t)); - extern void xfree PARAMS((void *)); diff --git a/gdb-bz701131-readline62-2of3.patch b/gdb-bz701131-readline62-2of3.patch deleted file mode 100644 index 4dc3fc4..0000000 --- a/gdb-bz701131-readline62-2of3.patch +++ /dev/null @@ -1,231 +0,0 @@ -http://sourceware.org/ml/gdb-patches/2011-05/msg00002.html -Subject: [patch] testsuite: Test readline-6.2 "ask" regression - -Hi, - -this problem does not affect default FSF GDB build as it is using bundled -readline-5.1. But with system readline-6.2 and build using: - --with-system-readline use installed readline library - -GDB will no longer ask about displaying too many symbols and dumps them all -immediately. -PASS: - $ gdb gdb - (gdb) p - Display all 21482 possibilities? (y or n)_ -FAIL: - $ gdb gdb - (gdb) p - Display all 22129 possibilities? (y or n) - ../../bfd/aout-target.h cs_to_section - ../../bfd/aout32.c ctime - - -This regression will soon start affecting distros: - FSF GDB HEAD - PASS - using bundled readline-5.1 - fedora-15 - FAIL - using system readline-6.2 - fedora-14 - PASS - using system readline-6.1 - debian-6.0 - PASS - using system readline-6.1 - kubuntu-10.10 - PASS - using system readline-6.1 - -I have asked about it on readline ml: - Re: [Bug-readline] callback mode pager disable status - https://lists.gnu.org/archive/html/bug-readline/2011-04/msg00012.html -The suggested workaround (in fact the readline-5.1 code state) going to patch -into the proposed FSF GDB bundled readline-6.2. Distros then can stop using ---with-system-readline to still feature recent and system matching readline -until readline-7.0 gets released. - -This regression has been so far caught only with system debug infos installed: - -PASS: gdb.base/completion.exp: complete (2) 'p no_var_named_this-' - -PASS: gdb.base/completion.exp: complete 'p values[0].a' - -PASS: gdb.base/completion.exp: complete 'p values[0] . a' - -PASS: gdb.base/completion.exp: complete 'p &values[0] -> a' - -PASS: gdb.base/completion.exp: copmletion of field in anonymous union - +FAIL: gdb.base/completion.exp: (timeout) complete (2) 'p no_var_named_this-' - +FAIL: gdb.base/completion.exp: (timeout) complete 'p values[0].a' 2 - +FAIL: gdb.base/completion.exp: (timeout) complete 'p values[0] . a' 2 - +FAIL: gdb.base/completion.exp: (timeout) complete 'p &values[0] -> a' 2 - +FAIL: gdb.base/completion.exp: copmletion of field in anonymous union - -I will check it in with no comments. - - -Thanks, -Jan - - -gdb/testsuite/ -2011-05-01 Jan Kratochvil - - * gdb.base/readline-ask.c: New file. - * gdb.base/readline-ask.exp: New file. - * gdb.base/readline-ask.inputrc: New file. - ---- /dev/null -+++ b/gdb/testsuite/gdb.base/readline-ask.c -@@ -0,0 +1,23 @@ -+/* This testcase is part of GDB, the GNU debugger. -+ -+ Copyright 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 . */ -+ -+int -+symbol_01_length_40_____________________, -+symbol_02_length_40_____________________, -+symbol_03_length_40_____________________, -+symbol_04_length_40_____________________, -+symbol_10_length_40_____________________; ---- /dev/null -+++ b/gdb/testsuite/gdb.base/readline-ask.exp -@@ -0,0 +1,118 @@ -+# Copyright (C) 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 . -+ -+set testfile readline-ask -+set executable ${testfile}.x -+set srcfile ${testfile}.c -+set binfile ${objdir}/${subdir}/${executable} -+set inputrc ${srcdir}/${subdir}/${testfile}.inputrc -+ -+if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" object {debug}] != "" } { -+ untested ${testfile}.exp -+ return -1 -+} -+ -+# INPUTRC gets reset for the next testfile. -+setenv INPUTRC $inputrc -+clean_restart ${executable} -+ -+gdb_test_no_output "set width 50" -+gdb_test_no_output "set height 3" -+ -+set cmd "p symbol_0" -+send_gdb "$cmd\t" -+set test "bell for more message" -+gdb_test_multiple "" $test { -+ -re "$cmd\007$" { -+ pass $test -+ } -+} -+ -+send_gdb "\t" -+set test "more message for 01 and 02" -+gdb_test_multiple "" $test { -+ -re "^\r\nsymbol_01_length_40_____________________\r\nsymbol_02_length_40_____________________\r\n--More--$" { -+ pass $test -+ } -+ -re "$gdb_prompt " { -+ fail $test -+ } -+} -+ -+# There get some VT100 characters printed. -+ -+send_gdb "\r" -+set test "more message for 03" -+gdb_test_multiple "" $test { -+ -re "\rsymbol_03_length_40_____________________\r\n--More--$" { -+ pass $test -+ } -+} -+ -+# "$gdb_prompt $" will not match as $cmd gets output: $gdb_prompt p symbol_0 -+# And "$gdb_prompt p symbol_0" cannot be matched as the default "$gdb_prompt $" -+# string from gdb_test_multiple could match earlier. -+ -+send_gdb "\r" -+set test "more finish for 04" -+gdb_test_multiple "" $test { -+ -re "\rsymbol_04_length_40_____________________\r\n$gdb_prompt " { -+ pass $test -+ } -+} -+ -+gdb_test "foo" {No symbol "symbol_0foo" in current context\.} "abort more message" -+ -+set cmd "p symbol_" -+send_gdb "$cmd\t" -+set test "bell for ask message" -+gdb_test_multiple "" $test { -+ -re "$cmd\007$" { -+ pass $test -+ } -+} -+ -+send_gdb "\t" -+set test "ask message" -+gdb_test_multiple "" $test { -+ -re "^\r\nDisplay all 5 possibilities\\? \\(y or n\\)$" { -+ pass $test -+ } -+ -re "$gdb_prompt " { -+ fail $test -+ return 0 -+ } -+} -+ -+send_gdb "y" -+set test "ask message for 01 and 02" -+gdb_test_multiple "" $test { -+ -re "^\r\nsymbol_01_length_40_____________________\r\nsymbol_02_length_40_____________________\r\n--More--$" { -+ pass $test -+ } -+} -+ -+# There get some VT100 characters printed. -+# See the "$gdb_prompt " match like in "more finish for 04". -+ -+send_gdb "n" -+set test "ask message no" -+gdb_test_multiple "" $test { -+ -re "\r$gdb_prompt " { -+ pass $test -+ } -+} -+ -+gdb_test "foo" {No symbol "symbol_foo" in current context\.} "abort ask message" ---- /dev/null -+++ b/gdb/testsuite/gdb.base/readline-ask.inputrc -@@ -0,0 +1,16 @@ -+# Copyright (C) 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 . -+ -+set completion-query-items 5 - diff --git a/gdb-bz701131-readline62-3of3.patch b/gdb-bz701131-readline62-3of3.patch deleted file mode 100644 index 8720742..0000000 --- a/gdb-bz701131-readline62-3of3.patch +++ /dev/null @@ -1,120 +0,0 @@ -http://sourceware.org/ml/gdb-patches/2011-05/msg00010.html -Subject: [patch 4/3] readline-6.2: Substitute inc-hist.texinfo - -Hi, - -forgot the patchset had a `make doc' regression: -make: *** No rule to make target `../../../gdb/doc/../../readline/doc/inc-hist.texinfo', needed by `gdb.info'. Stop. - -There was a copy hsuser.texi -> inc-hist.texinfo before with this diff: - @node Using History Interactively - @chapter Using History Interactively - - -@ifclear BashFeatures - -@defcodeindex bt - -@end ifclear - +@c @ifclear BashFeatures - +@c @defcodeindex bt - +@c @end ifclear - - @ifset BashFeatures - This chapter describes how to use the @sc{gnu} History Library - @end ifset - @ifclear BashFeatures - This chapter describes how to use the @sc{gnu} History Library interactively, - -from a user's standpoint. It should be considered a user's guide. For - -information on using the @sc{gnu} History Library in your own programs, - -@pxref{Programming with GNU History}. - +from a user's standpoint. It should be considered a user's guide. - +For information on using the @sc{gnu} History Library in other programs, - +see the @sc{gnu} Readline Library Manual. - @end ifclear - - @ifset BashFeatures - -Used slightly alternative one with IMO better reference and I have also kept -hsuser.texi in place as readline/ in src/ is no longer a standalone readline -distribution anyway. - - -Sorry, -Jan - - -gdb/doc/ -2011-05-02 Jan Kratochvil - - * Makefile.in (GDB_DOC_SOURCE_INCLUDES): Rename inc-hist.texinfo to - hsuser.texi. - * gdb.texinfo : Rename inc-hist.texinfo inclusion and - comment to hsuser.texi. Change rluser.texi name in the comment. - -readline/doc/ -2011-05-02 Jan Kratochvil - - * hsuser.texi (Using History Interactively): Disable !BashFeatures - @defcodeindex. Make the `Programming with GNU History' reference - external. - -Index: gdb-7.2.90.20110525/gdb/doc/Makefile.in -=================================================================== ---- gdb-7.2.90.20110525.orig/gdb/doc/Makefile.in 2011-01-03 14:01:05.000000000 +0100 -+++ gdb-7.2.90.20110525/gdb/doc/Makefile.in 2011-05-25 19:16:35.000000000 +0200 -@@ -117,7 +117,7 @@ GDB_DOC_SOURCE_INCLUDES = \ - $(srcdir)/gpl.texi \ - $(srcdir)/agentexpr.texi \ - $(READLINE_DIR)/rluser.texi \ -- $(READLINE_DIR)/inc-hist.texinfo -+ $(READLINE_DIR)/hsuser.texi - GDB_DOC_BUILD_INCLUDES = \ - gdb-cfg.texi \ - GDBvn.texi -Index: gdb-7.2.90.20110525/gdb/doc/gdb.texinfo -=================================================================== ---- gdb-7.2.90.20110525.orig/gdb/doc/gdb.texinfo 2011-05-25 19:14:36.000000000 +0200 -+++ gdb-7.2.90.20110525/gdb/doc/gdb.texinfo 2011-05-25 19:17:01.000000000 +0200 -@@ -31095,13 +31095,13 @@ things without first using the debugger - - @c The readline documentation is distributed with the readline code - @c and consists of the two following files: --@c rluser.texinfo --@c inc-hist.texinfo -+@c rluser.texi -+@c hsuser.texi - @c Use -I with makeinfo to point to the appropriate directory, - @c environment var TEXINPUTS with TeX. - @ifclear SYSTEM_READLINE - @include rluser.texi --@include inc-hist.texinfo -+@include hsuser.texi - @end ifclear - - @node In Memoriam -Index: gdb-7.2.90.20110525/readline/doc/hsuser.texi -=================================================================== ---- gdb-7.2.90.20110525.orig/readline/doc/hsuser.texi 2011-05-25 19:16:17.000000000 +0200 -+++ gdb-7.2.90.20110525/readline/doc/hsuser.texi 2011-05-25 19:16:35.000000000 +0200 -@@ -26,9 +26,10 @@ into another language, under the above c - @node Using History Interactively - @chapter Using History Interactively - --@ifclear BashFeatures --@defcodeindex bt --@end ifclear -+@c GDB bundling modification: -+@c @ifclear BashFeatures -+@c @defcodeindex bt -+@c @end ifclear - - @ifset BashFeatures - This chapter describes how to use the @sc{gnu} History Library -@@ -41,7 +42,8 @@ see the @sc{gnu} Readline Library Manual - This chapter describes how to use the @sc{gnu} History Library interactively, - from a user's standpoint. It should be considered a user's guide. For - information on using the @sc{gnu} History Library in your own programs, --@pxref{Programming with GNU History}. -+@c GDB bundling modification: -+@pxref{Programming with GNU History, , , history, GNU History Library}. - @end ifclear - - @ifset BashFeatures diff --git a/gdb-ccache-workaround.patch b/gdb-ccache-workaround.patch index 5f28afa..4352590 100644 --- a/gdb-ccache-workaround.patch +++ b/gdb-ccache-workaround.patch @@ -7,8 +7,8 @@ +# Workaround ccache making lineno non-zero for command-line definitions. +if {[find_gcc] == "gcc" && [file executable "/usr/bin/gcc"]} { + set result [catch "exec which gcc" output] -+ if {$result == 0 && [string first "/ccache/" $output] >= -1} { -+ lappend options "compiler=/usr/bin/gcc" ++ if {$result == 0 && [string first "/ccache/" $output] > -1} { ++ lappend options "compiler=/usr/bin/gcc" + } +} + diff --git a/gdb-core-open-vdso-warning.patch b/gdb-core-open-vdso-warning.patch index f120fbe..90527e7 100644 --- a/gdb-core-open-vdso-warning.patch +++ b/gdb-core-open-vdso-warning.patch @@ -33,36 +33,35 @@ gdb/ [ Context backport. ] -Index: gdb-7.1.90.20100711/gdb/solib-svr4.c +Index: gdb-7.4.50.20111218/gdb/solib-svr4.c =================================================================== ---- gdb-7.1.90.20100711.orig/gdb/solib-svr4.c 2010-07-12 23:07:35.000000000 +0200 -+++ gdb-7.1.90.20100711/gdb/solib-svr4.c 2010-07-13 00:19:03.000000000 +0200 -@@ -1177,8 +1177,18 @@ svr4_current_sos (void) - target_read_string (LM_NAME (new), &buffer, - SO_NAME_MAX_PATH_SIZE - 1, &errcode); - if (errcode != 0) -- warning (_("Can't read pathname for load map: %s."), -- safe_strerror (errcode)); -+ { -+ /* During the first ever DSO list reading some strings may be -+ unreadable as residing in the ld.so readonly memory not being -+ present in a dumped core file. Delay the error check after -+ the first pass of DSO list scanning when ld.so should be -+ already mapped in and all the DSO list l_name memory gets -+ readable. */ +--- gdb-7.4.50.20111218.orig/gdb/solib-svr4.c 2011-12-19 01:14:31.000000000 +0100 ++++ gdb-7.4.50.20111218/gdb/solib-svr4.c 2011-12-19 01:31:10.106752164 +0100 +@@ -1222,8 +1222,17 @@ svr4_read_so_list (CORE_ADDR lm, struct + SO_NAME_MAX_PATH_SIZE - 1, &errcode); + if (errcode != 0) + { +- warning (_("Can't read pathname for load map: %s."), +- safe_strerror (errcode)); ++ /* During the first ever DSO list reading some strings may be ++ unreadable as residing in the ld.so readonly memory not being ++ present in a dumped core file. Delay the error check after ++ the first pass of DSO list scanning when ld.so should be ++ already mapped in and all the DSO list l_name memory gets ++ readable. */ + -+ if (master_so_list () != NULL) -+ warning (_("Can't read pathname for load map: %s."), -+ safe_strerror (errcode)); -+ } - else - { - struct build_id *build_id; -Index: gdb-7.1.90.20100711/gdb/solib.c ++ if (master_so_list () != NULL) ++ warning (_("Can't read pathname for load map: %s."), ++ safe_strerror (errcode)); ++ + do_cleanups (old_chain); + continue; + } +Index: gdb-7.4.50.20111218/gdb/solib.c =================================================================== ---- gdb-7.1.90.20100711.orig/gdb/solib.c 2010-05-17 01:49:58.000000000 +0200 -+++ gdb-7.1.90.20100711/gdb/solib.c 2010-07-13 00:21:01.000000000 +0200 -@@ -705,6 +705,7 @@ update_solib_list (int from_tty, struct +--- gdb-7.4.50.20111218.orig/gdb/solib.c 2011-09-12 21:00:22.000000000 +0200 ++++ gdb-7.4.50.20111218/gdb/solib.c 2011-12-19 01:29:04.815227898 +0100 +@@ -676,6 +676,7 @@ update_solib_list (int from_tty, struct struct target_so_ops *ops = solib_ops (target_gdbarch); struct so_list *inferior = ops->current_sos(); struct so_list *gdb, **gdb_link; @@ -70,7 +69,7 @@ Index: gdb-7.1.90.20100711/gdb/solib.c /* We can reach here due to changing solib-search-path or the sysroot, before having any inferior. */ -@@ -844,6 +845,12 @@ Error while mapping shared library secti +@@ -817,6 +818,12 @@ update_solib_list (int from_tty, struct observer_notify_solib_loaded (i); } diff --git a/gdb-core-thread-internalerr-1of3.patch b/gdb-core-thread-internalerr-1of3.patch deleted file mode 100644 index 727712e..0000000 --- a/gdb-core-thread-internalerr-1of3.patch +++ /dev/null @@ -1,154 +0,0 @@ -http://sourceware.org/ml/gdb-patches/2011-02/msg00679.html -Subject: Re: [patch 1/3] Code cleanup: gdb.threads/gcore-thread.exp - -On Thu, 24 Feb 2011 08:20:09 +0100, Joel Brobecker wrote: -> Just a thought: Do we really need to worry about restoring -> the timeout at the end of the testcase, given that this is -> automatically done at the start of each testcase (see gdb.exp: -> gdb_init)? - -I see now: - Re: [RFA/testsuite] Reset the timeout duration at the start of each testcase. - http://sourceware.org/ml/gdb-patches/2010-02/msg00202.html - commit 501c57da40fd27c8036a5fc995f750b0559272ad - -Patch updated. - - -Thanks, -Jan - - -gdb/testsuite/ -2011-02-24 Jan Kratochvil - - * gdb.threads/gcore-thread.exp ($testfile): Match it the .exp - filename. - ($srcfile): Preserve the original value. - ($testfile): Match it the .exp filename. - ($corefile): New variable. Substitute it around. - Use clean_restart. - ($prev_timeout): Remove. - (load_core): Move core loading into this proc. - Fix restore of $timeout if load_core fails. - ---- a/gdb/testsuite/gdb.threads/gcore-thread.exp -+++ b/gdb/testsuite/gdb.threads/gcore-thread.exp -@@ -21,11 +21,11 @@ if $tracelevel then { - strace $tracelevel - } - -- - # Single-threaded test case --set testfile "pthreads" --set srcfile ${testfile}.c --set binfile ${objdir}/${subdir}/gcore-${testfile} -+set testfile "gcore-thread" -+set srcfile pthreads.c -+set binfile ${objdir}/${subdir}/${testfile} -+set corefile ${objdir}/${subdir}/${testfile}.test - - if [istarget "*-*-linux"] then { - set target_cflags "-D_MIT_POSIX_THREADS" -@@ -41,10 +41,7 @@ if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executab - - # Start with a fresh gdb. - --gdb_exit --gdb_start --gdb_reinitialize_dir $srcdir/$subdir --gdb_load ${binfile} -+clean_restart ${testfile} - - # regexp for "horizontal" text (i.e. doesn't include newline or - # carriage return) -@@ -53,7 +50,6 @@ set horiz "\[^\n\r\]*" - # regexp for newline - set nl "\[\r\n\]+" - --set prev_timeout $timeout - set timeout 30 - - gdb_test_multiple "help gcore" "help gcore" { -@@ -92,10 +88,9 @@ delete_breakpoints - gdb_breakpoint "thread2" - gdb_test "continue" "Continuing.*Breakpoint.* thread2 .*" "thread 2 is running" - --set escapedfilename [string_to_regexp ${objdir}/${subdir}/gcore.test] -+set escapedfilename [string_to_regexp $corefile] - # Drop corefile --gdb_test_multiple "gcore ${objdir}/${subdir}/gcore.test" \ -- "save a corefile" \ -+gdb_test_multiple "gcore $corefile" "save a corefile" \ - { - -re "Saved corefile ${escapedfilename}\[\r\n\]+$gdb_prompt $" { - pass "save a corefile" -@@ -114,31 +109,38 @@ if {!$core_supported} { - return -1 - } - -+ - # Now restart gdb and load the corefile. --gdb_exit --gdb_start --gdb_reinitialize_dir $srcdir/$subdir --gdb_load ${binfile} -- --gdb_test_multiple "core ${objdir}/${subdir}/gcore.test" \ -- "re-load generated corefile" { -- -re ".* is not a core dump:.*$gdb_prompt $" { -- fail "re-load generated corefile (bad file format)" -- # No use proceeding from here. -- return; -- } -- -re ".*: No such file or directory.*$gdb_prompt $" { -- fail "re-load generated corefile (file not found)" -- # No use proceeding from here. -- return; -- } -- -re ".*Couldn't find .* registers in core file.*$gdb_prompt $" { -- fail "re-load generated corefile (incomplete note section)" -- } -- -re "Core was generated by .*$gdb_prompt $" { -- pass "re-load generated corefile" -+clean_restart ${testfile} -+ -+proc load_core { corefile } { -+ global gdb_prompt -+ -+ gdb_test_multiple "core $corefile" \ -+ "re-load generated corefile" { -+ -re " is not a core dump:.*\r\n$gdb_prompt $" { -+ fail "re-load generated corefile (bad file format)" -+ # No use proceeding from here. -+ return 0; -+ } -+ -re ": No such file or directory.*\r\n$gdb_prompt $" { -+ fail "re-load generated corefile (file not found)" -+ # No use proceeding from here. -+ return 0; -+ } -+ -re "Couldn't find .* registers in core file.*\r\n$gdb_prompt $" { -+ fail "re-load generated corefile (incomplete note section)" -+ } -+ -re "Core was generated by .*\r\n$gdb_prompt $" { -+ pass "re-load generated corefile" -+ } - } -- } -+ return 1 -+} -+ -+if ![load_core $corefile] { -+ return -+} - - # FIXME: now what can we test about the thread state? - # We do not know for certain that there should be at least -@@ -158,5 +160,3 @@ gdb_test "info threads" ".* thread2 .*" \ - - gdb_test "info threads" ".*${nl}\\* ${horiz} thread2 .*" \ - "thread2 is current thread in corefile" -- --set timeout $prev_timeout - diff --git a/gdb-core-thread-internalerr-2of3.patch b/gdb-core-thread-internalerr-2of3.patch deleted file mode 100644 index a426bd7..0000000 --- a/gdb-core-thread-internalerr-2of3.patch +++ /dev/null @@ -1,102 +0,0 @@ -http://sourceware.org/ml/gdb-patches/2011-02/msg00680.html -Subject: [patch 2/3] Fix threading internal error on corrupted memory [rediff] - -[rediff] - -gdb/ -2011-02-24 Jan Kratochvil - - * linux-thread-db.c (find_new_threads_callback): Exit on zero TI_TID - even if !TARGET_HAS_EXECUTION. - -gdb/testsuite/ -2011-02-24 Jan Kratochvil - - * gdb.threads/gcore-thread.exp ($core0file): New variable. - (clear __stack_user.next, clear stack_used.next) - (save a zeroed-threads corefile): New test. - Call core_load for $core0file. - (zeroed-threads cannot be listed): New test. - ---- a/gdb/linux-thread-db.c -+++ b/gdb/linux-thread-db.c -@@ -1335,7 +1335,7 @@ find_new_threads_callback (const td_thrhandle_t *th_p, void *data) - if (ti.ti_state == TD_THR_UNKNOWN || ti.ti_state == TD_THR_ZOMBIE) - return 0; /* A zombie -- ignore. */ - -- if (ti.ti_tid == 0 && target_has_execution) -+ if (ti.ti_tid == 0) - { - /* A thread ID of zero means that this is the main thread, but - glibc has not yet initialized thread-local storage and the -@@ -1347,10 +1347,13 @@ find_new_threads_callback (const td_thrhandle_t *th_p, void *data) - need this glibc bug workaround. */ - info->need_stale_parent_threads_check = 0; - -- err = info->td_thr_event_enable_p (th_p, 1); -- if (err != TD_OK) -- error (_("Cannot enable thread event reporting for LWP %d: %s"), -- (int) ti.ti_lid, thread_db_err_str (err)); -+ if (target_has_execution) -+ { -+ err = info->td_thr_event_enable_p (th_p, 1); -+ if (err != TD_OK) -+ error (_("Cannot enable thread event reporting for LWP %d: %s"), -+ (int) ti.ti_lid, thread_db_err_str (err)); -+ } - - return 0; - } ---- a/gdb/testsuite/gdb.threads/gcore-thread.exp -+++ b/gdb/testsuite/gdb.threads/gcore-thread.exp -@@ -26,6 +26,7 @@ set testfile "gcore-thread" - set srcfile pthreads.c - set binfile ${objdir}/${subdir}/${testfile} - set corefile ${objdir}/${subdir}/${testfile}.test -+set core0file ${objdir}/${subdir}/${testfile}0.test - - if [istarget "*-*-linux"] then { - set target_cflags "-D_MIT_POSIX_THREADS" -@@ -110,6 +111,29 @@ if {!$core_supported} { - } - - -+# Test the uninitialized thread list. -+# Provide the case of glibc td_thr_get_info handling of: -+# /* Special case for the main thread before initialization. */ -+ -+foreach symbol {__stack_user stack_used} { -+ set test "clear ${symbol}.next" -+ gdb_test_multiple "p *(void **) &${symbol} = 0" $test { -+ -re " = \\(void \\*\\) 0x0\r\n$gdb_prompt $" { -+ pass $test -+ } -+ -re "No symbol \"${symbol}\" in current context\\.\r\n$gdb_prompt $" { -+ xfail $test -+ # Do not do the verification. -+ set core0file "" -+ } -+ } -+} -+ -+if {"$core0file" != ""} { -+ gdb_test "gcore $core0file" "Saved corefile .*" "save a zeroed-threads corefile" -+} -+ -+ - # Now restart gdb and load the corefile. - clean_restart ${testfile} - -@@ -160,3 +184,11 @@ gdb_test "info threads" ".* thread2 .*" \ - - gdb_test "info threads" ".*${nl}\\* ${horiz} thread2 .*" \ - "thread2 is current thread in corefile" -+ -+ -+# Test the uninitialized thread list. -+ -+if {"$core0file" != "" && [load_core $core0file]} { -+ -+ gdb_test "info threads" "Cannot find new threads: .*" "zeroed-threads cannot be listed" -+} - diff --git a/gdb-core-thread-internalerr-3of3.patch b/gdb-core-thread-internalerr-3of3.patch deleted file mode 100644 index 32c7695..0000000 --- a/gdb-core-thread-internalerr-3of3.patch +++ /dev/null @@ -1,101 +0,0 @@ -http://sourceware.org/ml/gdb-patches/2011-02/msg00675.html -Subject: [patch 3/3] Display core reasons even during thread error - -[ rediff ] - -Hi, - -this is mostly unrelated. But after the patch 2/3 it will still FAIL: - Loaded symbols for /lib64/ld-linux-x86-64.so.2 - Cannot find new threads: debugger service failed - (gdb) FAIL: gdb.threads/gcore-thread.exp: re-load generated corefile - -as it is a common bug I dislike for years I have fixed it here: - Loaded symbols for /lib64/ld-linux-x86-64.so.2 - Cannot find new threads: debugger service failed - Core was generated by `.../gdb/testsuite/gdb.threads/gcore-thread'. - Program terminated with signal 5, Trace/breakpoint trap. - #0 thread2 (arg=0xdeadbeef) at ./gdb.threads/pthreads.c:91 - 91 int k = 0; - (gdb) PASS: gdb.threads/gcore-thread.exp: re-load generated corefile - -No regressions on {x86_64,x86_64-m32,i686}-fedora15-linux-gnu. - - -Thanks, -Jan - - -gdb/ -2011-02-24 Jan Kratochvil - - * corelow.c: Include wrapper.h. - (core_open): Call now gdb_target_find_new_threads. - * wrapper.c: Include target.h. - (gdb_target_find_new_threads): New. - * wrapper.h (gdb_target_find_new_threads): New declaration. - ---- a/gdb/corelow.c -+++ b/gdb/corelow.c -@@ -47,6 +47,7 @@ - #include "auxv.h" - #include "elf/common.h" - #include "gdbcmd.h" -+#include "wrapper.h" - - - #ifndef O_LARGEFILE -@@ -428,7 +429,7 @@ core_open (char *filename, int from_tty) - may be a thread_stratum target loaded on top of target core by - now. The layer above should claim threads found in the BFD - sections. */ -- target_find_new_threads (); -+ gdb_target_find_new_threads (); - - p = bfd_core_file_failing_command (core_bfd); - if (p) ---- a/gdb/wrapper.c -+++ b/gdb/wrapper.c -@@ -21,6 +21,7 @@ - #include "exceptions.h" - #include "wrapper.h" - #include "ui-out.h" -+#include "target.h" - - int - gdb_parse_exp_1 (char **stringptr, struct block *block, int comma, -@@ -161,3 +162,24 @@ gdb_value_struct_elt (struct ui_out *uiout, struct value **result, - return GDB_RC_FAIL; - return GDB_RC_OK; - } -+ -+/* Call target_find_new_threads without throwing exception. Exception is -+ printed if it got thrown. */ -+ -+int -+gdb_target_find_new_threads (void) -+{ -+ volatile struct gdb_exception except; -+ -+ TRY_CATCH (except, RETURN_MASK_ERROR) -+ { -+ target_find_new_threads (); -+ } -+ -+ if (except.reason < 0) -+ { -+ exception_print (gdb_stderr, except); -+ return 0; -+ } -+ return 1; -+} ---- a/gdb/wrapper.h -+++ b/gdb/wrapper.h -@@ -48,4 +48,6 @@ extern int gdb_value_ind (struct value *val, struct value ** rval); - - extern int gdb_parse_and_eval_type (char *, int, struct type **); - -+extern int gdb_target_find_new_threads (void); -+ - #endif /* wrapper.h */ - diff --git a/gdb-dejagnu-go.patch b/gdb-dejagnu-go.patch new file mode 100644 index 0000000..3e809f4 --- /dev/null +++ b/gdb-dejagnu-go.patch @@ -0,0 +1,42 @@ +http://sourceware.org/ml/gdb-patches/2012-06/msg00050.html +Subject: [patch] dejagnu compat. - missing find_go_linker [Re: [patch, doc RFA] Go language support] + +On Wed, 25 Apr 2012 04:17:35 +0200, Doug Evans wrote: +> +if {[info procs find_go_linker] == ""} { +> + rename gdb_find_go find_go +> + rename gdb_find_go_linker find_go_linker +> + # No need to set use_gdb_compile. +> +} + +Is there a reason for it? With recent Fedora 17 update + https://bugzilla.redhat.com/show_bug.cgi?id=635651 + +dejagnu has started to support 'find_gfortran'. But it still does not support +'find_go_linker'. This has resulted in regression failing to compile any +gdb.go/*.exp files. + + +Thanks, +Jan + + +gdb/testsuite/ +2012-06-02 Jan Kratochvil + + * lib/future.exp: Set $use_gdb_compile even if only find_go_linker is + missing. + +diff --git a/gdb/testsuite/lib/future.exp b/gdb/testsuite/lib/future.exp +index 40456c0..bf47988 100644 +--- a/gdb/testsuite/lib/future.exp ++++ b/gdb/testsuite/lib/future.exp +@@ -514,7 +514,7 @@ if {[info procs find_gfortran] == ""} { + if {[info procs find_go_linker] == ""} { + rename gdb_find_go find_go + rename gdb_find_go_linker find_go_linker +- # No need to set use_gdb_compile. ++ set use_gdb_compile 1 + } + + if {$use_gdb_compile} { + diff --git a/gdb-disable-mcheck.patch b/gdb-disable-mcheck.patch new file mode 100644 index 0000000..39188fc --- /dev/null +++ b/gdb-disable-mcheck.patch @@ -0,0 +1,24 @@ +diff -dup -rup gdb-7.4.50.20120603-orig/gdb/configure gdb-7.4.50.20120603/gdb/configure +--- gdb-7.4.50.20120603-orig/gdb/configure 2012-06-06 19:08:32.824824699 +0200 ++++ gdb-7.4.50.20120603/gdb/configure 2012-06-06 19:12:12.346992423 +0200 +@@ -2706,7 +2706,7 @@ fi + # Provide more thorough testing by -lmcheck. + # Set it to 'true' for development snapshots, 'false' for releases or + # pre-releases. +-development=true ++development=false + + ac_ext=c + ac_cpp='$CPP $CPPFLAGS' +diff -dup -rup gdb-7.4.50.20120603-orig/gdb/configure.ac gdb-7.4.50.20120603/gdb/configure.ac +--- gdb-7.4.50.20120603-orig/gdb/configure.ac 2012-06-06 19:08:32.817824693 +0200 ++++ gdb-7.4.50.20120603/gdb/configure.ac 2012-06-06 19:12:05.545987227 +0200 +@@ -26,7 +26,7 @@ AM_MAINTAINER_MODE + # Provide more thorough testing by -lmcheck. + # Set it to 'true' for development snapshots, 'false' for releases or + # pre-releases. +-development=true ++development=false + + AC_PROG_CC + AC_USE_SYSTEM_EXTENSIONS diff --git a/gdb-dlopen-stap-probe-test.patch b/gdb-dlopen-stap-probe-test.patch new file mode 100644 index 0000000..a68f3bc --- /dev/null +++ b/gdb-dlopen-stap-probe-test.patch @@ -0,0 +1,409 @@ +commit 5bfdc32cd3bf373c3b02e1fd864ed8ceab0292b2 +Author: Jan Kratochvil +Date: Mon Aug 8 12:08:53 2011 +0200 + + +testcase + +Index: gdb-7.4.50.20120602/gdb/testsuite/gdb.threads/dlopen-libpthread-lib.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.4.50.20120602/gdb/testsuite/gdb.threads/dlopen-libpthread-lib.c 2012-06-02 20:03:42.711393776 +0200 +@@ -0,0 +1,40 @@ ++/* This testcase is part of GDB, the GNU debugger. ++ ++ Copyright 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 . */ ++ ++#include ++#include ++ ++static void * ++tfunc (void *arg) ++{ ++ void (*notifyp) (void) = arg; ++ ++ notifyp (); ++} ++ ++void ++f (void (*notifyp) (void)) ++{ ++ pthread_t t; ++ int i; ++ ++ i = pthread_create (&t, NULL, tfunc, notifyp); ++ assert (i == 0); ++ ++ i = pthread_join (t, NULL); ++ assert (i == 0); ++} +Index: gdb-7.4.50.20120602/gdb/testsuite/gdb.threads/dlopen-libpthread.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.4.50.20120602/gdb/testsuite/gdb.threads/dlopen-libpthread.c 2012-06-02 20:03:42.712393775 +0200 +@@ -0,0 +1,46 @@ ++/* This testcase is part of GDB, the GNU debugger. ++ ++ Copyright 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 . */ ++ ++#include ++#include ++#include ++ ++static const char *volatile filename; ++ ++static void ++notify (void) ++{ ++ filename = NULL; /* notify-here */ ++} ++ ++int ++main (void) ++{ ++ void *h; ++ void (*fp) (void (*) (void)); ++ ++ assert (filename != NULL); ++ h = dlopen (filename, RTLD_LAZY); ++ assert (h != NULL); ++ ++ fp = dlsym (h, "f"); ++ assert (fp != NULL); ++ ++ fp (notify); ++ ++ return 0; ++} +Index: gdb-7.4.50.20120602/gdb/testsuite/gdb.threads/dlopen-libpthread.exp +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.4.50.20120602/gdb/testsuite/gdb.threads/dlopen-libpthread.exp 2012-06-02 20:03:42.724393771 +0200 +@@ -0,0 +1,74 @@ ++# Copyright 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 . ++ ++if {![istarget *-linux*] || [skip_shlib_tests]} { ++ return 0 ++} ++ ++load_lib prelink-support.exp ++ ++set testfile "dlopen-libpthread" ++set srcmainfile ${testfile}.c ++set srclibfile ${testfile}-lib.c ++set executable ${testfile} ++set binfile_lib ${objdir}/${subdir}/${executable}.so ++set binfile ${objdir}/${subdir}/${executable} ++set lib_dlopen [shlib_target_file ${executable}.so] ++ ++# Use build_executable_own_libs as prelinked libpthread.so can produce false ++# PASS - it is OK if GDB processes it still before relocation. ++ ++set relink_args [build_executable_own_libs ${testfile}.exp ${executable}.so $srclibfile {debug shlib_pthreads} no] ++if {$relink_args == "" || ![prelink_no $relink_args] ++ || [prepare_for_testing ${testfile}.exp ${executable} ${srcmainfile} {debug shlib_load}] } { ++ return -1 ++} ++gdb_load_shlibs $binfile_lib ++ ++if { ![runto_main] } { ++ return -1 ++} ++ ++set test "print _dl_debug_notify" ++gdb_test_multiple $test $test { ++ -re " 0x\[0-9a-f\]+ <_dl_debug_notify>\r\n$gdb_prompt $" { ++ pass $test ++ } ++ -re "No symbol \"_dl_debug_notify\" in current context\\.\r\n$gdb_prompt $" { ++ xfail $test ++ untested ${testfile}.exp ++ return ++ } ++} ++ ++set test "libpthread.so not found" ++gdb_test_multiple "info sharedlibrary" $test { ++ -re "/libpthread\\.so.*\r\n$gdb_prompt $" { ++ fail $test ++ } ++ -re "/libc\\.so.*\r\n$gdb_prompt $" { ++ pass $test ++ } ++} ++ ++gdb_test "set variable filename=\"$lib_dlopen\"" ++ ++gdb_breakpoint "notify" ++ ++# The error was: ++# Cannot find new threads: generic error ++gdb_continue_to_breakpoint "notify" ".* notify-here .*" ++ ++gdb_test "info sharedlibrary" {/libpthread\.so.*} "libpthread.so found" +Index: gdb-7.4.50.20120602/gdb/testsuite/lib/gdb.exp +=================================================================== +--- gdb-7.4.50.20120602.orig/gdb/testsuite/lib/gdb.exp 2012-06-02 19:11:56.000000000 +0200 ++++ gdb-7.4.50.20120602/gdb/testsuite/lib/gdb.exp 2012-06-02 20:03:42.727393770 +0200 +@@ -3693,30 +3693,49 @@ proc build_executable { testname executa + set sources ${executable}.c + } + +- set binfile ${objdir}/${subdir}/${executable} +- +- set objects {} +- for {set i 0} "\$i<[llength $sources]" {incr i} { +- set s [lindex $sources $i] +- if { [gdb_compile "${srcdir}/${subdir}/${s}" "${binfile}${i}.o" object $options] != "" } { +- untested $testname +- return -1 +- } +- lappend objects "${binfile}${i}.o" ++ # get_compiler_info by gdb_compile_shlib and gdb_compile_shlib_pthreads. ++ set info_options "" ++ if { [lsearch -exact $options "c++"] >= 0 } { ++ set info_options "c++" + } +- +- if { [gdb_compile $objects "${binfile}" executable $options] != "" } { +- untested $testname ++ if [get_compiler_info binfile_unused ${info_options}] { + return -1 + } + +- set info_options "" +- if { [lsearch -exact $options "c++"] >= 0 } { +- set info_options "c++" ++ set binfile ${objdir}/${subdir}/${executable} ++ ++ set func gdb_compile ++ set func_index [lsearch -regexp $options {^(pthreads|shlib|shlib_pthreads)$}] ++ if {$func_index != -1} { ++ set func "${func}_[lindex $options $func_index]" + } +- if [get_compiler_info ${binfile} ${info_options}] { ++ ++ # gdb_compile_shlib and gdb_compile_shlib_pthreads do not use the 3rd ++ # parameter. They also requires $sources while gdb_compile and ++ # gdb_compile_pthreads require $objects. ++ if [string match gdb_compile_shlib* $func] { ++ set sources_path {} ++ foreach s $sources { ++ lappend sources_path "${srcdir}/${subdir}/${s}" ++ } ++ set ret [$func $sources_path "${binfile}" $options] ++ } else { ++ set objects {} ++ for {set i 0} "\$i<[llength $sources]" {incr i} { ++ set s [lindex $sources $i] ++ if { [gdb_compile "${srcdir}/${subdir}/${s}" "${binfile}${i}.o" object $options] != "" } { ++ untested $testname ++ return -1 ++ } ++ lappend objects "${binfile}${i}.o" ++ } ++ set ret [$func $objects "${binfile}" executable $options] ++ } ++ if { $ret != "" } { ++ untested $testname + return -1 + } ++ + return 0 + } + +Index: gdb-7.4.50.20120602/gdb/testsuite/lib/prelink-support.exp +=================================================================== +--- gdb-7.4.50.20120602.orig/gdb/testsuite/lib/prelink-support.exp 2012-01-04 09:27:56.000000000 +0100 ++++ gdb-7.4.50.20120602/gdb/testsuite/lib/prelink-support.exp 2012-06-02 20:03:42.733393768 +0200 +@@ -95,8 +95,9 @@ proc file_copy {src dest} { + # Wrap function build_executable so that the resulting executable is fully + # self-sufficient (without dependencies on system libraries). Parameter + # INTERP may be used to specify a loader (ld.so) to be used that is +-# different from the default system one. Libraries on which the executable +-# depends are copied into directory DIR. Default DIR value to ++# different from the default system one. INTERP can be set to "no" if no ld.so ++# copy should be made. Libraries on which the executable depends are copied ++# into directory DIR. Default DIR value to + # `${objdir}/${subdir}/${EXECUTABLE}.d'. + # + # In case of success, return a string containing the arguments to be used +@@ -151,8 +152,15 @@ proc build_executable_own_libs {testname + + if {$interp == ""} { + set interp_system [section_get $binfile .interp] +- set interp ${dir}/[file tail $interp_system] +- file_copy $interp_system $interp ++ if {$interp_system == ""} { ++ fail "$test could not find .interp" ++ } else { ++ set interp ${dir}/[file tail $interp_system] ++ file_copy $interp_system $interp ++ } ++ } ++ if {$interp == "no"} { ++ set interp "" + } + + set dests {} +@@ -164,13 +172,19 @@ proc build_executable_own_libs {testname + + # Do not lappend it so that "-rpath $dir" overrides any possible "-rpath"s + # specified by the caller to be able to link it for ldd" above. +- set options [linsert $options 0 "ldflags=-Wl,--dynamic-linker,$interp,-rpath,$dir"] ++ set options [linsert $options 0 "ldflags=-Wl,-rpath,$dir"] ++ if {$interp != ""} { ++ set options [linsert $options 0 "ldflags=-Wl,--dynamic-linker,$interp"] ++ } + + if {[build_executable $testname $executable $sources $options] == -1} { + return "" + } + +- set prelink_args "--dynamic-linker=$interp --ld-library-path=$dir $binfile $interp [concat $dests]" ++ set prelink_args "--ld-library-path=$dir $binfile [concat $dests]" ++ if {$interp != ""} { ++ set prelink_args "--dynamic-linker=$interp $prelink_args $interp" ++ } + return $prelink_args + } + +Index: gdb-7.4.50.20120602/gdb/testsuite/gdb.base/break-interp.exp +=================================================================== +--- gdb-7.4.50.20120602.orig/gdb/testsuite/gdb.base/break-interp.exp 2012-02-24 15:09:08.000000000 +0100 ++++ gdb-7.4.50.20120602/gdb/testsuite/gdb.base/break-interp.exp 2012-06-02 20:04:56.135369687 +0200 +@@ -109,14 +109,21 @@ proc strip_debug {dest} { + } + } + ++# Former symbol for solib changes notifications was _dl_debug_state, newer one ++# is dl_main (in fact _dl_debug_notify but it is inlined without any extra ++# debug info), the right one one traps by `set stop-on-solib-events 1'. ++ ++set solib_bp {(_dl_debug_state|dl_main)} ++ + # Implementation of reach. + + proc reach_1 {func command displacement} { +- global gdb_prompt expect_out ++ global gdb_prompt expect_out solib_bp + +- if {$func == "_dl_debug_state"} { ++ if {$func == $solib_bp} { + # Breakpoint on _dl_debug_state can have problems due to its overlap + # with the existing internal breakpoint from GDB. ++ # With also _dl_debug_notify we would need even two breakpoints. + gdb_test_no_output "set stop-on-solib-events 1" + } elseif {! [gdb_breakpoint $func allow-pending]} { + return +@@ -142,21 +149,21 @@ proc reach_1 {func command displacement} + exp_continue + } + -re "Breakpoint \[0-9\]+, \\.?(__GI_)?$func \\(.*\\) at .*:\[0-9\]+\r\n.*$gdb_prompt $" { +- if {$func == "_dl_debug_state"} { ++ if {$func == $solib_bp} { + fail $test + } else { + pass $test + } + } + -re "Breakpoint \[0-9\]+, \[0-9xa-f\]+ in \\.?(__GI_)?$func \\(\\).*\r\n$gdb_prompt $" { +- if {$func == "_dl_debug_state"} { ++ if {$func == $solib_bp} { + fail $test + } else { + pass $test + } + } + -re "Stopped due to (spurious )?shared library event.*\r\n$gdb_prompt $" { +- if {$func == "_dl_debug_state"} { ++ if {$func == $solib_bp} { + if {$debug_state_count == 0} { + # First stop does not yet relocate the _start function + # descriptor on ppc64. +@@ -175,7 +182,7 @@ proc reach_1 {func command displacement} + fail $test_displacement + } + +- if {$func == "_dl_debug_state"} { ++ if {$func == $solib_bp} { + gdb_test_no_output "set stop-on-solib-events 0" + } + } +@@ -357,7 +364,7 @@ proc test_attach {file displacement {rel + } + + proc test_ld {file ifmain trynosym displacement} { +- global srcdir subdir gdb_prompt expect_out inferior_exited_re ++ global srcdir subdir gdb_prompt expect_out inferior_exited_re solib_bp + + # First test normal `file'-command loaded $FILE with symbols. + +@@ -385,9 +392,9 @@ proc test_ld {file ifmain trynosym displ + gdb_test_no_output "set args ${objdir}/${subdir}/$binfile_test" "set args OBJDIR/${subdir}/$binfile_test" + } + +- reach "_dl_debug_state" "run" $displacement ++ reach $solib_bp "run" $displacement + +- gdb_test "bt" "#0 +\[^\r\n\]*\\m(__GI_)?_dl_debug_state\\M.*" "dl bt" ++ gdb_test "bt" "#0 +\[^\r\n\]*\\m(__GI_)?$solib_bp\\M.*" "dl bt" + + if $ifmain { + reach "main" continue "NONE" +@@ -399,7 +406,7 @@ proc test_ld {file ifmain trynosym displ + + # Try re-run if the new PIE displacement takes effect. + gdb_test "kill" "" "kill" {Kill the program being debugged\? \(y or n\) } "y" +- reach "_dl_debug_state" "run" $displacement ++ reach $solib_bp "run" $displacement + + if $ifmain { + test_core $file $displacement +@@ -431,7 +438,7 @@ proc test_ld {file ifmain trynosym displ + gdb_test "exec-file $file" "exec-file $escapedfile" "load" + + if $ifmain { +- reach "_dl_debug_state" run $displacement ++ reach $solib_bp run $displacement + + # Use two separate gdb_test_multiple statements to avoid timeouts due + # to slow processing of wildcard capturing long output diff --git a/gdb-dlopen-stap-probe.patch b/gdb-dlopen-stap-probe.patch new file mode 100644 index 0000000..f4085d5 --- /dev/null +++ b/gdb-dlopen-stap-probe.patch @@ -0,0 +1,358 @@ +From: Gary Benson +To: Jan Kratochvil +Message-ID: <20110810133605.GB7294@redhat.com> + +Index: gdb-7.4.50.20120602/gdb/infrun.c +=================================================================== +--- gdb-7.4.50.20120602.orig/gdb/infrun.c 2012-06-02 21:38:07.236442883 +0200 ++++ gdb-7.4.50.20120602/gdb/infrun.c 2012-06-02 21:38:13.450440507 +0200 +@@ -361,6 +361,13 @@ static struct symbol *step_start_functio + /* Nonzero if we want to give control to the user when we're notified + of shared library events by the dynamic linker. */ + int stop_on_solib_events; ++ ++static void ++set_stop_on_solib_events (char *args, int from_tty, struct cmd_list_element *c) ++{ ++ update_solib_breakpoints (); ++} ++ + static void + show_stop_on_solib_events (struct ui_file *file, int from_tty, + struct cmd_list_element *c, const char *value) +@@ -7267,7 +7274,7 @@ Show stopping for shared library events. + If nonzero, gdb will give control to the user when the dynamic linker\n\ + notifies gdb of shared library events. The most common event of interest\n\ + to the user would be loading/unloading of a new library."), +- NULL, ++ set_stop_on_solib_events, + show_stop_on_solib_events, + &setlist, &showlist); + +Index: gdb-7.4.50.20120602/gdb/solib-svr4.c +=================================================================== +--- gdb-7.4.50.20120602.orig/gdb/solib-svr4.c 2012-06-02 21:38:07.236442883 +0200 ++++ gdb-7.4.50.20120602/gdb/solib-svr4.c 2012-06-02 21:44:23.973298737 +0200 +@@ -47,6 +47,8 @@ + #include "auxv.h" + #include "exceptions.h" + ++#include "probe.h" ++ + static struct link_map_offsets *svr4_fetch_link_map_offsets (void); + static int svr4_have_link_map_offsets (void); + static void svr4_relocate_main_executable (void); +@@ -92,6 +94,32 @@ static const char * const solib_break_na + NULL + }; + ++/* A list of SystemTap probes which, if present in the dynamic linker, ++ allow more fine-grained breakpoints to be placed on shared library ++ events. */ ++ ++struct probe_info ++ { ++ /* The name of the probe. */ ++ const char *name; ++ ++ /* Nonzero if this probe must be stopped at even when ++ stop-on-solib-events is off. */ ++ int mandatory; ++ }; ++ ++static const struct probe_info probe_info[] = ++{ ++ {"rtld_init_start", 0}, ++ {"rtld_init_complete", 1}, ++ {"rtld_map_start", 0}, ++ {"rtld_reloc_complete", 1}, ++ {"rtld_unmap_start", 0}, ++ {"rtld_unmap_complete", 1}, ++}; ++ ++#define NUM_PROBES (sizeof(probe_info) / sizeof(probe_info[0])) ++ + static const char * const bkpt_names[] = + { + "_start", +@@ -313,6 +341,12 @@ struct svr4_info + CORE_ADDR interp_text_sect_high; + CORE_ADDR interp_plt_sect_low; + CORE_ADDR interp_plt_sect_high; ++ ++ /* SystemTap probes. */ ++ VEC (probe_p) *probes[NUM_PROBES]; ++ ++ /* Nonzero if we are using the SystemTap interface. */ ++ int using_probes; + }; + + /* Per-program-space data key. */ +@@ -322,8 +356,15 @@ static void + svr4_pspace_data_cleanup (struct program_space *pspace, void *arg) + { + struct svr4_info *info; ++ int i; + + info = program_space_data (pspace, solib_svr4_pspace_data); ++ if (info == NULL) ++ return; ++ ++ for (i = 0; i < NUM_PROBES; i++) ++ VEC_free (probe_p, info->probes[i]); ++ + xfree (info); + } + +@@ -1449,6 +1490,126 @@ exec_entry_point (struct bfd *abfd, stru + targ); + } + ++/* Helper function for svr4_update_solib_event_breakpoints. */ ++ ++static int ++svr4_update_solib_event_breakpoint (struct breakpoint *b, void *arg) ++{ ++ struct svr4_info *info = get_svr4_info (); ++ struct bp_location *loc; ++ ++ if (b->type != bp_shlib_event) ++ return 0; ++ ++ for (loc = b->loc; loc; loc = loc->next) ++ { ++ int i; ++ ++ for (i = 0; i < NUM_PROBES; i++) ++ { ++ if (!probe_info[i].mandatory) ++ { ++ struct probe *probe; ++ int ix; ++ ++ for (ix = 0; ++ VEC_iterate (probe_p, info->probes[i], ix, probe); ++ ++ix) ++ { ++ if (loc->pspace == current_program_space ++ && loc->address == probe->address) ++ { ++ b->enable_state = ++ stop_on_solib_events ? bp_enabled : bp_disabled; ++ return 0; ++ } ++ } ++ } ++ } ++ } ++ ++ return 0; ++} ++ ++/* Enable or disable optional solib event breakpoints as appropriate. ++ Called whenever stop_on_solib_events is changed. */ ++ ++static void ++svr4_update_solib_event_breakpoints (void) ++{ ++ struct svr4_info *info = get_svr4_info (); ++ ++ if (info->using_probes) ++ iterate_over_breakpoints (svr4_update_solib_event_breakpoint, NULL); ++} ++ ++/* Both the SunOS and the SVR4 dynamic linkers call a marker function ++ before and after mapping and unmapping shared libraries. The sole ++ purpose of this method is to allow debuggers to set a breakpoint so ++ they can track these changes. ++ ++ Some versions of the glibc dynamic linker contain SystemTap probes ++ to allow more fine grained stopping. Given the address of the ++ original marker function, this function attempts to find these ++ probes, and if found, sets breakpoints on those instead. If the ++ probes aren't found, a single breakpoint is set on the original ++ SVR4 marker function. */ ++ ++static void ++svr4_create_solib_event_breakpoints (struct gdbarch *gdbarch, CORE_ADDR address) ++{ ++ struct svr4_info *info = get_svr4_info (); ++ struct obj_section *os; ++ ++ os = find_pc_section (address); ++ if (os != NULL) ++ { ++ int all_probes_found = 1; ++ int i; ++ ++ for (i = 0; i < NUM_PROBES; i++) ++ { ++ info->probes[i] = find_probes_in_objfile (os->objfile, "rtld", ++ probe_info[i].name); ++ ++ if (!VEC_length(probe_p, info->probes[i])) ++ { ++ int j; ++ ++ for (j = i - 1; j >= 0; j--) ++ { ++ VEC_free (probe_p, info->probes[j]); ++ info->probes[j] = NULL; ++ } ++ ++ all_probes_found = 0; ++ break; ++ } ++ } ++ ++ if (all_probes_found) ++ { ++ info->using_probes = 1; ++ ++ for (i = 0; i < NUM_PROBES; i++) ++ { ++ struct probe *probe; ++ int ix; ++ ++ for (ix = 0; ++ VEC_iterate (probe_p, info->probes[i], ix, probe); ++ ++ix) ++ create_solib_event_breakpoint (gdbarch, probe->address); ++ } ++ ++ svr4_update_solib_event_breakpoints (); ++ return; ++ } ++ } ++ ++ create_solib_event_breakpoint (gdbarch, address); ++} ++ + /* Helper function for gdb_bfd_lookup_symbol. */ + + static int +@@ -1497,10 +1658,18 @@ enable_break (struct svr4_info *info, in + asection *interp_sect; + gdb_byte *interp_name; + CORE_ADDR sym_addr; ++ int i; + + info->interp_text_sect_low = info->interp_text_sect_high = 0; + info->interp_plt_sect_low = info->interp_plt_sect_high = 0; + ++ for (i = 0; i < NUM_PROBES; i++) ++ { ++ VEC_free (probe_p, info->probes[i]); ++ info->probes[i] = NULL; ++ } ++ info->using_probes = 0; ++ + /* If we already have a shared library list in the target, and + r_debug contains r_brk, set the breakpoint there - this should + mean r_brk has already been relocated. Assume the dynamic linker +@@ -1532,7 +1701,7 @@ enable_break (struct svr4_info *info, in + That knowledge is encoded in the address, if it's Thumb the low bit + is 1. However, we've stripped that info above and it's not clear + what all the consequences are of passing a non-addr_bits_remove'd +- address to create_solib_event_breakpoint. The call to ++ address to svr4_create_solib_event_breakpoints. The call to + find_pc_section verifies we know about the address and have some + hope of computing the right kind of breakpoint to use (via + symbol info). It does mean that GDB needs to be pointed at a +@@ -1570,7 +1739,7 @@ enable_break (struct svr4_info *info, in + + bfd_section_size (tmp_bfd, interp_sect); + } + +- create_solib_event_breakpoint (target_gdbarch, sym_addr); ++ svr4_create_solib_event_breakpoints (target_gdbarch, sym_addr); + return 1; + } + } +@@ -1725,7 +1894,8 @@ enable_break (struct svr4_info *info, in + + if (sym_addr != 0) + { +- create_solib_event_breakpoint (target_gdbarch, load_addr + sym_addr); ++ svr4_create_solib_event_breakpoints (target_gdbarch, ++ load_addr + sym_addr); + xfree (interp_name); + return 1; + } +@@ -1751,7 +1921,7 @@ enable_break (struct svr4_info *info, in + sym_addr = gdbarch_convert_from_func_ptr_addr (target_gdbarch, + sym_addr, + ¤t_target); +- create_solib_event_breakpoint (target_gdbarch, sym_addr); ++ svr4_create_solib_event_breakpoints (target_gdbarch, sym_addr); + return 1; + } + } +@@ -1767,7 +1937,7 @@ enable_break (struct svr4_info *info, in + sym_addr = gdbarch_convert_from_func_ptr_addr (target_gdbarch, + sym_addr, + ¤t_target); +- create_solib_event_breakpoint (target_gdbarch, sym_addr); ++ svr4_create_solib_event_breakpoints (target_gdbarch, sym_addr); + return 1; + } + } +@@ -2543,4 +2713,5 @@ _initialize_svr4_solib (void) + svr4_so_ops.lookup_lib_global_symbol = elf_lookup_lib_symbol; + svr4_so_ops.same = svr4_same; + svr4_so_ops.keep_data_in_core = svr4_keep_data_in_core; ++ svr4_so_ops.update_breakpoints = svr4_update_solib_event_breakpoints; + } +Index: gdb-7.4.50.20120602/gdb/solib.c +=================================================================== +--- gdb-7.4.50.20120602.orig/gdb/solib.c 2012-06-02 21:38:07.236442883 +0200 ++++ gdb-7.4.50.20120602/gdb/solib.c 2012-06-02 21:38:13.455440507 +0200 +@@ -1216,6 +1216,18 @@ no_shared_libraries (char *ignored, int + objfile_purge_solibs (); + } + ++/* Enable or disable optional solib event breakpoints as appropriate. */ ++ ++void ++update_solib_breakpoints (void) ++{ ++ struct target_so_ops *ops = solib_ops (target_gdbarch); ++ ++ if (ops->update_breakpoints != NULL) ++ ops->update_breakpoints (); ++} ++ ++ + /* Reload shared libraries, but avoid reloading the same symbol file + we already have loaded. */ + +Index: gdb-7.4.50.20120602/gdb/solib.h +=================================================================== +--- gdb-7.4.50.20120602.orig/gdb/solib.h 2012-06-02 21:38:07.236442883 +0200 ++++ gdb-7.4.50.20120602/gdb/solib.h 2012-06-02 21:38:13.464440503 +0200 +@@ -91,4 +91,8 @@ extern CORE_ADDR gdb_bfd_lookup_symbol_f + void *), + void *data); + ++/* Enable or disable optional solib event breakpoints as appropriate. */ ++ ++extern void update_solib_breakpoints (void); ++ + #endif /* SOLIB_H */ +Index: gdb-7.4.50.20120602/gdb/solist.h +=================================================================== +--- gdb-7.4.50.20120602.orig/gdb/solist.h 2012-06-02 21:38:07.236442883 +0200 ++++ gdb-7.4.50.20120602/gdb/solist.h 2012-06-02 21:38:13.465440503 +0200 +@@ -149,6 +149,13 @@ struct target_so_ops + core file (in particular, for readonly sections). */ + int (*keep_data_in_core) (CORE_ADDR vaddr, + unsigned long size); ++ ++ /* Enable or disable optional solib event breakpoints as ++ appropriate. This should be called whenever ++ stop_on_solib_events is changed. This pointer can be ++ NULL, in which case no enabling or disabling is necessary ++ for this target. */ ++ void (*update_breakpoints) (void); + }; + + /* Free the memory associated with a (so_list *). */ diff --git a/gdb-fortran-common-reduce.patch b/gdb-fortran-common-reduce.patch index 9538865..f0b62f2 100644 --- a/gdb-fortran-common-reduce.patch +++ b/gdb-fortran-common-reduce.patch @@ -1,8 +1,8 @@ -Index: gdb-7.2.50.20110117/gdb/f-lang.c +Index: gdb-7.4.50.20120602/gdb/f-lang.c =================================================================== ---- gdb-7.2.50.20110117.orig/gdb/f-lang.c 2011-01-07 20:36:16.000000000 +0100 -+++ gdb-7.2.50.20110117/gdb/f-lang.c 2011-01-17 15:56:07.000000000 +0100 -@@ -57,20 +57,6 @@ typedef struct saved_bf_symnum SAVED_BF, +--- gdb-7.4.50.20120602.orig/gdb/f-lang.c 2012-03-02 20:29:00.000000000 +0100 ++++ gdb-7.4.50.20120602/gdb/f-lang.c 2012-06-02 19:13:31.520050654 +0200 +@@ -59,20 +59,6 @@ typedef struct saved_bf_symnum SAVED_BF, /* Local functions */ extern void _initialize_f_language (void); @@ -23,7 +23,7 @@ Index: gdb-7.2.50.20110117/gdb/f-lang.c static void f_printchar (int c, struct type *type, struct ui_file * stream); static void f_emit_char (int c, struct type *type, -@@ -461,185 +447,7 @@ _initialize_f_language (void) +@@ -385,185 +371,7 @@ _initialize_f_language (void) add_language (&f_language_defn); } @@ -209,7 +209,7 @@ Index: gdb-7.2.50.20110117/gdb/f-lang.c /* This routine finds the first encountred COMMON block named "name" that belongs to function funcname. */ -@@ -662,193 +470,3 @@ find_common_for_function (char *name, ch +@@ -586,193 +394,3 @@ find_common_for_function (const char *na } return (NULL); } @@ -403,18 +403,19 @@ Index: gdb-7.2.50.20110117/gdb/f-lang.c - saved_function_list = NULL; -} -#endif -Index: gdb-7.2.50.20110117/gdb/f-lang.h +Index: gdb-7.4.50.20120602/gdb/f-lang.h =================================================================== ---- gdb-7.2.50.20110117.orig/gdb/f-lang.h 2011-01-17 15:47:37.000000000 +0100 -+++ gdb-7.2.50.20110117/gdb/f-lang.h 2011-01-17 15:54:14.000000000 +0100 -@@ -76,14 +76,9 @@ typedef struct saved_f77_common SAVED_F7 +--- gdb-7.4.50.20120602.orig/gdb/f-lang.h 2012-06-02 19:11:54.000000000 +0200 ++++ gdb-7.4.50.20120602/gdb/f-lang.h 2012-06-02 19:13:55.345317970 +0200 +@@ -76,15 +76,10 @@ typedef struct saved_f77_common SAVED_F7 typedef struct common_entry COMMON_ENTRY, *COMMON_ENTRY_PTR; extern SAVED_F77_COMMON_PTR head_common_list; /* Ptr to 1st saved COMMON */ -extern SAVED_F77_COMMON_PTR tail_common_list; /* Ptr to last saved COMMON */ -extern SAVED_F77_COMMON_PTR current_common; /* Ptr to current COMMON */ - extern SAVED_F77_COMMON_PTR find_common_for_function (char *, char *); + extern SAVED_F77_COMMON_PTR find_common_for_function (const char *, + const char *); -#define UNINITIALIZED_SECNUM -1 -#define COMMON_NEEDS_PATCHING(blk) ((blk)->secnum == UNINITIALIZED_SECNUM) @@ -422,10 +423,10 @@ Index: gdb-7.2.50.20110117/gdb/f-lang.h #define BLANK_COMMON_NAME_ORIGINAL "#BLNK_COM" /* XLF assigned */ #define BLANK_COMMON_NAME_MF77 "__BLNK__" /* MF77 assigned */ #define BLANK_COMMON_NAME_LOCAL "__BLANK" /* Local GDB */ -Index: gdb-7.2.50.20110117/gdb/f-valprint.c +Index: gdb-7.4.50.20120602/gdb/f-valprint.c =================================================================== ---- gdb-7.2.50.20110117.orig/gdb/f-valprint.c 2011-01-17 15:47:37.000000000 +0100 -+++ gdb-7.2.50.20110117/gdb/f-valprint.c 2011-01-17 15:54:36.000000000 +0100 +--- gdb-7.4.50.20120602.orig/gdb/f-valprint.c 2012-06-02 19:11:54.000000000 +0200 ++++ gdb-7.4.50.20120602/gdb/f-valprint.c 2012-06-02 19:14:11.625313432 +0200 @@ -35,10 +35,6 @@ #include "command.h" #include "block.h" @@ -436,8 +437,8 @@ Index: gdb-7.2.50.20110117/gdb/f-valprint.c - extern void _initialize_f_valprint (void); static void info_common_command (char *, int); - static void list_all_visible_commons (char *); -@@ -604,67 +600,6 @@ info_common_command (char *comname, int + static void list_all_visible_commons (const char *); +@@ -535,67 +531,6 @@ info_common_command (char *comname, int comname, funname); } diff --git a/gdb-fortran-common.patch b/gdb-fortran-common.patch index e66d077..9da3724 100644 --- a/gdb-fortran-common.patch +++ b/gdb-fortran-common.patch @@ -1,8 +1,8 @@ -Index: gdb-7.2.90.20110525/gdb/dwarf2read.c +Index: gdb-7.4.50.20120602/gdb/dwarf2read.c =================================================================== ---- gdb-7.2.90.20110525.orig/gdb/dwarf2read.c 2011-05-25 17:06:19.000000000 +0200 -+++ gdb-7.2.90.20110525/gdb/dwarf2read.c 2011-05-25 17:10:46.000000000 +0200 -@@ -7665,12 +7665,14 @@ read_set_type (struct die_info *die, str +--- gdb-7.4.50.20120602.orig/gdb/dwarf2read.c 2012-06-02 21:32:41.746567299 +0200 ++++ gdb-7.4.50.20120602/gdb/dwarf2read.c 2012-06-02 21:32:54.304562500 +0200 +@@ -9736,12 +9736,14 @@ read_set_type (struct die_info *die, str return set_die_type (die, set_type, cu); } @@ -19,7 +19,7 @@ Index: gdb-7.2.90.20110525/gdb/dwarf2read.c struct attribute *attr; struct symbol *sym; CORE_ADDR base = (CORE_ADDR) 0; -@@ -7695,20 +7697,67 @@ read_common_block (struct die_info *die, +@@ -9766,20 +9768,67 @@ read_common_block (struct die_info *die, } if (die->child != NULL) { @@ -87,7 +87,7 @@ Index: gdb-7.2.90.20110525/gdb/dwarf2read.c } } -@@ -11376,6 +11425,13 @@ new_symbol_full (struct die_info *die, s +@@ -13661,6 +13710,13 @@ new_symbol_full (struct die_info *die, s { var_decode_location (attr, sym, cu); attr2 = dwarf2_attr (die, DW_AT_external, cu); @@ -101,7 +101,7 @@ Index: gdb-7.2.90.20110525/gdb/dwarf2read.c if (SYMBOL_CLASS (sym) == LOC_STATIC && SYMBOL_VALUE_ADDRESS (sym) == 0 && !dwarf2_per_objfile->has_section_at_zero) -@@ -11548,6 +11604,11 @@ new_symbol_full (struct die_info *die, s +@@ -13825,6 +13881,11 @@ new_symbol_full (struct die_info *die, s SYMBOL_CLASS (sym) = LOC_TYPEDEF; list_to_add = &global_symbols; break; @@ -113,11 +113,11 @@ Index: gdb-7.2.90.20110525/gdb/dwarf2read.c default: /* Not a tag we recognize. Hopefully we aren't processing trash data, but since we must specifically ignore things -Index: gdb-7.2.90.20110525/gdb/f-lang.c +Index: gdb-7.4.50.20120602/gdb/f-lang.c =================================================================== ---- gdb-7.2.90.20110525.orig/gdb/f-lang.c 2011-05-25 17:06:22.000000000 +0200 -+++ gdb-7.2.90.20110525/gdb/f-lang.c 2011-05-25 17:07:02.000000000 +0200 -@@ -446,27 +446,3 @@ _initialize_f_language (void) +--- gdb-7.4.50.20120602.orig/gdb/f-lang.c 2012-06-02 21:32:41.746567299 +0200 ++++ gdb-7.4.50.20120602/gdb/f-lang.c 2012-06-02 21:32:54.305562499 +0200 +@@ -370,27 +370,3 @@ _initialize_f_language (void) add_language (&f_language_defn); } @@ -128,7 +128,7 @@ Index: gdb-7.2.90.20110525/gdb/f-lang.c - that belongs to function funcname. */ - -SAVED_F77_COMMON_PTR --find_common_for_function (char *name, char *funcname) +-find_common_for_function (const char *name, const char *funcname) -{ - - SAVED_F77_COMMON_PTR tmp; @@ -145,11 +145,11 @@ Index: gdb-7.2.90.20110525/gdb/f-lang.c - } - return (NULL); -} -Index: gdb-7.2.90.20110525/gdb/f-lang.h +Index: gdb-7.4.50.20120602/gdb/f-lang.h =================================================================== ---- gdb-7.2.90.20110525.orig/gdb/f-lang.h 2011-05-25 17:06:22.000000000 +0200 -+++ gdb-7.2.90.20110525/gdb/f-lang.h 2011-05-25 17:07:02.000000000 +0200 -@@ -52,36 +52,8 @@ enum f90_range_type +--- gdb-7.4.50.20120602.orig/gdb/f-lang.h 2012-06-02 21:32:41.746567299 +0200 ++++ gdb-7.4.50.20120602/gdb/f-lang.h 2012-06-02 21:32:54.322562493 +0200 +@@ -52,37 +52,8 @@ enum f90_range_type NONE_BOUND_DEFAULT /* "(low:high)" */ }; @@ -178,7 +178,8 @@ Index: gdb-7.2.90.20110525/gdb/f-lang.h - -extern SAVED_F77_COMMON_PTR head_common_list; /* Ptr to 1st saved COMMON */ - --extern SAVED_F77_COMMON_PTR find_common_for_function (char *, char *); +-extern SAVED_F77_COMMON_PTR find_common_for_function (const char *, +- const char *); - #define BLANK_COMMON_NAME_ORIGINAL "#BLNK_COM" /* XLF assigned */ #define BLANK_COMMON_NAME_MF77 "__BLNK__" /* MF77 assigned */ @@ -186,11 +187,11 @@ Index: gdb-7.2.90.20110525/gdb/f-lang.h /* When reasonable array bounds cannot be fetched, such as when you ask to 'mt print symbols' and there is no stack frame and -Index: gdb-7.2.90.20110525/gdb/f-valprint.c +Index: gdb-7.4.50.20120602/gdb/f-valprint.c =================================================================== ---- gdb-7.2.90.20110525.orig/gdb/f-valprint.c 2011-05-25 17:06:22.000000000 +0200 -+++ gdb-7.2.90.20110525/gdb/f-valprint.c 2011-05-25 17:07:02.000000000 +0200 -@@ -34,6 +34,8 @@ +--- gdb-7.4.50.20120602.orig/gdb/f-valprint.c 2012-06-02 21:32:41.746567299 +0200 ++++ gdb-7.4.50.20120602/gdb/f-valprint.c 2012-06-02 21:33:50.514541286 +0200 +@@ -34,10 +34,11 @@ #include "gdbcore.h" #include "command.h" #include "block.h" @@ -199,12 +200,16 @@ Index: gdb-7.2.90.20110525/gdb/f-valprint.c extern void _initialize_f_valprint (void); static void info_common_command (char *, int); -@@ -501,22 +503,54 @@ f_val_print (struct type *type, const gd - return 0; +-static void list_all_visible_commons (const char *); + static void f77_create_arrayprint_offset_tbl (struct type *, + struct ui_file *); + static void f77_get_dynamic_length_of_aggregate (struct type *); +@@ -420,22 +421,54 @@ f_val_print (struct type *type, const gd + gdb_flush (stream); } -static void --list_all_visible_commons (char *funname) +-list_all_visible_commons (const char *funname) +static int +info_common_command_for_block (struct block *block, struct frame_info *frame, + const char *comname) @@ -212,7 +217,7 @@ Index: gdb-7.2.90.20110525/gdb/f-valprint.c - SAVED_F77_COMMON_PTR tmp; - - tmp = head_common_list; -+ struct dict_iterator iter; ++ struct block_iterator iter; + struct symbol *sym; + int values_printed = 0; + const char *name; @@ -267,21 +272,21 @@ Index: gdb-7.2.90.20110525/gdb/f-valprint.c } /* This function is used to print out the values in a given COMMON -@@ -526,11 +560,9 @@ list_all_visible_commons (char *funname) +@@ -445,11 +478,9 @@ list_all_visible_commons (const char *fu static void info_common_command (char *comname, int from_tty) { - SAVED_F77_COMMON_PTR the_common; - COMMON_ENTRY_PTR entry; struct frame_info *fi; -- char *funname = 0; +- const char *funname = 0; - struct symbol *func; + struct block *block; + int values_printed = 0; /* We have been told to display the contents of F77 COMMON block supposedly visible in this function. Let us -@@ -542,74 +574,31 @@ info_common_command (char *comname, int +@@ -461,74 +492,31 @@ info_common_command (char *comname, int /* The following is generally ripped off from stack.c's routine print_frame_info(). */ @@ -372,11 +377,11 @@ Index: gdb-7.2.90.20110525/gdb/f-valprint.c } void -Index: gdb-7.2.90.20110525/gdb/stack.c +Index: gdb-7.4.50.20120602/gdb/stack.c =================================================================== ---- gdb-7.2.90.20110525.orig/gdb/stack.c 2011-05-25 17:05:21.000000000 +0200 -+++ gdb-7.2.90.20110525/gdb/stack.c 2011-05-25 17:07:02.000000000 +0200 -@@ -1525,6 +1525,8 @@ iterate_over_block_locals (struct block +--- gdb-7.4.50.20120602.orig/gdb/stack.c 2012-06-02 21:32:41.746567299 +0200 ++++ gdb-7.4.50.20120602/gdb/stack.c 2012-06-02 21:32:54.335562488 +0200 +@@ -1838,6 +1838,8 @@ iterate_over_block_locals (struct block case LOC_COMPUTED: if (SYMBOL_IS_ARGUMENT (sym)) break; @@ -385,26 +390,26 @@ Index: gdb-7.2.90.20110525/gdb/stack.c (*cb) (SYMBOL_PRINT_NAME (sym), sym, cb_data); break; -Index: gdb-7.2.90.20110525/gdb/symtab.h +Index: gdb-7.4.50.20120602/gdb/symtab.h =================================================================== ---- gdb-7.2.90.20110525.orig/gdb/symtab.h 2011-05-25 17:05:21.000000000 +0200 -+++ gdb-7.2.90.20110525/gdb/symtab.h 2011-05-25 17:07:02.000000000 +0200 -@@ -411,7 +411,10 @@ typedef enum domain_enum_tag - TYPES_DOMAIN, +--- gdb-7.4.50.20120602.orig/gdb/symtab.h 2012-06-02 21:32:41.746567299 +0200 ++++ gdb-7.4.50.20120602/gdb/symtab.h 2012-06-02 21:32:54.342562486 +0200 +@@ -389,7 +389,10 @@ typedef enum domain_enum_tag - /* Any type. */ -- ALL_DOMAIN -+ ALL_DOMAIN, + /* LABEL_DOMAIN may be used for names of labels (for gotos). */ + +- LABEL_DOMAIN ++ LABEL_DOMAIN, + + /* Fortran common blocks. Their naming must be separate from VAR_DOMAIN. */ + COMMON_BLOCK_DOMAIN - } - domain_enum; + } domain_enum; -Index: gdb-7.2.90.20110525/gdb/testsuite/gdb.fortran/common-block.exp + /* Searching domains, used for `search_symbols'. Element numbers are +Index: gdb-7.4.50.20120602/gdb/testsuite/gdb.fortran/common-block.exp =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110525/gdb/testsuite/gdb.fortran/common-block.exp 2011-05-25 17:07:02.000000000 +0200 ++++ gdb-7.4.50.20120602/gdb/testsuite/gdb.fortran/common-block.exp 2012-06-02 21:32:54.344562484 +0200 @@ -0,0 +1,101 @@ +# Copyright 2008 Free Software Foundation, Inc. + @@ -428,7 +433,7 @@ Index: gdb-7.2.90.20110525/gdb/testsuite/gdb.fortran/common-block.exp +set srcfile ${testfile}.f90 +set binfile ${objdir}/${subdir}/${testfile} + -+if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug f77 quiet}] != "" } { ++if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug f90 quiet}] != "" } { + untested "Couldn't compile ${srcfile}" + return -1 +} @@ -507,10 +512,10 @@ Index: gdb-7.2.90.20110525/gdb/testsuite/gdb.fortran/common-block.exp +gdb_test "p ix_x" " = 1 *" "p ix_x in" +gdb_test "p iy_y" " = 2 *" "p iy_y in" +gdb_test "p iz_z2" " = 3 *" "p iz_z2 in" -Index: gdb-7.2.90.20110525/gdb/testsuite/gdb.fortran/common-block.f90 +Index: gdb-7.4.50.20120602/gdb/testsuite/gdb.fortran/common-block.f90 =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.90.20110525/gdb/testsuite/gdb.fortran/common-block.f90 2011-05-25 17:07:02.000000000 +0200 ++++ gdb-7.4.50.20120602/gdb/testsuite/gdb.fortran/common-block.f90 2012-06-02 21:32:54.345562483 +0200 @@ -0,0 +1,67 @@ +! Copyright 2008 Free Software Foundation, Inc. +! diff --git a/gdb-gcc46-stdarg-prologue.patch b/gdb-gcc46-stdarg-prologue.patch deleted file mode 100644 index e429479..0000000 --- a/gdb-gcc46-stdarg-prologue.patch +++ /dev/null @@ -1,709 +0,0 @@ -http://sourceware.org/ml/gdb-patches/2011-07/msg00645.html -Subject: [patch] workaround gcc46: prologue skip skips too far (PR 12435) #2 - -Hi, - -this is an improved patch of a former: - [patch] workaround gcc46: prologue skip skips too far (PR 12435) - http://sourceware.org/ml/gdb-patches/2011-03/msg01108.html - cancel/FYI: Re: [patch] workaround gcc46: prologue skip skips too far (PR 12435) - http://sourceware.org/ml/gdb-patches/2011-03/msg01123.html - -For example `break error' does not work for debugging GDB with gcc-4.6.x. - -As gcc-4.6.0 and now even 4.6.1 still has this bug and I have seen a user(s?) -on non-Fedora platform asking about this bug and as there may be enough -binaries out there (although it affects only -O0 -g compilation) coded it -properly I have coded the workaround properly this time. - -It does not solve overlays well, but the code just does not work for overlays, -it has no other negative effect. - -I will update the code after FSF gcc gets fixed to minimize the workaround. - -No regressions on {x86_64,x86_64-m32,i686}-fedora16pre-linux-gnu. - -I would welcome a comment whether it is suitable for FSF GDB. - - -Thanks, -Jan - - -gdb/ -2011-07-22 Jan Kratochvil - - PR breakpoints/12435 - * amd64-tdep.c (amd64_skip_prologue): New variables start_pc_sal, - next_sal, buf, offset and xmmreg. Advance PC if it sees the PR. - * dwarf2read.c (process_full_comp_unit): Initialize - amd64_prologue_line_bug. - * symtab.h (struct symtab): New field amd64_prologue_line_bug. - -gdb/testsuite/ -2011-07-22 Jan Kratochvil - - PR breakpoints/12435 - * gdb.arch/amd64-prologue-xmm.c: New file. - * gdb.arch/amd64-prologue-xmm.exp: New file. - * gdb.arch/amd64-prologue-xmm.s: New file. - -Index: gdb-7.3/gdb/amd64-tdep.c -=================================================================== ---- gdb-7.3.orig/gdb/amd64-tdep.c 2011-03-18 19:52:29.000000000 +0100 -+++ gdb-7.3/gdb/amd64-tdep.c 2011-07-26 22:09:15.000000000 +0200 -@@ -1902,6 +1902,9 @@ amd64_skip_prologue (struct gdbarch *gdb - { - struct amd64_frame_cache cache; - CORE_ADDR pc; -+ struct symtab_and_line start_pc_sal, next_sal; -+ gdb_byte buf[4 + 8 * 7]; -+ int offset, xmmreg; - - amd64_init_frame_cache (&cache); - pc = amd64_analyze_prologue (gdbarch, start_pc, 0xffffffffffffffffLL, -@@ -1909,7 +1912,71 @@ amd64_skip_prologue (struct gdbarch *gdb - if (cache.frameless_p) - return start_pc; - -- return pc; -+ /* GCC PR debug/48827 produced false prologue end: -+ 84 c0 test %al,%al -+ 74 23 je after -+ <-- here is 0 lines advance - the false prologue end marker. -+ 0f 29 85 70 ff ff ff movaps %xmm0,-0x90(%rbp) -+ 0f 29 4d 80 movaps %xmm1,-0x80(%rbp) -+ 0f 29 55 90 movaps %xmm2,-0x70(%rbp) -+ 0f 29 5d a0 movaps %xmm3,-0x60(%rbp) -+ 0f 29 65 b0 movaps %xmm4,-0x50(%rbp) -+ 0f 29 6d c0 movaps %xmm5,-0x40(%rbp) -+ 0f 29 75 d0 movaps %xmm6,-0x30(%rbp) -+ 0f 29 7d e0 movaps %xmm7,-0x20(%rbp) -+ after: */ -+ -+ if (pc == start_pc) -+ return pc; -+ -+ start_pc_sal = find_pc_sect_line (start_pc, NULL, 0); -+ if (start_pc_sal.symtab == NULL -+ || !start_pc_sal.symtab->amd64_prologue_line_bug -+ || start_pc_sal.pc != start_pc || pc >= start_pc_sal.end) -+ return pc; -+ -+ next_sal = find_pc_sect_line (start_pc_sal.end, NULL, 0); -+ if (next_sal.line != start_pc_sal.line) -+ return pc; -+ -+ /* START_PC can be from overlayed memory, ignored here. */ -+ if (target_read_memory (next_sal.pc - 4, buf, sizeof (buf)) != 0) -+ return pc; -+ -+ /* test %al,%al */ -+ if (buf[0] != 0x84 || buf[1] != 0xc0) -+ return pc; -+ /* je AFTER */ -+ if (buf[2] != 0x74) -+ return pc; -+ -+ offset = 4; -+ for (xmmreg = 0; xmmreg < 8; xmmreg++) -+ { -+ /* movaps %xmmreg?,-0x??(%rbp) */ -+ if (buf[offset] != 0x0f || buf[offset + 1] != 0x29 -+ || (buf[offset + 2] & 0b00111111) != (xmmreg << 3 | 0b101)) -+ return pc; -+ -+ if ((buf[offset + 2] & 0b11000000) == 0b01000000) -+ { -+ /* 8-bit displacement. */ -+ offset += 4; -+ } -+ else if ((buf[offset + 2] & 0b11000000) == 0b10000000) -+ { -+ /* 32-bit displacement. */ -+ offset += 7; -+ } -+ else -+ return pc; -+ } -+ -+ /* je AFTER */ -+ if (offset - 4 != buf[3]) -+ return pc; -+ -+ return next_sal.end; - } - - -Index: gdb-7.3/gdb/dwarf2read.c -=================================================================== ---- gdb-7.3.orig/gdb/dwarf2read.c 2011-07-26 22:08:59.000000000 +0200 -+++ gdb-7.3/gdb/dwarf2read.c 2011-07-26 22:11:07.000000000 +0200 -@@ -4647,6 +4647,42 @@ producer_is_gcc_ge_4_0 (struct dwarf2_cu - return major >= 4; - } - -+static int -+producer_is_gcc_ge_4_6 (struct dwarf2_cu *cu) -+{ -+ const char *cs; -+ int major, minor; -+ -+ if (cu->producer == NULL) -+ { -+ /* For unknown compilers expect their behavior is not compliant. For GCC -+ this case can also happen for -gdwarf-4 type units supported since -+ gcc-4.5. */ -+ -+ return 0; -+ } -+ -+ /* Skip any identifier after "GNU " - such as "C++" or "Java". */ -+ -+ if (strncmp (cu->producer, "GNU ", strlen ("GNU ")) != 0) -+ { -+ /* For non-GCC compilers expect their behavior is not compliant. */ -+ -+ return 0; -+ } -+ cs = &cu->producer[strlen ("GNU ")]; -+ while (*cs && !isdigit (*cs)) -+ cs++; -+ if (sscanf (cs, "%d.%d", &major, &minor) != 2) -+ { -+ /* Not recognized as GCC. */ -+ -+ return 0; -+ } -+ -+ return major >= 4 && minor >= 6; -+} -+ - /* Generate full symbol information for PST and CU, whose DIEs have - already been loaded into memory. */ - -@@ -4706,6 +4742,9 @@ process_full_comp_unit (struct dwarf2_pe - */ - if (cu->has_loclist && producer_is_gcc_ge_4_0 (cu)) - symtab->locations_valid = 1; -+ -+ if (producer_is_gcc_ge_4_6 (cu)) -+ symtab->amd64_prologue_line_bug = 1; - } - - if (dwarf2_per_objfile->using_index) -Index: gdb-7.3/gdb/symtab.h -=================================================================== ---- gdb-7.3.orig/gdb/symtab.h 2011-07-26 22:08:57.000000000 +0200 -+++ gdb-7.3/gdb/symtab.h 2011-07-26 22:09:39.000000000 +0200 -@@ -779,6 +779,11 @@ struct symtab - - unsigned int locations_valid : 1; - -+ /* At least GCC 4.6.0 and 4.6.1 can produce invalid false prologue and marker -+ on amd64. This flag is set independently of the symtab arch. */ -+ -+ unsigned amd64_prologue_line_bug : 1; -+ - /* The macro table for this symtab. Like the blockvector, this - may be shared between different symtabs --- and normally is for - all the symtabs in a given compilation unit. */ -Index: gdb-7.3/gdb/testsuite/gdb.arch/amd64-prologue-xmm.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.3/gdb/testsuite/gdb.arch/amd64-prologue-xmm.c 2011-07-26 22:09:15.000000000 +0200 -@@ -0,0 +1,38 @@ -+/* This testcase is part of GDB, the GNU debugger. -+ -+ Copyright 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 . */ -+ -+static volatile int v, fail; -+ -+static void -+func (int i, ...) -+{ -+ v = i; -+} -+ -+static void -+marker (void) -+{ -+} -+ -+int -+main (void) -+{ -+ func (1); -+ fail = 1; -+ marker (); -+ return 0; -+} -Index: gdb-7.3/gdb/testsuite/gdb.arch/amd64-prologue-xmm.exp -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.3/gdb/testsuite/gdb.arch/amd64-prologue-xmm.exp 2011-07-26 22:09:15.000000000 +0200 -@@ -0,0 +1,46 @@ -+# Copyright 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 . -+ -+# Test GCC PR debug/48827 workaround in GDB. -+ -+set testfile "amd64-prologue-xmm" -+set srcfile ${testfile}.s -+set csrcfile ${testfile}.c -+set binfile ${objdir}/${subdir}/${testfile}.x -+set opts {} -+ -+if [info exists COMPILE] { -+ # make check RUNTESTFLAGS='gdb.arch/amd64-prologue-xmm.exp COMPILE=1' -+ set srcfile ${csrcfile} -+ lappend opts debug optimize=-O0 -+} elseif { ![istarget x86_64-*-* ] || ![is_lp64_target] } { -+ verbose "Skipping amd64-prologue-xmm test." -+ return 0 -+} -+ -+if {[prepare_for_testing ${testfile}.exp ${testfile} $srcfile $opts]} { -+ return -1 -+} -+ -+if ![runto_main] { -+ return -1 -+} -+ -+gdb_breakpoint "func" -+gdb_breakpoint "marker" -+ -+gdb_continue_to_breakpoint "func" -+ -+gdb_test "p fail" " = 0" "stopped at func" -Index: gdb-7.3/gdb/testsuite/gdb.arch/amd64-prologue-xmm.s -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.3/gdb/testsuite/gdb.arch/amd64-prologue-xmm.s 2011-07-26 22:09:15.000000000 +0200 -@@ -0,0 +1,400 @@ -+/* This testcase is part of GDB, the GNU debugger. -+ -+ Copyright 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 . */ -+ -+/* This file is compiled from gdb.arch/amd64-prologue-xmm.c -+ using -g -dA -S. */ -+ -+ .file "amd64-prologue-xmm.c" -+ .text -+.Ltext0: -+ .local v -+ .comm v,4,4 -+ .local fail -+ .comm fail,4,4 -+ .type func, @function -+func: -+.LFB0: -+ .file 1 "gdb.arch/amd64-prologue-xmm.c" -+ # gdb.arch/amd64-prologue-xmm.c:22 -+ .loc 1 22 0 -+ .cfi_startproc -+ # basic block 2 -+ pushq %rbp -+ .cfi_def_cfa_offset 16 -+ .cfi_offset 6, -16 -+ movq %rsp, %rbp -+ .cfi_def_cfa_register 6 -+ subq $72, %rsp -+ movq %rsi, -168(%rbp) -+ movq %rdx, -160(%rbp) -+ movq %rcx, -152(%rbp) -+ movq %r8, -144(%rbp) -+ movq %r9, -136(%rbp) -+ testb %al, %al -+ je .L2 -+ # basic block 3 -+ # gdb.arch/amd64-prologue-xmm.c:22 -+ .loc 1 22 0 -+ movaps %xmm0, -128(%rbp) -+ movaps %xmm1, -112(%rbp) -+ movaps %xmm2, -96(%rbp) -+ movaps %xmm3, -80(%rbp) -+ movaps %xmm4, -64(%rbp) -+ movaps %xmm5, -48(%rbp) -+ movaps %xmm6, -32(%rbp) -+ movaps %xmm7, -16(%rbp) -+.L2: -+ # basic block 4 -+ movl %edi, -180(%rbp) -+ # gdb.arch/amd64-prologue-xmm.c:23 -+ .loc 1 23 0 -+ movl -180(%rbp), %eax -+ movl %eax, v(%rip) -+ # gdb.arch/amd64-prologue-xmm.c:24 -+ .loc 1 24 0 -+ leave -+ .cfi_def_cfa 7, 8 -+ ret -+ .cfi_endproc -+.LFE0: -+ .size func, .-func -+ .type marker, @function -+marker: -+.LFB1: -+ # gdb.arch/amd64-prologue-xmm.c:28 -+ .loc 1 28 0 -+ .cfi_startproc -+ # basic block 2 -+ pushq %rbp -+ .cfi_def_cfa_offset 16 -+ .cfi_offset 6, -16 -+ movq %rsp, %rbp -+ .cfi_def_cfa_register 6 -+ # gdb.arch/amd64-prologue-xmm.c:29 -+ .loc 1 29 0 -+ popq %rbp -+ .cfi_def_cfa 7, 8 -+ ret -+ .cfi_endproc -+.LFE1: -+ .size marker, .-marker -+ .globl main -+ .type main, @function -+main: -+.LFB2: -+ # gdb.arch/amd64-prologue-xmm.c:33 -+ .loc 1 33 0 -+ .cfi_startproc -+ # basic block 2 -+ pushq %rbp -+ .cfi_def_cfa_offset 16 -+ .cfi_offset 6, -16 -+ movq %rsp, %rbp -+ .cfi_def_cfa_register 6 -+ # gdb.arch/amd64-prologue-xmm.c:34 -+ .loc 1 34 0 -+ movl $1, %edi -+ movl $0, %eax -+ call func -+ # gdb.arch/amd64-prologue-xmm.c:35 -+ .loc 1 35 0 -+ movl $1, fail(%rip) -+ # gdb.arch/amd64-prologue-xmm.c:36 -+ .loc 1 36 0 -+ call marker -+ # gdb.arch/amd64-prologue-xmm.c:37 -+ .loc 1 37 0 -+ movl $0, %eax -+ # gdb.arch/amd64-prologue-xmm.c:38 -+ .loc 1 38 0 -+ popq %rbp -+ .cfi_def_cfa 7, 8 -+ ret -+ .cfi_endproc -+.LFE2: -+ .size main, .-main -+.Letext0: -+ .section .debug_info,"",@progbits -+.Ldebug_info0: -+ .long 0xc0 # Length of Compilation Unit Info -+ .value 0x4 # DWARF version number -+ .long .Ldebug_abbrev0 # Offset Into Abbrev. Section -+ .byte 0x8 # Pointer Size (in bytes) -+ .uleb128 0x1 # (DIE (0xb) DW_TAG_compile_unit) -+ .long .LASF1 # DW_AT_producer: "GNU C 4.6.1 20110715 (Red Hat 4.6.1-3)" -+ .byte 0x1 # DW_AT_language -+ .long .LASF2 # DW_AT_name: "gdb.arch/amd64-prologue-xmm.c" -+ .long .LASF3 # DW_AT_comp_dir: "" -+ .quad .Ltext0 # DW_AT_low_pc -+ .quad .Letext0 # DW_AT_high_pc -+ .long .Ldebug_line0 # DW_AT_stmt_list -+ .uleb128 0x2 # (DIE (0x2d) DW_TAG_subprogram) -+ .long .LASF4 # DW_AT_name: "func" -+ .byte 0x1 # DW_AT_decl_file (gdb.arch/amd64-prologue-xmm.c) -+ .byte 0x15 # DW_AT_decl_line -+ # DW_AT_prototyped -+ .quad .LFB0 # DW_AT_low_pc -+ .quad .LFE0 # DW_AT_high_pc -+ .uleb128 0x1 # DW_AT_frame_base -+ .byte 0x9c # DW_OP_call_frame_cfa -+ # DW_AT_GNU_all_call_sites -+ .long 0x59 # DW_AT_sibling -+ .uleb128 0x3 # (DIE (0x4a) DW_TAG_formal_parameter) -+ .ascii "i\0" # DW_AT_name -+ .byte 0x1 # DW_AT_decl_file (gdb.arch/amd64-prologue-xmm.c) -+ .byte 0x15 # DW_AT_decl_line -+ .long 0x59 # DW_AT_type -+ .uleb128 0x3 # DW_AT_location -+ .byte 0x91 # DW_OP_fbreg -+ .sleb128 -196 -+ .uleb128 0x4 # (DIE (0x57) DW_TAG_unspecified_parameters) -+ .byte 0 # end of children of DIE 0x2d -+ .uleb128 0x5 # (DIE (0x59) DW_TAG_base_type) -+ .byte 0x4 # DW_AT_byte_size -+ .byte 0x5 # DW_AT_encoding -+ .ascii "int\0" # DW_AT_name -+ .uleb128 0x6 # (DIE (0x60) DW_TAG_subprogram) -+ .long .LASF5 # DW_AT_name: "marker" -+ .byte 0x1 # DW_AT_decl_file (gdb.arch/amd64-prologue-xmm.c) -+ .byte 0x1b # DW_AT_decl_line -+ # DW_AT_prototyped -+ .quad .LFB1 # DW_AT_low_pc -+ .quad .LFE1 # DW_AT_high_pc -+ .uleb128 0x1 # DW_AT_frame_base -+ .byte 0x9c # DW_OP_call_frame_cfa -+ # DW_AT_GNU_all_call_sites -+ .uleb128 0x7 # (DIE (0x79) DW_TAG_subprogram) -+ # DW_AT_external -+ .long .LASF6 # DW_AT_name: "main" -+ .byte 0x1 # DW_AT_decl_file (gdb.arch/amd64-prologue-xmm.c) -+ .byte 0x20 # DW_AT_decl_line -+ # DW_AT_prototyped -+ .long 0x59 # DW_AT_type -+ .quad .LFB2 # DW_AT_low_pc -+ .quad .LFE2 # DW_AT_high_pc -+ .uleb128 0x1 # DW_AT_frame_base -+ .byte 0x9c # DW_OP_call_frame_cfa -+ # DW_AT_GNU_all_tail_call_sites -+ .uleb128 0x8 # (DIE (0x96) DW_TAG_variable) -+ .ascii "v\0" # DW_AT_name -+ .byte 0x1 # DW_AT_decl_file (gdb.arch/amd64-prologue-xmm.c) -+ .byte 0x12 # DW_AT_decl_line -+ .long 0xa9 # DW_AT_type -+ .uleb128 0x9 # DW_AT_location -+ .byte 0x3 # DW_OP_addr -+ .quad v -+ .uleb128 0x9 # (DIE (0xa9) DW_TAG_volatile_type) -+ .long 0x59 # DW_AT_type -+ .uleb128 0xa # (DIE (0xae) DW_TAG_variable) -+ .long .LASF0 # DW_AT_name: "fail" -+ .byte 0x1 # DW_AT_decl_file (gdb.arch/amd64-prologue-xmm.c) -+ .byte 0x12 # DW_AT_decl_line -+ .long 0xa9 # DW_AT_type -+ .uleb128 0x9 # DW_AT_location -+ .byte 0x3 # DW_OP_addr -+ .quad fail -+ .byte 0 # end of children of DIE 0xb -+ .section .debug_abbrev,"",@progbits -+.Ldebug_abbrev0: -+ .uleb128 0x1 # (abbrev code) -+ .uleb128 0x11 # (TAG: DW_TAG_compile_unit) -+ .byte 0x1 # DW_children_yes -+ .uleb128 0x25 # (DW_AT_producer) -+ .uleb128 0xe # (DW_FORM_strp) -+ .uleb128 0x13 # (DW_AT_language) -+ .uleb128 0xb # (DW_FORM_data1) -+ .uleb128 0x3 # (DW_AT_name) -+ .uleb128 0xe # (DW_FORM_strp) -+ .uleb128 0x1b # (DW_AT_comp_dir) -+ .uleb128 0xe # (DW_FORM_strp) -+ .uleb128 0x11 # (DW_AT_low_pc) -+ .uleb128 0x1 # (DW_FORM_addr) -+ .uleb128 0x12 # (DW_AT_high_pc) -+ .uleb128 0x1 # (DW_FORM_addr) -+ .uleb128 0x10 # (DW_AT_stmt_list) -+ .uleb128 0x17 # (DW_FORM_sec_offset) -+ .byte 0 -+ .byte 0 -+ .uleb128 0x2 # (abbrev code) -+ .uleb128 0x2e # (TAG: DW_TAG_subprogram) -+ .byte 0x1 # DW_children_yes -+ .uleb128 0x3 # (DW_AT_name) -+ .uleb128 0xe # (DW_FORM_strp) -+ .uleb128 0x3a # (DW_AT_decl_file) -+ .uleb128 0xb # (DW_FORM_data1) -+ .uleb128 0x3b # (DW_AT_decl_line) -+ .uleb128 0xb # (DW_FORM_data1) -+ .uleb128 0x27 # (DW_AT_prototyped) -+ .uleb128 0x19 # (DW_FORM_flag_present) -+ .uleb128 0x11 # (DW_AT_low_pc) -+ .uleb128 0x1 # (DW_FORM_addr) -+ .uleb128 0x12 # (DW_AT_high_pc) -+ .uleb128 0x1 # (DW_FORM_addr) -+ .uleb128 0x40 # (DW_AT_frame_base) -+ .uleb128 0x18 # (DW_FORM_exprloc) -+ .uleb128 0x2117 # (DW_AT_GNU_all_call_sites) -+ .uleb128 0x19 # (DW_FORM_flag_present) -+ .uleb128 0x1 # (DW_AT_sibling) -+ .uleb128 0x13 # (DW_FORM_ref4) -+ .byte 0 -+ .byte 0 -+ .uleb128 0x3 # (abbrev code) -+ .uleb128 0x5 # (TAG: DW_TAG_formal_parameter) -+ .byte 0 # DW_children_no -+ .uleb128 0x3 # (DW_AT_name) -+ .uleb128 0x8 # (DW_FORM_string) -+ .uleb128 0x3a # (DW_AT_decl_file) -+ .uleb128 0xb # (DW_FORM_data1) -+ .uleb128 0x3b # (DW_AT_decl_line) -+ .uleb128 0xb # (DW_FORM_data1) -+ .uleb128 0x49 # (DW_AT_type) -+ .uleb128 0x13 # (DW_FORM_ref4) -+ .uleb128 0x2 # (DW_AT_location) -+ .uleb128 0x18 # (DW_FORM_exprloc) -+ .byte 0 -+ .byte 0 -+ .uleb128 0x4 # (abbrev code) -+ .uleb128 0x18 # (TAG: DW_TAG_unspecified_parameters) -+ .byte 0 # DW_children_no -+ .byte 0 -+ .byte 0 -+ .uleb128 0x5 # (abbrev code) -+ .uleb128 0x24 # (TAG: DW_TAG_base_type) -+ .byte 0 # DW_children_no -+ .uleb128 0xb # (DW_AT_byte_size) -+ .uleb128 0xb # (DW_FORM_data1) -+ .uleb128 0x3e # (DW_AT_encoding) -+ .uleb128 0xb # (DW_FORM_data1) -+ .uleb128 0x3 # (DW_AT_name) -+ .uleb128 0x8 # (DW_FORM_string) -+ .byte 0 -+ .byte 0 -+ .uleb128 0x6 # (abbrev code) -+ .uleb128 0x2e # (TAG: DW_TAG_subprogram) -+ .byte 0 # DW_children_no -+ .uleb128 0x3 # (DW_AT_name) -+ .uleb128 0xe # (DW_FORM_strp) -+ .uleb128 0x3a # (DW_AT_decl_file) -+ .uleb128 0xb # (DW_FORM_data1) -+ .uleb128 0x3b # (DW_AT_decl_line) -+ .uleb128 0xb # (DW_FORM_data1) -+ .uleb128 0x27 # (DW_AT_prototyped) -+ .uleb128 0x19 # (DW_FORM_flag_present) -+ .uleb128 0x11 # (DW_AT_low_pc) -+ .uleb128 0x1 # (DW_FORM_addr) -+ .uleb128 0x12 # (DW_AT_high_pc) -+ .uleb128 0x1 # (DW_FORM_addr) -+ .uleb128 0x40 # (DW_AT_frame_base) -+ .uleb128 0x18 # (DW_FORM_exprloc) -+ .uleb128 0x2117 # (DW_AT_GNU_all_call_sites) -+ .uleb128 0x19 # (DW_FORM_flag_present) -+ .byte 0 -+ .byte 0 -+ .uleb128 0x7 # (abbrev code) -+ .uleb128 0x2e # (TAG: DW_TAG_subprogram) -+ .byte 0 # DW_children_no -+ .uleb128 0x3f # (DW_AT_external) -+ .uleb128 0x19 # (DW_FORM_flag_present) -+ .uleb128 0x3 # (DW_AT_name) -+ .uleb128 0xe # (DW_FORM_strp) -+ .uleb128 0x3a # (DW_AT_decl_file) -+ .uleb128 0xb # (DW_FORM_data1) -+ .uleb128 0x3b # (DW_AT_decl_line) -+ .uleb128 0xb # (DW_FORM_data1) -+ .uleb128 0x27 # (DW_AT_prototyped) -+ .uleb128 0x19 # (DW_FORM_flag_present) -+ .uleb128 0x49 # (DW_AT_type) -+ .uleb128 0x13 # (DW_FORM_ref4) -+ .uleb128 0x11 # (DW_AT_low_pc) -+ .uleb128 0x1 # (DW_FORM_addr) -+ .uleb128 0x12 # (DW_AT_high_pc) -+ .uleb128 0x1 # (DW_FORM_addr) -+ .uleb128 0x40 # (DW_AT_frame_base) -+ .uleb128 0x18 # (DW_FORM_exprloc) -+ .uleb128 0x2116 # (DW_AT_GNU_all_tail_call_sites) -+ .uleb128 0x19 # (DW_FORM_flag_present) -+ .byte 0 -+ .byte 0 -+ .uleb128 0x8 # (abbrev code) -+ .uleb128 0x34 # (TAG: DW_TAG_variable) -+ .byte 0 # DW_children_no -+ .uleb128 0x3 # (DW_AT_name) -+ .uleb128 0x8 # (DW_FORM_string) -+ .uleb128 0x3a # (DW_AT_decl_file) -+ .uleb128 0xb # (DW_FORM_data1) -+ .uleb128 0x3b # (DW_AT_decl_line) -+ .uleb128 0xb # (DW_FORM_data1) -+ .uleb128 0x49 # (DW_AT_type) -+ .uleb128 0x13 # (DW_FORM_ref4) -+ .uleb128 0x2 # (DW_AT_location) -+ .uleb128 0x18 # (DW_FORM_exprloc) -+ .byte 0 -+ .byte 0 -+ .uleb128 0x9 # (abbrev code) -+ .uleb128 0x35 # (TAG: DW_TAG_volatile_type) -+ .byte 0 # DW_children_no -+ .uleb128 0x49 # (DW_AT_type) -+ .uleb128 0x13 # (DW_FORM_ref4) -+ .byte 0 -+ .byte 0 -+ .uleb128 0xa # (abbrev code) -+ .uleb128 0x34 # (TAG: DW_TAG_variable) -+ .byte 0 # DW_children_no -+ .uleb128 0x3 # (DW_AT_name) -+ .uleb128 0xe # (DW_FORM_strp) -+ .uleb128 0x3a # (DW_AT_decl_file) -+ .uleb128 0xb # (DW_FORM_data1) -+ .uleb128 0x3b # (DW_AT_decl_line) -+ .uleb128 0xb # (DW_FORM_data1) -+ .uleb128 0x49 # (DW_AT_type) -+ .uleb128 0x13 # (DW_FORM_ref4) -+ .uleb128 0x2 # (DW_AT_location) -+ .uleb128 0x18 # (DW_FORM_exprloc) -+ .byte 0 -+ .byte 0 -+ .byte 0 -+ .section .debug_aranges,"",@progbits -+ .long 0x2c # Length of Address Ranges Info -+ .value 0x2 # DWARF Version -+ .long .Ldebug_info0 # Offset of Compilation Unit Info -+ .byte 0x8 # Size of Address -+ .byte 0 # Size of Segment Descriptor -+ .value 0 # Pad to 16 byte boundary -+ .value 0 -+ .quad .Ltext0 # Address -+ .quad .Letext0-.Ltext0 # Length -+ .quad 0 -+ .quad 0 -+ .section .debug_line,"",@progbits -+.Ldebug_line0: -+ .section .debug_str,"MS",@progbits,1 -+.LASF3: -+ .string "" -+.LASF0: -+ .string "fail" -+.LASF4: -+ .string "func" -+.LASF1: -+ .string "GNU C 4.6.1 20110715 (Red Hat 4.6.1-3)" -+.LASF2: -+ .string "gdb.arch/amd64-prologue-xmm.c" -+.LASF5: -+ .string "marker" -+.LASF6: -+ .string "main" -+ .ident "GCC: (GNU) 4.6.1 20110715 (Red Hat 4.6.1-3)" -+ .section .note.GNU-stack,"",@progbits diff --git a/gdb-gcc46-typedef.patch b/gdb-gcc46-typedef.patch deleted file mode 100644 index a2cc840..0000000 --- a/gdb-gcc46-typedef.patch +++ /dev/null @@ -1,218 +0,0 @@ -http://sourceware.org/ml/gdb-patches/2011-04/msg00154.html -Subject: [patch] Workaround buggy GCC PR 47510 produced code - -Hi, - -GCC PR debug/47510 is already fixed and GDB has the proper support for it: - RFC: update for GCC PR 47510 - http://sourceware.org/ml/gdb-patches/2011-03/msg00916.html - -Still FSF GDB HEAD will crash on a binary produced by older/buggy GCC: - Reading symbols from .../gcc46.o...dwarf2read.c:9329: internal-error: could not find partial DIE 0x9a in cache [from module .../gcc46.o] - -Which may not give much clue to the user. - -The proposed patch could make false warnings if any code out there has -DW_TAG_typedef with children, it does not check for specific GCC versions. -Still such DWARF is invalid, although in such case complaint() would be more -appropriate than warning(). Does it make sense to differentiate it? - -No regressions on {x86_64,x86_64-m32,i686}-fedora15-linux-gnu. - - -Thanks, -Jan - - -gdb/ -2011-04-11 Jan Kratochvil - - * dwarf2read.c (struct dwarf2_per_objfile): New field - typedef_children_warning_printed. - (load_partial_dies): Read in any children of DW_TAG_typedef with - a warning in such case. - -gdb/testsuite/ -2011-04-11 Jan Kratochvil - - * gdb.dwarf2/dw2-typedef-children.S: New file. - * gdb.dwarf2/dw2-typedef-children.exp: New file. - ---- a/gdb/dwarf2read.c -+++ b/gdb/dwarf2read.c -@@ -209,6 +209,9 @@ struct dwarf2_per_objfile - or we are faking it for OBJF_READNOW's sake. */ - unsigned char using_index; - -+ /* Print the GCC PR debug/47510 warning only once per objfile. */ -+ unsigned typedef_children_warning_printed : 1; -+ - /* The mapped index, or NULL if .gdb_index is missing or not being used. */ - struct mapped_index *index_table; - -@@ -8951,7 +8954,7 @@ load_partial_dies (bfd *abfd, gdb_byte *buffer, gdb_byte *info_ptr, - if (parent_die == NULL - && part_die->has_specification == 0 - && part_die->is_declaration == 0 -- && (part_die->tag == DW_TAG_typedef -+ && ((part_die->tag == DW_TAG_typedef && !part_die->has_children) - || part_die->tag == DW_TAG_base_type - || part_die->tag == DW_TAG_subrange_type)) - { -@@ -8964,6 +8967,20 @@ load_partial_dies (bfd *abfd, gdb_byte *buffer, gdb_byte *info_ptr, - continue; - } - -+ /* The exception for DW_TAG_typedef with has_children above is -+ a workaround of GCC PR debug/47510. GDB crashed on broken GCC output -+ as it skipped children of DW_TAG_typedef by the shortcut above and -+ then it could not find the child DIEs referenced later. */ -+ -+ if (!dwarf2_per_objfile->typedef_children_warning_printed -+ && part_die->tag == DW_TAG_typedef && part_die->has_children) -+ { -+ warning (_("DW_TAG_typedef has childen - GCC PR debug/47510 bug " -+ "- DIE at 0x%x [in module %s]"), -+ part_die->offset, cu->objfile->name); -+ dwarf2_per_objfile->typedef_children_warning_printed = 1; -+ } -+ - /* If we're at the second level, and we're an enumerator, and - our parent has no specification (meaning possibly lives in a - namespace elsewhere), then we can add the partial symbol now ---- /dev/null -+++ b/gdb/testsuite/gdb.dwarf2/dw2-typedef-children.S -@@ -0,0 +1,92 @@ -+/* This testcase is part of GDB, the GNU debugger. -+ -+ Copyright 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 . */ -+ -+/* Debug information */ -+ -+ .section .debug_info -+.Lcu1_begin: -+ /* CU header */ -+ .4byte .Lcu1_end - .Lcu1_start /* Length of Compilation Unit */ -+.Lcu1_start: -+ .2byte 2 /* DWARF Version */ -+ .4byte .Labbrev1_begin /* Offset into abbrev section */ -+ .byte 4 /* Pointer size */ -+ -+ /* CU die */ -+ .uleb128 1 /* Abbrev: DW_TAG_compile_unit */ -+ .ascii "file1.txt\0" /* DW_AT_name */ -+ .ascii "GNU C 3.3.3\0" /* DW_AT_producer */ -+ .byte 1 /* DW_AT_language (C) */ -+ -+.Ltype_int: -+ .uleb128 2 /* Abbrev: DW_TAG_base_type */ -+ .ascii "int\0" /* DW_AT_name */ -+ .byte 4 /* DW_AT_byte_size */ -+ .byte 5 /* DW_AT_encoding */ -+ -+ .uleb128 0x3 /* (DIE (0x38) DW_TAG_typedef) */ -+ .ascii "new\0" /* DW_AT_name */ -+ .long .Ltype_int - .Lcu1_begin /* DW_AT_type */ -+ -+ .uleb128 2 /* Abbrev: DW_TAG_base_type */ -+ .ascii "int\0" /* DW_AT_name */ -+ .byte 4 /* DW_AT_byte_size */ -+ .byte 5 /* DW_AT_encoding */ -+ -+ .uleb128 0 /* End of DW_TAG_typedef */ -+ .uleb128 0 /* End of DW_TAG_compile_unit */ -+.Lcu1_end: -+ -+/* Abbrev table */ -+ .section .debug_abbrev -+.Labbrev1_begin: -+ .uleb128 1 /* Abbrev code */ -+ .uleb128 0x11 /* DW_TAG_compile_unit */ -+ .byte 1 /* has_children */ -+ .uleb128 0x3 /* DW_AT_name */ -+ .uleb128 0x8 /* DW_FORM_string */ -+ .uleb128 0x25 /* DW_AT_producer */ -+ .uleb128 0x8 /* DW_FORM_string */ -+ .uleb128 0x13 /* DW_AT_language */ -+ .uleb128 0xb /* DW_FORM_data1 */ -+ .byte 0x0 /* Terminator */ -+ .byte 0x0 /* Terminator */ -+ -+ .uleb128 2 /* Abbrev code */ -+ .uleb128 0x24 /* DW_TAG_base_type */ -+ .byte 0 /* has_children */ -+ .uleb128 0x3 /* DW_AT_name */ -+ .uleb128 0x8 /* DW_FORM_string */ -+ .uleb128 0xb /* DW_AT_byte_size */ -+ .uleb128 0xb /* DW_FORM_data1 */ -+ .uleb128 0x3e /* DW_AT_encoding */ -+ .uleb128 0xb /* DW_FORM_data1 */ -+ .byte 0x0 /* Terminator */ -+ .byte 0x0 /* Terminator */ -+ -+ .uleb128 0x3 /* (abbrev code) */ -+ .uleb128 0x16 /* (TAG: DW_TAG_typedef) */ -+ .byte 0x1 /* DW_children_yes */ -+ .uleb128 0x3 /* (DW_AT_name) */ -+ .uleb128 0x8 /* (DW_FORM_string) */ -+ .uleb128 0x49 /* (DW_AT_type) */ -+ .uleb128 0x13 /* (DW_FORM_ref4) */ -+ .byte 0x0 -+ .byte 0x0 -+ -+ .byte 0x0 /* Terminator */ -+ .byte 0x0 /* Terminator */ ---- /dev/null -+++ b/gdb/testsuite/gdb.dwarf2/dw2-typedef-children.exp -@@ -0,0 +1,37 @@ -+# Copyright 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 . -+load_lib dwarf.exp -+ -+# Note: Inspired from dw2-basic.exp. -+ -+# This test can only be run on targets which support DWARF-2 and use gas. -+if {![dwarf2_support]} { -+ return 0 -+} -+ -+set testfile "dw2-typedef-children" -+set srcfile ${testfile}.S -+set binfile ${objdir}/${subdir}/${testfile}.x -+ -+if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" object {nodebug}] != "" } { -+ return -1 -+} -+ -+gdb_exit -+gdb_start -+ -+gdb_test "file $binfile" \ -+ "warning: DW_TAG_typedef has childen - GCC PR debug/47510 bug - DIE at .*" \ -+ "warning message" - diff --git a/gdb-gdb-add-index-script.patch b/gdb-gdb-add-index-script.patch index 5beef67..db7b584 100644 --- a/gdb-gdb-add-index-script.patch +++ b/gdb-gdb-add-index-script.patch @@ -40,16 +40,16 @@ Subject: [PATCH 4/4] add gdb-add-index 5 files changed, 57 insertions(+), 1 deletions(-) create mode 100755 gdb/gdb-add-index -Index: gdb-7.2.50.20101116/gdb/Makefile.in +Index: gdb-7.4.50.20120103/gdb/Makefile.in =================================================================== ---- gdb-7.2.50.20101116.orig/gdb/Makefile.in 2010-11-16 08:03:17.000000000 +0100 -+++ gdb-7.2.50.20101116/gdb/Makefile.in 2010-11-16 08:47:45.000000000 +0100 -@@ -986,7 +986,16 @@ install-only: install-gstack $(CONFIG_IN - $(SHELL) $(srcdir)/../mkinstalldirs \ - $(DESTDIR)$(man1dir) ; \ +--- gdb-7.4.50.20120103.orig/gdb/Makefile.in 2012-01-03 05:53:25.000000000 +0100 ++++ gdb-7.4.50.20120103/gdb/Makefile.in 2012-01-03 15:24:25.693543435 +0100 +@@ -1033,7 +1033,16 @@ install-only: install-gstack $(CONFIG_IN $(INSTALL_DATA) $(srcdir)/gdb.1 \ -- $(DESTDIR)$(man1dir)/$$transformed_name.1 -+ $(DESTDIR)$(man1dir)/$$transformed_name.1; \ + $(DESTDIR)$(man1dir)/$$transformed_name.1 ; \ + $(SHELL) $(srcdir)/../mkinstalldirs $(DESTDIR)$(includedir)/gdb ; \ +- $(INSTALL_DATA) jit-reader.h $(DESTDIR)$(includedir)/gdb/jit-reader.h ++ $(INSTALL_DATA) jit-reader.h $(DESTDIR)$(includedir)/gdb/jit-reader.h; \ + transformed_name=`t='$(program_transform_name)'; \ + echo gdb-add-index | sed -e "$$t"` ; \ + if test "x$$transformed_name" = x; then \ @@ -60,13 +60,13 @@ Index: gdb-7.2.50.20101116/gdb/Makefile.in + $(INSTALL_PROGRAM) $(srcdir)/gdb-add-index \ + $(DESTDIR)$(bindir)/$$transformed_name$(EXEEXT) @$(MAKE) DO=install "DODIRS=$(SUBDIRS)" $(FLAGS_TO_PASS) subdir_do - .PHONY: install-tui - install-tui: -Index: gdb-7.2.50.20101116/gdb/doc/gdb.texinfo + + install-python: +Index: gdb-7.4.50.20120103/gdb/doc/gdb.texinfo =================================================================== ---- gdb-7.2.50.20101116.orig/gdb/doc/gdb.texinfo 2010-11-16 08:04:18.000000000 +0100 -+++ gdb-7.2.50.20101116/gdb/doc/gdb.texinfo 2010-11-16 08:56:30.000000000 +0100 -@@ -15500,6 +15500,14 @@ There are currently some limitation on i +--- gdb-7.4.50.20120103.orig/gdb/doc/gdb.texinfo 2012-01-03 15:20:54.000000000 +0100 ++++ gdb-7.4.50.20120103/gdb/doc/gdb.texinfo 2012-01-03 15:23:43.295231946 +0100 +@@ -16228,6 +16228,14 @@ There are currently some limitation on i for DWARF debugging information, not stabs. And, they do not currently work for programs using Ada. @@ -81,10 +81,10 @@ Index: gdb-7.2.50.20101116/gdb/doc/gdb.texinfo @node Symbol Errors @section Errors Reading Symbol Files -Index: gdb-7.2.50.20101116/gdb/gdb-add-index +Index: gdb-7.4.50.20120103/gdb/gdb-add-index =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.50.20101116/gdb/gdb-add-index 2010-11-16 08:47:45.000000000 +0100 ++++ gdb-7.4.50.20120103/gdb/gdb-add-index 2012-01-03 15:23:43.296231942 +0100 @@ -0,0 +1,30 @@ +#! /bin/sh + diff --git a/gdb-glibc-strstr-workaround.patch b/gdb-glibc-strstr-workaround.patch new file mode 100644 index 0000000..eabb14e --- /dev/null +++ b/gdb-glibc-strstr-workaround.patch @@ -0,0 +1,137 @@ +diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c +index 53100c5..e7586ac 100644 +--- a/gdb/dwarf2read.c ++++ b/gdb/dwarf2read.c +@@ -13306,6 +13306,25 @@ new_symbol_full (struct die_info *die, struct type *type, struct dwarf2_cu *cu, + /* Cache this symbol's name and the name's demangled form (if any). */ + SYMBOL_SET_LANGUAGE (sym, cu->language); + linkagename = dwarf2_physname (name, die, cu); ++ ++ /* Workaround for: ++ * invalid IFUNC DW_AT_linkage_name: memmove strstr time ++ * http://sourceware.org/bugzilla/show_bug.cgi?id=14166 */ ++ if (strcmp (linkagename, "strstr") == 0 ++ && strstr (objfile->name, "/libc") != NULL) ++ { ++ struct objfile *objfile_msym; ++ struct minimal_symbol *msym; ++ ++ if (objfile->separate_debug_objfile_backlink) ++ objfile_msym = objfile->separate_debug_objfile_backlink; ++ else ++ objfile_msym = objfile; ++ msym = lookup_minimal_symbol ("strstr", NULL, objfile_msym); ++ if (msym && MSYMBOL_TYPE (msym) == mst_text_gnu_ifunc) ++ linkagename = "__strstr"; ++ } ++ + SYMBOL_SET_NAMES (sym, linkagename, strlen (linkagename), 0, objfile); + + /* Fortran does not have mangling standard and the mangling does differ +diff --git a/gdb/testsuite/gdb.base/gnu-ifunc-strstr-workaround.exp b/gdb/testsuite/gdb.base/gnu-ifunc-strstr-workaround.exp +new file mode 100644 +index 0000000..575071f +--- /dev/null ++++ b/gdb/testsuite/gdb.base/gnu-ifunc-strstr-workaround.exp +@@ -0,0 +1,101 @@ ++# 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 . ++ ++# Workaround for: ++# invalid IFUNC DW_AT_linkage_name: memmove strstr time ++# http://sourceware.org/bugzilla/show_bug.cgi?id=14166 ++ ++if {[skip_shlib_tests]} { ++ return 0 ++} ++ ++set testfile "gnu-ifunc-strstr-workaround" ++set executable ${testfile} ++set srcfile start.c ++set binfile ${objdir}/${subdir}/${executable} ++ ++if [prepare_for_testing ${testfile}.exp $executable $srcfile] { ++ return -1 ++} ++ ++if ![runto_main] { ++ return 0 ++} ++ ++set test "ptype atoi" ++gdb_test_multiple $test $test { ++ -re "type = int \\(const char \\*\\)\r\n$gdb_prompt $" { ++ pass $test ++ } ++ -re "type = int \\(\\)\r\n$gdb_prompt $" { ++ untested "$test (no DWARF)" ++ return 0 ++ } ++} ++ ++set addr "" ++set test "print strstr" ++gdb_test_multiple $test $test { ++ -re " = {} (0x\[0-9a-f\]+) \r\n$gdb_prompt $" { ++ set addr $expect_out(1,string) ++ pass $test ++ } ++ -re " = {} (0x\[0-9a-f\]+) <__strstr>\r\n$gdb_prompt $" { ++ set addr $expect_out(1,string) ++ pass "$test (GDB workaround or future fixed glibc)" ++ } ++ -re " = {char \\*\\(const char \\*, const char \\*\\)} 0x\[0-9a-f\]+ \r\n$gdb_prompt $" { ++ untested "$test (gnu-ifunc not in use by glibc)" ++ return 0 ++ } ++} ++ ++set test "info sym" ++gdb_test_multiple "info sym $addr" $test { ++ -re "strstr in section \\.text of /lib\[^/\]*/libc.so.6\r\n$gdb_prompt $" { ++ pass $test ++ } ++ -re " = {char \\*\\(const char \\*, const char \\*\\)} 0x\[0-9a-f\]+ \r\n$gdb_prompt $" { ++ # unexpected ++ xfail "$test (not in libc.so.6)" ++ return 0 ++ } ++} ++ ++set test "info addr strstr" ++gdb_test_multiple $test $test { ++ -re "Symbol \"strstr\" is a function at address $addr\\.\r\n$gdb_prompt $" { ++ fail "$test (DWARF for strstr)" ++ } ++ -re "Symbol \"strstr\" is at $addr in a file compiled without debugging\\.\r\n$gdb_prompt $" { ++ pass "$test" ++ } ++} ++ ++set test "print strstr second time" ++gdb_test_multiple "print strstr" $test { ++ -re " = {} $addr \r\n$gdb_prompt $" { ++ pass $test ++ } ++ -re " = {} $addr <__strstr>\r\n$gdb_prompt $" { ++ pass "$test (GDB workaround or future fixed glibc)" ++ } ++ -re " = {void \\*\\(void\\)} 0x\[0-9a-f\]+ \r\n$gdb_prompt $" { ++ fail $test ++ } ++} ++ ++gdb_test {print strstr("abc","b")} { = 0x[0-9a-f]+ "bc"} ++gdb_test {print strstr("def","e")} { = 0x[0-9a-f]+ "ef"} diff --git a/gdb-glibc-vdso-workaround.patch b/gdb-glibc-vdso-workaround.patch new file mode 100644 index 0000000..fc1bba8 --- /dev/null +++ b/gdb-glibc-vdso-workaround.patch @@ -0,0 +1,30 @@ +http://sourceware.org/ml/gdb-patches/2011-08/msg00331.html +Subject: [RFC] Work around PR libc/13097 "linux-vdso.so.1" #2 + +Hi, + +missed the x86_64-m32 case: + +gdb/ +2011-08-16 Jan Kratochvil + + Work around PR libc/13097. + * solib.c (update_solib_list): Ignore "linux-vdso.so.1". + +--- a/gdb/solib.c ++++ b/gdb/solib.c +@@ -783,8 +783,11 @@ update_solib_list (int from_tty, struct target_ops *target) + + TRY_CATCH (e, RETURN_MASK_ERROR) + { +- /* Fill in the rest of the `struct so_list' node. */ +- if (!solib_map_sections (i)) ++ /* Fill in the rest of the `struct so_list' node. ++ Work around PR libc/13097. */ ++ if (!solib_map_sections (i) ++ && strcmp (i->so_original_name, "linux-vdso.so.1") != 0 ++ && strcmp (i->so_original_name, "linux-gate.so.1") != 0) + { + not_found++; + if (not_found_filename == NULL) + diff --git a/gdb-index-assert.patch b/gdb-index-assert.patch new file mode 100644 index 0000000..0cfb208 --- /dev/null +++ b/gdb-index-assert.patch @@ -0,0 +1,60 @@ +http://sourceware.org/ml/gdb-patches/2012-06/msg00109.html +Subject: [RFA] Fix inconsistency in blockvector addrmap vs non-addrmap handling + +Hi. + +I was seeing the assert in dw2_find_pc_sect_psymtab trigger +and traced it to the fact that when pending_addrmap_interesting gets +set blockvector.map is used instead of blockvector.block. +The difference is that blockvector.block contains entries for the global +and static blocks whereas pending_addrmap doesn't. + +This patch fixes this by making them consistent. +I suspect more work is necessary (e.g. can symtabs "overlap" even though +the individual pieces do not?). +But I first want to fix the regression introduced by the change +to dw2_find_pc_sect_psymtab: There is more code in a symtab than is +documented by function and lexical block pc ranges (e.g. C++ method thunks). + +Regression tested on amd64-linux, and by verifying the assert no longer +triggers in the testcase I was using. + +Ok to commit? + +Note that this obviates the need for the patch in: +http://sourceware.org/ml/gdb-patches/2012-05/msg00958.html + +Also note that this accompanies this patch: +http://sourceware.org/ml/gdb-patches/2012-06/msg00105.html + +2012-06-04 Doug Evans + + * buildsym.c (end_symtab): Add the range of the static block to + the pending addrmap. + +Index: buildsym.c +=================================================================== +RCS file: /cvs/src/src/gdb/buildsym.c,v +retrieving revision 1.97 +diff -u -p -r1.97 buildsym.c +--- ./gdb/buildsym.c 29 May 2012 20:23:17 -0000 1.97 ++++ ./gdb/buildsym.c 5 Jun 2012 00:26:01 -0000 +@@ -1024,8 +1027,15 @@ end_symtab (CORE_ADDR end_addr, struct o + { + /* Define the STATIC_BLOCK & GLOBAL_BLOCK, and build the + blockvector. */ +- finish_block (0, &file_symbols, 0, last_source_start_addr, +- end_addr, objfile); ++ struct block *static_block; ++ ++ static_block = finish_block (0, &file_symbols, 0, ++ last_source_start_addr, end_addr, ++ objfile); ++ /* Mark the range of the static block so that if we end up using ++ blockvector.map then find_block_in_blockvector behaves identically ++ regardless of whether the addrmap is present. */ ++ record_block_range (static_block, last_source_start_addr, end_addr - 1); + finish_block_internal (0, &global_symbols, 0, last_source_start_addr, + end_addr, objfile, 1); + blockvector = make_blockvector (objfile); + diff --git a/gdb-objfile-order.patch b/gdb-objfile-order.patch new file mode 100644 index 0000000..90aca1e --- /dev/null +++ b/gdb-objfile-order.patch @@ -0,0 +1,215 @@ +http://sourceware.org/ml/gdb-patches/2012-05/msg01105.html +Subject: [RFA/commit 1/3] Revert "Search global symbols from the expression's block objfile first." + +The search order used in this patch breaks global symbol lookups +for certain symbols when copy-relocation is used. A slightly different +search order will be implemented later. + +gdb/ChangeLog: + + Revert the following patch: + * findvar.c (default_read_var_value): For LOC_UNRESOLVED symbols, + try locating the symbol in the symbol's own objfile first, before + extending the search to all objfiles. + * symtab.c (lookup_symbol_aux_objfile): New function, extracted + out of lookup_symbol_aux_symtabs. + (lookup_symbol_aux_symtabs): Add new parameter "exclude_objfile". + Replace extracted-out code by call to lookup_symbol_aux_objfile. + Do not search EXCLUDE_OBJFILE. + (lookup_static_symbol_aux): Update call to lookup_symbol_aux_symtabs. + (lookup_symbol_global): Search for matches in the block's objfile + first, before searching all other objfiles. + +Will commit if patches #2 & #3 are OK. + +--- + gdb/findvar.c | 10 +----- + gdb/symtab.c | 108 +++++++++++++++++---------------------------------------- + 2 files changed, 33 insertions(+), 85 deletions(-) + +diff --git a/gdb/findvar.c b/gdb/findvar.c +index ed7903c..9009e6f 100644 +--- a/gdb/findvar.c ++++ b/gdb/findvar.c +@@ -562,15 +562,7 @@ default_read_var_value (struct symbol *var, struct frame_info *frame) + struct minimal_symbol *msym; + struct obj_section *obj_section; + +- /* First, try locating the associated minimal symbol within +- the same objfile. This prevents us from selecting another +- symbol with the same name but located in a different objfile. */ +- msym = lookup_minimal_symbol (SYMBOL_LINKAGE_NAME (var), NULL, +- SYMBOL_SYMTAB (var)->objfile); +- /* If the lookup failed, try expanding the search to all +- objfiles. */ +- if (msym == NULL) +- msym = lookup_minimal_symbol (SYMBOL_LINKAGE_NAME (var), NULL, NULL); ++ msym = lookup_minimal_symbol (SYMBOL_LINKAGE_NAME (var), NULL, NULL); + if (msym == NULL) + error (_("No global symbol \"%s\"."), SYMBOL_LINKAGE_NAME (var)); + if (overlay_debugging) +diff --git a/gdb/symtab.c b/gdb/symtab.c +index 85ddd1d..39d8c6f 100644 +--- a/gdb/symtab.c ++++ b/gdb/symtab.c +@@ -95,8 +95,7 @@ struct symbol *lookup_symbol_aux_local (const char *name, + static + struct symbol *lookup_symbol_aux_symtabs (int block_index, + const char *name, +- const domain_enum domain, +- struct objfile *exclude_objfile); ++ const domain_enum domain); + + static + struct symbol *lookup_symbol_aux_quick (struct objfile *objfile, +@@ -1360,7 +1359,7 @@ lookup_static_symbol_aux (const char *name, const domain_enum domain) + struct objfile *objfile; + struct symbol *sym; + +- sym = lookup_symbol_aux_symtabs (STATIC_BLOCK, name, domain, NULL); ++ sym = lookup_symbol_aux_symtabs (STATIC_BLOCK, name, domain); + if (sym != NULL) + return sym; + +@@ -1499,61 +1498,40 @@ lookup_global_symbol_from_objfile (const struct objfile *main_objfile, + return NULL; + } + +-/* Check to see if the symbol is defined in one of the OBJFILE's +- symtabs. BLOCK_INDEX should be either GLOBAL_BLOCK or STATIC_BLOCK, ++/* Check to see if the symbol is defined in one of the symtabs. ++ BLOCK_INDEX should be either GLOBAL_BLOCK or STATIC_BLOCK, + depending on whether or not we want to search global symbols or + static symbols. */ + + static struct symbol * +-lookup_symbol_aux_objfile (struct objfile *objfile, int block_index, +- const char *name, const domain_enum domain) +-{ +- struct symbol *sym = NULL; +- struct blockvector *bv; +- const struct block *block; +- struct symtab *s; +- +- if (objfile->sf) +- objfile->sf->qf->pre_expand_symtabs_matching (objfile, block_index, +- name, domain); +- +- ALL_OBJFILE_SYMTABS (objfile, s) +- if (s->primary) +- { +- bv = BLOCKVECTOR (s); +- block = BLOCKVECTOR_BLOCK (bv, block_index); +- sym = lookup_block_symbol (block, name, domain); +- if (sym) +- { +- block_found = block; +- return fixup_symbol_section (sym, objfile); +- } +- } +- +- return NULL; +-} +- +-/* Same as lookup_symbol_aux_objfile, except that it searches all +- objfiles except for EXCLUDE_OBJFILE. Return the first match found. +- +- If EXCLUDE_OBJFILE is NULL, then all objfiles are searched. */ +- +-static struct symbol * + lookup_symbol_aux_symtabs (int block_index, const char *name, +- const domain_enum domain, +- struct objfile *exclude_objfile) ++ const domain_enum domain) + { + struct symbol *sym; + struct objfile *objfile; ++ struct blockvector *bv; ++ const struct block *block; ++ struct symtab *s; + + ALL_OBJFILES (objfile) + { +- if (objfile != exclude_objfile) +- { +- sym = lookup_symbol_aux_objfile (objfile, block_index, name, domain); +- if (sym) +- return sym; +- } ++ if (objfile->sf) ++ objfile->sf->qf->pre_expand_symtabs_matching (objfile, ++ block_index, ++ name, domain); ++ ++ ALL_OBJFILE_SYMTABS (objfile, s) ++ if (s->primary) ++ { ++ bv = BLOCKVECTOR (s); ++ block = BLOCKVECTOR_BLOCK (bv, block_index); ++ sym = lookup_block_symbol (block, name, domain); ++ if (sym) ++ { ++ block_found = block; ++ return fixup_symbol_section (sym, objfile); ++ } ++ } + } + + return NULL; +@@ -1679,46 +1657,24 @@ lookup_symbol_global (const char *name, + const domain_enum domain) + { + struct symbol *sym = NULL; +- struct objfile *block_objfile = NULL; + struct objfile *objfile = NULL; + + /* Call library-specific lookup procedure. */ +- block_objfile = lookup_objfile_from_block (block); +- if (block_objfile != NULL) +- sym = solib_global_lookup (block_objfile, name, domain); ++ objfile = lookup_objfile_from_block (block); ++ if (objfile != NULL) ++ sym = solib_global_lookup (objfile, name, domain); + if (sym != NULL) + return sym; + +- /* If BLOCK_OBJFILE is not NULL, then search this objfile first. +- In case the global symbol is defined in multiple objfiles, +- we have a better chance of finding the most relevant symbol. */ +- +- if (block_objfile != NULL) +- { +- sym = lookup_symbol_aux_objfile (block_objfile, GLOBAL_BLOCK, +- name, domain); +- if (sym == NULL) +- sym = lookup_symbol_aux_quick (block_objfile, GLOBAL_BLOCK, +- name, domain); +- if (sym != NULL) +- return sym; +- } +- +- /* Symbol not found in the BLOCK_OBJFILE, so try all the other +- objfiles, starting with symtabs first, and then partial symtabs. */ +- +- sym = lookup_symbol_aux_symtabs (GLOBAL_BLOCK, name, domain, block_objfile); ++ sym = lookup_symbol_aux_symtabs (GLOBAL_BLOCK, name, domain); + if (sym != NULL) + return sym; + + ALL_OBJFILES (objfile) + { +- if (objfile != block_objfile) +- { +- sym = lookup_symbol_aux_quick (objfile, GLOBAL_BLOCK, name, domain); +- if (sym) +- return sym; +- } ++ sym = lookup_symbol_aux_quick (objfile, GLOBAL_BLOCK, name, domain); ++ if (sym) ++ return sym; + } + + return NULL; +-- +1.7.1 + diff --git a/gdb-ppc-ptrace.diff b/gdb-ppc-ptrace.diff new file mode 100644 index 0000000..c6f1899 --- /dev/null +++ b/gdb-ppc-ptrace.diff @@ -0,0 +1,19 @@ +Index: gdb-7.4.50.20120603/gdb/ppc-linux-nat.c +=================================================================== +--- gdb-7.4.50.20120603.orig/gdb/ppc-linux-nat.c 2012-06-01 00:07:31.000000000 +0200 ++++ gdb-7.4.50.20120603/gdb/ppc-linux-nat.c 2012-06-12 15:17:59.537703950 +0200 +@@ -1418,8 +1418,12 @@ have_ptrace_booke_interface (void) + if (tid == 0) + tid = PIDGET (inferior_ptid); + +- /* Check for kernel support for BOOKE debug registers. */ +- if (ptrace (PPC_PTRACE_GETHWDBGINFO, tid, 0, &booke_debug_info) >= 0) ++ /* Check for kernel support for BOOKE debug registers. ++ As a workaround while the new ptrace interface is not accepted ++ in upstream kernel, server processors still should use the old ++ interface. */ ++ if (ptrace (PPC_PTRACE_GETHWDBGINFO, tid, 0, &booke_debug_info) >= 0 ++ && ppc_linux_get_hwcap () & PPC_FEATURE_BOOKE) + { + /* Check whether ptrace BOOKE interface is functional and + provides any supported feature. */ diff --git a/gdb-prelink-rela.patch b/gdb-prelink-rela.patch deleted file mode 100644 index d4f8dc0..0000000 --- a/gdb-prelink-rela.patch +++ /dev/null @@ -1,141 +0,0 @@ -http://sourceware.org/ml/gdb-patches/2011-02/msg00630.html -Subject: [patch] [i386] Fix {,un}prelinked libraries for attach/core-load - -Hi, - -please see comments in the patch. The adjusted testcase FAILs on i386. - -"Prelink", March 4, 2004 - by Jakub Jelinek: - http://people.redhat.com/jakub/prelink.pdf - primarily section 7 - REL to RELA conversion - -An example of unprelinked -> prelinked library change: - Program Headers: - Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align -- LOAD 0x000000 0x00000000 0x00000000 0x00538 0x00538 R E 0x1000 -- LOAD 0x000538 0x00001538 0x00001538 0x00100 0x00110 RW 0x1000 -- DYNAMIC 0x000550 0x00001550 0x00001550 0x000c8 0x000c8 RW 0x4 -- NOTE 0x0000f4 0x000000f4 0x000000f4 0x00024 0x00024 R 0x4 -- GNU_EH_FRAME 0x0004e8 0x000004e8 0x000004e8 0x00014 0x00014 R 0x4 -+ LOAD 0x000000 0x411b3000 0x411b3000 0x00558 0x00558 R E 0x1000 -+ LOAD 0x000558 0x411b4558 0x411b4558 0x00100 0x00110 RW 0x1000 -+ DYNAMIC 0x000570 0x411b4570 0x411b4570 0x000c8 0x000c8 RW 0x4 -+ NOTE 0x0000f4 0x411b30f4 0x411b30f4 0x00024 0x00024 R 0x4 -+ GNU_EH_FRAME 0x000508 0x411b3508 0x411b3508 0x00014 0x00014 R 0x4 - GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x00000 RW 0x4 - -So far GDB expected all such displacements will be always PAGE_SIZE aligned. -This applies for example for re-prelinking of an already prelinked file. -But it does not apply for prelinking of an unprelinked file or unprelinking of -a prelinked file, there can be arbitrary displacement. - -It affects i386 (=i686, prelink doc reports also ARM and MIPS) which uses REL. -x86_64 always uses RELA, therefore I have not noticed it so far. i386 still -has to be supported. - -This affects both attachment to a PID and core file loads. - -This applies in real world if you transfer a core file between hosts and try to -backtrace them, libraries of both hosts may differ whether they are / are not -prelinked. - -I could implement some (displacement-forgiving and prelink-modifications -forgiving) comparison of both DYNAMIC segments found. But I do not think it is -useful, if the DYNAMIC address from linkmap vs. bfd do not match it is still a -better chance to try a displacement to make them match. Keeping the file -relocation cannot work anyway when the DYNAMIC address is verified as wrong. - -No regressions on {x86_64,x86_64-m32,i686}-fedora15-linux-gnu. - -Mostly do you agree the DYNAMIC content does not have to be verifed? -Do you have any comments on the in-code long comments? - - -Thanks, -Jan - - -gdb/ -2011-02-22 Jan Kratochvil - - Fix libraries displacement if they change whether they were prelinked. - * solib-svr4.c (LM_ADDR_CHECK): Set L_ADDR even if the DYNAMIC pointer - does not match. Comment why. - -gdb/testsuite/ -2011-02-22 Jan Kratochvil - - * gdb.base/break-interp-lib.c (v, vptr): New variables. - * gdb.base/break-interp.exp (test_attach): New comment. - ---- a/gdb/solib-svr4.c -+++ b/gdb/solib-svr4.c -@@ -237,11 +237,11 @@ LM_ADDR_CHECK (struct so_list *so, bfd *abfd) - - Even on PPC it must be zero-aligned at least for MINPAGESIZE. */ - -+ l_addr = l_dynaddr - dynaddr; -+ - if ((l_addr & (minpagesize - 1)) == 0 - && (l_addr & align) == ((l_dynaddr - dynaddr) & align)) - { -- l_addr = l_dynaddr - dynaddr; -- - if (info_verbose) - printf_unfiltered (_("Using PIC (Position Independent Code) " - "prelink displacement %s for \"%s\".\n"), -@@ -249,9 +249,20 @@ LM_ADDR_CHECK (struct so_list *so, bfd *abfd) - so->so_name); - } - else -- warning (_(".dynamic section for \"%s\" " -- "is not at the expected address " -- "(wrong library or version mismatch?)"), so->so_name); -+ { -+ /* There is no way to verify the library file matches. prelink -+ can during prelinking of an unprelinked file (or unprelinking -+ of a prelinked file) shift the DYNAMIC segment by arbitrary -+ offset without any page size alignment. There is no way to -+ find out the ELF header and/or Program Headers for a limited -+ verification if it they match. One could do a verification -+ of the DYNAMIC segment. Still the found address is the best -+ one GDB could find. */ -+ -+ warning (_(".dynamic section for \"%s\" " -+ "is not at the expected address " -+ "(wrong library or version mismatch?)"), so->so_name); -+ } - } - - set_addr: ---- a/gdb/testsuite/gdb.base/break-interp-lib.c -+++ b/gdb/testsuite/gdb.base/break-interp-lib.c -@@ -20,6 +20,10 @@ - #include - #include - -+/* Force REL->RELA conversion on i386, see "Prelink", March 4, 2004. */ -+volatile int v[2]; -+volatile int *vptr = &v[1]; -+ - void - libfunc (const char *action) - { ---- a/gdb/testsuite/gdb.base/break-interp.exp -+++ b/gdb/testsuite/gdb.base/break-interp.exp -@@ -352,6 +352,14 @@ proc test_attach {file displacement {relink_args ""}} { - # test simplicity, we merged this test and the test above by not - # restoring $INTERP after $EXEC prelink. $INTERP gets restored - # later below. -+ # -+ # `(wrong library or version mismatch?)' messages are printed for -+ # $binfile_lib on platforms converting REL->RELA relocations by -+ # prelink (such as on i386). There is no reliable way to verify -+ # the library file matches the running library in such case but -+ # GDB at least attempts to set the right displacement. We test -+ # `libfunc' is present in the backtrace and therefore the -+ # displacement has been guessed right. - - if [prelink$relink $relink_args [file tail $exec]] { - # /proc/PID/exe cannot be loaded as it is "EXECNAME (deleted)". - diff --git a/gdb-python-rdynamic.patch b/gdb-python-rdynamic.patch new file mode 100644 index 0000000..2771fd2 --- /dev/null +++ b/gdb-python-rdynamic.patch @@ -0,0 +1,44 @@ +--- a/gdb/configure ++++ b/gdb/configure +@@ -14631,6 +14631,10 @@ rm -f core conftest.err conftest.$ac_objext \ + # Problem does not happen for the recommended libpythonX.Y.so linkage. + old_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $PYTHON_CFLAGS" ++ old_CPPFLAGS="$CPPFLAGS" ++ CPPFLAGS="$CPPFLAGS $PYTHON_CPPFLAGS" ++ old_LIBS="$LIBS" ++ LIBS="$LIBS $PYTHON_LIBS" + if test "$cross_compiling" = yes; then : + true + else +@@ -14657,6 +14661,8 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + fi + + CFLAGS="$old_CFLAGS" ++ CPPFLAGS="$old_CPPFLAGS" ++ LIBS="$old_LIBS" + fi + LDFLAGS="$old_LDFLAGS" + fi +--- a/gdb/configure.ac ++++ b/gdb/configure.ac +@@ -1576,6 +1576,10 @@ if test "${gdb_native}" = yes; then + # Problem does not happen for the recommended libpythonX.Y.so linkage. + old_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $PYTHON_CFLAGS" ++ old_CPPFLAGS="$CPPFLAGS" ++ CPPFLAGS="$CPPFLAGS $PYTHON_CPPFLAGS" ++ old_LIBS="$LIBS" ++ LIBS="$LIBS $PYTHON_LIBS" + AC_RUN_IFELSE( + AC_LANG_PROGRAM( + [#include "]${have_libpython}[/Python.h"], +@@ -1586,6 +1590,8 @@ if test "${gdb_native}" = yes; then + return err == 0 ? 0 : 1;]), + [dynamic_list=true], [], [true]) + CFLAGS="$old_CFLAGS" ++ CPPFLAGS="$old_CPPFLAGS" ++ LIBS="$old_LIBS" + fi + LDFLAGS="$old_LDFLAGS" + fi diff --git a/gdb-readline62-ask-more-rh.patch b/gdb-readline62-ask-more-rh.patch new file mode 100644 index 0000000..4b679e1 --- /dev/null +++ b/gdb-readline62-ask-more-rh.patch @@ -0,0 +1,14 @@ +--- gdb-7.4.50.20120103-orig/gdb/event-top.c 2012-01-11 15:14:01.426206439 +0100 ++++ gdb-7.4.50.20120103/gdb/event-top.c 2012-01-11 15:18:29.766577551 +0100 +@@ -982,6 +982,11 @@ set_async_editing_command (char *args, i + void + gdb_setup_readline (void) + { ++ /* 6.2 regression: no longed asks for --more-- ++ gdb.base/readline-ask.exp ++ https://bugzilla.redhat.com/show_bug.cgi?id=701131 */ ++ RL_SETSTATE (RL_STATE_FEDORA_GDB); ++ + /* This function is a noop for the sync case. The assumption is + that the sync setup is ALL done in gdb_init, and we would only + mess it up here. The sync stuff should really go away over diff --git a/gdb-runtest-pie-override.patch b/gdb-runtest-pie-override.patch new file mode 100644 index 0000000..3373410 --- /dev/null +++ b/gdb-runtest-pie-override.patch @@ -0,0 +1,40 @@ +make check//unix/-fPIE/-pie RUNTESTFLAGS=solib-display.exp + +gcc -fpic -c -fPIE -pie -o x.o x.c +/usr/lib/gcc/x86_64-redhat-linux/4.6.1/../../../../lib64/Scrt1.o: In function `_start': +(.text+0x20): undefined reference to `main' + +=> Change the order for overrides. + +One has to also use -fPIC rather than -fPIE, -fPIC is stronger. + +The correct way would be: +make check//unix RUNTESTFLAGS='CC_FOR_TARGET=gcc\ -fPIC\ -pie CXX_FOR_TARGET=g++\ -fPIC\ -pie solib-display.exp' + +But there is a problem with testsuite.unix non-unique subdir name and also +a problem with make -j parallelization of the testsuite. + +--- gdb-7.3.50.20110722/gdb/testsuite/lib/future.exp 2011-10-11 16:44:05.000000000 +0200 ++++ gdb-7.3.50.20110722/gdb/testsuite/lib/future.exp 2011-10-11 16:44:10.000000000 +0200 +@@ -77,6 +77,10 @@ proc gdb_default_target_compile {source + set ldflags "" + set dest [target_info name] + ++ if {[board_info $dest exists multilib_flags]} { ++ append add_flags " [board_info $dest multilib_flags]" ++ } ++ + if {[info exists CFLAGS_FOR_TARGET]} { + append add_flags " $CFLAGS_FOR_TARGET" + } +@@ -333,10 +337,6 @@ proc gdb_default_target_compile {source + } + } + +- if {[board_info $dest exists multilib_flags]} { +- append add_flags " [board_info $dest multilib_flags]" +- } +- + verbose "doing compile" + + set sources "" diff --git a/gdb-stale-frame_info.patch b/gdb-stale-frame_info.patch new file mode 100644 index 0000000..5b56ab3 --- /dev/null +++ b/gdb-stale-frame_info.patch @@ -0,0 +1,174 @@ +http://sourceware.org/ml/gdb-patches/2012-04/msg00058.html +Subject: [downstream patch FYI] workaround stale frame_info * (PR 13866) + +Hi, + +I did not look at which commit caused this regression but apparently it was +introduced at least with multi-inferiors. + +I understand this fix is not right fix of the crash; but in most GDB cases one +does not use multi-inferior so why to regress single-inferior by it. +Some more simple solutions still fix the single-inferior mode but they +regressed the multi-inferior mode + gdb.threads/no-unwaited-for-left.exp + gdb.multi/base.exp +so I had to put there that sorting magic. + +With proper C++ sanity check of stale live frame_info references the testcase +would be simple without the "frame_garbage_collection" reproducer below. +It is also reproducible just with valgrind but regularly running the whole +testsuite under valgrind I did not find feasible. + +No regressions on {x86_64,x86_64-m32,i686}-fedora17-linux-gnu. + + +Thanks, +Jan + + +gdb/ +2012-04-04 Jan Kratochvil + + Workaround PR backtrace/13866. + * progspace.c (switch_to_program_space_and_thread): Try not to call + switch_to_thread. + +--- a/gdb/progspace.c ++++ b/gdb/progspace.c +@@ -481,17 +481,28 @@ save_current_space_and_thread (void) + void + switch_to_program_space_and_thread (struct program_space *pspace) + { +- struct inferior *inf; ++ struct inferior *inf = current_inferior (); + +- inf = find_inferior_for_program_space (pspace); ++ if (inf->pspace != pspace) ++ inf = find_inferior_for_program_space (pspace); + if (inf != NULL) + { +- struct thread_info *tp; ++ struct thread_info *tp, *current_tp = NULL; ++ ++ if (ptid_get_pid (inferior_ptid) == inf->pid) ++ current_tp = find_thread_ptid (inferior_ptid); + + tp = any_live_thread_of_process (inf->pid); + if (tp != NULL) + { +- switch_to_thread (tp->ptid); ++ /* Prefer primarily thread not THREAD_EXITED and secondarily thread ++ not EXECUTING. */ ++ if (current_tp == NULL ++ || (tp->state != THREAD_EXITED ++ && current_tp->state == THREAD_EXITED) ++ || (!tp->executing && current_tp->executing)) ++ switch_to_thread (tp->ptid); ++ + /* Switching thread switches pspace implicitly. We're + done. */ + return; + + +Reproducer with: +./gdb -nx ~/t/thread -ex 'b 24' -ex r -ex 'until 25' +Breakpoint 1, main () at /home/jkratoch/t/thread.c:24 +24 v++; +Segmentation fault (core dumped) + +#include +#include +#include + +static int v; + +static void *start (void *arg) +{ + v++; + v++; + v++; + v++; + sleep (100); + return arg; +} + +int main (void) +{ + pthread_t thread1; + int i; + + i = pthread_create (&thread1, NULL, start, NULL); + assert (i == 0); + v++; + v++; + v++; + v++; + i = pthread_join (thread1, NULL); + assert (i == 0); + + return 0; +} +### --- a/gdb/frame.c +### +++ b/gdb/frame.c +### @@ -1522,12 +1522,30 @@ frame_observer_target_changed (struct target_ops *target) +### reinit_frame_cache (); +### } +### +### +typedef struct obstack obstack_s; +### +DEF_VEC_O (obstack_s); +### +static VEC (obstack_s) *frame_poison_vec; +### + +### +void frame_garbage_collection (void); +### +void +### +frame_garbage_collection (void) +### +{ +### + struct obstack *obstack_p; +### + int ix; +### + +### + for (ix = 0; VEC_iterate (obstack_s, frame_poison_vec, ix, obstack_p); ix++) +### + obstack_free (obstack_p, 0); +### + +### + VEC_free (obstack_s, frame_poison_vec); +### + frame_poison_vec = NULL; +### +} +### + +### /* Flush the entire frame cache. */ +### +### void +### reinit_frame_cache (void) +### { +### - struct frame_info *fi; +### + struct frame_info *fi, *fi_prev; +### +### /* Tear down all frame caches. */ +### for (fi = current_frame; fi != NULL; fi = fi->prev) +### @@ -1538,8 +1556,14 @@ reinit_frame_cache (void) +### fi->base->unwind->dealloc_cache (fi, fi->base_cache); +### } +### +### + for (fi = current_frame; fi != NULL; fi = fi_prev) +### + { +### + fi_prev = fi->prev; +### + memset (fi, 0, sizeof (*fi)); +### + } +### + VEC_safe_push (obstack_s, frame_poison_vec, &frame_cache_obstack); +### + +### /* Since we can't really be sure what the first object allocated was. */ +### - obstack_free (&frame_cache_obstack, 0); +### obstack_init (&frame_cache_obstack); +### +### if (current_frame != NULL) +### --- a/gdb/top.c +### +++ b/gdb/top.c +### @@ -359,6 +359,11 @@ prepare_execute_command (void) +### if (non_stop) +### target_dcache_invalidate (); +### +### + { +### + extern void frame_garbage_collection (void); +### + frame_garbage_collection (); +### + } +### + +### return cleanup; +### } +### diff --git a/gdb-stap-double-free.patch b/gdb-stap-double-free.patch deleted file mode 100644 index 22426b9..0000000 --- a/gdb-stap-double-free.patch +++ /dev/null @@ -1,57 +0,0 @@ ---- a/gdb/stap-probe.c -+++ b/gdb/stap-probe.c -@@ -355,9 +355,7 @@ stap_free_args_info (void *args_info_ptr) - int i; - - for (i = 0; i < a->n_args; i++) -- { -- xfree (a->arg[i].arg_str); -- } -+ xfree (a->arg[i].arg_str); - - xfree (a->arg); - xfree (a); -@@ -401,6 +399,7 @@ stap_parse_probe_arguments (struct stap_probe *probe) - return; - - args_info = xmalloc (sizeof (struct stap_args_info)); -+ args_info->n_args = 0; - back_to = make_cleanup (stap_free_args_info, args_info); - args_info->arg = xcalloc (STAP_MAX_ARGS, sizeof (struct stap_probe_arg)); - -@@ -493,6 +492,7 @@ stap_parse_probe_arguments (struct stap_probe *probe) - - args_info->arg[current_arg].arg_str - = savestring (start, cur - start); -+ ++args_info->n_args; - /* Start it over again. */ - cur = skip_spaces ((char *) cur); - current_state = NEW_ARG; -@@ -513,7 +513,6 @@ stap_parse_probe_arguments (struct stap_probe *probe) - } - } - -- args_info->n_args = current_arg + 1; - args_info->arg = xrealloc (args_info->arg, - args_info->n_args - * sizeof (struct stap_probe_arg)); -@@ -1526,8 +1525,9 @@ stap_free_parsed_args (struct stap_args_info *parsed_args) - return; - - for (i = 0; i < parsed_args->n_args; i++) -- xfree (parsed_args->arg); -+ xfree (parsed_args->arg[i].arg_str); - -+ xfree (parsed_args->arg); - xfree (parsed_args); - } - -@@ -1859,7 +1859,7 @@ parse_stap_probe (char **argptr, struct linespec_result *canonical) - if (canonical) - { - canonical->canonical = xrealloc (canonical->canonical, -- result.nelts * sizeof (char **)); -+ result.nelts * sizeof (char *)); - canonical->canonical[result.nelts - 1] = xstrdup (full_arg); - } - } diff --git a/gdb-test-pp-hint-error.patch b/gdb-test-pp-hint-error.patch deleted file mode 100644 index fcfd4d3..0000000 --- a/gdb-test-pp-hint-error.patch +++ /dev/null @@ -1,98 +0,0 @@ -http://sourceware.org/ml/gdb-patches/2011-01/msg00016.html -Subject: [patch] New testcase: py-prettyprint.exp: print hint_error - -Hi, - -PASS: gdb.python/py-prettyprint.exp: print hint_error -for - FYI: fix buglet in gdbpy_get_display_hint - http://sourceware.org/ml/gdb-patches/2010-07/msg00190.html - http://sourceware.org/ml/gdb-cvs/2010-07/msg00061.html - -I would check it in as obvious but the 2011 ChangeLog move process has to be -done first. So to be checked in later. - - -Thanks, -Jan - - -gdb/testsuite/ -2011-01-01 Jan Kratochvil - - * gdb.python/py-prettyprint.c (struct hint_error): New. - (main): New variable hint_error. - * gdb.python/py-prettyprint.exp (run_lang_tests): New testcase - "print hint_error". - * gdb.python/py-prettyprint.py (class pp_hint_error): New. - (register_pretty_printers): Register it. - -Index: gdb-7.2.90.20110411/gdb/testsuite/gdb.python/py-prettyprint.c -=================================================================== ---- gdb-7.2.90.20110411.orig/gdb/testsuite/gdb.python/py-prettyprint.c 2011-03-31 21:59:26.000000000 +0200 -+++ gdb-7.2.90.20110411/gdb/testsuite/gdb.python/py-prettyprint.c 2011-04-11 19:42:10.000000000 +0200 -@@ -44,6 +44,10 @@ struct lazystring { - const char *lazy_str; - }; - -+struct hint_error { -+ int x; -+}; -+ - #ifdef __cplusplus - struct S : public s { - int zs; -@@ -215,6 +219,7 @@ main () - nostring_type nstype, nstype2; - struct ns ns, ns2; - struct lazystring estring, estring2; -+ struct hint_error hint_error; - - nstype.elements = narray; - nstype.len = 0; -Index: gdb-7.2.90.20110411/gdb/testsuite/gdb.python/py-prettyprint.exp -=================================================================== ---- gdb-7.2.90.20110411.orig/gdb/testsuite/gdb.python/py-prettyprint.exp 2011-03-07 17:03:03.000000000 +0100 -+++ gdb-7.2.90.20110411/gdb/testsuite/gdb.python/py-prettyprint.exp 2011-04-11 19:41:56.000000000 +0200 -@@ -97,6 +97,8 @@ proc run_lang_tests {lang} { - gdb_test_no_output "python pp_ls_encoding = 'UTF-8'" - gdb_test "print estring2" "\"embedded \", " - -+ gdb_test "print hint_error" "Exception: hint failed\r\nhint_error_val" -+ - gdb_test "print c" " = container \"container\" with 2 elements = {$nl *.0. = 23,$nl *.1. = 72$nl}" - - gdb_test "print nstype" " = {$nl *.0. = 7,$nl *.1. = 42$nl}" -Index: gdb-7.2.90.20110411/gdb/testsuite/gdb.python/py-prettyprint.py -=================================================================== ---- gdb-7.2.90.20110411.orig/gdb/testsuite/gdb.python/py-prettyprint.py 2011-03-31 21:59:26.000000000 +0200 -+++ gdb-7.2.90.20110411/gdb/testsuite/gdb.python/py-prettyprint.py 2011-04-11 19:41:56.000000000 +0200 -@@ -161,6 +161,18 @@ class pp_ls: - def display_hint (self): - return 'string' - -+class pp_hint_error: -+ "Throw error from display_hint" -+ -+ def __init__(self, val): -+ self.val = val -+ -+ def to_string(self): -+ return 'hint_error_val' -+ -+ def display_hint (self): -+ raise Exception("hint failed") -+ - class pp_outer: - "Print struct outer" - -@@ -246,6 +258,9 @@ def register_pretty_printers (): - pretty_printers_dict[re.compile ('^struct outerstruct$')] = pp_outer - pretty_printers_dict[re.compile ('^outerstruct$')] = pp_outer - -+ pretty_printers_dict[re.compile ('^struct hint_error$')] = pp_hint_error -+ pretty_printers_dict[re.compile ('^hint_error$')] = pp_hint_error -+ - pretty_printers_dict = {} - - register_pretty_printers () diff --git a/gdb-unused-revert.patch b/gdb-unused-revert.patch deleted file mode 100644 index b464bf7..0000000 --- a/gdb-unused-revert.patch +++ /dev/null @@ -1,44 +0,0 @@ -[RFA/commit 5/5] Add -Wunused-function to compile flags. -http://sourceware.org/ml/gdb-patches/2010-01/msg00371.html -http://sourceware.org/ml/gdb-cvs/2010-01/msg00163.html - -REVERTED - ---- src/gdb/configure.ac 2010/01/15 00:34:37 1.112 -+++ src/gdb/configure.ac 2010/01/19 09:52:31 1.113 -@@ -1544,8 +1544,7 @@ - # gdb/doc/gdbint.texinfo. - build_warnings="-Wall -Wdeclaration-after-statement -Wpointer-arith \ - -Wformat-nonliteral -Wno-pointer-sign \ ---Wno-unused -Wunused-value -Wunused-function \ ---Wno-switch -Wno-char-subscripts" -+-Wno-unused -Wunused-value -Wno-switch -Wno-char-subscripts" - - # Enable -Wno-format by default when using gcc on mingw since many - # GCC versions complain about %I64. ---- src/gdb/configure 2010/01/15 00:34:37 1.297 -+++ src/gdb/configure 2010/01/19 09:52:32 1.298 -@@ -13435,8 +13435,7 @@ - # gdb/doc/gdbint.texinfo. - build_warnings="-Wall -Wdeclaration-after-statement -Wpointer-arith \ - -Wformat-nonliteral -Wno-pointer-sign \ ---Wno-unused -Wunused-value -Wunused-function \ ---Wno-switch -Wno-char-subscripts" -+-Wno-unused -Wunused-value -Wno-switch -Wno-char-subscripts" - - # Enable -Wno-format by default when using gcc on mingw since many - # GCC versions complain about %I64. -### src/gdb/ChangeLog 2010/01/19 09:50:48 1.11271 -### src/gdb/ChangeLog 2010/01/19 09:52:33 1.11272 -## -1,11 +1,5 @@ - 2010-01-19 Joel Brobecker - -- Add -Wunused-function to compile flags. -- * configure.ac: Add -Wunused-function to build_warnings. -- * configure: Regenerate. -- --2010-01-19 Joel Brobecker -- - "delete" ada-lex.c:input function, not used. - * ada-lex.l: #define YY_NO_INPUT. - diff --git a/gdb-upstream.patch b/gdb-upstream.patch new file mode 100644 index 0000000..105c4d3 --- /dev/null +++ b/gdb-upstream.patch @@ -0,0 +1,293 @@ +http://sourceware.org/ml/gdb-patches/2012-06/msg00065.html +Subject: [commit 1/2] testsuite: code_elim.exp: unique names + +Hi, + +this is just removal of non-unique test names and one small simplification. + +Checked in. + + +Thanks, +Jan + + +http://sourceware.org/ml/gdb-cvs/2012-06/msg00011.html + +### src/gdb/testsuite/ChangeLog 2012/05/28 20:37:29 1.3209 +### src/gdb/testsuite/ChangeLog 2012/06/03 17:06:04 1.3210 +## -1,3 +1,16 @@ ++2012-06-03 Jan Kratochvil ++ ++ * gdb.base/code_elim.exp (add-symbol-file ${testfile1} 0x100000): ++ Simplify it to ... ++ (symbol-file ${testfile1}): ... here. ++ (test eliminated var my_global_symbol) ++ (test eliminated var my_static_symbol) ++ (test eliminated var my_global_func, get address of main): Wrap them to ++ 'single psymtabs' and 'single symtabs' ++ (get address of my_global_symbol, get address of my_static_symbol) ++ (get address of my_global_func, get address of main): Wrap them to ++ 'order1' and 'order2'. ++ + 2012-05-28 Jan Kratochvil + + * gdb.server/solib-list-lib.c: New file. +--- src/gdb/testsuite/gdb.base/code_elim.exp 2012/01/16 16:21:44 1.4 ++++ src/gdb/testsuite/gdb.base/code_elim.exp 2012/06/03 17:06:04 1.5 +@@ -95,16 +95,16 @@ + gdb_exit + gdb_start + +-gdb_test "add-symbol-file ${binfile1} 0x100000" \ ++gdb_test "symbol-file ${binfile1}" \ + "Reading symbols from .*${testfile1}\\.\\.\\.done\\.(|\r\nUsing host libthread_db library .*libthread_db.so.*\\.)" \ +- "add-symbol-file ${testfile1} 0x100000" \ +- "add symbol table from file \".*${testfile1}\" at\[ \t\r\n\]+\.text_addr = 0x100000\[\r\n\]+\\(y or n\\) " \ +- "y" ++ "symbol-file ${testfile1}" + +-test_eliminated_var my_global_symbol +-test_eliminated_var my_static_symbol +-test_eliminated_var my_global_func +-not_null_var_address main ++with_test_prefix "single psymtabs" { ++ test_eliminated_var my_global_symbol ++ test_eliminated_var my_static_symbol ++ test_eliminated_var my_global_func ++ not_null_var_address main ++} + + # Same thing for symtabs + +@@ -115,10 +115,12 @@ + gdb_start + set GDBFLAGS $saved_gdbflags + +-test_eliminated_var my_global_symbol +-test_eliminated_var my_static_symbol +-test_eliminated_var my_global_func +-not_null_var_address main ++with_test_prefix "single symtabs" { ++ test_eliminated_var my_global_symbol ++ test_eliminated_var my_static_symbol ++ test_eliminated_var my_global_func ++ not_null_var_address main ++} + + # binfile2 contains the symbols that have been eliminated in binfile1. Check + # the eliminated symbols does not hide these valid ones. +@@ -138,10 +140,12 @@ + "add symbol table from file \".*${testfile2}\" at\[ \t\r\n\]+\.text_addr = 0x200000\[\r\n\]+\\(y or n\\) " \ + "y" + +-not_null_var_address my_global_symbol +-not_null_var_address my_static_symbol +-not_null_var_address my_global_func +-not_null_var_address main ++with_test_prefix "order1" { ++ not_null_var_address my_global_symbol ++ not_null_var_address my_static_symbol ++ not_null_var_address my_global_func ++ not_null_var_address main ++} + + # Same thing, but loading binfile2 before binfile1. + +@@ -160,9 +164,9 @@ + "add symbol table from file \".*${testfile1}\" at\[ \t\r\n\]+\.text_addr = 0x100000\[\r\n\]+\\(y or n\\) " \ + "y" + +-not_null_var_address my_global_symbol +-not_null_var_address my_static_symbol +-not_null_var_address my_global_func +-not_null_var_address main +- +- ++with_test_prefix "order2" { ++ not_null_var_address my_global_symbol ++ not_null_var_address my_static_symbol ++ not_null_var_address my_global_func ++ not_null_var_address main ++} + + + +http://sourceware.org/ml/gdb-patches/2012-06/msg00066.html +Subject: [commit 2/2] testsuite: code_elim.exp: Fix false FAIL + +Hi, + +with Fedora 18 x86_64 (Rawhide) there is a false FAIl since: +2167931cf70f91206efb8b01e848a55d82a347ce is the first bad commit +Author: Tom Tromey +Date: Fri May 18 15:31:39 2012 +0000 +http://sourceware.org/bugzilla/show_bug.cgi?id=13907 + + print &my_global_symbol +-$1 = (int *) 0x804a004 +-(gdb) PASS: gdb.base/code_elim.exp: get address of my_global_symbol ++$1 = (int *) 0x804a004 ++(gdb) FAIL: gdb.base/code_elim.exp: get address of my_global_symbol + +Nothing really changed, just GDB now prints and the testcase +expects either none or suffix. + +This is because the two symbol files (their sections .data/.bss) have +overlapped so GDB chooses randomly which symbol to display. And since +Fedora 18 GCC puts there that "completed.5732" symbol. + +This may be because add-symbol-file FILE ADDR relocates to ADDR on the .text +section and leaves other sections at their original place, which is IMO a bit +unexpected; it is a FAQ people expect more ADDR to be relocation displacement +(and not relative to .text and not limited to .text). But this is really +outside of the scope of this testcase false FAIL. + +Checked in. + + +Thanks, +Jan + + +http://sourceware.org/ml/gdb-cvs/2012-06/msg00012.html + +### src/gdb/testsuite/ChangeLog 2012/06/03 17:06:04 1.3210 +### src/gdb/testsuite/ChangeLog 2012/06/03 17:10:28 1.3211 +## -11,6 +11,16 @@ + (get address of my_global_func, get address of main): Wrap them to + 'order1' and 'order2'. + ++ * gdb.base/code_elim.exp ++ (add-symbol-file ${testfile1} 0x100000) ++ (add-symbol-file ${testfile2} 0x200000): Wrap them to 'order1' and ++ 'order2'. ++ (order1: add-symbol-file ${testfile1} 0x100000) ++ (order1: add-symbol-file ${testfile2} 0x200000) ++ (order2: add-symbol-file ${testfile2} 0x200000) ++ (order2: add-symbol-file ${testfile1} 0x100000): Add -s .data and -s ++ .bss as appropriate. ++ + 2012-05-28 Jan Kratochvil + + * gdb.server/solib-list-lib.c: New file. +--- src/gdb/testsuite/gdb.base/code_elim.exp 2012/06/03 17:06:04 1.5 ++++ src/gdb/testsuite/gdb.base/code_elim.exp 2012/06/03 17:10:28 1.6 +@@ -128,19 +128,19 @@ + gdb_exit + gdb_start + +-gdb_test "add-symbol-file ${binfile1} 0x100000" \ +- "Reading symbols from .*${testfile1}\\.\\.\\.done\\." \ +- "add-symbol-file ${testfile1} 0x100000" \ +- "add symbol table from file \".*${testfile1}\" at\[ \t\r\n\]+\.text_addr = 0x100000\[\r\n\]+\\(y or n\\) " \ +- "y" +- +-gdb_test "add-symbol-file ${binfile2} 0x200000" \ +- "Reading symbols from .*${testfile2}\\.\\.\\.done\\." \ +- "add-symbol-file ${testfile2} 0x200000" \ +- "add symbol table from file \".*${testfile2}\" at\[ \t\r\n\]+\.text_addr = 0x200000\[\r\n\]+\\(y or n\\) " \ +- "y" +- + with_test_prefix "order1" { ++ gdb_test "add-symbol-file ${binfile1} 0x100000 -s .bss 0x120000" \ ++ "Reading symbols from .*${testfile1}\\.\\.\\.done\\." \ ++ "add-symbol-file ${testfile1} 0x100000" \ ++ "add symbol table from file \".*${testfile1}\" at.*\\(y or n\\) " \ ++ "y" ++ ++ gdb_test "add-symbol-file ${binfile2} 0x200000 -s .data 0x210000 -s .bss 0x220000" \ ++ "Reading symbols from .*${testfile2}\\.\\.\\.done\\." \ ++ "add-symbol-file ${testfile2} 0x200000" \ ++ "add symbol table from file \".*${testfile2}\" at.*\\(y or n\\) " \ ++ "y" ++ + not_null_var_address my_global_symbol + not_null_var_address my_static_symbol + not_null_var_address my_global_func +@@ -152,19 +152,19 @@ + gdb_exit + gdb_start + +-gdb_test "add-symbol-file ${binfile2} 0x200000" \ +- "Reading symbols from .*${testfile2}\\.\\.\\.done\\." \ +- "add-symbol-file ${testfile2} 0x200000" \ +- "add symbol table from file \".*${testfile2}\" at\[ \t\r\n\]+\.text_addr = 0x200000\[\r\n\]+\\(y or n\\) " \ +- "y" +- +-gdb_test "add-symbol-file ${binfile1} 0x100000" \ +- "Reading symbols from .*${testfile1}\\.\\.\\.done\\." \ +- "add-symbol-file ${testfile1} 0x100000" \ +- "add symbol table from file \".*${testfile1}\" at\[ \t\r\n\]+\.text_addr = 0x100000\[\r\n\]+\\(y or n\\) " \ +- "y" +- + with_test_prefix "order2" { ++ gdb_test "add-symbol-file ${binfile2} 0x200000 -s .data 0x210000 -s .bss 0x220000" \ ++ "Reading symbols from .*${testfile2}\\.\\.\\.done\\." \ ++ "add-symbol-file ${testfile2} 0x200000" \ ++ "add symbol table from file \".*${testfile2}\" at.*\\(y or n\\) " \ ++ "y" ++ ++ gdb_test "add-symbol-file ${binfile1} 0x100000 -s .bss 0x120000" \ ++ "Reading symbols from .*${testfile1}\\.\\.\\.done\\." \ ++ "add-symbol-file ${testfile1} 0x100000" \ ++ "add symbol table from file \".*${testfile1}\" at.*\\(y or n\\) " \ ++ "y" ++ + not_null_var_address my_global_symbol + not_null_var_address my_static_symbol + not_null_var_address my_global_func + + + +http://sourceware.org/ml/gdb-cvs/2012-06/msg00047.html + +### src/gdb/ChangeLog 2012/06/06 06:04:42 1.14330 +### src/gdb/ChangeLog 2012/06/06 16:57:34 1.14331 +## -1,3 +1,8 @@ ++2012-06-06 Jan Kratochvil ++ ++ * configure.ac: Move development=true below AC_INIT. ++ * configure: Regenerate. ++ + 2012-06-05 Stan Shebs + + * mi/mi-interp.c (mi_interpreter_init): Set raw_stdout from +--- src/gdb/configure 2012/06/01 18:20:18 1.366 ++++ src/gdb/configure 2012/06/06 16:57:36 1.367 +@@ -2683,6 +2683,11 @@ + + + ++# Provide more thorough testing by -lmcheck. ++# Set it to 'true' for development snapshots, 'false' for releases or ++# pre-releases. ++development=true ++ + ac_ext=c + ac_cpp='$CPP $CPPFLAGS' + ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +--- src/gdb/configure.ac 2012/06/01 18:20:18 1.177 ++++ src/gdb/configure.ac 2012/06/06 16:57:38 1.178 +@@ -18,16 +18,16 @@ + + dnl Process this file with autoconf to produce a configure script. + +-dnl Provide more thorough testing by -lmcheck. +-dnl Set it to 'true' for development snapshots, 'false' for releases or +-dnl pre-releases. +-development=true +- + AC_PREREQ(2.59)dnl + AC_INIT(main.c) + AC_CONFIG_HEADER(config.h:config.in) + AM_MAINTAINER_MODE + ++# Provide more thorough testing by -lmcheck. ++# Set it to 'true' for development snapshots, 'false' for releases or ++# pre-releases. ++development=true ++ + AC_PROG_CC + AC_USE_SYSTEM_EXTENSIONS + ACX_LARGEFILE diff --git a/gdb-x86-onstack-1of2.patch b/gdb-x86-onstack-1of2.patch new file mode 100644 index 0000000..9e5d428 --- /dev/null +++ b/gdb-x86-onstack-1of2.patch @@ -0,0 +1,119 @@ +http://sourceware.org/ml/gdb-patches/2012-03/msg00357.html +Subject: [patch 1/2] Fix gdb.cp/gdb2495.exp regression with gcc-4.7 #5 + +Hi, + +posted as a new thread. + +As described in + cancel: [patch] Fix gdb.cp/gdb2495.exp regression with gcc-4.7 #4 [Re: [revert] Regression on PowerPC] + http://sourceware.org/ml/gdb-patches/2012-03/msg00322.html +just ON_STACK had some regressions. + +The expectations in that mail were wrong (at least that cleanup/fix is not +required for gdb.cp/gdb2495.exp). + +The problem is that the inferior call return pad breakpoint instruction is +never removed even after inferior call finishes. It is even still visible in +"maintenance info breakpoints". This does not matter much for AT_ENTRY_POINT +but for ON_STACK it just corrupts stack. + +No regressions on +{x86_64,x86_64-m32,i686}-fedora(15-rawhide)/rhel(5-6)-linux-gnu and for +gdbsever non-extended mode. + + +Thanks, +Jan + + +gdb/ +2012-03-09 Jan Kratochvil + + Remove momentary breakpoints for completed inferior calls. + * dummy-frame.c: Include gdbthread.h. + (pop_dummy_frame_bpt): New function. + (pop_dummy_frame): Initialie DUMMY earlier. Call pop_dummy_frame_bpt. + +gdb/testsuite/ +2012-03-09 Jan Kratochvil + + Remove momentary breakpoints for completed inferior calls. + * gdb.base/call-signal-resume.exp (maintenance print dummy-frames) + (maintenance info breakpoints): New tests. + +Index: gdb-7.4.50.20120602/gdb/dummy-frame.c +=================================================================== +--- gdb-7.4.50.20120602.orig/gdb/dummy-frame.c 2012-01-04 09:17:00.000000000 +0100 ++++ gdb-7.4.50.20120602/gdb/dummy-frame.c 2012-06-02 20:42:40.907720327 +0200 +@@ -29,6 +29,7 @@ + #include "gdbcmd.h" + #include "gdb_string.h" + #include "observer.h" ++#include "gdbthread.h" + + /* Dummy frame. This saves the processor state just prior to setting + up the inferior function call. Older targets save the registers +@@ -108,19 +109,36 @@ remove_dummy_frame (struct dummy_frame * + xfree (dummy); + } + ++/* Delete any breakpoint B which is a momentary breakpoint for return from ++ inferior call matching DUMMY_VOIDP. */ ++ ++static int ++pop_dummy_frame_bpt (struct breakpoint *b, void *dummy_voidp) ++{ ++ struct dummy_frame *dummy = dummy_voidp; ++ ++ if (b->disposition == disp_del && frame_id_eq (b->frame_id, dummy->id) ++ && b->thread == pid_to_thread_id (inferior_ptid)) ++ delete_breakpoint (b); ++ ++ /* Continue the traversal. */ ++ return 0; ++} ++ + /* Pop *DUMMY_PTR, restoring program state to that before the + frame was created. */ + + static void + pop_dummy_frame (struct dummy_frame **dummy_ptr) + { +- struct dummy_frame *dummy; ++ struct dummy_frame *dummy = *dummy_ptr; ++ ++ restore_infcall_suspend_state (dummy->caller_state); + +- restore_infcall_suspend_state ((*dummy_ptr)->caller_state); ++ iterate_over_breakpoints (pop_dummy_frame_bpt, dummy); + + /* restore_infcall_control_state frees inf_state, + all that remains is to pop *dummy_ptr. */ +- dummy = *dummy_ptr; + *dummy_ptr = dummy->next; + xfree (dummy); + +Index: gdb-7.4.50.20120602/gdb/testsuite/gdb.base/call-signal-resume.exp +=================================================================== +--- gdb-7.4.50.20120602.orig/gdb/testsuite/gdb.base/call-signal-resume.exp 2012-01-23 18:11:50.000000000 +0100 ++++ gdb-7.4.50.20120602/gdb/testsuite/gdb.base/call-signal-resume.exp 2012-06-02 20:43:10.523709052 +0200 +@@ -101,6 +101,18 @@ gdb_test "frame $frame_number" ".*" + gdb_test_no_output "set confirm off" + gdb_test "return" "" + ++# Verify there are no remains of the dummy frame. ++gdb_test_no_output "maintenance print dummy-frames" ++set test "maintenance info breakpoints" ++gdb_test_multiple $test $test { ++ -re "call dummy.*\r\n$gdb_prompt $" { ++ fail $test ++ } ++ -re "\r\n$gdb_prompt $" { ++ pass $test ++ } ++} ++ + # Resume execution, the program should continue without any signal. + + gdb_test "break stop_two" "Breakpoint \[0-9\]* at .*" diff --git a/gdb-x86-onstack-2of2.patch b/gdb-x86-onstack-2of2.patch new file mode 100644 index 0000000..8b5fa37 --- /dev/null +++ b/gdb-x86-onstack-2of2.patch @@ -0,0 +1,166 @@ +http://sourceware.org/ml/gdb-patches/2012-03/msg00358.html +Subject: [patch 2/2] Fix gdb.cp/gdb2495.exp regression with gcc-4.7 #5 + +Hi, + +here is the ON_STACK code again, with fixed alignment for i386 SSE. + +It is generalized for all OSes on i386/amd64. I can move it to +{i386,amd64)-linux-tdep.c but I find this code much more lightweight than +i386_push_dummy_call which is already present in i386-tdep. + +No regressions on +{x86_64,x86_64-m32,i686}-fedora(15-rawhide)/rhel(5-6)-linux-gnu and for +gdbsever non-extended mode. + +For x86_64-fedora17-linux-gnu it fixes: +-FAIL: gdb.cp/gdb2495.exp: Call a function that raises an exception without a handler. +-FAIL: gdb.cp/gdb2495.exp: bt after returning from a popped frame ++PASS: gdb.cp/gdb2495.exp: Call a function that raises an exception without a handler. ++PASS: gdb.cp/gdb2495.exp: bt after returning from a popped frame + + +Thanks, +Jan + + +gdb/ +2012-03-09 Jan Kratochvil + + * amd64-dicos-tdep.c (amd64_dicos_push_dummy_code): Remove. + (amd64_dicos_init_abi): Remove its installment. + * dicos-tdep.c (dicos_init_abi): Remove the + set_gdbarch_call_dummy_location call. Update the comment here. + * i386-dicos-tdep.c (i386_dicos_push_dummy_code): Remove. + (i386_dicos_init_abi): Remove its installment. + * i386-tdep.c (i386_push_dummy_code): New function. + (i386_gdbarch_init): Call set_gdbarch_call_dummy_location, install + i386_push_dummy_code. + +--- a/gdb/amd64-dicos-tdep.c ++++ b/gdb/amd64-dicos-tdep.c +@@ -23,24 +23,6 @@ + #include "amd64-tdep.h" + #include "dicos-tdep.h" + +-static CORE_ADDR +-amd64_dicos_push_dummy_code (struct gdbarch *gdbarch, +- CORE_ADDR sp, CORE_ADDR funaddr, +- struct value **args, int nargs, +- struct type *value_type, +- CORE_ADDR *real_pc, CORE_ADDR *bp_addr, +- struct regcache *regcache) +-{ +- int bplen; +- CORE_ADDR bppc = sp; +- +- gdbarch_breakpoint_from_pc (gdbarch, &bppc, &bplen); +- *bp_addr = sp - bplen; +- *real_pc = funaddr; +- +- return *bp_addr; +-} +- + static void + amd64_dicos_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) + { +@@ -49,8 +31,6 @@ amd64_dicos_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) + amd64_init_abi (info, gdbarch); + + dicos_init_abi (gdbarch); +- +- set_gdbarch_push_dummy_code (gdbarch, amd64_dicos_push_dummy_code); + } + + static enum gdb_osabi +--- a/gdb/dicos-tdep.c ++++ b/gdb/dicos-tdep.c +@@ -43,8 +43,8 @@ dicos_init_abi (struct gdbarch *gdbarch) + + /* There's no (standard definition of) entry point or a guaranteed + text location with a symbol where to place the call dummy, so we +- put it on the stack. */ +- set_gdbarch_call_dummy_location (gdbarch, ON_STACK); ++ need it on the stack. Rely on i386_gdbarch_init used also for ++ amd64 to set up ON_STACK inferior calls. */ + + /* DICOS rewinds the PC itself. */ + set_gdbarch_decr_pc_after_break (gdbarch, 0); +--- a/gdb/i386-dicos-tdep.c ++++ b/gdb/i386-dicos-tdep.c +@@ -22,32 +22,12 @@ + #include "gdb_string.h" + #include "dicos-tdep.h" + +-static CORE_ADDR +-i386_dicos_push_dummy_code (struct gdbarch *gdbarch, +- CORE_ADDR sp, CORE_ADDR funaddr, +- struct value **args, int nargs, +- struct type *value_type, +- CORE_ADDR *real_pc, CORE_ADDR *bp_addr, +- struct regcache *regcache) +-{ +- int bplen; +- CORE_ADDR bppc = sp; +- +- gdbarch_breakpoint_from_pc (gdbarch, &bppc, &bplen); +- *bp_addr = sp - bplen; +- *real_pc = funaddr; +- +- return *bp_addr; +-} +- + static void + i386_dicos_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) + { + struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); + + dicos_init_abi (gdbarch); +- +- set_gdbarch_push_dummy_code (gdbarch, i386_dicos_push_dummy_code); + } + + static enum gdb_osabi +--- a/gdb/i386-tdep.c ++++ b/gdb/i386-tdep.c +@@ -2326,6 +2326,30 @@ i386_16_byte_align_p (struct type *type) + return 0; + } + ++/* Implementation for set_gdbarch_push_dummy_code. */ ++ ++static CORE_ADDR ++i386_push_dummy_code (struct gdbarch *gdbarch, CORE_ADDR sp, CORE_ADDR funaddr, ++ struct value **args, int nargs, struct type *value_type, ++ CORE_ADDR *real_pc, CORE_ADDR *bp_addr, ++ struct regcache *regcache) ++{ ++ int bplen; ++ CORE_ADDR bppc = sp; ++ ++ gdbarch_breakpoint_from_pc (gdbarch, &bppc, &bplen); ++ sp -= bplen; ++ ++ /* amd64_push_dummy_call does alignment on its own but i386_push_dummy_call ++ does not. ABI requires stack alignment for executables using SSE. */ ++ if (gdbarch_frame_align_p (gdbarch)) ++ sp = gdbarch_frame_align (gdbarch, sp); ++ ++ *bp_addr = sp; ++ *real_pc = funaddr; ++ return sp; ++} ++ + static CORE_ADDR + i386_push_dummy_call (struct gdbarch *gdbarch, struct value *function, + struct regcache *regcache, CORE_ADDR bp_addr, int nargs, +@@ -7372,6 +7396,8 @@ i386_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) + set_gdbarch_get_longjmp_target (gdbarch, i386_get_longjmp_target); + + /* Call dummy code. */ ++ set_gdbarch_call_dummy_location (gdbarch, ON_STACK); ++ set_gdbarch_push_dummy_code (gdbarch, i386_push_dummy_code); + set_gdbarch_push_dummy_call (gdbarch, i386_push_dummy_call); + set_gdbarch_frame_align (gdbarch, i386_frame_align); + + diff --git a/gdb.changes b/gdb.changes index ea7b4e1..e0d09ce 100644 --- a/gdb.changes +++ b/gdb.changes @@ -1,3 +1,259 @@ +------------------------------------------------------------------- +Tue Jun 12 13:00:14 UTC 2012 - rguenther@suse.com + +- Merge from gdb-7.4.50.20120603-3.fc18.src.rpm. + + * Wed Jun 6 2012 Jan Kratochvil - 7.4.50.20120603-3.fc18 + - Disable -lmcheck in the development builds. + - Fix assertion on some files as glibc-2.15.90-8.fc18 (Doug Evans). + + * Sun Jun 3 2012 Jan Kratochvil - 7.4.50.20120603-2.fc18 + - Fix Release. + - Make yum --enablerepo compatible with at least mock-1.1.21-1.fc16 Rawhide cfg. + + * Sun Jun 3 2012 Jan Kratochvil - 7.4.50.20120602-1.fc18 + - Rebase to FSF GDB 7.4.50.20120602. + - [testsuite] BuildRequire gcc-go. + - Drop printing 2D C++ vectors as matrices which no longer worked (BZ 562763). + - Fix dejagnu-1.5-4.fc17 compatibility for Go (for BZ 635651). + - Use librpm.so.3 for rpm-4.10.0 in Fedora 18. + - Revert recent breakage of UNIX objfiles order for symbols lookup. + + * Sat Jun 2 2012 Jan Kratochvil - 7.4.50.20120120-48.fc17 + - [ppc] Fix hardware watchpoints on PowerPC (BZ 827600, Edjunior Machado). + + * Mon May 28 2012 Jan Kratochvil - 7.4.50.20120120-47.fc17 + - Workaround PR libc/14166 for inferior calls of strstr. + + * Mon May 14 2012 Jan Kratochvil - 7.4.50.20120120-46.fc17 + - [RHEL5] Workaround doc build race. + + * Mon May 14 2012 Jan Kratochvil - 7.4.50.20120120-45.fc17 + - Rename "set auto-load" patchset variable $ddir to $datadir. + + * Wed May 9 2012 Jan Kratochvil - 7.4.50.20120120-44.fc17 + - Fix in "set auto-load" patchset for SCL scripts inheritance (BZ 815910). + + * Wed Apr 25 2012 Jan Kratochvil - 7.4.50.20120120-43.fc17 + - [RHEL5] Workaround kernel for detaching SIGSTOPped processes (BZ 809382). + + * Tue Apr 24 2012 Jan Kratochvil - 7.4.50.20120120-42.fc17 + - Update "set auto-load" patchset and the --with-auto-load-safe-path setting. + - [RHEL] Disable gdb-add-index even on RHEL-6 as RHEL-6.0 had too old elfutils. + + * Wed Apr 18 2012 Jan Kratochvil - 7.4.50.20120120-41.fc17 + - [RHEL] Fix --with-auto-load-safe-path systems prior to /usr move. + + * Wed Apr 18 2012 Jan Kratochvil - 7.4.50.20120120-40.fc17 + - Security fix for loading untrusted inferiors, see "set auto-load" (BZ 756117). + + * Fri Apr 13 2012 Jan Kratochvil - 7.4.50.20120120-39.fc17 + - [RHEL7] Fix/remove readline-devel BuildRequires redundant distro suffic .fc17. + + * Wed Apr 4 2012 Jan Kratochvil - 7.4.50.20120120-38.fc17 + - Workaround crashes from stale frame_info pointer (BZ 804256). + + * Wed Apr 4 2012 Jan Kratochvil - 7.4.50.20120120-37.fc17 + - testsuite: Fix break-interp.exp expections for updated glibc (BZ 752834). + + * Wed Apr 4 2012 Jan Kratochvil - 7.4.50.20120120-36.fc17 + - [RHEL5,RHEL6] Reintroduce fix attaching to stopped processes. + + * Fri Mar 30 2012 Jan Kratochvil - 7.4.50.20120120-35.fc17 + - Fix performance regressions with .gdb_index (Tom Tromey, BZ 805274). + + * Fri Mar 30 2012 Jan Kratochvil - 7.4.50.20120120-34.fc17 + - Fixup %{_datadir}/gdb timestamps for multilib conflicts on RHELs. + + * Mon Mar 26 2012 Jan Kratochvil - 7.4.50.20120120-33.fc17 + - [vla] Fix regression on no type for subrange from IBM XLF Fortran (BZ 806920). + + * Sat Mar 17 2012 Jan Kratochvil - 7.4.50.20120120-32.fc17 + - Fix loading of core files without build-ids but with build-ids in executables. + + * Fri Mar 9 2012 Jan Kratochvil - 7.4.50.20120120-31.fc17 + - Fix an implied regression by the inferior calls fix below (BZ 799531). + + * Fri Mar 9 2012 Jan Kratochvil - 7.4.50.20120120-30.fc17 + - Fix SELinux deny_ptrace .spec build rules (BZ 786878). + + * Tue Mar 6 2012 Jan Kratochvil - 7.4.50.20120120-29.fc17 + - Fix inferior calls, particularly uncaught thrown exceptions (BZ 799531). + - Fix DWARF DIEs CU vs. section relative offsets (Joel Brobecker, me). + + * Tue Mar 6 2012 Jan Kratochvil - 7.4.50.20120120-28.fc17 + - Print reasons for failed attach/spawn incl. SELinux deny_ptrace (BZ 786878). + + * Sun Mar 4 2012 Jan Kratochvil - 7.4.50.20120120-27.fc17 + - [rhel5] Fix up the previous commit (BZ 799318). + + * Sun Mar 4 2012 Jan Kratochvil - 7.4.50.20120120-26.fc17 + - [rhel5] Fix up the previous commit (BZ 799318). + + * Sun Mar 4 2012 Jan Kratochvil - 7.4.50.20120120-25.fc17 + - [rhel5] Workaround rpmbuild to make the doc subpkg noarch again (BZ 799318). + + * Fri Mar 2 2012 Jan Kratochvil - 7.4.50.20120120-24.fc17 + - [vla] Fix crash for dynamic.exp with gcc-gfortran-4.1.2-51.el5.x86_64. + - Reintroduce RHEL-5 glibc workaround for bt-clone-stop.exp. + - testsuite: Update/fix rh634108-solib_address.exp for the upstreamed API. + + * Wed Feb 29 2012 Jan Kratochvil - 7.4.50.20120120-23.fc17 + - Add kernel vDSO workaround (`no loadable ...') on RHEL-5 (kernel BZ 765875). + - Fix skipping of prologues on RHEL-5 gcc-4.1 -O2 -g code (BZ 797889). + - Fix breakpoint warning during 'next' over exit() (Tom Tromey, BZ 797892). + + * Tue Feb 28 2012 Jan Kratochvil - 7.4.50.20120120-22.fc17 + - testsuite: Fix gdb.base/macscp.exp ccache workaround in SCL mode. + - Adjust the RHEL/F version string automatically (BZ 797651, BZ 797646). + - Provide gdbtui for RHEL-5 and RHEL-6 as it is removed upstream (BZ 797664). + + * Fri Feb 24 2012 Jan Kratochvil - 7.4.50.20120120-21.fc17 + - testsuite: Do not use gcc44/gfortran44 on RHEL-5 if in SCL mode. + + * Wed Feb 22 2012 Jan Kratochvil - 7.4.50.20120120-20.fc17 + - Fix libinproctrace.so build on RHEL-5 i386 (disable it on RHEL-5). + + * Wed Feb 22 2012 Jan Kratochvil - 7.4.50.20120120-19.fc17 + - Implement SCL (scl-utils-build) macros. + + * Tue Feb 21 2012 Jan Kratochvil - 7.4.50.20120120-18.fc17 + - Fix debuginfo gdb-gdb.py build without redhat-rpm-config and on RHEL-5. + - Provide precompiled variants of gdb-gdb.py. + + * Mon Feb 13 2012 Jan Kratochvil - 7.4.50.20120120-17.fc17 + - gstack: Turn off --readnever (suggested by Oliver Henshaw). + + * Fri Feb 10 2012 Jan Kratochvil - 7.4.50.20120120-16.fc17 + - [RHELs] Drop simulation of legacy behavior - new GDB should behave as new GDB. + + * Fri Feb 10 2012 Jan Kratochvil - 7.4.50.20120120-15.fc17 + - Simplify %%setup .spec rule. + + * Fri Feb 10 2012 Jan Kratochvil - 7.4.50.20120120-14.fc17 + - Drop --with upstream .spec rules. + + * Fri Feb 10 2012 Jan Kratochvil - 7.4.50.20120120-13.fc17 + - Drop --with debug .spec rules. + + * Thu Feb 9 2012 Jan Kratochvil - 7.4.50.20120120-12.fc17 + - Improve performance for C++ symbols expansion (Tom Tromey, BZ 787487). + - Install also gdb-gdb.py pretty printers. + + * Thu Feb 9 2012 Jan Kratochvil - 7.4.50.20120120-11.fc17 + - Fix possible NULL crash in find_charset_names (Tom Tromey, BZ 786091). + - [ppc*] Fix build failure due to GCC aliasing warning (BZ 786504). + +------------------------------------------------------------------- +Tue Jun 12 07:41:22 UTC 2012 - cfarrell@suse.com + +- license update: GPL-3.0+ and GPL-3.0-with-GCC-exception and LGPL-2.1+ and + LGPL-3.0+ + SPDX format + +------------------------------------------------------------------- +Wed May 9 05:13:38 UTC 2012 - coolo@suse.com + +- Fix the minimum to get it through factory-auto + +------------------------------------------------------------------- +Tue Apr 3 14:08:43 UTC 2012 - rguenther@suse.com + +- Fixup missed debuginfo handling SUSE specifics. + +------------------------------------------------------------------- +Thu Jan 26 09:42:11 UTC 2012 - rguenther@suse.com + +- Merge from gdb-7.4.50.20120120-10.fc17.src.rpm. + + * Sat Jan 21 2012 Jan Kratochvil - 7.4.50.20120120-10.fc17 + - Rebase to FSF GDB 7.4.50.20120120. + - Drop the g77 .spec provisioning as it has been fixed in FSF GDB. + + * Thu Jan 19 2012 Jan Kratochvil - 7.4.50.20120103-9.fc17 + - Enable smaller %{_bindir}/gdb in future by no longer using -rdynamic. + - Make --enablerepo to use '*-debug*' for RHEL compatibility (BZ 781571). + - On older RHELs make readline bundled again (BZ 701131). + - Fix build compatibility with RHEL-5 due to false noarch build. + + * Wed Jan 11 2012 Jan Kratochvil - 7.4.50.20120103-8.fc17 + - Disable unexpected GDB directories relocatability. + + * Wed Jan 11 2012 Jan Kratochvil - 7.4.50.20120103-7.fc17 + - Fix BuildRequires for RHEL compatibility (BZ 701131). + + * Wed Jan 11 2012 Jan Kratochvil - 7.4.50.20120103-6.fc17 + - Provide %%snap timestamp for: Provides: bundled(librarypackage) + - Replace %%define by %%global. + - Replace Java in Summary with Fortran (only GCC-compiled Java is supported). + - Unbundle readline-6.2 with a workaround of skipped "ask" (BZ 701131). + - Work around readline-6.2 incompatibility not asking for --more-- (BZ 701131). + + * Sat Jan 7 2012 Jan Kratochvil - 7.4.50.20120103-5.fc17 + - Mark %{_sysconfdir}/gdbinit as %%config(noreplace). + - Add appropriate: Provides: bundled(librarypackage). + - Remove excessive explicit Requires: librarypackage. + + * Thu Jan 5 2012 Jan Kratochvil - 7.4.50.20120103-4.fc17 + - Fix linking on non-x86* (such as s390*) after libgdb.a removal. + + * Wed Jan 4 2012 Jan Kratochvil - 7.4.50.20120103-3.fc17 + - Reinclude gdb-dlopen-stap-probe.patch (missing in Fedora glibc - BZ 752476). + + * Tue Jan 3 2012 Jan Kratochvil - 7.4.50.20120103-2.fc17 + - Fix SystemTap support regression on i686 (Sergio Durigan Junior). + + * Tue Jan 3 2012 Jan Kratochvil - 7.4.50.20120103-1.fc17 + - Rebase to FSF GDB 7.4.50.20120103. + + * Mon Nov 28 2011 Jan Kratochvil - 7.3.50.20110722-11.fc17 + - No longer build bundled libstdc++ pretty printers on RHELs >= 7. + + * Sat Nov 5 2011 Sergio Durigan Junior - 7.3.50.20110722-10.fc16 + - Backport fix for crash in cp_scan_for_anonymous_namespace + (Aleksandar Ristovski, BZ 750341). + + * Fri Oct 14 2011 Jan Kratochvil - 7.3.50.20110722-9.fc16 + - Backport `info os processes' crash fix - for Eclipse (Pedro Alves, BZ 746294). + + * Tue Oct 11 2011 Jan Kratochvil - 7.3.50.20110722-8.fc16 + - Fix PIE testsuite run; new lib/future.exp hack and use -fPIC instead of -fPIE. + + * Mon Sep 26 2011 Jan Kratochvil - 7.3.50.20110722-7.fc16 + - [vla] Fix VLA arrays displayed in `bt full' (BZ 738482). + - Fix DW_OP_GNU_implicit_pointer for DWARF32 v3+ on 64-bit arches. + - Fix internal error on some optimized-out values. + + * Tue Aug 16 2011 Jan Kratochvil - 7.3.50.20110722-6.fc16 + - Python command/function auto-loading (Phil Muldoon, BZ 730976). + - Work around PR libc/13097 "linux-vdso.so.1" warning message. + - [TUI] Fix stepi on stripped code. + - Add BuildRequires: systemtap-sdt-devel for archer-sergiodj-stap-patch-split. + + * Wed Aug 10 2011 Jan Kratochvil - 7.3.50.20110722-5.fc16 + - Fix dlopen of libpthread.so, patched glibc required (Gary Benson, BZ 669432). + + * Tue Aug 9 2011 Jan Kratochvil - 7.3.50.20110722-4.fc16 + - Improve GDB performance on inferior dlopen calls (Gary Benson, BZ 698001). + - [python] Fix crash when pretty printer fails (Phil Muldoon, BZ 712715). + - Fix crash on invalid C++ mangled names (BZ 729283). + + * Fri Jul 29 2011 Jan Kratochvil - 7.3.50.20110722-3.fc16 + - Fix regression from VLA merge affecting -O0 -g watchpoints. + + * Fri Jul 29 2011 Jan Kratochvil - 7.3.50.20110722-2.fc16 + - Include gcc -g3 .debug_macro implementation by Tom Tromey. + + * Sat Jul 23 2011 Jan Kratochvil - 7.3.50.20110722-1.fc16 + - Rebase to FSF GDB 7.3.50.20110722. + - Improve gcc-4.6 stdarg false prologue end workaround (GDB PR 12435 + GCC PR 47471). + +------------------------------------------------------------------- +Wed Oct 12 12:09:41 UTC 2011 - rguenther@suse.com + +- Add patch to use old ptrace interface on powerpc to fix watchpoint + issues. [bnc#718313] + ------------------------------------------------------------------- Thu Aug 4 10:28:50 UTC 2011 - rguenther@novell.com diff --git a/gdb.spec b/gdb.spec index 4940343..78d36d4 100644 --- a/gdb.spec +++ b/gdb.spec @@ -1,61 +1,51 @@ +# Copyright (c) 2012 RedHat +# Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany. # -# spec file for package gdb -# -# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. -# -# All modifications and additions to the file contributed by third parties -# remain the property of their copyright owners, unless otherwise agreed -# upon. The license for this file, and modifications and additions to the +# The license for this file, and modifications and additions to the # file, is the same license as for the pristine package itself (unless the # license for the pristine package is not an Open Source License, in which -# case the license is the MIT License). An "Open Source License" is a -# license that conforms to the Open Source Definition (Version 1.9) -# published by the Open Source Initiative. - -# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# case the license is the MIT License). # +# rpmbuild parameters: +# --with testsuite: Run the testsuite (biarch if possible). Default is without. +# --without python: No python support. +# --with profile: gcc -fprofile-generate / -fprofile-use: Before better +# workload gets run it decreases the general performance now. +# --define 'scl somepkgname': Independent packages by scl-utils-build. - -Summary: A GNU source-level debugger for C, C++, Java and other languages - -Name: gdb +Summary: A GNU source-level debugger for C, C++, Fortran and other languages +Name: gdb # Set version to contents of gdb/version.in. # NOTE: the FSF gdb versions are numbered N.M for official releases, like 6.3 # and, since January 2005, X.Y.Z.date for daily snapshots, like 6.3.50.20050112 # (daily snapshot from mailine), or 6.3.0.20040112 (head of the release branch). -Version: 7.3 -Release: 1 +%global snap 20120603 +Version: 7.4.50.%{snap} # 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: 0 -License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ and GPLv2+ with exceptions and GPL+ and LGPLv2+ and BSD and Public Domain -Group: Development/Debuggers +License: GPL-3.0+ and GPL-3.0-with-GCC-exception and LGPL-2.1+ and LGPL-3.0+ +Group: Development/Tools/Debuggers +BuildRoot: %{_tmppath}/%{name}-%{version}-build # Do not provide URL for snapshots as the file lasts there only for 2 days. # ftp://sourceware.org/pub/gdb/snapshots/current/gdb-%{version}.tar.bz2 # ftp://sourceware.org/pub/gdb/snapshots/branch/gdb-%{version}.tar.bz2 # ftp://sourceware.org/pub/gdb/releases/gdb-%{version}.tar.bz2 -Source: ftp://sourceware.org/pub/gdb/snapshots/current/gdb-%{version}.tar.bz2 -BuildRoot: %{_tmppath}/%{name}-%{version}-build -Url: http://gnu.org/software/gdb/ +Source: gdb-%{version}.tar.bz2 +URL: http://gnu.org/software/gdb/ # For our convenience -%define gdb_src gdb-%{version} -%define gdb_build build-%{_target_platform} -%define gdb_docdir %{_docdir}/%{name}-doc-%{version} +%global gdb_src %{name}-%{version} +%global gdb_build build-%{_target_platform} +%global gdb_docdir %{_docdir}/%{name}-doc -%if 0%{?_with_debug:1} -# Define this if you want to skip the strip step and preserve debug info. -# Useful for testing. -%define __debug_install_post : > %{_builddir}/%{?buildsubdir}/debugfiles.list -%define debug_package %{nil} -%endif +%global have_inproctrace 0 +%ifarch %{ix86} x86_64 +%global have_inproctrace 1 +%endif # %{ix86} x86_64 -# Make sure we get rid of the old package gdb64, now that we have unified -# support for 32-64 bits in one single 64-bit gdb. -%ifarch ppc64 -Obsoletes: gdb64 < 5.3.91 -%endif # GDB patches have the format `gdb--bz-.patch'. # They should be created using patch level 1: diff -up ./gdb (or gdb-6.3/gdb). @@ -71,451 +61,397 @@ Obsoletes: gdb64 < 5.3.91 # Cleanup any leftover testsuite processes as it may stuck mock(1) builds. #=push -Source2: gdb-orphanripper.c +Source2: gdb-orphanripper.c # Man page for gstack(1). #=push -Source3: gdb-gstack.man +Source3: gdb-gstack.man # /etc/gdbinit (from Debian but with Fedora compliant location). #=fedora -Source4: gdbinit +Source4: gdbinit # libstdc++ pretty printers from GCC SVN HEAD (4.5 experimental). -%define libstdcxxpython libstdc++-v3-python-r155978 -Source5: %{libstdcxxpython}.tar.bz2 +%global libstdcxxpython libstdc++-v3-python-r155978 +Source5: %{libstdcxxpython}.tar.bz2 + +# Provide gdbtui for RHEL-5 and RHEL-6 as it is removed upstream (BZ 797664). +Source6: gdbtui # Work around out-of-date dejagnu that does not have KFAIL #=drop: That dejagnu is too old to be supported. -Patch1: gdb-6.3-rh-dummykfail-20041202.patch +Patch1: gdb-6.3-rh-dummykfail-20041202.patch # Match the Fedora's version info. #=fedora -Patch2: gdb-6.3-rh-testversion-20041202.patch +Patch2: gdb-6.3-rh-testversion-20041202.patch # Check that libunwind works - new test then fix #=ia64 -Patch3: gdb-6.3-rh-testlibunwind-20041202.patch - -# Use convert_from_func_ptr_addr on the solib breakpoint address; -# simplifies and makes more consistent the logic. -#=maybepush+ppc: Write new testcase. -Patch104: gdb-6.3-ppcdotsolib-20041022.patch +Patch3: gdb-6.3-rh-testlibunwind-20041202.patch # Better parse 64-bit PPC system call prologues. #=maybepush+ppc: Write new testcase. -Patch105: gdb-6.3-ppc64syscall-20040622.patch +Patch105: gdb-6.3-ppc64syscall-20040622.patch # Include the pc's section when doing a symbol lookup so that the # correct symbol is found. #=maybepush: Write new testcase. -Patch111: gdb-6.3-ppc64displaysymbol-20041124.patch +Patch111: gdb-6.3-ppc64displaysymbol-20041124.patch # Fix upstream `set scheduler-locking step' vs. upstream PPC atomic seqs. -#=maybepush+work: It is a bit difficult patch, a part is ppc specific. -Patch112: gdb-6.6-scheduler_locking-step-sw-watchpoints2.patch +#=push+work: It is a bit difficult patch, a part is ppc specific. +Patch112: gdb-6.6-scheduler_locking-step-sw-watchpoints2.patch # Make upstream `set scheduler-locking step' as default. -#=maybepush+work: How much is scheduler-locking relevant after non-stop? -Patch260: gdb-6.6-scheduler_locking-step-is-default.patch +#=push+work: How much is scheduler-locking relevant after non-stop? +Patch260: gdb-6.6-scheduler_locking-step-is-default.patch # Add a wrapper script to GDB that implements pstack using the # --readnever option. #=push+work: with gdbindex maybe --readnever should no longer be used. -Patch118: gdb-6.3-gstack-20050411.patch +Patch118: gdb-6.3-gstack-20050411.patch # VSYSCALL and PIE #=fedoratest -Patch122: gdb-6.3-test-pie-20050107.patch -#=maybepush: May get obsoleted by Tom's unrelocated objfiles patch. -Patch389: gdb-archer-pie-addons.patch +Patch122: gdb-6.3-test-pie-20050107.patch +#=push: May get obsoleted by Tom's unrelocated objfiles patch. +Patch389: gdb-archer-pie-addons.patch #=push+work: Breakpoints disabling matching should not be based on address. -Patch394: gdb-archer-pie-addons-keep-disabled.patch +Patch394: gdb-archer-pie-addons-keep-disabled.patch # Get selftest working with sep-debug-info -#=maybepush -Patch125: gdb-6.3-test-self-20050110.patch +#=fedoratest +Patch125: gdb-6.3-test-self-20050110.patch # Test support of multiple destructors just like multiple constructors #=fedoratest -Patch133: gdb-6.3-test-dtorfix-20050121.patch +Patch133: gdb-6.3-test-dtorfix-20050121.patch # Fix to support executable moving #=fedoratest -Patch136: gdb-6.3-test-movedir-20050125.patch +Patch136: gdb-6.3-test-movedir-20050125.patch # Fix gcore for threads #=ia64 -Patch140: gdb-6.3-gcore-thread-20050204.patch - -# Stop while intentionally stepping and the thread exit is met. -#=push -Patch141: gdb-6.6-step-thread-exit.patch -#=push -Patch259: gdb-6.3-step-thread-exit-20050211-test.patch +Patch140: gdb-6.3-gcore-thread-20050204.patch # Test sibling threads to set threaded watchpoints for x86 and x86-64 #=fedoratest -Patch145: gdb-6.3-threaded-watchpoints2-20050225.patch +Patch145: gdb-6.3-threaded-watchpoints2-20050225.patch # Do not issue warning message about first page of storage for ia64 gcore #=ia64 -Patch153: gdb-6.3-ia64-gcore-page0-20050421.patch - -# Security errata for untrusted .gdbinit -#=push -Patch157: gdb-6.3-security-errata-20050610.patch +Patch153: gdb-6.3-ia64-gcore-page0-20050421.patch # IA64 sigtramp prev register patch #=ia64 -Patch158: gdb-6.3-ia64-sigtramp-frame-20050708.patch +Patch158: gdb-6.3-ia64-sigtramp-frame-20050708.patch # IA64 gcore speed-up patch #=ia64 -Patch160: gdb-6.3-ia64-gcore-speedup-20050714.patch +Patch160: gdb-6.3-ia64-gcore-speedup-20050714.patch # Notify observers that the inferior has been created #=fedoratest -Patch161: gdb-6.3-inferior-notification-20050721.patch +Patch161: gdb-6.3-inferior-notification-20050721.patch # Fix ia64 info frame bug #=ia64 -Patch162: gdb-6.3-ia64-info-frame-fix-20050725.patch +Patch162: gdb-6.3-ia64-info-frame-fix-20050725.patch # Verify printing of inherited members test #=fedoratest -Patch163: gdb-6.3-inheritancetest-20050726.patch +Patch163: gdb-6.3-inheritancetest-20050726.patch # Add readnever option #=push -Patch164: gdb-6.3-readnever-20050907.patch +Patch164: gdb-6.3-readnever-20050907.patch # Fix ia64 gdb problem with user-specified SIGILL handling #=ia64 -Patch169: gdb-6.3-ia64-sigill-20051115.patch +Patch169: gdb-6.3-ia64-sigill-20051115.patch # Fix debuginfo addresses resolving for --emit-relocs Linux kernels (BZ 203661). #=push+work: There was some mail thread about it, this patch may be a hack. -Patch188: gdb-6.5-bz203661-emit-relocs.patch +Patch188: gdb-6.5-bz203661-emit-relocs.patch # Support TLS symbols (+`errno' suggestion if no pthread is found) (BZ 185337). #=push+work: It should be replaced by existing uncommitted Roland's glibc patch for TLS without libpthreads. -Patch194: gdb-6.5-bz185337-resolve-tls-without-debuginfo-v2.patch +Patch194: gdb-6.5-bz185337-resolve-tls-without-debuginfo-v2.patch # Fix TLS symbols resolving for shared libraries with a relative pathname. # The testsuite needs `gdb-6.5-tls-of-separate-debuginfo.patch'. #=fedoratest+work: One should recheck if it is really fixed upstream. -Patch196: gdb-6.5-sharedlibrary-path.patch +Patch196: gdb-6.5-sharedlibrary-path.patch # Suggest fixing your target architecture for gdbserver(1) (BZ 190810). # FIXME: It could be autodetected. #=push+work: There are more such error cases that can happen. -Patch199: gdb-6.5-bz190810-gdbserver-arch-advice.patch +Patch199: gdb-6.5-bz190810-gdbserver-arch-advice.patch # Testcase for deadlocking on last address space byte; for corrupted backtraces. #=fedoratest -Patch211: gdb-6.5-last-address-space-byte-test.patch +Patch211: gdb-6.5-last-address-space-byte-test.patch # Improved testsuite results by the testsuite provided by the courtesy of BEA. #=fedoratest+work: For upstream it should be rewritten as a dejagnu test, the test of no "??" was useful. -Patch208: gdb-6.5-BEA-testsuite.patch +Patch208: gdb-6.5-BEA-testsuite.patch # Fix readline segfault on excessively long hand-typed lines. #=fedoratest -Patch213: gdb-6.5-readline-long-line-crash-test.patch +Patch213: gdb-6.5-readline-long-line-crash-test.patch # Fix bogus 0x0 unwind of the thread's topmost function clone(3) (BZ 216711). -#=fedoratest -Patch214: gdb-6.5-bz216711-clone-is-outermost.patch +#=fedora +Patch214: gdb-6.5-bz216711-clone-is-outermost.patch # Test sideeffects of skipping ppc .so libs trampolines (BZ 218379). #=fedoratest -Patch216: gdb-6.5-bz218379-ppc-solib-trampoline-test.patch +Patch216: gdb-6.5-bz218379-ppc-solib-trampoline-test.patch # Fix lockup on trampoline vs. its function lookup; unreproducible (BZ 218379). -#=push -Patch217: gdb-6.5-bz218379-solib-trampoline-lookup-lock-fix.patch +#=fedora +Patch217: gdb-6.5-bz218379-solib-trampoline-lookup-lock-fix.patch # Find symbols properly at their original (included) file (BZ 109921). #=fedoratest -Patch225: gdb-6.5-bz109921-DW_AT_decl_file-test.patch +Patch225: gdb-6.5-bz109921-DW_AT_decl_file-test.patch # Update PPC unwinding patches to their upstream variants (BZ 140532). #=fedoratest+ppc -Patch229: gdb-6.3-bz140532-ppc-unwinding-test.patch +Patch229: gdb-6.3-bz140532-ppc-unwinding-test.patch # Testcase for exec() from threaded program (BZ 202689). #=fedoratest -Patch231: gdb-6.3-bz202689-exec-from-pthread-test.patch +Patch231: gdb-6.3-bz202689-exec-from-pthread-test.patch # Backported fixups post the source tarball. #Xdrop: Just backports. -#Patch232: gdb-upstream.patch +Patch232: gdb-upstream.patch # Testcase for PPC Power6/DFP instructions disassembly (BZ 230000). #=fedoratest+ppc -Patch234: gdb-6.6-bz230000-power6-disassembly-test.patch +Patch234: gdb-6.6-bz230000-power6-disassembly-test.patch # Temporary support for shared libraries >2GB on 64bit hosts. (BZ 231832) #=push+work: Upstream should have backward compat. API: libc-alpha: <20070127104539.GA9444@.*> -Patch235: gdb-6.3-bz231832-obstack-2gb.patch +Patch235: gdb-6.3-bz231832-obstack-2gb.patch # Allow running `/usr/bin/gcore' with provided but inaccessible tty (BZ 229517). #=fedoratest -Patch245: gdb-6.6-bz229517-gcore-without-terminal.patch +Patch245: gdb-6.6-bz229517-gcore-without-terminal.patch # Notify user of a child forked process being detached (BZ 235197). #=push: This is more about discussion if/what should be printed. -Patch247: gdb-6.6-bz235197-fork-detach-info.patch +Patch247: gdb-6.6-bz235197-fork-detach-info.patch # Avoid too long timeouts on failing cases of "annota1.exp annota3.exp". -#=push -Patch254: gdb-6.6-testsuite-timeouts.patch +#=fedoratest +Patch254: gdb-6.6-testsuite-timeouts.patch # Support for stepping over PPC atomic instruction sequences (BZ 237572). #=fedoratest -Patch258: gdb-6.6-bz237572-ppc-atomic-sequence-test.patch +Patch258: gdb-6.6-bz237572-ppc-atomic-sequence-test.patch # Test kernel VDSO decoding while attaching to an i386 process. #=fedoratest -Patch263: gdb-6.3-attach-see-vdso-test.patch - -# Do not hang on exit of a thread group leader (BZ 247354). -#=push -Patch265: gdb-6.6-bz247354-leader-exit-fix.patch -#=push -Patch266: gdb-6.6-bz247354-leader-exit-test.patch +Patch263: gdb-6.3-attach-see-vdso-test.patch # Test leftover zombie process (BZ 243845). #=fedoratest -Patch271: gdb-6.5-bz243845-stale-testing-zombie-test.patch +Patch271: gdb-6.5-bz243845-stale-testing-zombie-test.patch # New locating of the matching binaries from the pure core file (build-id). #=push -Patch274: gdb-6.6-buildid-locate.patch +Patch274: gdb-6.6-buildid-locate.patch +# Fix loading of core files without build-ids but with build-ids in executables. #=push -Patch353: gdb-6.6-buildid-locate-rpm.patch +Patch659: gdb-6.6-buildid-locate-solib-missing-ids.patch +#=push +Patch353: gdb-6.6-buildid-locate-rpm.patch # Workaround librpm BZ 643031 due to its unexpected exit() calls (BZ 642879). #=push -Patch519: gdb-6.6-buildid-locate-rpm-librpm-workaround.patch +Patch519: gdb-6.6-buildid-locate-rpm-librpm-workaround.patch + +# Add kernel vDSO workaround (`no loadable ...') on RHEL-5 (kernel BZ 765875). +#=push +Patch276: gdb-6.6-bfd-vdso8k.patch # Fix displaying of numeric char arrays as strings (BZ 224128). #=fedoratest: But it is failing anyway, one should check the behavior more. -Patch282: gdb-6.7-charsign-test.patch +Patch282: gdb-6.7-charsign-test.patch # Test PPC hiding of call-volatile parameter register. #=fedoratest+ppc -Patch284: gdb-6.7-ppc-clobbered-registers-O2-test.patch +Patch284: gdb-6.7-ppc-clobbered-registers-O2-test.patch # Testsuite fixes for more stable/comparable results. -#=push -Patch287: gdb-6.7-testsuite-stable-results.patch +#=fedoratest +Patch287: gdb-6.7-testsuite-stable-results.patch # Test ia64 memory leaks of the code using libunwind. #=fedoratest -Patch289: gdb-6.5-ia64-libunwind-leak-test.patch +Patch289: gdb-6.5-ia64-libunwind-leak-test.patch # Test hiding unexpected breakpoints on intentional step commands. #=fedoratest -Patch290: gdb-6.5-missed-trap-on-step-test.patch +Patch290: gdb-6.5-missed-trap-on-step-test.patch # Support DW_TAG_interface_type the same way as DW_TAG_class_type (BZ 426600). #=fedoratest -Patch294: gdb-6.7-bz426600-DW_TAG_interface_type-test.patch +Patch294: gdb-6.7-bz426600-DW_TAG_interface_type-test.patch # Test gcore memory and time requirements for large inferiors. #=fedoratest -Patch296: gdb-6.5-gcore-buffer-limit-test.patch +Patch296: gdb-6.5-gcore-buffer-limit-test.patch # Test debugging statically linked threaded inferiors (BZ 239652). # - It requires recent glibc to work in this case properly. #=fedoratest -Patch298: gdb-6.6-threads-static-test.patch +Patch298: gdb-6.6-threads-static-test.patch # Test GCORE for shmid 0 shared memory mappings. #=fedoratest: But it is broken anyway, sometimes the case being tested is not reproducible. -Patch309: gdb-6.3-mapping-zero-inode-test.patch +Patch309: gdb-6.3-mapping-zero-inode-test.patch # Test a crash on `focus cmd', `focus prev' commands. #=fedoratest -Patch311: gdb-6.3-focus-cmd-prev-test.patch +Patch311: gdb-6.3-focus-cmd-prev-test.patch # Test various forms of threads tracking across exec() (BZ 442765). #=fedoratest -Patch315: gdb-6.8-bz442765-threaded-exec-test.patch +Patch315: gdb-6.8-bz442765-threaded-exec-test.patch # Silence memcpy check which returns false positive (sparc64) #=push: But it is just a GCC workaround, look up the existing GCC PR for it. -Patch317: gdb-6.8-sparc64-silence-memcpy-check.patch +Patch317: gdb-6.8-sparc64-silence-memcpy-check.patch # Test a crash on libraries missing the .text section. #=fedoratest -Patch320: gdb-6.5-section-num-fixup-test.patch - -# Create a single binary `gdb' autodetecting --tui by its argv[0]. -#=push+work: IIRC Tom told argv[0] should not be used by GNU programs, also drop libgdb.a. -Patch326: gdb-6.8-tui-singlebinary.patch +Patch320: gdb-6.5-section-num-fixup-test.patch # Fix PRPSINFO in the core files dumped by gcore (BZ 254229). #=push -Patch329: gdb-6.8-bz254229-gcore-prpsinfo.patch +Patch329: gdb-6.8-bz254229-gcore-prpsinfo.patch # Fix register assignments with no GDB stack frames (BZ 436037). #=push+work: This fix is incorrect. -Patch330: gdb-6.8-bz436037-reg-no-longer-active.patch +Patch330: gdb-6.8-bz436037-reg-no-longer-active.patch # Make the GDB quit processing non-abortable to cleanup everything properly. -#=push: Useful only after gdb-6.8-attach-signalled-detach-stopped.patch . -Patch331: gdb-6.8-quit-never-aborts.patch - -# Fix attaching to stopped processes and/or pending signals. -#=push+work -Patch337: gdb-6.8-attach-signalled-detach-stopped.patch +#=push: It was useful only after gdb-6.8-attach-signalled-detach-stopped.patch . +Patch331: gdb-6.8-quit-never-aborts.patch # Test the watchpoints conditionals works. #=fedoratest -Patch343: gdb-6.8-watchpoint-conditionals-test.patch +Patch343: gdb-6.8-watchpoint-conditionals-test.patch # Fix resolving of variables at locations lists in prelinked libs (BZ 466901). #=fedoratest -Patch348: gdb-6.8-bz466901-backtrace-full-prelinked.patch +Patch348: gdb-6.8-bz466901-backtrace-full-prelinked.patch # The merged branch `archer-jankratochvil-fedora15' of: # http://sourceware.org/gdb/wiki/ProjectArcher -#=push -#archer-jankratochvil-vla -#=push -#archer-jankratochvil-watchpoint3 -#=push -#archer-jankratochvil-ifunc -Patch349: gdb-archer.patch +#=push+work +Patch349: gdb-archer.patch # Fix parsing elf64-i386 files for kdump PAE vmcore dumps (BZ 457187). # - Turn on 64-bit BFD support, globally enable AC_SYS_LARGEFILE. #=fedoratest -Patch360: gdb-6.8-bz457187-largefile-test.patch +Patch360: gdb-6.8-bz457187-largefile-test.patch # New test for step-resume breakpoint placed in multiple threads at once. #=fedoratest -Patch381: gdb-simultaneous-step-resume-breakpoint-test.patch +Patch381: gdb-simultaneous-step-resume-breakpoint-test.patch # Fix GNU/Linux core open: Can't read pathname for load map: Input/output error. #=push+work: It should be in glibc: libc-alpha: <20091004161706.GA27450@.*> -Patch382: gdb-core-open-vdso-warning.patch +Patch382: gdb-core-open-vdso-warning.patch # Fix syscall restarts for amd64->i386 biarch. #=push -Patch391: gdb-x86_64-i386-syscall-restart.patch +Patch391: gdb-x86_64-i386-syscall-restart.patch # Fix stepping with OMP parallel Fortran sections (BZ 533176). #=push+work: It requires some better DWARF annotations. -Patch392: gdb-bz533176-fortran-omp-step.patch +Patch392: gdb-bz533176-fortran-omp-step.patch # Fix regression by python on ia64 due to stale current frame. #=push -Patch397: gdb-follow-child-stale-parent.patch +Patch397: gdb-follow-child-stale-parent.patch # Workaround ccache making lineno non-zero for command-line definitions. -#=drop: ccache is rarely used and it is even fixed now. -Patch403: gdb-ccache-workaround.patch +#=fedoratest: ccache is rarely used and it is even fixed now. +Patch403: gdb-ccache-workaround.patch # Implement `info common' for Fortran. #=push -Patch404: gdb-fortran-common-reduce.patch +Patch404: gdb-fortran-common-reduce.patch #=push -Patch405: gdb-fortran-common.patch +Patch405: gdb-fortran-common.patch # Testcase for "Do not make up line information" fix by Daniel Jacobowitz. #=fedoratest -Patch407: gdb-lineno-makeup-test.patch +Patch407: gdb-lineno-makeup-test.patch # Test power7 ppc disassembly. #=fedoratest+ppc -Patch408: gdb-ppc-power7-test.patch - -# Revert: Add -Wunused-function to compile flags. -#=drop -Patch412: gdb-unused-revert.patch +Patch408: gdb-ppc-power7-test.patch # Fix i386+x86_64 rwatch+awatch before run, regression against 6.8 (BZ 541866). # Fix i386 rwatch+awatch before run (BZ 688788, on top of BZ 541866). #=push+work: It should be fixed properly instead. -Patch417: gdb-bz541866-rwatch-before-run.patch +Patch417: gdb-bz541866-rwatch-before-run.patch # Workaround non-stop moribund locations exploited by kernel utrace (BZ 590623). #=push+work: Currently it is still not fully safe. -Patch459: gdb-moribund-utrace-workaround.patch +Patch459: gdb-moribund-utrace-workaround.patch # Fix follow-exec for C++ programs (bugreported by Martin Stransky). #=fedoratest -Patch470: gdb-archer-next-over-throw-cxx-exec.patch +Patch470: gdb-archer-next-over-throw-cxx-exec.patch # Backport DWARF-4 support (BZ 601887, Tom Tromey). #=fedoratest -Patch475: gdb-bz601887-dwarf4-rh-test.patch - -# Print 2D C++ vectors as matrices (BZ 562763, sourceware10659, Chris Moller). -#=push+work: There are some outstanding issues, check the mails. -Patch486: gdb-bz562763-pretty-print-2d-vectors.patch -#=push+work: There are some outstanding issues, check the mails. -Patch487: gdb-bz562763-pretty-print-2d-vectors-libstdcxx.patch +Patch475: gdb-bz601887-dwarf4-rh-test.patch # [delayed-symfile] Test a backtrace regression on CFIs without DIE (BZ 614604). #=fedoratest -Patch490: gdb-test-bt-cfi-without-die.patch +Patch490: gdb-test-bt-cfi-without-die.patch # Provide /usr/bin/gdb-add-index for rpm-build (Tom Tromey). -#=drop: Re-check against the upstream version. -Patch491: gdb-gdb-add-index-script.patch +#=fedora: Re-check against the upstream version. +Patch491: gdb-gdb-add-index-script.patch # Out of memory is just an error, not fatal (uninitialized VLS vars, BZ 568248). #=drop+work: Inferior objects should be read in parts, then this patch gets obsoleted. -Patch496: gdb-bz568248-oom-is-error.patch +Patch496: gdb-bz568248-oom-is-error.patch # Fix gcore writer for -Wl,-z,relro (PR corefiles/11804). #=push: There is different patch on gdb-patches, waiting now for resolution in kernel. -Patch504: gdb-bz623749-gcore-relro.patch +Patch504: gdb-bz623749-gcore-relro.patch # Fix lost siginfo_t in linux-nat (BZ 592031). #=push -Patch510: gdb-bz592031-siginfo-lost-4of5.patch +Patch510: gdb-bz592031-siginfo-lost-4of5.patch #=push -Patch511: gdb-bz592031-siginfo-lost-5of5.patch +Patch511: gdb-bz592031-siginfo-lost-5of5.patch # Verify GDB Python built-in function gdb.solib_address exists (BZ # 634108). #=fedoratest -Patch526: gdb-bz634108-solib_address.patch - -# New testcase py-prettyprint.exp:print hint_error (for BZ 611569, BZ 629236). -#=fedoratest -Patch541: gdb-test-pp-hint-error.patch +Patch526: gdb-bz634108-solib_address.patch # New test gdb.arch/x86_64-pid0-core.exp for kernel PID 0 cores (BZ 611435). #=fedoratest -Patch542: gdb-test-pid0-core.patch +Patch542: gdb-test-pid0-core.patch # [archer-tromey-delayed-symfile] New test gdb.dwarf2/dw2-aranges.exp. -# =fedoratest -Patch547: gdb-test-dw2-aranges.patch +#=fedoratest +Patch547: gdb-test-dw2-aranges.patch # [archer-keiths-expr-cumulative+upstream] Import C++ testcases. -# =fedoratest -Patch548: gdb-test-expr-cumulative-archer.patch - -# Temporary fix of F15 gcc-4.6 child DIEs of DW_TAG_typedef (BZ 672230). -# =push -Patch555: gdb-gcc46-typedef.patch - -# Workaround gcc-4.6 stdarg false prologue end (GDB PR 12435 + GCC PR 47471). -# =push -Patch556: gdb-gcc46-stdarg-prologue.patch - -# Fix attach/core-load of {,un}prelinked i386 libs (bugreport by Michal Toman). -Patch571: gdb-prelink-rela.patch - -# Fix threading internal error on corrupted memory (BZ 677654). -Patch572: gdb-core-thread-internalerr-1of3.patch -Patch573: gdb-core-thread-internalerr-2of3.patch -Patch574: gdb-core-thread-internalerr-3of3.patch +#=fedoratest +Patch548: gdb-test-expr-cumulative-archer.patch # Toolchain on sparc is slightly broken and debuginfo files are generated # with non 64bit aligned tables/offsets. @@ -528,79 +464,125 @@ Patch574: gdb-core-thread-internalerr-3of3.patch # # While we figure out what's wrong in the toolchain and do a full archive # rebuild to fix it, we need to be able to use gdb :) -Patch579: gdb-7.2.50-sparc-add-workaround-to-broken-debug-files.patch +#=push+work +Patch579: gdb-7.2.50-sparc-add-workaround-to-broken-debug-files.patch -# Fix case insensitive symbols for Fortran by iFort (BZ 645773). -Patch580: gdb-bz645773-case-insensitive-1of5.patch -Patch581: gdb-bz645773-case-insensitive-2of5.patch -Patch582: gdb-bz645773-case-insensitive-3of5.patch -Patch583: gdb-bz645773-case-insensitive-4of5.patch +# Fix dlopen of libpthread.so, patched glibc required (Gary Benson, BZ 669432). +#=push +Patch618: gdb-dlopen-stap-probe.patch +Patch619: gdb-dlopen-stap-probe-test.patch -# Bundle readline-6.2 with a workaround of skipped "ask" (BZ 701131). -Patch591: gdb-bz701131-readline62-1of3.patch -Patch592: gdb-bz701131-readline62-2of3.patch -Patch593: gdb-bz701131-readline62-3of3.patch +# Work around PR libc/13097 "linux-vdso.so.1" warning message. +#=push +Patch627: gdb-glibc-vdso-workaround.patch -# [stap] Fix double free. -Patch594: gdb-stap-double-free.patch +# Hack for proper PIE run of the testsuite. +#=fedoratest +Patch634: gdb-runtest-pie-override.patch + +# Work around readline-6.2 incompatibility not asking for --more-- (BZ 701131). +#=fedora +Source642: gdb-readline62-ask-more-rh.patch + +# Enable smaller %{_bindir}/gdb in future by no longer using -rdynamic. +#=push +Patch643: gdb-python-rdynamic.patch + +# Print reasons for failed attach/spawn incl. SELinux deny_ptrace (BZ 786878). +#=push +Patch653: gdb-attach-fail-reasons-5of5.patch +#=fedora +Patch657: gdb-attach-fail-reasons-5of5configure.patch + +# Fix inferior calls, particularly uncaught thrown exceptions (BZ 799531). +#=push+work +Patch654: gdb-x86-onstack-1of2.patch +Patch658: gdb-x86-onstack-2of2.patch + +# Workaround crashes from stale frame_info pointer (BZ 804256). +#=push+work +Patch661: gdb-stale-frame_info.patch + +# Workaround PR libc/14166 for inferior calls of strstr. +#=push+work: But push it to glibc. +Patch690: gdb-glibc-strstr-workaround.patch + +# Fix dejagnu-1.5-4.fc17 compatibility for Go (for BZ 635651). +#=fedoratest +Patch692: gdb-dejagnu-go.patch + +# Revert recent breakage of UNIX objfiles order for symbols lookup. +Patch693: gdb-objfile-order.patch + +# Disable -lmcheck in the development builds. +Patch694: gdb-disable-mcheck.patch + +# Fix assertion on some files as glibc-2.15.90-8.fc18 (Doug Evans). +Patch695: gdb-index-assert.patch # Upstream patch to fix gcc -Werror -Patch1002: gdb-6.6-buildid-locate-rpm-suse.patch +Patch1002: gdb-6.6-buildid-locate-rpm-suse.patch +Patch1003: gdb-ppc-ptrace.diff -BuildRequires: bison flex gettext glibc-devel ncurses-devel texinfo zlib-devel +BuildRequires: ncurses-devel texinfo gettext flex bison glibc-devel zlib-devel %if %{suse_version} < 1020 -BuildRequires: expat +BuildRequires: expat %else -BuildRequires: libexpat-devel +BuildRequires: libexpat-devel %endif -BuildRequires: readline-devel -BuildRequires: zlib-devel +BuildRequires: readline-devel +BuildRequires: zlib-devel +BuildRequires: rpm-devel %if 0%{!?_without_python:1} %if 0%{suse_version} > 1000 -Requires: python-base +Requires: python-base %endif -BuildRequires: python-devel +BuildRequires: python-devel %endif # 0%{!?_without_python:1} +# BuildArch would break RHEL-5 by overriding arch and not building noarch. +%if 0%{?el5:1} +ExclusiveArch: noarch i386 x86_64 ppc ppc64 ia64 s390 s390x +%endif # 0%{?el5:1} + %if 0%{?_with_testsuite:1} # Ensure the devel libraries are installed for both multilib arches. -%define bits_local %{?_isa} -%define bits_other %{?_isa} +%global bits_local %{?_isa} +%global bits_other %{?_isa} %if 0%{!?el5:1} %ifarch s390x -%define bits_other (%{__isa_name}-32) +%global bits_other (%{__isa_name}-32) %else #!s390x %ifarch ppc -%define bits_other (%{__isa_name}-64) +%global bits_other (%{__isa_name}-64) %else #!ppc %ifarch sparc64 ppc64 s390x x86_64 -%define bits_other (%{__isa_name}-32) +%global bits_other (%{__isa_name}-32) %endif #sparc64 ppc64 s390x x86_64 %endif #!ppc %endif #!s390x %endif #!el5 -BuildRequires: dejagnu sharutils +BuildRequires: sharutils dejagnu # gcc-objc++ is not covered by the GDB testsuite. -BuildRequires: gcc gcc-c++ gcc-gfortran gcc-java gcc-objc +BuildRequires: gcc gcc-c++ gcc-gfortran gcc-java gcc-objc # Copied from gcc-4.1.2-32. %ifarch %{ix86} x86_64 ia64 ppc alpha -BuildRequires: gcc-ada +BuildRequires: gcc-ada %endif -BuildRequires: glibc-devel-32bit +BuildRequires: glibc-devel-32bit %if 0%{suse_version} > 1120 -BuildRequires: gcc-c++-32bit +BuildRequires: gcc-c++-32bit %endif %endif # 0%{?_with_testsuite:1} %ifarch ia64 -BuildRequires: libunwind-devel -Requires: libunwind +BuildRequires: libunwind-devel +Requires: libunwind %endif -PreReq: %install_info_prereq %description GDB, the GNU debugger, allows you to debug programs written in C, C++, @@ -608,11 +590,9 @@ Java, and other languages, by executing them in a controlled fashion and printing their data. %if %{suse_version} > 1010 - %package -n gdbserver - -Summary: A standalone server for GDB (the GNU source-level debugger) -Group: Development/Debuggers +Summary: A standalone server for GDB (the GNU source-level debugger) +Group: Development/Tools/Debuggers %description -n gdbserver GDB, the GNU debugger, allows you to debug programs written in C, C++, @@ -623,17 +603,27 @@ This package provides a program that allows you to run GDB on a different machine than the one which is running the program being debugged. %endif +%package doc +Summary: Documentation for GDB (the GNU source-level debugger) +License: GFDL-1.3 +Group: Documentation/Other +PreReq: %{install_info_prereq} + +%description doc +GDB, the GNU debugger, allows you to debug programs written in C, C++, +Java, and other languages, by executing them in a controlled fashion +and printing their data. + +This package provides INFO, HTML and PDF user manual for GDB. + + %prep - -# This allows the tarball name to be different from our -# version-release name. - %setup -q -n %{gdb_src} -%if 0%{?rhel:1} +%if 0%{?rhel:1} && 0%{?rhel} <= 6 # libstdc++ pretty printers. tar xjf %{SOURCE5} -%endif # 0%{?rhel:1} +%endif # 0%{?rhel:1} && 0%{?rhel} <= 6 # Files have `# ' statements breaking VPATH / find-debuginfo.sh . rm -f gdb/ada-exp.c gdb/ada-lex.c gdb/c-exp.c gdb/cp-name-parser.c gdb/f-exp.c @@ -644,14 +634,11 @@ rm -f gdb/jv-exp.c gdb/m2-exp.c gdb/objc-exp.c gdb/p-exp.c # Match the Fedora's version info. %patch2 -p1 -%if 0%{!?_with_upstream:1} - -#patch232 -p1 +%patch232 -p1 %patch349 -p1 %patch1 -p1 %patch3 -p1 -%patch104 -p1 %patch105 -p1 %patch111 -p1 %patch112 -p1 @@ -661,11 +648,8 @@ rm -f gdb/jv-exp.c gdb/m2-exp.c gdb/objc-exp.c gdb/p-exp.c %patch133 -p1 %patch136 -p1 %patch140 -p1 -%patch141 -p1 -%patch259 -p1 %patch145 -p1 %patch153 -p1 -%patch157 -p1 %patch158 -p1 %patch160 -p1 %patch161 -p1 @@ -694,11 +678,11 @@ rm -f gdb/jv-exp.c gdb/m2-exp.c gdb/objc-exp.c gdb/p-exp.c %patch258 -p1 %patch260 -p1 %patch263 -p1 -%patch265 -p1 -%patch266 -p1 %patch271 -p1 %patch274 -p1 +%patch659 -p1 %patch353 -p1 +%patch276 -p1 %patch282 -p1 %patch284 -p1 %patch287 -p1 @@ -712,11 +696,9 @@ rm -f gdb/jv-exp.c gdb/m2-exp.c gdb/objc-exp.c gdb/p-exp.c %patch315 -p1 %patch317 -p1 %patch320 -p1 -%patch326 -p1 %patch329 -p1 %patch330 -p1 %patch331 -p1 -%patch337 -p1 %patch343 -p1 %patch348 -p1 %patch360 -p1 @@ -732,12 +714,10 @@ rm -f gdb/jv-exp.c gdb/m2-exp.c gdb/objc-exp.c gdb/p-exp.c %patch394 -p1 %patch407 -p1 %patch408 -p1 -%patch412 -p1 %patch417 -p1 %patch459 -p1 %patch470 -p1 %patch475 -p1 -%patch486 -p1 %patch519 -p1 %patch490 -p1 %patch491 -p1 @@ -746,41 +726,33 @@ rm -f gdb/jv-exp.c gdb/m2-exp.c gdb/objc-exp.c gdb/p-exp.c %patch510 -p1 %patch511 -p1 %patch526 -p1 -%patch541 -p1 %patch542 -p1 %patch547 -p1 %patch548 -p1 -%patch555 -p1 -%patch556 -p1 -%patch571 -p1 -%patch572 -p1 -%patch573 -p1 -%patch574 -p1 %patch579 -p1 -%patch580 -p1 -%patch581 -p1 -%patch582 -p1 -%patch583 -p1 -%patch591 -p1 -%patch592 -p1 -%patch593 -p1 -%patch594 -p1 - -%if 0%{?rhel:1} -%patch487 -p1 -%endif # 0%{?rhel:1} +%patch618 -p1 +%patch619 -p1 +%patch627 -p1 +%patch634 -p1 +%patch643 -p1 +%patch653 -p1 +%patch657 -p1 +%patch654 -p1 +%patch658 -p1 +%patch661 -p1 +%patch690 -p1 +%patch692 -p1 +%patch693 -p1 +%patch694 -p1 +%patch695 -p1 %patch1002 -p1 +%patch1003 -p1 find -name "*.orig" | xargs rm -f ! find -name "*.rej" # Should not happen. -%endif # 0%{!?_with_upstream:1} - -# Change the version that gets printed at GDB startup, so it is SUSE -# specific. -# Fedora (%{version}-%{release}) -# Red Hat Enterprise Linux (%{version}-%{release}) +# Change the version that gets printed at GDB startup, so it is RH specific. cat > gdb/version.in << _FOO SUSE (%{version}-%{release}) _FOO @@ -793,6 +765,7 @@ rm -f bfd/doc/*.info-* rm -f gdb/doc/*.info rm -f gdb/doc/*.info-* + %build # Identify the build directory with the version of gdb as well as the @@ -806,17 +779,14 @@ do mkdir %{gdb_build}$fprofile cd %{gdb_build}$fprofile -# g77 executable is no longer present in Fedora gcc-4.x+. -g77="`which gfortran 2>/dev/null || true`" -test -z "$g77" || ln -s "$g77" ./g77 - export CFLAGS="$RPM_OPT_FLAGS" - -%if 0%{?_with_debug:1} -# --enable-werror could conflict with `-Wall -O0' but this is no longer true -# for recent GCCs. -CFLAGS="$CFLAGS -O0 -ggdb2" -%endif +export LIBRPM=no +if test -f /usr/%{_lib}/librpm.so.1; then + export LIBRPM=librpm.so.1 +fi +if test -f /usr/%{_lib}/librpm.so.2; then + export LIBRPM=librpm.so.2 +fi ../configure \ --prefix=%{_prefix} \ @@ -831,17 +801,17 @@ CFLAGS="$CFLAGS -O0 -ggdb2" --enable-gdb-build-warnings=,-Wno-unused \ %ifnarch %{ix86} alpha ia64 ppc s390 s390x x86_64 ppc64 sparc sparcv9 sparc64 --disable-werror \ -%else -%if 0%{?_with_upstream:1} - --disable-werror \ %else --enable-werror \ -%endif %endif --with-separate-debug-dir=/usr/lib/debug \ --disable-sim \ --disable-rpath \ +%if %{suse_version} > 1110 + --with-system-readline \ +%else --without-system-readline \ +%endif --with-expat \ $(: ppc64 host build crashes on ppc variant of libexpat.so ) \ --without-libexpat-prefix \ @@ -851,7 +821,11 @@ $(: ppc64 host build crashes on ppc variant of libexpat.so ) \ %else --without-python \ %endif +%if %{suse_version} >= 1130 + --with-rpm=$LIBRPM \ +%else --without-rpm \ +%endif %ifarch ia64 --with-libunwind \ %else @@ -861,14 +835,24 @@ $(: ppc64 host build crashes on ppc variant of libexpat.so ) \ --without-mmap \ %endif --enable-64-bit-bfd \ -%if 0%{?_with_debug:1} - --enable-static --disable-shared --enable-debug \ +%if %{have_inproctrace} + --enable-inprocess-agent \ +%else + --disable-inprocess-agent \ %endif +$(: %{_bindir}/mono-gdb.py is workaround for mono BZ 815501. ) \ + --with-auto-load-dir='$debugdir:$datadir/auto-load%{?scl::%{_root_datadir}/gdb/auto-load}' \ + --with-auto-load-safe-path='$debugdir:$datadir/auto-load%{?scl::%{_root_datadir}/gdb/auto-load}:%{_root_bindir}/mono-gdb.py' \ %ifarch sparc sparcv9 sparc-%{_vendor}-%{_target_os}%{?_gnu} +%else +$(: It breaks RHEL-5 by %{_target_platform} being noarch-redhat-linux-gnu ) \ +%ifarch noarch + $(:) %else %{_target_platform} %endif +%endif if [ -z "%{!?_with_profile:no}" ] then @@ -902,8 +886,14 @@ else FPROFILE_CFLAGS="" fi +# Prepare gdb/config.h first. +make %{?_smp_mflags} CFLAGS="$CFLAGS $FPROFILE_CFLAGS" LDFLAGS="$FPROFILE_CFLAGS" maybe-configure-gdb +perl -i.relocatable -pe 's/^(D\[".*_RELOCATABLE"\]=" )1(")$/${1}0$2/' gdb/config.status + make %{?_smp_mflags} CFLAGS="$CFLAGS $FPROFILE_CFLAGS" LDFLAGS="$FPROFILE_CFLAGS" +! grep '_RELOCATABLE.*1' gdb/config.h + if [ "$fprofile" = "-fprofile" ] then cd gdb @@ -987,18 +977,11 @@ gcc -o ./orphanripper %{SOURCE2} -Wall -lutil -ggdb2 mv -f ../../gdb/testsuite/$test ../gdb/testsuite/$test-DISABLED || : done -%if 0%{!?_with_upstream:1} # Run all the scheduled testsuite runs also in the PIE mode. - # Upstream GDB would lock up the testsuite run for too long on its failures. - CHECK="$(echo $CHECK|sed 's#check//unix/[^ ]*#& &/-fPIE/-pie#g')" -%endif # 0%{!?_with_upstream:1} + # See also: gdb-runtest-pie-override.exp + CHECK="$(echo $CHECK|sed 's#check//unix/[^ ]*#& &/-fPIC/-pie#g')" - ./orphanripper make %{?_smp_mflags} -k $CHECK \ -$(: Serialize the output to keep the order for regression checks. ) \ -%if 0%{?el5:1} - RUNTESTFLAGS="--tool gdb" \ -%endif - || : + ./orphanripper make %{?_smp_mflags} -k $CHECK || : ) for t in sum log do @@ -1021,20 +1004,26 @@ echo ====================TESTING END===================== cd %{gdb_build} rm -rf $RPM_BUILD_ROOT +# It would break RHEL-5 by leaving excessive files for the doc subpackage. +%ifnarch noarch + make %{?_smp_mflags} install DESTDIR=$RPM_BUILD_ROOT # install the gcore script in /usr/bin cp $RPM_BUILD_DIR/%{gdb_src}/gdb/gdb_gcore.sh $RPM_BUILD_ROOT%{_bindir}/gcore chmod 755 $RPM_BUILD_ROOT%{_bindir}/gcore -# Remove the gdb/gdbtui binaries duplicity. -test -x $RPM_BUILD_ROOT%{_prefix}/bin/gdbtui -ln -sf gdb $RPM_BUILD_ROOT%{_prefix}/bin/gdbtui -cmp $RPM_BUILD_ROOT%{_mandir}/*/gdb.1 $RPM_BUILD_ROOT%{_mandir}/*/gdbtui.1 -ln -sf gdb.1 $RPM_BUILD_ROOT%{_mandir}/*/gdbtui.1 +# Provide gdbtui for RHEL-5 and RHEL-6 as it is removed upstream (BZ 797664). +%if 0%{?rhel:1} && 0%{?rhel} <= 6 +test ! -e $RPM_BUILD_ROOT%{_prefix}/bin/gdbtui +install -m 755 %{SOURCE6} $RPM_BUILD_ROOT%{_prefix}/bin/gdbtui +ln -sf gdb.1 $RPM_BUILD_ROOT%{_mandir}/man1/gdbtui.1 +%endif # 0%{?rhel:1} && 0%{?rhel} <= 6 mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/gdbinit.d +touch -r %{SOURCE4} $RPM_BUILD_ROOT%{_sysconfdir}/gdbinit.d sed 's#%%{_sysconfdir}#%{_sysconfdir}#g' <%{SOURCE4} >$RPM_BUILD_ROOT%{_sysconfdir}/gdbinit +touch -r %{SOURCE4} $RPM_BUILD_ROOT%{_sysconfdir}/gdbinit for i in `find $RPM_BUILD_ROOT%{_datadir}/gdb/python/gdb -name "*.py"` do @@ -1042,23 +1031,40 @@ do touch -r $RPM_BUILD_DIR/%{gdb_src}/gdb/ChangeLog $i done -%if 0%{?rhel:1} +%if 0%{?_enable_debug_packages:1} && 0%{!?_without_python:1} +mkdir -p $RPM_BUILD_ROOT/usr/lib/debug%{_bindir} +cp -p $RPM_BUILD_DIR/%{gdb_src}/gdb/gdb-gdb.py $RPM_BUILD_ROOT/usr/lib/debug%{_bindir}/ +for pyo in "" "-O";do + # RHEL-5: AttributeError: 'module' object has no attribute 'compile_file' + python $pyo -c 'import compileall, re, sys; sys.exit (not compileall.compile_dir("'"$RPM_BUILD_ROOT/usr/lib/debug%{_bindir}"'", 1, "'"/usr/lib/debug%{_bindir}"'"))' +done +%endif # 0%{?_enable_debug_packages:1} && 0%{!?_without_python:1} + +%if 0%{?rhel:1} && 0%{?rhel} <= 6 %if 0%{!?_without_python:1} # Temporarily now: for LIB in lib lib64;do - LIBPATH="$RPM_BUILD_ROOT%{_datadir}/gdb/auto-load%{_prefix}/$LIB" + LIBPATH="$RPM_BUILD_ROOT%{_datadir}/gdb/auto-load%{_root_prefix}/$LIB" mkdir -p $LIBPATH # basename is being run only for the native (non-biarch) file. sed -e 's,@pythondir@,%{_datadir}/gdb/python,' \ - -e 's,@toolexeclibdir@,%{_prefix}/'"$LIB," \ + -e 's,@toolexeclibdir@,%{_root_prefix}/'"$LIB," \ < $RPM_BUILD_DIR/%{gdb_src}/%{libstdcxxpython}/hook.in \ - > $LIBPATH/$(basename %{_prefix}/%{_lib}/libstdc++.so.6.*)-gdb.py + > $LIBPATH/$(basename %{_root_prefix}/%{_lib}/libstdc++.so.6.*)-gdb.py + # Test the filename 'libstdc++.so.6.*' has matched. + test -f $LIBPATH/libstdc++.so.6.[0-9]*-gdb.py done test ! -e $RPM_BUILD_ROOT%{_datadir}/gdb/python/libstdcxx cp -a $RPM_BUILD_DIR/%{gdb_src}/%{libstdcxxpython}/libstdcxx \ $RPM_BUILD_ROOT%{_datadir}/gdb/python/libstdcxx +for i in `find $RPM_BUILD_ROOT%{_datadir}/gdb/python -name "*.py"` \ + `find $RPM_BUILD_ROOT%{_datadir}/gdb/auto-load%{_prefix} -name "*.py"` \ +; do + # Files come from gdb-archer.patch and can be also further patched. + touch -r $RPM_BUILD_DIR/%{gdb_src}/gdb/ChangeLog $i +done %endif # 0%{!?_without_python:1} -%endif # 0%{?rhel:1} +%endif # 0%{?rhel:1} && 0%{?rhel} <= 6 # Remove the files that are part of a gdb build but that are owned and # provided by other packages. @@ -1067,19 +1073,10 @@ cp -a $RPM_BUILD_DIR/%{gdb_src}/%{libstdcxxpython}/libstdcxx \ rm -rf $RPM_BUILD_ROOT%{_datadir}/locale/ rm -f $RPM_BUILD_ROOT%{_infodir}/bfd* rm -f $RPM_BUILD_ROOT%{_infodir}/standard* -rm -f $RPM_BUILD_ROOT%{_infodir}/mmalloc* rm -f $RPM_BUILD_ROOT%{_infodir}/configure* -rm -f $RPM_BUILD_ROOT%{_infodir}/gdbint* -rm -f $RPM_BUILD_ROOT%{_infodir}/stabs* rm -rf $RPM_BUILD_ROOT%{_includedir} -rm -rf $RPM_BUILD_ROOT/%{_libdir}/lib{bfd*,opcodes*,iberty*,mmalloc*} +rm -rf $RPM_BUILD_ROOT/%{_libdir}/lib{bfd*,opcodes*,iberty*} -# Delete this too because the dir file will be updated at rpm install time. -# We don't want a gdb specific one overwriting the system wide one. - -rm -f $RPM_BUILD_ROOT%{_infodir}/dir - -%if 0%{!?_with_upstream:1} # pstack obsoletion cp -p %{SOURCE3} $RPM_BUILD_ROOT%{_mandir}/man1/gstack.1 @@ -1102,6 +1099,24 @@ cp -p %{SOURCE3} $RPM_BUILD_ROOT%{_mandir}/man1/gstack.1 %endif ) +# It would break RHEL-5 by leaving excessive files for the doc subpackage. +%if 0%{?el5:1} +rm -f $RPM_BUILD_ROOT%{_infodir}/annotate.info* +rm -f $RPM_BUILD_ROOT%{_infodir}/gdb.info* +%endif # 0%{?el5:1} +# -j1: There is some race resulting in: +# /usr/bin/texi2dvi: texinfo.tex appears to be broken, quitting. +make -j1 -C gdb/doc install DESTDIR=$RPM_BUILD_ROOT + +# Documentation only for development; keep 'rm's here after "noarch" above. +rm -f $RPM_BUILD_ROOT%{_infodir}/gdbint* +rm -f $RPM_BUILD_ROOT%{_infodir}/stabs* + +# Delete this too because the dir file will be updated at rpm install time. +# We don't want a gdb specific one overwriting the system wide one. + +rm -f $RPM_BUILD_ROOT%{_infodir}/dir + %clean rm -rf $RPM_BUILD_ROOT @@ -1132,16 +1147,17 @@ fi %doc COPYING3 COPYING COPYING.LIB README NEWS %{_bindir}/gcore %{_bindir}/gdb -%{_bindir}/gdbtui -%{_sysconfdir}/gdbinit +%config(noreplace) %{_sysconfdir}/gdbinit %{_sysconfdir}/gdbinit.d %{_mandir}/*/gdb.1* -%{_mandir}/*/gdbtui.1* -%if 0%{!?_with_upstream:1} %{_bindir}/gstack %{_mandir}/*/gstack.1* +# Provide gdbtui for RHEL-5 and RHEL-6 as it is removed upstream (BZ 797664). +%if 0%{?rhel:1} && 0%{?rhel} <= 6 +%{_bindir}/gdbtui +%{_mandir}/*/gdbtui.1* +%endif # 0%{?rhel:1} && 0%{?rhel} <= 6 %{_bindir}/gdb-add-index -%endif # 0%{!?_with_upstream:1} %{_datadir}/gdb %{_infodir}/annotate.info* %{_infodir}/gdb.info* @@ -1158,15 +1174,3118 @@ fi %if %{suse_version} > 1010 %ifnarch sparcv9 hppa - %files -n gdbserver %defattr(-,root,root) %{_bindir}/gdbserver %{_mandir}/*/gdbserver.1* -%ifarch %{ix86} x86_64 +%if %{have_inproctrace} %{_libdir}/libinproctrace.so -%endif +%endif # %{have_inproctrace} %endif %endif +%post doc +# This step is part of the installation of the RPM. Not to be confused +# with the 'make install ' of the build (rpmbuild) process. + +# For --excludedocs: +if [ -e %{_infodir}/gdb.info.gz ] +then + /sbin/install-info --info-dir=%{_infodir} %{_infodir}/annotate.info.gz || : + /sbin/install-info --info-dir=%{_infodir} %{_infodir}/gdb.info.gz || : +fi + +%preun doc +if [ $1 = 0 ] +then + # For --excludedocs: + if [ -e %{_infodir}/gdb.info.gz ] + then + /sbin/install-info --delete --info-dir=%{_infodir} %{_infodir}/annotate.info.gz || : + /sbin/install-info --delete --info-dir=%{_infodir} %{_infodir}/gdb.info.gz || : + fi +fi + + %changelog +* Wed Jun 6 2012 Jan Kratochvil - 7.4.50.20120603-3.fc18 +- Disable -lmcheck in the development builds. +- Fix assertion on some files as glibc-2.15.90-8.fc18 (Doug Evans). + +* Sun Jun 3 2012 Jan Kratochvil - 7.4.50.20120603-2.fc18 +- Fix Release. +- Make yum --enablerepo compatible with at least mock-1.1.21-1.fc16 Rawhide cfg. + +* Sun Jun 3 2012 Jan Kratochvil - 7.4.50.20120602-1.fc18 +- Rebase to FSF GDB 7.4.50.20120602. +- [testsuite] BuildRequire gcc-go. +- Drop printing 2D C++ vectors as matrices which no longer worked (BZ 562763). +- Fix dejagnu-1.5-4.fc17 compatibility for Go (for BZ 635651). +- Use librpm.so.3 for rpm-4.10.0 in Fedora 18. +- Revert recent breakage of UNIX objfiles order for symbols lookup. + +* Sat Jun 2 2012 Jan Kratochvil - 7.4.50.20120120-48.fc17 +- [ppc] Fix hardware watchpoints on PowerPC (BZ 827600, Edjunior Machado). + +* Mon May 28 2012 Jan Kratochvil - 7.4.50.20120120-47.fc17 +- Workaround PR libc/14166 for inferior calls of strstr. + +* Mon May 14 2012 Jan Kratochvil - 7.4.50.20120120-46.fc17 +- [RHEL5] Workaround doc build race. + +* Mon May 14 2012 Jan Kratochvil - 7.4.50.20120120-45.fc17 +- Rename "set auto-load" patchset variable $ddir to $datadir. + +* Wed May 9 2012 Jan Kratochvil - 7.4.50.20120120-44.fc17 +- Fix in "set auto-load" patchset for SCL scripts inheritance (BZ 815910). + +* Wed Apr 25 2012 Jan Kratochvil - 7.4.50.20120120-43.fc17 +- [RHEL5] Workaround kernel for detaching SIGSTOPped processes (BZ 809382). + +* Tue Apr 24 2012 Jan Kratochvil - 7.4.50.20120120-42.fc17 +- Update "set auto-load" patchset and the --with-auto-load-safe-path setting. +- [RHEL] Disable gdb-add-index even on RHEL-6 as RHEL-6.0 had too old elfutils. + +* Wed Apr 18 2012 Jan Kratochvil - 7.4.50.20120120-41.fc17 +- [RHEL] Fix --with-auto-load-safe-path systems prior to /usr move. + +* Wed Apr 18 2012 Jan Kratochvil - 7.4.50.20120120-40.fc17 +- Security fix for loading untrusted inferiors, see "set auto-load" (BZ 756117). + +* Fri Apr 13 2012 Jan Kratochvil - 7.4.50.20120120-39.fc17 +- [RHEL7] Fix/remove readline-devel BuildRequires redundant distro suffic .fc17. + +* Wed Apr 4 2012 Jan Kratochvil - 7.4.50.20120120-38.fc17 +- Workaround crashes from stale frame_info pointer (BZ 804256). + +* Wed Apr 4 2012 Jan Kratochvil - 7.4.50.20120120-37.fc17 +- testsuite: Fix break-interp.exp expections for updated glibc (BZ 752834). + +* Wed Apr 4 2012 Jan Kratochvil - 7.4.50.20120120-36.fc17 +- [RHEL5,RHEL6] Reintroduce fix attaching to stopped processes. + +* Fri Mar 30 2012 Jan Kratochvil - 7.4.50.20120120-35.fc17 +- Fix performance regressions with .gdb_index (Tom Tromey, BZ 805274). + +* Fri Mar 30 2012 Jan Kratochvil - 7.4.50.20120120-34.fc17 +- Fixup %{_datadir}/gdb timestamps for multilib conflicts on RHELs. + +* Mon Mar 26 2012 Jan Kratochvil - 7.4.50.20120120-33.fc17 +- [vla] Fix regression on no type for subrange from IBM XLF Fortran (BZ 806920). + +* Sat Mar 17 2012 Jan Kratochvil - 7.4.50.20120120-32.fc17 +- Fix loading of core files without build-ids but with build-ids in executables. + +* Fri Mar 9 2012 Jan Kratochvil - 7.4.50.20120120-31.fc17 +- Fix an implied regression by the inferior calls fix below (BZ 799531). + +* Fri Mar 9 2012 Jan Kratochvil - 7.4.50.20120120-30.fc17 +- Fix SELinux deny_ptrace .spec build rules (BZ 786878). + +* Tue Mar 6 2012 Jan Kratochvil - 7.4.50.20120120-29.fc17 +- Fix inferior calls, particularly uncaught thrown exceptions (BZ 799531). +- Fix DWARF DIEs CU vs. section relative offsets (Joel Brobecker, me). + +* Tue Mar 6 2012 Jan Kratochvil - 7.4.50.20120120-28.fc17 +- Print reasons for failed attach/spawn incl. SELinux deny_ptrace (BZ 786878). + +* Sun Mar 4 2012 Jan Kratochvil - 7.4.50.20120120-27.fc17 +- [rhel5] Fix up the previous commit (BZ 799318). + +* Sun Mar 4 2012 Jan Kratochvil - 7.4.50.20120120-26.fc17 +- [rhel5] Fix up the previous commit (BZ 799318). + +* Sun Mar 4 2012 Jan Kratochvil - 7.4.50.20120120-25.fc17 +- [rhel5] Workaround rpmbuild to make the doc subpkg noarch again (BZ 799318). + +* Fri Mar 2 2012 Jan Kratochvil - 7.4.50.20120120-24.fc17 +- [vla] Fix crash for dynamic.exp with gcc-gfortran-4.1.2-51.el5.x86_64. +- Reintroduce RHEL-5 glibc workaround for bt-clone-stop.exp. +- testsuite: Update/fix rh634108-solib_address.exp for the upstreamed API. + +* Wed Feb 29 2012 Jan Kratochvil - 7.4.50.20120120-23.fc17 +- Add kernel vDSO workaround (`no loadable ...') on RHEL-5 (kernel BZ 765875). +- Fix skipping of prologues on RHEL-5 gcc-4.1 -O2 -g code (BZ 797889). +- Fix breakpoint warning during 'next' over exit() (Tom Tromey, BZ 797892). + +* Tue Feb 28 2012 Jan Kratochvil - 7.4.50.20120120-22.fc17 +- testsuite: Fix gdb.base/macscp.exp ccache workaround in SCL mode. +- Adjust the RHEL/F version string automatically (BZ 797651, BZ 797646). +- Provide gdbtui for RHEL-5 and RHEL-6 as it is removed upstream (BZ 797664). + +* Fri Feb 24 2012 Jan Kratochvil - 7.4.50.20120120-21.fc17 +- testsuite: Do not use gcc44/gfortran44 on RHEL-5 if in SCL mode. + +* Wed Feb 22 2012 Jan Kratochvil - 7.4.50.20120120-20.fc17 +- Fix libinproctrace.so build on RHEL-5 i386 (disable it on RHEL-5). + +* Wed Feb 22 2012 Jan Kratochvil - 7.4.50.20120120-19.fc17 +- Implement SCL (scl-utils-build) macros. + +* Tue Feb 21 2012 Jan Kratochvil - 7.4.50.20120120-18.fc17 +- Fix debuginfo gdb-gdb.py build without redhat-rpm-config and on RHEL-5. +- Provide precompiled variants of gdb-gdb.py. + +* Mon Feb 13 2012 Jan Kratochvil - 7.4.50.20120120-17.fc17 +- gstack: Turn off --readnever (suggested by Oliver Henshaw). + +* Fri Feb 10 2012 Jan Kratochvil - 7.4.50.20120120-16.fc17 +- [RHELs] Drop simulation of legacy behavior - new GDB should behave as new GDB. + +* Fri Feb 10 2012 Jan Kratochvil - 7.4.50.20120120-15.fc17 +- Simplify %%setup .spec rule. + +* Fri Feb 10 2012 Jan Kratochvil - 7.4.50.20120120-14.fc17 +- Drop --with upstream .spec rules. + +* Fri Feb 10 2012 Jan Kratochvil - 7.4.50.20120120-13.fc17 +- Drop --with debug .spec rules. + +* Thu Feb 9 2012 Jan Kratochvil - 7.4.50.20120120-12.fc17 +- Improve performance for C++ symbols expansion (Tom Tromey, BZ 787487). +- Install also gdb-gdb.py pretty printers. + +* Thu Feb 9 2012 Jan Kratochvil - 7.4.50.20120120-11.fc17 +- Fix possible NULL crash in find_charset_names (Tom Tromey, BZ 786091). +- [ppc*] Fix build failure due to GCC aliasing warning (BZ 786504). + +* Sat Jan 21 2012 Jan Kratochvil - 7.4.50.20120120-10.fc17 +- Rebase to FSF GDB 7.4.50.20120120. +- Drop the g77 .spec provisioning as it has been fixed in FSF GDB. + +* Thu Jan 19 2012 Jan Kratochvil - 7.4.50.20120103-9.fc17 +- Enable smaller %{_bindir}/gdb in future by no longer using -rdynamic. +- Make --enablerepo to use '*-debug*' for RHEL compatibility (BZ 781571). +- On older RHELs make readline bundled again (BZ 701131). +- Fix build compatibility with RHEL-5 due to false noarch build. + +* Wed Jan 11 2012 Jan Kratochvil - 7.4.50.20120103-8.fc17 +- Disable unexpected GDB directories relocatability. + +* Wed Jan 11 2012 Jan Kratochvil - 7.4.50.20120103-7.fc17 +- Fix BuildRequires for RHEL compatibility (BZ 701131). + +* Wed Jan 11 2012 Jan Kratochvil - 7.4.50.20120103-6.fc17 +- Provide %%snap timestamp for: Provides: bundled(librarypackage) +- Replace %%define by %%global. +- Replace Java in Summary with Fortran (only GCC-compiled Java is supported). +- Unbundle readline-6.2 with a workaround of skipped "ask" (BZ 701131). +- Work around readline-6.2 incompatibility not asking for --more-- (BZ 701131). + +* Sat Jan 7 2012 Jan Kratochvil - 7.4.50.20120103-5.fc17 +- Mark %{_sysconfdir}/gdbinit as %%config(noreplace). +- Add appropriate: Provides: bundled(librarypackage). +- Remove excessive explicit Requires: librarypackage. + +* Thu Jan 5 2012 Jan Kratochvil - 7.4.50.20120103-4.fc17 +- Fix linking on non-x86* (such as s390*) after libgdb.a removal. + +* Wed Jan 4 2012 Jan Kratochvil - 7.4.50.20120103-3.fc17 +- Reinclude gdb-dlopen-stap-probe.patch (missing in Fedora glibc - BZ 752476). + +* Tue Jan 3 2012 Jan Kratochvil - 7.4.50.20120103-2.fc17 +- Fix SystemTap support regression on i686 (Sergio Durigan Junior). + +* Tue Jan 3 2012 Jan Kratochvil - 7.4.50.20120103-1.fc17 +- Rebase to FSF GDB 7.4.50.20120103. + +* Mon Nov 28 2011 Jan Kratochvil - 7.3.50.20110722-11.fc17 +- No longer build bundled libstdc++ pretty printers on RHELs >= 7. + +* Sat Nov 5 2011 Sergio Durigan Junior - 7.3.50.20110722-10.fc16 +- Backport fix for crash in cp_scan_for_anonymous_namespace + (Aleksandar Ristovski, BZ 750341). + +* Fri Oct 14 2011 Jan Kratochvil - 7.3.50.20110722-9.fc16 +- Backport `info os processes' crash fix - for Eclipse (Pedro Alves, BZ 746294). + +* Tue Oct 11 2011 Jan Kratochvil - 7.3.50.20110722-8.fc16 +- Fix PIE testsuite run; new lib/future.exp hack and use -fPIC instead of -fPIE. + +* Mon Sep 26 2011 Jan Kratochvil - 7.3.50.20110722-7.fc16 +- [vla] Fix VLA arrays displayed in `bt full' (BZ 738482). +- Fix DW_OP_GNU_implicit_pointer for DWARF32 v3+ on 64-bit arches. +- Fix internal error on some optimized-out values. + +* Tue Aug 16 2011 Jan Kratochvil - 7.3.50.20110722-6.fc16 +- Python command/function auto-loading (Phil Muldoon, BZ 730976). +- Work around PR libc/13097 "linux-vdso.so.1" warning message. +- [TUI] Fix stepi on stripped code. +- Add BuildRequires: systemtap-sdt-devel for archer-sergiodj-stap-patch-split. + +* Wed Aug 10 2011 Jan Kratochvil - 7.3.50.20110722-5.fc16 +- Fix dlopen of libpthread.so, patched glibc required (Gary Benson, BZ 669432). + +* Tue Aug 9 2011 Jan Kratochvil - 7.3.50.20110722-4.fc16 +- Improve GDB performance on inferior dlopen calls (Gary Benson, BZ 698001). +- [python] Fix crash when pretty printer fails (Phil Muldoon, BZ 712715). +- Fix crash on invalid C++ mangled names (BZ 729283). + +* Fri Jul 29 2011 Jan Kratochvil - 7.3.50.20110722-3.fc16 +- Fix regression from VLA merge affecting -O0 -g watchpoints. + +* Fri Jul 29 2011 Jan Kratochvil - 7.3.50.20110722-2.fc16 +- Include gcc -g3 .debug_macro implementation by Tom Tromey. + +* Sat Jul 23 2011 Jan Kratochvil - 7.3.50.20110722-1.fc16 +- Rebase to FSF GDB 7.3.50.20110722. +- Improve gcc-4.6 stdarg false prologue end workaround (GDB PR 12435 + GCC PR 47471). + +* Sun Jul 3 2011 Jan Kratochvil - 7.2.90.20110703-40.fc15 +- Rebase to FSF GDB 7.2.90.20110703 (which is a 7.3 pre-release). + - Adjust the `print errno' patch due to the DW_AT_linkage_name following again. + +* Fri Jun 24 2011 Jan Kratochvil - 7.2.90.20110525-39.fc15 +- Fix install-info for the gdb-doc subpackage (BZ 715228). + +* Wed May 25 2011 Jan Kratochvil - 7.2.90.20110525-38.fc15 +- Rebase to FSF GDB 7.2.90.20110525 (which is a 7.3 pre-release). +- [stap] Fix double free (Sergio Durigan Junior). + +* Tue May 3 2011 Jan Kratochvil - 7.2.90.20110429-37.fc15 +- Search also for . files in /usr/lib/debug/.build-id (BZ 641377). + +* Mon May 2 2011 Jan Kratochvil - 7.2.90.20110429-36.fc15 +- Bundle readline-6.2 with a workaround of skipped "ask" (BZ 701131). + - Use --without-system-readline, disable Requires and BuildRequires of readline. + - Drop gdb-6.5-readline-long-line-crash.patch and gdb-readline-6.0-signal.patch. + +* Fri Apr 29 2011 Jan Kratochvil - 7.2.90.20110429-35.fc15 +- Rebase to FSF GDB 7.2.90.20110429 (which is a 7.3 pre-release). +- Fix -O2 -g breakpoints internal error + prologue skipping (BZ 612253). +- Fix case insensitive symbols for Fortran by iFort (BZ 645773). +- Fix physname-related CU expansion issue for C++ (PR 12708). +- Fix Python access to inlined frames (BZ 694824). + +* Mon Apr 11 2011 Jan Kratochvil - 7.2.90.20110411-34.fc15 +- Rebase to FSF GDB 7.2.90.20110411 (which is a 7.3 pre-release). +- Include the proper fix for anonymous struct typedefs (Tom Tromey, BZ 672230). + +* Wed Mar 30 2011 Fabio M. Di Nitto - 7.2.50.20110328-33.fc15 +- Cleanup spec file to add sparc|sparcv9|sparc64. +- Add sparc specific workarounds to toolchain badness: + - disable mmap in bdf/ via --without-mmap configure option. + - add patch to not build mmap support on sparc for gdb/. + - gdb code is NOT at fault, but we need a working gdb while we sort out + the toolchain and rebuild all packages. this workaround is NOT for upstream. + +* Tue Mar 29 2011 Jan Kratochvil - 7.2.50.20110328-32.fc15 +- Fix occasional crash on `print errno' with no -pthread and no -g3 (BZ 690908). + +* Mon Mar 28 2011 Jan Kratochvil - 7.2.50.20110328-31.fc15 +- Rebase to FSF GDB 7.2.50.20110328 (which is a 7.3 pre-release). +- Bundle %%{libstdcxxpython}.tar.bz2 unconditionally - for rebulds on RHELs. + +* Sun Mar 20 2011 Jan Kratochvil - 7.2.50.20110320-30.fc15 +- Fix threading internal error on corrupted memory (BZ 677654). +- Fix i386 rwatch+awatch before run (BZ 688788, on top of BZ 541866). + +* Sun Mar 20 2011 Jan Kratochvil - 7.2.50.20110320-29.fc15 +- Rebase to FSF GDB 7.2.50.20110320 (which is a 7.3 pre-release). +- Merge archer-sergiodj-stap, the SystemTap probes breakpoints feature. + - [stap] Fix -O2 warnings. +- Fix Ada support crash on uninitialized gdbarch. + +* Sat Mar 5 2011 Jan Kratochvil - 7.2.50.20110305-28.fc15 +- Rebase to FSF GDB 7.2.50.20110305 (which is a 7.3 pre-release). + +* Fri Feb 25 2011 Jan Kratochvil - 7.2.50.20110222-27.fc15 +- Include doc also in the PDF form; new BuildRequires: texinfo-tex. + +* Wed Feb 23 2011 Jan Kratochvil - 7.2.50.20110222-26.fc15 +- Rebase to FSF GDB 7.2.50.20110222 (which is a 7.3 pre-release). +- Fix attach/core-load of {,un}prelinked i386 libs (bugreport by Michal Toman). + +* Mon Feb 21 2011 Jan Kratochvil - 7.2.50.20110218-25.fc15 +- Drop %%{_datadir}/gdb/syscalls/* for unsupported arches. + +* Fri Feb 18 2011 Jan Kratochvil - 7.2.50.20110218-24.fc15 +- Rebase to FSF GDB 7.2.50.20110218 (which is a 7.3 pre-release). +- [vla] Fox Fortran vector slices for allocated arrays (for BZ 609782). + +* Tue Feb 15 2011 Jan Kratochvil - 7.2.50.20110213-23.fc15 +- Move the GFDL License to gdb-doc. + +* Tue Feb 15 2011 Jan Kratochvil - 7.2.50.20110213-22.fc15 +- Fix gdb-doc Group to be Documentation, also provide it as noarch. + +* Tue Feb 15 2011 Jan Kratochvil - 7.2.50.20110213-21.fc15 +- Drop non-user (gdbint) and obsolete (stabs) documentation. +- Install also HTML files besides the INFO file. +- Create new subpackage gdb-doc for both INFO and HTML files. + +* Sun Feb 13 2011 Jan Kratochvil - 7.2.50.20110213-20.fc15 +- Rebase to FSF GDB 7.2.50.20110213 (which is a 7.3 pre-release). +- Fix occasionall unfound source lines (affecting at least glibc debugging). +- Fix const/volatile qualifiers of C++ types (PR c++/12328). +- Be backward compatible for --rebuild with <=fc14 librpm.so.1. + +* Tue Feb 08 2011 Fedora Release Engineering - 7.2.50.20110206-19.fc15 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Sun Feb 6 2011 Jan Kratochvil - 7.2.50.20110206-18.fc15 +- Fix regressions on C++ names resolving (PR 11734, PR 12273, Keith Seitz). + +* Sun Feb 6 2011 Jan Kratochvil - 7.2.50.20110206-17.fc15 +- Rebase to FSF GDB 7.2.50.20110206 (which is a 7.3 pre-release). + +* Thu Jan 27 2011 Jan Kratochvil - 7.2.50.20110125-16.fc15 +- Fix Python new-backtrace command (BZ 672235, Phil Muldoon). + +* Wed Jan 26 2011 Jan Kratochvil - 7.2.50.20110125-15.fc15 +- Temporary fix of F15 gcc-4.6 child DIEs of DW_TAG_typedef (BZ 672230). +- Workaround gcc-4.6 stdarg false prologue end (GDB PR 12435 + GCC PR 47471). + +* Tue Jan 25 2011 Jan Kratochvil - 7.2.50.20110125-14.fc15 +- Rebase to FSF GDB 7.2.50.20110125 (which is a 7.3 pre-release). +- Fix discontiguous address ranges in .gdb_index - v3->v4 (BZ 672281). +- Fix DWARF-3+ DW_AT_accessibility default assumption for F15 gcc-4.6. + +* Thu Jan 20 2011 Jan Kratochvil - 7.2.50.20110117-13.fc15 +- Use librpm.so.2 for rpm-4.9.0 in Fedora 15. + +* Mon Jan 17 2011 Jan Kratochvil - 7.2.50.20110117-12.fc15 +- Use %%{?dist} for sanity checking tools compliance (suggested by Petr Muller). + +* Mon Jan 17 2011 Jan Kratochvil - 7.2.50.20110117-11.fc15 +- Rebase to FSF GDB 7.2.50.20110117 (which is a 7.3 pre-release). +- Fix callback-mode readline-6.0 regression for CTRL-C (for RHEL-6.0). + - Fix occasional NULL dereference of the readline-6.0 workaround (BZ 575516). + +* Sat Jan 15 2011 Jan Kratochvil - 7.2.50.20110107-10.fc15 +- [delayed-symfile] Test a backtrace regression on CFIs without DIE (BZ 614604). +- [archer-tromey-delayed-symfile] New test gdb.dwarf2/dw2-aranges.exp. +- [archer-keiths-expr-cumulative+upstream] Import C++ testcases. + - testsuite: Fix gdb-test-expr-cumulative-archer.patch compatibility. + +* Fri Jan 7 2011 Jan Kratochvil - 7.2.50.20110107-9.fc15 +- Remove --with-pythondir as no longer valid. +- Provide %{_bindir}gdb-add-index even on RHEL-5. +- Provide again libstdc++ pretty printers for any RHEL. + +* Fri Jan 7 2011 Jan Kratochvil - 7.2.50.20110107-8.fc15 +- Rebase to FSF GDB 7.2.50.20110107 (which is a 7.3 pre-release). +- Import archer-tromey-python (BZ 666177, branch update by Phil Muldoon). + +* Tue Jan 4 2011 Jan Kratochvil - 7.2.50.20110104-7.fc15 +- Rebase to FSF GDB 7.2.50.20110104 (which is a 7.3 pre-release). +- New testcase py-prettyprint.exp:print hint_error (for BZ 611569, BZ 629236). +- New test gdb.arch/x86_64-pid0-core.exp for kernel PID 0 cores (BZ 611435). + +* Sat Jan 1 2011 Jan Kratochvil - 7.2.50.20101231-6.fc15 +- Fix --with-system-readline doc build upstream regression. + +* Sat Jan 1 2011 Jan Kratochvil - 7.2.50.20101231-5.fc15 +- Rebase to FSF GDB 7.2.50.20101231 (which is a 7.3 pre-release). +- Remove gdb-6.3-bt-past-zero-20051201.patch, gdb-archer-ada.patch and + gdb-6.3-framepczero-20040927.patch already removed from .spec before. +- Remove gdb-6.5-dwarf-stack-overflow.patch, upstreamed (Tom Tromey). +- Remove gdb-6.6-bz225783-gdb-debuginfo-paths.patch, upstreamed (Tom Tromey). +- Remove gdb-6.6-readline-system.patch, reimplemented upstream (Tom Tromey). +- Remove gdb-bz642879-elfread-sigint-stale.patch, upstreamed (Jan Kratochvil). +- Remove gdb-next-over-throw.patch, upstreamed (Tom Tromey). + +* Mon Dec 27 2010 Jan Kratochvil - 7.2.50.20101117-4.fc15 +- Provide stub %%{_sysconfdir}/gdbinit (BZ 651232). + +* Mon Dec 27 2010 Jan Kratochvil - 7.2.50.20101117-3.fc15 +- Fix ppc* compilation of PRPSINFO in the core files (BZ 662995, for BZ 254229). +- Fix (disable) non-x86* compilation of libinproctrace.so (for BZ 662995). + +* Thu Nov 18 2010 Jan Kratochvil - 7.2.50.20101117-2.fc15 +- Drop gdb-6.8-glibc-headers-compat.patch: GNU/Linux irrelevant (Tom Tromey). +- Drop gdb-6.3-terminal-fix-20050214.patch: The bug is not reproducible. +- Drop gdb-6.7-kernel-headers-compat.patch: kernel-headers seem to be fixed. +- Drop gdb-archer-ada.patch: No longer needed for Ada (Keith Seitz). +- New PR backtrace/12237, drop gdb-6.3-framepczero-20040927.patch + gdb-6.3-bt-past-zero-20051201.patch as they already had no effect. +- Drop gdb-6.8-gcc35998-ada-memory-trash.patch as a different fix is upstream. +- Drop gdb-6.3-inheritance-20050324.patch: the call is redundent (Tom Tromey). +- Drop gdb-6.3-large-core-20051206.patch: obsoleted by MAX_COPY_BYTES. + +* Thu Nov 18 2010 Jan Kratochvil - 7.2.50.20101117-1.fc15 +- Rebase to FSF GDB 7.2.50.20101117 (which is a 7.3 pre-release). + +* Sun Nov 7 2010 Jan Kratochvil - 7.2-25.fc14 +- iFort compat. - case insensitive DWARF not in lowercase (BZ 645773). + +* Thu Oct 14 2010 Jan Kratochvil - 7.2-24.fc14 +- Add gdb.spec comments on the *.patch files upstream merge status. + +* Thu Oct 14 2010 Jan Kratochvil - 7.2-23.fc14 +- Workaround librpm BZ 643031 due to its unexpected exit() calls (BZ 642879). +- Fix crash on CTRL-C while reading an ELF symbol file (BZ 642879). + +* Tue Oct 12 2010 Jan Kratochvil - 7.2-22.fc14 +- testsuite: Provide missing lib/gdb-python.exp (for BZ 639089). + +* Tue Oct 12 2010 Jan Kratochvil - 7.2-21.fc14 +- Fix python stale error state, also fix its save/restore (BZ 639089). +- Fix inferior exec of new PIE x86_64 (BZ 638979). + +* Tue Oct 12 2010 Jan Kratochvil - 7.2-20.fc14 +- Fixup Release for 20.fc14. + +* Tue Oct 12 2010 Jan Kratochvil - 7.2-19.fc14 +- Use .gdb_index v3 to fix excessive resources rqmnts (BZ 640634, Tom Tromey). + +* Wed Oct 6 2010 Jan Kratochvil - 7.2-18.fc14 +- Fix false warning: non-absolute filename: (BZ 640648). + +* Thu Sep 30 2010 Jan Kratochvil - 7.2-17.fc14 +- New Conflicts: elfutils < 0.149 due to the .gdb_index .debug support. + +* Wed Sep 29 2010 Jan Kratochvil - 7.2-16.fc14 +- [ifunc] Fix crash on deleting watchpoint of an autovariable (BZ 637770). + +* Mon Sep 27 2010 Jan Kratochvil - 7.2-15.fc14 +- Revert the -O0 switch formerly to workaround GCC BZ 634757 (cmove bug). +- Remove no longer used BuildRequires: libstdc++. +- Remove commented out python libstdc++ .spec code. + +* Sat Sep 25 2010 Jan Kratochvil - 7.2-14.fc14 +- Fixup %{_datadir}/gdb/python/gdb timestamps for multilib conflicts. + +* Sat Sep 25 2010 Jan Kratochvil - 7.2-13.fc14 +- Fix .gdb_index for big-endian hosts (Tom Tromey). + +* Sat Sep 25 2010 Jan Kratochvil - 7.2-12.fc14 +- Fix lost siginfo_t in linux-nat (BZ 592031). + +* Sat Sep 25 2010 Jan Kratochvil - 7.2-11.fc14 +- Fix infinite loop crash on self-referencing class (BZ 627432). + +* Thu Sep 23 2010 Jan Kratochvil - 7.2-10.fc14 +- gcore/-Wl,-z,relro: Always write out all the pages until kernel gets a fix. + +* Wed Sep 22 2010 Jan Kratochvil - 7.2-9.fc14 +- Fix gcore writer for -Wl,-z,relro (PR corefiles/11804). + +* Wed Sep 22 2010 Jan Kratochvil - 7.2-8.fc14 +- Enable python by default even in Brew and on all the arches (BZ 609157). + +* Wed Sep 22 2010 Jan Kratochvil - 7.2-7.fc14 +- python: load *-gdb.py for shlibs during attach (BZ 634660). +- Fix double free crash during overload resolution (PR 12028, Sami Wagiaalla). + +* Sat Sep 18 2010 Jan Kratochvil - 7.2-6.fc14 +- Fix python gdb.solib_address (BZ 634108, fix by Phil Muldoon). +- Temporarily build with -O0 to workaround GCC BZ 634757 (cmove bug). + +* Tue Sep 14 2010 Jan Kratochvil - 7.2-5.fc14 +- Fix Ada regression when any .gdb_index library is present. + +* 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). + +* Sat Sep 04 2010 Dennis Gilmore - 7.2-2.fc14 +- libinproctrace doesnt exist on sparc arches + +* Fri Sep 3 2010 Jan Kratochvil - 7.2-1.fc14 +- Formal update to the final FSF GDB release. + +* Tue Aug 24 2010 Dan Horák - 7.1.90.20100806-12.fc14 +- libinproctrace doesn't exist on s390(x) + +* Thu Aug 19 2010 Jan Kratochvil - 7.1.90.20100806-11.fc14 +- Fix crash on MI variable calling inferior function (BZ 610986). + +* Tue Aug 10 2010 Jan Kratochvil - 7.1.90.20100806-10.fc14 +- Fix /usr/bin/gdb-add-index missing -nx for gdb. +- New option --with profile (disabled by default - missing workload, BZ 615603). + +* Sat Aug 7 2010 Jan Kratochvil - 7.1.90.20100806-9.fc14 +- Fix python gdb.execute to_string pagination (BZ 620930). + +* Fri Aug 6 2010 Jan Kratochvil - 7.1.90.20100806-8.fc14 +- Out of memory is just an error, not fatal (uninitialized VLS vars, BZ 568248). + +* Fri Aug 6 2010 Jan Kratochvil - 7.1.90.20100806-7.fc14 +- Fix gcore from very small terminal windows (BZ 555076). +- Fix false `filesystem' debuginfo rpm request (BZ 599598). + +* Wed Jul 28 2010 Mamoru Tasaka - 7.1.90.20100721-6.fc14 +- Rebuild against python 2.7 + +* Thu Jul 22 2010 Jan Kratochvil - 7.1.90.20100721-5.fc14 +- Fix /usr/bin/gdb-add-index $d -> $dir typo. + +* Thu Jul 22 2010 Jan Kratochvil - 7.1.90.20100721-4.fc14 +- Import archer-tromey-python. +- Import archer-tromey-optional-psymtab (as present in FSF GDB post-7.2). + - Provide /usr/bin/gdb-add-index for rpm-build (Tom Tromey). + +* Thu Jul 22 2010 David Malcolm - 7.1.90.20100721-3.fc14 +- Rebuilt for https://fedoraproject.org/wiki/Features/Python_2.7/MassRebuild + +* Wed Jul 21 2010 Jan Kratochvil - 7.1.90.20100721-2.fc14 +- Fix prelinked executables with sepdebug and copy relocations (BZ 614659). + +* Wed Jul 21 2010 Jan Kratochvil - 7.1.90.20100721-1.fc14 +- Rebase to FSF GDB 7.1.90.20100721 (which is 7.2 pre-release). + +* Tue Jul 13 2010 Jan Kratochvil - 7.1-29.fc14 +- Disable temporarily Python files before the new rebase is done (BZ 613710). + +* Sun Jul 11 2010 Jan Kratochvil - 7.1-28.fc14 +- Rebuild for Fedora 14. + +* Wed Jun 30 2010 Jan Kratochvil - 7.1-28.fc13 +- Print 2D C++ vectors as matrices (BZ 562763, sourceware10659, Chris Moller). + +* Wed Jun 30 2010 Jan Kratochvil - 7.1-27.fc13 +- Fix obstack corruptions on C++ (BZ 606185, Chris Moller, Jan Kratochvil). +- Improve support for typedefs in classes (BZ 602314). +- Fix `set print object on' for some non-dynamic classes (BZ 606660). + +* Wed Jun 9 2010 Jan Kratochvil - 7.1-26.fc13 +- Backport DWARF-4 support (BZ 601887, Tom Tromey). + +* Wed Jun 9 2010 Jan Kratochvil - 7.1-25.fc13 +- Fix ADL anonymous type crash (BZ 600746, Sami Wagiaalla). + +* Tue Jun 1 2010 Jan Kratochvil - 7.1-24.fc13 +- Fix crash on /proc/PID/stat race during inferior exit (BZ 596751). +- testsuite: gdb.threads/watchthreads-reorder.exp kernel-2.6.33 compat. fix. + +* Sun May 30 2010 Jan Kratochvil - 7.1-23.fc13 +- Fix and support DW_OP_*piece (Tom Tromey, BZ 589467). +- Fix follow-exec for C++ programs (bugreported by Martin Stransky). + +* Mon May 24 2010 Jan Kratochvil - 7.1-22.fc13 +- Remove core file when starting a process (BZ 594560). +- Fix lock up on loops in the solib chain (BZ 593926). +- Import fix of TUI layout internal error (BZ 595475). + +* Sun May 16 2010 Jan Kratochvil - 7.1-21.fc13 +- Make gdb-6.8-bz254229-gcore-prpsinfo.patch RHEL-5 /usr/bin/patch compatible + (bugreported by Jonas Maebe). + +* Thu May 13 2010 Jan Kratochvil - 7.1-20.fc13 +- Fix crash on VLA bound referencing an optimized-out variable (BZ 591879). +- Re-enable the BZ 575292 and BZ 585445 C++ fix using an updated patch. + +* Wed May 12 2010 Jan Kratochvil - 7.1-19.fc13 +- Backport -completion bug on anonymous structure fields (BZ 590648). +- testsuite: Fix gdb.base/vla-overflow.exp FAILing on s390x (BZ 590635). +- Workaround non-stop moribund locations exploited by kernel utrace (BZ 590623). + +* Thu Apr 29 2010 Jan Kratochvil - 7.1-18.fc13 +- Make _Unwind_DebugHook independent from step-resume breakpoint (Tom Tromey). + +* Tue Apr 27 2010 Jan Kratochvil - 7.1-17.fc13 +- Fail gracefully if the _Unwind_DebugHook arg. is optimized out (Tom Tromey). + +* Tue Apr 27 2010 Jan Kratochvil - 7.1-16.fc13 +- Temporarily workaround the crash of BZ 575292 as there was now BZ 585445. + +* Mon Apr 26 2010 Jan Kratochvil - 7.1-15.fc13 +- Fix crash when using GNU IFUNC call from breakpoint condition. +- Avoid internal error by disabling the previous BZ 575292 fix (BZ 585445). + +* Thu Apr 22 2010 Jan Kratochvil - 7.1-14.fc13 +- Fix crash on C++ types in some debug info files (BZ 575292, Keith Seitz). +- Pretty printers not well documented (BZ 570635, Tom Tromey, Jan Kratochvil). + +* Fri Apr 16 2010 Jan Kratochvil - 7.1-13.fc13 +- archer-jankratochvil-fedora13 commit: 39998c496988faaa1509cc6ab76b5c4777659bf4 +- [vla] Fix boundaries for arrays on -O2 -g (support bound-ref->var->loclist). +- [vla] Fix copy_type_recursive for unavailable variables (Joost van der Sluis). + +* Sun Apr 11 2010 Jan Kratochvil - 7.1-12.fc13 +- Fix crash on trying to load invalid executable (BZ 581215). + +* Thu Apr 8 2010 Jan Kratochvil - 7.1-11.fc13 +- testsuite: Fix gdb.base/gstack.exp also for ppc64 inferiors (for BZ 579793). + +* Thu Apr 8 2010 Jan Kratochvil - 7.1-10.fc13 +- Fix s390 --with testsuite Buildrequiers to be (s390-32) (BZ 580347, Cai Qian). + +* Wed Apr 7 2010 Jan Kratochvil - 7.1-9.fc13 +- Fix gstack to print even the frame #0. New gdb.base/gstack.exp. (BZ 579793) +- Merge gdb-6.3-gstack-without-path-20060414.p* into gdb-6.3-gstack-20050411.p*, + no real code change. + +* Mon Apr 5 2010 Jan Kratochvil - 7.1-8.fc13 +- Fix breakpoint at *_start (BZ 162775, bugreport by John Reiser). + +* Sat Apr 3 2010 Jan Kratochvil - 7.1-7.fc13 +- Fix ppc build of the AVX registers support (for BZ 578250). + +* Sat Apr 3 2010 Jan Kratochvil - 7.1-6.fc13 +- Support AVX registers (BZ 578250). + +* Sat Apr 3 2010 Jan Kratochvil - 7.1-5.fc13 +- Fix dangling displays in separate debuginfo (BZ 574483). + +* Wed Mar 31 2010 Jan Kratochvil - 7.1-4.fc13 +- Remove gdb-readline-6.0-signal.patch with a bug causing crash while no longer + required with F-13 readline-6.1 (BZ 575516) + +* Mon Mar 29 2010 Jan Kratochvil - 7.1-3.fc13 +- [expr-cumulative] using-directive: Fix memory leak (Sami Wagiaalla). + +* Mon Mar 29 2010 Jan Kratochvil - 7.1-2.fc13 +- Drop obsoleted `gdb-archer-pie-0315-breakpoint_address_match.patch'. +- Do not consider memory error on reading _r_debug->r_map as fatal (BZ 576742). + - PIE: Attach binary even after re-prelinked underneath. + - PIE: Attach binary even after ld.so re-prelinked underneath. + - PIE: Fix occasional error attaching i686 binary (BZ 576742). +- testsuite: Fix unstable results of gdb.base/prelink.exp. + +* Thu Mar 25 2010 Jan Kratochvil - 7.1-1.fc13 +- Update to new FSF GDB release. + +* Mon Mar 15 2010 Jan Kratochvil - 7.0.90.20100312-24.fc13 +- Drop gdb-6.5-bz218379-ppc-solib-trampoline-fix.patch having false symbols + resolving (related to BZ 573277). + +* Fri Mar 12 2010 Jan Kratochvil - 7.0.90.20100312-23.fc13 +- Update to new FSF GDB snapshot. +- Fix double-free on std::terminate handler (Tom Tromey, BZ 562975). + +* Wed Mar 10 2010 Jan Kratochvil - 7.0.90.20100306-22.fc13 +- Another License update. + +* Wed Mar 10 2010 Jan Kratochvil - 7.0.90.20100306-21.fc13 +- Update License for all the licenses contained in .src.rpm. + +* Mon Mar 8 2010 Jan Kratochvil - 7.0.90.20100306-20.fc13 +- Remove unapplied: gdb-6.8-inlining-addon.patch gdb-6.8-inlining-by-name.patch + +* Mon Mar 8 2010 Jan Kratochvil - 7.0.90.20100306-19.fc13 +- Include also %%doc COPYING3 (review by Petr Machata). +- Remove URL for Source (review by Matej Cepl). + +* Sun Mar 7 2010 Jan Kratochvil - 7.0.90.20100306-18.fc13 +- archer-jankratochvil-fedora13 commit: 59c35a31f0981a0f0b884b32c91ae6325b2126cd + +* Sun Feb 28 2010 Jan Kratochvil - 7.0.50.20100203-17.fc13 +- Fix false warning: section .gnu.liblist not found in ... +- Fix crash on stale addrinfo->sectindex (more sensitive due to the PIE patch). + +* Fri Feb 26 2010 Jan Kratochvil - 7.0.50.20100203-16.fc13 +- Fix ia64 part of the bt-clone-stop.exp fix. +- Fix gdb.ada/* regressions (Keith Seitz). +- Remove false gdb_assert on $sp underflow. + +* Mon Feb 8 2010 Jan Kratochvil - 7.0.50.20100203-15.fc13 +- Fix i386+x86_64 rwatch+awatch before run, regression against 6.8 (BZ 541866). + +* Wed Feb 3 2010 Jan Kratochvil - 7.0.50.20100203-14.fc13 +- Rediff gdb-6.8-bz254229-gcore-prpsinfo.patch for older patch(1) compatibility. + +* Wed Feb 3 2010 Jan Kratochvil - 7.0.50.20100203-13.fc13 +- archer-jankratochvil-fedora13 commit: 59c35a31f0981a0f0b884b32c91ae6325b2126cd +- Fortran: Fix regression on setting breakpoint at toplevel symbols (BZ 559291; + David Moore, Intel). + +* Mon Feb 1 2010 Jan Kratochvil - 7.0.50.20100128-12.fc13 +- archer-jankratochvil-fedora13 commit: 5a573e8b26a2f0a6947d4c0249e43e5456610860 +- Remove ExcludeArch on ia64 as it is now fixed up. + +* Sun Jan 31 2010 Jan Kratochvil - 7.0.50.20100128-11.fc13 +- Fix failed gdb_assert due to the PIE patchset (BZ 559414). + +* Thu Jan 28 2010 Jan Kratochvil - 7.0.50.20100128-10.fc13 +- Upgrade to the FSF GDB snapshot: 7.0.50.20100128 +- archer-jankratochvil-fedora13 commit: 39c5a8b75fad3acd7204903db5dee025055a4594 + - Fix a regression on "AAA::ALPHA" test due to a merge from FSF GDB. +- Fix a regression of previous release due to false identification as core file. +- Move ifunc .patch into the GIT-managed archer-jankratochvil-fedora13 branch. +- Update gdb.pie/corefile.exp from 2007-01-26 FSF GDB commit by Andreas Schwab. + +* Mon Jan 25 2010 Jan Kratochvil - 7.0.50.20100121-9.fc13 +- Enable loading a core file just as a single argument to /usr/bin/gdb. + +* Sun Jan 24 2010 Jan Kratochvil - 7.0.50.20100121-8.fc13 +- testsuite: Fix gdb.arch/i386-bp_permanent.exp regression + +* Sun Jan 24 2010 Jan Kratochvil - 7.0.50.20100121-7.fc13 +- Update gdb.arch/powerpc-power7.exp for current binutils HEAD. + +* Fri Jan 22 2010 Jan Kratochvil - 7.0.50.20100121-6.fc13 +- Disable addon (finish) due to inline-cmds.exp: up from outer_inline2 assert. +- Fix gdb.arch/powerpc-power7.exp compatibility. + +* Fri Jan 22 2010 Jan Kratochvil - 7.0.50.20100121-5.fc13 +- Disable break-by-name on inlined functions due to a regression on parameters + of inlined functions falsely (BZ 556975 Comment 8). + +* Fri Jan 22 2010 Jan Kratochvil - 7.0.50.20100121-4.fc13 +- Adjust BuildRequires for RHELs, add ExcludeArch on ia64. +- Disable one PIE-introduced assertion on RHELs. + +* Thu Jan 21 2010 Jan Kratochvil - 7.0.50.20100121-3.fc13 +- Revert FSF GDB gdbserver tracepoints as incomplete now. + +* Thu Jan 21 2010 Jan Kratochvil - 7.0.50.20100121-2.fc13 +- archer-jankratochvil-fedora13 commit: 21e418c04290aa5d2e75543d31fe3fe5d70d6d41 +- [expr-cumulative] Fix "break expr if (cond)" regression. + +* Thu Jan 21 2010 Jan Kratochvil - 7.0.50.20100121-1.fc13 +- Upgrade to the FSF GDB snapshot: 7.0.50.20100121 +- archer-jankratochvil-fedora13 commit: ccde1530479cc966374351038057b9dda90aa251 +- [expr-cumulative] Archer branch is now included. + +* Tue Jan 19 2010 Jan Kratochvil - 7.0.50.20100118-2.fc13 +- Fix false PASS->FAIL of gdb.arch/i386-biarch-core.exp. + +* Tue Jan 19 2010 Jan Kratochvil - 7.0.50.20100118-1.fc13 +- Upgrade to the FSF GDB snapshot: 7.0.50.20100118 +- Upgrade libstdc++-v3-python to r155978 (Phil Muldoon). + +* Sat Jan 16 2010 Jan Kratochvil - 7.0.50.20100116-1.fc13 +- Upgrade to the FSF GDB snapshot: 7.0.50.20100116 +- archer-jankratochvil-fedora13 commit: 81810a20b2d2c3bf18e151de3cddfc96445b3c46 +- [expr-cumulative] Archer branch is missing in this release. +- Update rpm.org#76 workaround for rpm-4.8 using librpm.so.1. +- Dissect archer-jankratochvil-misc into Patch403...Patch408. +- Some regressions exist in this release. + +* Tue Jan 12 2010 Jan Kratochvil - 7.0.1-25.fc12 +- non-librpm missing debuginfo yumcommand now prints also --disablerepo='*' + to save some bandwidth by yum (Robin Green, BZ 554152). + +* Sun Jan 10 2010 Jan Kratochvil - 7.0.1-24.fc12 +- testsuite: BuildRequires also valgrind. + +* Fri Jan 8 2010 Jan Kratochvil - 7.0.1-23.fc12 +- Workaround missing libstdc++%%{bits_other} in Koji. + +* Fri Jan 8 2010 Jan Kratochvil - 7.0.1-22.fc12 +- Comply with new package review: + - Fix .spec Source as this is not a snapshot now. + - Convert all spaces to tabs. + - Fix missing %%defattr at %%files for gdbserver. + - Replace all hardcoded-library-path by variants of %%{_isa}. +- Include %%{_isa} for appropriate Requires and BuildRequires. + +* Thu Jan 7 2010 Jan Kratochvil - 7.0.1-21.fc12 +- [vla] Fix regression on fields of structs in internal vars (BZ 553338). +- archer-jankratochvil-fedora12 commit: 6e73988f653ba986e8742f208f17ec084292cbd5 + +* Thu Jan 7 2010 Jan Kratochvil - 7.0.1-20.fc12 +- Fix crash reading broken stabs (it377671). + +* Sun Jan 3 2010 Jan Kratochvil - 7.0.1-19.fc12 +- testsuite: Fixup false FAILs for gdb.cp/constructortest.exp. + +* Sat Jan 2 2010 Jan Kratochvil - 7.0.1-18.fc12 +- Fix regression of gdb-7.0 (from 6.8) crashing on typedefed bitfields. +- Fix related_breakpoint stale ref crash. + +* Fri Jan 1 2010 Jan Kratochvil - 7.0.1-17.fc12 +- Formal upgrade to the FSF GDB release gdb-7.0.1. + - Fix regression of gdb-7.0.1 not preserving typedef of a field. + +* Fri Jan 1 2010 Jan Kratochvil - 7.0-16.fc12 +- More RHEL-5 compatibility updates. + - Disable the build-id support by default. + - Bundle back gdbserver to the base gdb package. + - Remove bundled pstack. + - Drop the BuildRequires of rpm-devel. + +* Fri Jan 1 2010 Jan Kratochvil - 7.0-15.fc12 +- Fix error on a sw watchpoint active at function epilogue (hit on s390x). +- testsuite: Fix false MI "unknown output after running" regression. +- testsuite: Update ia64-sigtramp.exp for recent GDB. +- Implement bt-clone-stop.exp fix also for ia64. +- testsuite: Upstream condbreak.exp results stability fix (Daniel Jacobowitz). + +* Thu Dec 24 2009 Jan Kratochvil - 7.0-14.fc12 +- testsuite: Fix constructortest.exp and expand-sals.exp for gcc-4.4.2-20.fc12. + +* Mon Dec 21 2009 Jan Kratochvil - 7.0-13.fc12 +- [pie] Fix a race in testcase gdb.base/valgrind-db-attach.exp. +- Fix regression by python on ia64 due to stale current frame. +- Disable python iff RHEL-5 && (Brew || ppc64). + +* Mon Dec 21 2009 Jan Kratochvil - 7.0-12.fc12 +- Workaround build on native ppc64 host. +- More RHEL-5 compatibility updates. + - Disable warning messages new for gdb-6.8+ for RHEL-5 backward compatibility. + - Workaround RHEL-5 kernels for detaching SIGSTOPped processes (BZ 498595). + - Serialize the testsuite output to keep the order for regression checks. + - Re-enable python for all non-ppc* arches. + - More gcc44 stack exceptions when running the testsuite on RHEL-5. +- Fix backward compatibility with G++ 4.1 namespaces "::". +- Fix regression on re-setting the single ppc watchpoint slot. +- Update snapshot of FSF gdb-7.0.x branch. + - Backport fix of dcache invalidation locking up GDB on ppc64 targets. + +* Fri Dec 18 2009 Jan Kratochvil - 7.0-11.fc12 +- [pie] Fix general ppc64 regression due to a function descriptors bug. +- [pie] Fix also keeping breakpoints disabled in PIE mode. +- Import upstream -completion crash fix. +- Drop some unused patches from the repository. +- More RHEL-5 build compatibility updates. + - Use gfortran44 when running the testsuite on RHEL-5. + - Disable python there due to insufficient ppc multilib. +- Fix orphanripper hangs and thus enable it again. + +* Mon Dec 14 2009 Jan Kratochvil - 7.0-10.fc12 +- Make gdb-6.3-rh-testversion-20041202.patch to accept both RHEL and Fedora GDB. +- Adjust BuildRequires for Fedora-12, RHEL-6 and RHEL-5 builds. +- [vla] Fix compatibility of dynamic arrays with iFort (BZ 514287). +- Fix stepping through OMP parallel Fortran sections (BZ 533176). +- New fix of bp conditionals [bp_location-accel] regression (BZ 538626). + +* Mon Dec 7 2009 Jan Kratochvil - 7.0-9.fc12 +- Replace the PIE (Position Indepdent Executable) support patch by a new one. +- Drop gdb-6.3-nonthreaded-wp-20050117.patch as fuzzy + redundant. +- Fix callback-mode readline-6.0 regression for CTRL-C. +- Fix syscall restarts for amd64->i386 biarch. +- Various testsuite results stability fixes. +- Fix crash on reading stabs on 64bit (BZ 537837). +- archer-jankratochvil-fedora12 commit: 16276c1aad1366b92e687c72cab30192280e1906 +- archer-jankratochvil-pie-fedora12 ct: 2ae60b5156d43aabfe5757940eaf7b4370fb05d2 + +* Thu Dec 3 2009 Jan Kratochvil - 7.0-8.fc12 +- Fix slowness/hang when printing some variables (Sami Wagiaalla, BZ 541093). +- archer-jankratochvil-fedora12 commit: 6817a81cd411acc9579f04dcc105e9bce72859ff + +* Wed Nov 25 2009 Jan Kratochvil - 7.0-7.fc12 +- Support GNU IFUNCs - indirect functions (BZ 539590). +- Fix bp conditionals [bp_location-accel] regression (Phil Muldoon, BZ 538626). +- Fix missed breakpoint location [bp_location-accel] regression (upstream). + +* Fri Oct 30 2009 Jan Kratochvil - 7.0-6 +- Fix missing zlib-devel BuildRequires to support compressed DWARF sections. +- Include post-7.0 FSF GDB fixes. + +* Fri Oct 23 2009 Jan Kratochvil - 7.0-5 +- Make the package buildable on RHEL-5/CentOS-5 (without librpm there). +- archer-jankratochvil-fedora12 commit: 5b73ea6a0f74e63db3b504792fc1d37f548bdf5c + +* Fri Oct 23 2009 Jan Kratochvil - 7.0-4 +- Fix rpm --excludedocs (BZ 515998). + +* Thu Oct 22 2009 Jan Kratochvil - 7.0-3 +- Support multiple directories for `set debug-file-directory' (BZ 528668). + +* Mon Oct 19 2009 Jan Kratochvil - 7.0-2 +- Sync the .spec with RHEL/CentOS without EPEL, do not BuildRequires: fpc there. + +* Wed Oct 7 2009 Jan Kratochvil - 7.0-1 +- Formal upgrade to the final FSF GDB release gdb-7.0. +- Fix GNU/Linux core open: Can't read pathname for load map: Input/output error. +- archer-jankratochvil-fedora12 commit: ce4ead356654b951a49ca78d81ebfff95e758bf5 + +* Wed Sep 30 2009 Jan Kratochvil - 6.8.91.20090930-2 +- Bump release. + +* Wed Sep 30 2009 Jan Kratochvil - 6.8.91.20090930-1 +- Fix broken python "help()" command "modules" (BZ 526552). +- Upgrade to the FSF GDB gdb-7.0 snapshot: 6.8.91.20090930 +- archer-jankratochvil-fedora12 commit: 7cb860f03e2437c97239334ebe240d06f45723e0 + +* Sun Sep 27 2009 Jan Kratochvil - 6.8.91.20090925-3 +- New test for step-resume breakpoint placed in multiple threads at once. + +* Fri Sep 25 2009 Jan Kratochvil - 6.8.91.20090925-2 +- Fix buildid-loading libs w/matching name but different build-id (BZ 524572). + +* Fri Sep 25 2009 Jan Kratochvil - 6.8.91.20090925-1 +- Upgrade to the FSF GDB gdb-7.0 snapshot: 6.8.91.20090925 +- archer-jankratochvil-fedora12 commit: 4338ea85c798007c32594032f602db9fd230eba9 + - [python] Don't directly reference self.frame (Tom Tromey). + - [expr] Updates from branch (Keith Seitz). + +* Mon Sep 21 2009 Jan Kratochvil - 6.8.91.20090921-1 +- Upgrade to the FSF GDB gdb-7.0 snapshot: 6.8.91.20090921 +- archer-jankratochvil-fedora12 commit: 0d5c38dd89050c0ee1cf049656f177c170d675d4 + - [expr] Check has_stack_frames before calling find_pc_line (Sami Wagiaalla). + +* Thu Sep 17 2009 Jan Kratochvil - 6.8.91.20090917-2 +- Include bundled libstdc++ python; it will be in libstdc++-devel since gcc-4.5. + +* Thu Sep 17 2009 Jan Kratochvil - 6.8.91.20090917-1 +- Upgrade to the FSF GDB gdb-7.0 branch and snapshot: 6.8.91.20090917 +- archer-jankratochvil-fedora12 commit: 16f3f01cc2cbc15283462eaabdfcde92cf42cdc6 +- Drop the qsort_cmp workaround as resolved in FSF GDB now (BZ 515434). + +* Thu Sep 10 2009 Jan Kratochvil - 6.8.50.20090910-1 +- Upgrade to the FSF GDB gdb-6.8.50 snapshot: 6.8.50.20090910 +- archer-jankratochvil-fedora12 commit: 941eb487a42933e442cb4d11344cda96ecb8a04d + - [next-over-throw] Fix exceptions thrown during next (Tom Tromey). + - [bp_location-accel] Do not (much) slow down on 500+ breakpoints (me). + +* Thu Sep 3 2009 Jan Kratochvil - 6.8.50.20090818-8 +- archer-jankratochvil-fedora12 commit: a081d2f12945e9468edd5f4341d3e945bd0fefe9 + - [expr] Fix too slow lookups in large C++ programs (Sami Wagiaalla). + - [python] Fix varobj changed values reporting (GDB PR 10584, Tom Tromey). + +* Tue Sep 1 2009 Jan Kratochvil - 6.8.50.20090818-7 +- archer-jankratochvil-fedora12 commit: d25596676e8811b03f8c9aba6bbd04ebaa9ff5db + - [call-frame-cfa] Fix parsing CFA-relative frames (BZ 516627, Tom Tromey). + - [vla] variable length Fortran strings for -O -g code (part of BZ 508406, me). + - [python] varobj + general fixes (Tom Tromey). + +* Fri Aug 28 2009 Jan Kratochvil - 6.8.50.20090818-6 +- Real upstream fixup of qsort_cmp (BZ 515434). +- Revert bitfields regression (BZ 520129). + +* 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 + +* Tue Aug 18 2009 Jan Kratochvil - 6.8.50.20090818-3 +- archer-jankratochvil-fedora12 commit: 850e3cb38a25cb7fdfa4cef667626ffbde51bcac +- Fix the hardware watchpoints. + +* Tue Aug 18 2009 Jan Kratochvil - 6.8.50.20090818-2 +- Fix patch fuzz 0. + +* Tue Aug 18 2009 Jan Kratochvil - 6.8.50.20090818-1 +- Upgrade to the FSF GDB gdb-6.8.50 snapshot: 6.8.50.20090818 +- archer-jankratochvil-fedora12 commit: 5e0d1cc74f119391a2c3ae25ef5749fc28674f06 + +* Wed Aug 12 2009 Jan Kratochvil - 6.8.50.20090811-4 +- Fix minor regressions introduced by the rebase from F-11 (6.8.50.20090302). + +* Tue Aug 11 2009 Jan Kratochvil - 6.8.50.20090811-3 +- archer-jankratochvil-fedora12 commit: 2888fafe63889757c6fd27ccc2f25661d43fd1a4 +- Drop archer-jankratochvil-vla VAROBJ invalidate/revalidate split to fix + regressions against FSF GDB HEAD. + +* Tue Aug 11 2009 Jan Kratochvil - 6.8.50.20090811-2 +- archer-jankratochvil-fedora12 commit: 93f5e942bdcdcc376ece452c309bedabae71def9 +- Fix "can't compute CFA for this frame" (by Tom Tromey, BZ 516627). + +* Tue Aug 11 2009 Jan Kratochvil - 6.8.50.20090811-1 +- Support constant DW_AT_data_member_location by GCC PR debug/40659 (BZ 515377). +- Fix .spec URL. +- archer-jankratochvil-fedora12 commit: 81de3c6abae4f7e3738aa9bcc0ab2f8725cce252 + +* Mon Aug 10 2009 Jan Kratochvil - 6.8.50.20090810-2 +- Upgrade to the FSF GDB gdb-6.8.50 snapshot: 6.8.50.20090810 +- archer-jankratochvil-fedora12 commit: 93ec16e6f5000dd64d433d86674e820ed0f35b72 + +* Tue Aug 4 2009 Jan Kratochvil - 6.8.50.20090803-2 +- Drop the bundled libstdc++ python - it should be packaged on its own now. + +* Tue Aug 4 2009 Jan Kratochvil - 6.8.50.20090803-1 +- Upgrade to the FSF GDB gdb-6.8.50 snapshot: 6.8.50.20090803 +- archer-jankratochvil-fedora12 commit: 0222cb1f4ddd1eda32965e464cb60b1e44e110b2 + +* Fri Jul 31 2009 Jan Kratochvil - 6.8.50.20090302-42 +- Release bump only. + +* Fri Jul 31 2009 Jan Kratochvil - 6.8.50.20090302-41 +- Fix compatibility of --with-system-readline and readline-6.0+. +- Temporarily disabled orphanripper on Fedora 12. + +* Fri Jul 24 2009 Fedora Release Engineering - 6.8.50.20090302-40 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Mon Jul 6 2009 Jan Kratochvil - 6.8.50.20090302-39 +- testsuite: Fix multiple runs in parallel on a single host. +- testsuite: Remove the rpmbuild option: --with parallel +- testsuite: Run the testsuite with default rpm _smp_mflags. + +* Mon Jul 6 2009 Jan Kratochvil - 6.8.50.20090302-38 +- Archer update to the snapshot: 17bfc0488f54aeeb7a9e20ef3caa7e31e8e985fb +- Archer backport: de9c5190034b84b0a5fb4b98b05b304cda187700 + - [vla] Fix a crash regression on constant DW_AT_data_member_location. + +* Mon Jun 29 2009 Jan Kratochvil - 6.8.50.20090302-37 +- Replace the fix of cloned-TIDs with no pthread from upstream (BZ 471819). +- Fix a parallel testsuite runs incompatibility in gdb.base/gcore-shmid0.exp. + +* Mon Jun 29 2009 Jan Kratochvil - 6.8.50.20090302-36 +- Fix GDB crash on cloned-TIDs with no associated pthread (BZ 471819). +- Workaround rpm.org#76 rpm-devel requirement for debuginfo names (BZ 508193). + +* Mon Jun 22 2009 Jan Kratochvil - 6.8.50.20090302-35 +- Accelerate sorting blocks on reading a file (found on WebKit) (BZ 507267). + +* Mon Jun 22 2009 Jan Kratochvil - 6.8.50.20090302-34 +- Fix backtraces from core files with the executable found+loaded via build-id. + - Due to F-11 GCC no longer needlessly duplicating .eh_frame as .debug_frame. + +* Tue Jun 16 2009 Jan Kratochvil - 6.8.50.20090302-33 +- Archer update to the snapshot: 05c402a02716177c4ddd272a6e312cbd2908ed68 +- Archer backport: 05c402a02716177c4ddd272a6e312cbd2908ed68 + - Remove the [archer-pmuldoon-exception-rewind-master] branch. + - Include this functionality as a FSF GDB accepted patchset. + +* Mon Jun 15 2009 Jan Kratochvil - 6.8.50.20090302-32 +- Fix crash on pending breakpoints with PIE (position-indep.-exec.) (BZ 505943). + +* Fri Jun 12 2009 Jan Kratochvil - 6.8.50.20090302-31 +- Fix an occasional crash during printing of missing debuginfo rpms (BZ 505401). + +* Fri Jun 12 2009 Jan Kratochvil - 6.8.50.20090302-30 +- Implement DW_OP_call_frame_cfa (for recent GCC). + +* Thu Jun 11 2009 Jan Kratochvil - 6.8.50.20090302-29 +- Archer update to the snapshot: 30c13da4efe18f43ee34aa4b29bc86e1a53de548 +- Archer backport: 30c13da4efe18f43ee34aa4b29bc86e1a53de548 + - Fix dereferencing unbound C arrays (BZ 505163). + +* Wed Jun 10 2009 Jan Kratochvil - 6.8.50.20090302-28 +- Archer update to the snapshot: 000db8b7bfef8581ef099ccca8689cfddfea1be8 +- Archer backport: b8d3bea36b137effc929e02c4dadf73716cb330b + - Ignore explicit die representing global scope '::' (gcc 4.1 bug). +- Archer backport: c2d5c4a39b10994d86d8f2f90dfed769e8f216f3 + - Fix parsing DW_AT_const_value using DW_FORM_string +- Archer backport: 8d9ab68fc0955c9de6320bec2821a21e3244600d + + db41e11ae0a3aec7120ad6ce86450d838af74dd6 + - Fix Fortran modules/namespaces parsing (but no change was visible in F11). +- Archer backport: 000db8b7bfef8581ef099ccca8689cfddfea1be8 + - Fix "some Python error when displaying some C++ objects" (BZ 504356). +- testsuite: Support new rpmbuild option: --with parallel +- testsuite: gdb-orphanripper.c: Fix uninitialized `termios.c_line'. +- Fix crashes due to (missing) varobj revalidation, for VLA (for BZ 377541). +- Archer backport: 58dcda94ac5d6398f47382505e9d3d9d866d79bf + + f3de7bbd655337fe6705aeaafcc970deff3dd5d5 + - Implement Fortran modules namespaces (BZ 466118). +- Fix crash in the charset support. + +* Thu Apr 30 2009 Jan Kratochvil - 6.8.50.20090302-27 +- Fix race in the ia64 testcase `gdb-6.3-rh-testlibunwind-20041202.patch'. + +* Mon Apr 27 2009 Jan Kratochvil - 6.8.50.20090302-26 +- Support a new rpmbuild option: --without python + +* Mon Apr 27 2009 Jan Kratochvil - 6.8.50.20090302-25 +- The Koji build failures may have been by forgotten check-in of the Patch360. + +* Mon Apr 27 2009 Jan Kratochvil - 6.8.50.20090302-24 +- Another new Koji build fix attempt now by: BuildPreReq: python + +* Mon Apr 27 2009 Jan Kratochvil - 6.8.50.20090302-23 +- Fix BuildRequires for new Koji. + +* Mon Apr 27 2009 Jan Kratochvil - 6.8.50.20090302-22 +- Fix pstack/gstack cutting very long lines (BZ 497849). + +* Sun Apr 19 2009 Jan Kratochvil - 6.8.50.20090302-21 +- New test for parsing elf64-i386 files for kdump PAE vmcore dumps (BZ 457187). + +* Thu Apr 16 2009 Jan Kratochvil - 6.8.50.20090302-20 +- Fix crash in the charset support. + +* Wed Apr 15 2009 Jan Kratochvil - 6.8.50.20090302-19 +- Fix crash on pretty-printer reading uninitialized std::string (BZ 495781). + +* Mon Apr 13 2009 Jan Kratochvil - 6.8.50.20090302-18 +- Archer update to the snapshot: d1fee5066408a09423621d1ebc64e6d3e248ed08 +- Archer backport: 4854339f75bdaf4b228fc35579bddbb2a1fecdc1 + - Fix Python FrameIterator. + +* Mon Apr 13 2009 Jan Kratochvil - 6.8.50.20090302-17 +- Archer update to the snapshot: 7c250ce99c90cf6097e2ec55ea0f205830979cee +- Archer backport: c14d9ab7eef43281b2052c885f89d2db96fb5f8e + - Revert a change regressing: gdb.objc/basicclass.exp +- Archer backport: ebd649b96e61a1fb481801b65d827bca998c6633 + + 1f080e897996d60ab7fde20423e2947512115667 + + 1948198702b51b31d79793fc49434b529b4e245f + + e107fb9687bb1e7f74170aa3d19c4a8f6edbb10f + + 1e012c996e121cb35053d239a46bd5dc65b0ce60 + - Update the Python API from upstream. +- Archer backport: d3c83ad5ec9f7672b87af9ad29279f459e53da11 + - Fix a Python branch crash. + +* Mon Apr 13 2009 Dennis Gilmore - 6.8.50.20090302-16 +- enable gdbserver package on sparc64 + +* Sun Apr 5 2009 Jan Kratochvil - 6.8.50.20090302-15 +- Archer update to the snapshot: 7c7c77576669d17ad5072daa47ea3a4fd954483d +- Archer backport: 7c7c77576669d17ad5072daa47ea3a4fd954483d (Peter Bergner) + - Disassemble Power7 instructions right in the default/only -Many GDB mode. + +* Sun Apr 5 2009 Jan Kratochvil - 6.8.50.20090302-14 +- Archer update to the snapshot: f6273d446ff87e50976600ba3f71b88d61043e20 +- Archer backport: f6273d446ff87e50976600ba3f71b88d61043e20 + - Use pretty-printers to print base classes inside a derived class. + +* Mon Mar 30 2009 Jan Kratochvil - 6.8.50.20090302-13 +- Archer update to the snapshot: d144a3633454046aaeae3e2c369c271834431d36 +- Archer backport: a2c49b7640ebe7ce1376902d48d5bbbee600996b + - Fixup compilation older GCCs. +- Archer backport: fe48224ce1bd22f37a7fa6d111d54c1a340392bf + - KFAIL 4 cases of: gdb.arch/powerpc-power7.exp +- Archer backport: d144a3633454046aaeae3e2c369c271834431d36 + - Fix C local extern variables (requires gcc-4.4.0-0.30). + +* Fri Mar 27 2009 Jan Kratochvil - 6.8.50.20090302-12 +- Archer update to the snapshot: 837d9879980148af05eae540d92caeb7200f1813 +- Archer backport: 8340d06295c8db80c544503458305197891e0348 + - Fixes [master] regression for Eclipse CDT testsuite. +- Archer backport: 16328456d5740917ade0a49bcecc14c4564b9a99 + - Fixes #2 [expr] compatibility with gcc-4.4 on gdb.cp/namespace-using.exp. +- Rebase [expr] on the Keith Seitz's sync with FSF GDB fixing the former merge. + +* Sun Mar 22 2009 Jan Kratochvil - 6.8.50.20090302-11 +- Archer update to the snapshot: e734ed95d296a3342d4147873c4641cea6c4d7fe +- Archer backport: 1e1d73cda98b1adda884b80e07c7b4929c175628 + - Fixes [expr] compatibility with gcc-4.4 on gdb.cp/namespace-using.exp. + +* Sun Mar 15 2009 Jan Kratochvil - 6.8.50.20090302-10 +- Archer update to the snapshot: 935f217d3367a642374bc56c6b146d376fc3edab +- Archer backport: 281278326412f9d6a3fabb8adc1d419fd7ddc7d7 + - Fix [expr] crash reading invalid DWARF C++ symbol "" (BZ 490319). + +* Thu Mar 12 2009 Jan Kratochvil - 6.8.50.20090302-9 +- Archer backport: aafe933b497eee8cfab736a10bae1a90d4bceb18 + - [python] Remove duplicate target-wide-charset parameter + +* Mon Mar 9 2009 Jan Kratochvil - 6.8.50.20090302-8 +- Archer update to the snapshot: a99e30d08ade4a2df0f943b036cd653bcd12b04d +- Fixes internal error on breaking at a multi-locations C++ caller (BZ 488572). + +* Mon Mar 9 2009 Jan Kratochvil - 6.8.50.20090302-7 +- Archer update to the snapshot: ec29855686f2a78d90ebcc63765681249bbbe808 +- Temporarily place libstdc++ pretty printers in this gdb.rpm. + +* Sat Mar 7 2009 Jan Kratochvil - 6.8.50.20090302-6 +- Archer update to the snapshot: 543fb2154d3bd551344b990b911be5c6cc703504 + - Fixes [delayed-symfile] excessive `(no debugging symbols found)' messages. + +* Sat Mar 7 2009 Jan Kratochvil - 6.8.50.20090302-5 +- Improve `gdb-6.6-buildid-locate-rpm.patch' by dlopen() (+pkg-config compat.). + +* Sat Mar 7 2009 Jan Kratochvil - 6.8.50.20090302-4 +- Split `gdb-6.6-buildid-locate.patch' to `gdb-6.6-buildid-locate-rpm.patch'. + +* Sat Mar 7 2009 Jan Kratochvil - 6.8.50.20090302-3 +- Archer update to the snapshot: 6cf16c0711e844094ab694b3d929f7bd30b49f61 +- Fix crash on the inlined functions support. +- Fix crash from the PIE support, its varobj_refresh() was called only before + varobj_invalidate() which is sufficient. +- Fix BuildRequires for the `--with testsuite' runs. +- Use the newly introduced `--with-pythondir' option. +- Remove libstdcxx [python] pretty printers (as included in libstdc++ rpm now). + +* Fri Mar 06 2009 Jesse Keating - 6.8.50.20090302-2 +- Rebuild for new rpm libs + +* Mon Mar 2 2009 Jan Kratochvil - 6.8.50.20090302-1 +- Include the Archer Project: http://sourceware.org/gdb/wiki/ProjectArcher + snapshot: 8cc3753a9aad85bf53bef54c04334c60d16cb251 + * [python] Python scripting support: http://sourceware.org/gdb/wiki/PythonGdb + * [catch-syscall] Trap and display syscalls. + * [delayed-symfile] Improve startup performance by lazily read psymtabs. + * [exception-rewind] Fix fatal C++ exceptions in an inferior function call. + * [expr] Expressions, single-quote elimination, C++ input canonicalization. + * [using-directive] C++ namespaces. + * [vla] C variable length arrays / DW_FORM_block / Fortran dynamic arrays. + * [misc] Fix debuginfoless `return' (BZ 365111), fix command-line macros for + expected GCC (BZ 479914), new testcase for valgrind (for BZ 483262), + implement `info common' for Fortran, fix Fortran logical-kind=8 (BZ 465310), + fix static variable in C++ constructors (BZ 445912), fix power7 (BZ 485319). +- Upgrade to the FSF GDB gdb-6.8.50 snapshot. +- Fix parsing elf64-i386 files for kdump PAE vmcore dumps (BZ 457187). + - Turn on 64-bit BFD support, globally enable AC_SYS_LARGEFILE. + +* Tue Feb 24 2009 Fedora Release Engineering - 6.8.50.20090210-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Wed Feb 11 2009 Jan Kratochvil - 6.8.50.20090210-1 +- Upgrade to the FSF GDB gdb-6.8.50 snapshot. + +* Wed Feb 11 2009 Jan Kratochvil - 6.8.50.20090209-1 +- Upgrade to the FSF GDB gdb-6.8.50 snapshot. + +* Mon Feb 9 2009 Jan Kratochvil - 6.8.50.20081214-2 +- Fix crash / implement `finish' into inlined functions (BZ 479781). +- Drop the gdb.threads/attach-into-signal.exp change as obsolete. + +* Sun Dec 14 2008 Jan Kratochvil - 6.8.50.20081214-1 +- Upgrade to the upstream gdb-6.8.50 snapshot. + +* Mon Dec 1 2008 Jan Kratochvil - 6.8-33 +- Make `--with testsuite' BuildRequires properly conditional. + +* Mon Dec 1 2008 Stepan Kasal - 6.8-32 +- Remove trivial BuildRequires, use rpm macros in a few remaining places. + +* Tue Nov 18 2008 Jan Kratochvil - 6.8-31 +- Enable ia64 hardware watchpoints if created before starting inferior. + +* Sun Nov 9 2008 Jan Kratochvil - 6.8-30 +- Fix a race in the testcase `gdb.threads/step-thread-exit.exp'. + +* Sun Nov 9 2008 Jan Kratochvil - 6.8-29 +- Fix more the variable-length-arrays support (BZ 468266, feature BZ 377541). +- Integrate the `bt full' protection (for BZ 466901) into the VLA patch. + +* Thu Nov 6 2008 Jan Kratochvil - 6.8-28 +- Fix the "never terminate `bt full'" patch false GCC warning / build error. + +* Thu Nov 6 2008 Jan Kratochvil - 6.8-27 +- Fix resolving of variables at locations lists in prelinked libs (BZ 466901), + bugreported by Michal Babej. +- Never terminate `bt full' on a problem of variable resolving (for BZ 466901). + +* Thu Nov 6 2008 Jan Kratochvil - 6.8-26 +- Fix more the variable-length-arrays support (BZ 468266, feature BZ 377541). +- Fix the watchpoints conditionals. +- Fix on PPC spurious SIGTRAPs on active watchpoints. +- Fix occasional stepping lockup on many threads, seen on ia64. + +* Mon Nov 3 2008 Jan Kratochvil - 6.8-25 +- Fix the variable-length-arrays support (BZ 468266, feature BZ 377541). +- Fix the debuginfo-install suggestions for missing base packages (BZ 467901), + also update the rpm/yum code to no longer require _RPM_4_4_COMPAT. + +* Tue Sep 2 2008 Jan Kratochvil - 6.8-24 +- Fix PIE patch regression for loading binaries from valgrind (BZ 460319). + +* Thu Aug 28 2008 Jan Kratochvil - 6.8-23 +- Fix attaching to stopped processes, based on the upstream version now. + - Just kernel-2.6.25 neither upstream nor utrace work with it; 2.6.9 works. +- Fix occasional crash on a removed watchpoint. +- Fix false testcase FAILs for `gdb.pie/break.exp'. +- Fix a false warning (+a testcase FAIL) on s390x watchpoints. +- Fix a false FAIL on s390x `gdb.base/dump.exp'. + +* Wed Aug 27 2008 Jan Kratochvil - 6.8-22 +- Remove `gdb-6.3-nonthreaded-wp-20050117.patch' as obsoleted + regressing now. +- Make the GDB quit processing non-abortable to cleanup everything properly. +- Support DW_TAG_constant for Fortran in recent Fedora/RH GCCs. +- Fix crash on DW_TAG_module for Fortran in recent Fedora/RH GCCs. +- Readd resolving of bare names of constructors and destructors. +- Include various vendor testcases: + - Leftover zombie process (BZ 243845). + - Multithreaded watchpoints (`gdb.threads/watchthreads2.exp'). + - PIE testcases (`gdb.pie/*'). + - C++ contructors/destructors (`gdb.cp/constructortest.exp'). + +* Sat Aug 23 2008 Jan Kratochvil - 6.8-21 +- Fix MI debuginfo print on reloaded exec, found by Denys Vlasenko (BZ 459414). +- Extend the Fortran dynamic variables patch also for dynamic Fortran strings. + +* Wed Aug 13 2008 Jan Kratochvil - 6.8-20 +- Temporarily disable attaching to a stopped process (BZ 453688) + - To be reintroduced after a fix of the kernel BZ 454404. + +* Mon Aug 4 2008 Jan Kratochvil - 6.8-19 +- Fix `errno' printing on nonthreaded non-g3 inferiors (TLS minsym is absolute). + +* Fri Aug 1 2008 Jan Kratochvil - 6.8-18 +- Fix powerpc recent secure PLTs handling (shared library calls) (BZ 452960). +- Fix the testsuite .spec runner to run biarch also on ppc. +- Reenable testcases threadcrash.exp, chng-syms.exp, checkpoint.exp (BZ 207002). +- Fix PRPSINFO in the core files dumped by gcore (BZ 254229), reformatted patch + from Denys Vlasenko. +- Fix register assignments with no GDB stack frames, Denys Vlasenko (BZ 436037). + +* Mon Jul 14 2008 Jan Kratochvil - 6.8-17 +- Refresh the patchset with fuzz 0 (for new rpmbuild). + +* Mon Jul 14 2008 Jan Kratochvil - 6.8-16 +- Rebuild with the new rpm-4.5.90 in the buildroot. + +* Sat Jul 12 2008 Jan Kratochvil - 6.8-15 +- Temporary rpm-4.5.90 compatibility workaround by Panu Matilainen. +- Fix a regression in the constant watchpoints fix, found by Daniel Jacobowitz. +- Fix the prelink testcase for false FAILs on i386. + +* Tue Jul 8 2008 Jan Kratochvil - 6.8-14 +- Fix crash due to calling an inferior function right after a watchpoint stop. + +* Thu Jul 3 2008 Jan Kratochvil - 6.8-13 +- Support transparent debugging of inlined functions for an optimized code. + +* Fri Jun 20 2008 Jan Kratochvil - 6.8-12 +- Remove the gdb/gdbtui binaries duplicity. + +* Tue Jun 17 2008 Jan Kratochvil - 6.8-11 +- Fix the testsuite run for ia64 (where no -m64 is present). +- Test a crash on libraries missing the .text section. +- Protect development in the build tree by automatic Makefile dependencies. +- Refuse creating watchpoints of an address value, suggested by Martin Stransky. +- Disable randomization (such as by setarch -R), suggested by Jakub Jelinek. +- Fix compatibility with recent glibc headers. + +* Sun Jun 1 2008 Jan Kratochvil - 6.8-10 +- Fix crash on a watchpoint update on an inferior stop. +- Fix the s390x part of the hardware watchpoints after a fork. + +* Thu May 22 2008 Jan Kratochvil - 6.8-9 +- Fix memory trashing on binaries from GNAT/Ada (workaround GCC PR 35998). + +* Thu May 15 2008 Tom "spot" Callaway - 6.8-8 +- Silence memcpy check which returns false positive (sparc64) + +* Thu May 15 2008 Tom "spot" Callaway - 6.8-7 +- patch from DaveM for sparc/sparc64 +- touch up spec to enable sparcv9/sparc64 + +* Sat May 3 2008 Jan Kratochvil - 6.8-6 +- Fix gdb.base/gcore-shmid0.exp to be unresolved on recent kernels. +- Make the testsuite results of dfp-test.exp more stable. + +* Sun Apr 27 2008 Jan Kratochvil - 6.8-5 +- Remove the kernel VDSO workaround (`no loadable ...') (kernel BZ 312011). + +* Wed Apr 23 2008 Jan Kratochvil - 6.8-4 +- Backport fix on various forms of threads tracking across exec() (BZ 442765). +- Testsuite: Include more biarch libraries on %%{multilib_64_archs}. +- Disable the build-id warnings for the testsuite run as they cause some FAILs. +- Fix PIE support for 32bit inferiors on 64bit debugger. +- Fix trashing memory on one ada/gnat testcase. +- Make the testsuite results on ada more stable. + +* Wed Apr 16 2008 Jan Kratochvil - 6.8-3 +- Fix ia64 compilation errors (Yi Zhan, BZ 442684). +- Fix build on non-standard rpm-devel includes (Robert Scheck, BZ 442449). +- Do not run the PIE mode for the testsuite during `--with upstream'. +- Fix test of the crash on a sw watchpoint condition getting out of the scope. + +* Fri Apr 11 2008 Jan Kratochvil - 6.8-2 +- Fix a regression due to PIE of reloading a changed exec file (BZ 433410). +- Include also biarch libgcc on %%{multilib_64_archs} for the testsuite. +- Cosmetic fix of a testcase sanity breakpoint setting (part of BZ 233852). +- New test of hiding unexpected breakpoints on intentional step commands. +- New test of GCORE for shmid 0 shared memory mappings. +- New test of a crash on `focus cmd', `focus prev' commands. +- Fix a minor test race of the hardware watchpoints after the fork call. +- Test crash on a sw watchpoint condition getting out of the scope. + +* Fri Mar 28 2008 Jan Kratochvil - 6.8-1 +- Upgrade to the latest upstream final release gdb-6.8. + +* Mon Mar 10 2008 Jan Kratochvil - 6.7.50.20080227-3 +- build-id warnings integrated more with rpm and the lists of the warnings got + replaced usually by a single-line `debuginfo-install' advice. + - FIXME: Testsuite needs an update for the new pre-prompt messages. +- Fix the `--with upstream' compilation - gstack/pstack are now omitted. + +* Tue Mar 4 2008 Jan Kratochvil - 6.7.50.20080227-2 +- Drop the unused `ChangeLog.RedHat' file stubs. +- New rpm option `--with upstream' to drop the Fedora patches for testing. +- Drop some no longer valid .spec file comments. +- Include the Fortran dynamic arrays entry for changelog of 6.7.50.20080227-1. + +* Mon Mar 3 2008 Jan Kratochvil - 6.7.50.20080227-1 +- Upgrade to the upstream gdb-6.8 prerelease. +- Cleanup the leftover `.orig' files during %%prep. +- Add expat-devel check by the configure script (for the other-arch builds). +- `--with testsuite' now also BuildRequires: fpc +- Backport fix of a segfault + PIE regression since 6.7.1 on PIE executables. +- Update the printed GDB version string to be Fedora specific. +- Fix/implement the Fortran dynamic arrays support (BZ 377541). + +* Sat Mar 1 2008 Jan Kratochvil - 6.7.1-16 +- Run the full testsuite also in the `-fPIE -pie' mode. + +* Mon Feb 25 2008 Jan Kratochvil - 6.7.1-15 +- New --with parameters `testsuite' and `debug'. + - Testsuite is now run during the build only on explicit `--with testsuite'. +- Testsuite now possibly produces two outputs for the two GDB target arches. + +* Thu Feb 21 2008 Jan Kratochvil - 6.7.1-14 +- Rename `set debug build-id' as `set build-id-verbose', former level 1 moved + to level 2, default value is now 1, use `set build-id-verbose 0' now to + disable the missing separate debug filenames messages (BZ 432164). + +* Wed Feb 20 2008 Jan Kratochvil - 6.7.1-13 +- ia64 build fixes from Doug Chapman (BZ 428882). +- gdbserver separated into an extra package (BZ 405791). +- pstack obsoleted by included gstack (BZ 197020). +- Fix #include on kernel-headers-2.6.25-0.40.rc1.git2.fc9.x86_64. +- Drop the PowerPC simulator as no longer being compatible with Fedora binaries. + +* Thu Feb 7 2008 Jan Kratochvil - 6.7.1-12 +- build-id debug messages print now the library names unconditionally. + +* Thu Jan 24 2008 Jan Kratochvil - 6.7.1-11 +- Improve the text UI messages for the build-id debug files locating. + - Require now the rpm libraries. +- Fix false `(no debugging symbols found)' on `-readnever' runs. +- Extend the testcase `gdb.arch/powerpc-prologue.exp' for ppc64. + +* Sat Jan 12 2008 Jan Kratochvil - 6.7.1-10 +- Compilation fixup (-9 was never released). + +* Sat Jan 12 2008 Jan Kratochvil - 6.7.1-9 +- Fix also threaded inferiors for hardware watchpoints after the fork call. +- Test debugging statically linked threaded inferiors (BZ 239652). + - It requires recent glibc to work in this case properly. +- Testcase cleanup fixup of the gcore memory and time requirements of 6.7.1-8. + +* Thu Jan 10 2008 Jan Kratochvil - 6.7.1-8 +- Fix detaching from a threaded formerly stopped process with non-primary + thread currently active (general BZ 233852). + - Enable back again the testcases named `attachstop.exp' (no such exist now). + - Rename the testcase `gdb.threads/attachstop' to `gdb.threads/attachstop-mt'. +- Test ia64 memory leaks of the code using libunwind. +- Testcase delay increase (for BZ 247354). +- Test gcore memory and time requirements for large inferiors. + +* Mon Jan 7 2008 Jan Kratochvil - 6.7.1-7 +- Backport the gcc-4.3 compatibility -Werror fixes. +- Fix documentation on hardware watchpoints wrt multiple threads. +- Rename the patch file for BZ 235197 from its former name 234468. +- Fix the vendora testcase `attach-32.exp' affecting the other tests results. +- Support DW_TAG_interface_type the same way as DW_TAG_class_type (BZ 426600). + +* Mon Dec 10 2007 Jan Kratochvil - 6.7.1-6 +- Testsuite fixes for more stable/comparable results. + +* Sat Nov 24 2007 Jan Kratochvil - 6.7.1-5 +- Reduce the excessive gcc-* packages dependencies outside of mock/koji. + +* Fri Nov 16 2007 Jan Kratochvil - 6.7.1-4 +- Fix `errno' resolving across separate debuginfo files. +- Fix segfault on no file loaded, `set debug solib 1', `info sharedlibrary'. +- Extend the testsuite run for all the languages if %%{dist} is defined. +- Support gdb.fortran/ tests by substituting the g77 compiler by gfortran. + +* Sun Nov 4 2007 Jan Kratochvil - 6.7.1-3 +- Fix `errno' resolving on recent glibc with broken DW_AT_MIPS_linkage_name. +- Imported new test for 6.7 PPC hiding of call-volatile parameter register. + +* Sat Nov 3 2007 Jan Kratochvil - 6.7.1-2 +- Backport `Breakpoints at multiple locations' patch primarily for C++. + +* Thu Nov 1 2007 Jan Kratochvil - 6.7.1-1 +- Upgrade to GDB 6.7.1. Drop redundant patches, forward-port remaining ones. + +* Thu Nov 1 2007 Jan Kratochvil - 6.7-1 +- Upgrade to GDB 6.7. Drop redundant patches, forward-port remaining ones. +- Fix rereading of the main executable on its change. + +* Fri Oct 19 2007 Jan Kratochvil - 6.6-37 +- Fix hiding unexpected breakpoints on intentional step/next commands. +- Fix s390 compilation warning/failure due to a wrongly sized type-cast. + +* Sun Oct 14 2007 Jan Kratochvil - 6.6-36 +- Fix hardware watchpoints after inferior forks-off some process. + +* Fri Oct 13 2007 Jan Kratochvil - 6.6-35 +- Fix non-threaded watchpoints CTRL-C regression on `set follow child'. + +* Fri Oct 12 2007 Jan Kratochvil - 6.6-34 +- Fix gdbserver for threaded applications and recent glibc (BZ 328021). + +* Tue Oct 9 2007 Jan Kratochvil - 6.6-33 +- Fix debug load for sparse assembler files (such as vDSO32 for i386-on-x86_64). + +* Mon Oct 8 2007 Jan Kratochvil - 6.6-32 +- Set the breakpoints always to all the ctors/dtors variants (BZ 301701). +- Fix a TUI visual corruption due to the build-id warnings (BZ 320061). +- Fixed the kernel i386-on-x86_64 VDSO loading (producing `Lowest section in'). + +* Fri Oct 5 2007 Jan Kratochvil - 6.6-31 +- Fix address changes of the ctors/dtors breakpoints w/multiple PCs (BZ 301701). +- Delete an info doc file on `rpmbuild -bp' later rebuilt during `rpmbuild -bc'. + +* Tue Sep 25 2007 Jan Kratochvil - 6.6-30 +- Fix re-setting of the ctors/dtors breakpoints with multiple PCs (BZ 301701). +- Avoid one useless user question in the core files locator (build-id). + +* Sun Sep 23 2007 Jan Kratochvil - 6.6-29 +- Fixed the kernel VDSO loading (`warning: no loadable sections found in ...'). +- Fix the testcase for pending signals (from BZ 233852). + +* Sat Sep 22 2007 Jan Kratochvil - 6.6-28 +- Support also the `$allocate' and `$delete' ctor/dtor variants (BZ 301701). +- Fix the build compatibility with texinfo >= 4.10. +- Fix the testcase for pending signals (from BZ 233852). + +* Sun Sep 16 2007 Jan Kratochvil - 6.6-27 +- Fix attaching to stopped processes and/or pending signals. + +* Tue Aug 28 2007 Jan Kratochvil - 6.6-26 +- New fast verification whether the .debug file matches its peer (build-id). +- New locating of the matching binaries from the pure core file (build-id). + +* Fri Aug 17 2007 Jan Kratochvil - 6.6-25 +- Fixed excessive RPATH (related to BZ 228891). + +* Wed Aug 8 2007 Jan Kratochvil - 6.6-24 +- Fixed compatibility with the Rawhide glibc open(2) syscall sanity checking. +- Update the core_dump_elf_headers=1 compatibility code to the upstream variant. + +* Mon Aug 6 2007 Jan Kratochvil - 6.6-23 +- Update PPC unwinding patches to their upstream variants (BZ 140532). + +* Wed Jul 25 2007 Jesse Keating - 6.6-22 +- Rebuild for RH #249435 + +* Mon Jul 23 2007 Jan Kratochvil - 6.6-21 +- Fixed compatibility with Rawhide kernel fs.binfmt_elf.core_dump_elf_headers=1. +- .spec file updates to mostly pass RPMLINT - Fedora merge review (BZ 225783). +- Fixed testcase of the exit of a thread group leader (of BZ 247354). +- Cleanup any leftover testsuite processes as it may stuck mock(1) builds. + +* Sun Jul 8 2007 Jan Kratochvil - 6.6-20 +- Do not hang on exit of a thread group leader (BZ 247354). +- New test for upstream fix of VDSO decoding while attaching to an i386 process. +- Fixed BZ # 232014 -> 232015. + +* Thu Jul 5 2007 Jan Kratochvil - 6.6-19 +- Link with libreadline provided by the operating system. + +* Tue Jun 26 2007 Jan Kratochvil - 6.6-18 +- Fix PPC software watchpoints active while stepping atomic instr. (BZ 237572). + +* Thu Jun 21 2007 Jan Kratochvil - 6.6-17 +- Support for stepping over PPC atomic instruction sequences (BZ 237572). +- `set scheduler-locking step' is no longer enforced but it is now default. + +* Wed Jun 20 2007 Jan Kratochvil - 6.6-16 +- Fix attaching a stopped process on expected + upstream kernels (BZ 233852). + - Fix attaching during a pending signal being delivered. + +* Thu Jun 7 2007 Jan Kratochvil - 6.6-15 +- Testcase update to cover PPC Power6/DFP instructions disassembly (BZ 230000). +- Disable some known timeouting/failing testcases to reduce the build time. +- Fix crash on missing filenames debug info (BZ 242155). + +* Sat Apr 28 2007 Jan Kratochvil - 6.6-14 +- Fixup for the PPC Power6/DFP instructions disassembly (BZ 230000). +- New testcase for the GCORE buffer overflow (for BZ 238285, formerly 235753). + +* Wed Apr 25 2007 Jan Kratochvil - 6.6-13 +- Fix `gcore' command for 32bit PPC inferiors on 64bit PPC hosts (BZ 232015). + +* Wed Apr 25 2007 Jan Kratochvil - 6.6-12 +- Enable PowerPC to print 128-bit long double variables (BZ 237872). +- New testcase for gcore of 32bit inferiors on 64bit hosts. + +* Tue Apr 24 2007 Jan Kratochvil - 6.6-11 +- Package review, analysed by Ralf Corsepius (BZ 225783). + - Fix prelink(8) testcase for non-root $PATH missing `/usr/sbin' (BZ 225783). + - Fix debugging GDB itself - the compiled in source files paths (BZ 225783). + - Fix harmless GCORE stack buffer overflow, by _FORTIFY_SOURCE=2 (BZ 238285). + - Fix XML support - the build was missing `expat-devel'. + - Updated the `info' files handling by the spec file. + - Building now with the standard Fedora code protections - _FORTIFY_SOURCE=2. + - Use multiple CPUs for the build (%%{?_smp_mflags}). + - Separate testsuite run to its %%check section. + - Fix (remove) non-ASCII spec file characters. + - Remove system tools versions dumping - already present in mock build logs. + +* Sun Apr 22 2007 Jan Kratochvil - 6.6-10 +- Notify user of a child forked process being detached (BZ 235197). + +* Sun Apr 22 2007 Jan Kratochvil - 6.6-9 +- Allow running `/usr/bin/gcore' with provided but inaccessible tty (BZ 229517). +- Fix testcase for watchpoints in threads (for BZ 237096). +- BuildRequires now `libunwind-devel' instead of the former `libunwind'. +- Use the runtime libunwind .so.7, it requires now >= 0.99-0.1.frysk20070405cvs. + +* Sat Mar 24 2007 Jan Kratochvil - 6.6-8 +- Use definition of an empty structure as it is not an opaque type (BZ 233716). +- Fixed the gdb.base/attachstop.exp testcase false 2 FAILs. + +* Thu Mar 15 2007 Jan Kratochvil - 6.6-7 +- Suggest SELinux permissions problem; no assertion failure anymore (BZ 232371). + +* Wed Mar 14 2007 Jan Kratochvil - 6.6-6 +- Fix occasional dwarf2_read_address: Corrupted DWARF expression (BZ 232353). + +* Mon Mar 12 2007 Jan Kratochvil - 6.6-5 +- Temporary support for shared libraries >2GB on 64bit hosts. (BZ 231832) + +* Sun Feb 25 2007 Jan Kratochvil - 6.6-4 +- Backport + testcase for PPC Power6/DFP instructions disassembly (BZ 230000). + +* Mon Feb 5 2007 Jan Kratochvil - 6.6-3 +- Fix a race during attaching to dying threads; backport (BZ 209445). +- Testcase of unwinding has now marked its unsolvable cases (for BZ 140532). + +* Fri Jan 26 2007 Jan Kratochvil - 6.6-2 +- Backported post gdb-6.6 release PPC `show endian' fixup. +- Fix displaying of numeric char arrays as strings (BZ 224128). +- Simplified patches by merging upstream accepted ones into a single file. + +* Sat Jan 20 2007 Jan Kratochvil - 6.6-1 +- Upgrade to GDB 6.6. Drop redundant patches, forward-port remaining ones. +- Backported post gdb-6.6 release ia64 unwinding fixups. +- Testcase for exec() from threaded program (BZ 202689). + +* Mon Jan 15 2007 Jan Kratochvil - 6.5-27 +- Fix the testsuite results broken in 6.5-26, stop invalid testsuite runs. + +* Fri Jan 13 2007 Jan Kratochvil - 6.5-26 +- Fix unwinding of non-debug (.eh_frame) PPC code, Andreas Schwab (BZ 140532). +- Fix unwinding of debug (.debug_frame) PPC code, workaround GCC (BZ 140532). +- Fix missing testsuite .log output of testcases using get_compiler_info(). + +* Fri Jan 12 2007 Jan Kratochvil - 6.5-25 +- Fix unwinding of non-CFI (w/o debuginfo) PPC code by recent GCC (BZ 140532). + +* Thu Jan 11 2007 Jan Kratochvil - 6.5-24 +- Backport readline history for input mode commands like `command' (BZ 215816). + +* Tue Jan 9 2007 Jan Kratochvil - 6.5-23 +- Find symbols properly at their original (included) file (BZ 109921). +- Remove the stuck mock(1) builds disfunctional workaround (-> mock BZ 221351). + +* Sat Dec 30 2006 Jan Kratochvil - 6.5-22 +- Fix unwinding crash on older gcj(1) code (extended CFI support) (BZ 165025). +- Include testcase for the readline history of input mode commands (BZ 215816). + +* Sat Dec 23 2006 Jan Kratochvil - 6.5-21 +- Try to reduce sideeffects of skipping ppc .so libs trampolines (BZ 218379). +- Fix lockup on trampoline vs. its function lookup; unreproducible (BZ 218379). + +* Tue Dec 19 2006 Jan Kratochvil - 6.5-20 +- Fix bogus 0x0 unwind of the thread's topmost function clone(3) (BZ 216711). +- Testcase for readline segfault on excessively long hand-typed lines. + +* Tue Dec 12 2006 Jan Kratochvil - 6.5-19 +- Fix attachment also to a threaded stopped process (BZ 219118). +- Cleanup any leftover testsuite processes as it may stuck mock(1) builds. + +* Sat Nov 25 2006 Jan Kratochvil - 6.5-18 +- Fix readline history for input mode commands like `command' (BZ 215816). + +* Wed Nov 16 2006 Jan Kratochvil - 6.5-17 +- Bugfix testcase typo of gdb-6.5-16. + +* Wed Nov 16 2006 Jan Kratochvil - 6.5-16 +- Provide testcase for accessing the last address space byte. + +* Wed Nov 9 2006 Jan Kratochvil - 6.5-15 +- Fix readline segfault on excessively long hand-typed lines. + +* Sat Nov 2 2006 Jan Kratochvil - 6.5-14 +- Fix "??" resolving of symbols from (non-prelinked) debuginfo packages. +- Fix "??" resolving of symbols from overlapping functions (nanosleep(3)). +- Also disable testcase "checkpoint.exp" for a possible kernel Bug 207002. +- Provided (disabled during build) threading testsuite from BEA. + +* Sat Oct 14 2006 Jan Kratochvil - 6.5-13 +- Fix deadlock accessing last address space byte; for corrupted backtraces. + +* Sun Oct 8 2006 Jan Kratochvil - 6.5-12 +- Disabled IPv6 until its user visible syntax gets stable upstream. + +* Sun Oct 1 2006 Jan Kratochvil - 6.5-11 +- No longer disassemble invalid i386 opcodes of movQ/movA (BZ 172034). +- Simplify the IPv6 patch for gdbserver (BZ 198365). +- Suggest fixing your target architecture for gdbserver(1) (BZ 190810). +- Fix dereferencing registers for 32bit inferiors on 64bit hosts (BZ 181390). +- Fix `gcore' command for 32bit inferiors on 64bit hosts. + +* Wed Sep 27 2006 Jan Kratochvil - 6.5-10 +- Support IPv6 for gdbserver (BZ 198365). +- Temporarily disable testcase "chng-syms.exp" for a possible kernel Bug 207002. + +* Wed Sep 21 2006 Jan Kratochvil - 6.5-9 +- Fix crash on C++ symbol failing to be demangled (BZ 206813). +- Fix attach to stopped process, supersede `gdb-6.3-attach-stop-20051011.patch'. +- Fix TLS symbols resolving for objects with separate .debug file (-debuginfo). +- Fix TLS symbols resolving for shared libraries with a relative pathname. +- Support TLS symbols (+`errno' suggestion if no pthread is found) (BZ 185337). + +* Mon Sep 11 2006 Jan Kratochvil - 6.5-8 +- Fix gdb printf command argument using "%%p" (BZ 205551). + +* Mon Sep 4 2006 Alexandre Oliva - 6.5-7 +- Fix bug in patch for CVE-2006-4146. (BZ 203873, BZ 203880) + +* Thu Aug 24 2006 Alexandre Oliva - 6.5-6 +- Avoid overflows and underflows in dwarf expression computation stack. +(BZ 203873) + +* Thu Aug 24 2006 Alexandre Oliva - 6.5-5 +- Backport support for i386 nop memory instructions. +- Fix debuginfo addresses resolving for --emit-relocs Linux kernels +(BZ 203661, from Jan Kratochvil, like the remaining changes). +- Bugfix segv on the source display by ^X 1 (fixes Patch130, BZ +200048). +- Do not step into the PPC solib trampolines (BZ 200533). +- Fix exec() from threaded program, partial CVS backport (BZ 182116). +- Fix occasional failure to load shared libraries (BZ 146810). +- Bugfix object names completion (fixes Patch116, BZ 193763). +- Avoid crash of 'info threads' if stale threads exist (BZ 195429). +- Handle corrupted or missing location list information (BZ 196439). + +* Thu Jul 13 2006 Alexandre Oliva - 6.5-3 +- Add missing definition of multilib_64_archs for glibc-devel buildreqs. +- Backport support for .gnu.hash sections. + +* Wed Jul 12 2006 Alexandre Oliva - 6.5-2 +- BuildReq sharutils, prelink and, on multilib systems, 32-bit glibc-devel. +- Drop obsolete attach-stop patch. +- Fix testcases in threaded-watchpoints2 and step-thread-exit patches. +- Re-enable attach-pie.exp, asm-source.exp and sigstep.exp tests. + +* Tue Jul 11 2006 Alexandre Oliva - 6.5-1 +- Upgrade to GDB 6.5. Drop redundant patches, forward-port remaining +ones. Re-enable ada and objc testsuites. + +* Thu Jun 15 2006 Alexandre Oliva - 6.3.0.0-1.132 +- Require flex and bison at build time. +- Additional patch for BZ 175083, to cope with waitpid setting status +even when returning zero. + +* Wed May 31 2006 Alexandre Oliva - 6.3.0.0-1.131 +- Require gettext at build time. (BZ193366) + +* Sat May 27 2006 Alexandre Oliva - 6.3.0.0-1.130 +- Rewrite patch for BZ 175270, BZ 175083 so as to catch the exception +earlier. +- Remove too-fragile testcases from patches for CFA value and "S" +augmentation. + +* Wed May 17 2006 Alexandre Oliva - 6.3.0.0-1.129 +- Add not-automatically-generated file to fopen64 patch (BZ 191948). + +* Fri Apr 14 2006 Alexandre Oliva - 6.3.0.0-1.128 +- Avoid race conditions caused by exceptions messing with signal masks. +(BZ 175270, BZ 175083, maybe BZ 172938). +- Hardcode /bin and /usr/bin paths into gstack (BZ 179829, BZ 190548). +- Build in a subdir of the source tree instead of in a sibling directory. +- Switch to versioning scheme that uses the same base revision number +for all OSes, and uses a suffix to tell the builds apart and ensure +upgradability. + +* Thu Apr 13 2006 Stepan Kasal - 6.3.0.0-1.127 +- Bump up release number. + +* Thu Apr 13 2006 Stepan Kasal - 6.3.0.0-1.123 +- Use fopen64 where available. Fixes BZ 178796, BZ 190547. +- Use bigger numbers than int. Fixes BZ 171783, BZ 179096. + +* Wed Mar 8 2006 Alexandre Oliva - 6.3.0.0-1.122 +- Bump up release number. + +* Wed Mar 8 2006 Alexandre Oliva - 6.3.0.0-1.119 +- Fix regression in PIE debugging (BZ 133944) (re?)introduced by the +prelink fix (BZ 175075, BZ 190545). Improve testcase for the prelink +fix. +- Revert dwarf2 frame identifier change. + +* Tue Mar 7 2006 Alexandre Oliva - 6.3.0.0-1.118 +- Bump up release number. + +* Tue Mar 7 2006 Alexandre Oliva - 6.3.0.0-1.115 +- Change dwarf2 frame identifiers to use the actual PC instead of the +function's entry point. +- Fix FSF and GDB contact addresses in new testcases. +- Do not try to compile x86_64-only CFA testcase on 32-bit x86. +- Change prelink test to issue untested instead of warning message if +system libraries are not prelinked. + +* Fri Mar 3 2006 Alexandre Oliva - 6.3.0.0-1.114 +- Bump up release number. + +* Fri Mar 3 2006 Alexandre Oliva - 6.3.0.0-1.111 +- Add support for "S" augmentation for signal stack frames. +- Add support for CFA value expressions and encodings. +- Various improvements to the prelink test. + +* Thu Feb 23 2006 Alexandre Oliva - 6.3.0.0-1.110 +- Bump up release number. + +* Thu Feb 23 2006 Alexandre Oliva - 6.3.0.0-1.107 +- Enable gdb to debug core files and executables with mismatched +prelink base addresses. Fixes BZ 175075, BZ 190545. + +* Tue Feb 14 2006 Alexandre Oliva - 6.3.0.0-1.106 +- Bump up release number. + +* Tue Feb 14 2006 Alexandre Oliva - 6.3.0.0-1.103 +- Adjust type-punning patch to include fix not needed upstream. + +* Tue Feb 14 2006 Alexandre Oliva - 6.3.0.0-1.102 +- Bump up release number. + +* Tue Feb 14 2006 Alexandre Oliva - 6.3.0.0-1.99 +- Use type-punning warning fixes as accepted upstream. + +* Fri Feb 10 2006 Jesse Keating - 6.3.0.0-1.98.2 +- bump again for double-long bug on ppc(64) + +* Tue Feb 07 2006 Jesse Keating - 6.3.0.0-1.98.1 +- rebuilt for new gcc4.1 snapshot and glibc changes + +* Mon Jan 16 2006 Alexandre Oliva - 6.3.0.0-1.98 +- Bump up release number. + +* Mon Dec 19 2005 Alexandre Oliva - 6.3.0.0-1.94 +- Fix type-punning warnings issued by GCC 4.1. + +* Fri Dec 16 2005 Jesse Keating +- rebuilt for new gcj + +* Thu Dec 01 2005 Jeff Johnston - 6.3.0.0-1.93 +- Bump up release number. + +* Thu Dec 01 2005 Jeff Johnston - 6.3.0.0-1.90 +- Add option to allow backtracing past zero pc value. +- Bugzilla 170275 + +* Tue Nov 15 2005 Jeff Johnston - 6.3.0.0-1.89 +- Bump up release number. + +* Tue Nov 15 2005 Jeff Johnston - 6.3.0.0-1.86 +- Fix ia64 user-specified SIGILL handling error. +- Bugzilla 165038. + +* Tue Oct 18 2005 Jeff Johnston - 6.3.0.0-1.85 +- Bump up release number. + +* Tue Oct 18 2005 Jeff Johnston - 6.3.0.0-1.82 +- Modify attach patch to add missing fclose. +- Bugzilla 166712 + +* Tue Oct 11 2005 Jeff Johnston - 6.3.0.0-1.81 +- Bump up release number. + +* Tue Oct 11 2005 Jeff Johnston - 6.3.0.0-1.78 +- Support gdb attaching to a stopped process. + +* Thu Sep 29 2005 Jeff Johnston - 6.3.0.0-1.77 +- Bump up release number. + +* Thu Sep 29 2005 Jeff Johnston - 6.3.0.0-1.74 +- Fix up DSO read logic when process is attached. + +* Mon Sep 26 2005 Jeff Johnston - 6.3.0.0-1.73 +- Bump up release number. + +* Mon Sep 26 2005 Jeff Johnston - 6.3.0.0-1.70 +- Fix frame pointer calculation for ia64 sigtramp frame. + +* Thu Sep 22 2005 Jeff Johnston - 6.3.0.0-1.69 +- Bump up release number. + +* Thu Sep 22 2005 Jeff Johnston - 6.3.0.0-1.66 +- Remove extraneous xfree. + +* Wed Sep 07 2005 Jeff Johnston - 6.3.0.0-1.65 +- Bump up release number. + +* Wed Sep 07 2005 Jeff Johnston - 6.3.0.0-1.62 +- Readd readnever option + +* Wed Jul 27 2005 Jeff Johnston - 6.3.0.0-1.61 +- Bump up release number. + +* Tue Jul 26 2005 Jeff Johnston - 6.3.0.0-1.57 +- Bump up release number. + +* Tue Jul 26 2005 Jeff Johnston - 6.3.0.0-1.54 +- Add testcase to verify printing of inherited members +- Bugzilla 146835 + +* Mon Jul 25 2005 Jeff Johnston - 6.3.0.0-1.53 +- Bump up release number. + +* Mon Jul 25 2005 Jeff Johnston - 6.3.0.0-1.50 +- Fix bug with info frame and cursor address on ia64. +- Add testcase to verify pseudo-registers calculated for ia64 sigtramp. +- Bugzilla 160339 + +* Fri Jul 22 2005 Jeff Johnston - 6.3.0.0-1.49 +- Bump up release number. + +* Fri Jul 22 2005 Jeff Johnston - 6.3.0.0-1.46 +- Fix attaching to 32-bit processes on 64-bit systems. +- Bugzilla 160254 + +* Thu Jul 14 2005 Jeff Johnston - 6.3.0.0-1.45 +- Bump up release number. + +* Thu Jul 14 2005 Jeff Johnston - 6.3.0.0-1.42 +- Add work-around to make ia64 gcore work faster. +- Bugzilla 147436 + +* Thu Jul 14 2005 Jeff Johnston - 6.3.0.0-1.41 +- Bump up release number. + +* Mon Jul 11 2005 Jeff Johnston - 6.3.0.0-1.38 +- Fix backtracing across sigaltstack for ia64 +- Bugzilla 151741 + +* Fri Jul 08 2005 Jeff Johnston - 6.3.0.0-1.37 +- Bump up release number. + +* Fri Jul 08 2005 Jeff Johnston - 6.3.0.0-1.35 +- Build pseudo-registers properly for sigtramp frame. +- Bugzilla 160339 + +* Fri Jul 08 2005 Jeff Johnston - 6.3.0.0-1.34 +- Bump up release number. + +* Thu Jul 07 2005 Jeff Johnston - 6.3.0.0-1.31 +- Modify security errata to include additional bfd robustness updates +- Bugzilla 158680 + +* Fri Jun 10 2005 Jeff Johnston - 6.3.0.0-1.30 +- Bump up release number. + +* Fri Jun 10 2005 Jeff Johnston - 6.3.0.0-1.28 +- Security errata for bfd and .gdbinit file usage +- Bugzilla 158680 + +* Wed May 18 2005 Jeff Johnston - 6.3.0.0-1.24 +- Bump up release number. + +* Wed May 18 2005 Jeff Johnston - 6.3.0.0-1.23 +- Bump up release number. + +* Wed May 18 2005 Jeff Johnston - 6.3.0.0-1.22 +- Specify SA_RESTART for linux-nat.c handlers and use my_waitpid + which handles EINTR. + +* Tue May 03 2005 Jeff Johnston - 6.3.0.0-1.21 +- Bump up release number. + +* Tue May 03 2005 Jeff Johnston - 6.3.0.0-1.20 +- Bump up release number. + +* Tue May 03 2005 Jeff Johnston - 6.3.0.0-1.19 +- Fix for partial die in cache error +- Bugzilla 137904 + +* Wed Apr 27 2005 Jeff Johnston - 6.3.0.0-1.18 +- Bump up release number. + +* Wed Apr 27 2005 Jeff Johnston - 6.3.0.0-1.17 +- Bump up release number. + +* Wed Apr 27 2005 Jeff Johnston - 6.3.0.0-1.16 +- Update ia64 sigtramp support to use libunwind and fix top-level + rse register reads to also use libunwind. +- Bugzilla 151741 + +* Thu Apr 21 2005 Jeff Johnston - 6.3.0.0-1.15 +- Bump up release number. + +* Thu Apr 21 2005 Jeff Johnston - 6.3.0.0-1.14 +- Bump up release number. + +* Thu Apr 21 2005 Jeff Johnston - 6.3.0.0-1.13 +- Do not issue warning message for gcore under ia64 +- Bugzilla 146416 + +* Mon Apr 11 2005 Andrew Cagney - 6.3.0.0-1.12 +- Update gstack patch, handle systems that lack /proc//tasks. + +* Fri Apr 8 2005 Andrew Cagney - 6.3.0.0-1.11 +- Replace patch warning about DW_OP_piece with a patch that implements + the DW_OP_piece read path. + +* Sat Apr 2 2005 Andrew Cagney - 6.3.0.0-1.10 +- Print a warning when the separate debug info's CRC doen't match; + test. + +* Wed Mar 30 2005 Jeff Johnston - 6.3.0.0-1.9 +- Bump up release number. + +* Wed Mar 30 2005 Jeff Johnston - 6.3.0.0-1.7 +- Add proper vsyscall page support for ia64. + +* Thu Mar 24 2005 Jeff Johnston - 6.3.0.0-1.6 +- Bump up release number. + +* Thu Mar 24 2005 Jeff Johnston - 6.3.0.0-1.4 +- Fix printing of inherited members of C++ classes. +- Fix for Bugzilla 146835. + +* Tue Mar 22 2005 Jeff Johnston - 6.3.0.0-1.3 +- Bump up release number. + +* Thu Mar 17 2005 Jeff Johnston - 6.3.0.0-1.1 +- Remove warnings that cause errors when compiled with gcc4 and -Werror. + +* Wed Mar 16 2005 Elliot Lee +- rebuilt + +* Fri Mar 04 2005 Jeff Johnston - 6.3.0.0-0.37 +- Bump up release number. + +* Thu Mar 03 2005 Jeff Johnston - 6.3.0.0-0.35 +- Add follow-fork fix from mainline sources. + +* Thu Mar 03 2005 Jeff Johnston - 6.3.0.0-0.34 +- Bump up release number. + +* Mon Feb 28 2005 Jeff Johnston - 6.3.0.0-0.32 +- Modify debug register handling for x86, x86-64 to be thread-specific. +- Modify threaded watchpoint code for x86, x86-64 to properly insert + and remove watchpoints on all threads. + +* Tue Feb 22 2005 Andrew Cagney - 6.3.0.0-0.31 +- Bump version number. + +* Tue Feb 22 2005 Andrew Cagney - 6.3.0.0-0.30 +- Bump version number. + +* Tue Feb 22 2005 Andrew Cagney - 6.3.0.0-0.29 +- Modify gdb-6.3-dwattype0-20050201.patch to check for a zero address + and not zero unsnd. Fix BE 32- vs 64-bit problem. + +* Mon Feb 21 2005 Andrew Cagney - 6.3.0.0-0.28 +- Back port patch adding symfile-mem.o to all GNU/Linux builds. + Fix BZ 146087. + +* Wed Feb 16 2005 Jeff Johnston - 6.3.0.0-0.27 +- Bump up release number. + +* Wed Feb 16 2005 Jeff Johnston - 6.3.0.0-0.26 +- Fix unload.exp testcase. + +* Mon Feb 14 2005 Jeff Johnston - 6.3.0.0-0.25 +- Bump up release number. + +* Mon Feb 14 2005 Jeff Johnston - 6.3.0.0-0.24 +- Fix gdb to always grab the terminal before a readline call. +- Bugzilla 147880 + +* Fri Feb 11 2005 Jeff Johnston - 6.3.0.0-0.23 +- Bump up release number. + +* Fri Feb 11 2005 Jeff Johnston - 6.3.0.0-0.21 +- Fix gdb to handle stepping over the end of an exiting thread. +- Bugzilla 146848 + +* Thu Feb 10 2005 Jeff Johnston - 6.3.0.0-0.20 +- Bump up release number. + +* Tue Feb 08 2005 Jeff Johnston - 6.3.0.0-0.18 +- Modify previous gcore patch to not use linux_proc_xfer_memory even + for main thread. + +* Mon Feb 07 2005 Jeff Johnston - 6.3.0.0-0.17 +- Modify previous gcore patch to only apply to ia64. + +* Fri Feb 04 2005 Jeff Johnston - 6.3.0.0-0.16 +- Fix gcore to work properly for threaded applications +- Bugzilla 145309, 145092 + +* Fri Feb 04 2005 Jeff Johnston - 6.3.0.0-0.15 +- Tolerate DW_AT_type referencing <0> and instead of generating an + error, treat as unknown type. +- Bugzilla 144852. + +* Thu Feb 3 2005 Andrew Cagney - 6.3.0.0-0.14 +- Separate out test patches. + +* Thu Jan 27 2005 Jeff Johnston - 6.3.0.0-0.13 +- Fix to allow ia64 gdb to backtrace from syscalls in a corefile. +- Bugzilla 145092. + +* Wed Jan 26 2005 Jeff Johnston - 6.3.0.0-0.12 +- Fix to support examining files even when the executable moves +- Bugzilla 142122 + +* Wed Jan 26 2005 Andrew Cagney - 6.3.0.0-0.11 +- gdb-6.3-ppcdotsyms-20050126.patch: Backport BFD changes for reading + synthetic symbols. Rewrite code reading elf minimal symbols so that + it includes synthetics. + +* Fri Jan 21 2005 Jeff Johnston - 6.3.0.0-0.10 +- Fix to prevent resetting unwind kernel table size to invalid value + when debugging a core file +- Bugzilla 145309 + +* Fri Jan 21 2005 Andrew Cagney - 6.3.0.0-0.9 +- When single stepping handle both back-to-back and nested signals. +- Disable .symbol patch, results in BFD errors. + +* Fri Jan 21 2005 Jeff Johnston - 6.3.0.0-0.8 +- Support listing both in-charge and not-in-charge dtors when + just the dtor name is given. +- Add new test case for newly added ctor/dtor functionality. + +* Thu Jan 20 2005 Jeff Johnston - 6.3.0.0-0.7 +- Fix to allow breaking by line in both the in-charge and + not-in-charge ctor/dtor. +- Bugzilla 117826 + +* Thu Jan 20 2005 Andrew Cagney - 6.3.0.0-0.6 +- Rebuild. + +* Thu Jan 20 2005 Andrew Cagney - 6.3.0.0-0.5 +- Use bfd_get_synthetic_symtab to read in any synthetic symbols + such as 64-bit PPC's ".symbol"s. + +* Tue Jan 18 2005 Jeff Johnston - 6.3.0.0-0.4 +- Modify non-threaded watchpoint patch to use new observer. + +* Mon Jan 17 2005 Jeff Johnston - 6.3.0.0-0.3 +- Fix for non-threaded watchpoints. + +* Mon Jan 17 2005 Andrew Cagney - 6.3.0.0-0.2 +- Enable PPC CFI, remove merged ppc patches. + +* Wed Jan 12 2005 Elena Zannoni - 6.3.0.0-0.1 + Andrew Cagney + Jeff Johnston +- Various fixes to complete the import and merge. + +* Wed Dec 01 2004 Andrew Cagney - 6.3.0.0 +- Import GDB 6.3, get building, add all patches. + +* Tue Nov 30 2004 Jeff Johnston - 1.200400607.63 +- When removing breakpoints, continue removing breakpoints even if an + error occurs on the list. + +* Sun Nov 28 2004 Andrew Cagney - 1.200400607.62 +- Bump version for RHEL4 build. + +* Wed Nov 24 2004 Andrew Cagney - 1.200400607.61 +- For PPC-64, fix search for a symbol (wasn't specifying the section). + +* Wed Nov 24 2004 Andrew Cagney - 1.200400607.60 +- For PPC-64, do not set malloc name to ".malloc"; no longer needed. +- For all, only define kfail when not already defined. + +* Wed Nov 24 2004 Andrew Cagney - 1.200400607.59 +- Bump version. + +* Wed Nov 24 2004 Andrew Cagney - 1.200400607.58 +- Add rs6000 reggroups; fixes problem of PS register being trashed + causing mysterious branch breakpoints. + +* Tue Nov 23 2004 Andrew Cagney - 1.200400607.57 +- Backport i386 prolog parser - better backtraces out of semop(). +- Add option --readnever to suppress the reading of symbolic debug + information. +- Add script gstack.sh, installed as gstack. + Bugzilla 136584, 137121 +- Add missing files gdb.pie/attach2.c, gdb.pie/break1.c and + gdb.pie/Makefile.in along with testsuite/configure stuff for pie. + +* Tue Nov 23 2004 Andrew Cagney - 1.200400607.57 +- Backport i386 prolog parser - better backtraces out of semop(). +- Add option --readnever to suppress the reading of symbolic debug + information. +- Add script gstack.sh, installed as gstack. + Bugzilla 136584, 137121 + +* Mon Nov 22 2004 Jeff Johnston - 1.200400607.56 +- Bump up release number. + +* Mon Nov 22 2004 Jeff Johnston - 1.200400607.55 +- Multiple ia64 backtrace fixes. Bugzilla 125157 + +* Thu Nov 11 2004 Elena Zannoni - 1.200400607.54 +- Bump up release number + +* Thu Nov 11 2004 Elena Zannoni - 1.200400607.51 +- Modify configure line to not use absolute paths. This was + creating problems with makeinfo/texinfo. +- Get rid of makeinfo hack. +Bugzilla 135633 + +* Tue Nov 09 2004 Jeff Johnston - 1.200400607.50 +- Bump up release number + +* Tue Nov 09 2004 Jeff Johnston - 1.200400607.49 +- Bump up release number + +* Tue Nov 09 2004 Jeff Johnston - 1.200400607.48 +- Expose $base, $allocate constructors and $delete, $base destructors + for breakpoints. + +* Tue Nov 09 2004 Andrew Cagney - 1.200400607.47 +- Enable PPC CFI. + +* Mon Nov 08 2004 Jeff Johnston - 1.200400607.46 +- Bump up release number + +* Mon Nov 08 2004 Jeff Johnston - 1.200400607.45 +- Bump up release number + +* Fri Nov 05 2004 Jeff Johnston - 1.200400607.44 +- Allow macros to continue past a backtrace error + +* Tue Oct 26 2004 Andrew Cagney - 1.200400607.43 +- Hack around broken PT_FPSCR defined in headers. +- Import latest s390 fixes. +- Disable sigstep.exp - s390 has problems. +- Use PC's symtab when looking for a symbol. +- Work around DW_OP_piece. + +* Fri Oct 22 2004 Andrew Cagney - 1.200400607.42 +- For 64-bit PPC, convert _dl_debug_state descriptor into a code address. +- Fix --ignore option. + +* Mon Oct 10 2004 Andrew Cagney - 1.200400607.40 +- Disable attach-pie.exp test, hangs on amd64 without auxv. +- Move pie tests to pie. + +* Mon Oct 10 2004 Andrew Cagney - 1.200400607.39 +- Fix comment bug in sigstep.exp. + +* Thu Oct 07 2004 Jeff Johnston - 1.200400607.38 +- Do not invalidate cached thread info when resuming threads. +- Bump up release number. + +* Fri Oct 01 2004 Jeff Johnston - 1.200400607.35 +- Fix S/390 watchpoint support to work better under threading. + +* Fri Oct 01 2004 Jeff Johnston - 1.200400607.34 +- Fix thread_db_get_lwp to handle 2nd format ptids. + +* Mon Sep 27 2004 Andrew Cagney - 1.200400607.33 +- Don't unwind past a zero PC (when normal frames). + +* Mon Sep 27 2004 Jeff Johnston - 1.200400607.32 +- Add threaded watchpoint support for x86, x86-64, and ia64. + +* Mon Sep 27 2004 Andrew Cagney - 1.200400607.31 +- Instead of deleting bigcore.exp, use runtest --ignore. + +* Thu Sep 23 2004 Andrew Cagney - 1.200400607.30 +- Merge in mainline testsuite up to 2004-09-23, pick up sig*.exp tests. + Merge in mainline infrun.c, pick up all infrun.c fixes. + Generate bigcore's corefile from the running inferior. + Limit bigcore's corefile to max file-size. + +* Thu Sep 02 2004 Jeff Johnston - 1.200400607.29 +- Fix low-level lin-lwp code to wait specifically for any stepping + LWP (bugzilla 130896) + +* Tue Aug 31 2004 Jeff Johnston - 1.200400607.28 +- Add test case for bugzilla 128618 fix. + +* Mon Aug 30 2004 Jeff Johnston - 1.200400607.27 +- Add support for breakpoints in manually loaded/unloaded shared libs. + (bugzilla 128618) + +* Mon Aug 30 2004 Jeff Johnston - 1.200400607.26 +- Add java inferior call support. + +* Mon Aug 30 2004 Andrew Cagney - 1.200400607.25 +- Convert "main" the function descriptor, into an address. + +* Mon Aug 30 2004 Andrew Cagney - 1.200400607.24 +- Fix single-stepping when a signal is pending, was exiting program. + -- needs kernel fix so that ptrace(PT_STEP,SIG) doesn't do a PT_CONT. + -- sigstep.exp tests pass with this fix applied. + +* Mon Aug 30 2004 Elena Zannoni - 1.200400607.23 +- Delete some part of gdb-6.1post-test-rh.patch, to avoid confusing + gdb when testing itself, and loading separate debug info. + +* Fri Aug 13 2004 Jeff Johnston - 1.200400607.22 +- Check in gdb mainline fix for applications calling clone directly. + +* Tue Aug 10 2004 Jeff Johnston - 1.200400607.21 +- Alter libunwind frame code to allow using libunwind 0.97 and up. + +* Tue Aug 03 2004 Jeff Johnston - 1.200400607.20 +- Fix the ia64 libunwind test to match current output. + +* Fri Jul 30 2004 Elena Zannoni - 1.200400607.19 +- Fix the tests where gdb debugs itself, as to not copy + the executable to xgdb. + +* Mon Jul 26 2004 Elena Zannoni - 1.200400607.18 +- Add Pie patches back in. + +* Fri Jul 16 2004 Andrew Cagney - 1.200400607.17 +- Fix stepping over a no-debug shared-library function. +- Fix patch vsyscall patch name. + +* Thu Jul 8 2004 Jeff Johnston - 1.200400607.16 +- Update thread code with fix from gdb HEAD + +* Wed Jul 7 2004 Andrew Cagney - 1.200400607.15 +- disable vsyscall +- import Bob's crasher fix +- disable bigcore.exp + +* Mon Jul 5 2004 Andrew Cagney - 1.200400607.14 +- Make large corefiles work on systems that require O_LARGEFILE. + +* Tue Jun 29 2004 Elena Zannoni - 1.200400607.13 +- Fix BuildRequires for libunwind on ia64. + +* Mon Jun 28 2004 Andrew Cagney - 1.200400607.12 +- Import wild frame ID patch. Stops GDB incorrectly matching invalid + frame IDs. +- Disable bigcore on ia64 and amd64. + +* Fri Jun 25 2004 Andrew Cagney - 1.200400607.11 +- Fix testsuite to kill attach process (from corrinna/mainline). +- Fix build problems with vsyscall patch. + +* Fri Jun 25 2004 Andrew Cagney - 1.200400607.10 +- Fix annotate test messages. +- Recognize VSYSCALL pages. + +* Thu Jun 24 2004 Jeff Johnston - 1.200400607.9 +- Fix ia64 watchpoint support. + +* Wed Jun 23 2004 Andrew Cagney - 1.200400607.8 +- Do not xfail signals on i387, convert KFAIL to FAIL and not XFAIL. + +* Wed Jun 23 2004 Andrew Cagney - 1.200400607.7 +- Fix to ppc64 unwinder - handle glibcs function within syscall + function hack. +- Update sigbpt.exp, ena-dis-br.exp observer.exp signull.exp, + step-test.exp and sizeof.exp, so that test names are architecture + clean. +- Disable bigcore.exp on PowerPC 64. + +* Tue Jun 22 2004 Andrew Cagney - 1.200400607.6 +- Merge in mainline testsuite changes up to 2004-06-21. +- Re-implement 32 and 64-bit PPC signal trampolines. +- Check i386 and amd64 signal trampolines before dwarf2. +- Allow tramp-frame when there is a symbol. +- Test interaction between single-step, breakpoint and signal. +- ABI: Fix PPC64 function parameters, sizeof long-double, and enum + return values. + +* Mon Jun 21 2004 Elena Zannoni - 1.200400607.5 +- Fix sed line for gz info files. + +* Mon Jun 21 2004 Andrew Cagney - 1.200400607.4 +- Tar/uuencode both the .sum and .log test results. + +* Tue Jun 15 2004 Elena Zannoni - 0.200400607.3 +- Remove installation of mmalloc, and its info files. +- Add hack to deal with differring info files generated by makeinfo. +- Restore release number convention. + +* Tue Jun 15 2004 Elliot Lee +- rebuilt + +* Thu Jun 10 2004 Elena Zannoni - 0.200400607.2 +- Fix Requires and BuildRequires for libunwind dependencies. +- Add patch to silence gcc3.4 warnings. + +* Wed Jun 09 2004 Elena Zannoni - 0.200400607.1 +- New import: revamp everything. Remove all patches for now. +- Update the Requires and BuildRequires sections. +- Removed stupid Ada testcases (there is no ada support in gdb yet). + +* Mon May 10 2004 Elena Zannoni - 0.20040223.20 +- Disable PIE again. +- obsolete gdb64 only if on ppc64. + +* Mon May 03 2004 Jeff Johnston - 0.20040223.19 +- Add -u parameter to build ChangeLog patch. + +* Mon May 03 2004 Jeff Johnston - 0.20040223.18 +- Update thread fix made for .6 release to FSF version. + +* Thu Apr 22 2004 Elena Zannoni - 0.20040223.17 +- Disable PIE again. + +* Thu Apr 22 2004 Jeff Johnston - 0.20040223.16 +- Bump version number. + +* Wed Apr 21 2004 Jeff Johnston - 0.20040223.15 +- fix ia64 info frame command +- also fix ia64 tdep file for which elf header file to include + +* Tue Mar 30 2004 Elena Zannoni - 0.20040223.14 +- re-enable pie. + +* Tue Mar 30 2004 Elena Zannoni - 0.20040223.13 +- Fix testsuite glitches. + +* Thu Mar 24 2004 Elena Zannoni - 0.20040223.12 +- Fix typo. + +* Thu Mar 24 2004 Elena Zannoni - 0.20040223.11 +- Make gdb compile w/o warnings with gcc-3.4. +- Reenable PIE support code. + +* Wed Mar 23 2004 Elena Zannoni - 0.20040223.10 +- Bump version number + +* Wed Mar 23 2004 Elena Zannoni - 0.20040223.9 +- temporarily disable PIE support. +- Add section to obsolete gdb64 package. + +* Sun Mar 21 2004 Elena Zannoni - 0.20040223.8 +- Add support for debugging of PIE executables. + +* Tue Mar 09 2004 Elena Zannoni - 0.20040223.7 +- Bump version number. + +* Mon Mar 08 2004 Jeff Johnston - 0.20040223.6 +- Fix thread support to recognize new threads even when they reuse + tids of expired threads. Also ensure that terminal is held by gdb + while determining if a thread-create event has occurred. + +* Mon Mar 08 2004 Andrew Cagney - 0.20040223.5 +- Sync with 6.1 branch; eliminate all amd64 patches; + add more robust 32x64 PPC64 patches. + +* Tue Mar 02 2004 Elliot Lee +- rebuilt + +* Tue Mar 2 2004 Andrew Cagney - 0.20040223.4 +- 32x64 fixes that work with threads, replaced old + non-thread 32x64 patch, add nat patch. + +* Wed Feb 25 2004 Elena Zannoni - 0.20040223.3 +- Add patch for x86_64 in 32 bit mode. + +* Wed Feb 25 2004 Elena Zannoni - 0.20040223.2 +- Remove ppc64 hacks. +- Refresh some patches. + +* Wed Feb 25 2004 Elena Zannoni - 0.20040223.1 +- Import new gdb snapshot from mainline FSF. +- Update patch list. + +* Tue Feb 17 2004 Jeff Johnston - 1.20031117.8 +- Switch ia64-tdep.c to use new abi used by libunwind-0.95 and up. +- Fix gate area specification for ia64-linux-tdep.c. +- Fix long double support for ia64. + +* Fri Feb 13 2004 Elliot Lee +- rebuilt + +* Thu Jan 08 2004 Elena Zannoni - 0.20031117.7 +- Add fixes for ppc32 support on ppc64 platform, from Andrew Cagney. + +* Tue Jan 06 2004 Elena Zannoni - 0.20031117.6 +- Add patch to have unique binary names in the testsuite. +- Disable s390/s390x pthread.exp test (FIXME) +- Don't install any info files for the ppc platform. Let's take them + from the ppc64 one (or we get install conflicts). +- Remove generated info files from the source tree. They are generated + as part of the FSF snapshot process. + +* Mon Nov 24 2003 Elena Zannoni - 0.20031117.5 +- Add patches from old rpm for i386 support on x86_64. +- Add build dependency on libunwind for ia64. + +* Fri Nov 21 2003 Jeremy Katz - 0.20031117.4 +- more rpm tricks to get the gdb64 package happier + +* Thu Nov 20 2003 Elena Zannoni - 0.20031117.3 +- Add sick and twisted workaround for ppc64 architecture. + +* Wed Nov 19 2003 Elena Zannoni - 0.20031117.2 +- Fix typo in libunwind test. + +* Tue Nov 18 2003 Elena Zannoni - 0.20031117.1 +- Import new gdb snapshot from mainline FSF. +- Fix some testfiles. +- Add fixes for gcore, and patch for libunwind support on ia64. +- Add tests to see what versions of gcc, binutils, glibc and kernel we + are running with. + +* Wed Oct 15 2003 Elena Zannoni - 0.20030710.41 +- Bump up version number. + +* Wed Sep 24 2003 Elena Zannoni - 0.20030710.40 +- Fix problem with gcore and single threaded programs. (bugzilla 103531) + +* Mon Sep 22 2003 Jeff Johnston - 0.20030710.39 +- Fix call to quit_target from quit_force. + +* Sun Sep 21 2003 Andrew Cagney - 0.20030710.38 +- Fix PPC64 push dummy call. +- Re-fix PPC64 return value (had wrong / old patch). + +* Sat Sep 20 2003 Andrew Cagney - 0.20030710.37 +- Fix PPC32 return values. + +* Sat Sep 20 2003 Andrew Cagney - 0.20030710.36 +- Rewrite ppc64 retun value methods so that they (hopefully) +match the SysV spec. +- Enable ppc64 testsuite. + +* Thu Sep 18 2003 Andrew Cagney - 0.20030710.35 +- Hack around problem "break main" vs "break .main" when there is +only a minimal ppc64 symbol table. The former is a function descriptor +and not where you want the breakpoint to go. Only convert descriptors +to pointers when the address is in the ".opd" section. + +* Wed Sep 17 2003 Andrew Cagney - 0.20030710.34 +- Fix ppc32 push_dummy_call. + +* Tue Sep 16 2003 Andrew Cagney - 0.20030710.33 +- Pack gdb.sum and gdb.log using uuencode and bzip. + +* Tue Sep 16 2003 Jeff Johnston - 0.20030710.32 +- Catch errors when quitting so exit of gdb still occurs. + +* Mon Sep 15 2003 Andrew Cagney - 0.20030710.31 +- Fix ppc32 use_struct_convention. + +* Thu Sep 11 2003 Andrew Cagney - 0.20030710.30 +- Mods to dwarf2-frame.c to work around a lack of GCC/CFI info. + +* Thu Sep 11 2003 Elena Zannoni - 0.20030710.29 +- Bump up version number. + +* Wed Sep 10 2003 Elena Zannoni - 0.20030710.28 +- Fix a core dump with MI. +- Add new ChangeLog patch for mi changes. + +* Thu Sep 04 2003 Elena Zannoni - 0.20030710.27 +- Change the name of the package to gdb64 in ppc64 case. + +* Tue Aug 26 2003 Elena Zannoni - 0.20030710.26 +- Add testcase for separate debug info. + +* Tue Aug 26 2003 Andrew Cagney - 0.20030710.25 +- fix i386 on x86-64 TLS +- add "base-aug2003" suffix to older x86i386 patch + +* Tue Aug 26 2003 Andrew Cagney - 0.20030710.24 +- skip the ppc64 and x86-64 frame redzone. + +* Fri Aug 22 2003 Elena Zannoni - 0.20030710.23 +- Relax one testcase in selftest.exp a bit. +- Accept different output as well in thread bt (platform dependent). +- Enable testsuite run for ia64, ppc, s390 and s390x. They are in + reasonably good shape. + +* Thu Aug 21 2003 Jeff Johnston - 0.20030710.22 +- Multiple ia64 fixes. +- Fix ia64 printing of function pointers. +- Fix ia64 prologue examination to ignore predicated insns if we + haven't found the return address yet. +- Skip dump.exp testcase for ia64 + +* Thu Aug 21 2003 Elena Zannoni - 0.20030710.21 +- Bump release number. + +* Wed Aug 20 2003 Elena Zannoni - 0.20030710.20 +- Relax pattern in annota2.exp test. + +* Wed Aug 20 2003 Elena Zannoni - 0.20030710.19 +- rename gdb binary to gdb64 for ppc64 platform. + +* Tue Aug 19 2003 Jeff Johnston - 0.20030710.18 +- Fix ia64 pc unwinding to include psr slot. + +* Mon Aug 18 2003 Elena Zannoni - 0.20030710.17 +- Fix info installation for annotate.texi. (Bugzilla 102521) + +* Fri Aug 15 2003 Elena Zannoni - 0.20030710.16 +- revamp tls tests a bit. +- Handle new output from gdb in relocate.exp + +* Wed Aug 13 2003 Elena Zannoni - 0.20030710.15 +- Fix problem for processing of separate debug info files. + +* Wed Aug 13 2003 Jeff Johnston - 0.20030710.14 +- add ia64.inc file for testing ia64 in gdb.asm testsuite + +* Fri Aug 8 2003 Andrew Cagney - 0.20030710.13 +- print the libthread_db library path, print when threads are enabled + +* Thu Aug 7 2003 Andrew Cagney - 0.20030710.12 +- "cat" the test log into the build log + +* Wed Aug 06 2003 Jeff Johnston - 0.20030710.11 +- modernize ia64 gdb to use new frame model +- remove/replace deprecated interfaces used by ia64 gdb + +* Wed Aug 06 2003 Andrew Cagney - 0.20030710.10 +- Sync to gdb-5.3.90-sync-20030806.patch. + +* Wed Jul 29 2003 Andrew Cagney - 0.20030710.9 +- add x86-64 i386 fixes + +* Tue Jul 29 2003 Elena Zannoni - 0.20030710.8 +- Fix some tests by xfailing the correct target triplet for RedHat. +- Remove include of config.h from pthreads.c testcases. + +* Mon Jul 28 2003 Elena Zannoni - 0.20030710.7 +- Fix some test failures, by escaping correctly. + +* Thu Jul 24 2003 Elena Zannoni - 0.20030710.6 +- Remove one testcase that is redundant. + +* Wed Jul 23 2003 Elena Zannoni - 0.20030710.5 +- Bump up release number. + +* Wed Jul 23 2003 Elena Zannoni - 0.20030710.4 +- Bring in sync with current head of gdb-6 branch. +- Remove linespec patch, because included in the new sync patch. + +* Fri Jul 18 2003 Elena Zannoni - 0.20030710.3 +- Add patch to avoid gdb segfault with bad debug info. +- Change location of build tree to avoid conflicts with older versions + possibly installed. + +* Thu Jul 17 2003 Elena Zannoni - 0.20030710.2 +- Add patch to synchronize the current snapshot with the gdb-6 branch head. +- Remove some patches that are includd in such diff. +- Enable tests on AMD64 as well. + +* Fri Jul 11 2003 Elena Zannoni - 0.20030710.1 +- Import new gdb snapshot. +- Revamp gdb.spec. Get rid of patches that apply to older versions. +- Add patches for ppc64 support, kfail and make gdb more robust in copingi + with bad debug info. + +* Wed Jul 02 2003 Jeff Johnston - 1.20021129.39 +- Fix bug with ia64 checking of hardware breakpoints. + +* Mon Jun 30 2003 Elena Zannoni - 1.20021129.38 +- Add necessary function for NPTL support on x86-64. + +* Wed Jun 04 2003 Elliot Lee +- rebuilt + +* Wed Jun 04 2003 Elena Zannoni - 0.20021129.37 +* Tue Jun 03 2003 Elena Zannoni - 0.20021129.36 +- Enable warnings for x86_64, not x86-64. +- Fix warnings from infptrace.c and dwarfread.c. +- Print error message only when reading separate debug info really + doesn't work (jimb@redhat.com). + +* Fri May 23 2003 Elena Zannoni - 0.20021129.35 +- Fixes for fetching and storing access registers on s390x (jimb@redhat.com). + Bugzilla 91455. + +* Wed May 21 2003 Jeff Johnston - 0.20021129.34 +- Do not generate error on detach failure. Bugzilla 90900. + +* Thu May 8 2003 Elena Zannoni - 0.20021129.33 +- New tests for asm on s390x (jimb@redhat.com). Bugzilla 90503. +- Fixes for prologue analysis on s390x (jimb@redhat.com). Bugzilla 90506. +- bfd fix for 64-bit platforms (jimb@redhat.com). +- Disable ppc64 builds until we have a port. + +* Thu May 1 2003 Jeff Johnston - 0.20021129.32 +- Add ia64 support to the float.exp testcase. + +* Thu May 1 2003 Elena Zannoni - 0.20021129.31 +- Clean up the tls tests some more. +- Fix problem with non US-eng locale. Bugzilla bug 88823. + +* Wed Apr 30 2003 Jeff Johnston - 0.20021129.30 +- Fix ia64 prologue skipping. +- Fix ia64 line table. +- Fix setting of prev_pc in infrun.c. + +* Mon Mar 31 2003 Elena Zannoni - 0.20021129.29 +- Include the gcore script, as gdb_gcore.sh and install it in + /usr/bin as gcore. +- One more disassembly fix for core files. Added to + gdb-5.3post-disasm-mar2003.patch. Bugzilla 87677. +- Enable build warnings for x86-64. + +* Mon Mar 31 2003 Elena Zannoni - 0.20021129.28 +- Fix Java strings printing. +- Fix memory corruption in disassembly code. Bugzilla 85644. +- Testsuite fixes (jimb@redhat.com). Bugzilla 85457. +- Fixes for s390 stack handling (jimb@redhat.com). Bugzilla 85039. +- Fixes for s390 struct return (jimb@redhat.com). + +* Wed Mar 26 2003 Elena Zannoni - 0.20021129.27 +- Fixes for disassembly of code in threaded applications. Bugzilla 87495. +- Fixes for s390 prologue analysis. (jimb@redhat.com). + Bugzilla bugs 85251, 85214. + +* Thu Mar 20 2003 Elena Zannoni - 0.20021129.26 +- Fix inferior function calls with void return on x86-64. Bugzilla bug 83197. +- Fix for upstream PR/699. +- Fix some problems with gdb-5.3post-thrtst-feb2003.patch. + +* Wed Mar 19 2003 Jeff Johnston - 0.20021129.25 +- Fix for thread-db.c: check_event() - Bugzilla bug 86231. + +* Fri Mar 14 2003 Elena Zannoni - 0.20021129.24 +- Fix some problems with inferior function calls on x86-64. + +* Fri Mar 07 2003 Elena Zannoni - 0.20021129.23 +- testsuite patches. Bugzilla 85215 85028 85335. + +* Thu Mar 06 2003 Elena Zannoni - 0.20021129.22 +- Fix testsuite problems related to having '+' in the directory name. + Bugzilla 85031. + +* Mon Mar 03 2003 Elena Zannoni - 0.20021129.21 +- Fix a few inferior function call problems. + +* Mon Mar 03 2003 Elena Zannoni - 0.20021129.20 +- Split the changelog patches in two. Cleanup messy patch section. + +* Thu Feb 27 2003 Jeff Johnston - 0.20021129.19 +- Perform run-time check for tkill syscall in lin-lwp.c. + +* Mon Feb 24 2003 Elena Zannoni - 0.20021129.18 +- Update copyright year printed in version. + +* Mon Feb 24 2003 Elena Zannoni - 0.20021129.17 +- Refresh build. + +* Mon Feb 24 2003 Elena Zannoni - 0.20021129.16 +- Add some testsuite cleanups, to avoid spurious test failures. + +* Fri Feb 21 2003 Jeff Johnston - 0.20021129.15 +- Add patch to handle thread exiting when LD_ASSUME_KERNEL=2.4.1 which + fixes Bugzilla bug 84217. + +* Fri Feb 21 2003 Elena Zannoni - 0.20021129.14 +- New patch to fix disassembly on s390. Bugzilla bug 84286. +- New patch for attach/ptrace fix. Bugzilla bug 84220. +- Reenable tests for x86. + +* Thu Feb 20 2003 Jeff Johnston - 0.20021129.13 +- Add patch for mixed stabs with dwarf2 - bugzilla bug 84253. + +* Wed Feb 12 2003 Elena Zannoni - 0.20021129.12 +- Disable tests also for x86. + +* Tue Feb 11 2003 Elena Zannoni - 0.20021129.11 +- Add patch for mi threads tests. +- Add patch for dwarf2 debug_ranges section. +- Add patch for detach bug. + +* Mon Feb 10 2003 Elena Zannoni - 0.20021129.10 +- Add patch for testsuite auto answering internal error queries. +- Add new TLS tests. +- Add cleanup patches for thread tests. + +* Mon Feb 03 2003 Elena Zannoni - 0.20021129.9 +- Add new patch for thread support. Apply on all arches. +- Do not apply old patches, but leave them around for now. +- Add new patch for dwarf2 debug info reading. +- Add new patch for dwarf2 cfi engine cleanup. +- Add new patch for uiout problems. +- Add new patch for s390 build. +- Disable tests on all platforms but x86. + +* Mon Jan 27 2003 Elena Zannoni - 0.20021129.8 +- Move all the changelog entries to a single patch. +- Add tests to the args patch. +- Add new patch for until command fix (bugzilla Bug 19890). +- s390 and s390x can be built with -Werror. +- Run make check for s390 and s390x too. +- Include an updated version of the thread nptl patch (still WIP). + +* Wed Jan 15 2003 Phil Knirsch - 0.20021129.7 +- Apply the 2nd misc patch for s390 and s390x, too. + +* Tue Jan 14 2003 Elena Zannoni - 0.20021129.6 +- Add patches for NPTL support, to be applied on i386 only. + (this is still WIP) +- Split old misc patch in two parts. +- Temporarily disable testsuite run on alpha. + +* Sun Jan 12 2003 Elena Zannoni - 0.20021129.5 +- Add patch for --args with zero-length arguments. Fix for bug 79833. + +* Tue Dec 17 2002 Elliot Lee - 0.20021129.4 +- The define directive to rpm is significant even if the line it is + in happens to start with a '#' character. Fixed. + +* Fri Dec 13 2002 Elena Zannoni - 0.20021129.3 +- Merge previous patches for warnings into a single one. +- Add changelogs to patches. +- Add, but don't use, a macro to avoid stripping. + +* Fri Dec 6 2002 Elena Zannoni +- Add patch to allow debugging of executables with debug info stored + in separate files. +- Add patch for Makefile dependencies and disable warnings for + building thread-db.c. +- Re-enable building with -Werror for alpha, ia64, ppc. + +* Mon Dec 2 2002 Elena Zannoni +- Don't pass to gdb an empty build warnings flag, or that will disable warnings + completely. We want to build using gdb's standard warnings instead. + +* Mon Dec 2 2002 Elena Zannoni +- Don't do testing for x86_64. + +* Sun Dec 1 2002 Elena Zannoni +- x86_64 doesn't build with Werror yet. +- Add patch for alpha. +- Alpha doesn't build with -Werror either. +- Add patch for ia64. +- Add patch for ppc. +- Drop ia64 from -Werror list. +- Drop ppc from -Werror list. + +* Sun Dec 1 2002 Elena Zannoni +- Add dejagnu to the build requirements. +- Enable make check. +- Add enable-gdb-build-warnings to the configure flags. + +* Fri Nov 29 2002 Elena Zannoni +- Import new upstream sources. +- Change version and release strings. +- Upgrade patches. +- Build gdb/gdbserver as well. +- Define and use 'cvsdate'. +- Do %%setup specifying the source directory name. +- Don't cd up one dir before removing tcl and friends. +- Change the configure command to allow for the new source tree name. +- Ditto for the copy of NEWS. +- Add some comments. + +* Mon Nov 25 2002 Elena Zannoni 5.2.1-5 +General revamp. +- Add patch for gdb/doc/Makefile.in. Part of fix for bug 77615. +- Add patch for mmalloc/Makefile.in. Part of fix for bug 77615. +- Change string printed in version.in to -rh. +- Move the deletion of dejagnu, expect, tcl to the prep section, + from the build section. +- Add build directory housekeeping to build section. +- Use macros for configure parameters. +- Do the build in a separate directory. +- Prepare for testing, but not enable it yet. +- Correctly copy the NEWS file to the top level directory, for the doc + section to find it. +- Cd to build directory before doing install. +- Use makeinstall macro, w/o options. +- Remove workaround for broken gdb info files. Part of fix for bug 77615. +- Remove share/locale directory, it is in binutils. +- Remove info/dir file. +- Clarify meaning of post-install section. +- Add gdbint info files to post-install, pre-uninstall and files sections. + Part of fix for bugs 77615, 76423. +- Add libmmalloc.a to package. + +* Fri Aug 23 2002 Florian La Roche +- added mainframe patch from developerworks + +* Wed Aug 21 2002 Trond Eivind Glomsrod 5.2.1-3 +- Add changelogs to the previous patch + +* Wed Aug 14 2002 Trond Eivind Glomsrod 5.2.1-2 +- Add some patches from Elena Zannoni + +* Tue Jul 23 2002 Trond Eivind Glomsrod 5.2.1-1 +- 5.2.1 + +* Mon Jul 22 2002 Florian La Roche +- compile on mainframe + +* Mon Jul 8 2002 Trond Eivind Glomsrod 5.2-3 +- Rebuild + +* Tue May 7 2002 Trond Eivind Glomsrod 5.2-2 +- Rebuild + +* Mon Apr 29 2002 Trond Eivind Glomsrod 5.2-1 +- 5.2 + +* Mon Apr 29 2002 Trond Eivind Glomsrod 5.1.92-1 +- 5.1.92. Hopefully identical to 5.2 final + +* Mon Apr 22 2002 Trond Eivind Glomsrod 5.1.91-1 +- 5.1.91. 5.2 expected in a week + +* Thu Mar 28 2002 Trond Eivind Glomsrod 5.1.90CVS-5 +- Update to current + +* Thu Mar 28 2002 Trond Eivind Glomsrod 5.1.90CVS-4 +- Update to current + +* Thu Mar 28 2002 Trond Eivind Glomsrod 5.1.90CVS-3 +- Update to current + +* Wed Mar 20 2002 Trond Eivind Glomsrod 5.1.90CVS-2 +- Update to current + +* Wed Mar 13 2002 Trond Eivind Glomsrod 5.1.90CVS-1 +- Update to current 5.2 branch + +* Thu Jan 24 2002 Trond Eivind Glomsrod 5.1.1-1 +- 5.1.1 +- add URL + +* Wed Jan 09 2002 Tim Powers +- automated rebuild + +* Mon Dec 10 2001 Trond Eivind Glomsrod 5.1-2 +- Fix some thread+fpu problems + +* Mon Nov 26 2001 Trond Eivind Glomsrod 5.1-1 +- 5.1 + +* Mon Nov 19 2001 Trond Eivind Glomsrod 5.0.94-0.71 +- 5.0.94. Almost there.... + +* Mon Nov 12 2001 Trond Eivind Glomsrod 5.0.93-2 +- Add patch from jakub@redhat.com to improve handling of DWARF + +* Mon Nov 12 2001 Trond Eivind Glomsrod 5.0.93-1 +- 5.0.93 +- handle missing info pages in post/pre scripts + +* Wed Oct 31 2001 Trond Eivind Glomsrod 5.0.92-1 +- 5.0.92 + +* Fri Oct 26 2001 Trond Eivind Glomsrod 5.0.91rh-1 +- New snapshot +- Use the 5.0.91 versioning from the snapshot + +* Wed Oct 17 2001 Trond Eivind Glomsrod 5.0rh-17 +- New snapshot + +* Thu Sep 27 2001 Trond Eivind Glomsrod +- New snapshot + +* Wed Sep 12 2001 Trond Eivind Glomsrod 5.0rh-16 +- New snapshot + +* Mon Aug 13 2001 Trond Eivind Glomsrod 5.0rh-15 +- Don't buildrequire compat-glibc (#51690) + +* Thu Aug 9 2001 Trond Eivind Glomsrod +- New snapshot, from the stable branch eventually leading to gdb 5.1 + +* Mon Jul 30 2001 Trond Eivind Glomsrod +- s/Copyright/License/ +- Add texinfo to BuildRequires + +* Mon Jun 25 2001 Trond Eivind Glomsrod +- New snapshot + +* Fri Jun 15 2001 Trond Eivind Glomsrod +- New snapshot +- Add ncurses-devel to buildprereq +- Remove perl from buildprereq, as gdb changed the way + version strings are generated + +* Thu Jun 14 2001 Trond Eivind Glomsrod +- New snapshot + +* Wed May 16 2001 Trond Eivind Glomsrod +- New snapshot - this had thread fixes for curing #39070 +- New way of specifying version + +* Tue May 1 2001 Trond Eivind Glomsrod +- New tarball +- Kevin's patch is now part of gdb + +* Mon Apr 9 2001 Trond Eivind Glomsrod +- Add patch from kevinb@redhat.com to fix floating point + thread + problem (#24310) +- remove old workarounds +- new snapshot + +* Thu Apr 5 2001 Trond Eivind Glomsrod +- New snapshot + +* Sat Mar 17 2001 Bill Nottingham +- on ia64, there are no old headers :) + +* Fri Mar 16 2001 Trond Eivind Glomsrod +- build with old headers, new compiler + +* Wed Mar 16 2001 Trond Eivind Glomsrod +- new snapshot + +* Mon Feb 26 2001 Trond Eivind Glomsrod +- new snapshot which should fix some more IA64 problems (#29151) +- remove IA64 patch, it's now integrated + +* Wed Feb 21 2001 Trond Eivind Glomsrod +- add IA64 and Alpha patches from Kevin Buettner +- use perl instead of patch for fixing the version string + +* Tue Feb 20 2001 Trond Eivind Glomsrod +- don't use kgcc anymore +- mark it as our own version +- new snapshot + +* Mon Jan 22 2001 Bernhard Rosenkraenzer +- Link with ncurses 5.x even though we're using kgcc. + No need to drag in requirements on ncurses4 (Bug #24445) + +* Fri Jan 19 2001 Trond Eivind Glomsrod +- new snapshot + +* Thu Dec 20 2000 Trond Eivind Glomsrod +- new snapshot + +* Mon Dec 04 2000 Trond Eivind Glomsrod +- new snapshot +- new alpha patch - it now compiles everywhere. Finally. + +* Fri Dec 01 2000 Trond Eivind Glomsrod +- new snapshot + +* Mon Nov 20 2000 Trond Eivind Glomsrod +- new CVS snapshot +- disable the patches +- don't use %%configure, as it confuses the autoconf script +- enable SPARC, disable Alpha + + +* Wed Aug 09 2000 Trond Eivind Glomsrod +- added patch from GDB team for C++ symbol handling + +* Mon Jul 25 2000 Trond Eivind Glomsrod +- upgrade to CVS snapshot +- excludearch SPARC, build on IA61 + +* Wed Jul 19 2000 Trond Eivind Glomsrod +- rebuild + +* Thu Jul 13 2000 Prospector +- automatic rebuild + +* Sun Jul 02 2000 Trond Eivind Glomsrod +- rebuild + +* Fri Jun 08 2000 Trond Eivind Glomsrod +- use %%configure, %%makeinstall, %%{_infodir}, %%{_mandir}, + and %%{_tmppath} +- the install scripts for info are broken(they don't care about + you specify in the installstep), work around that. +- don't build for IA64 + +* Mon May 22 2000 Trond Eivind Glomsrod +- upgraded to 5.0 - dump all patches. Reapply later if needed. +- added the NEWS file to the %%doc files +- don't delete files which doesn't get installed (readline, texinfo) +- let build system handle stripping and gzipping +- don't delete libmmalloc +- apply patch from jakub@redhat.com to make it build on SPARC + +* Fri Apr 28 2000 Matt Wilson +- rebuilt against new ncurses + +* Tue Mar 7 2000 Jeff Johnson +- rebuild for sparc baud rates > 38400. + +* Tue Feb 8 2000 Jakub Jelinek +- fix core file handling on i386 with glibc 2.1.3 headers + +* Fri Jan 14 2000 Jakub Jelinek +- fix reading registers from core on sparc. +- hack around build problems on i386 with glibc 2.1.3 headers + +* Thu Oct 7 1999 Jim Kingdon +- List files to install in /usr/info specifically (so we don't pick up +things like info.info from GDB snapshots). + +* Thu Oct 7 1999 Jim Kingdon +- Update GDB to 19991004 snapshot. This eliminates the need for the +sigtramp, sparc, xref, and threads patches. Update sparcmin patch. + +* Mon Aug 23 1999 Jim Kingdon +- Omit readline manpage. + +* Tue Aug 7 1999 Jim Kingdon +- Remove H.J. Lu's patches (they had been commented out). +- Add sigtramp patch (from gdb.cygnus.com) and threads patch (adapted +from code fusion CD-ROM). + +* Wed Apr 14 1999 Jeff Johnson +- merge H.J. Lu's patches into 4.18. + +* Mon Apr 05 1999 Cristian Gafton +- updated the kern22 patch with stuff from davem + +* Thu Apr 1 1999 Jeff Johnson +- sparc with 2.2 kernels no longer uses sunos ptrace (davem) + +* Sun Mar 21 1999 Cristian Gafton +- auto rebuild in the new build environment (release 3) + +* Mon Mar 8 1999 Jeff Johnson +- Sparc fiddles for Red Hat 6.0. diff --git a/gdbtui b/gdbtui new file mode 100644 index 0000000..ceee398 --- /dev/null +++ b/gdbtui @@ -0,0 +1,2 @@ +#! /bin/sh +exec gdb -tui "$@"