- 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
This commit is contained in:
Jan Kratochvil 2009-10-07 19:17:19 +00:00
parent af25c22136
commit 0275674bdf
6 changed files with 234 additions and 65 deletions

View File

@ -1,2 +1,2 @@
libstdc++-v3-python-r151798.tar.xz libstdc++-v3-python-r151798.tar.xz
gdb-6.8.91.20090930.tar.bz2 gdb-7.0.tar.bz2

View File

@ -705,7 +705,7 @@ Index: gdb-6.8.91.20090925/gdb/solib-svr4.c
SO_NAME_MAX_PATH_SIZE - 1, &errcode); SO_NAME_MAX_PATH_SIZE - 1, &errcode);
if (errcode != 0) if (errcode != 0)
@@ -1101,63 +1336,76 @@ svr4_current_sos (void) @@ -1101,63 +1336,76 @@ svr4_current_sos (void)
safe_strerror (errcode)); }
else else
{ {
- struct build_id *build_id; - struct build_id *build_id;

View File

@ -2,7 +2,7 @@ http://sourceware.org/gdb/wiki/ProjectArcher
http://sourceware.org/gdb/wiki/ArcherBranchManagement http://sourceware.org/gdb/wiki/ArcherBranchManagement
GIT snapshot: GIT snapshot:
commit 7cb860f03e2437c97239334ebe240d06f45723e0 commit ce4ead356654b951a49ca78d81ebfff95e758bf5
branch `archer' - the merge of branches: branch `archer' - the merge of branches:
archer-tromey-call-frame-cfa archer-tromey-call-frame-cfa
@ -19,12 +19,12 @@ archer-pmuldoon-next-over-throw
diff --git a/gdb/Makefile.in b/gdb/Makefile.in diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index f5e1dde..73ee55c 100644 index 7d53205..319fac4 100644
--- a/gdb/Makefile.in --- a/gdb/Makefile.in
+++ b/gdb/Makefile.in +++ b/gdb/Makefile.in
@@ -169,6 +169,10 @@ TARGET_SYSTEM_ROOT_DEFINE = @TARGET_SYSTEM_ROOT_DEFINE@ @@ -169,6 +169,10 @@ TARGET_SYSTEM_ROOT_DEFINE = @TARGET_SYSTEM_ROOT_DEFINE@
# Did the user give us a --with-gdb-datadir option? # Did the user give us a --with-gdb-datadir option?
GDB_DATADIR_PATH = @GDB_DATADIR_PATH@ GDB_DATADIR = @GDB_DATADIR@
+# The argument to --with-pythondir. If not given, this is +# The argument to --with-pythondir. If not given, this is
+# GDB_DATADIR_PATH/python. +# GDB_DATADIR_PATH/python.
@ -194,10 +194,10 @@ index f5e1dde..73ee55c 100644
# Dependency tracking. Most of this is conditional on GNU Make being # Dependency tracking. Most of this is conditional on GNU Make being
# found by configure; if GNU Make is not found, we fall back to a # found by configure; if GNU Make is not found, we fall back to a
diff --git a/gdb/NEWS b/gdb/NEWS diff --git a/gdb/NEWS b/gdb/NEWS
index 4fc6dcd..6744b23 100644 index 8d32c34..f7ea21b 100644
--- a/gdb/NEWS --- a/gdb/NEWS
+++ b/gdb/NEWS +++ b/gdb/NEWS
@@ -462,6 +462,13 @@ x86/x86_64 Darwin i[34567]86-*-darwin* @@ -476,6 +476,13 @@ x86/x86_64 Darwin i[34567]86-*-darwin*
x86_64 MinGW x86_64-*-mingw* x86_64 MinGW x86_64-*-mingw*
@ -290,7 +290,7 @@ index 9b5d2c6..61676a9 100644
ada_dump_subexp_body, ada_dump_subexp_body,
ada_evaluate_subexp ada_evaluate_subexp
diff --git a/gdb/amd64-linux-nat.c b/gdb/amd64-linux-nat.c diff --git a/gdb/amd64-linux-nat.c b/gdb/amd64-linux-nat.c
index 7d8461c..a6d35d7 100644 index 7d8461c..fc4b3e0 100644
--- a/gdb/amd64-linux-nat.c --- a/gdb/amd64-linux-nat.c
+++ b/gdb/amd64-linux-nat.c +++ b/gdb/amd64-linux-nat.c
@@ -270,6 +270,8 @@ amd64_linux_dr_get (ptid_t ptid, int regnum) @@ -270,6 +270,8 @@ amd64_linux_dr_get (ptid_t ptid, int regnum)
@ -340,7 +340,7 @@ index 7d8461c..a6d35d7 100644
return amd64_linux_dr_get (inferior_ptid, DR_STATUS); return amd64_linux_dr_get (inferior_ptid, DR_STATUS);
} }
+/* Unset VALUE bits in DR_STATUS in all LWPs of LWP_LIST. */ +/* Unset MASK bits in DR_STATUS in all LWPs of LWP_LIST. */
+ +
+static void +static void
+amd64_linux_dr_unset_status (unsigned long mask) +amd64_linux_dr_unset_status (unsigned long mask)
@ -2900,7 +2900,7 @@ index 0000000..49ac420
+#define TARGET_REGION_SIZE_OK_FOR_HW_WATCHPOINT(SIZE) 1 +#define TARGET_REGION_SIZE_OK_FOR_HW_WATCHPOINT(SIZE) 1
+ +
diff --git a/gdb/configure b/gdb/configure diff --git a/gdb/configure b/gdb/configure
index 99acc2f..a2ea1ae 100755 index 46e7bfe..ea667f0 100755
--- a/gdb/configure --- a/gdb/configure
+++ b/gdb/configure +++ b/gdb/configure
@@ -676,6 +676,8 @@ REPORT_BUGS_TO @@ -676,6 +676,8 @@ REPORT_BUGS_TO
@ -3015,7 +3015,7 @@ index 99acc2f..a2ea1ae 100755
# Flags needed to compile Python code (taken from python-config --cflags). # Flags needed to compile Python code (taken from python-config --cflags).
diff --git a/gdb/configure.ac b/gdb/configure.ac diff --git a/gdb/configure.ac b/gdb/configure.ac
index b31d9b7..a1969bc 100644 index 0e42182..e7f97cf 100644
--- a/gdb/configure.ac --- a/gdb/configure.ac
+++ b/gdb/configure.ac +++ b/gdb/configure.ac
@@ -107,6 +107,51 @@ AS_HELP_STRING([--with-relocated-sources=PATH], [automatically relocate this pat @@ -107,6 +107,51 @@ AS_HELP_STRING([--with-relocated-sources=PATH], [automatically relocate this pat
@ -3832,7 +3832,7 @@ index 7cb016d..bb9e35a 100644
default_symfile_offsets, /* sym_offsets: parse user's offsets to default_symfile_offsets, /* sym_offsets: parse user's offsets to
internal form */ internal form */
diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index f16b6e2..fe328c7 100644 index 1f98fa5..9e24482 100644
--- a/gdb/doc/gdb.texinfo --- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo
@@ -959,8 +959,10 @@ Connect to process ID @var{number}, as with the @code{attach} command. @@ -959,8 +959,10 @@ Connect to process ID @var{number}, as with the @code{attach} command.
@ -3865,7 +3865,7 @@ index f16b6e2..fe328c7 100644
@c resolve the situation of these eventually @c resolve the situation of these eventually
@item -tui @item -tui
@cindex @code{--tui} @cindex @code{--tui}
@@ -18650,7 +18662,7 @@ command: @@ -18660,7 +18672,7 @@ command:
@table @code @table @code
@kindex source @kindex source
@cindex execute commands from a file @cindex execute commands from a file
@ -3874,7 +3874,7 @@ index f16b6e2..fe328c7 100644
Execute the command file @var{filename}. Execute the command file @var{filename}.
@end table @end table
@@ -18667,6 +18679,11 @@ If @code{-v}, for verbose mode, is given then @value{GDBN} displays @@ -18677,6 +18689,11 @@ If @code{-v}, for verbose mode, is given then @value{GDBN} displays
each command as it is executed. The option must be given before each command as it is executed. The option must be given before
@var{filename}, and is interpreted as part of the filename anywhere else. @var{filename}, and is interpreted as part of the filename anywhere else.
@ -3886,7 +3886,7 @@ index f16b6e2..fe328c7 100644
Commands that would ask for confirmation if used interactively proceed Commands that would ask for confirmation if used interactively proceed
without asking when used in a command file. Many @value{GDBN} commands that without asking when used in a command file. Many @value{GDBN} commands that
normally print messages to say what they are doing omit the messages normally print messages to say what they are doing omit the messages
@@ -18928,8 +18945,6 @@ containing @code{end}. For example: @@ -18938,8 +18955,6 @@ containing @code{end}. For example:
@smallexample @smallexample
(@value{GDBP}) python (@value{GDBP}) python
@ -3895,7 +3895,7 @@ index f16b6e2..fe328c7 100644
>print 23 >print 23
>end >end
23 23
@@ -18942,6 +18957,14 @@ in a Python script. This can be controlled using @code{maint set @@ -18952,6 +18967,14 @@ in a Python script. This can be controlled using @code{maint set
python print-stack}: if @code{on}, the default, then Python stack python print-stack}: if @code{on}, the default, then Python stack
printing is enabled; if @code{off}, then Python stack printing is printing is enabled; if @code{off}, then Python stack printing is
disabled. disabled.
@ -3910,7 +3910,7 @@ index f16b6e2..fe328c7 100644
@end table @end table
@node Python API @node Python API
@@ -18949,6 +18972,14 @@ disabled. @@ -18959,6 +18982,14 @@ disabled.
@cindex python api @cindex python api
@cindex programming in python @cindex programming in python
@ -3925,7 +3925,7 @@ index f16b6e2..fe328c7 100644
@cindex python stdout @cindex python stdout
@cindex python pagination @cindex python pagination
At startup, @value{GDBN} overrides Python's @code{sys.stdout} and At startup, @value{GDBN} overrides Python's @code{sys.stdout} and
@@ -18961,13 +18992,17 @@ situation, a Python @code{KeyboardInterrupt} exception is thrown. @@ -18971,13 +19002,17 @@ situation, a Python @code{KeyboardInterrupt} exception is thrown.
* Basic Python:: Basic Python Functions. * Basic Python:: Basic Python Functions.
* Exception Handling:: * Exception Handling::
* Auto-loading:: Automatically loading Python code. * Auto-loading:: Automatically loading Python code.
@ -3944,7 +3944,7 @@ index f16b6e2..fe328c7 100644
* Frames In Python:: Acessing inferior stack frames from Python. * Frames In Python:: Acessing inferior stack frames from Python.
@end menu @end menu
@@ -18994,6 +19029,12 @@ command as having originated from the user invoking it interactively. @@ -19004,6 +19039,12 @@ command as having originated from the user invoking it interactively.
It must be a boolean value. If omitted, it defaults to @code{False}. It must be a boolean value. If omitted, it defaults to @code{False}.
@end defun @end defun
@ -3957,7 +3957,7 @@ index f16b6e2..fe328c7 100644
@findex gdb.parameter @findex gdb.parameter
@defun parameter parameter @defun parameter parameter
Return the value of a @value{GDBN} parameter. @var{parameter} is a Return the value of a @value{GDBN} parameter. @var{parameter} is a
@@ -19010,6 +19051,7 @@ a Python value of the appropriate type, and returned. @@ -19020,6 +19061,7 @@ a Python value of the appropriate type, and returned.
@defun history number @defun history number
Return a value from @value{GDBN}'s value history (@pxref{Value Return a value from @value{GDBN}'s value history (@pxref{Value
History}). @var{number} indicates which history element to return. History}). @var{number} indicates which history element to return.
@ -3965,7 +3965,7 @@ index f16b6e2..fe328c7 100644
If @var{number} is negative, then @value{GDBN} will take its absolute value If @var{number} is negative, then @value{GDBN} will take its absolute value
and count backward from the last element (i.e., the most recent element) to and count backward from the last element (i.e., the most recent element) to
find the value to return. If @var{number} is zero, then @value{GDBN} will find the value to return. If @var{number} is zero, then @value{GDBN} will
@@ -19021,6 +19063,28 @@ If no exception is raised, the return value is always an instance of @@ -19031,6 +19073,28 @@ If no exception is raised, the return value is always an instance of
@code{gdb.Value} (@pxref{Values From Inferior}). @code{gdb.Value} (@pxref{Values From Inferior}).
@end defun @end defun
@ -3994,7 +3994,7 @@ index f16b6e2..fe328c7 100644
@findex gdb.write @findex gdb.write
@defun write string @defun write string
Print a string to @value{GDBN}'s paginated standard output stream. Print a string to @value{GDBN}'s paginated standard output stream.
@@ -19035,6 +19099,11 @@ Flush @value{GDBN}'s paginated standard output stream. Flushing @@ -19045,6 +19109,11 @@ Flush @value{GDBN}'s paginated standard output stream. Flushing
function. function.
@end defun @end defun
@ -4006,7 +4006,7 @@ index f16b6e2..fe328c7 100644
@node Exception Handling @node Exception Handling
@subsubsection Exception Handling @subsubsection Exception Handling
@cindex python exceptions @cindex python exceptions
@@ -19171,6 +19240,13 @@ The type of this @code{gdb.Value}. The value of this attribute is a @@ -19181,6 +19250,13 @@ The type of this @code{gdb.Value}. The value of this attribute is a
The following methods are provided: The following methods are provided:
@table @code @table @code
@ -4020,7 +4020,7 @@ index f16b6e2..fe328c7 100644
@defmethod Value dereference @defmethod Value dereference
For pointer data types, this method returns a new @code{gdb.Value} object For pointer data types, this method returns a new @code{gdb.Value} object
whose contents is the object pointed to by the pointer. For example, if whose contents is the object pointed to by the pointer. For example, if
@@ -19242,6 +19318,9 @@ module: @@ -19252,6 +19328,9 @@ module:
This function looks up a type by name. @var{name} is the name of the This function looks up a type by name. @var{name} is the name of the
type to look up. It must be a string. type to look up. It must be a string.
@ -4030,7 +4030,7 @@ index f16b6e2..fe328c7 100644
Ordinarily, this function will return an instance of @code{gdb.Type}. Ordinarily, this function will return an instance of @code{gdb.Type}.
If the named type cannot be found, it will throw an exception. If the named type cannot be found, it will throw an exception.
@end defun @end defun
@@ -19294,6 +19373,12 @@ This is @code{True} if the field is artificial, usually meaning that @@ -19304,6 +19383,12 @@ This is @code{True} if the field is artificial, usually meaning that
it was provided by the compiler and not the user. This attribute is it was provided by the compiler and not the user. This attribute is
always provided, and is @code{False} if the field is not artificial. always provided, and is @code{False} if the field is not artificial.
@ -4043,7 +4043,7 @@ index f16b6e2..fe328c7 100644
@item bitsize @item bitsize
If the field is packed, or is a bitfield, then this will have a If the field is packed, or is a bitfield, then this will have a
non-zero value, which is the size of the field in bits. Otherwise, non-zero value, which is the size of the field in bits. Otherwise,
@@ -19346,7 +19431,7 @@ If the type does not have a target, this method will throw an @@ -19356,7 +19441,7 @@ If the type does not have a target, this method will throw an
exception. exception.
@end defmethod @end defmethod
@ -4052,7 +4052,7 @@ index f16b6e2..fe328c7 100644
If this @code{gdb.Type} is an instantiation of a template, this will If this @code{gdb.Type} is an instantiation of a template, this will
return a new @code{gdb.Type} which represents the type of the return a new @code{gdb.Type} which represents the type of the
@var{n}th template argument. @var{n}th template argument.
@@ -19354,7 +19439,8 @@ return a new @code{gdb.Type} which represents the type of the @@ -19364,7 +19449,8 @@ return a new @code{gdb.Type} which represents the type of the
If this @code{gdb.Type} is not a template type, this will throw an If this @code{gdb.Type} is not a template type, this will throw an
exception. Ordinarily, only C@t{++} code will have template types. exception. Ordinarily, only C@t{++} code will have template types.
@ -4062,7 +4062,7 @@ index f16b6e2..fe328c7 100644
@end defmethod @end defmethod
@end table @end table
@@ -19708,6 +19794,121 @@ import gdb.libstdcxx.v6 @@ -19718,6 +19804,121 @@ import gdb.libstdcxx.v6
gdb.libstdcxx.v6.register_printers (gdb.current_objfile ()) gdb.libstdcxx.v6.register_printers (gdb.current_objfile ())
@end smallexample @end smallexample
@ -4184,7 +4184,7 @@ index f16b6e2..fe328c7 100644
@node Commands In Python @node Commands In Python
@subsubsection Commands In Python @subsubsection Commands In Python
@@ -19960,6 +20161,135 @@ registration of the command with @value{GDBN}. Depending on how the @@ -19970,6 +20171,135 @@ registration of the command with @value{GDBN}. Depending on how the
Python code is read into @value{GDBN}, you may need to import the Python code is read into @value{GDBN}, you may need to import the
@code{gdb} module explicitly. @code{gdb} module explicitly.
@ -4320,7 +4320,7 @@ index f16b6e2..fe328c7 100644
@node Functions In Python @node Functions In Python
@subsubsection Writing new convenience functions @subsubsection Writing new convenience functions
@@ -20064,6 +20394,82 @@ which is used to format the value. @xref{Pretty Printing}, for more @@ -20074,6 +20404,82 @@ which is used to format the value. @xref{Pretty Printing}, for more
information. information.
@end defivar @end defivar
@ -4403,7 +4403,7 @@ index f16b6e2..fe328c7 100644
@node Frames In Python @node Frames In Python
@subsubsection Acessing inferior stack frames from Python. @subsubsection Acessing inferior stack frames from Python.
@@ -20128,6 +20534,14 @@ function to a string. @@ -20138,6 +20544,14 @@ function to a string.
Returns the frame's resume address. Returns the frame's resume address.
@end defmethod @end defmethod
@ -4418,7 +4418,7 @@ index f16b6e2..fe328c7 100644
@defmethod Frame older @defmethod Frame older
Return the frame that called this frame. Return the frame that called this frame.
@end defmethod @end defmethod
@@ -20136,10 +20550,18 @@ Return the frame that called this frame. @@ -20146,10 +20560,18 @@ Return the frame that called this frame.
Return the frame called by this frame. Return the frame called by this frame.
@end defmethod @end defmethod
@ -10995,7 +10995,7 @@ index 0f9d44e..c910e88 100644
/* We didn't find it; print the raw data. */ /* We didn't find it; print the raw data. */
if (vbit) if (vbit)
diff --git a/gdb/i386-linux-nat.c b/gdb/i386-linux-nat.c diff --git a/gdb/i386-linux-nat.c b/gdb/i386-linux-nat.c
index fe848ff..170e6cd 100644 index fe848ff..905dcc3 100644
--- a/gdb/i386-linux-nat.c --- a/gdb/i386-linux-nat.c
+++ b/gdb/i386-linux-nat.c +++ b/gdb/i386-linux-nat.c
@@ -586,6 +586,8 @@ i386_linux_store_inferior_registers (struct target_ops *ops, @@ -586,6 +586,8 @@ i386_linux_store_inferior_registers (struct target_ops *ops,
@ -11054,7 +11054,7 @@ index fe848ff..170e6cd 100644
return i386_linux_dr_get (inferior_ptid, DR_STATUS); return i386_linux_dr_get (inferior_ptid, DR_STATUS);
} }
+/* Unset VALUE bits in DR_STATUS in all LWPs of LWP_LIST. */ +/* Unset MASK bits in DR_STATUS in all LWPs of LWP_LIST. */
+ +
+static void +static void
+i386_linux_dr_unset_status (unsigned long mask) +i386_linux_dr_unset_status (unsigned long mask)
@ -11100,7 +11100,7 @@ index fe848ff..170e6cd 100644
/* Override the default ptrace resume method. */ /* Override the default ptrace resume method. */
diff --git a/gdb/i386-nat.c b/gdb/i386-nat.c diff --git a/gdb/i386-nat.c b/gdb/i386-nat.c
index ab1bd8a..ee330b8 100644 index 325b4df..631ccd6 100644
--- a/gdb/i386-nat.c --- a/gdb/i386-nat.c
+++ b/gdb/i386-nat.c +++ b/gdb/i386-nat.c
@@ -137,8 +137,11 @@ struct i386_dr_low_type i386_dr_low; @@ -137,8 +137,11 @@ struct i386_dr_low_type i386_dr_low;
@ -11157,7 +11157,7 @@ index ab1bd8a..ee330b8 100644
/* Return non-zero if we can watch a memory region that starts at /* Return non-zero if we can watch a memory region that starts at
address ADDR and whose length is LEN bytes. */ address ADDR and whose length is LEN bytes. */
@@ -575,28 +598,7 @@ static int @@ -578,28 +601,7 @@ static int
i386_stopped_by_watchpoint (void) i386_stopped_by_watchpoint (void)
{ {
CORE_ADDR addr = 0; CORE_ADDR addr = 0;
@ -11187,7 +11187,7 @@ index ab1bd8a..ee330b8 100644
} }
/* Insert a hardware-assisted breakpoint at BP_TGT->placed_address. /* Insert a hardware-assisted breakpoint at BP_TGT->placed_address.
@@ -690,6 +692,7 @@ i386_use_watchpoints (struct target_ops *t) @@ -693,6 +695,7 @@ i386_use_watchpoints (struct target_ops *t)
t->to_stopped_data_address = i386_stopped_data_address; t->to_stopped_data_address = i386_stopped_data_address;
t->to_insert_watchpoint = i386_insert_watchpoint; t->to_insert_watchpoint = i386_insert_watchpoint;
t->to_remove_watchpoint = i386_remove_watchpoint; t->to_remove_watchpoint = i386_remove_watchpoint;
@ -11236,6 +11236,39 @@ index f49b9f6..cd31958 100644
int debug_register_length; int debug_register_length;
}; };
diff --git a/gdb/infcall.c b/gdb/infcall.c
index c9d98cf..277399a 100644
--- a/gdb/infcall.c
+++ b/gdb/infcall.c
@@ -441,6 +441,7 @@ call_function_by_hand (struct value *function, int nargs, struct value **args)
struct gdbarch *gdbarch;
struct breakpoint *terminate_bp = NULL;
struct minimal_symbol *tm;
+ struct cleanup *terminate_bp_cleanup = NULL;
ptid_t call_thread_ptid;
struct gdb_exception e;
const char *name;
@@ -772,7 +773,7 @@ call_function_by_hand (struct value *function, int nargs, struct value **args)
/* Register a clean-up for unwind_on_terminating_exception_breakpoint. */
if (terminate_bp)
- make_cleanup_delete_breakpoint (terminate_bp);
+ terminate_bp_cleanup = make_cleanup_delete_breakpoint (terminate_bp);
/* - SNIP - SNIP - SNIP - SNIP - SNIP - SNIP - SNIP - SNIP - SNIP -
If you're looking to implement asynchronous dummy-frames, then
@@ -987,6 +988,11 @@ When the function is done executing, GDB will silently stop."),
internal_error (__FILE__, __LINE__, _("... should not be here"));
}
+ /* If we get here and the std::terminate() breakpoint has been set,
+ it has to be cleaned manually. */
+ if (terminate_bp)
+ do_cleanups (terminate_bp_cleanup);
+
/* If we get here the called FUNCTION ran to completion,
and the dummy frame has already been popped. */
diff --git a/gdb/infcmd.c b/gdb/infcmd.c diff --git a/gdb/infcmd.c b/gdb/infcmd.c
index 9e98290..fab1892 100644 index 9e98290..fab1892 100644
--- a/gdb/infcmd.c --- a/gdb/infcmd.c
@ -11349,7 +11382,7 @@ index f1b5d17..31add7d 100644
extern void notice_new_inferior (ptid_t, int, int); extern void notice_new_inferior (ptid_t, int, int);
diff --git a/gdb/infrun.c b/gdb/infrun.c diff --git a/gdb/infrun.c b/gdb/infrun.c
index 1a83a25..2ee2164 100644 index ff7c6b9..9d29b15 100644
--- a/gdb/infrun.c --- a/gdb/infrun.c
+++ b/gdb/infrun.c +++ b/gdb/infrun.c
@@ -45,6 +45,8 @@ @@ -45,6 +45,8 @@
@ -11392,7 +11425,26 @@ index 1a83a25..2ee2164 100644
/* This causes the eventpoints and symbol table to be reset. /* This causes the eventpoints and symbol table to be reset.
Must do this now, before trying to determine whether to Must do this now, before trying to determine whether to
stop. */ stop. */
@@ -3468,23 +3480,33 @@ process_event_stop_test: @@ -2845,6 +2857,9 @@ targets should add new threads to the thread list themselves in non-stop mode.")
{
struct regcache *regcache = get_thread_regcache (ecs->ptid);
struct gdbarch *gdbarch = get_regcache_arch (regcache);
+ struct cleanup *old_chain = save_inferior_ptid ();
+
+ inferior_ptid = ecs->ptid;
fprintf_unfiltered (gdb_stdlog, "infrun: stop_pc = %s\n",
paddress (gdbarch, stop_pc));
@@ -2861,6 +2876,8 @@ targets should add new threads to the thread list themselves in non-stop mode.")
fprintf_unfiltered (gdb_stdlog,
"infrun: (no data address available)\n");
}
+
+ do_cleanups (old_chain);
}
if (stepping_past_singlestep_breakpoint)
@@ -3468,23 +3485,33 @@ process_event_stop_test:
ecs->event_thread->stepping_over_breakpoint = 1; ecs->event_thread->stepping_over_breakpoint = 1;
@ -11438,7 +11490,7 @@ index 1a83a25..2ee2164 100644
keep_going (ecs); keep_going (ecs);
return; return;
@@ -3496,6 +3518,53 @@ infrun: BPSTAT_WHAT_SET_LONGJMP_RESUME (!gdbarch_get_longjmp_target)\n"); @@ -3496,6 +3523,53 @@ infrun: BPSTAT_WHAT_SET_LONGJMP_RESUME (!gdbarch_get_longjmp_target)\n");
gdb_assert (ecs->event_thread->step_resume_breakpoint != NULL); gdb_assert (ecs->event_thread->step_resume_breakpoint != NULL);
delete_step_resume_breakpoint (ecs->event_thread); delete_step_resume_breakpoint (ecs->event_thread);
@ -11492,7 +11544,7 @@ index 1a83a25..2ee2164 100644
ecs->event_thread->stop_step = 1; ecs->event_thread->stop_step = 1;
print_stop_reason (END_STEPPING_RANGE, 0); print_stop_reason (END_STEPPING_RANGE, 0);
stop_stepping (ecs); stop_stepping (ecs);
@@ -4500,6 +4569,96 @@ insert_longjmp_resume_breakpoint (struct gdbarch *gdbarch, CORE_ADDR pc) @@ -4500,6 +4574,96 @@ insert_longjmp_resume_breakpoint (struct gdbarch *gdbarch, CORE_ADDR pc)
set_momentary_breakpoint_at_pc (gdbarch, pc, bp_longjmp_resume); set_momentary_breakpoint_at_pc (gdbarch, pc, bp_longjmp_resume);
} }
@ -11589,7 +11641,7 @@ index 1a83a25..2ee2164 100644
static void static void
stop_stepping (struct execution_control_state *ecs) stop_stepping (struct execution_control_state *ecs)
{ {
@@ -4568,6 +4727,8 @@ keep_going (struct execution_control_state *ecs) @@ -4568,6 +4732,8 @@ keep_going (struct execution_control_state *ecs)
} }
if (e.reason < 0) if (e.reason < 0)
{ {
@ -18014,7 +18066,7 @@ index 49c0437..84a476e 100644
+ return 1; + return 1;
+} +}
diff --git a/gdb/python/py-value.c b/gdb/python/py-value.c diff --git a/gdb/python/py-value.c b/gdb/python/py-value.c
index 58bcee3..b2e7b7d 100644 index 0146593..b82fcb6 100644
--- a/gdb/python/py-value.c --- a/gdb/python/py-value.c
+++ b/gdb/python/py-value.c +++ b/gdb/python/py-value.c
@@ -25,6 +25,7 @@ @@ -25,6 +25,7 @@
@ -20070,7 +20122,7 @@ index e5d14fd..37fab72 100644
current_target.to_stopped_data_address = debug_to_stopped_data_address; current_target.to_stopped_data_address = debug_to_stopped_data_address;
current_target.to_watchpoint_addr_within_range = debug_to_watchpoint_addr_within_range; current_target.to_watchpoint_addr_within_range = debug_to_watchpoint_addr_within_range;
diff --git a/gdb/target.h b/gdb/target.h diff --git a/gdb/target.h b/gdb/target.h
index b1cb852..adff946 100644 index b1cb852..3c06eba 100644
--- a/gdb/target.h --- a/gdb/target.h
+++ b/gdb/target.h +++ b/gdb/target.h
@@ -395,6 +395,7 @@ struct target_ops @@ -395,6 +395,7 @@ struct target_ops
@ -20081,7 +20133,16 @@ index b1cb852..adff946 100644
int (*to_stopped_by_watchpoint) (void); int (*to_stopped_by_watchpoint) (void);
int to_have_steppable_watchpoint; int to_have_steppable_watchpoint;
int to_have_continuable_watchpoint; int to_have_continuable_watchpoint;
@@ -1166,6 +1167,15 @@ extern char *normal_pid_to_str (ptid_t ptid); @@ -1124,7 +1125,7 @@ extern char *normal_pid_to_str (ptid_t ptid);
/* Hardware watchpoint interfaces. */
/* Returns non-zero if we were stopped by a hardware watchpoint (memory read or
- write). */
+ write). Only the INFERIOR_PTID task is being queried. */
#define target_stopped_by_watchpoint \
(*current_target.to_stopped_by_watchpoint)
@@ -1166,14 +1167,26 @@ extern char *normal_pid_to_str (ptid_t ptid);
#define target_remove_watchpoint(addr, len, type) \ #define target_remove_watchpoint(addr, len, type) \
(*current_target.to_remove_watchpoint) (addr, len, type) (*current_target.to_remove_watchpoint) (addr, len, type)
@ -20097,7 +20158,20 @@ index b1cb852..adff946 100644
#define target_insert_hw_breakpoint(gdbarch, bp_tgt) \ #define target_insert_hw_breakpoint(gdbarch, bp_tgt) \
(*current_target.to_insert_hw_breakpoint) (gdbarch, bp_tgt) (*current_target.to_insert_hw_breakpoint) (gdbarch, bp_tgt)
@@ -1203,6 +1213,20 @@ extern int target_search_memory (CORE_ADDR start_addr, #define target_remove_hw_breakpoint(gdbarch, bp_tgt) \
(*current_target.to_remove_hw_breakpoint) (gdbarch, bp_tgt)
-#define target_stopped_data_address(target, x) \
- (*target.to_stopped_data_address) (target, x)
+/* Return non-zero if target knows the data address which triggered this
+ target_stopped_by_watchpoint, in such case place it to *ADDR_P. Only the
+ INFERIOR_PTID task is being queried. */
+#define target_stopped_data_address(target, addr_p) \
+ (*target.to_stopped_data_address) (target, addr_p)
#define target_watchpoint_addr_within_range(target, addr, start, length) \
(*target.to_watchpoint_addr_within_range) (target, addr, start, length)
@@ -1203,6 +1216,20 @@ extern int target_search_memory (CORE_ADDR start_addr,
ULONGEST pattern_len, ULONGEST pattern_len,
CORE_ADDR *found_addrp); CORE_ADDR *found_addrp);
@ -20118,7 +20192,7 @@ index b1cb852..adff946 100644
/* Command logging facility. */ /* Command logging facility. */
#define target_log_command(p) \ #define target_log_command(p) \
@@ -1322,6 +1346,14 @@ extern struct target_ops *find_target_beneath (struct target_ops *); @@ -1322,6 +1349,14 @@ extern struct target_ops *find_target_beneath (struct target_ops *);
extern char *target_get_osdata (const char *type); extern char *target_get_osdata (const char *type);
@ -27292,10 +27366,10 @@ index 0000000..14f42d6
+} +}
diff --git a/gdb/testsuite/gdb.threads/watchthreads-reorder.exp b/gdb/testsuite/gdb.threads/watchthreads-reorder.exp diff --git a/gdb/testsuite/gdb.threads/watchthreads-reorder.exp b/gdb/testsuite/gdb.threads/watchthreads-reorder.exp
new file mode 100644 new file mode 100644
index 0000000..8f65364 index 0000000..5ad1a4e
--- /dev/null --- /dev/null
+++ b/gdb/testsuite/gdb.threads/watchthreads-reorder.exp +++ b/gdb/testsuite/gdb.threads/watchthreads-reorder.exp
@@ -0,0 +1,101 @@ @@ -0,0 +1,105 @@
+# This testcase is part of GDB, the GNU debugger. +# This testcase is part of GDB, the GNU debugger.
+ +
+# Copyright 2009 Free Software Foundation, Inc. +# Copyright 2009 Free Software Foundation, Inc.
@ -27393,6 +27467,10 @@ index 0000000..8f65364
+ "Hardware read watchpoint \[0-9\]+: thread\[12\]_rwatch\r\n\r\nValue = 0\r\n0x\[0-9a-f\]+ in thread\[12\]_func .*" \ + "Hardware read watchpoint \[0-9\]+: thread\[12\]_rwatch\r\n\r\nValue = 0\r\n0x\[0-9a-f\]+ in thread\[12\]_func .*" \
+ "continue b" + "continue b"
+ +
+ # While the debug output itself is not checked in this testcase one bug was
+ # found in the DEBUG_INFRUN code path.
+ gdb_test "set debug infrun 1"
+
+ gdb_continue_to_breakpoint "break-at-exit" ".*break-at-exit.*" + gdb_continue_to_breakpoint "break-at-exit" ".*break-at-exit.*"
+ +
+ set pf_prefix $prefix_test + set pf_prefix $prefix_test
@ -27803,7 +27881,7 @@ index a9c875d..12f6f07 100644
} }
diff --git a/gdb/valops.c b/gdb/valops.c diff --git a/gdb/valops.c b/gdb/valops.c
index b64cb21..b7d31cc 100644 index 012ea6a..9b4d2a8 100644
--- a/gdb/valops.c --- a/gdb/valops.c
+++ b/gdb/valops.c +++ b/gdb/valops.c
@@ -38,6 +38,7 @@ @@ -38,6 +38,7 @@
@ -27917,7 +27995,7 @@ index b64cb21..b7d31cc 100644
} }
} }
else if (VALUE_LVAL (val) == lval_register) else if (VALUE_LVAL (val) == lval_register)
@@ -1070,7 +1133,18 @@ address_of_variable (struct symbol *var, struct block *b) @@ -1072,7 +1135,18 @@ address_of_variable (struct symbol *var, struct block *b)
if ((VALUE_LVAL (val) == lval_memory && value_lazy (val)) if ((VALUE_LVAL (val) == lval_memory && value_lazy (val))
|| TYPE_CODE (type) == TYPE_CODE_FUNC) || TYPE_CODE (type) == TYPE_CODE_FUNC)
{ {
@ -27937,7 +28015,7 @@ index b64cb21..b7d31cc 100644
return value_from_pointer (lookup_pointer_type (type), addr); return value_from_pointer (lookup_pointer_type (type), addr);
} }
@@ -1176,6 +1250,7 @@ struct value * @@ -1178,6 +1252,7 @@ struct value *
value_coerce_array (struct value *arg1) value_coerce_array (struct value *arg1)
{ {
struct type *type = check_typedef (value_type (arg1)); struct type *type = check_typedef (value_type (arg1));
@ -27945,7 +28023,7 @@ index b64cb21..b7d31cc 100644
/* If the user tries to do something requiring a pointer with an /* 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 array that has not yet been pushed to the target, then this would
@@ -1185,8 +1260,12 @@ value_coerce_array (struct value *arg1) @@ -1187,8 +1262,12 @@ value_coerce_array (struct value *arg1)
if (VALUE_LVAL (arg1) != lval_memory) if (VALUE_LVAL (arg1) != lval_memory)
error (_("Attempt to take address of value not located in memory.")); error (_("Attempt to take address of value not located in memory."));
@ -27959,7 +28037,7 @@ index b64cb21..b7d31cc 100644
} }
/* Given a value which is a function, return a value which is a pointer /* Given a value which is a function, return a value which is a pointer
@@ -2069,12 +2148,25 @@ find_overload_match (struct type **arg_types, int nargs, @@ -2071,12 +2150,25 @@ find_overload_match (struct type **arg_types, int nargs,
if (method) if (method)
{ {
gdb_assert (obj); gdb_assert (obj);
@ -27990,7 +28068,7 @@ index b64cb21..b7d31cc 100644
fns_ptr = value_find_oload_method_list (&temp, name, fns_ptr = value_find_oload_method_list (&temp, name,
0, &num_fns, 0, &num_fns,
@@ -2094,16 +2186,29 @@ find_overload_match (struct type **arg_types, int nargs, @@ -2096,16 +2188,29 @@ find_overload_match (struct type **arg_types, int nargs,
} }
else else
{ {
@ -28028,7 +28106,7 @@ index b64cb21..b7d31cc 100644
if (func_name == NULL) if (func_name == NULL)
{ {
*symp = fsym; *symp = fsym;
@@ -2534,8 +2639,8 @@ check_field (struct type *type, const char *name) @@ -2536,8 +2641,8 @@ check_field (struct type *type, const char *name)
the comment before value_struct_elt_for_reference. */ the comment before value_struct_elt_for_reference. */
struct value * struct value *
@ -28039,7 +28117,7 @@ index b64cb21..b7d31cc 100644
enum noside noside) enum noside noside)
{ {
switch (TYPE_CODE (curtype)) switch (TYPE_CODE (curtype))
@@ -2543,7 +2648,7 @@ value_aggregate_elt (struct type *curtype, @@ -2545,7 +2650,7 @@ value_aggregate_elt (struct type *curtype,
case TYPE_CODE_STRUCT: case TYPE_CODE_STRUCT:
case TYPE_CODE_UNION: case TYPE_CODE_UNION:
return value_struct_elt_for_reference (curtype, 0, curtype, return value_struct_elt_for_reference (curtype, 0, curtype,
@ -28048,7 +28126,7 @@ index b64cb21..b7d31cc 100644
want_address, noside); want_address, noside);
case TYPE_CODE_NAMESPACE: case TYPE_CODE_NAMESPACE:
return value_namespace_elt (curtype, name, return value_namespace_elt (curtype, name,
@@ -2554,6 +2659,56 @@ value_aggregate_elt (struct type *curtype, @@ -2556,6 +2661,56 @@ value_aggregate_elt (struct type *curtype,
} }
} }
@ -28105,7 +28183,7 @@ index b64cb21..b7d31cc 100644
/* C++: Given an aggregate type CURTYPE, and a member name NAME, /* C++: Given an aggregate type CURTYPE, and a member name NAME,
return the address of this member as a "pointer to member" type. return the address of this member as a "pointer to member" type.
If INTYPE is non-null, then it will be the type of the member we If INTYPE is non-null, then it will be the type of the member we
@@ -2631,23 +2786,46 @@ value_struct_elt_for_reference (struct type *domain, int offset, @@ -2633,23 +2788,46 @@ value_struct_elt_for_reference (struct type *domain, int offset,
} }
if (t_field_name && strcmp (t_field_name, name) == 0) if (t_field_name && strcmp (t_field_name, name) == 0)
{ {
@ -28162,7 +28240,7 @@ index b64cb21..b7d31cc 100644
if (TYPE_FN_FIELD_STATIC_P (f, j)) if (TYPE_FN_FIELD_STATIC_P (f, j))
{ {
@@ -2761,7 +2939,7 @@ value_maybe_namespace_elt (const struct type *curtype, @@ -2763,7 +2941,7 @@ value_maybe_namespace_elt (const struct type *curtype,
struct symbol *sym; struct symbol *sym;
struct value *result; struct value *result;
@ -28171,7 +28249,7 @@ index b64cb21..b7d31cc 100644
get_selected_block (0), get_selected_block (0),
VAR_DOMAIN); VAR_DOMAIN);
@@ -2905,7 +3083,7 @@ value_of_local (const char *name, int complain) @@ -2907,7 +3085,7 @@ value_of_local (const char *name, int complain)
/* Calling lookup_block_symbol is necessary to get the LOC_REGISTER /* Calling lookup_block_symbol is necessary to get the LOC_REGISTER
symbol instead of the LOC_ARG one (if both exist). */ symbol instead of the LOC_ARG one (if both exist). */
@ -28180,7 +28258,7 @@ index b64cb21..b7d31cc 100644
if (sym == NULL) if (sym == NULL)
{ {
if (complain) if (complain)
@@ -2959,8 +3137,6 @@ value_slice (struct value *array, int lowbound, int length) @@ -2961,8 +3139,6 @@ value_slice (struct value *array, int lowbound, int length)
|| lowbound + length - 1 > upperbound) || lowbound + length - 1 > upperbound)
error (_("slice out of range")); error (_("slice out of range"));

View File

@ -0,0 +1,82 @@
http://sourceware.org/ml/gdb-patches/2009-10/msg00142.html
Subject: [patch] Fix GNU/Linux core open: Can't read pathname for load map: Input/output error.
Hi,
GDB currently always prints on loading a core file:
warning: Can't read pathname for load map: Input/output error.
The patch is not nice but it was WONTFIXed on the glibc side in:
http://sourceware.org/ml/libc-alpha/2009-10/msg00001.html
The same message in GDB PR 8882 and glibc PR 387 was for ld-linux.so.2 l_name
but that one is now ignored thanks to IGNORE_FIRST_LINK_MAP_ENTRY.
This fix is intended for Linux system vDSO l_name which is a second entry in
the DSO list.
Regression tested on {x86_86,x86_64-m32,i686}-fedora11-linux-gnu.
Thanks,
Jan
gdb/
2009-10-06 Jan Kratochvil <jan.kratochvil@redhat.com>
Do not print false warning on reading core file with vDSO on GNU/Linux.
* solib-svr4.c (svr4_current_sos): Suppress the warning if
MASTER_SO_LIST is still NULL.
* solib.c (update_solib_list): New variable saved_so_list_head.
Conditionally restart the function.
[ Context backport. ]
--- a/gdb/solib-svr4.c
+++ b/gdb/solib-svr4.c
@@ -1097,8 +1097,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. */
+
+ if (master_so_list () != NULL)
+ warning (_("Can't read pathname for load map: %s."),
+ safe_strerror (errcode));
+ }
else
{
struct build_id *build_id;
--- a/gdb/solib.c
+++ b/gdb/solib.c
@@ -538,6 +538,7 @@ update_solib_list (int from_tty, struct target_ops *target)
struct target_so_ops *ops = solib_ops (target_gdbarch);
struct so_list *inferior = ops->current_sos();
struct so_list *gdb, **gdb_link;
+ struct so_list *saved_so_list_head = so_list_head;
/* We can reach here due to changing solib-search-path or the
sysroot, before having any inferior. */
@@ -668,6 +669,12 @@ update_solib_list (int from_tty, struct target_ops *target)
observer_notify_solib_loaded (i);
}
}
+
+ /* If this was the very first DSO list scan and we possibly read in ld.so
+ recheck all the formerly unreadable DSO names strings. */
+
+ if (saved_so_list_head == NULL && so_list_head != NULL)
+ update_solib_list (from_tty, target);
}

View File

@ -10,11 +10,11 @@ Name: gdb%{?_with_debug:-debug}
# Set version to contents of gdb/version.in. # Set version to contents of gdb/version.in.
# NOTE: the FSF gdb versions are numbered N.M for official releases, like 6.3 # 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). # 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: 6.8.91.20090930 Version: 7.0
# The release always contains a leading reserved number, start it at 1. # 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. # `upstream' is not a part of `name' to stay fully rpm dependencies compatible for the testing.
Release: 2%{?_with_upstream:.upstream}%{?dist} Release: 1%{?_with_upstream:.upstream}%{?dist}
License: GPLv3+ License: GPLv3+
Group: Development/Debuggers Group: Development/Debuggers
@ -367,6 +367,9 @@ Patch376: libstdc++-v3-python-common-prefix.patch
# New test for step-resume breakpoint placed in multiple threads at once. # New test for step-resume breakpoint placed in multiple threads at once.
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.
Patch382: gdb-core-open-vdso-warning.patch
BuildRequires: ncurses-devel texinfo gettext flex bison expat-devel BuildRequires: ncurses-devel texinfo gettext flex bison expat-devel
Requires: readline Requires: readline
BuildRequires: readline-devel BuildRequires: readline-devel
@ -560,6 +563,7 @@ rm -f gdb/jv-exp.c gdb/m2-exp.c gdb/objc-exp.c gdb/p-exp.c
%patch375 -p1 %patch375 -p1
%patch376 -p1 %patch376 -p1
%patch381 -p1 %patch381 -p1
%patch382 -p1
%patch124 -p1 %patch124 -p1
find -name "*.orig" | xargs rm -f find -name "*.orig" | xargs rm -f
@ -847,6 +851,11 @@ fi
%endif %endif
%changelog %changelog
* Wed Oct 7 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 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 <jan.kratochvil@redhat.com> - 6.8.91.20090930-2 * Wed Sep 30 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.91.20090930-2
- Bump release. - Bump release.

View File

@ -1,2 +1,2 @@
1e3a26040dcdd3579d75967085eb92b9 libstdc++-v3-python-r151798.tar.xz 1e3a26040dcdd3579d75967085eb92b9 libstdc++-v3-python-r151798.tar.xz
729517cc8e6ca6e25cf4be343ffc4c3d gdb-6.8.91.20090930.tar.bz2 3386a7b69c010785c920ffc1e9cb890a gdb-7.0.tar.bz2