rpms/gdb/devel gdb-6.8-inlining.patch, 1.11, 1.12 gdb-archer.patch, 1.12, 1.13 gdb.spec, 1.340, 1.341
Jan Kratochvil
jkratoch at fedoraproject.org
Mon Apr 13 20:53:00 UTC 2009
- Previous message (by thread): rpms/xfdesktop/devel xfdesktop-4.6.0-redhat-menus.patch, 1.1, 1.2 xfdesktop.spec, 1.32, 1.33
- Next message (by thread): rpms/latexmk/F-10 .cvsignore, 1.7, 1.8 latexmk-conf.patch, 1.6, 1.7 latexmk.spec, 1.8, 1.9 sources, 1.7, 1.8
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Author: jkratoch
Update of /cvs/pkgs/rpms/gdb/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv27728
Modified Files:
gdb-6.8-inlining.patch gdb-archer.patch gdb.spec
Log Message:
* Mon Apr 13 2009 Jan Kratochvil <jan.kratochvil at redhat.com> - 6.8.50.20090302-17
- Archer update to the snapshot: 7c250ce99c90cf6097e2ec55ea0f205830979cee
- Archer backport: c14d9ab7eef43281b2052c885f89d2db96fb5f8e
- Revert a change regressing: gdb.objc/basicclass.exp
- Archer backport: ebd649b96e61a1fb481801b65d827bca998c6633
+ 1f080e897996d60ab7fde20423e2947512115667
+ 1948198702b51b31d79793fc49434b529b4e245f
+ e107fb9687bb1e7f74170aa3d19c4a8f6edbb10f
+ 1e012c996e121cb35053d239a46bd5dc65b0ce60
- Update the Python API from upstream.
- Archer backport: d3c83ad5ec9f7672b87af9ad29279f459e53da11
- Fix a Python branch crash.
gdb-6.8-inlining.patch:
Index: gdb-6.8-inlining.patch
===================================================================
RCS file: /cvs/pkgs/rpms/gdb/devel/gdb-6.8-inlining.patch,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- gdb-6.8-inlining.patch 27 Mar 2009 08:52:15 -0000 1.11
+++ gdb-6.8-inlining.patch 13 Apr 2009 20:52:58 -0000 1.12
@@ -7,8 +7,8 @@
Index: gdb-6.8.50.20090302/gdb/NEWS
===================================================================
---- gdb-6.8.50.20090302.orig/gdb/NEWS 2009-03-27 00:14:19.000000000 +0100
-+++ gdb-6.8.50.20090302/gdb/NEWS 2009-03-27 00:14:33.000000000 +0100
+--- gdb-6.8.50.20090302.orig/gdb/NEWS 2009-04-13 22:19:47.000000000 +0200
++++ gdb-6.8.50.20090302/gdb/NEWS 2009-04-13 22:22:01.000000000 +0200
@@ -1,6 +1,11 @@
What has changed in GDB?
(Organized release by release)
@@ -23,8 +23,8 @@
* GDB now has support for multi-byte and wide character sets on the
Index: gdb-6.8.50.20090302/gdb/block.c
===================================================================
---- gdb-6.8.50.20090302.orig/gdb/block.c 2009-03-27 00:14:19.000000000 +0100
-+++ gdb-6.8.50.20090302/gdb/block.c 2009-03-27 00:14:33.000000000 +0100
+--- gdb-6.8.50.20090302.orig/gdb/block.c 2009-04-13 22:19:47.000000000 +0200
++++ gdb-6.8.50.20090302/gdb/block.c 2009-04-13 22:22:01.000000000 +0200
@@ -47,8 +47,16 @@ contained_in (const struct block *a, con
{
if (!a || !b)
@@ -70,7 +70,7 @@
Index: gdb-6.8.50.20090302/gdb/block.h
===================================================================
--- gdb-6.8.50.20090302.orig/gdb/block.h 2009-01-03 06:57:50.000000000 +0100
-+++ gdb-6.8.50.20090302/gdb/block.h 2009-03-27 00:14:33.000000000 +0100
++++ gdb-6.8.50.20090302/gdb/block.h 2009-04-13 22:22:01.000000000 +0200
@@ -65,7 +65,7 @@ struct block
CORE_ADDR endaddr;
@@ -92,7 +92,7 @@
Index: gdb-6.8.50.20090302/gdb/blockframe.c
===================================================================
--- gdb-6.8.50.20090302.orig/gdb/blockframe.c 2009-01-03 06:57:50.000000000 +0100
-+++ gdb-6.8.50.20090302/gdb/blockframe.c 2009-03-27 00:14:33.000000000 +0100
++++ gdb-6.8.50.20090302/gdb/blockframe.c 2009-04-13 22:22:01.000000000 +0200
@@ -36,6 +36,7 @@
#include "command.h"
#include "gdbcmd.h"
@@ -163,8 +163,8 @@
frame = get_prev_frame (frame);
Index: gdb-6.8.50.20090302/gdb/breakpoint.c
===================================================================
---- gdb-6.8.50.20090302.orig/gdb/breakpoint.c 2009-03-27 00:14:24.000000000 +0100
-+++ gdb-6.8.50.20090302/gdb/breakpoint.c 2009-03-27 00:14:33.000000000 +0100
+--- gdb-6.8.50.20090302.orig/gdb/breakpoint.c 2009-04-13 22:19:50.000000000 +0200
++++ gdb-6.8.50.20090302/gdb/breakpoint.c 2009-04-13 22:22:01.000000000 +0200
@@ -2641,19 +2641,21 @@ watchpoint_check (void *p)
within_current_scope = 1;
else
@@ -244,7 +244,7 @@
b = set_raw_breakpoint (sal, type);
b->enable_state = bp_enabled;
b->disposition = disp_donttouch;
-@@ -6203,7 +6213,6 @@ watch_command_1 (char *arg, int accessfl
+@@ -6208,7 +6218,6 @@ watch_command_1 (char *arg, int accessfl
struct block *exp_valid_block;
struct value *val, *mark, *val_chain;
struct frame_info *frame;
@@ -252,7 +252,7 @@
char *exp_start = NULL;
char *exp_end = NULL;
char *tok, *id_tok_start, *end_tok;
-@@ -6364,34 +6373,34 @@ watch_command_1 (char *arg, int accessfl
+@@ -6369,34 +6378,34 @@ watch_command_1 (char *arg, int accessfl
bp_type = bp_watchpoint;
frame = block_innermost_frame (exp_valid_block);
@@ -305,7 +305,7 @@
}
/* Now set up the breakpoint. */
-@@ -6572,7 +6581,6 @@ until_break_command (char *arg, int from
+@@ -6577,7 +6586,6 @@ until_break_command (char *arg, int from
struct symtabs_and_lines sals;
struct symtab_and_line sal;
struct frame_info *frame = get_selected_frame (NULL);
@@ -313,7 +313,7 @@
struct breakpoint *breakpoint;
struct breakpoint *breakpoint2 = NULL;
struct cleanup *old_chain;
-@@ -6605,20 +6613,22 @@ until_break_command (char *arg, int from
+@@ -6610,20 +6618,22 @@ until_break_command (char *arg, int from
we don't specify a frame at which we need to stop. */
breakpoint = set_momentary_breakpoint (sal, null_frame_id, bp_until);
else
@@ -344,8 +344,8 @@
}
Index: gdb-6.8.50.20090302/gdb/buildsym.c
===================================================================
---- gdb-6.8.50.20090302.orig/gdb/buildsym.c 2009-03-27 00:14:19.000000000 +0100
-+++ gdb-6.8.50.20090302/gdb/buildsym.c 2009-03-27 00:14:33.000000000 +0100
+--- gdb-6.8.50.20090302.orig/gdb/buildsym.c 2009-04-13 22:19:47.000000000 +0200
++++ gdb-6.8.50.20090302/gdb/buildsym.c 2009-04-13 22:22:01.000000000 +0200
@@ -1155,6 +1155,12 @@ end_symtab (CORE_ADDR end_addr, struct o
struct symbol *sym;
struct dict_iterator iter;
@@ -361,8 +361,8 @@
sym = dict_iterator_next (&iter))
Index: gdb-6.8.50.20090302/gdb/doc/gdb.texinfo
===================================================================
---- gdb-6.8.50.20090302.orig/gdb/doc/gdb.texinfo 2009-03-27 00:14:24.000000000 +0100
-+++ gdb-6.8.50.20090302/gdb/doc/gdb.texinfo 2009-03-27 00:14:33.000000000 +0100
+--- gdb-6.8.50.20090302.orig/gdb/doc/gdb.texinfo 2009-04-13 22:19:50.000000000 +0200
++++ gdb-6.8.50.20090302/gdb/doc/gdb.texinfo 2009-04-13 22:22:01.000000000 +0200
@@ -137,6 +137,7 @@ software in general. We will miss him.
* Stack:: Examining the stack
* Source:: Examining source files
@@ -514,8 +514,8 @@
Index: gdb-6.8.50.20090302/gdb/dwarf2loc.c
===================================================================
---- gdb-6.8.50.20090302.orig/gdb/dwarf2loc.c 2009-03-27 00:14:19.000000000 +0100
-+++ gdb-6.8.50.20090302/gdb/dwarf2loc.c 2009-03-27 00:14:33.000000000 +0100
+--- gdb-6.8.50.20090302.orig/gdb/dwarf2loc.c 2009-04-13 22:19:47.000000000 +0200
++++ gdb-6.8.50.20090302/gdb/dwarf2loc.c 2009-04-13 22:22:01.000000000 +0200
@@ -31,6 +31,7 @@
#include "regcache.h"
#include "objfiles.h"
@@ -538,8 +538,8 @@
some function associated with a frame. If we can't find the frame,
Index: gdb-6.8.50.20090302/gdb/dwarf2read.c
===================================================================
---- gdb-6.8.50.20090302.orig/gdb/dwarf2read.c 2009-03-27 00:14:24.000000000 +0100
-+++ gdb-6.8.50.20090302/gdb/dwarf2read.c 2009-03-27 00:16:07.000000000 +0100
+--- gdb-6.8.50.20090302.orig/gdb/dwarf2read.c 2009-04-13 22:19:50.000000000 +0200
++++ gdb-6.8.50.20090302/gdb/dwarf2read.c 2009-04-13 22:22:41.000000000 +0200
@@ -50,6 +50,7 @@
#include "c-lang.h"
#include "typeprint.h"
@@ -657,7 +657,7 @@
Index: gdb-6.8.50.20090302/gdb/frame-unwind.c
===================================================================
--- gdb-6.8.50.20090302.orig/gdb/frame-unwind.c 2009-01-03 06:57:51.000000000 +0100
-+++ gdb-6.8.50.20090302/gdb/frame-unwind.c 2009-03-27 00:14:33.000000000 +0100
++++ gdb-6.8.50.20090302/gdb/frame-unwind.c 2009-04-13 22:22:01.000000000 +0200
@@ -21,6 +21,7 @@
#include "frame.h"
#include "frame-unwind.h"
@@ -680,8 +680,8 @@
Index: gdb-6.8.50.20090302/gdb/frame.c
===================================================================
---- gdb-6.8.50.20090302.orig/gdb/frame.c 2009-03-27 00:14:21.000000000 +0100
-+++ gdb-6.8.50.20090302/gdb/frame.c 2009-03-27 00:14:33.000000000 +0100
+--- gdb-6.8.50.20090302.orig/gdb/frame.c 2009-04-13 22:19:48.000000000 +0200
++++ gdb-6.8.50.20090302/gdb/frame.c 2009-04-13 22:22:01.000000000 +0200
@@ -41,8 +41,14 @@
#include "objfiles.h"
#include "exceptions.h"
@@ -1041,7 +1041,7 @@
Index: gdb-6.8.50.20090302/gdb/frame.h
===================================================================
--- gdb-6.8.50.20090302.orig/gdb/frame.h 2009-02-05 18:28:20.000000000 +0100
-+++ gdb-6.8.50.20090302/gdb/frame.h 2009-03-27 00:14:33.000000000 +0100
++++ gdb-6.8.50.20090302/gdb/frame.h 2009-04-13 22:22:01.000000000 +0200
@@ -34,6 +34,9 @@
frame_unwind_WHAT...(): Unwind THIS frame's WHAT from the NEXT
frame.
@@ -1105,8 +1105,8 @@
/* Assuming that a frame is `normal', return its base-address, or 0 if
Index: gdb-6.8.50.20090302/gdb/gdbthread.h
===================================================================
---- gdb-6.8.50.20090302.orig/gdb/gdbthread.h 2009-03-27 00:14:19.000000000 +0100
-+++ gdb-6.8.50.20090302/gdb/gdbthread.h 2009-03-27 00:14:33.000000000 +0100
+--- gdb-6.8.50.20090302.orig/gdb/gdbthread.h 2009-04-13 22:19:47.000000000 +0200
++++ gdb-6.8.50.20090302/gdb/gdbthread.h 2009-04-13 22:22:01.000000000 +0200
@@ -83,6 +83,13 @@ struct thread_info
This is how we know when we step into a subroutine call, and how
to set the frame for the breakpoint used to step out. */
@@ -1123,8 +1123,8 @@
Index: gdb-6.8.50.20090302/gdb/infcall.c
===================================================================
---- gdb-6.8.50.20090302.orig/gdb/infcall.c 2009-03-27 00:14:19.000000000 +0100
-+++ gdb-6.8.50.20090302/gdb/infcall.c 2009-03-27 00:14:33.000000000 +0100
+--- gdb-6.8.50.20090302.orig/gdb/infcall.c 2009-04-13 22:19:47.000000000 +0200
++++ gdb-6.8.50.20090302/gdb/infcall.c 2009-04-13 22:22:01.000000000 +0200
@@ -898,15 +898,8 @@ The program being debugged exited while
if (unwind_on_signal_p)
@@ -1145,8 +1145,8 @@
long if it's a C++ name with arguments and stuff. */
Index: gdb-6.8.50.20090302/gdb/infcmd.c
===================================================================
---- gdb-6.8.50.20090302.orig/gdb/infcmd.c 2009-03-27 00:14:19.000000000 +0100
-+++ gdb-6.8.50.20090302/gdb/infcmd.c 2009-03-27 00:14:33.000000000 +0100
+--- gdb-6.8.50.20090302.orig/gdb/infcmd.c 2009-04-13 22:19:47.000000000 +0200
++++ gdb-6.8.50.20090302/gdb/infcmd.c 2009-04-13 22:22:01.000000000 +0200
@@ -52,6 +52,7 @@
#include "cli/cli-decode.h"
#include "gdbthread.h"
@@ -1250,8 +1250,8 @@
function = find_pc_function (get_frame_pc (get_selected_frame (NULL)));
Index: gdb-6.8.50.20090302/gdb/inferior.h
===================================================================
---- gdb-6.8.50.20090302.orig/gdb/inferior.h 2009-03-27 00:14:19.000000000 +0100
-+++ gdb-6.8.50.20090302/gdb/inferior.h 2009-03-27 00:14:33.000000000 +0100
+--- gdb-6.8.50.20090302.orig/gdb/inferior.h 2009-04-13 22:19:47.000000000 +0200
++++ gdb-6.8.50.20090302/gdb/inferior.h 2009-04-13 22:22:01.000000000 +0200
@@ -259,6 +259,9 @@ extern void error_is_running (void);
/* Calls error_is_running if the current thread is running. */
extern void ensure_not_running (void);
@@ -1264,8 +1264,8 @@
extern void tty_command (char *, int);
Index: gdb-6.8.50.20090302/gdb/infrun.c
===================================================================
---- gdb-6.8.50.20090302.orig/gdb/infrun.c 2009-03-27 00:14:23.000000000 +0100
-+++ gdb-6.8.50.20090302/gdb/infrun.c 2009-03-27 00:14:33.000000000 +0100
+--- gdb-6.8.50.20090302.orig/gdb/infrun.c 2009-04-13 22:19:49.000000000 +0200
++++ gdb-6.8.50.20090302/gdb/infrun.c 2009-04-13 22:22:01.000000000 +0200
@@ -48,6 +48,7 @@
#include "gdb_assert.h"
#include "mi/mi-common.h"
@@ -1541,7 +1541,7 @@
Index: gdb-6.8.50.20090302/gdb/inline-frame.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ gdb-6.8.50.20090302/gdb/inline-frame.c 2009-03-27 00:14:33.000000000 +0100
++++ gdb-6.8.50.20090302/gdb/inline-frame.c 2009-04-13 22:22:01.000000000 +0200
@@ -0,0 +1,382 @@
+/* Inline frame unwinder for GDB.
+
@@ -1928,7 +1928,7 @@
Index: gdb-6.8.50.20090302/gdb/inline-frame.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ gdb-6.8.50.20090302/gdb/inline-frame.h 2009-03-27 00:14:33.000000000 +0100
++++ gdb-6.8.50.20090302/gdb/inline-frame.h 2009-04-13 22:22:01.000000000 +0200
@@ -0,0 +1,62 @@
+/* Definitions for inline frame support.
+
@@ -1994,8 +1994,8 @@
+#endif /* !defined (INLINE_FRAME_H) */
Index: gdb-6.8.50.20090302/gdb/minsyms.c
===================================================================
---- gdb-6.8.50.20090302.orig/gdb/minsyms.c 2009-03-27 00:14:22.000000000 +0100
-+++ gdb-6.8.50.20090302/gdb/minsyms.c 2009-03-27 00:14:33.000000000 +0100
+--- gdb-6.8.50.20090302.orig/gdb/minsyms.c 2009-04-13 22:19:49.000000000 +0200
++++ gdb-6.8.50.20090302/gdb/minsyms.c 2009-04-13 22:22:01.000000000 +0200
@@ -795,7 +795,7 @@ prim_record_minimal_symbol_and_info (con
if (msym_bunch_index == BUNCH_SIZE)
@@ -2008,7 +2008,7 @@
Index: gdb-6.8.50.20090302/gdb/s390-tdep.c
===================================================================
--- gdb-6.8.50.20090302.orig/gdb/s390-tdep.c 2009-02-22 02:02:19.000000000 +0100
-+++ gdb-6.8.50.20090302/gdb/s390-tdep.c 2009-03-27 00:14:33.000000000 +0100
++++ gdb-6.8.50.20090302/gdb/s390-tdep.c 2009-04-13 22:22:01.000000000 +0200
@@ -1182,6 +1182,7 @@ s390_prologue_frame_unwind_cache (struct
CORE_ADDR prev_sp;
int frame_pointer;
@@ -2044,8 +2044,8 @@
/* See the comment in s390_in_function_epilogue_p on why this is
Index: gdb-6.8.50.20090302/gdb/stack.c
===================================================================
---- gdb-6.8.50.20090302.orig/gdb/stack.c 2009-03-27 00:14:19.000000000 +0100
-+++ gdb-6.8.50.20090302/gdb/stack.c 2009-03-27 00:14:33.000000000 +0100
+--- gdb-6.8.50.20090302.orig/gdb/stack.c 2009-04-13 22:19:47.000000000 +0200
++++ gdb-6.8.50.20090302/gdb/stack.c 2009-04-13 22:22:01.000000000 +0200
@@ -45,6 +45,7 @@
#include "valprint.h"
#include "gdbthread.h"
@@ -2194,15 +2194,16 @@
RETURN_VALUE to NULL, and QUERY_PREFIX to an informational
Index: gdb-6.8.50.20090302/gdb/symtab.c
===================================================================
---- gdb-6.8.50.20090302.orig/gdb/symtab.c 2009-03-27 00:14:22.000000000 +0100
-+++ gdb-6.8.50.20090302/gdb/symtab.c 2009-03-27 00:15:36.000000000 +0100
-@@ -1426,10 +1426,13 @@ lookup_symbol_aux_local (const char *nam
- return sym;
- }
-
-+ if (BLOCK_FUNCTION (block_iterator) != NULL && block_inlined_p (block_iterator))
-+ break;
+--- gdb-6.8.50.20090302.orig/gdb/symtab.c 2009-04-13 22:19:49.000000000 +0200
++++ gdb-6.8.50.20090302/gdb/symtab.c 2009-04-13 22:22:01.000000000 +0200
+@@ -1417,11 +1417,14 @@ lookup_symbol_aux_local (const char *nam
+ sym = lookup_symbol_aux_block (name, linkage_name, block_iterator, domain);
+ if (sym != NULL)
+ return sym;
+
++ if (BLOCK_FUNCTION (block) != NULL && block_inlined_p (block))
++ break;
+
block_iterator = BLOCK_SUPERBLOCK (block_iterator);
}
@@ -2211,7 +2212,7 @@
return NULL;
}
-@@ -2686,6 +2689,7 @@ find_function_start_sal (struct symbol *
+@@ -2678,6 +2681,7 @@ find_function_start_sal (struct symbol *
CORE_ADDR pc;
struct symtab_and_line sal;
@@ -2219,7 +2220,7 @@
pc = BLOCK_START (block);
fixup_symbol_section (sym, objfile);
-@@ -2724,6 +2728,25 @@ find_function_start_sal (struct symbol *
+@@ -2716,6 +2720,25 @@ find_function_start_sal (struct symbol *
sal.pc = pc;
@@ -2245,7 +2246,7 @@
return sal;
}
-@@ -3746,6 +3769,24 @@ add_macro_name (const char *name, const
+@@ -3738,6 +3761,24 @@ add_macro_name (const char *name, const
datum->text, datum->word);
}
@@ -2270,7 +2271,7 @@
char **
default_make_symbol_completion_list (char *text, char *word)
{
-@@ -3758,9 +3799,9 @@ default_make_symbol_completion_list (cha
+@@ -3750,9 +3791,9 @@ default_make_symbol_completion_list (cha
struct partial_symtab *ps;
struct minimal_symbol *msymbol;
struct objfile *objfile;
@@ -2282,7 +2283,7 @@
struct partial_symbol **psym;
/* The symbol we are completing on. Points in same buffer as text. */
char *sym_text;
-@@ -3870,41 +3911,43 @@ default_make_symbol_completion_list (cha
+@@ -3862,41 +3903,43 @@ default_make_symbol_completion_list (cha
}
/* Search upwards from currently selected frame (so that we can
@@ -2357,7 +2358,7 @@
/* Go through the symtabs and check the externs and statics for
symbols which match. */
-@@ -3923,9 +3966,6 @@ default_make_symbol_completion_list (cha
+@@ -3915,9 +3958,6 @@ default_make_symbol_completion_list (cha
{
QUIT;
b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
@@ -2367,7 +2368,7 @@
ALL_BLOCK_SYMBOLS (b, iter, sym)
{
COMPLETION_LIST_ADD_SYMBOL (sym, sym_text, sym_text_len, text, word);
-@@ -4392,6 +4432,25 @@ skip_prologue_using_sal (CORE_ADDR func_
+@@ -4384,6 +4424,25 @@ skip_prologue_using_sal (CORE_ADDR func_
line mark the prologue -> body transition. */
if (sal.line >= prologue_sal.line)
break;
@@ -2395,9 +2396,9 @@
the function looking for address ranges whose
Index: gdb-6.8.50.20090302/gdb/symtab.h
===================================================================
---- gdb-6.8.50.20090302.orig/gdb/symtab.h 2009-03-27 00:14:19.000000000 +0100
-+++ gdb-6.8.50.20090302/gdb/symtab.h 2009-03-27 00:14:33.000000000 +0100
-@@ -556,9 +556,18 @@ struct symbol
+--- gdb-6.8.50.20090302.orig/gdb/symtab.h 2009-04-13 22:19:47.000000000 +0200
++++ gdb-6.8.50.20090302/gdb/symtab.h 2009-04-13 22:22:01.000000000 +0200
+@@ -562,9 +562,18 @@ struct symbol
unsigned is_argument : 1;
@@ -2419,7 +2420,7 @@
unsigned short line;
-@@ -589,6 +598,7 @@ struct symbol
+@@ -595,6 +604,7 @@ struct symbol
#define SYMBOL_DOMAIN(symbol) (symbol)->domain
#define SYMBOL_CLASS(symbol) (symbol)->aclass
#define SYMBOL_IS_ARGUMENT(symbol) (symbol)->is_argument
@@ -2430,7 +2431,7 @@
Index: gdb-6.8.50.20090302/gdb/testsuite/gdb.base/break.exp
===================================================================
--- gdb-6.8.50.20090302.orig/gdb/testsuite/gdb.base/break.exp 2009-01-19 20:05:01.000000000 +0100
-+++ gdb-6.8.50.20090302/gdb/testsuite/gdb.base/break.exp 2009-03-27 00:14:33.000000000 +0100
++++ gdb-6.8.50.20090302/gdb/testsuite/gdb.base/break.exp 2009-04-13 22:22:01.000000000 +0200
@@ -880,6 +880,13 @@ gdb_expect {
# marker4() is defined at line 46 when compiled with -DPROTOTYPES
pass "run until breakpoint set at small function, optimized file (line bp_location14)"
@@ -2448,7 +2449,7 @@
Index: gdb-6.8.50.20090302/gdb/testsuite/gdb.cp/annota2.exp
===================================================================
--- gdb-6.8.50.20090302.orig/gdb/testsuite/gdb.cp/annota2.exp 2009-01-03 06:58:04.000000000 +0100
-+++ gdb-6.8.50.20090302/gdb/testsuite/gdb.cp/annota2.exp 2009-03-27 00:14:33.000000000 +0100
++++ gdb-6.8.50.20090302/gdb/testsuite/gdb.cp/annota2.exp 2009-04-13 22:22:01.000000000 +0200
@@ -119,10 +119,11 @@ gdb_expect {
# continue until exit
# this will test:
@@ -2465,7 +2466,7 @@
Index: gdb-6.8.50.20090302/gdb/testsuite/gdb.opt/inline-bt.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ gdb-6.8.50.20090302/gdb/testsuite/gdb.opt/inline-bt.c 2009-03-27 00:14:33.000000000 +0100
++++ gdb-6.8.50.20090302/gdb/testsuite/gdb.opt/inline-bt.c 2009-04-13 22:22:01.000000000 +0200
@@ -0,0 +1,47 @@
+/* Copyright (C) 2008 Free Software Foundation, Inc.
+
@@ -2517,7 +2518,7 @@
Index: gdb-6.8.50.20090302/gdb/testsuite/gdb.opt/inline-bt.exp
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ gdb-6.8.50.20090302/gdb/testsuite/gdb.opt/inline-bt.exp 2009-03-27 00:14:33.000000000 +0100
++++ gdb-6.8.50.20090302/gdb/testsuite/gdb.opt/inline-bt.exp 2009-04-13 22:22:01.000000000 +0200
@@ -0,0 +1,63 @@
+# Copyright 2008 Free Software Foundation, Inc.
+
@@ -2585,7 +2586,7 @@
Index: gdb-6.8.50.20090302/gdb/testsuite/gdb.opt/inline-cmds.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ gdb-6.8.50.20090302/gdb/testsuite/gdb.opt/inline-cmds.c 2009-03-27 00:14:33.000000000 +0100
++++ gdb-6.8.50.20090302/gdb/testsuite/gdb.opt/inline-cmds.c 2009-04-13 22:22:01.000000000 +0200
@@ -0,0 +1,85 @@
+/* Copyright (C) 2008 Free Software Foundation, Inc.
+
@@ -2675,7 +2676,7 @@
Index: gdb-6.8.50.20090302/gdb/testsuite/gdb.opt/inline-cmds.exp
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ gdb-6.8.50.20090302/gdb/testsuite/gdb.opt/inline-cmds.exp 2009-03-27 00:14:33.000000000 +0100
++++ gdb-6.8.50.20090302/gdb/testsuite/gdb.opt/inline-cmds.exp 2009-04-13 22:22:01.000000000 +0200
@@ -0,0 +1,279 @@
+# Copyright 2008 Free Software Foundation, Inc.
+
@@ -2959,7 +2960,7 @@
Index: gdb-6.8.50.20090302/gdb/testsuite/gdb.opt/inline-locals.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ gdb-6.8.50.20090302/gdb/testsuite/gdb.opt/inline-locals.c 2009-03-27 00:14:33.000000000 +0100
++++ gdb-6.8.50.20090302/gdb/testsuite/gdb.opt/inline-locals.c 2009-04-13 22:22:01.000000000 +0200
@@ -0,0 +1,52 @@
+/* Copyright (C) 2008 Free Software Foundation, Inc.
+
@@ -3016,7 +3017,7 @@
Index: gdb-6.8.50.20090302/gdb/testsuite/gdb.opt/inline-locals.exp
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ gdb-6.8.50.20090302/gdb/testsuite/gdb.opt/inline-locals.exp 2009-03-27 00:14:33.000000000 +0100
++++ gdb-6.8.50.20090302/gdb/testsuite/gdb.opt/inline-locals.exp 2009-04-13 22:22:01.000000000 +0200
@@ -0,0 +1,118 @@
+# Copyright 2008 Free Software Foundation, Inc.
+
@@ -3139,7 +3140,7 @@
Index: gdb-6.8.50.20090302/gdb/testsuite/gdb.opt/inline-markers.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ gdb-6.8.50.20090302/gdb/testsuite/gdb.opt/inline-markers.c 2009-03-27 00:14:33.000000000 +0100
++++ gdb-6.8.50.20090302/gdb/testsuite/gdb.opt/inline-markers.c 2009-04-13 22:22:01.000000000 +0200
@@ -0,0 +1,36 @@
+/* Copyright (C) 2008 Free Software Foundation, Inc.
+
@@ -3179,8 +3180,8 @@
+}
Index: gdb-6.8.50.20090302/gdb/testsuite/lib/gdb.exp
===================================================================
---- gdb-6.8.50.20090302.orig/gdb/testsuite/lib/gdb.exp 2009-03-27 00:14:23.000000000 +0100
-+++ gdb-6.8.50.20090302/gdb/testsuite/lib/gdb.exp 2009-03-27 00:14:33.000000000 +0100
+--- gdb-6.8.50.20090302.orig/gdb/testsuite/lib/gdb.exp 2009-04-13 22:19:50.000000000 +0200
++++ gdb-6.8.50.20090302/gdb/testsuite/lib/gdb.exp 2009-04-13 22:22:01.000000000 +0200
@@ -1474,6 +1474,37 @@ proc skip_hp_tests {} {
return $skip_hp
}
@@ -3221,8 +3222,8 @@
set hp_cc_compiler 0
Index: gdb-6.8.50.20090302/gdb/valops.c
===================================================================
---- gdb-6.8.50.20090302.orig/gdb/valops.c 2009-03-27 00:14:20.000000000 +0100
-+++ gdb-6.8.50.20090302/gdb/valops.c 2009-03-27 00:14:33.000000000 +0100
+--- gdb-6.8.50.20090302.orig/gdb/valops.c 2009-04-13 22:19:48.000000000 +0200
++++ gdb-6.8.50.20090302/gdb/valops.c 2009-04-13 22:22:01.000000000 +0200
@@ -1072,7 +1072,7 @@ value_of_variable (struct symbol *var, s
frame = block_innermost_frame (b);
if (!frame)
@@ -3234,8 +3235,8 @@
SYMBOL_PRINT_NAME (BLOCK_FUNCTION (b)));
Index: gdb-6.8.50.20090302/gdb/Makefile.in
===================================================================
---- gdb-6.8.50.20090302.orig/gdb/Makefile.in 2009-03-27 00:14:23.000000000 +0100
-+++ gdb-6.8.50.20090302/gdb/Makefile.in 2009-03-27 00:14:33.000000000 +0100
+--- gdb-6.8.50.20090302.orig/gdb/Makefile.in 2009-04-13 22:19:49.000000000 +0200
++++ gdb-6.8.50.20090302/gdb/Makefile.in 2009-04-13 22:22:01.000000000 +0200
@@ -667,6 +667,7 @@ SFILES = ada-exp.y ada-lang.c ada-typepr
inf-loop.c \
infcall.c \
@@ -3255,7 +3256,7 @@
Index: gdb-6.8.50.20090302/gdb/testsuite/gdb.opt/Makefile.in
===================================================================
--- gdb-6.8.50.20090302.orig/gdb/testsuite/gdb.opt/Makefile.in 2008-04-18 01:06:54.000000000 +0200
-+++ gdb-6.8.50.20090302/gdb/testsuite/gdb.opt/Makefile.in 2009-03-27 00:14:33.000000000 +0100
++++ gdb-6.8.50.20090302/gdb/testsuite/gdb.opt/Makefile.in 2009-04-13 22:22:01.000000000 +0200
@@ -1,7 +1,7 @@
VPATH = @srcdir@
srcdir = @srcdir@
gdb-archer.patch:
Index: gdb-archer.patch
===================================================================
RCS file: /cvs/pkgs/rpms/gdb/devel/gdb-archer.patch,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- gdb-archer.patch 5 Apr 2009 21:02:55 -0000 1.12
+++ gdb-archer.patch 13 Apr 2009 20:52:59 -0000 1.13
@@ -2,7 +2,7 @@
http://sourceware.org/gdb/wiki/ArcherBranchManagement
GIT snapshot:
-commit 7c7c77576669d17ad5072daa47ea3a4fd954483d
+commit 7c250ce99c90cf6097e2ec55ea0f205830979cee
branch `archer' - the merge of branches:
archer-jankratochvil-merge-expr
@@ -12560,7 +12560,7 @@
extern struct cleanup *make_final_cleanup (make_cleanup_ftype *, void *);
diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
-index 10e7388..e959189 100644
+index 10e7388..c4ab391 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -955,8 +955,10 @@ Connect to process ID @var{number}, as with the @code{attach} command.
@@ -12997,7 +12997,7 @@
-* Values From Inferior::
+* Auto-loading:: Automatically loading Python code.
+* Values From Inferior:: Python representation of values.
-+* Types From Inferior:: Python representation of types.
++* Types In Python:: Python representation of types.
+* Pretty Printing:: Pretty-printing values.
+* Threads In Python:: Accessing inferior threads from Python.
* Commands In Python:: Implementing new commands in Python.
@@ -13185,21 +13185,36 @@
@node Values From Inferior
@subsubsection Values From Inferior
@cindex values from inferior, with Python
-@@ -18258,8 +18605,21 @@ bar = some_val['foo']
+@@ -18258,8 +18605,36 @@ bar = some_val['foo']
Again, @code{bar} will also be a @code{gdb.Value} object.
-For pointer data types, @code{gdb.Value} provides a method for
-dereferencing the pointer to obtain the object it points to.
-+The following methods are provided:
++The following attributes are provided:
+
+ at table @code
-+ at defmethod Value address
-+If the @code{gdb.Value} object is addressable, this will return a new
-+ at code{gdb.Value} object representing the address. Otherwise, this
-+will throw an exception.
-+ at end defmethod
++ at defivar Value address
++If this object is addressable, this read-only attribute holds a
++ at code{gdb.Value} object representing the address. Otherwise,
++this attribute holds @code{None}.
++ at end defivar
++
++ at cindex optimized out value in Python
++ at defivar Value is_optimized_out
++This read-only boolean attribute is true if the compiler optimized out
++this value, thus it is not available for fetching from the inferior.
++ at end defivar
++
++ at defivar Value type
++The type of this @code{gdb.Value}. The result is a @code{gdb.Type}
++object.
++ at end defivar
++ at end table
+
++The following methods are provided:
++
++ at table @code
+ at defmethod Value cast type
+Cast the @code{gdb.Value} to the type represented by @var{type}, and
+return a new @code{gdb.Value}. @var{type} must be a @code{gdb.Type}
@@ -13209,7 +13224,7 @@
@defmethod Value dereference
This method returns a new @code{gdb.Value} object whose contents is
-@@ -18282,7 +18642,7 @@ The result @code{bar} will be a @code{gdb.Value} object holding the
+@@ -18282,7 +18657,7 @@ The result @code{bar} will be a @code{gdb.Value} object holding the
value pointed to by @code{foo}.
@end defmethod
@@ -13218,54 +13233,75 @@
If this @code{gdb.Value} represents a string, then this method
converts the contents to a Python string. Otherwise, this method will
throw an exception.
-@@ -18309,6 +18669,469 @@ The optional @var{errors} argument is the same as the corresponding
+@@ -18308,6 +18683,465 @@ will be used, if the current language is able to supply one.
+ The optional @var{errors} argument is the same as the corresponding
argument to Python's @code{string.decode} method.
@end defmethod
-
-+ at defmethod Value type
-+Return the type of this @code{gdb.Value}. The result is a
-+ at code{gdb.Type} object.
-+ at end defmethod
+ at end table
+
-+ at node Types From Inferior
-+ at subsubsection Types From Inferior
++ at node Types In Python
++ at subsubsection Types In Python
++ at cindex types in Python
++ at cindex Python, working with types
+
-+ at cindex gdb.Type
++ at tindex gdb.Type
+ at value{GDBN} represents types from the inferior using the class
+ at code{gdb.Type}.
+
-+The following methods are provided:
-+
-+ at table @code
-+ at defmethod Type Type [name [block]]
-+Construct a new instance of @code{gdb.Type}.
++The following type-related functions are available in the @code{gdb}
++module:
+
-+If @var{name} is given, it specifies the name of a type to look up in
-+the inferior.
++ at findex gdb.lookup_type
++ at defun lookup_type name [block]
++This function looks up a type by name. @var{name} is the name of the
++type to look up. It must be a string.
+
+If @var{block} is given, then @var{name} is looked up in that scope.
+Otherwise, it is searched for globally.
-+ at end defmethod
+
-+ at defmethod Type code
-+Return the type code for this type. The type code will be one of the
++Ordinarily, this function will return an instance of @code{gdb.Type}.
++If the named type cannot be found, it will throw an exception.
++ at end defun
++
++An instance of @code{Type} has the following attributes:
++
++ at table @code
++ at defivar Type code
++The type code for this type. The type code will be one of the
+ at code{TYPE_CODE_} constants defined below.
-+ at end defmethod
++ at end defivar
+
++ at defivar Type sizeof
++The size of this type, in target @code{char} units. Usually, a
++target's @code{char} type will be an 8-bit byte. However, on some
++unusual platforms, this type may have a different size.
++ at end defivar
++
++ at defivar Type tag
++The tag name for this type. The tag name is the name after
++ at code{struct}, @code{union}, or @code{enum} in C and C at t{++}; not all
++languages have this concept. If this type has no tag name, then
++ at code{None} is returned.
++ at end defivar
++ at end table
++
++The following methods are provided:
++
++ at table @code
+ at defmethod Type fields
+For structure and union types, this method returns the fields. Range
+types have two fields, the minimum and maximum values. Enum types
+have one field per enum constant. Function and method types have one
-+field per parameter. The base types of C++ classes are also
++field per parameter. The base types of C at t{++} classes are also
+represented as fields. If the type has no fields, or does not fit
+into one of these categories, an empty sequence will be returned.
+
+Each field is an object, with some pre-defined attributes:
+ at table @code
+ at item bitpos
-+This attribute is not available for @code{static} fields. For
-+non- at code{static} fields, the value is the bit position of the field.
++This attribute is not available for @code{static} fields (as in
++C at t{++} or Java). For non- at code{static} fields, the value is the bit
++position of the field.
+
+ at item name
+The name of the field, or @code{None} for anonymous fields.
@@ -13307,43 +13343,33 @@
+type.
+ at end defmethod
+
-+ at defmethod Type sizeof
-+Return the size of this type, in target @code{char} units. Usually, a
-+target's @code{char} type will be an 8-bit byte. However, on some
-+unusual platforms, this type may have a different size.
-+ at end defmethod
-+
+ at defmethod Type strip_typedefs
+Return a new @code{gdb.Type} that represents the real type,
+after removing all layers of typedefs.
+ at end defmethod
+
-+ at defmethod Type tag
-+Return the tag name for this type. The tag name is the name after
-+ at code{struct}, @code{union}, or @code{enum} in C; not all languages
-+have this concept. If this type has no tag name, then @code{None} is
-+returned.
-+ at end defmethod
-+
+ at defmethod Type target
+Return a new @code{gdb.Type} object which represents the target type
+of this type.
+
+For a pointer type, the target type is the type of the pointed-to
-+object. For an array type, the target type is the type of the
-+elements of the array. For a function type, the target type is the
-+type of the return value. For a complex type, the target type is the
-+type of the elements. For a typedef, the target type is the aliased
-+type.
++object. For an array type (meaning C-like arrays), the target type is
++the type of the elements of the array. For a function or method type,
++the target type is the type of the return value. For a complex type,
++the target type is the type of the elements. For a typedef, the
++target type is the aliased type.
++
++If the type does not have a target, this method will throw an
++exception.
+ at end defmethod
+
+ at defmethod Type template_argument n [block]
-+If this @code{gdb.Type} is a template type, this will return a new
-+ at code{gdb.Type} which represents the type of the @var{n}th template
-+argument.
++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
++ at var{n}th template argument.
+
+If this @code{gdb.Type} is not a template type, this will throw an
-+exception.
++exception. Ordinarily, only C at t{++} code will have template types.
+
+If @var{block} is given, then @var{name} is looked up in that scope.
+Otherwise, it is searched for globally.
@@ -13384,8 +13410,7 @@
+ at findex TYPE_CODE_FLAGS
+ at findex gdb.TYPE_CODE_FLAGS
+ at item TYPE_CODE_FLAGS
-+A bit flags type.
-+ at c FIXME: what is this?
++A bit flags type, used for things such as status registers.
+
+ at findex TYPE_CODE_FUNC
+ at findex gdb.TYPE_CODE_FUNC
@@ -13436,7 +13461,7 @@
+ at findex TYPE_CODE_METHOD
+ at findex gdb.TYPE_CODE_METHOD
+ at item TYPE_CODE_METHOD
-+A C++ method type.
++A method type, as found in C++ or Java.
+
+ at findex TYPE_CODE_METHODPTR
+ at findex gdb.TYPE_CODE_METHODPTR
@@ -13473,19 +13498,6 @@
+ at item TYPE_CODE_TYPEDEF
+A typedef to some other type.
+
-+ at findex TYPE_CODE_TEMPLATE
-+ at findex gdb.TYPE_CODE_TEMPLATE
-+ at item TYPE_CODE_TEMPLATE
-+A C++ template type. Note that this is not used for a template
-+instantiation; those appear as ordinary struct types.
-+ at c FIXME I hope that is true
-+
-+ at findex TYPE_CODE_TEMPLATE_ARG
-+ at findex gdb.TYPE_CODE_TEMPLATE_ARG
-+ at item TYPE_CODE_TEMPLATE_ARG
-+A C++ template argument.
-+ at c FIXME: is this ever used?
-+
+ at findex TYPE_CODE_NAMESPACE
+ at findex gdb.TYPE_CODE_NAMESPACE
+ at item TYPE_CODE_NAMESPACE
@@ -13620,7 +13632,7 @@
+ at smallexample
+def str_lookup_function (val):
+
-+ lookup_tag = val.type ().tag ()
++ lookup_tag = val.type.tag
+ regex = re.compile ("^std::basic_string<char,.*>$")
+ if lookup_tag == None:
+ return None
@@ -13684,11 +13696,10 @@
+ at code{threads}. If @var{id} is invalid, this function throws an
+exception.
+ at end defun
-+
+
@node Commands In Python
@subsubsection Commands In Python
-
-@@ -18320,7 +19143,7 @@ You can implement new @value{GDBN} CLI commands in Python. A CLI
+@@ -18320,7 +19154,7 @@ You can implement new @value{GDBN} CLI commands in Python. A CLI
command is implemented using an instance of the @code{gdb.Command}
class, most commonly using a subclass.
@@ -13697,7 +13708,7 @@
The object initializer for @code{Command} registers the new command
with @value{GDBN}. This initializer is normally invoked from the
subclass' own @code{__init__} method.
-@@ -18332,11 +19155,11 @@ an exception is raised.
+@@ -18332,11 +19166,11 @@ an exception is raised.
There is no support for multi-line commands.
@@ -13711,7 +13722,7 @@
one of the @samp{COMPLETE_} constants defined below. This argument
tells @value{GDBN} how to perform completion for this command. If not
given, @value{GDBN} will attempt to complete using the object's
-@@ -18563,6 +19386,374 @@ registration of the command with @value{GDBN}. Depending on how the
+@@ -18563,6 +19397,374 @@ 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.
@@ -14086,7 +14097,7 @@
@node Interpreters
@chapter Command Interpreters
@cindex command interpreters
-@@ -22273,6 +23464,103 @@ Unfreezing a variable does not update it, only subsequent
+@@ -22273,6 +23475,103 @@ Unfreezing a variable does not update it, only subsequent
(gdb)
@end smallexample
@@ -14190,7 +14201,7 @@
@c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@node GDB/MI Data Manipulation
-@@ -23832,6 +25120,10 @@ as possible presense of the @code{frozen} field in the output
+@@ -23832,6 +25131,10 @@ as possible presense of the @code{frozen} field in the output
of @code{-varobj-create}.
@item pending-breakpoints
Indicates presence of the @option{-f} option to the @code{-break-insert} command.
@@ -14201,7 +14212,7 @@
@item thread-info
Indicates presence of the @code{-thread-info} command.
-@@ -25402,28 +26694,6 @@ data in a @file{gmon.out} file, be sure to move it to a safe location.
+@@ -25402,28 +26705,6 @@ data in a @file{gmon.out} file, be sure to move it to a safe location.
Configuring with @samp{--enable-profiling} arranges for @value{GDBN} to be
compiled with the @samp{-pg} compiler option.
@@ -24359,13 +24370,13 @@
+IgnoreErrorsCommand ()
diff --git a/gdb/python/lib/gdb/command/pahole.py b/gdb/python/lib/gdb/command/pahole.py
new file mode 100644
-index 0000000..569b816
+index 0000000..21a0bf0
--- /dev/null
+++ b/gdb/python/lib/gdb/command/pahole.py
-@@ -0,0 +1,81 @@
+@@ -0,0 +1,75 @@
+# pahole command for gdb
+
-+# Copyright (C) 2008 Free Software Foundation, Inc.
++# Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
@@ -24391,16 +24402,10 @@
+ super (Pahole, self).__init__ ("pahole", gdb.COMMAND_NONE,
+ gdb.COMPLETE_SYMBOL)
+
-+ @staticmethod
-+ def strip (type):
-+ while type.code () == gdb.TYPE_CODE_TYPEDEF:
-+ type = type.target ()
-+ return type
-+
+ def pahole (self, type, level, name):
+ if name is None:
+ name = ''
-+ tag = type.tag ()
++ tag = type.tag
+ if tag is None:
+ tag = ''
+ print '%sstruct %s {' % (' ' * (2 * level), tag)
@@ -24410,7 +24415,7 @@
+ if not hasattr (field, ('bitpos')):
+ continue
+
-+ ftype = self.strip (field.type)
++ ftype = field.type.strip_typedefs()
+
+ if bitpos != field.bitpos:
+ hole = field.bitpos - bitpos
@@ -24420,13 +24425,13 @@
+ fieldsize = field.bitsize
+ else:
+ # TARGET_CHAR_BIT here...
-+ fieldsize = 8 * ftype.sizeof ()
++ fieldsize = 8 * ftype.sizeof
+
+ # TARGET_CHAR_BIT
+ print ' /* %3d %3d */' % (int (bitpos / 8), int (fieldsize / 8)),
+ bitpos = bitpos + fieldsize
+
-+ if ftype.code () == gdb.TYPE_CODE_STRUCT:
++ if ftype.code == gdb.TYPE_CODE_STRUCT:
+ self.pahole (ftype, level + 1, field.name)
+ else:
+ print ' ' * (2 + 2 * level),
@@ -24436,9 +24441,9 @@
+ print '} %s' % name
+
+ def invoke (self, arg, from_tty):
-+ type = gdb.Type (arg)
-+ type = self.strip (type)
-+ if type.code () != gdb.TYPE_CODE_STRUCT:
++ type = gdb.lookup_type (arg)
++ type = type.strip_typedefs ()
++ if type.code != gdb.TYPE_CODE_STRUCT:
+ raise TypeError, '%s is not a struct type' % arg
+ print ' ' * 14,
+ self.pahole (type, 0, '')
@@ -24751,7 +24756,7 @@
+register_libstdcxx_printers (gdb.current_objfile ())
diff --git a/gdb/python/lib/gdb/libstdcxx/v6/printers.py b/gdb/python/lib/gdb/libstdcxx/v6/printers.py
new file mode 100644
-index 0000000..2572731
+index 0000000..58fd91c
--- /dev/null
+++ b/gdb/python/lib/gdb/libstdcxx/v6/printers.py
@@ -0,0 +1,629 @@
@@ -24804,7 +24809,7 @@
+ def __init__(self, nodetype, head):
+ self.nodetype = nodetype
+ self.base = head['_M_next']
-+ self.head = head.address()
++ self.head = head.address
+ self.count = 0
+
+ def __iter__(self):
@@ -24823,12 +24828,12 @@
+ self.val = val
+
+ def children(self):
-+ itype = self.val.type().template_argument(0)
-+ nodetype = gdb.Type('std::_List_node<%s>' % itype).pointer()
++ itype = self.val.type.template_argument(0)
++ nodetype = gdb.lookup_type('std::_List_node<%s>' % itype).pointer()
+ return self._iterator(nodetype, self.val['_M_impl']['_M_node'])
+
+ def to_string(self):
-+ if self.val['_M_impl']['_M_node'].address() == self.val['_M_impl']['_M_node']['_M_next']:
++ if self.val['_M_impl']['_M_node'].address == self.val['_M_impl']['_M_node']['_M_next']:
+ return 'empty std::list'
+ return 'std::list'
+
@@ -24839,8 +24844,8 @@
+ self.val = val
+
+ def to_string(self):
-+ itype = self.val.type().template_argument(0)
-+ nodetype = gdb.Type('std::_List_node<%s>' % itype).pointer()
++ itype = self.val.type.template_argument(0)
++ nodetype = gdb.lookup_type('std::_List_node<%s>' % itype).pointer()
+ return self.val['_M_node'].cast(nodetype).dereference()['_M_data']
+
+class StdSlistPrinter:
@@ -24868,8 +24873,8 @@
+ self.val = val
+
+ def children(self):
-+ itype = self.val.type().template_argument(0)
-+ nodetype = gdb.Type('__gnu_cxx::_Slist_node<%s>' % itype).pointer()
++ itype = self.val.type.template_argument(0)
++ nodetype = gdb.lookup_type('__gnu_cxx::_Slist_node<%s>' % itype).pointer()
+ return self._iterator(nodetype, self.val)
+
+ def to_string(self):
@@ -24884,8 +24889,8 @@
+ self.val = val
+
+ def to_string(self):
-+ itype = self.val.type().template_argument(0)
-+ nodetype = gdb.Type('__gnu_cxx::_Slist_node<%s>' % itype).pointer()
++ itype = self.val.type.template_argument(0)
++ nodetype = gdb.lookup_type('__gnu_cxx::_Slist_node<%s>' % itype).pointer()
+ return self.val['_M_node'].cast(nodetype).dereference()['_M_data']
+
+class StdVectorPrinter:
@@ -24998,8 +25003,8 @@
+ self.val = val
+
+ def to_string (self):
-+ valuetype = self.val.type().template_argument(0)
-+ nodetype = gdb.Type('std::_Rb_tree_node < %s >' % valuetype)
++ valuetype = self.val.type.template_argument(0)
++ nodetype = gdb.lookup_type('std::_Rb_tree_node < %s >' % valuetype)
+ nodetype = nodetype.pointer()
+ return self.val.cast(nodetype).dereference()['_M_value_field']
+
@@ -25038,9 +25043,9 @@
+ return '%s with %d elements' % (self.typename, len (self.iter))
+
+ def children (self):
-+ keytype = self.val.type().template_argument(0).const()
-+ valuetype = self.val.type().template_argument(1)
-+ nodetype = gdb.Type('std::_Rb_tree_node< std::pair< %s, %s > >' % (keytype, valuetype))
++ keytype = self.val.type.template_argument(0).const()
++ valuetype = self.val.type.template_argument(1)
++ nodetype = gdb.lookup_type('std::_Rb_tree_node< std::pair< %s, %s > >' % (keytype, valuetype))
+ nodetype = nodetype.pointer()
+ return self._iter (self.iter, nodetype)
+
@@ -25078,8 +25083,8 @@
+ return '%s with %d elements' % (self.typename, len (self.iter))
+
+ def children (self):
-+ keytype = self.val.type().template_argument(0)
-+ nodetype = gdb.Type('std::_Rb_tree_node< %s >' % keytype).pointer()
++ keytype = self.val.type.template_argument(0)
++ nodetype = gdb.lookup_type('std::_Rb_tree_node< %s >' % keytype).pointer()
+ return self._iter (self.iter, nodetype)
+
+class StdBitsetPrinter:
@@ -25095,18 +25100,18 @@
+
+ def children (self):
+ words = self.val['_M_w']
-+ wtype = words.type()
++ wtype = words.type
+
+ # The _M_w member can be either an unsigned long, or an
+ # array. This depends on the template specialization used.
+ # If it is a single long, convert to a single element list.
-+ if wtype.code () == gdb.TYPE_CODE_ARRAY:
-+ tsize = wtype.target ().sizeof ()
++ if wtype.code == gdb.TYPE_CODE_ARRAY:
++ tsize = wtype.target ().sizeof
+ else:
+ words = [words]
-+ tsize = wtype.sizeof ()
++ tsize = wtype.sizeof
+
-+ nwords = wtype.sizeof() / tsize
++ nwords = wtype.sizeof / tsize
+ result = []
+ byte = 0
+ while byte < nwords:
@@ -25156,8 +25161,8 @@
+
+ def __init__(self, val):
+ self.val = val
-+ self.elttype = val.type().template_argument(0)
-+ size = self.elttype.sizeof ()
++ self.elttype = val.type.template_argument(0)
++ size = self.elttype.sizeof
+ if size < 512:
+ self.buffer_size = int (512 / size)
+ else:
@@ -25310,17 +25315,17 @@
+ "Look-up and return a pretty-printer that can print val."
+
+ # Get the type.
-+ type = val.type ();
++ type = val.type;
+
+ # If it points to a reference, get the reference.
-+ if type.code () == gdb.TYPE_CODE_REF:
++ if type.code == gdb.TYPE_CODE_REF:
+ type = type.target ()
+
+ # Get the unqualified type, stripped of typedefs.
+ type = type.unqualified ().strip_typedefs ()
+
+ # Get the type name.
-+ typename = type.tag ()
++ typename = type.tag
+ if typename == None:
+ return None
+
@@ -27373,7 +27378,7 @@
+ return result;
+}
diff --git a/gdb/python/python-internal.h b/gdb/python/python-internal.h
-index 02dbfc4..4aae0aa 100644
+index 02dbfc4..5e43267 100644
--- a/gdb/python/python-internal.h
+++ b/gdb/python/python-internal.h
@@ -33,6 +33,7 @@
@@ -27395,7 +27400,7 @@
#else
#error "Unable to find usable Python.h"
#endif
-@@ -58,23 +61,69 @@ typedef int Py_ssize_t;
+@@ -58,23 +61,70 @@ typedef int Py_ssize_t;
#define PyEval_ReleaseLock() 0
#endif
@@ -27422,6 +27427,7 @@
+PyObject *gdbpy_block_for_pc (PyObject *self, PyObject *args);
+PyObject *gdbpy_read_memory (PyObject *self, PyObject *args);
+PyObject *gdbpy_write_memory (PyObject *self, PyObject *args);
++PyObject *gdbpy_lookup_type (PyObject *self, PyObject *args, PyObject *kw);
+
+PyObject *symtab_and_line_to_sal_object (struct symtab_and_line sal);
+PyObject *symtab_to_symtab_object (struct symtab *symtab);
@@ -27466,7 +27472,7 @@
/* Use this after a TRY_EXCEPT to throw the appropriate Python
exception. */
#define GDB_PY_HANDLE_EXCEPTION(Exception) \
-@@ -85,6 +134,19 @@ struct cleanup *make_cleanup_py_restore_gil (PyGILState_STATE *state);
+@@ -85,6 +135,19 @@ struct cleanup *make_cleanup_py_restore_gil (PyGILState_STATE *state);
"%s", Exception.message); \
} while (0)
@@ -27486,7 +27492,7 @@
void gdbpy_print_stack (void);
-@@ -95,6 +157,21 @@ char *python_string_to_host_string (PyObject *obj);
+@@ -95,6 +158,21 @@ char *python_string_to_host_string (PyObject *obj);
PyObject *target_string_to_unicode (const gdb_byte *str, int length);
int gdbpy_is_string (PyObject *obj);
@@ -27759,10 +27765,10 @@
+}
diff --git a/gdb/python/python-objfile.c b/gdb/python/python-objfile.c
new file mode 100644
-index 0000000..e97d3a2
+index 0000000..f5db084
--- /dev/null
+++ b/gdb/python/python-objfile.c
-@@ -0,0 +1,221 @@
+@@ -0,0 +1,225 @@
+/* Python interface to objfiles.
+
+ Copyright (C) 2008, 2009 Free Software Foundation, Inc.
@@ -27881,9 +27887,13 @@
+static void
+clean_up_objfile (struct objfile *objfile, void *datum)
+{
++ PyGILState_STATE state;
+ objfile_object *object = datum;
++
++ state = PyGILState_Ensure ();
+ object->objfile = NULL;
+ Py_DECREF ((PyObject *) object);
++ PyGILState_Release (state);
+}
+
+/* Return the Python object of type Objfile representing OBJFILE. If
@@ -29258,10 +29268,10 @@
+};
diff --git a/gdb/python/python-type.c b/gdb/python/python-type.c
new file mode 100644
-index 0000000..c851cdb
+index 0000000..fcf6b82
--- /dev/null
+++ b/gdb/python/python-type.c
-@@ -0,0 +1,828 @@
+@@ -0,0 +1,836 @@
+/* Python interface to types.
+
+ Copyright (C) 2008, 2009 Free Software Foundation, Inc.
@@ -29353,8 +29363,6 @@
+ ENTRY (TYPE_CODE_BOOL),
+ ENTRY (TYPE_CODE_COMPLEX),
+ ENTRY (TYPE_CODE_TYPEDEF),
-+ ENTRY (TYPE_CODE_TEMPLATE),
-+ ENTRY (TYPE_CODE_TEMPLATE_ARG),
+ ENTRY (TYPE_CODE_NAMESPACE),
+ ENTRY (TYPE_CODE_DECFLOAT),
+ ENTRY (TYPE_CODE_INTERNAL_FUNCTION),
@@ -29368,6 +29376,7 @@
+{
+ field_object *f = (field_object *) obj;
+ Py_XDECREF (f->dict);
++ f->ob_type->tp_free (obj);
+}
+
+static PyObject *
@@ -29390,7 +29399,7 @@
+
+/* Return the code for this type. */
+static PyObject *
-+typy_code (PyObject *self, PyObject *args)
++typy_get_code (PyObject *self, void *closure)
+{
+ struct type *type = ((type_object *) self)->type;
+ return PyInt_FromLong (TYPE_CODE (type));
@@ -29497,7 +29506,7 @@
+
+/* Return the type's tag, or None. */
+static PyObject *
-+typy_tag (PyObject *self, PyObject *args)
++typy_get_tag (PyObject *self, void *closure)
+{
+ struct type *type = ((type_object *) self)->type;
+ if (!TYPE_TAG_NAME (type))
@@ -29611,16 +29620,16 @@
+
+/* Return the size of the type represented by SELF, in bytes. */
+static PyObject *
-+typy_sizeof (PyObject *self, PyObject *args)
++typy_get_sizeof (PyObject *self, void *closure)
+{
+ struct type *type = ((type_object *) self)->type;
+ volatile struct gdb_exception except;
+
+ TRY_CATCH (except, RETURN_MASK_ALL)
+ {
-+ CHECK_TYPEDEF (type);
++ check_typedef (type);
+ }
-+ GDB_PY_HANDLE_EXCEPTION (except);
++ /* Ignore exceptions. */
+
+ return PyLong_FromLong (TYPE_LENGTH (type));
+}
@@ -29861,47 +29870,6 @@
+ obj->next = NULL;
+}
+
-+static PyObject *
-+typy_new (PyTypeObject *subtype, PyObject *args, PyObject *kwargs)
-+{
-+ char *type_name = NULL;
-+ struct type *type = NULL;
-+ type_object *result;
-+ PyObject *block_obj = NULL;
-+ struct block *block = NULL;
-+
-+ /* FIXME: it is strange to allow a Type with no name, but we need
-+ this for type_to_type_object. */
-+ if (! PyArg_ParseTuple (args, "|sO", &type_name, &block_obj))
-+ return NULL;
-+
-+ if (block_obj)
-+ {
-+ block = block_object_to_block (block_obj);
-+ if (! block)
-+ {
-+ PyErr_SetString (PyExc_RuntimeError,
-+ "second argument must be block");
-+ return NULL;
-+ }
-+ }
-+
-+ if (type_name)
-+ {
-+ type = typy_lookup_typename (type_name, block);
-+ if (! type)
-+ return NULL;
-+ }
-+
-+ result = (type_object *) subtype->tp_alloc (subtype, 1);
-+ if (! result)
-+ return NULL;
-+
-+ set_type (result, type);
-+
-+ return (PyObject *) result;
-+}
-+
+static void
+typy_dealloc (PyObject *obj)
+{
@@ -29948,6 +29916,38 @@
+
+
+
++/* Implementation of gdb.lookup_type. */
++PyObject *
++gdbpy_lookup_type (PyObject *self, PyObject *args, PyObject *kw)
++{
++ static char *keywords[] = { "name", "block", NULL };
++ char *type_name = NULL;
++ struct type *type = NULL;
++ PyObject *block_obj = NULL;
++ struct block *block = NULL;
++
++ if (! PyArg_ParseTupleAndKeywords (args, kw, "s|O", keywords,
++ &type_name, &block_obj))
++ return NULL;
++
++ if (block_obj)
++ {
++ block = block_object_to_block (block_obj);
++ if (! block)
++ {
++ PyErr_SetString (PyExc_RuntimeError,
++ "'block' argument must be a Block");
++ return NULL;
++ }
++ }
++
++ type = typy_lookup_typename (type_name, block);
++ if (! type)
++ return NULL;
++
++ return (PyObject *) type_to_type_object (type);
++}
++
+void
+gdbpy_initialize_types (void)
+{
@@ -29979,29 +29979,47 @@
+
+
+
++static PyGetSetDef type_object_getset[] =
++{
++ { "code", typy_get_code, NULL,
++ "The code for this type.", NULL },
++ { "sizeof", typy_get_sizeof, NULL,
++ "The size of this type, in bytes.", NULL },
++ { "tag", typy_get_tag, NULL,
++ "The tag name for this type, or None.", NULL },
++ { NULL }
++};
++
+static PyMethodDef type_object_methods[] =
+{
-+ { "code", typy_code, METH_NOARGS, "Return the code for this type" },
-+ { "const", typy_const, METH_NOARGS, "Return a const variant of this type" },
++ { "const", typy_const, METH_NOARGS,
++ "const () -> Type\n\
++Return a const variant of this type." },
+ { "fields", typy_fields, METH_NOARGS,
-+ "Return a sequence holding all the fields of this type.\n\
++ "field () -> list\n\
++Return a sequence holding all the fields of this type.\n\
+Each field is a dictionary." },
-+ { "pointer", typy_pointer, METH_NOARGS, "Return pointer to this type" },
-+ { "reference", typy_reference, METH_NOARGS, "Return reference to this type" },
-+ { "sizeof", typy_sizeof, METH_NOARGS,
-+ "Return the size of this type, in bytes" },
-+ { "tag", typy_tag, METH_NOARGS,
-+ "Return the tag name for this type, or None." },
++ { "pointer", typy_pointer, METH_NOARGS,
++ "pointer () -> Type\n\
++Return a type of pointer to this type." },
++ { "reference", typy_reference, METH_NOARGS,
++ "reference () -> Type\n\
++Return a type of reference to this type." },
+ { "strip_typedefs", typy_strip_typedefs, METH_NOARGS,
-+ "Return a type stripped of typedefs"},
++ "strip_typedefs () -> Type\n\
++Return a type formed by stripping this type of all typedefs."},
+ { "target", typy_target, METH_NOARGS,
-+ "Return the target type of this type" },
++ "target () -> Type\n\
++Return the target type of this type." },
+ { "template_argument", typy_template_argument, METH_VARARGS,
-+ "Return a single template argument type" },
++ "template_argument (arg) -> Type\n\
++Return the type of a template argument." },
+ { "unqualified", typy_unqualified, METH_NOARGS,
-+ "Return a variant of this type without const or volatile attributes" },
++ "unqualified () -> Type\n\
++Return a variant of this type without const or volatile attributes." },
+ { "volatile", typy_volatile, METH_NOARGS,
-+ "Return a volatile variant of this type" },
++ "volatile () -> Type\n\
++Return a volatile variant of this type" },
+ { NULL }
+};
+
@@ -30037,7 +30055,7 @@
+ 0, /* tp_iternext */
+ type_object_methods, /* tp_methods */
+ 0, /* tp_members */
-+ 0, /* tp_getset */
++ type_object_getset, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
@@ -30045,7 +30063,7 @@
+ 0, /* tp_dictoffset */
+ 0, /* tp_init */
+ 0, /* tp_alloc */
-+ typy_new, /* tp_new */
++ 0, /* tp_new */
+};
+
+static PyTypeObject field_object_type =
@@ -30163,7 +30181,7 @@
+ return 1;
+}
diff --git a/gdb/python/python-value.c b/gdb/python/python-value.c
-index bc077b6..2507fcd 100644
+index bc077b6..e26880a 100644
--- a/gdb/python/python-value.c
+++ b/gdb/python/python-value.c
@@ -52,6 +52,10 @@ struct value *values_in_python = NULL;
@@ -30177,30 +30195,108 @@
#define builtin_type_pybool \
language_bool_type (current_language, current_gdbarch)
-@@ -143,10 +147,19 @@ valpy_address (PyObject *self, PyObject *args)
- return value_to_value_object (res_val);
+@@ -59,6 +63,8 @@ typedef struct {
+ PyObject_HEAD
+ struct value *value;
+ int owned_by_gdb;
++ PyObject *address;
++ PyObject *type;
+ } value_object;
+
+ /* Called by the Python interpreter when deallocating a value object. */
+@@ -71,6 +77,18 @@ valpy_dealloc (PyObject *obj)
+
+ if (!self->owned_by_gdb)
+ value_free (self->value);
++
++ if (self->address)
++ /* Use braces to appease gcc warning. *sigh* */
++ {
++ Py_DECREF (self->address);
++ }
++
++ if (self->type)
++ {
++ Py_DECREF (self->type);
++ }
++
+ self->ob_type->tp_free (self);
+ }
+
+@@ -105,6 +123,8 @@ valpy_new (PyTypeObject *subtype, PyObject *args, PyObject *keywords)
+
+ value_obj->value = value;
+ value_obj->owned_by_gdb = 0;
++ value_obj->address = NULL;
++ value_obj->type = NULL;
+ release_value (value);
+ value_prepend_to_list (&values_in_python, value);
+
+@@ -129,24 +149,55 @@ valpy_dereference (PyObject *self, PyObject *args)
+
+ /* Return "&value". */
+ static PyObject *
+-valpy_address (PyObject *self, PyObject *args)
++valpy_get_address (PyObject *self, void *closure)
+ {
+ struct value *res_val = NULL; /* Initialize to appease gcc warning. */
++ value_object *val_obj = (value_object *) self;
+ volatile struct gdb_exception except;
+
+- TRY_CATCH (except, RETURN_MASK_ALL)
++ if (!val_obj->address)
+ {
+- res_val = value_addr (((value_object *) self)->value);
++ TRY_CATCH (except, RETURN_MASK_ALL)
++ {
++ res_val = value_addr (val_obj->value);
++ }
++ if (except.reason < 0)
++ {
++ val_obj->address = Py_None;
++ Py_INCREF (Py_None);
++ }
++ else
++ val_obj->address = value_to_value_object (res_val);
+ }
+- GDB_PY_HANDLE_EXCEPTION (except);
+
+- return value_to_value_object (res_val);
++ Py_INCREF (val_obj->address);
++
++ return val_obj->address;
}
-/* Return Unicode string with value contents (assumed to be encoded in the
- target's charset). */
+/* Return type of the value. */
-+static PyObject *
-+valpy_type (PyObject *self, PyObject *args)
+ static PyObject *
+-valpy_string (PyObject *self, PyObject *args)
++valpy_get_type (PyObject *self, void *closure)
+{
-+ struct value *value = ((value_object *) self)->value;
-+ return type_to_type_object (value_type (value));
++ value_object *obj = (value_object *) self;
++ if (!obj->type)
++ {
++ obj->type = type_to_type_object (value_type (obj->value));
++ if (!obj->type)
++ {
++ obj->type = Py_None;
++ Py_INCREF (obj->type);
++ }
++ }
++ Py_INCREF (obj->type);
++ return obj->type;
+}
+
+/* Implementation of gdb.Value.string ([encoding] [, errors]) -> string
+ Return Unicode string with value contents. If ENCODING is not given,
+ the string is assumed to be encoded in the target's charset. */
- static PyObject *
--valpy_string (PyObject *self, PyObject *args)
++static PyObject *
+valpy_string (PyObject *self, PyObject *args, PyObject *kw)
{
int length, ret = 0;
gdb_byte *buffer;
-@@ -157,8 +170,10 @@ valpy_string (PyObject *self, PyObject *args)
+@@ -157,8 +208,10 @@ valpy_string (PyObject *self, PyObject *args)
const char *errors = NULL;
const char *user_encoding = NULL;
const char *la_encoding = NULL;
@@ -30212,7 +30308,7 @@
return NULL;
TRY_CATCH (except, RETURN_MASK_ALL)
-@@ -174,6 +189,34 @@ valpy_string (PyObject *self, PyObject *args)
+@@ -174,6 +227,34 @@ valpy_string (PyObject *self, PyObject *args)
return unicode;
}
@@ -30247,7 +30343,26 @@
static Py_ssize_t
valpy_length (PyObject *self)
{
-@@ -306,11 +349,11 @@ valpy_binop (enum valpy_opcode opcode, PyObject *self, PyObject *other)
+@@ -269,6 +350,18 @@ valpy_str (PyObject *self)
+ return result;
+ }
+
++/* Implements gdb.Value.is_optimized_out. */
++static PyObject *
++valpy_get_is_optimized_out (PyObject *self, void *closure)
++{
++ struct value *value = ((value_object *) self)->value;
++
++ if (value_optimized_out (value))
++ Py_RETURN_TRUE;
++
++ Py_RETURN_FALSE;
++}
++
+ enum valpy_opcode
+ {
+ VALPY_ADD,
+@@ -306,11 +399,11 @@ valpy_binop (enum valpy_opcode opcode, PyObject *self, PyObject *other)
a gdb.Value object and need to convert it from python as well. */
arg1 = convert_value_from_python (self);
if (arg1 == NULL)
@@ -30261,7 +30376,7 @@
switch (opcode)
{
-@@ -387,7 +430,7 @@ valpy_binop (enum valpy_opcode opcode, PyObject *self, PyObject *other)
+@@ -387,7 +480,7 @@ valpy_binop (enum valpy_opcode opcode, PyObject *self, PyObject *other)
}
GDB_PY_HANDLE_EXCEPTION (except);
@@ -30270,7 +30385,16 @@
}
static PyObject *
-@@ -718,6 +761,17 @@ value_to_value_object (struct value *val)
+@@ -711,6 +804,8 @@ value_to_value_object (struct value *val)
+ {
+ val_obj->value = val;
+ val_obj->owned_by_gdb = 0;
++ val_obj->address = NULL;
++ val_obj->type = NULL;
+ release_value (val);
+ value_prepend_to_list (&values_in_python, val);
+ }
+@@ -718,6 +813,17 @@ value_to_value_object (struct value *val)
return (PyObject *) val_obj;
}
@@ -30288,7 +30412,7 @@
/* Try to convert a Python value to a gdb value. If the value cannot
be converted, set a Python exception and return NULL. */
-@@ -751,7 +805,34 @@ convert_value_from_python (PyObject *obj)
+@@ -751,7 +857,34 @@ convert_value_from_python (PyObject *obj)
{
LONGEST l = PyLong_AsLongLong (obj);
@@ -30324,7 +30448,7 @@
value = value_from_longest (builtin_type_pylong, l);
}
else if (PyFloat_Check (obj))
-@@ -774,7 +855,7 @@ convert_value_from_python (PyObject *obj)
+@@ -774,7 +907,7 @@ convert_value_from_python (PyObject *obj)
}
}
else if (PyObject_TypeCheck (obj, &value_object_type))
@@ -30333,7 +30457,7 @@
else
PyErr_Format (PyExc_TypeError, _("Could not convert Python object: %s"),
PyString_AsString (PyObject_Str (obj)));
-@@ -810,6 +891,14 @@ gdbpy_history (PyObject *self, PyObject *args)
+@@ -810,6 +943,14 @@ gdbpy_history (PyObject *self, PyObject *args)
return value_to_value_object (res_val);
}
@@ -30348,27 +30472,45 @@
void
gdbpy_initialize_values (void)
{
-@@ -822,11 +911,16 @@ gdbpy_initialize_values (void)
+@@ -822,11 +963,24 @@ gdbpy_initialize_values (void)
values_in_python = NULL;
}
+
+
++static PyGetSetDef value_object_getset[] = {
++ { "address", valpy_get_address, NULL, "The address of the value.",
++ NULL },
++ { "is_optimized_out", valpy_get_is_optimized_out, NULL,
++ "Boolean telling whether the value is optimized out (i.e., not available).",
++ NULL },
++ { "type", valpy_get_type, NULL, "Type of the value.", NULL },
++ {NULL} /* Sentinel */
++};
++
static PyMethodDef value_object_methods[] = {
- { "address", valpy_address, METH_NOARGS, "Return the address of the value." },
+- { "address", valpy_address, METH_NOARGS, "Return the address of the value." },
+ { "cast", valpy_cast, METH_VARARGS, "Cast the value to the supplied type." },
{ "dereference", valpy_dereference, METH_NOARGS, "Dereferences the value." },
- { "string", valpy_string, METH_VARARGS,
- "Return Unicode string representation of the value." },
-+ { "type", valpy_type, METH_NOARGS, "Return type of the value." },
+ { "string", (PyCFunction) valpy_string, METH_VARARGS | METH_KEYWORDS,
+ "string ([encoding] [, errors]) -> string\n\
+Return Unicode string representation of the value." },
{NULL} /* Sentinel */
};
+@@ -893,7 +1047,7 @@ PyTypeObject value_object_type = {
+ 0, /* tp_iternext */
+ value_object_methods, /* tp_methods */
+ 0, /* tp_members */
+- 0, /* tp_getset */
++ value_object_getset, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
diff --git a/gdb/python/python.c b/gdb/python/python.c
-index b3a27d6..2b06748 100644
+index b3a27d6..995835b 100644
--- a/gdb/python/python.c
+++ b/gdb/python/python.c
@@ -22,6 +22,12 @@
@@ -31969,7 +32111,7 @@
");
/* Release the GIL while gdb runs. */
-@@ -461,9 +1868,79 @@ static PyMethodDef GdbMethods[] =
+@@ -461,9 +1868,84 @@ static PyMethodDef GdbMethods[] =
"Get a value from history" },
{ "execute", execute_gdb_command, METH_VARARGS,
"Execute a gdb command" },
@@ -32003,6 +32145,11 @@
+ "stop_reason_string (Integer) -> String.\n\
+Return a string explaining unwind stop reason." },
+
++ { "lookup_type", (PyCFunction) gdbpy_lookup_type,
++ METH_VARARGS | METH_KEYWORDS,
++ "lookup_type (name [, block]) -> type\n\
++Return a Type corresponding to the given name." },
++
+ { "lookup_symbol", (PyCFunction) gdbpy_lookup_symbol,
+ METH_VARARGS | METH_KEYWORDS,
+ "lookup_symbol (name [, block] [, domain]) -> (symbol, is_field_of_this)\n\
@@ -32579,7 +32726,7 @@
extern void dwarf2_build_frame_info (struct objfile *);
diff --git a/gdb/symtab.c b/gdb/symtab.c
-index d2ba1f3..c1c4459 100644
+index d2ba1f3..f9d27b2 100644
--- a/gdb/symtab.c
+++ b/gdb/symtab.c
@@ -42,6 +42,7 @@
@@ -32598,18 +32745,7 @@
#include "observer.h"
#include "gdb_assert.h"
#include "solist.h"
-@@ -94,7 +96,9 @@ static
- struct symbol *lookup_symbol_aux_local (const char *name,
- const char *linkage_name,
- const struct block *block,
-- const domain_enum domain);
-+ const domain_enum domain,
-+ enum language lang,
-+ int *is_a_field_of_this);
-
- static
- struct symbol *lookup_symbol_aux_symtabs (int block_index,
-@@ -273,7 +277,7 @@ lookup_partial_symtab (const char *name)
+@@ -273,7 +275,7 @@ lookup_partial_symtab (const char *name)
make_cleanup (xfree, real_path);
}
@@ -32618,7 +32754,7 @@
{
if (FILENAME_CMP (name, pst->filename) == 0)
{
-@@ -870,7 +874,13 @@ find_pc_sect_psymtab (CORE_ADDR pc, struct obj_section *section)
+@@ -870,7 +872,13 @@ find_pc_sect_psymtab (CORE_ADDR pc, struct obj_section *section)
than the later used TEXTLOW/TEXTHIGH one. */
ALL_OBJFILES (objfile)
@@ -32633,7 +32769,7 @@
{
struct partial_symtab *pst;
-@@ -903,6 +913,7 @@ find_pc_sect_psymtab (CORE_ADDR pc, struct obj_section *section)
+@@ -903,6 +911,7 @@ find_pc_sect_psymtab (CORE_ADDR pc, struct obj_section *section)
return pst;
}
}
@@ -32641,7 +32777,7 @@
/* Existing PSYMTABS_ADDRMAP mapping is present even for PARTIAL_SYMTABs
which still have no corresponding full SYMTABs read. But it is not
-@@ -1170,6 +1181,22 @@ fixup_psymbol_section (struct partial_symbol *psym, struct objfile *objfile)
+@@ -1170,6 +1179,22 @@ fixup_psymbol_section (struct partial_symbol *psym, struct objfile *objfile)
return psym;
}
@@ -32664,7 +32800,7 @@
/* Find the definition for a specified symbol name NAME
in domain DOMAIN, visible from lexical block BLOCK.
Returns the struct symbol pointer, or zero if no symbol is found.
-@@ -1200,6 +1227,11 @@ lookup_symbol_in_language (const char *name, const struct block *block,
+@@ -1200,6 +1225,11 @@ lookup_symbol_in_language (const char *name, const struct block *block,
int needtofreename = 0;
struct symbol *returnval;
@@ -32676,7 +32812,7 @@
modified_name = name;
/* If we are using C++ or Java, demangle the name before doing a lookup, so
-@@ -1213,6 +1245,17 @@ lookup_symbol_in_language (const char *name, const struct block *block,
+@@ -1213,6 +1243,17 @@ lookup_symbol_in_language (const char *name, const struct block *block,
modified_name = demangled_name;
needtofreename = 1;
}
@@ -32694,79 +32830,37 @@
}
else if (lang == language_java)
{
-@@ -1283,8 +1326,8 @@ lookup_symbol_aux (const char *name, const char *linkage_name,
- /* Search specified block and its superiors. Don't search
- STATIC_BLOCK or GLOBAL_BLOCK. */
-
-- sym = lookup_symbol_aux_local (name, linkage_name, block, domain);
-- if (sym != NULL)
-+ sym = lookup_symbol_aux_local (name, linkage_name, block, domain, language, is_a_field_of_this);
-+ if (sym != NULL || (is_a_field_of_this && *is_a_field_of_this))
- return sym;
-
- /* If requested to do so by the caller and if appropriate for LANGUAGE,
-@@ -1292,41 +1335,6 @@ lookup_symbol_aux (const char *name, const char *linkage_name,
-
- langdef = language_def (language);
-
-- if (langdef->la_name_of_this != NULL && is_a_field_of_this != NULL
-- && block != NULL)
-- {
-- struct symbol *sym = NULL;
-- /* 'this' is only defined in the function's block, so find the
-- enclosing function block. */
+@@ -1296,13 +1337,15 @@ lookup_symbol_aux (const char *name, const char *linkage_name,
+ && block != NULL)
+ {
+ struct symbol *sym = NULL;
++ const struct block *function_block = block;
++
+ /* 'this' is only defined in the function's block, so find the
+ enclosing function block. */
- for (; block && !BLOCK_FUNCTION (block);
- block = BLOCK_SUPERBLOCK (block));
--
++ for (; function_block && !BLOCK_FUNCTION (function_block);
++ function_block = BLOCK_SUPERBLOCK (function_block));
+
- if (block && !dict_empty (BLOCK_DICT (block)))
- sym = lookup_block_symbol (block, langdef->la_name_of_this,
-- NULL, VAR_DOMAIN);
-- if (sym)
-- {
-- struct type *t = sym->type;
--
-- /* I'm not really sure that type of this can ever
-- be typedefed; just be safe. */
-- CHECK_TYPEDEF (t);
-- if (TYPE_CODE (t) == TYPE_CODE_PTR
-- || TYPE_CODE (t) == TYPE_CODE_REF)
-- t = TYPE_TARGET_TYPE (t);
--
-- if (TYPE_CODE (t) != TYPE_CODE_STRUCT
-- && TYPE_CODE (t) != TYPE_CODE_UNION)
-- error (_("Internal error: `%s' is not an aggregate"),
-- langdef->la_name_of_this);
--
-- if (check_field (t, name))
-- {
-- *is_a_field_of_this = 1;
-- return NULL;
-- }
-- }
-- }
-
- /* Now do whatever is appropriate for LANGUAGE to look
- up static and global variables. */
-@@ -1358,25 +1366,70 @@ lookup_symbol_aux (const char *name, const char *linkage_name,
- static struct symbol *
- lookup_symbol_aux_local (const char *name, const char *linkage_name,
- const struct block *block,
-- const domain_enum domain)
-+ const domain_enum domain,
-+ enum language language,
-+ int *is_a_field_of_this)
++ if (function_block && !dict_empty (BLOCK_DICT (function_block)))
++ sym = lookup_block_symbol (function_block, langdef->la_name_of_this,
+ NULL, VAR_DOMAIN);
+ if (sym)
+ {
+@@ -1361,22 +1404,24 @@ lookup_symbol_aux_local (const char *name, const char *linkage_name,
+ const domain_enum domain)
{
struct symbol *sym;
- const struct block *static_block = block_static_block (block);
+ const struct block *global_block = block_global_block (block);
+ const struct block *block_iterator = block;
-+ const struct language_defn *langdef;
-- /* Check if either no block is specified or it's a global block. */
-+ langdef = language_def (language);
+ /* Check if either no block is specified or it's a global block. */
- if (static_block == NULL)
-+ /* Check if either no block is specified or it's a global block. */
+ if (global_block == NULL)
return NULL;
@@ -32774,50 +32868,11 @@
+ while (block_iterator != global_block)
{
- sym = lookup_symbol_aux_block (name, linkage_name, block, domain);
-+ /* First check the local lexical level */
+ sym = lookup_symbol_aux_block (name, linkage_name, block_iterator, domain);
if (sym != NULL)
return sym;
- block = BLOCK_SUPERBLOCK (block);
+
-+ if (language == language_cplus)
-+ {
-+ /* Check class scope, if we have reach the function block */
-+ if(BLOCK_FUNCTION (block_iterator)){
-+
-+ if (block_iterator && !dict_empty (BLOCK_DICT (block_iterator)))
-+ sym = lookup_block_symbol (block_iterator, langdef->la_name_of_this,
-+ NULL, VAR_DOMAIN);
-+ if (sym)
-+ {
-+ struct type *t = sym->type;
-+
-+ /* I'm not really sure that type of this can ever
-+ be typedefed; just be safe. */
-+ CHECK_TYPEDEF (t);
-+ if (TYPE_CODE (t) == TYPE_CODE_PTR
-+ || TYPE_CODE (t) == TYPE_CODE_REF)
-+ t = TYPE_TARGET_TYPE (t);
-+
-+ if (TYPE_CODE (t) != TYPE_CODE_STRUCT
-+ && TYPE_CODE (t) != TYPE_CODE_UNION)
-+ error (_("Internal error: `%s' is not an aggregate"),
-+ langdef->la_name_of_this);
-+
-+ if (check_field (t, name))
-+ {
-+ *is_a_field_of_this = 1;
-+ return NULL;
-+ }
-+ }
-+ }
-+
-+ /* Check the namespace scope */
-+ sym = langdef->la_lookup_symbol_nonlocal (name, linkage_name, block, domain);
-+ if (sym != NULL)
-+ return sym;
-+ }
-+
+ block_iterator = BLOCK_SUPERBLOCK (block_iterator);
}
@@ -32826,7 +32881,7 @@
return NULL;
}
-@@ -1450,6 +1503,7 @@ lookup_global_symbol_from_objfile (const struct objfile *objfile,
+@@ -1450,6 +1495,7 @@ lookup_global_symbol_from_objfile (const struct objfile *objfile,
}
/* Now go through psymtabs. */
@@ -32834,7 +32889,7 @@
ALL_OBJFILE_PSYMTABS (objfile, ps)
{
if (!ps->readin
-@@ -1520,7 +1574,7 @@ lookup_symbol_aux_psymtabs (int block_index, const char *name,
+@@ -1520,7 +1566,7 @@ lookup_symbol_aux_psymtabs (int block_index, const char *name,
struct symtab *s;
const int psymtab_index = (block_index == GLOBAL_BLOCK ? 1 : 0);
@@ -32843,7 +32898,7 @@
{
if (!ps->readin
&& lookup_partial_symbol (ps, name, linkage_name,
-@@ -1805,7 +1859,11 @@ basic_lookup_transparent_type (const char *name)
+@@ -1805,7 +1851,11 @@ basic_lookup_transparent_type (const char *name)
}
}
@@ -32856,7 +32911,7 @@
{
if (!ps->readin && lookup_partial_symbol (ps, name, NULL,
1, STRUCT_DOMAIN))
-@@ -1853,7 +1911,12 @@ basic_lookup_transparent_type (const char *name)
+@@ -1853,7 +1903,12 @@ basic_lookup_transparent_type (const char *name)
}
}
@@ -32870,7 +32925,7 @@
{
if (!ps->readin && lookup_partial_symbol (ps, name, NULL, 0, STRUCT_DOMAIN))
{
-@@ -1894,7 +1957,21 @@ find_main_psymtab (void)
+@@ -1894,7 +1949,21 @@ find_main_psymtab (void)
struct partial_symtab *pst;
struct objfile *objfile;
@@ -32893,7 +32948,7 @@
{
if (lookup_partial_symbol (pst, main_name (), NULL, 1, VAR_DOMAIN))
{
-@@ -3085,7 +3162,7 @@ search_symbols (char *regexp, domain_enum kind, int nfiles, char *files[],
+@@ -3085,7 +3154,7 @@ search_symbols (char *regexp, domain_enum kind, int nfiles, char *files[],
matching the regexp. That way we don't have to reproduce all of
the machinery below. */
@@ -40135,7 +40190,7 @@
+}
diff --git a/gdb/testsuite/gdb.python/find.exp b/gdb/testsuite/gdb.python/find.exp
new file mode 100644
-index 0000000..dd9aabc
+index 0000000..defc31c
--- /dev/null
+++ b/gdb/testsuite/gdb.python/find.exp
@@ -0,0 +1,203 @@
@@ -40232,8 +40287,8 @@
+
+gdb_test "set *(int32_t*) &int8_search_buf\[10\] = 0x61616161" "" ""
+gdb_test "py search_buf = gdb.selected_frame ().read_var ('int8_search_buf')" "" ""
-+gdb_test "py start_addr = search_buf.address ()" "" ""
-+gdb_test "py length = search_buf.type ().sizeof ()" "" ""
++gdb_test "py start_addr = search_buf.address" "" ""
++gdb_test "py length = search_buf.type.sizeof" "" ""
+
+gdb_test "py print gdb.search_memory (start_addr, length, 'aaa')" \
+ "${two_patterns_found}" "find string pattern"
@@ -40270,8 +40325,8 @@
+
+gdb_test "set int16_search_buf\[10\] = 0x1234" "" ""
+gdb_test "py search_buf = gdb.selected_frame ().read_var ('int16_search_buf')" "" ""
-+gdb_test "py start_addr = search_buf.address ()" "" ""
-+gdb_test "py length = search_buf.type ().sizeof ()" "" ""
++gdb_test "py start_addr = search_buf.address" "" ""
++gdb_test "py length = search_buf.type.sizeof" "" ""
+gdb_test "py pattern = gdb.parse_and_eval ('(int16_t) 0x1234')" "" ""
+
+gdb_test "py print gdb.search_memory (start_addr, length, 0x1234, 2)" \
@@ -40284,8 +40339,8 @@
+
+gdb_test "set int32_search_buf\[10\] = 0x12345678" "" ""
+gdb_test "py search_buf = gdb.selected_frame ().read_var ('int32_search_buf')" "" ""
-+gdb_test "py start_addr = search_buf.address ()" "" ""
-+gdb_test "py length = search_buf.type ().sizeof ()" "" ""
++gdb_test "py start_addr = search_buf.address" "" ""
++gdb_test "py length = search_buf.type.sizeof" "" ""
+gdb_test "py pattern = gdb.parse_and_eval ('(int32_t) 0x12345678')" "" ""
+
+gdb_test "py print gdb.search_memory (start_addr, length, 0x12345678, 4)" \
@@ -40297,8 +40352,8 @@
+
+gdb_test "set int64_search_buf\[10\] = 0xfedcba9876543210LL" "" ""
+gdb_test "py search_buf = gdb.selected_frame ().read_var ('int64_search_buf')" "" ""
-+gdb_test "py start_addr = search_buf.address ()" "" ""
-+gdb_test "py length = search_buf.type ().sizeof ()" "" ""
++gdb_test "py start_addr = search_buf.address" "" ""
++gdb_test "py length = search_buf.type.sizeof" "" ""
+gdb_test "py pattern = gdb.parse_and_eval ('(int64_t) 0xfedcba9876543210LL')" "" ""
+
+gdb_test "py print gdb.search_memory (start_addr, length, 0xfedcba9876543210, 8)" \
@@ -40312,7 +40367,7 @@
+gdb_test "set *(int16_t*) &search_buf\[11\] = 0x6363" "" ""
+gdb_test "set *(int32_t*) &search_buf\[13\] = 0x64646464" "" ""
+gdb_test "py search_buf = gdb.selected_frame ().read_var ('search_buf')" "" ""
-+gdb_test "py start_addr = search_buf\[0\].address ()" "" ""
++gdb_test "py start_addr = search_buf\[0\].address" "" ""
+gdb_test "py pattern1 = gdb.parse_and_eval ('(int8_t) 0x62')" "" ""
+gdb_test "py pattern2 = gdb.parse_and_eval ('(int16_t) 0x6363')" "" ""
+gdb_test "py pattern3 = gdb.parse_and_eval ('(int32_t) 0x64646464')" "" ""
@@ -41009,7 +41064,7 @@
+run_lang_tests "c++"
diff --git a/gdb/testsuite/gdb.python/python-prettyprint.py b/gdb/testsuite/gdb.python/python-prettyprint.py
new file mode 100644
-index 0000000..8379ecf
+index 0000000..a53e412
--- /dev/null
+++ b/gdb/testsuite/gdb.python/python-prettyprint.py
@@ -0,0 +1,151 @@
@@ -41075,8 +41130,8 @@
+ def to_string(self):
+ a = self.val["a"]
+ b = self.val["b"]
-+ if a.address() != b:
-+ raise Exception("&a(%s) != b(%s)" % (str(a.address()), str(b)))
++ if a.address != b:
++ raise Exception("&a(%s) != b(%s)" % (str(a.address), str(b)))
+ return " a=<" + str(self.val["a"]) + "> b=<" + str(self.val["b"]) + ">"
+
+class pp_ss:
@@ -41105,23 +41160,23 @@
+ self.val = val
+
+ def to_string (self):
-+ return "pp class name: " + self.val.type ().tag ()
++ return "pp class name: " + self.val.type.tag
+
+def lookup_function (val):
+ "Look-up and return a pretty-printer that can print val."
+
+ # Get the type.
-+ type = val.type ();
++ type = val.type
+
+ # If it points to a reference, get the reference.
-+ if type.code () == gdb.TYPE_CODE_REF:
++ if type.code == gdb.TYPE_CODE_REF:
+ type = type.target ()
+
+ # Get the unqualified type, stripped of typedefs.
+ type = type.unqualified ().strip_typedefs ()
+
+ # Get the type name.
-+ typename = type.tag ()
++ typename = type.tag
+
+ if typename == None:
+ return None
@@ -41202,11 +41257,11 @@
+}
diff --git a/gdb/testsuite/gdb.python/python-template.exp b/gdb/testsuite/gdb.python/python-template.exp
new file mode 100644
-index 0000000..561ff73
+index 0000000..1ace5d6
--- /dev/null
+++ b/gdb/testsuite/gdb.python/python-template.exp
@@ -0,0 +1,75 @@
-+# Copyright (C) 2008 Free Software Foundation, Inc.
++# Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
@@ -41270,7 +41325,7 @@
+
+ # Replace '*' with '\*' in regex.
+ regsub -all {\*} $type {\*} t
-+ gdb_test "python print foo.type().template_argument(0)" $t $type
++ gdb_test "python print foo.type.template_argument(0)" $t $type
+}
+
+test_template_arg "const int"
@@ -41304,16 +41359,34 @@
s.a = 3;
s.b = 5;
diff --git a/gdb/testsuite/gdb.python/python-value.exp b/gdb/testsuite/gdb.python/python-value.exp
-index 8f5e0ab..9ca9593 100644
+index 8f5e0ab..c1a051c 100644
--- a/gdb/testsuite/gdb.python/python-value.exp
+++ b/gdb/testsuite/gdb.python/python-value.exp
-@@ -227,6 +227,37 @@ proc test_value_in_inferior {} {
- gdb_test "python print arg0" "0x.*$testfile\"" "verify dereferenced value"
+@@ -70,6 +70,9 @@ proc test_value_creation {} {
+ gdb_py_test_silent_cmd "python a = gdb.Value (u'unicode test')" "create unicode value" 1
+ gdb_test "python print a" "\"unicode test\"" "print Unicode string"
+ gdb_test "python print a.__class__" "<type 'gdb.Value'>" "verify type of unicode string"
++
++ # Test address attribute is None in a non-addressable value
++ gdb_test "python print 'result =', i.address" "= None" "Test address attribute in non-addressable value"
}
+ proc test_value_numeric_ops {} {
+@@ -225,6 +228,43 @@ proc test_value_in_inferior {} {
+
+ # Check that the dereferenced value is sane
+ gdb_test "python print arg0" "0x.*$testfile\"" "verify dereferenced value"
++
++ # Smoke-test is_optimized_out attribute
++ gdb_test "python print 'result =', arg0.is_optimized_out" "= False" "Test is_optimized_out attribute"
++
++ # Test address attribute
++ gdb_test "python print 'result =', arg0.address" "= 0x\[\[:xdigit:\]\]+" "Test address attribute"
++}
++
+proc test_value_after_death {} {
+ # Construct a type while the inferior is still running.
-+ gdb_py_test_silent_cmd "python ptrtype = gdb.Type('PTR')" \
++ gdb_py_test_silent_cmd "python ptrtype = gdb.lookup_type('PTR')" \
+ "create PTR type" 1
+
+ # Check the type has the expected name.
@@ -41338,14 +41411,12 @@
+ "delete PTR type" 1
+
+ # Now see if the value's type is still valid.
-+ gdb_test "python print castval.type()" "PTR \\*" \
++ gdb_test "python print castval.type" "PTR \\*" \
+ "print value's type"
-+}
-+
+ }
- # Start with a fresh gdb.
-@@ -256,3 +287,4 @@ if ![runto_main] then {
+@@ -256,3 +296,4 @@ if ![runto_main] then {
}
test_value_in_inferior
Index: gdb.spec
===================================================================
RCS file: /cvs/pkgs/rpms/gdb/devel/gdb.spec,v
retrieving revision 1.340
retrieving revision 1.341
diff -u -r1.340 -r1.341
--- gdb.spec 13 Apr 2009 18:40:58 -0000 1.340
+++ gdb.spec 13 Apr 2009 20:52:59 -0000 1.341
@@ -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: 16%{?_with_upstream:.upstream}%{?dist}
+Release: 17%{?_with_upstream:.upstream}%{?dist}
License: GPLv3+
Group: Development/Debuggers
@@ -851,6 +851,19 @@
%endif
%changelog
+* Mon Apr 13 2009 Jan Kratochvil <jan.kratochvil at redhat.com> - 6.8.50.20090302-17
+- Archer update to the snapshot: 7c250ce99c90cf6097e2ec55ea0f205830979cee
+- Archer backport: c14d9ab7eef43281b2052c885f89d2db96fb5f8e
+ - Revert a change regressing: gdb.objc/basicclass.exp
+- Archer backport: ebd649b96e61a1fb481801b65d827bca998c6633
+ + 1f080e897996d60ab7fde20423e2947512115667
+ + 1948198702b51b31d79793fc49434b529b4e245f
+ + e107fb9687bb1e7f74170aa3d19c4a8f6edbb10f
+ + 1e012c996e121cb35053d239a46bd5dc65b0ce60
+ - Update the Python API from upstream.
+- Archer backport: d3c83ad5ec9f7672b87af9ad29279f459e53da11
+ - Fix a Python branch crash.
+
* Mon Apr 13 2009 Dennis Gilmore <dennis at ausil.us> - 6.8.50.20090302-16
- enable gdbserver package on sparc64
- Previous message (by thread): rpms/xfdesktop/devel xfdesktop-4.6.0-redhat-menus.patch, 1.1, 1.2 xfdesktop.spec, 1.32, 1.33
- Next message (by thread): rpms/latexmk/F-10 .cvsignore, 1.7, 1.8 latexmk-conf.patch, 1.6, 1.7 latexmk.spec, 1.8, 1.9 sources, 1.7, 1.8
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the fedora-extras-commits
mailing list