- 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
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);
if (errcode != 0)
@@ -1101,63 +1336,76 @@ svr4_current_sos (void)
safe_strerror (errcode));
}
else
{
- struct build_id *build_id;

View File

@ -2,7 +2,7 @@ http://sourceware.org/gdb/wiki/ProjectArcher
http://sourceware.org/gdb/wiki/ArcherBranchManagement
GIT snapshot:
commit 7cb860f03e2437c97239334ebe240d06f45723e0
commit ce4ead356654b951a49ca78d81ebfff95e758bf5
branch `archer' - the merge of branches:
archer-tromey-call-frame-cfa
@ -19,12 +19,12 @@ archer-pmuldoon-next-over-throw
diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index f5e1dde..73ee55c 100644
index 7d53205..319fac4 100644
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -169,6 +169,10 @@ TARGET_SYSTEM_ROOT_DEFINE = @TARGET_SYSTEM_ROOT_DEFINE@
# 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
+# GDB_DATADIR_PATH/python.
@ -194,10 +194,10 @@ index f5e1dde..73ee55c 100644
# 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
diff --git a/gdb/NEWS b/gdb/NEWS
index 4fc6dcd..6744b23 100644
index 8d32c34..f7ea21b 100644
--- a/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*
@ -290,7 +290,7 @@ index 9b5d2c6..61676a9 100644
ada_dump_subexp_body,
ada_evaluate_subexp
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
+++ b/gdb/amd64-linux-nat.c
@@ -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);
}
+/* 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
+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
+
diff --git a/gdb/configure b/gdb/configure
index 99acc2f..a2ea1ae 100755
index 46e7bfe..ea667f0 100755
--- a/gdb/configure
+++ b/gdb/configure
@@ -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).
diff --git a/gdb/configure.ac b/gdb/configure.ac
index b31d9b7..a1969bc 100644
index 0e42182..e7f97cf 100644
--- a/gdb/configure.ac
+++ b/gdb/configure.ac
@@ -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
internal form */
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
+++ b/gdb/doc/gdb.texinfo
@@ -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
@item -tui
@cindex @code{--tui}
@@ -18650,7 +18662,7 @@ command:
@@ -18660,7 +18672,7 @@ command:
@table @code
@kindex source
@cindex execute commands from a file
@ -3874,7 +3874,7 @@ index f16b6e2..fe328c7 100644
Execute the command file @var{filename}.
@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
@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
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
@@ -18928,8 +18945,6 @@ containing @code{end}. For example:
@@ -18938,8 +18955,6 @@ containing @code{end}. For example:
@smallexample
(@value{GDBP}) python
@ -3895,7 +3895,7 @@ index f16b6e2..fe328c7 100644
>print 23
>end
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
printing is enabled; if @code{off}, then Python stack printing is
disabled.
@ -3910,7 +3910,7 @@ index f16b6e2..fe328c7 100644
@end table
@node Python API
@@ -18949,6 +18972,14 @@ disabled.
@@ -18959,6 +18982,14 @@ disabled.
@cindex python api
@cindex programming in python
@ -3925,7 +3925,7 @@ index f16b6e2..fe328c7 100644
@cindex python stdout
@cindex python pagination
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.
* Exception Handling::
* Auto-loading:: Automatically loading Python code.
@ -3944,7 +3944,7 @@ index f16b6e2..fe328c7 100644
* Frames In Python:: Acessing inferior stack frames from Python.
@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}.
@end defun
@ -3957,7 +3957,7 @@ index f16b6e2..fe328c7 100644
@findex gdb.parameter
@defun parameter parameter
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
Return a value from @value{GDBN}'s value history (@pxref{Value
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
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
@@ -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}).
@end defun
@ -3994,7 +3994,7 @@ index f16b6e2..fe328c7 100644
@findex gdb.write
@defun write string
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.
@end defun
@ -4006,7 +4006,7 @@ index f16b6e2..fe328c7 100644
@node Exception Handling
@subsubsection Exception Handling
@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:
@table @code
@ -4020,7 +4020,7 @@ index f16b6e2..fe328c7 100644
@defmethod Value dereference
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
@@ -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
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}.
If the named type cannot be found, it will throw an exception.
@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
always provided, and is @code{False} if the field is not artificial.
@ -4043,7 +4043,7 @@ index f16b6e2..fe328c7 100644
@item bitsize
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,
@@ -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.
@end defmethod
@ -4052,7 +4052,7 @@ index f16b6e2..fe328c7 100644
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
@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
exception. Ordinarily, only C@t{++} code will have template types.
@ -4062,7 +4062,7 @@ index f16b6e2..fe328c7 100644
@end defmethod
@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 ())
@end smallexample
@ -4184,7 +4184,7 @@ index f16b6e2..fe328c7 100644
@node 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
@code{gdb} module explicitly.
@ -4320,7 +4320,7 @@ index f16b6e2..fe328c7 100644
@node Functions In Python
@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.
@end defivar
@ -4403,7 +4403,7 @@ index f16b6e2..fe328c7 100644
@node Frames In 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.
@end defmethod
@ -4418,7 +4418,7 @@ index f16b6e2..fe328c7 100644
@defmethod Frame older
Return the frame that called this frame.
@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.
@end defmethod
@ -10995,7 +10995,7 @@ index 0f9d44e..c910e88 100644
/* We didn't find it; print the raw data. */
if (vbit)
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
+++ b/gdb/i386-linux-nat.c
@@ -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);
}
+/* 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
+i386_linux_dr_unset_status (unsigned long mask)
@ -11100,7 +11100,7 @@ index fe848ff..170e6cd 100644
/* Override the default ptrace resume method. */
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
+++ b/gdb/i386-nat.c
@@ -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
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)
{
CORE_ADDR addr = 0;
@ -11187,7 +11187,7 @@ index ab1bd8a..ee330b8 100644
}
/* 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_insert_watchpoint = i386_insert_watchpoint;
t->to_remove_watchpoint = i386_remove_watchpoint;
@ -11236,6 +11236,39 @@ index f49b9f6..cd31958 100644
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
index 9e98290..fab1892 100644
--- a/gdb/infcmd.c
@ -11349,7 +11382,7 @@ index f1b5d17..31add7d 100644
extern void notice_new_inferior (ptid_t, int, int);
diff --git a/gdb/infrun.c b/gdb/infrun.c
index 1a83a25..2ee2164 100644
index ff7c6b9..9d29b15 100644
--- a/gdb/infrun.c
+++ b/gdb/infrun.c
@@ -45,6 +45,8 @@
@ -11392,7 +11425,26 @@ index 1a83a25..2ee2164 100644
/* This causes the eventpoints and symbol table to be reset.
Must do this now, before trying to determine whether to
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;
@ -11438,7 +11490,7 @@ index 1a83a25..2ee2164 100644
keep_going (ecs);
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);
delete_step_resume_breakpoint (ecs->event_thread);
@ -11492,7 +11544,7 @@ index 1a83a25..2ee2164 100644
ecs->event_thread->stop_step = 1;
print_stop_reason (END_STEPPING_RANGE, 0);
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);
}
@ -11589,7 +11641,7 @@ index 1a83a25..2ee2164 100644
static void
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)
{
@ -18014,7 +18066,7 @@ index 49c0437..84a476e 100644
+ return 1;
+}
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
+++ b/gdb/python/py-value.c
@@ -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_watchpoint_addr_within_range = debug_to_watchpoint_addr_within_range;
diff --git a/gdb/target.h b/gdb/target.h
index b1cb852..adff946 100644
index b1cb852..3c06eba 100644
--- a/gdb/target.h
+++ b/gdb/target.h
@@ -395,6 +395,7 @@ struct target_ops
@ -20081,7 +20133,16 @@ index b1cb852..adff946 100644
int (*to_stopped_by_watchpoint) (void);
int to_have_steppable_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) \
(*current_target.to_remove_watchpoint) (addr, len, type)
@ -20097,7 +20158,20 @@ index b1cb852..adff946 100644
#define target_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,
CORE_ADDR *found_addrp);
@ -20118,7 +20192,7 @@ index b1cb852..adff946 100644
/* Command logging facility. */
#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);
@ -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
new file mode 100644
index 0000000..8f65364
index 0000000..5ad1a4e
--- /dev/null
+++ 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.
+
+# 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 .*" \
+ "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.*"
+
+ set pf_prefix $prefix_test
@ -27803,7 +27881,7 @@ index a9c875d..12f6f07 100644
}
diff --git a/gdb/valops.c b/gdb/valops.c
index b64cb21..b7d31cc 100644
index 012ea6a..9b4d2a8 100644
--- a/gdb/valops.c
+++ b/gdb/valops.c
@@ -38,6 +38,7 @@
@ -27917,7 +27995,7 @@ index b64cb21..b7d31cc 100644
}
}
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))
|| TYPE_CODE (type) == TYPE_CODE_FUNC)
{
@ -27937,7 +28015,7 @@ index b64cb21..b7d31cc 100644
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)
{
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
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)
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
@@ -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)
{
gdb_assert (obj);
@ -27990,7 +28068,7 @@ index b64cb21..b7d31cc 100644
fns_ptr = value_find_oload_method_list (&temp, name,
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
{
@ -28028,7 +28106,7 @@ index b64cb21..b7d31cc 100644
if (func_name == NULL)
{
*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. */
struct value *
@ -28039,7 +28117,7 @@ index b64cb21..b7d31cc 100644
enum noside noside)
{
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_UNION:
return value_struct_elt_for_reference (curtype, 0, curtype,
@ -28048,7 +28126,7 @@ index b64cb21..b7d31cc 100644
want_address, noside);
case TYPE_CODE_NAMESPACE:
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,
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
@@ -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)
{
@ -28162,7 +28240,7 @@ index b64cb21..b7d31cc 100644
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 value *result;
@ -28171,7 +28249,7 @@ index b64cb21..b7d31cc 100644
get_selected_block (0),
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
symbol instead of the LOC_ARG one (if both exist). */
@ -28180,7 +28258,7 @@ index b64cb21..b7d31cc 100644
if (sym == NULL)
{
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)
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.
# 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: 6.8.91.20090930
Version: 7.0
# The release always contains a leading reserved number, start it at 1.
# `upstream' is not a part of `name' to stay fully rpm dependencies compatible for the testing.
Release: 2%{?_with_upstream:.upstream}%{?dist}
Release: 1%{?_with_upstream:.upstream}%{?dist}
License: GPLv3+
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.
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
Requires: readline
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
%patch376 -p1
%patch381 -p1
%patch382 -p1
%patch124 -p1
find -name "*.orig" | xargs rm -f
@ -847,6 +851,11 @@ fi
%endif
%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
- Bump release.

View File

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