From 0275674bdfc3a9117a4400a355351a73d13e6cba Mon Sep 17 00:00:00 2001 From: Jan Kratochvil Date: Wed, 7 Oct 2009 19:17:19 +0000 Subject: [PATCH] - 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 --- .cvsignore | 2 +- gdb-6.3-pie-20050110.patch | 2 +- gdb-archer.patch | 198 +++++++++++++++++++++---------- gdb-core-open-vdso-warning.patch | 82 +++++++++++++ gdb.spec | 13 +- sources | 2 +- 6 files changed, 234 insertions(+), 65 deletions(-) create mode 100644 gdb-core-open-vdso-warning.patch diff --git a/.cvsignore b/.cvsignore index ee61c99..fda153d 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1,2 +1,2 @@ libstdc++-v3-python-r151798.tar.xz -gdb-6.8.91.20090930.tar.bz2 +gdb-7.0.tar.bz2 diff --git a/gdb-6.3-pie-20050110.patch b/gdb-6.3-pie-20050110.patch index 18fd7f7..5c12597 100644 --- a/gdb-6.3-pie-20050110.patch +++ b/gdb-6.3-pie-20050110.patch @@ -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; diff --git a/gdb-archer.patch b/gdb-archer.patch index c330212..1fbc435 100644 --- a/gdb-archer.patch +++ b/gdb-archer.patch @@ -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")); diff --git a/gdb-core-open-vdso-warning.patch b/gdb-core-open-vdso-warning.patch new file mode 100644 index 0000000..d05e72b --- /dev/null +++ b/gdb-core-open-vdso-warning.patch @@ -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 + + 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); + } + + + diff --git a/gdb.spec b/gdb.spec index 2be99c2..19e36f0 100644 --- a/gdb.spec +++ b/gdb.spec @@ -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 - 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. diff --git a/sources b/sources index e1a15ed..8f8d6b0 100644 --- a/sources +++ b/sources @@ -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