rpms/gdb/devel gdb-6.8-inlining-by-name.patch, NONE, 1.1 gdb-6.8-inlining.patch, NONE, 1.1 gdb.spec, 1.293, 1.294

Jan Kratochvil (jkratoch) fedora-extras-commits at redhat.com
Thu Jul 3 11:06:15 UTC 2008


Author: jkratoch

Update of /cvs/pkgs/rpms/gdb/devel
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv4361

Modified Files:
	gdb.spec 
Added Files:
	gdb-6.8-inlining-by-name.patch gdb-6.8-inlining.patch 
Log Message:
* Thu Jul  3 2008 Jan Kratochvil <jan.kratochvil at redhat.com> - 6.8-13
- Support transparent debugging of inlined functions for an optimized code.


gdb-6.8-inlining-by-name.patch:

--- NEW FILE gdb-6.8-inlining-by-name.patch ---
Implement `b <funcname>' for <funcname> with concete inlined instances by
a multiple-PC breakpoint.

diff -up -u -X /home/jkratoch/.diffi.list -rup sources-inline-works3-orig/gdb/ada-lang.c sources-inline-works3/gdb/ada-lang.c
--- sources-inline-works3-orig/gdb/ada-lang.c	2008-06-24 20:58:11.000000000 +0200
+++ sources-inline-works3/gdb/ada-lang.c	2008-06-26 15:29:33.000000000 +0200
@@ -4625,7 +4625,7 @@ remove_irrelevant_renamings (struct ada_
   if (current_block == NULL)
     return nsyms;
 
-  current_function = block_linkage_function (current_block);
+  current_function = block_function (current_block);
   if (current_function == NULL)
     return nsyms;
 
@@ -6721,7 +6721,7 @@ ada_find_renaming_symbol (const char *na
 static struct symbol *
 find_old_style_renaming_symbol (const char *name, struct block *block)
 {
-  const struct symbol *function_sym = block_linkage_function (block);
+  const struct symbol *function_sym = block_function (block);
   char *rename;
 
   if (function_sym != NULL)
diff -up -u -X /home/jkratoch/.diffi.list -rup sources-inline-works3-orig/gdb/block.c sources-inline-works3/gdb/block.c
--- sources-inline-works3-orig/gdb/block.c	2008-06-24 20:58:11.000000000 +0200
+++ sources-inline-works3/gdb/block.c	2008-06-26 15:29:09.000000000 +0200
@@ -73,6 +73,19 @@ block_linkage_function (const struct blo
   return BLOCK_FUNCTION (bl);
 }
 
+/* Return the symbol for the function which contains a specified
+   lexical block, described by a struct block BL.  Inlined functions
+   can be returned.  */
+
+struct symbol *
+block_function (const struct block *bl)
+{
+  while (BLOCK_FUNCTION (bl) == NULL && BLOCK_SUPERBLOCK (bl) != NULL)
+    bl = BLOCK_SUPERBLOCK (bl);
+
+  return BLOCK_FUNCTION (bl);
+}
+
 /* Return one if BLOCK represents an inlined function.  */
 
 int
diff -up -u -X /home/jkratoch/.diffi.list -rup sources-inline-works3-orig/gdb/block.h sources-inline-works3/gdb/block.h
--- sources-inline-works3-orig/gdb/block.h	2008-06-24 20:58:11.000000000 +0200
+++ sources-inline-works3/gdb/block.h	2008-06-26 15:29:20.000000000 +0200
@@ -137,6 +137,7 @@ struct blockvector
 enum { GLOBAL_BLOCK = 0, STATIC_BLOCK = 1, FIRST_LOCAL_BLOCK = 2 };
 
 extern struct symbol *block_linkage_function (const struct block *);
+extern struct symbol *block_function (const struct block *bl);
 
 extern int block_inlined_p (const struct block *block);
 
diff -up -u -X /home/jkratoch/.diffi.list -rup sources-inline-works3-orig/gdb/blockframe.c sources-inline-works3/gdb/blockframe.c
--- sources-inline-works3-orig/gdb/blockframe.c	2008-06-24 20:58:25.000000000 +0200
+++ sources-inline-works3/gdb/blockframe.c	2008-06-26 15:34:44.000000000 +0200
@@ -157,7 +157,7 @@ find_pc_sect_function (CORE_ADDR pc, str
   struct block *b = block_for_pc_sect (pc, section);
   if (b == 0)
     return 0;
-  return block_linkage_function (b);
+  return block_function (b);
 }
 
 /* Return the function containing pc value PC.
diff -up -u -X /home/jkratoch/.diffi.list -rup sources-inline-works3-orig/gdb/breakpoint.c sources-inline-works3/gdb/breakpoint.c
--- sources-inline-works3-orig/gdb/breakpoint.c	2008-06-24 20:58:25.000000000 +0200
+++ sources-inline-works3/gdb/breakpoint.c	2008-06-26 15:28:35.000000000 +0200
@@ -5692,7 +5692,7 @@ resolve_sal_pc (struct symtab_and_line *
       bv = blockvector_for_pc_sect (sal->pc, 0, &b, sal->symtab);
       if (bv != NULL)
 	{
-	  sym = block_linkage_function (b);
+	  sym = block_function (b);
 	  if (sym != NULL)
 	    {
 	      fixup_symbol_section (sym, sal->symtab->objfile);
diff -up -u -X /home/jkratoch/.diffi.list -rup sources-inline-works3-orig/gdb/testsuite/gdb.opt/inline-cmds.exp sources-inline-works3/gdb/testsuite/gdb.opt/inline-cmds.exp
--- sources-inline-works3-orig/gdb/testsuite/gdb.opt/inline-cmds.exp	2008-06-24 20:58:25.000000000 +0200
+++ sources-inline-works3/gdb/testsuite/gdb.opt/inline-cmds.exp	2008-06-26 15:49:12.000000000 +0200
@@ -42,8 +42,10 @@ if { [skip_inline_frame_tests] } {
 
 # First, check that the things we expected to be inlined really were,
 # and those that shouldn't be weren't.
-set line1 [gdb_get_line_number "set breakpoint 1 here"]
-gdb_breakpoint $line1
+# We test also inlining by the function name, otherwise we would use:
+#   set line1 [gdb_get_line_number "set breakpoint 1 here"]
+#   gdb_breakpoint $line1
+gdb_breakpoint "bar"
 set line2 [gdb_get_line_number "set breakpoint 2 here"]
 gdb_breakpoint $line2
 

gdb-6.8-inlining.patch:

--- NEW FILE gdb-6.8-inlining.patch ---
http://sourceware.org/ml/gdb-patches/2008-06/msg00239.html
+
http://sourceware.org/ml/gdb-patches/2008-06/msg00379.html

[ Backported for gdb-6.8fedora.  ]

diff -up -u -X /home/jkratoch/.diffi.list -ruNp -x Makefile gdb-6.8-clean/gdb/Makefile.in gdb-6.8/gdb/Makefile.in
--- gdb-6.8-clean/gdb/Makefile.in	2008-06-24 22:58:31.000000000 +0200
+++ gdb-6.8/gdb/Makefile.in	2008-06-17 12:30:08.000000000 +0200
@@ -607,6 +607,7 @@ SFILES = ada-exp.y ada-lang.c ada-typepr
 	inf-loop.c \
 	infcall.c \
 	infcmd.c inflow.c infrun.c \
+	inline-frame.c \
 	interps.c \
 	jv-exp.y jv-lang.c jv-valprint.c jv-typeprint.c \
 	language.c linespec.c \
@@ -1068,6 +1069,7 @@ COMMON_OBS = $(DEPFILES) $(CONFIG_OBS) $
 	user-regs.o \
 	frame.o frame-unwind.o doublest.o \
 	frame-base.o \
+	inline-frame.o \
 	gnu-v2-abi.o gnu-v3-abi.o cp-abi.o cp-support.o \
 	cp-namespace.o \
 	reggroups.o regset.o \
@@ -2100,13 +2102,13 @@ dwarf2loc.o: dwarf2loc.c $(defs_h) $(ui_
 	$(gdbcore_h) $(target_h) $(inferior_h) $(ax_h) $(ax_gdb_h) \
 	$(regcache_h) $(objfiles_h) $(exceptions_h) $(elf_dwarf2_h) \
 	$(dwarf2expr_h) $(dwarf2loc_h) $(gdb_string_h) $(gdb_assert_h) \
-	$(dwarf2block_h)
+	$(dwarf2block_h) $(block_h)
 dwarf2read.o: dwarf2read.c $(defs_h) $(bfd_h) $(symtab_h) $(gdbtypes_h) \
 	$(objfiles_h) $(elf_dwarf2_h) $(buildsym_h) $(demangle_h) \
 	$(expression_h) $(filenames_h) $(macrotab_h) $(language_h) \
 	$(complaints_h) $(bcache_h) $(dwarf2expr_h) $(dwarf2loc_h) \
 	$(cp_support_h) $(hashtab_h) $(command_h) $(gdbcmd_h) \
-	$(gdb_string_h) $(gdb_assert_h) $(dwarf2block_h) $(f_lang_h)
+	$(gdb_string_h) $(gdb_assert_h) $(dwarf2block_h) $(f_lang_h) $(block_h)
 elfread.o: elfread.c $(defs_h) $(bfd_h) $(gdb_string_h) $(elf_bfd_h) \
 	$(elf_mips_h) $(symtab_h) $(symfile_h) $(objfiles_h) $(buildsym_h) \
 	$(stabsread_h) $(gdb_stabs_h) $(complaints_h) $(demangle_h) \
@@ -2155,7 +2157,8 @@ frame.o: frame.c $(defs_h) $(frame_h) $(
 	$(regcache_h) $(gdb_assert_h) $(gdb_string_h) $(user_regs_h) \
 	$(gdb_obstack_h) $(dummy_frame_h) $(sentinel_frame_h) $(gdbcore_h) \
 	$(annotate_h) $(language_h) $(frame_unwind_h) $(frame_base_h) \
-	$(command_h) $(gdbcmd_h) $(observer_h) $(objfiles_h) $(exceptions_h)
+	$(command_h) $(gdbcmd_h) $(observer_h) $(objfiles_h) $(exceptions_h) \
+	$(block_h)
 frame-unwind.o: frame-unwind.c $(defs_h) $(frame_h) $(frame_unwind_h) \
 	$(gdb_assert_h) $(dummy_frame_h) $(gdb_obstack_h)
 frv-linux-tdep.o: frv-linux-tdep.c $(defs_h) $(gdbcore_h) $(target_h) \
@@ -2329,7 +2332,7 @@ infcmd.o: infcmd.c $(defs_h) $(gdb_strin
 	$(objfiles_h) $(completer_h) $(ui_out_h) $(event_top_h) \
 	$(parser_defs_h) $(regcache_h) $(reggroups_h) $(block_h) \
 	$(solib_h) $(gdb_assert_h) $(observer_h) $(target_descriptions_h) \
-	$(user_regs_h)
+	$(user_regs_h) $(gdbthread_h)
 inf-loop.o: inf-loop.c $(defs_h) $(inferior_h) $(target_h) $(event_loop_h) \
 	$(event_top_h) $(inf_loop_h) $(remote_h) $(exceptions_h)
 inflow.o: inflow.c $(defs_h) $(frame_h) $(inferior_h) $(command_h) \
@@ -2347,6 +2350,8 @@ infrun.o: infrun.c $(defs_h) $(gdb_strin
 inf-ttrace.o: inf-ttrace.c $(defs_h) $(command_h) $(gdbcore_h) \
 	$(gdbthread_h) $(inferior_h) $(target_h) \
 	$(gdb_assert_h) $(gdb_string_h) $(inf_child_h) $(inf_ttrace_h)
+inline-frame.o: inline-frame.c $(defs_h) $(frame_unwind_h) $(block_h) \
+	$(symtab_h) $(addrmap_h) $(gdb_assert_h)
 interps.o: interps.c $(defs_h) $(gdbcmd_h) $(ui_out_h) $(event_loop_h) \
 	$(event_top_h) $(interps_h) $(completer_h) $(gdb_string_h) \
 	$(gdb_events_h) $(gdb_assert_h) $(top_h) $(exceptions_h)
diff -up -u -X /home/jkratoch/.diffi.list -ruNp -x Makefile gdb-6.8-clean/gdb/ada-lang.c gdb-6.8/gdb/ada-lang.c
--- gdb-6.8-clean/gdb/ada-lang.c	2008-06-24 22:58:31.000000000 +0200
+++ gdb-6.8/gdb/ada-lang.c	2008-06-16 20:11:43.000000000 +0200
@@ -4624,7 +4624,7 @@ remove_irrelevant_renamings (struct ada_
   if (current_block == NULL)
     return nsyms;
 
-  current_function = block_function (current_block);
+  current_function = block_linkage_function (current_block);
   if (current_function == NULL)
     return nsyms;
 
@@ -6778,7 +6778,7 @@ ada_find_renaming_symbol (const char *na
 static struct symbol *
 find_old_style_renaming_symbol (const char *name, struct block *block)
 {
-  const struct symbol *function_sym = block_function (block);
+  const struct symbol *function_sym = block_linkage_function (block);
   char *rename;
 
   if (function_sym != NULL)
@@ -9946,7 +9946,7 @@ ada_unhandled_exception_name_addr_from_r
      the frame corresponding to RAISE_SYM_NAME.  This frame is
      at least 3 levels up, so we simply skip the first 3 frames
      without checking the name of their associated function.  */
-  fi = get_current_frame ();
+  fi = get_current_user_frame ();
   for (frame_level = 0; frame_level < 3; frame_level += 1)
     if (fi != NULL)
       fi = get_prev_frame (fi); 
@@ -10041,7 +10041,7 @@ print_it_exception (enum exception_catch
       exception_name [sizeof (exception_name) - 1] = '\0';
     }
 
-  ada_find_printable_frame (get_current_frame ());
+  ada_find_printable_frame (get_current_user_frame ());
 
   annotate_catchpoint (b->number);
   switch (ex)
diff -up -u -X /home/jkratoch/.diffi.list -ruNp -x Makefile gdb-6.8-clean/gdb/block.c gdb-6.8/gdb/block.c
--- gdb-6.8-clean/gdb/block.c	2008-01-01 23:53:09.000000000 +0100
+++ gdb-6.8/gdb/block.c	2008-06-16 20:11:43.000000000 +0200
@@ -47,23 +47,40 @@ contained_in (const struct block *a, con
 {
   if (!a || !b)
     return 0;
-  return BLOCK_START (a) >= BLOCK_START (b)
-    && BLOCK_END (a) <= BLOCK_END (b);
-}
 
+  do
+    {
+      if (a == b)
+	return 1;
+      a = BLOCK_SUPERBLOCK (a);
+    }
+  while (a != NULL);
+
+  return 0;
+}
 
 /* Return the symbol for the function which contains a specified
-   lexical block, described by a struct block BL.  */
+   lexical block, described by a struct block BL.  Inlined functions
+   are never returned.  */
 
 struct symbol *
-block_function (const struct block *bl)
+block_linkage_function (const struct block *bl)
 {
-  while (BLOCK_FUNCTION (bl) == 0 && BLOCK_SUPERBLOCK (bl) != 0)
+  while ((BLOCK_FUNCTION (bl) == NULL || block_inlined_p (bl))
+	 && BLOCK_SUPERBLOCK (bl) != NULL)
     bl = BLOCK_SUPERBLOCK (bl);
 
   return BLOCK_FUNCTION (bl);
 }
 
+/* Return one if BLOCK represents an inlined function.  */
+
+int
+block_inlined_p (const struct block *block)
+{
+  return BLOCK_INLINED (block);
+}
+
 /* Return the blockvector immediately containing the innermost lexical
    block containing the specified pc value and section, or 0 if there
    is none.  PBLOCK is a pointer to the block.  If PBLOCK is NULL, we
@@ -304,6 +321,7 @@ allocate_block (struct obstack *obstack)
   BLOCK_SUPERBLOCK (bl) = NULL;
   BLOCK_DICT (bl) = NULL;
   BLOCK_NAMESPACE (bl) = NULL;
+  BLOCK_INLINED (bl) = 0;
 
   return bl;
 }
diff -up -u -X /home/jkratoch/.diffi.list -ruNp -x Makefile gdb-6.8-clean/gdb/block.h gdb-6.8/gdb/block.h
--- gdb-6.8-clean/gdb/block.h	2008-01-01 23:53:09.000000000 +0100
+++ gdb-6.8/gdb/block.h	2008-06-16 20:11:43.000000000 +0200
@@ -65,7 +65,7 @@ struct block
   CORE_ADDR endaddr;
 
   /* The symbol that names this block, if the block is the body of a
-     function; otherwise, zero.  */
+     function (real or inlined); otherwise, zero.  */
 
   struct symbol *function;
 
@@ -96,6 +96,9 @@ struct block
     cplus_specific;
   }
   language_specific;
+
+  /* Set if this block corresponds to an inlined function.  */
+  unsigned char inlined;
 };
 
 #define BLOCK_START(bl)		(bl)->startaddr
@@ -104,6 +107,7 @@ struct block
 #define BLOCK_SUPERBLOCK(bl)	(bl)->superblock
 #define BLOCK_DICT(bl)		(bl)->dict
 #define BLOCK_NAMESPACE(bl)   (bl)->language_specific.cplus_specific.namespace
+#define BLOCK_INLINED(bl)	(bl)->inlined
 
 /* Macro to loop through all symbols in a block BL, in no particular
    order.  ITER helps keep track of the iteration, and should be a
@@ -132,7 +136,9 @@ struct blockvector
 
 enum { GLOBAL_BLOCK = 0, STATIC_BLOCK = 1, FIRST_LOCAL_BLOCK = 2 };
[...3178 lines suppressed...]
+{
+  int val;
+
+  x = 7;
+  y = 8;
+  bar ();
+
+  val = func1 (result);
+  result = val;
+
+  val = func2 (result);
+  result = val;
+
+  return 0;
+}
diff -up -u -X /home/jkratoch/.diffi.list -ruNp -x Makefile gdb-6.8-clean/gdb/testsuite/gdb.opt/inline-locals.exp gdb-6.8/gdb/testsuite/gdb.opt/inline-locals.exp
--- gdb-6.8-clean/gdb/testsuite/gdb.opt/inline-locals.exp	1970-01-01 01:00:00.000000000 +0100
+++ gdb-6.8/gdb/testsuite/gdb.opt/inline-locals.exp	2008-06-23 01:20:22.000000000 +0200
@@ -0,0 +1,95 @@
+# Copyright 2007 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+set testfile "inline-locals"
+set srcfile ${testfile}.c
+set binfile ${objdir}/${subdir}/${testfile}
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" \
+	   executable {debug optimize=-O2}] != "" } {
+    untested inline-locals.exp
+    return -1
+}
+
+gdb_exit
+gdb_start
+gdb_reinitialize_dir $srcdir/$subdir
+gdb_load ${binfile}
+
+runto_main
+
+get_compiler_info $binfile
+get_debug_format
+if { [skip_inline_var_tests] } {
+    untested inline-bt.exp
+    return
+}
+
+set no_frames [skip_inline_frame_tests]
+
+set line1 [gdb_get_line_number "set breakpoint 1 here"]
+gdb_breakpoint $line1
+
+gdb_test "continue" ".*set breakpoint 1 here.*" "continue to bar (1)"
+
+gdb_test "continue" ".*set breakpoint 1 here.*" "continue to bar (2)"
+
+if { ! $no_frames } {
+    gdb_test "backtrace" "#0  bar.*#1  .*func1.*#2  .*main.*" \
+	"backtrace from bar (2)"
+    gdb_test "up" "#1  .*func1 .* at .*" "up from bar (2)"
+    gdb_test "info frame" ".*inlined into frame.*" "func1 inlined (2)"
+    gdb_test "info locals" "array = {.*}" "info locals above bar (2)"
+    gdb_test "info args" "arg1 = .*" "info args above bar (2)"
+} else {
+    gdb_test "up" "#1  .*main .* at .*" "up from bar (2)"
+    gdb_test "info locals" ".*arg1 = 0.*" "info locals above bar (2)"
+}
+
+# Make sure that locals on the stack are found.  This is an array to
+# prevent it from living in a register.
+if [test_compiler_info "gcc-4-3-*"] {
+    setup_kfail *-*-* "gcc/debug.optimization"
+}
+gdb_test "print array\[0\]" "\\\$$decimal = 0" "print local (2)"
+
+if { ! $no_frames } {
+    # Verify that we do not print out variables from the inlined
+    # function's caller.
+    gdb_test "print val" "No symbol \"val\" in current context\\." \
+	"print out of scope local"
+}
+
+# Repeat the tests from a depth of two inlined functions, and with a
+# more interesting value in the local array.
+gdb_test "continue" ".*set breakpoint 1 here.*" "continue to bar (3)"
+if { ! $no_frames } {
+    gdb_test "backtrace" "#0  bar.*#1  .*func1.*#2  .*func2.*#3  .*main.*" \
+	"backtrace from bar (3)"
+    gdb_test "up" "#1  .*func1 .* at .*" "up from bar (3)"
+    gdb_test "info frame" ".*inlined into frame.*" "func1 inlined (3)"
+    gdb_test "info locals" "array = {.*}" "info locals above bar (3)"
+    gdb_test "info args" "arg1 = .*" "info args above bar (3)"
+} else {
+    gdb_test "up" "#1  .*main .* at .*" "up from bar (3)"
+    gdb_test "info locals" ".*arg1 = 1.*" "info locals above bar (3a)"
+    gdb_test "info locals" ".*arg2 = 184.*" "info locals above bar (3b)"
+}
+
+if [test_compiler_info "gcc-4-3-*"] {
+    setup_kfail *-*-* "gcc/debug.optimization"
+}
+gdb_test "print array\[0\]" "\\\$$decimal = 184" "print local (3)"
diff -up -u -X /home/jkratoch/.diffi.list -ruNp -x Makefile gdb-6.8-clean/gdb/testsuite/lib/gdb.exp gdb-6.8/gdb/testsuite/lib/gdb.exp
--- gdb-6.8-clean/gdb/testsuite/lib/gdb.exp	2008-06-24 22:58:31.000000000 +0200
+++ gdb-6.8/gdb/testsuite/lib/gdb.exp	2008-06-16 20:11:43.000000000 +0200
@@ -1357,6 +1357,37 @@ proc skip_hp_tests {} {
     return $skip_hp
 }
 
+# Return whether we should skip tests for showing inlined functions in
+# backtraces.  Requires get_compiler_info and get_debug_format.
+
+proc skip_inline_frame_tests {} {
+    # GDB only recognizes inlining information in DWARF 2 (DWARF 3).
+    if { ! [test_debug_format "DWARF 2"] } {
+	return 1
+    }
+
+    # GCC before 4.1 does not emit DW_AT_call_file / DW_AT_call_line.
+    if { ([test_compiler_info "gcc-2-*"]
+	  || [test_compiler_info "gcc-3-*"]
+	  || [test_compiler_info "gcc-4-0"]) } {
+	return 1
+    }
+
+    return 0
+}
+
+# Return whether we should skip tests for showing variables from
+# inlined functions.  Requires get_compiler_info and get_debug_format.
+
+proc skip_inline_var_tests {} {
+    # GDB only recognizes inlining information in DWARF 2 (DWARF 3).
+    if { ! [test_debug_format "DWARF 2"] } {
+	return 1
+    }
+
+    return 0
+}
+
 set compiler_info		"unknown"
 set gcc_compiled		0
 set hp_cc_compiler		0
diff -up -u -X /home/jkratoch/.diffi.list -ruNp -x Makefile gdb-6.8-clean/gdb/thread.c gdb-6.8/gdb/thread.c
--- gdb-6.8-clean/gdb/thread.c	2008-06-24 22:58:30.000000000 +0200
+++ gdb-6.8/gdb/thread.c	2008-06-16 20:11:43.000000000 +0200
@@ -582,7 +582,7 @@ thread_apply_all_command (char *cmd, int
   do_cleanups (old_chain);
   /* Print stack frame only if we changed thread.  */
   if (thread_has_changed)
-    print_stack_frame (get_current_frame (), 1, SRC_LINE);
+    print_stack_frame (get_selected_frame (NULL), 1, SRC_LINE);
 
 }
 
@@ -667,7 +667,7 @@ thread_apply_command (char *tidlist, int
   do_cleanups (old_chain);
   /* Print stack frame only if we changed thread.  */
   if (thread_has_changed)
-    print_stack_frame (get_current_frame (), 1, SRC_LINE);
+    print_stack_frame (get_selected_frame (NULL), 1, SRC_LINE);
 }
 
 /* Switch to the specified thread.  Will dispatch off to thread_apply_command
diff -up -u -X /home/jkratoch/.diffi.list -ruNp -x Makefile gdb-6.8-clean/gdb/tracepoint.c gdb-6.8/gdb/tracepoint.c
--- gdb-6.8-clean/gdb/tracepoint.c	2008-02-05 17:05:56.000000000 +0100
+++ gdb-6.8/gdb/tracepoint.c	2008-06-16 20:11:43.000000000 +0200
@@ -2165,7 +2165,7 @@ trace_find_line_command (char *args, int
     {
       if (args == 0 || *args == 0)
 	{
-	  sal = find_pc_line (get_frame_pc (get_current_frame ()), 0);
+	  sal = find_pc_line (get_frame_pc (get_selected_frame (NULL)), 0);
 	  sals.nelts = 1;
 	  sals.sals = (struct symtab_and_line *)
 	    xmalloc (sizeof (struct symtab_and_line));
diff -up -u -X /home/jkratoch/.diffi.list -ruNp -x Makefile gdb-6.8-clean/gdb/valops.c gdb-6.8/gdb/valops.c
--- gdb-6.8-clean/gdb/valops.c	2008-06-24 22:58:31.000000000 +0200
+++ gdb-6.8/gdb/valops.c	2008-06-16 20:11:43.000000000 +0200
@@ -845,7 +845,7 @@ value_of_variable (struct symbol *var, s
       frame = block_innermost_frame (b);
       if (!frame)
 	{
-	  if (BLOCK_FUNCTION (b)
+	  if (BLOCK_FUNCTION (b) && !block_inlined_p (b)
 	      && SYMBOL_PRINT_NAME (BLOCK_FUNCTION (b)))
 	    error (_("No frame is currently executing in block %s."),
 		   SYMBOL_PRINT_NAME (BLOCK_FUNCTION (b)));


Index: gdb.spec
===================================================================
RCS file: /cvs/pkgs/rpms/gdb/devel/gdb.spec,v
retrieving revision 1.293
retrieving revision 1.294
diff -u -r1.293 -r1.294
--- gdb.spec	20 Jun 2008 08:37:16 -0000	1.293
+++ gdb.spec	3 Jul 2008 11:05:26 -0000	1.294
@@ -13,7 +13,7 @@
 
 # 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: 12%{?_with_upstream:.upstream}%{?dist}
+Release: 13%{?_with_upstream:.upstream}%{?dist}
 
 License: GPLv3+
 Group: Development/Debuggers
@@ -378,6 +378,10 @@
 Patch325: gdb-6.8-forced-enable-tui.patch
 Patch326: gdb-6.8-tui-singlebinary.patch
 
+# Support transparent debugging of inlined functions for an optimized code.
+Patch327: gdb-6.8-inlining.patch
+Patch328: gdb-6.8-inlining-by-name.patch
+
 BuildRequires: ncurses-devel glibc-devel gcc make gzip texinfo dejagnu gettext
 BuildRequires: flex bison sharutils expat-devel
 Requires: readline
@@ -563,6 +567,8 @@
 %patch324 -p1
 %patch325 -p1
 %patch326 -p1
+%patch327 -p1
+%patch328 -p1
 %patch124 -p1
 
 find -name "*.orig" | xargs rm -f
@@ -822,6 +828,9 @@
 %endif
 
 %changelog
+* Thu Jul  3 2008 Jan Kratochvil <jan.kratochvil at redhat.com> - 6.8-13
+- Support transparent debugging of inlined functions for an optimized code.
+
 * Fri Jun 20 2008 Jan Kratochvil <jan.kratochvil at redhat.com> - 6.8-12
 - Remove the gdb/gdbtui binaries duplicity.
 




More information about the scm-commits mailing list