From f314eb3eb50b6293a333561845469436ca1a1751 Mon Sep 17 00:00:00 2001 From: Jan Kratochvil Date: Fri, 29 Apr 2011 10:04:45 +0200 Subject: [PATCH] Rebase to FSF GDB 7.2.90.20110429 (which is a 7.3 pre-release). Fix -O2 -g breakpoints internal error + prologue skipping (BZ 612253). Fix case insensitive symbols for Fortran by iFort (BZ 645773). Fix physname-related CU expansion issue for C++ (PR 12708). Fix Python access to inlined frames (BZ 694824). --- .gitignore | 2 +- gdb-archer.patch | 1779 +++++++++++----------- gdb-bz645773-case-insensitive-1of5.patch | 84 + gdb-bz645773-case-insensitive-2of5.patch | 139 ++ gdb-bz645773-case-insensitive-3of5.patch | 188 +++ gdb-bz645773-case-insensitive-4of5.patch | 666 ++++++++ gdb-bz645773-case-insensitive-5of5.patch | 62 + gdb-fortran-common.patch | 72 +- gdb-optim-g-prologue-skip.patch | 830 ++++++++++ gdb-physname-expand-completer.patch | 228 +++ gdb-upstream.patch | 139 ++ gdb.spec | 35 +- sources | 2 +- 13 files changed, 3264 insertions(+), 962 deletions(-) create mode 100644 gdb-bz645773-case-insensitive-1of5.patch create mode 100644 gdb-bz645773-case-insensitive-2of5.patch create mode 100644 gdb-bz645773-case-insensitive-3of5.patch create mode 100644 gdb-bz645773-case-insensitive-4of5.patch create mode 100644 gdb-bz645773-case-insensitive-5of5.patch create mode 100644 gdb-optim-g-prologue-skip.patch create mode 100644 gdb-physname-expand-completer.patch create mode 100644 gdb-upstream.patch diff --git a/.gitignore b/.gitignore index b002bf3..76fd2dc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ /libstdc++-v3-python-r155978.tar.bz2 -/gdb-7.2.90.20110411.tar.bz2 +/gdb-7.2.90.20110429.tar.bz2 diff --git a/gdb-archer.patch b/gdb-archer.patch index 98862f2..bfbec9b 100644 --- a/gdb-archer.patch +++ b/gdb-archer.patch @@ -11,10 +11,10 @@ archer-tromey-python archer-sergiodj-stap-fedora15jk -diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h -index 21ec38f..d50823a 100644 ---- a/bfd/elf-bfd.h -+++ b/bfd/elf-bfd.h +Index: gdb-7.2.90.20110429/bfd/elf-bfd.h +=================================================================== +--- gdb-7.2.90.20110429.orig/bfd/elf-bfd.h 2011-03-14 16:54:57.000000000 +0100 ++++ gdb-7.2.90.20110429/bfd/elf-bfd.h 2011-04-29 09:40:46.000000000 +0200 @@ -1476,6 +1476,15 @@ enum Tag_compatibility = 32 }; @@ -43,11 +43,11 @@ index 21ec38f..d50823a 100644 /* True if the bfd contains symbols that have the STT_GNU_IFUNC symbol type. Used to set the osabi field in the ELF header structure. */ -diff --git a/bfd/elf.c b/bfd/elf.c -index f69abf2..3c038eb 100644 ---- a/bfd/elf.c -+++ b/bfd/elf.c -@@ -8416,6 +8416,37 @@ elfobj_grok_gnu_note (bfd *abfd, Elf_Internal_Note *note) +Index: gdb-7.2.90.20110429/bfd/elf.c +=================================================================== +--- gdb-7.2.90.20110429.orig/bfd/elf.c 2011-03-14 16:54:58.000000000 +0100 ++++ gdb-7.2.90.20110429/bfd/elf.c 2011-04-29 09:40:46.000000000 +0200 +@@ -8416,6 +8416,37 @@ elfobj_grok_gnu_note (bfd *abfd, Elf_Int } } @@ -85,7 +85,7 @@ index f69abf2..3c038eb 100644 static bfd_boolean elfcore_netbsd_get_lwpid (Elf_Internal_Note *note, int *lwpidp) { -@@ -9189,6 +9220,12 @@ elf_parse_notes (bfd *abfd, char *buf, size_t size, file_ptr offset) +@@ -9189,6 +9220,12 @@ elf_parse_notes (bfd *abfd, char *buf, s if (! elfobj_grok_gnu_note (abfd, &in)) return FALSE; } @@ -98,11 +98,11 @@ index f69abf2..3c038eb 100644 break; } -diff --git a/gdb/Makefile.in b/gdb/Makefile.in -index 6abd87a..93d8dae 100644 ---- a/gdb/Makefile.in -+++ b/gdb/Makefile.in -@@ -721,8 +721,8 @@ SFILES = ada-exp.y ada-lang.c ada-typeprint.c ada-valprint.c ada-tasks.c \ +Index: gdb-7.2.90.20110429/gdb/Makefile.in +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/Makefile.in 2011-03-30 08:55:39.000000000 +0200 ++++ gdb-7.2.90.20110429/gdb/Makefile.in 2011-04-29 09:40:46.000000000 +0200 +@@ -721,8 +721,8 @@ SFILES = ada-exp.y ada-lang.c ada-typepr sentinel-frame.c \ serial.c ser-base.c ser-unix.c \ solib.c solib-target.c source.c \ @@ -113,7 +113,7 @@ index 6abd87a..93d8dae 100644 target.c target-descriptions.c target-memory.c \ thread.c top.c tracepoint.c \ trad-frame.c \ -@@ -814,7 +814,7 @@ osdata.h procfs.h python/py-event.h python/py-events.h python/py-stopevent.h \ +@@ -814,7 +814,7 @@ osdata.h procfs.h python/py-event.h pyth python/python-internal.h python/python.h ravenscar-thread.h record.h \ solib-darwin.h solib-ia64-hpux.h solib-spu.h windows-nat.h xcoffread.h \ gnulib/extra/arg-nonnull.h gnulib/extra/c++defs.h gnulib/extra/warn-on-use.h \ @@ -122,7 +122,7 @@ index 6abd87a..93d8dae 100644 # Header files that already have srcdir in them, or which are in objdir. -@@ -899,7 +899,7 @@ COMMON_OBS = $(DEPFILES) $(CONFIG_OBS) $(YYOBJ) \ +@@ -899,7 +899,7 @@ COMMON_OBS = $(DEPFILES) $(CONFIG_OBS) $ prologue-value.o memory-map.o memrange.o xml-support.o xml-syscall.o \ target-descriptions.o target-memory.o xml-tdesc.o xml-builtin.o \ inferior.o osdata.o gdb_usleep.o record.o gcore.o \ @@ -131,7 +131,7 @@ index 6abd87a..93d8dae 100644 TSOBS = inflow.o -@@ -1320,6 +1320,12 @@ stamp-h: $(srcdir)/config.in config.status +@@ -1320,6 +1320,12 @@ stamp-h: $(srcdir)/config.in config.stat CONFIG_LINKS= \ $(SHELL) config.status @@ -144,10 +144,10 @@ index 6abd87a..93d8dae 100644 config.status: $(srcdir)/configure configure.tgt configure.host $(SHELL) config.status --recheck -diff --git a/gdb/NEWS b/gdb/NEWS -index 8692e2f..c22bf0d 100644 ---- a/gdb/NEWS -+++ b/gdb/NEWS +Index: gdb-7.2.90.20110429/gdb/NEWS +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/NEWS 2011-03-31 16:32:48.000000000 +0200 ++++ gdb-7.2.90.20110429/gdb/NEWS 2011-04-29 09:40:46.000000000 +0200 @@ -36,6 +36,10 @@ Initial support for the OpenCL C language (http://www.khronos.org/opencl) has been integrated into GDB. @@ -159,11 +159,11 @@ index 8692e2f..c22bf0d 100644 * Python scripting ** The function gdb.Write now accepts an optional keyword 'stream'. -diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c -index 0a0b09f..4546e93 100644 ---- a/gdb/ada-lang.c -+++ b/gdb/ada-lang.c -@@ -11422,6 +11422,7 @@ ada_operator_length (const struct expression *exp, int pc, int *oplenp, +Index: gdb-7.2.90.20110429/gdb/ada-lang.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/ada-lang.c 2011-04-20 22:10:29.000000000 +0200 ++++ gdb-7.2.90.20110429/gdb/ada-lang.c 2011-04-29 09:40:46.000000000 +0200 +@@ -11393,6 +11393,7 @@ ada_operator_length (const struct expres static int ada_operator_check (struct expression *exp, int pos, @@ -171,7 +171,7 @@ index 0a0b09f..4546e93 100644 int (*objfile_func) (struct objfile *objfile, void *data), void *data) { -@@ -11436,12 +11437,15 @@ ada_operator_check (struct expression *exp, int pos, +@@ -11407,12 +11408,15 @@ ada_operator_check (struct expression *e break; default: @@ -189,11 +189,11 @@ index 0a0b09f..4546e93 100644 && (*objfile_func) (TYPE_OBJFILE (type), data)) return 1; -diff --git a/gdb/amd64-linux-nat.c b/gdb/amd64-linux-nat.c -index a869f85..c59daa0 100644 ---- a/gdb/amd64-linux-nat.c -+++ b/gdb/amd64-linux-nat.c -@@ -265,18 +265,11 @@ amd64_linux_store_inferior_registers (struct target_ops *ops, +Index: gdb-7.2.90.20110429/gdb/amd64-linux-nat.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/amd64-linux-nat.c 2011-01-07 20:36:15.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/amd64-linux-nat.c 2011-04-29 09:40:46.000000000 +0200 +@@ -265,18 +265,11 @@ amd64_linux_store_inferior_registers (st /* Support for debug registers. */ @@ -213,7 +213,7 @@ index a869f85..c59daa0 100644 /* FIXME: kettenis/2001-03-27: Calling perror_with_name if the ptrace call fails breaks debugging remote targets. The correct way to fix this is to add the hardware breakpoint and watchpoint -@@ -298,14 +291,8 @@ amd64_linux_dr_get (ptid_t ptid, int regnum) +@@ -298,14 +291,8 @@ amd64_linux_dr_get (ptid_t ptid, int reg /* Set debug register REGNUM to VALUE in only the one LWP of PTID. */ static void @@ -229,7 +229,7 @@ index a869f85..c59daa0 100644 errno = 0; ptrace (PTRACE_POKEUSER, tid, offsetof (struct user, u_debugreg[regnum]), value); -@@ -313,35 +300,96 @@ amd64_linux_dr_set (ptid_t ptid, int regnum, unsigned long value) +@@ -313,35 +300,96 @@ amd64_linux_dr_set (ptid_t ptid, int reg perror_with_name (_("Couldn't write debug register")); } @@ -411,11 +411,11 @@ index a869f85..c59daa0 100644 } -diff --git a/gdb/ax-gdb.c b/gdb/ax-gdb.c -index d1736e1..3e54716 100644 ---- a/gdb/ax-gdb.c -+++ b/gdb/ax-gdb.c -@@ -2001,7 +2001,8 @@ gen_expr (struct expression *exp, union exp_element **pc, +Index: gdb-7.2.90.20110429/gdb/ax-gdb.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/ax-gdb.c 2011-02-24 08:39:47.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/ax-gdb.c 2011-04-29 09:40:46.000000000 +0200 +@@ -2001,7 +2001,8 @@ gen_expr (struct expression *exp, union case OP_INTERNALVAR: { @@ -425,7 +425,7 @@ index d1736e1..3e54716 100644 struct trace_state_variable *tsv; (*pc) += 3; -@@ -2015,7 +2016,7 @@ gen_expr (struct expression *exp, union exp_element **pc, +@@ -2015,7 +2016,7 @@ gen_expr (struct expression *exp, union value->kind = axs_rvalue; value->type = builtin_type (exp->gdbarch)->builtin_long_long; } @@ -434,10 +434,10 @@ index d1736e1..3e54716 100644 error (_("$%s is not a trace state variable; GDB agent " "expressions cannot use convenience variables."), name); } -diff --git a/gdb/block.c b/gdb/block.c -index 776ae53..3544cf2 100644 ---- a/gdb/block.c -+++ b/gdb/block.c +Index: gdb-7.2.90.20110429/gdb/block.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/block.c 2011-01-01 16:32:57.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/block.c 2011-04-29 09:40:46.000000000 +0200 @@ -322,3 +322,21 @@ allocate_block (struct obstack *obstack) return bl; @@ -460,21 +460,21 @@ index 776ae53..3544cf2 100644 + + return SYMBOL_SYMTAB (func)->objfile; +} -diff --git a/gdb/block.h b/gdb/block.h -index 07d5bc7..fad89b1 100644 ---- a/gdb/block.h -+++ b/gdb/block.h -@@ -167,4 +167,6 @@ extern const struct block *block_global_block (const struct block *block); +Index: gdb-7.2.90.20110429/gdb/block.h +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/block.h 2011-01-01 16:32:57.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/block.h 2011-04-29 09:40:46.000000000 +0200 +@@ -167,4 +167,6 @@ extern const struct block *block_global_ extern struct block *allocate_block (struct obstack *obstack); +extern struct objfile *block_objfile (const struct block *block); + #endif /* BLOCK_H */ -diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c -index 2a25c8d..e8c771c 100644 ---- a/gdb/breakpoint.c -+++ b/gdb/breakpoint.c +Index: gdb-7.2.90.20110429/gdb/breakpoint.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/breakpoint.c 2011-04-15 06:18:34.000000000 +0200 ++++ gdb-7.2.90.20110429/gdb/breakpoint.c 2011-04-29 09:40:46.000000000 +0200 @@ -63,6 +63,8 @@ #include "jit.h" #include "xml-syscall.h" @@ -484,7 +484,7 @@ index 2a25c8d..e8c771c 100644 #include "cli/cli-utils.h" /* readline include files */ -@@ -107,6 +109,9 @@ static void break_command_1 (char *, int, int); +@@ -107,6 +109,9 @@ static void break_command_1 (char *, int static void mention (struct breakpoint *); @@ -494,7 +494,7 @@ index 2a25c8d..e8c771c 100644 /* This function is used in gdbtk sources and thus can not be made static. */ struct breakpoint *set_raw_breakpoint (struct gdbarch *gdbarch, -@@ -1249,6 +1254,9 @@ update_watchpoint (struct breakpoint *b, int reparse) +@@ -1249,6 +1254,9 @@ update_watchpoint (struct breakpoint *b, if (!watchpoint_in_thread_scope (b)) return; @@ -504,7 +504,7 @@ index 2a25c8d..e8c771c 100644 if (b->disposition == disp_del_at_next_stop) return; -@@ -1520,6 +1528,40 @@ should_be_inserted (struct bp_location *bl) +@@ -1520,6 +1528,40 @@ should_be_inserted (struct bp_location * return 1; } @@ -545,7 +545,7 @@ index 2a25c8d..e8c771c 100644 /* Insert a low-level "breakpoint" of some type. BL is the breakpoint location. Any error messages are printed to TMP_ERROR_STREAM; and DISABLED_BREAKS, and HW_BREAKPOINT_ERROR are used to report problems. -@@ -1616,6 +1658,8 @@ insert_bp_location (struct bp_location *bl, +@@ -1616,6 +1658,8 @@ insert_bp_location (struct bp_location * else val = target_insert_breakpoint (bl->gdbarch, &bl->target_info); @@ -659,7 +659,7 @@ index 2a25c8d..e8c771c 100644 for (i = 0; i < NUM_LONGJMP_NAMES; i++) { struct breakpoint *b; -@@ -2335,6 +2422,31 @@ create_exception_master_breakpoint (void) +@@ -2335,6 +2422,31 @@ create_exception_master_breakpoint (void bp_objfile_data = get_breakpoint_objfile_data (objfile); @@ -691,7 +691,7 @@ index 2a25c8d..e8c771c 100644 if (msym_not_found_p (bp_objfile_data->exception_msym)) continue; -@@ -2553,6 +2665,8 @@ remove_breakpoint_1 (struct bp_location *bl, insertion_state_t is) +@@ -2553,6 +2665,8 @@ remove_breakpoint_1 (struct bp_location val = target_remove_hw_breakpoint (bl->gdbarch, &bl->target_info); else val = target_remove_breakpoint (bl->gdbarch, &bl->target_info); @@ -700,7 +700,7 @@ index 2a25c8d..e8c771c 100644 } else { -@@ -5902,6 +6016,7 @@ set_raw_breakpoint (struct gdbarch *gdbarch, +@@ -5902,6 +6016,7 @@ set_raw_breakpoint (struct gdbarch *gdba b->loc->requested_address = sal.pc; b->loc->address = adjusted_address; b->loc->pspace = sal.pspace; @@ -708,7 +708,7 @@ index 2a25c8d..e8c771c 100644 /* Store the program space that was used to set the breakpoint, for breakpoint resetting. */ -@@ -7057,6 +7172,7 @@ clone_momentary_breakpoint (struct breakpoint *orig) +@@ -7057,6 +7172,7 @@ clone_momentary_breakpoint (struct break copy->loc->address = orig->loc->address; copy->loc->section = orig->loc->section; copy->loc->pspace = orig->loc->pspace; @@ -716,7 +716,7 @@ index 2a25c8d..e8c771c 100644 if (orig->source_file == NULL) copy->source_file = NULL; -@@ -7280,6 +7396,7 @@ add_location_to_breakpoint (struct breakpoint *b, +@@ -7280,6 +7396,7 @@ add_location_to_breakpoint (struct break loc->address = adjust_breakpoint_address (loc->gdbarch, loc->requested_address, b->type); loc->pspace = sal->pspace; @@ -724,7 +724,7 @@ index 2a25c8d..e8c771c 100644 gdb_assert (loc->pspace != NULL); loc->section = sal->section; -@@ -7629,6 +7746,16 @@ create_breakpoints_sal (struct gdbarch *gdbarch, +@@ -7629,6 +7746,16 @@ create_breakpoints_sal (struct gdbarch * { int i; @@ -741,7 +741,7 @@ index 2a25c8d..e8c771c 100644 for (i = 0; i < sals.nelts; ++i) { struct symtabs_and_lines expanded = -@@ -8154,7 +8281,7 @@ create_breakpoint (struct gdbarch *gdbarch, +@@ -8154,7 +8281,7 @@ create_breakpoint (struct gdbarch *gdbar mention (b); } @@ -750,7 +750,7 @@ index 2a25c8d..e8c771c 100644 { warning (_("Multiple breakpoints were set.\nUse the " "\"delete\" command to delete unwanted breakpoints.")); -@@ -9026,6 +9153,7 @@ watch_command_1 (char *arg, int accessflag, int from_tty, +@@ -9026,6 +9153,7 @@ watch_command_1 (char *arg, int accessfl b = set_raw_breakpoint_without_location (NULL, bp_type); set_breakpoint_number (internal, b); b->thread = thread; @@ -758,7 +758,7 @@ index 2a25c8d..e8c771c 100644 b->disposition = disp_donttouch; b->exp = exp; b->exp_valid_block = exp_valid_block; -@@ -10188,6 +10316,9 @@ update_global_location_list (int should_insert) +@@ -10188,6 +10316,9 @@ update_global_location_list (int should_ int keep_in_target = 0; int removed = 0; @@ -768,7 +768,7 @@ index 2a25c8d..e8c771c 100644 /* Skip LOCP entries which will definitely never be needed. Stop either at or being the one matching OLD_LOC. */ while (locp < bp_location + bp_location_count -@@ -10952,12 +11083,14 @@ update_breakpoint_locations (struct breakpoint *b, +@@ -10952,12 +11083,14 @@ update_breakpoint_locations (struct brea On return, FOUND will be 1 if any SaL was found, zero otherwise. */ static struct symtabs_and_lines @@ -784,7 +784,7 @@ index 2a25c8d..e8c771c 100644 s = addr_string; marker_spec = b->type == bp_static_tracepoint && is_marker_spec (s); -@@ -10976,8 +11109,27 @@ addr_string_to_sals (struct breakpoint *b, char *addr_string, int *found) +@@ -10976,8 +11109,27 @@ addr_string_to_sals (struct breakpoint * error (_("marker %s not found"), b->static_trace_marker_id); } else @@ -814,7 +814,7 @@ index 2a25c8d..e8c771c 100644 } if (e.reason < 0) { -@@ -11010,7 +11162,7 @@ addr_string_to_sals (struct breakpoint *b, char *addr_string, int *found) +@@ -11010,7 +11162,7 @@ addr_string_to_sals (struct breakpoint * if (!not_found) { @@ -879,7 +879,7 @@ index 2a25c8d..e8c771c 100644 /* This help string is used for the break, hbreak, tbreak and thbreak commands. It is defined as a macro to prevent duplication. -@@ -13136,4 +13311,7 @@ range (including START-LOCATION and END-LOCATION).")); +@@ -13136,4 +13311,7 @@ range (including START-LOCATION and END- automatic_hardware_breakpoints = 1; observer_attach_about_to_proceed (breakpoint_about_to_proceed); @@ -887,10 +887,10 @@ index 2a25c8d..e8c771c 100644 + observer_attach_mark_used (breakpoint_types_mark_used); +#endif } -diff --git a/gdb/breakpoint.h b/gdb/breakpoint.h -index 7a9c2d4..8a91019 100644 ---- a/gdb/breakpoint.h -+++ b/gdb/breakpoint.h +Index: gdb-7.2.90.20110429/gdb/breakpoint.h +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/breakpoint.h 2011-03-31 16:32:48.000000000 +0200 ++++ gdb-7.2.90.20110429/gdb/breakpoint.h 2011-04-29 09:40:46.000000000 +0200 @@ -363,6 +363,11 @@ struct bp_location processor's architectual constraints. */ CORE_ADDR requested_address; @@ -903,7 +903,7 @@ index 7a9c2d4..8a91019 100644 char *function_name; /* Details of the placed breakpoint, when inserted. */ -@@ -1237,4 +1242,11 @@ extern struct breakpoint *iterate_over_breakpoints (int (*) (struct breakpoint * +@@ -1233,4 +1238,11 @@ extern struct breakpoint *iterate_over_b extern int user_breakpoint_p (struct breakpoint *); @@ -915,11 +915,11 @@ index 7a9c2d4..8a91019 100644 +extern void modify_semaphore (struct bp_location *location, int set); + #endif /* !defined (BREAKPOINT_H) */ -diff --git a/gdb/c-typeprint.c b/gdb/c-typeprint.c -index 2e23dd7..aefc807 100644 ---- a/gdb/c-typeprint.c -+++ b/gdb/c-typeprint.c -@@ -625,9 +625,14 @@ c_type_print_varspec_suffix (struct type *type, +Index: gdb-7.2.90.20110429/gdb/c-typeprint.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/c-typeprint.c 2011-03-22 18:35:22.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/c-typeprint.c 2011-04-29 09:40:46.000000000 +0200 +@@ -625,9 +625,14 @@ c_type_print_varspec_suffix (struct type fprintf_filtered (stream, ")"); fprintf_filtered (stream, "["); @@ -937,11 +937,11 @@ index 2e23dd7..aefc807 100644 fprintf_filtered (stream, "]"); c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, -diff --git a/gdb/cli/cli-utils.c b/gdb/cli/cli-utils.c -index 62a2f12..dd2824f 100644 ---- a/gdb/cli/cli-utils.c -+++ b/gdb/cli/cli-utils.c -@@ -245,3 +245,32 @@ remove_trailing_whitespace (const char *start, char *s) +Index: gdb-7.2.90.20110429/gdb/cli/cli-utils.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/cli/cli-utils.c 2011-03-16 22:12:12.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/cli/cli-utils.c 2011-04-29 09:40:46.000000000 +0200 +@@ -245,3 +245,32 @@ remove_trailing_whitespace (const char * return s; } @@ -974,10 +974,10 @@ index 62a2f12..dd2824f 100644 + + return copy; +} -diff --git a/gdb/cli/cli-utils.h b/gdb/cli/cli-utils.h -index 8a6e5b3..ed1a63e 100644 ---- a/gdb/cli/cli-utils.h -+++ b/gdb/cli/cli-utils.h +Index: gdb-7.2.90.20110429/gdb/cli/cli-utils.h +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/cli/cli-utils.h 2011-03-16 22:12:12.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/cli/cli-utils.h 2011-04-29 09:40:46.000000000 +0200 @@ -103,4 +103,11 @@ extern char *skip_to_space (char *inp); START. */ @@ -990,11 +990,11 @@ index 8a6e5b3..ed1a63e 100644 +extern char *extract_arg (char **arg); + #endif /* CLI_UTILS_H */ -diff --git a/gdb/coffread.c b/gdb/coffread.c -index b11dd73..0868a79 100644 ---- a/gdb/coffread.c -+++ b/gdb/coffread.c -@@ -2193,6 +2193,7 @@ static const struct sym_fns coff_sym_fns = +Index: gdb-7.2.90.20110429/gdb/coffread.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/coffread.c 2011-03-17 14:19:23.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/coffread.c 2011-04-29 09:40:46.000000000 +0200 +@@ -2193,6 +2193,7 @@ static const struct sym_fns coff_sym_fns default_symfile_relocate, /* sym_relocate: Relocate a debug section. */ @@ -1002,10 +1002,10 @@ index b11dd73..0868a79 100644 &psym_functions }; -diff --git a/gdb/data-directory/Makefile.in b/gdb/data-directory/Makefile.in -index 11cf2e6..9a2a8f8 100644 ---- a/gdb/data-directory/Makefile.in -+++ b/gdb/data-directory/Makefile.in +Index: gdb-7.2.90.20110429/gdb/data-directory/Makefile.in +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/data-directory/Makefile.in 2011-02-04 19:34:41.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/data-directory/Makefile.in 2011-04-29 09:40:46.000000000 +0200 @@ -52,11 +52,23 @@ SYSCALLS_FILES = \ PYTHON_DIR = python PYTHON_INSTALL_DIR = $(DESTDIR)$(GDB_DATADIR)/$(PYTHON_DIR) @@ -1033,10 +1033,10 @@ index 11cf2e6..9a2a8f8 100644 FLAGS_TO_PASS = \ "prefix=$(prefix)" \ -diff --git a/gdb/dbxread.c b/gdb/dbxread.c -index 51ddd9d..a59ae10 100644 ---- a/gdb/dbxread.c -+++ b/gdb/dbxread.c +Index: gdb-7.2.90.20110429/gdb/dbxread.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/dbxread.c 2011-03-23 19:23:54.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/dbxread.c 2011-04-29 09:40:46.000000000 +0200 @@ -1,6 +1,6 @@ /* Read dbx symbol tables and convert to internal format, for GDB. Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, @@ -1045,7 +1045,7 @@ index 51ddd9d..a59ae10 100644 Free Software Foundation, Inc. This file is part of GDB. -@@ -3587,6 +3587,7 @@ static const struct sym_fns aout_sym_fns = +@@ -3587,6 +3587,7 @@ static const struct sym_fns aout_sym_fns default_symfile_segments, /* Get segment information from a file. */ NULL, default_symfile_relocate, /* Relocate a debug section. */ @@ -1053,11 +1053,11 @@ index 51ddd9d..a59ae10 100644 &psym_functions }; -diff --git a/gdb/defs.h b/gdb/defs.h -index 9531c5a..b994645 100644 ---- a/gdb/defs.h -+++ b/gdb/defs.h -@@ -398,6 +398,8 @@ extern struct cleanup *make_cleanup_restore_page_info (void); +Index: gdb-7.2.90.20110429/gdb/defs.h +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/defs.h 2011-03-31 16:32:48.000000000 +0200 ++++ gdb-7.2.90.20110429/gdb/defs.h 2011-04-29 09:40:46.000000000 +0200 +@@ -398,6 +398,8 @@ extern struct cleanup *make_cleanup_rest extern struct cleanup * set_batch_flag_and_make_cleanup_restore_page_info (void); @@ -1066,10 +1066,10 @@ index 9531c5a..b994645 100644 extern char *gdb_realpath (const char *); extern char *xfullpath (const char *); -diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo -index c71d664..b66e426 100644 ---- a/gdb/doc/gdb.texinfo -+++ b/gdb/doc/gdb.texinfo +Index: gdb-7.2.90.20110429/gdb/doc/gdb.texinfo +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/doc/gdb.texinfo 2011-04-20 19:26:42.000000000 +0200 ++++ gdb-7.2.90.20110429/gdb/doc/gdb.texinfo 2011-04-29 09:40:46.000000000 +0200 @@ -1177,6 +1177,16 @@ for remote debugging. Run using @var{device} for your program's standard input and output. @c FIXME: kingdon thinks there is more to -tty. Investigate. @@ -1087,7 +1087,7 @@ index c71d664..b66e426 100644 @c resolve the situation of these eventually @item -tui @cindex @code{--tui} -@@ -3286,6 +3296,7 @@ all breakpoints in that range are operated on. +@@ -3286,6 +3296,7 @@ all breakpoints in that range are operat * Conditions:: Break conditions * Break Commands:: Breakpoint command lists * Save Breakpoints:: How to save breakpoints in a file @@ -1095,7 +1095,7 @@ index c71d664..b66e426 100644 * Error in Breakpoints:: ``Cannot insert breakpoints'' * Breakpoint-related Warnings:: ``Breakpoint address adjusted...'' @end menu -@@ -4499,6 +4510,50 @@ and remove the breakpoint definitions you're not interested in, or +@@ -4499,6 +4510,50 @@ and remove the breakpoint definitions yo that can no longer be recreated. @end table @@ -1146,7 +1146,7 @@ index c71d664..b66e426 100644 @c @ifclear BARETARGET @node Error in Breakpoints @subsection ``Cannot insert breakpoints'' -@@ -6414,6 +6469,29 @@ specify the function unambiguously, e.g., if there are several +@@ -6414,6 +6469,29 @@ specify the function unambiguously, e.g. functions with identical names in different source files. @end table @@ -1176,7 +1176,7 @@ index c71d664..b66e426 100644 @end table -@@ -8500,6 +8578,10 @@ to match the format in which the data was printed. +@@ -8500,6 +8578,10 @@ to match the format in which the data wa The variable @code{$_exitcode} is automatically set to the exit code when the program being debugged terminates. @@ -1213,7 +1213,7 @@ index c71d664..b66e426 100644 >print 23 >end 23 -@@ -20724,6 +20814,14 @@ in a Python script. This can be controlled using @code{maint set +@@ -20724,6 +20814,14 @@ in a Python script. This can be control python print-stack}: if @code{on}, the default, then Python stack printing is enabled; if @code{off}, then Python stack printing is disabled. @@ -1243,11 +1243,11 @@ index c71d664..b66e426 100644 @cindex python stdout @cindex python pagination At startup, @value{GDBN} overrides Python's @code{sys.stdout} and -diff --git a/gdb/doc/gdbint.texinfo b/gdb/doc/gdbint.texinfo -index a494707..d5b9cf8 100644 ---- a/gdb/doc/gdbint.texinfo -+++ b/gdb/doc/gdbint.texinfo -@@ -2104,6 +2104,18 @@ time, and so we attempt to handle symbols incrementally. For instance, +Index: gdb-7.2.90.20110429/gdb/doc/gdbint.texinfo +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/doc/gdbint.texinfo 2011-02-04 20:10:12.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/doc/gdbint.texinfo 2011-04-29 09:40:46.000000000 +0200 +@@ -2104,6 +2104,18 @@ time, and so we attempt to handle symbol we create @dfn{partial symbol tables} consisting of only selected symbols, and only expand them to full symbol tables when necessary. @@ -1266,7 +1266,7 @@ index a494707..d5b9cf8 100644 @section Symbol Reading @cindex symbol reading -@@ -2196,6 +2208,7 @@ symtab. Upon return, @code{pst->readin} should have been set to 1, and +@@ -2196,6 +2208,7 @@ symtab. Upon return, @code{pst->readin} zero if there were no symbols in that part of the symbol file. @end table @@ -1274,7 +1274,7 @@ index a494707..d5b9cf8 100644 @section Partial Symbol Tables @value{GDBN} has three types of symbol tables: -@@ -2297,6 +2310,7 @@ and partial symbol tables behind a set of function pointers known as +@@ -2297,6 +2310,7 @@ and partial symbol tables behind a set o the @dfn{quick symbol functions}. These are documented in @file{symfile.h}. @@ -1282,7 +1282,7 @@ index a494707..d5b9cf8 100644 @section Types @unnumberedsubsec Fundamental Types (e.g., @code{FT_VOID}, @code{FT_BOOLEAN}). -@@ -2319,6 +2333,7 @@ types map to one @code{TYPE_CODE_*} type, and are distinguished by +@@ -2319,6 +2333,7 @@ types map to one @code{TYPE_CODE_*} type other members of the type struct, such as whether the type is signed or unsigned, and how many bits it uses. @@ -1290,7 +1290,7 @@ index a494707..d5b9cf8 100644 @unnumberedsubsec Builtin Types (e.g., @code{builtin_type_void}, @code{builtin_type_char}). These are instances of type structs that roughly correspond to -@@ -2333,6 +2348,7 @@ only one instance exists, while @file{c-lang.c} builds as many +@@ -2333,6 +2348,7 @@ only one instance exists, while @file{c- @code{TYPE_CODE_INT} types as needed, with each one associated with some particular objfile. @@ -1306,7 +1306,7 @@ index a494707..d5b9cf8 100644 @section Debugging File Formats This section describes characteristics of debugging information that -@@ -2489,6 +2506,7 @@ DWARF 3 is an improved version of DWARF 2. +@@ -2489,6 +2506,7 @@ DWARF 3 is an improved version of DWARF @cindex SOM debugging info Like COFF, the SOM definition includes debugging information. @@ -1314,7 +1314,7 @@ index a494707..d5b9cf8 100644 @section Adding a New Symbol Reader to @value{GDBN} @cindex adding debugging info reader -@@ -2511,6 +2529,7 @@ will only ever be implemented by one object file format may be called +@@ -2511,6 +2529,7 @@ will only ever be implemented by one obj directly. This interface should be described in a file @file{bfd/lib@var{xyz}.h}, which is included by @value{GDBN}. @@ -1322,7 +1322,7 @@ index a494707..d5b9cf8 100644 @section Memory Management for Symbol Files Most memory associated with a loaded symbol file is stored on -@@ -2522,10 +2541,45 @@ released when the objfile is unloaded or reloaded. Therefore one +@@ -2522,10 +2541,45 @@ released when the objfile is unloaded or objfile must not reference symbol or type data from another objfile; they could be unloaded at different times. @@ -1372,11 +1372,11 @@ index a494707..d5b9cf8 100644 @node Language Support -diff --git a/gdb/doc/observer.texi b/gdb/doc/observer.texi -index d16c865..946ad95 100644 ---- a/gdb/doc/observer.texi -+++ b/gdb/doc/observer.texi -@@ -223,6 +223,11 @@ Bytes from @var{data} to @var{data} + @var{len} have been written +Index: gdb-7.2.90.20110429/gdb/doc/observer.texi +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/doc/observer.texi 2011-01-05 06:09:54.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/doc/observer.texi 2011-04-29 09:40:46.000000000 +0200 +@@ -223,6 +223,11 @@ Bytes from @var{data} to @var{data} + @v to the current inferior at @var{addr}. @end deftypefun @@ -1388,11 +1388,11 @@ index d16c865..946ad95 100644 @deftypefun void test_notification (int @var{somearg}) This observer is used for internal testing. Do not use. See testsuite/gdb.gdb/observer.exp. -diff --git a/gdb/dwarf2expr.c b/gdb/dwarf2expr.c -index 91fccf9..4cd5949 100644 ---- a/gdb/dwarf2expr.c -+++ b/gdb/dwarf2expr.c -@@ -912,6 +912,13 @@ execute_stack_op (struct dwarf_expr_context *ctx, +Index: gdb-7.2.90.20110429/gdb/dwarf2expr.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/dwarf2expr.c 2011-03-22 22:06:32.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/dwarf2expr.c 2011-04-29 09:40:46.000000000 +0200 +@@ -912,6 +912,13 @@ execute_stack_op (struct dwarf_expr_cont ctx->num_pieces = 0; goto abort_expression; @@ -1406,10 +1406,10 @@ index 91fccf9..4cd5949 100644 default: error (_("Unhandled dwarf expression opcode 0x%x"), op); } -diff --git a/gdb/dwarf2expr.h b/gdb/dwarf2expr.h -index 78ff53f..c83f23d 100644 ---- a/gdb/dwarf2expr.h -+++ b/gdb/dwarf2expr.h +Index: gdb-7.2.90.20110429/gdb/dwarf2expr.h +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/dwarf2expr.h 2011-02-27 17:25:37.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/dwarf2expr.h 2011-04-29 09:40:46.000000000 +0200 @@ -114,9 +114,15 @@ struct dwarf_expr_context #if 0 /* Not yet implemented. */ @@ -1427,10 +1427,10 @@ index 78ff53f..c83f23d 100644 /* The current depth of dwarf expression recursion, via DW_OP_call*, DW_OP_fbreg, DW_OP_push_object_address, etc., and the maximum -diff --git a/gdb/dwarf2loc.c b/gdb/dwarf2loc.c -index 4c13307..9b0e1ad 100644 ---- a/gdb/dwarf2loc.c -+++ b/gdb/dwarf2loc.c +Index: gdb-7.2.90.20110429/gdb/dwarf2loc.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/dwarf2loc.c 2011-03-22 22:06:33.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/dwarf2loc.c 2011-04-29 09:40:46.000000000 +0200 @@ -134,6 +134,9 @@ struct dwarf_expr_baton { struct frame_info *frame; @@ -1441,7 +1441,7 @@ index 4c13307..9b0e1ad 100644 }; /* Helper functions for dwarf2_evaluate_loc_desc. */ -@@ -202,23 +205,33 @@ dwarf_expr_frame_base_1 (struct symbol *framefunc, CORE_ADDR pc, +@@ -202,23 +205,33 @@ dwarf_expr_frame_base_1 (struct symbol * symbaton = SYMBOL_LOCATION_BATON (framefunc); *start = dwarf2_find_location_expression (symbaton, length, pc); } @@ -1461,7 +1461,7 @@ index 4c13307..9b0e1ad 100644 + gdb_assert (symbaton != NULL); + *start = symbaton->data; + *length = symbaton->size; - } ++ } + else if (SYMBOL_COMPUTED_OPS (framefunc) == &dwarf2_missing_funcs) + { + struct dwarf2_locexpr_baton *symbaton; @@ -1470,7 +1470,7 @@ index 4c13307..9b0e1ad 100644 + gdb_assert (symbaton == NULL); + *start = NULL; + *length = 0; /* unused */ -+ } + } + else + internal_error (__FILE__, __LINE__, + _("Unsupported SYMBOL_COMPUTED_OPS %p for \"%s\""), @@ -1484,7 +1484,7 @@ index 4c13307..9b0e1ad 100644 } /* Helper function for dwarf2_evaluate_loc_desc. Computes the CFA for -@@ -286,6 +299,172 @@ dwarf_expr_dwarf_call (struct dwarf_expr_context *ctx, size_t die_offset) +@@ -286,6 +299,172 @@ dwarf_expr_dwarf_call (struct dwarf_expr ctx->get_frame_pc, ctx->baton); } @@ -1657,7 +1657,7 @@ index 4c13307..9b0e1ad 100644 struct piece_closure { /* Reference count. */ -@@ -1072,11 +1251,8 @@ dwarf2_evaluate_loc_desc_full (struct type *type, struct frame_info *frame, +@@ -1072,11 +1251,8 @@ dwarf2_evaluate_loc_desc_full (struct ty LONGEST byte_offset) { struct value *retval; @@ -1669,7 +1669,7 @@ index 4c13307..9b0e1ad 100644 if (byte_offset < 0) invalid_synthetic_pointer (); -@@ -1089,38 +1265,14 @@ dwarf2_evaluate_loc_desc_full (struct type *type, struct frame_info *frame, +@@ -1089,38 +1265,14 @@ dwarf2_evaluate_loc_desc_full (struct ty return retval; } @@ -1714,7 +1714,7 @@ index 4c13307..9b0e1ad 100644 } if (ctx->num_pieces > 0) -@@ -1166,6 +1318,15 @@ dwarf2_evaluate_loc_desc_full (struct type *type, struct frame_info *frame, +@@ -1166,6 +1318,15 @@ dwarf2_evaluate_loc_desc_full (struct ty CORE_ADDR address = dwarf_expr_fetch_address (ctx, 0); int in_stack_memory = dwarf_expr_fetch_in_stack_memory (ctx, 0); @@ -1730,7 +1730,7 @@ index 4c13307..9b0e1ad 100644 retval = allocate_value_lazy (type); VALUE_LVAL (retval) = lval_memory; if (in_stack_memory) -@@ -2855,11 +3016,51 @@ loclist_tracepoint_var_ref (struct symbol *symbol, struct gdbarch *gdbarch, +@@ -2855,11 +3016,51 @@ loclist_tracepoint_var_ref (struct symbo dlbaton->per_cu); } @@ -1784,10 +1784,10 @@ index 4c13307..9b0e1ad 100644 + missing_describe_location, + missing_tracepoint_var_ref +}; -diff --git a/gdb/dwarf2loc.h b/gdb/dwarf2loc.h -index 96a490e..b0ebb06 100644 ---- a/gdb/dwarf2loc.h -+++ b/gdb/dwarf2loc.h +Index: gdb-7.2.90.20110429/gdb/dwarf2loc.h +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/dwarf2loc.h 2011-02-17 17:20:44.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/dwarf2loc.h 2011-04-29 09:40:46.000000000 +0200 @@ -107,6 +107,15 @@ struct dwarf2_loclist_baton extern const struct symbol_computed_ops dwarf2_locexpr_funcs; @@ -1804,11 +1804,11 @@ index 96a490e..b0ebb06 100644 /* Compile a DWARF location expression to an agent expression. -diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c -index ca6c98b..d176624 100644 ---- a/gdb/dwarf2read.c -+++ b/gdb/dwarf2read.c -@@ -1211,6 +1211,9 @@ static void fill_in_loclist_baton (struct dwarf2_cu *cu, +Index: gdb-7.2.90.20110429/gdb/dwarf2read.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/dwarf2read.c 2011-04-20 22:10:29.000000000 +0200 ++++ gdb-7.2.90.20110429/gdb/dwarf2read.c 2011-04-29 09:40:46.000000000 +0200 +@@ -1212,6 +1212,9 @@ static void fill_in_loclist_baton (struc struct dwarf2_loclist_baton *baton, struct attribute *attr); @@ -1818,7 +1818,7 @@ index ca6c98b..d176624 100644 static void dwarf2_symbol_mark_computed (struct attribute *attr, struct symbol *sym, struct dwarf2_cu *cu); -@@ -1245,6 +1248,9 @@ static void age_cached_comp_units (void); +@@ -1246,6 +1249,9 @@ static void age_cached_comp_units (void) static void free_one_cached_comp_unit (void *); @@ -1828,7 +1828,7 @@ index ca6c98b..d176624 100644 static struct type *set_die_type (struct die_info *, struct type *, struct dwarf2_cu *); -@@ -1269,6 +1275,9 @@ static struct type *get_die_type_at_offset (unsigned int, +@@ -1270,6 +1276,9 @@ static struct type *get_die_type_at_offs static struct type *get_die_type (struct die_info *die, struct dwarf2_cu *cu); @@ -1838,7 +1838,7 @@ index ca6c98b..d176624 100644 static void dwarf2_release_queue (void *dummy); static void queue_comp_unit (struct dwarf2_per_cu_data *per_cu, -@@ -7342,6 +7351,29 @@ process_enumeration_scope (struct die_info *die, struct dwarf2_cu *cu) +@@ -7359,6 +7368,29 @@ process_enumeration_scope (struct die_in new_symbol (die, this_type, cu); } @@ -1868,7 +1868,7 @@ index ca6c98b..d176624 100644 /* Extract all information from a DW_TAG_array_type DIE and put it in the DIE's type field. For now, this only handles one dimensional arrays. */ -@@ -7355,7 +7387,7 @@ read_array_type (struct die_info *die, struct dwarf2_cu *cu) +@@ -7372,7 +7404,7 @@ read_array_type (struct die_info *die, s struct type *element_type, *range_type, *index_type; struct type **range_types = NULL; struct attribute *attr; @@ -1877,7 +1877,7 @@ index ca6c98b..d176624 100644 struct cleanup *back_to; char *name; -@@ -7408,17 +7440,19 @@ read_array_type (struct die_info *die, struct dwarf2_cu *cu) +@@ -7425,17 +7457,19 @@ read_array_type (struct die_info *die, s type = element_type; if (read_array_order (die, cu) == DW_ORD_col_major) @@ -1908,7 +1908,7 @@ index ca6c98b..d176624 100644 /* Understand Dwarf2 support for vector types (like they occur on the PowerPC w/ AltiVec). Gcc just adds another attribute to the -@@ -7911,29 +7945,114 @@ read_tag_string_type (struct die_info *die, struct dwarf2_cu *cu) +@@ -7928,29 +7962,114 @@ read_tag_string_type (struct die_info *d struct gdbarch *gdbarch = get_objfile_arch (objfile); struct type *type, *range_type, *index_type, *char_type; struct attribute *attr; @@ -1927,10 +1927,9 @@ index ca6c98b..d176624 100644 attr = dwarf2_attr (die, DW_AT_string_length, cu); - if (attr) -- { -- length = DW_UNSND (attr); + if (attr && attr_form_is_block (attr)) -+ { + { +- length = DW_UNSND (attr); + /* Security check for a size overflow. */ + if (DW_BLOCK (attr)->size + 2 < DW_BLOCK (attr)->size) + TYPE_HIGH_BOUND (range_type) = 1; @@ -2037,7 +2036,7 @@ index ca6c98b..d176624 100644 char_type = language_string_char_type (cu->language_defn, gdbarch); type = create_string_type (NULL, char_type, range_type); -@@ -8218,8 +8337,7 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu) +@@ -8235,8 +8354,7 @@ read_subrange_type (struct die_info *die struct type *base_type; struct type *range_type; struct attribute *attr; @@ -2047,7 +2046,7 @@ index ca6c98b..d176624 100644 char *name; LONGEST negative_mask; -@@ -8232,53 +8350,126 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu) +@@ -8249,53 +8367,126 @@ read_subrange_type (struct die_info *die if (range_type) return range_type; @@ -2078,7 +2077,24 @@ index ca6c98b..d176624 100644 + + attr = dwarf2_attr (die, DW_AT_lower_bound, cu); + if (attr && attr_form_is_block (attr) && cu->language != language_ada) -+ { + { +- if (attr->form == DW_FORM_block1 || is_ref_attr (attr)) +- { +- /* GCC encodes arrays with unspecified or dynamic length +- with a DW_FORM_block1 attribute or a reference attribute. +- FIXME: GDB does not yet know how to handle dynamic +- arrays properly, treat them as arrays with unspecified +- length for now. +- +- FIXME: jimb/2003-09-22: GDB does not really know +- how to handle arrays of unspecified length +- either; we just represent them as zero-length +- arrays. Choose an appropriate upper bound given +- the lower bound we've computed above. */ +- high = low - 1; +- } +- else +- high = dwarf2_get_attr_constant_value (attr, 1); + TYPE_RANGE_DATA (range_type)->low.kind = RANGE_BOUND_KIND_DWARF_BLOCK; + TYPE_RANGE_DATA (range_type)->low.u.dwarf_block = + dwarf2_attr_to_locexpr_baton (attr, cu); @@ -2104,29 +2120,17 @@ index ca6c98b..d176624 100644 + TYPE_DYNAMIC (range_type) = 1; + /* For setting a default if DW_AT_UPPER_BOUND would be missing. */ + low = 0; -+ } -+ else + } + else { -- if (attr->form == DW_FORM_block1 || is_ref_attr (attr)) -- { -- /* GCC encodes arrays with unspecified or dynamic length -- with a DW_FORM_block1 attribute or a reference attribute. -- FIXME: GDB does not yet know how to handle dynamic -- arrays properly, treat them as arrays with unspecified -- length for now. -- -- FIXME: jimb/2003-09-22: GDB does not really know -- how to handle arrays of unspecified length -- either; we just represent them as zero-length -- arrays. Choose an appropriate upper bound given -- the lower bound we've computed above. */ -- high = low - 1; -- } +- attr = dwarf2_attr (die, DW_AT_count, cu); +- if (attr) + if (attr && attr_form_is_constant (attr)) + low = dwarf2_get_attr_constant_value (attr, 0); - else -- high = dwarf2_get_attr_constant_value (attr, 1); -+ { ++ else + { +- int count = dwarf2_get_attr_constant_value (attr, 1); +- high = low + count - 1; + if (cu->language == language_fortran) + { + /* FORTRAN implies a lower bound of 1, if not given. */ @@ -2138,30 +2142,25 @@ index ca6c98b..d176624 100644 + LANGUAGE_C and LANGUAGE_CPLUS. */ + low = 0; + } -+ } + } + if (!TYPE_UNSIGNED (base_type) && (low & negative_mask)) + low |= negative_mask; + TYPE_LOW_BOUND (range_type) = low; + if (low >= 0) + TYPE_UNSIGNED (range_type) = 1; - } -- else ++ } + + attr = dwarf2_attr (die, DW_AT_upper_bound, cu); + if (!attr || (!attr_form_is_block (attr) && !attr_form_is_constant (attr) + && !is_ref_attr (attr))) - { - attr = dwarf2_attr (die, DW_AT_count, cu); -- if (attr) -- { -- int count = dwarf2_get_attr_constant_value (attr, 1); -- high = low + count - 1; ++ { ++ attr = dwarf2_attr (die, DW_AT_count, cu); + /* It does not hurt but it is needlessly ineffective in check_typedef. */ + if (attr && (attr_form_is_block (attr) || attr_form_is_constant (attr))) + { + TYPE_RANGE_HIGH_BOUND_IS_COUNT (range_type) = 1; + TYPE_DYNAMIC (range_type) = 1; - } ++ } + /* Pass it now as the regular DW_AT_upper_bound. */ + } + @@ -2209,7 +2208,7 @@ index ca6c98b..d176624 100644 } /* Dwarf-2 specifications explicitly allows to create subrange types -@@ -8319,24 +8510,41 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu) +@@ -8336,24 +8527,41 @@ read_subrange_type (struct die_info *die } } @@ -2221,6 +2220,16 @@ index ca6c98b..d176624 100644 - high |= negative_mask; - - range_type = create_range_type (NULL, base_type, low, high); +- +- /* Mark arrays with dynamic length at least as an array of unspecified +- length. GDB could check the boundary but before it gets implemented at +- least allow accessing the array elements. */ +- if (attr && attr->form == DW_FORM_block1) +- TYPE_HIGH_BOUND_UNDEFINED (range_type) = 1; +- +- /* Ada expects an empty array on no boundary attributes. */ +- if (attr == NULL && cu->language != language_ada) +- TYPE_HIGH_BOUND_UNDEFINED (range_type) = 1; + /* DW_AT_bit_stride is currently unsupported as we count in bytes. */ + attr = dwarf2_attr (die, DW_AT_byte_stride, cu); + if (attr && attr_form_is_block (attr) && cu->language != language_ada) @@ -2236,19 +2245,11 @@ index ca6c98b..d176624 100644 + struct die_info *target_die; + struct dwarf2_cu *target_cu = cu; + struct attribute *target_loc_attr; - -- /* Mark arrays with dynamic length at least as an array of unspecified -- length. GDB could check the boundary but before it gets implemented at -- least allow accessing the array elements. */ -- if (attr && attr->form == DW_FORM_block1) -- TYPE_HIGH_BOUND_UNDEFINED (range_type) = 1; ++ + target_die = follow_die_ref_or_sig (die, attr, &target_cu); + gdb_assert (target_cu->objfile == cu->objfile); + target_loc_attr = dwarf2_attr (target_die, DW_AT_location, target_cu); - -- /* Ada expects an empty array on no boundary attributes. */ -- if (attr == NULL && cu->language != language_ada) -- TYPE_HIGH_BOUND_UNDEFINED (range_type) = 1; ++ + TYPE_RANGE_DATA (range_type)->byte_stride.kind + = RANGE_BOUND_KIND_DWARF_LOCLIST; + TYPE_RANGE_DATA (range_type)->byte_stride.u.dwarf_loclist.loclist @@ -2267,7 +2268,7 @@ index ca6c98b..d176624 100644 name = dwarf2_name (die, cu); if (name) -@@ -10881,10 +11089,12 @@ var_decode_location (struct attribute *attr, struct symbol *sym, +@@ -10898,10 +11106,12 @@ var_decode_location (struct attribute *a (i.e. when the value of a register or memory location is referenced, or a thread-local block, etc.). Then again, it might not be worthwhile. I'm assuming that it isn't unless performance @@ -2282,7 +2283,7 @@ index ca6c98b..d176624 100644 } /* Given a pointer to a DWARF information entry, figure out if we need -@@ -10922,6 +11132,8 @@ new_symbol_full (struct die_info *die, struct type *type, struct dwarf2_cu *cu, +@@ -10939,6 +11149,8 @@ new_symbol_full (struct die_info *die, s else sym = OBSTACK_ZALLOC (&objfile->objfile_obstack, struct symbol); OBJSTAT (objfile, n_syms++); @@ -2291,7 +2292,7 @@ index ca6c98b..d176624 100644 /* Cache this symbol's name and the name's demangled form (if any). */ SYMBOL_SET_LANGUAGE (sym, cu->language); -@@ -11694,6 +11906,9 @@ read_type_die_1 (struct die_info *die, struct dwarf2_cu *cu) +@@ -11711,6 +11923,9 @@ read_type_die_1 (struct die_info *die, s break; } @@ -2301,7 +2302,7 @@ index ca6c98b..d176624 100644 return this_type; } -@@ -14548,61 +14763,99 @@ fill_in_loclist_baton (struct dwarf2_cu *cu, +@@ -14565,61 +14780,99 @@ fill_in_loclist_baton (struct dwarf2_cu baton->base_address = cu->base_address; } @@ -2358,10 +2359,10 @@ index ca6c98b..d176624 100644 + variable has been optimized out. */ + if (!attr) + return NULL; - ++ + dwarf2_read_section (dwarf2_per_objfile->objfile, + &dwarf2_per_objfile->loc); -+ + + if (!(attr_form_is_section_offset (attr) + /* ".debug_loc" may not exist at all, or the offset may be outside + the section. If so, fall through to the complaint in the @@ -2444,7 +2445,7 @@ index ca6c98b..d176624 100644 } } -@@ -14951,6 +15204,25 @@ offset_and_type_eq (const void *item_lhs, const void *item_rhs) +@@ -14968,6 +15221,25 @@ offset_and_type_eq (const void *item_lhs return ofs_lhs->offset == ofs_rhs->offset; } @@ -2470,7 +2471,7 @@ index ca6c98b..d176624 100644 /* Set the type associated with DIE to TYPE. Save it in CU's hash table if necessary. For convenience, return TYPE. -@@ -14976,6 +15248,8 @@ set_die_type (struct die_info *die, struct type *type, struct dwarf2_cu *cu) +@@ -14993,6 +15265,8 @@ set_die_type (struct die_info *die, stru struct objfile *objfile = cu->objfile; htab_t *type_hash_ptr; @@ -2479,10 +2480,10 @@ index ca6c98b..d176624 100644 /* For Ada types, make sure that the gnat-specific data is always initialized (if not already set). There are a few types where we should not be doing so, because the type-specific area is -diff --git a/gdb/elfread.c b/gdb/elfread.c -index b9cfa13..fed63f5 100644 ---- a/gdb/elfread.c -+++ b/gdb/elfread.c +Index: gdb-7.2.90.20110429/gdb/elfread.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/elfread.c 2011-04-25 23:25:18.000000000 +0200 ++++ gdb-7.2.90.20110429/gdb/elfread.c 2011-04-29 09:40:46.000000000 +0200 @@ -43,6 +43,12 @@ #include "infcall.h" #include "gdbthread.h" @@ -2518,7 +2519,7 @@ index b9cfa13..fed63f5 100644 static void free_elfinfo (void *); /* Minimal symbols located at the GOT entries for .plt - that is the real -@@ -1551,7 +1572,266 @@ elfstab_offset_sections (struct objfile *objfile, struct partial_symtab *pst) +@@ -1556,7 +1577,266 @@ elfstab_offset_sections (struct objfile complaint (&symfile_complaints, _("elf/stab section information missing for %s"), filename); } @@ -2785,7 +2786,7 @@ index b9cfa13..fed63f5 100644 /* Register that we are able to handle ELF object file formats. */ static const struct sym_fns elf_sym_fns = -@@ -1566,6 +1846,7 @@ static const struct sym_fns elf_sym_fns = +@@ -1571,6 +1851,7 @@ static const struct sym_fns elf_sym_fns elf_symfile_segments, /* Get segment information from a file. */ NULL, default_symfile_relocate, /* Relocate a debug section. */ @@ -2793,7 +2794,7 @@ index b9cfa13..fed63f5 100644 &psym_functions }; -@@ -1584,6 +1865,7 @@ static const struct sym_fns elf_sym_fns_lazy_psyms = +@@ -1589,6 +1870,7 @@ static const struct sym_fns elf_sym_fns_ elf_symfile_segments, /* Get segment information from a file. */ NULL, default_symfile_relocate, /* Relocate a debug section. */ @@ -2801,7 +2802,7 @@ index b9cfa13..fed63f5 100644 &psym_functions }; -@@ -1601,6 +1883,7 @@ static const struct sym_fns elf_sym_fns_gdb_index = +@@ -1606,6 +1888,7 @@ static const struct sym_fns elf_sym_fns_ elf_symfile_segments, /* Get segment information from a file. */ NULL, default_symfile_relocate, /* Relocate a debug section. */ @@ -2809,7 +2810,7 @@ index b9cfa13..fed63f5 100644 &dwarf2_gdb_index_functions }; -@@ -1617,6 +1900,8 @@ static const struct gnu_ifunc_fns elf_gnu_ifunc_fns = +@@ -1622,6 +1905,8 @@ static const struct gnu_ifunc_fns elf_gn void _initialize_elfread (void) { @@ -2818,10 +2819,10 @@ index b9cfa13..fed63f5 100644 add_symtab_fns (&elf_sym_fns); elf_objfile_gnu_ifunc_cache_data = register_objfile_data (); -diff --git a/gdb/eval.c b/gdb/eval.c -index bbc7b8a..7c0a8f9 100644 ---- a/gdb/eval.c -+++ b/gdb/eval.c +Index: gdb-7.2.90.20110429/gdb/eval.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/eval.c 2011-03-28 22:21:03.000000000 +0200 ++++ gdb-7.2.90.20110429/gdb/eval.c 2011-04-29 09:40:46.000000000 +0200 @@ -44,6 +44,7 @@ #include "objfiles.h" #include "python/python.h" @@ -2830,7 +2831,7 @@ index bbc7b8a..7c0a8f9 100644 #include "gdb_assert.h" -@@ -489,27 +490,217 @@ init_array_element (struct value *array, struct value *element, +@@ -489,27 +490,217 @@ init_array_element (struct value *array, } static struct value * @@ -2845,12 +2846,11 @@ index bbc7b8a..7c0a8f9 100644 - enum f90_range_type range_type = longest_to_int (exp->elts[pc].longconst); - - *pos += 3; -- -- if (range_type == LOW_BOUND_DEFAULT || range_type == BOTH_BOUND_DEFAULT) -- low_bound = TYPE_LOW_BOUND (range); + /* Type to use for the newly allocated value ARRAY. */ + struct type *new_array_type; -+ + +- if (range_type == LOW_BOUND_DEFAULT || range_type == BOTH_BOUND_DEFAULT) +- low_bound = TYPE_LOW_BOUND (range); + /* Type being iterated for each dimension. */ + struct type *type, *type_last_target; + @@ -3047,13 +3047,13 @@ index bbc7b8a..7c0a8f9 100644 + VALUE_FRAME_ID (array) = VALUE_FRAME_ID (saved_array); + if (VALUE_LVAL (array) != lval_internalvar) + set_value_address (array, value_byte_address + value_byte_offset); -+ + +- return value_slice (array, low_bound, high_bound - low_bound + 1); + if (!value_lazy (saved_array)) + { + allocate_value_contents (array); + set_value_lazy (array, 0); - -- return value_slice (array, low_bound, high_bound - low_bound + 1); ++ + memcpy (value_contents_writeable (array), + value_contents (saved_array) + value_byte_offset, + TYPE_LENGTH (new_array_type)); @@ -3064,7 +3064,7 @@ index bbc7b8a..7c0a8f9 100644 } -@@ -790,6 +981,7 @@ evaluate_subexp_standard (struct type *expect_type, +@@ -790,6 +981,7 @@ evaluate_subexp_standard (struct type *e int save_pos1; struct symbol *function = NULL; char *function_name = NULL; @@ -3072,7 +3072,7 @@ index bbc7b8a..7c0a8f9 100644 pc = (*pos)++; op = exp->elts[pc].opcode; -@@ -1862,6 +2054,8 @@ evaluate_subexp_standard (struct type *expect_type, +@@ -1862,6 +2054,8 @@ evaluate_subexp_standard (struct type *e /* First determine the type code we are dealing with. */ arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); @@ -3081,7 +3081,7 @@ index bbc7b8a..7c0a8f9 100644 type = check_typedef (value_type (arg1)); code = TYPE_CODE (type); -@@ -1882,23 +2076,13 @@ evaluate_subexp_standard (struct type *expect_type, +@@ -1882,23 +2076,13 @@ evaluate_subexp_standard (struct type *e code = TYPE_CODE (type); } } @@ -3107,7 +3107,7 @@ index bbc7b8a..7c0a8f9 100644 case TYPE_CODE_PTR: case TYPE_CODE_FUNC: -@@ -2337,49 +2521,6 @@ evaluate_subexp_standard (struct type *expect_type, +@@ -2337,49 +2521,6 @@ evaluate_subexp_standard (struct type *e } return (arg1); @@ -3157,7 +3157,7 @@ index bbc7b8a..7c0a8f9 100644 case BINOP_LOGICAL_AND: arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); if (noside == EVAL_SKIP) -@@ -2611,15 +2752,23 @@ evaluate_subexp_standard (struct type *expect_type, +@@ -2611,15 +2752,23 @@ evaluate_subexp_standard (struct type *e if (expect_type && TYPE_CODE (expect_type) == TYPE_CODE_PTR) expect_type = TYPE_TARGET_TYPE (check_typedef (expect_type)); arg1 = evaluate_subexp (expect_type, exp, pos, noside); @@ -3183,7 +3183,7 @@ index bbc7b8a..7c0a8f9 100644 else if (noside == EVAL_AVOID_SIDE_EFFECTS) { type = check_typedef (value_type (arg1)); -@@ -2628,12 +2777,18 @@ evaluate_subexp_standard (struct type *expect_type, +@@ -2628,12 +2777,18 @@ evaluate_subexp_standard (struct type *e /* In C you can dereference an array to get the 1st elt. */ || TYPE_CODE (type) == TYPE_CODE_ARRAY ) @@ -3207,7 +3207,7 @@ index bbc7b8a..7c0a8f9 100644 else error (_("Attempt to take contents of a non-pointer value.")); } -@@ -2643,9 +2798,14 @@ evaluate_subexp_standard (struct type *expect_type, +@@ -2643,9 +2798,14 @@ evaluate_subexp_standard (struct type *e do. "long long" variables are rare enough that BUILTIN_TYPE_LONGEST would seem to be a mistake. */ if (TYPE_CODE (type) == TYPE_CODE_INT) @@ -3225,7 +3225,7 @@ index bbc7b8a..7c0a8f9 100644 case UNOP_ADDR: /* C++: check for and handle pointer to members. */ -@@ -2991,7 +3151,7 @@ evaluate_subexp_with_coercion (struct expression *exp, +@@ -2991,7 +3151,7 @@ evaluate_subexp_with_coercion (struct ex { enum exp_opcode op; int pc; @@ -3234,7 +3234,7 @@ index bbc7b8a..7c0a8f9 100644 struct symbol *var; struct type *type; -@@ -3002,13 +3162,18 @@ evaluate_subexp_with_coercion (struct expression *exp, +@@ -3002,13 +3162,18 @@ evaluate_subexp_with_coercion (struct ex { case OP_VAR_VALUE: var = exp->elts[pc + 2].symbol; @@ -3254,7 +3254,7 @@ index bbc7b8a..7c0a8f9 100644 return value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (type)), val); } -@@ -3060,9 +3225,13 @@ evaluate_subexp_for_sizeof (struct expression *exp, int *pos) +@@ -3060,9 +3225,13 @@ evaluate_subexp_for_sizeof (struct expre case OP_VAR_VALUE: (*pos) += 4; @@ -3271,7 +3271,7 @@ index bbc7b8a..7c0a8f9 100644 default: val = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS); -@@ -3093,18 +3262,25 @@ parse_and_eval_type (char *p, int length) +@@ -3093,18 +3262,25 @@ parse_and_eval_type (char *p, int length int calc_f77_array_dims (struct type *array_type) { @@ -3307,10 +3307,10 @@ index bbc7b8a..7c0a8f9 100644 - return ndimen; + } -diff --git a/gdb/f-exp.y b/gdb/f-exp.y -index d9cf3cf..3e11e57 100644 ---- a/gdb/f-exp.y -+++ b/gdb/f-exp.y +Index: gdb-7.2.90.20110429/gdb/f-exp.y +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/f-exp.y 2011-03-18 14:51:41.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/f-exp.y 2011-04-29 09:40:46.000000000 +0200 @@ -293,7 +293,9 @@ arglist : subrange { arglist_len = 1; } ; @@ -3322,11 +3322,11 @@ index d9cf3cf..3e11e57 100644 { arglist_len++; } ; -diff --git a/gdb/f-lang.h b/gdb/f-lang.h -index 8043577..94a5f31 100644 ---- a/gdb/f-lang.h -+++ b/gdb/f-lang.h -@@ -28,6 +28,10 @@ extern void f_error (char *); /* Defined in f-exp.y */ +Index: gdb-7.2.90.20110429/gdb/f-lang.h +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/f-lang.h 2011-01-07 20:36:16.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/f-lang.h 2011-04-29 09:40:46.000000000 +0200 +@@ -28,6 +28,10 @@ extern void f_error (char *); /* Defined extern void f_print_type (struct type *, const char *, struct ui_file *, int, int); @@ -3337,10 +3337,10 @@ index 8043577..94a5f31 100644 extern int f_val_print (struct type *, const gdb_byte *, int, CORE_ADDR, struct ui_file *, int, const struct value *, -diff --git a/gdb/f-typeprint.c b/gdb/f-typeprint.c -index ad988d2..985fef6 100644 ---- a/gdb/f-typeprint.c -+++ b/gdb/f-typeprint.c +Index: gdb-7.2.90.20110429/gdb/f-typeprint.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/f-typeprint.c 2011-01-07 20:36:16.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/f-typeprint.c 2011-04-29 09:40:46.000000000 +0200 @@ -32,7 +32,7 @@ #include "gdbcore.h" #include "target.h" @@ -3350,7 +3350,7 @@ index ad988d2..985fef6 100644 #include "gdb_string.h" #include -@@ -49,6 +49,34 @@ void f_type_print_varspec_prefix (struct type *, struct ui_file *, +@@ -49,6 +49,34 @@ void f_type_print_varspec_prefix (struct void f_type_print_base (struct type *, struct ui_file *, int, int); @@ -3385,7 +3385,7 @@ index ad988d2..985fef6 100644 /* LEVEL is the depth to indent lines by. */ void -@@ -58,6 +86,9 @@ f_print_type (struct type *type, const char *varstring, struct ui_file *stream, +@@ -58,6 +86,9 @@ f_print_type (struct type *type, const c enum type_code code; int demangled_args; @@ -3395,7 +3395,7 @@ index ad988d2..985fef6 100644 f_type_print_base (type, stream, show, level); code = TYPE_CODE (type); if ((varstring != NULL && *varstring != '\0') -@@ -165,6 +196,9 @@ f_type_print_varspec_suffix (struct type *type, struct ui_file *stream, +@@ -165,6 +196,9 @@ f_type_print_varspec_suffix (struct type QUIT; @@ -3405,11 +3405,11 @@ index ad988d2..985fef6 100644 switch (TYPE_CODE (type)) { case TYPE_CODE_ARRAY: -diff --git a/gdb/f-valprint.c b/gdb/f-valprint.c -index 3280ddc..128d6bc 100644 ---- a/gdb/f-valprint.c -+++ b/gdb/f-valprint.c -@@ -54,15 +54,17 @@ int f77_array_offset_tbl[MAX_FORTRAN_DIMS + 1][2]; +Index: gdb-7.2.90.20110429/gdb/f-valprint.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/f-valprint.c 2011-02-07 18:49:32.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/f-valprint.c 2011-04-29 09:40:46.000000000 +0200 +@@ -54,15 +54,17 @@ int f77_array_offset_tbl[MAX_FORTRAN_DIM /* The following macro gives us the size of the nth dimension, Where n is 1 based. */ @@ -3453,7 +3453,7 @@ index 3280ddc..128d6bc 100644 } return TYPE_ARRAY_UPPER_BOUND_VALUE (type); -@@ -135,24 +140,29 @@ f77_create_arrayprint_offset_tbl (struct type *type, struct ui_file *stream) +@@ -135,24 +140,29 @@ f77_create_arrayprint_offset_tbl (struct upper = f77_get_upperbound (tmp_type); lower = f77_get_lowerbound (tmp_type); @@ -3489,7 +3489,7 @@ index 3280ddc..128d6bc 100644 } } -@@ -174,37 +184,35 @@ f77_print_array_1 (int nss, int ndimensions, struct type *type, +@@ -174,37 +184,35 @@ f77_print_array_1 (int nss, int ndimensi if (nss != ndimensions) { @@ -3534,7 +3534,7 @@ index 3280ddc..128d6bc 100644 fprintf_filtered (stream, "..."); } } -@@ -260,6 +268,9 @@ f_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset, +@@ -260,6 +268,9 @@ f_val_print (struct type *type, const gd CORE_ADDR addr; int index; @@ -3544,10 +3544,10 @@ index 3280ddc..128d6bc 100644 CHECK_TYPEDEF (type); switch (TYPE_CODE (type)) { -diff --git a/gdb/findvar.c b/gdb/findvar.c -index 2b361ef..01e1c0d 100644 ---- a/gdb/findvar.c -+++ b/gdb/findvar.c +Index: gdb-7.2.90.20110429/gdb/findvar.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/findvar.c 2011-03-18 19:42:41.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/findvar.c 2011-04-29 09:40:46.000000000 +0200 @@ -35,6 +35,7 @@ #include "user-regs.h" #include "block.h" @@ -3556,7 +3556,7 @@ index 2b361ef..01e1c0d 100644 /* Basic byte-swapping routines. All 'extract' functions return a host-format integer from a target-format integer at ADDR which is -@@ -408,8 +409,11 @@ symbol_read_needs_frame (struct symbol *sym) +@@ -408,8 +409,11 @@ symbol_read_needs_frame (struct symbol * /* Given a struct symbol for a variable, and a stack frame id, read the value of the variable @@ -3570,7 +3570,7 @@ index 2b361ef..01e1c0d 100644 struct value * read_var_value (struct symbol *var, struct frame_info *frame) -@@ -417,16 +421,6 @@ read_var_value (struct symbol *var, struct frame_info *frame) +@@ -417,16 +421,6 @@ read_var_value (struct symbol *var, stru struct value *v; struct type *type = SYMBOL_TYPE (var); CORE_ADDR addr; @@ -3587,7 +3587,7 @@ index 2b361ef..01e1c0d 100644 if (symbol_read_needs_frame (var)) gdb_assert (frame); -@@ -436,7 +430,7 @@ read_var_value (struct symbol *var, struct frame_info *frame) +@@ -436,7 +430,7 @@ read_var_value (struct symbol *var, stru case LOC_CONST: /* Put the constant back in target format. */ v = allocate_value (type); @@ -3596,7 +3596,7 @@ index 2b361ef..01e1c0d 100644 gdbarch_byte_order (get_type_arch (type)), (LONGEST) SYMBOL_VALUE (var)); VALUE_LVAL (v) = not_lval; -@@ -461,12 +455,12 @@ read_var_value (struct symbol *var, struct frame_info *frame) +@@ -461,12 +455,12 @@ read_var_value (struct symbol *var, stru case LOC_CONST_BYTES: v = allocate_value (type); @@ -3611,7 +3611,7 @@ index 2b361ef..01e1c0d 100644 if (overlay_debugging) addr = symbol_overlayed_address (SYMBOL_VALUE_ADDRESS (var), SYMBOL_OBJ_SECTION (var)); -@@ -479,7 +473,6 @@ read_var_value (struct symbol *var, struct frame_info *frame) +@@ -479,7 +473,6 @@ read_var_value (struct symbol *var, stru if (!addr) return 0; addr += SYMBOL_VALUE (var); @@ -3619,7 +3619,7 @@ index 2b361ef..01e1c0d 100644 break; case LOC_REF_ARG: -@@ -493,14 +486,12 @@ read_var_value (struct symbol *var, struct frame_info *frame) +@@ -493,14 +486,12 @@ read_var_value (struct symbol *var, stru argref += SYMBOL_VALUE (var); ref = value_at (lookup_pointer_type (type), argref); addr = value_as_address (ref); @@ -3634,7 +3634,7 @@ index 2b361ef..01e1c0d 100644 break; case LOC_TYPEDEF: -@@ -508,7 +499,6 @@ read_var_value (struct symbol *var, struct frame_info *frame) +@@ -508,7 +499,6 @@ read_var_value (struct symbol *var, stru break; case LOC_BLOCK: @@ -3642,7 +3642,7 @@ index 2b361ef..01e1c0d 100644 if (overlay_debugging) addr = symbol_overlayed_address (BLOCK_START (SYMBOL_BLOCK_VALUE (var)), SYMBOL_OBJ_SECTION (var)); -@@ -533,7 +523,6 @@ read_var_value (struct symbol *var, struct frame_info *frame) +@@ -533,7 +523,6 @@ read_var_value (struct symbol *var, stru error (_("Value of register variable not available.")); addr = value_as_address (regval); @@ -3650,7 +3650,7 @@ index 2b361ef..01e1c0d 100644 } else { -@@ -572,7 +561,6 @@ read_var_value (struct symbol *var, struct frame_info *frame) +@@ -572,7 +561,6 @@ read_var_value (struct symbol *var, stru if (obj_section && (obj_section->the_bfd_section->flags & SEC_THREAD_LOCAL) != 0) addr = target_translate_tls_address (obj_section->objfile, addr); @@ -3658,7 +3658,7 @@ index 2b361ef..01e1c0d 100644 } break; -@@ -587,6 +575,10 @@ read_var_value (struct symbol *var, struct frame_info *frame) +@@ -587,6 +575,10 @@ read_var_value (struct symbol *var, stru break; } @@ -3684,7 +3684,7 @@ index 2b361ef..01e1c0d 100644 { /* The ISA/ABI need to something weird when obtaining the specified value from this register. It might need to -@@ -643,7 +636,7 @@ value_from_register (struct type *type, int regnum, struct frame_info *frame) +@@ -643,7 +636,7 @@ value_from_register (struct type *type, VALUE_LVAL (v) = lval_register; VALUE_FRAME_ID (v) = get_frame_id (frame); VALUE_REGNUM (v) = regnum; @@ -3693,10 +3693,10 @@ index 2b361ef..01e1c0d 100644 value_contents_raw (v), &optim, &unavail); } -diff --git a/gdb/gdbinit.in b/gdb/gdbinit.in -index ffb7f53..a2e7e94 100644 ---- a/gdb/gdbinit.in -+++ b/gdb/gdbinit.in +Index: gdb-7.2.90.20110429/gdb/gdbinit.in +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/gdbinit.in 2009-10-05 15:46:52.000000000 +0200 ++++ gdb-7.2.90.20110429/gdb/gdbinit.in 2011-04-29 09:40:46.000000000 +0200 @@ -1,5 +1,15 @@ echo Setting up the environment for debugging gdb.\n @@ -3713,10 +3713,10 @@ index ffb7f53..a2e7e94 100644 set complaints 1 b internal_error -diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c -index 3b45931..eda2506 100644 ---- a/gdb/gdbtypes.c -+++ b/gdb/gdbtypes.c +Index: gdb-7.2.90.20110429/gdb/gdbtypes.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/gdbtypes.c 2011-03-28 22:21:03.000000000 +0200 ++++ gdb-7.2.90.20110429/gdb/gdbtypes.c 2011-04-29 09:40:46.000000000 +0200 @@ -39,6 +39,9 @@ #include "cp-abi.h" #include "gdb_assert.h" @@ -3727,7 +3727,7 @@ index 3b45931..eda2506 100644 /* Initialize BADNESS constants. */ -@@ -144,7 +147,16 @@ static void print_bit_vector (B_TYPE *, int); +@@ -144,7 +147,16 @@ static void print_bit_vector (B_TYPE *, static void print_arg_types (struct field *, int, int); static void dump_fn_fieldlists (struct type *, int); static void print_cplus_stuff (struct type *, int); @@ -3788,7 +3788,7 @@ index 3b45931..eda2506 100644 /* Allocate a new GDBARCH-associated type structure and fill it with some defaults. Space for the type structure is allocated on the heap. */ -@@ -300,7 +349,7 @@ make_pointer_type (struct type *type, struct type **typeptr) +@@ -300,7 +349,7 @@ make_pointer_type (struct type *type, st if (typeptr == 0 || *typeptr == 0) /* We'll need to allocate one. */ { @@ -3797,7 +3797,7 @@ index 3b45931..eda2506 100644 if (typeptr) *typeptr = ntype; } -@@ -377,7 +426,7 @@ make_reference_type (struct type *type, struct type **typeptr) +@@ -377,7 +426,7 @@ make_reference_type (struct type *type, if (typeptr == 0 || *typeptr == 0) /* We'll need to allocate one. */ { @@ -3806,7 +3806,7 @@ index 3b45931..eda2506 100644 if (typeptr) *typeptr = ntype; } -@@ -748,6 +797,7 @@ create_range_type (struct type *result_type, struct type *index_type, +@@ -748,6 +797,7 @@ create_range_type (struct type *result_t TYPE_ZALLOC (result_type, sizeof (struct range_bounds)); TYPE_LOW_BOUND (result_type) = low_bound; TYPE_HIGH_BOUND (result_type) = high_bound; @@ -3814,7 +3814,7 @@ index 3b45931..eda2506 100644 if (low_bound >= 0) TYPE_UNSIGNED (result_type) = 1; -@@ -891,26 +941,31 @@ create_array_type (struct type *result_type, +@@ -891,26 +941,31 @@ create_array_type (struct type *result_t TYPE_CODE (result_type) = TYPE_CODE_ARRAY; TYPE_TARGET_TYPE (result_type) = element_type; @@ -4047,7 +4047,7 @@ index 3b45931..eda2506 100644 } type = make_qualified_type (type, instance_flags, NULL); -@@ -3266,33 +3406,42 @@ type_pair_eq (const void *item_lhs, const void *item_rhs) +@@ -3266,33 +3406,42 @@ type_pair_eq (const void *item_lhs, cons } /* Allocate the hash table used by copy_type_recursive to walk @@ -4105,7 +4105,7 @@ index 3b45931..eda2506 100644 return type; /* This type shouldn't be pointing to any types in other objfiles; -@@ -3307,9 +3456,10 @@ copy_type_recursive (struct objfile *objfile, +@@ -3307,9 +3456,10 @@ copy_type_recursive (struct objfile *obj new_type = alloc_type_arch (get_type_arch (type)); /* We must add the new type to the hash table immediately, in case @@ -4119,7 +4119,7 @@ index 3b45931..eda2506 100644 stored->old = type; stored->new = new_type; *slot = stored; -@@ -3320,6 +3470,21 @@ copy_type_recursive (struct objfile *objfile, +@@ -3320,6 +3470,21 @@ copy_type_recursive (struct objfile *obj TYPE_OBJFILE_OWNED (new_type) = 0; TYPE_OWNER (new_type).gdbarch = get_type_arch (type); @@ -4141,7 +4141,7 @@ index 3b45931..eda2506 100644 if (TYPE_NAME (type)) TYPE_NAME (new_type) = xstrdup (TYPE_NAME (type)); if (TYPE_TAG_NAME (type)) -@@ -3328,12 +3493,48 @@ copy_type_recursive (struct objfile *objfile, +@@ -3328,12 +3493,48 @@ copy_type_recursive (struct objfile *obj TYPE_INSTANCE_FLAGS (new_type) = TYPE_INSTANCE_FLAGS (type); TYPE_LENGTH (new_type) = TYPE_LENGTH (type); @@ -4190,7 +4190,7 @@ index 3b45931..eda2506 100644 TYPE_FIELDS (new_type) = XCALLOC (nfields, struct field); for (i = 0; i < nfields; i++) { -@@ -3342,8 +3543,8 @@ copy_type_recursive (struct objfile *objfile, +@@ -3342,8 +3543,8 @@ copy_type_recursive (struct objfile *obj TYPE_FIELD_BITSIZE (new_type, i) = TYPE_FIELD_BITSIZE (type, i); if (TYPE_FIELD_TYPE (type, i)) TYPE_FIELD_TYPE (new_type, i) @@ -4201,7 +4201,7 @@ index 3b45931..eda2506 100644 if (TYPE_FIELD_NAME (type, i)) TYPE_FIELD_NAME (new_type, i) = xstrdup (TYPE_FIELD_NAME (type, i)); -@@ -3370,24 +3571,184 @@ copy_type_recursive (struct objfile *objfile, +@@ -3370,24 +3571,184 @@ copy_type_recursive (struct objfile *obj } } @@ -4393,7 +4393,7 @@ index 3b45931..eda2506 100644 /* Maybe copy the type_specific bits. NOTE drow/2005-12-09: We do not copy the C++-specific bits like -@@ -3404,6 +3765,17 @@ copy_type_recursive (struct objfile *objfile, +@@ -3404,6 +3765,17 @@ copy_type_recursive (struct objfile *obj return new_type; } @@ -4627,10 +4627,10 @@ index 3b45931..eda2506 100644 objfile_type_data = register_objfile_data (); add_setshow_zinteger_cmd ("overload", no_class, &overload_debug, -diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h -index 39ca1b4..4b4720a 100644 ---- a/gdb/gdbtypes.h -+++ b/gdb/gdbtypes.h +Index: gdb-7.2.90.20110429/gdb/gdbtypes.h +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/gdbtypes.h 2011-03-28 22:21:03.000000000 +0200 ++++ gdb-7.2.90.20110429/gdb/gdbtypes.h 2011-04-29 09:40:46.000000000 +0200 @@ -215,6 +215,11 @@ enum type_instance_flag_value #define TYPE_TARGET_STUB(t) (TYPE_MAIN_TYPE (t)->flag_target_stub) @@ -4771,7 +4771,7 @@ index 39ca1b4..4b4720a 100644 /* Flags indicating whether the values of low and high are valid. When true, the respective range value is -@@ -926,9 +1019,9 @@ extern void allocate_gnat_aux_type (struct type *); +@@ -926,9 +1019,9 @@ extern void allocate_gnat_aux_type (stru #define TYPE_POINTER_TYPE(thistype) (thistype)->pointer_type #define TYPE_REFERENCE_TYPE(thistype) (thistype)->reference_type #define TYPE_CHAIN(thistype) (thistype)->chain @@ -4784,7 +4784,7 @@ index 39ca1b4..4b4720a 100644 calls check_typedef, TYPE_LENGTH (VALUE_TYPE (X)) is safe. */ #define TYPE_LENGTH(thistype) (thistype)->length /* Note that TYPE_CODE can be TYPE_CODE_TYPEDEF, so if you want the real -@@ -936,11 +1029,16 @@ extern void allocate_gnat_aux_type (struct type *); +@@ -936,11 +1029,16 @@ extern void allocate_gnat_aux_type (stru #define TYPE_CODE(thistype) TYPE_MAIN_TYPE(thistype)->code #define TYPE_NFIELDS(thistype) TYPE_MAIN_TYPE(thistype)->nfields #define TYPE_FIELDS(thistype) TYPE_MAIN_TYPE(thistype)->flds_bnds.fields @@ -4803,7 +4803,7 @@ index 39ca1b4..4b4720a 100644 #define TYPE_LOW_BOUND_UNDEFINED(range_type) \ TYPE_RANGE_DATA(range_type)->low_undefined #define TYPE_HIGH_BOUND_UNDEFINED(range_type) \ -@@ -957,7 +1055,14 @@ extern void allocate_gnat_aux_type (struct type *); +@@ -957,7 +1055,14 @@ extern void allocate_gnat_aux_type (stru (TYPE_HIGH_BOUND(TYPE_INDEX_TYPE((arraytype)))) #define TYPE_ARRAY_LOWER_BOUND_VALUE(arraytype) \ @@ -4819,7 +4819,7 @@ index 39ca1b4..4b4720a 100644 /* C++ */ -@@ -1379,6 +1484,18 @@ extern struct type *create_array_type (struct type *, struct type *, +@@ -1379,6 +1484,18 @@ extern struct type *create_array_type (s struct type *); extern struct type *lookup_array_range_type (struct type *, int, int); @@ -4838,7 +4838,7 @@ index 39ca1b4..4b4720a 100644 extern struct type *create_string_type (struct type *, struct type *, struct type *); extern struct type *lookup_string_range_type (struct type *, int, int); -@@ -1424,6 +1541,10 @@ extern int is_public_ancestor (struct type *, struct type *); +@@ -1424,6 +1541,10 @@ extern int is_public_ancestor (struct ty extern int is_unique_ancestor (struct type *, struct value *); @@ -4849,7 +4849,7 @@ index 39ca1b4..4b4720a 100644 /* Overload resolution */ #define LENGTH_MATCH(bv) ((bv)->rank[0]) -@@ -1496,10 +1617,13 @@ extern void maintenance_print_type (char *, int); +@@ -1496,10 +1617,13 @@ extern void maintenance_print_type (char extern htab_t create_copied_types_hash (struct objfile *objfile); @@ -4865,11 +4865,11 @@ index 39ca1b4..4b4720a 100644 +#endif + #endif /* GDBTYPES_H */ -diff --git a/gdb/i386-linux-nat.c b/gdb/i386-linux-nat.c -index e32a119..2024ae8 100644 ---- a/gdb/i386-linux-nat.c -+++ b/gdb/i386-linux-nat.c -@@ -649,22 +649,13 @@ i386_linux_store_inferior_registers (struct target_ops *ops, +Index: gdb-7.2.90.20110429/gdb/i386-linux-nat.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/i386-linux-nat.c 2011-02-27 17:25:37.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/i386-linux-nat.c 2011-04-29 09:40:46.000000000 +0200 +@@ -649,22 +649,13 @@ i386_linux_store_inferior_registers (str } @@ -4893,7 +4893,7 @@ index e32a119..2024ae8 100644 /* FIXME: kettenis/2001-03-27: Calling perror_with_name if the ptrace call fails breaks debugging remote targets. The correct way to fix this is to add the hardware breakpoint and watchpoint -@@ -686,14 +677,8 @@ i386_linux_dr_get (ptid_t ptid, int regnum) +@@ -686,14 +677,8 @@ i386_linux_dr_get (ptid_t ptid, int regn /* Set debug register REGNUM to VALUE in only the one LWP of PTID. */ static void @@ -4909,7 +4909,7 @@ index e32a119..2024ae8 100644 errno = 0; ptrace (PTRACE_POKEUSER, tid, offsetof (struct user, u_debugreg[regnum]), value); -@@ -701,35 +686,78 @@ i386_linux_dr_set (ptid_t ptid, int regnum, unsigned long value) +@@ -701,35 +686,78 @@ i386_linux_dr_set (ptid_t ptid, int regn perror_with_name (_("Couldn't write debug register")); } @@ -5073,10 +5073,10 @@ index e32a119..2024ae8 100644 } -diff --git a/gdb/i386-nat.c b/gdb/i386-nat.c -index 7e6814e..b1e8e7d 100644 ---- a/gdb/i386-nat.c -+++ b/gdb/i386-nat.c +Index: gdb-7.2.90.20110429/gdb/i386-nat.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/i386-nat.c 2011-02-26 23:04:51.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/i386-nat.c 2011-04-29 09:40:46.000000000 +0200 @@ -25,6 +25,7 @@ #include "gdbcmd.h" #include "target.h" @@ -5179,7 +5179,7 @@ index 7e6814e..b1e8e7d 100644 /* Whether or not to print the mirrored debug registers. */ static int maint_show_dr; -@@ -195,21 +206,80 @@ static int i386_handle_nonaligned_watchpoint (i386_wp_op_t what, +@@ -195,21 +206,80 @@ static int i386_handle_nonaligned_watchp /* Implementation. */ @@ -5272,7 +5272,7 @@ index 7e6814e..b1e8e7d 100644 int addr_size = gdbarch_addr_bit (target_gdbarch) / 8; int i; -@@ -239,13 +310,16 @@ i386_show_dr (const char *func, CORE_ADDR addr, +@@ -239,13 +310,16 @@ i386_show_dr (const char *func, CORE_ADD : "??unknown??")))); puts_unfiltered (":\n"); printf_unfiltered ("\tCONTROL (DR7): %s STATUS (DR6): %s\n", @@ -5292,7 +5292,7 @@ index 7e6814e..b1e8e7d 100644 i++; } } -@@ -313,6 +387,7 @@ Invalid hardware breakpoint length %d in i386_length_and_rw_bits.\n"), len); +@@ -313,6 +387,7 @@ Invalid hardware breakpoint length %d in static int i386_insert_aligned_watchpoint (CORE_ADDR addr, unsigned len_rw_bits) { @@ -5300,7 +5300,7 @@ index 7e6814e..b1e8e7d 100644 int i; if (!i386_dr_low.set_addr || !i386_dr_low.set_control) -@@ -323,11 +398,10 @@ i386_insert_aligned_watchpoint (CORE_ADDR addr, unsigned len_rw_bits) +@@ -323,11 +398,10 @@ i386_insert_aligned_watchpoint (CORE_ADD reuse it for this watchpoint as well (and save a register). */ ALL_DEBUG_REGISTERS(i) { @@ -5315,7 +5315,7 @@ index 7e6814e..b1e8e7d 100644 return 0; } } -@@ -335,7 +409,7 @@ i386_insert_aligned_watchpoint (CORE_ADDR addr, unsigned len_rw_bits) +@@ -335,7 +409,7 @@ i386_insert_aligned_watchpoint (CORE_ADD /* Next, look for a vacant debug register. */ ALL_DEBUG_REGISTERS(i) { @@ -5324,7 +5324,7 @@ index 7e6814e..b1e8e7d 100644 break; } -@@ -346,9 +420,9 @@ i386_insert_aligned_watchpoint (CORE_ADDR addr, unsigned len_rw_bits) +@@ -346,9 +420,9 @@ i386_insert_aligned_watchpoint (CORE_ADD /* Now set up the register I to watch our region. */ /* Record the info in our local mirrored array. */ @@ -5337,7 +5337,7 @@ index 7e6814e..b1e8e7d 100644 /* Note: we only enable the watchpoint locally, i.e. in the current task. Currently, no i386 target allows or supports global watchpoints; however, if any target would want that in the -@@ -356,13 +430,13 @@ i386_insert_aligned_watchpoint (CORE_ADDR addr, unsigned len_rw_bits) +@@ -356,13 +430,13 @@ i386_insert_aligned_watchpoint (CORE_ADD to enable watchpoints globally or locally, and the code below should use global or local enable and slow-down flags as appropriate. */ @@ -5355,7 +5355,7 @@ index 7e6814e..b1e8e7d 100644 /* Only a sanity check for leftover bits (set possibly only by inferior). */ if (i386_dr_low.unset_status) -@@ -380,21 +454,21 @@ i386_insert_aligned_watchpoint (CORE_ADDR addr, unsigned len_rw_bits) +@@ -380,21 +454,21 @@ i386_insert_aligned_watchpoint (CORE_ADD static int i386_remove_aligned_watchpoint (CORE_ADDR addr, unsigned len_rw_bits) { @@ -5384,7 +5384,7 @@ index 7e6814e..b1e8e7d 100644 if (i386_dr_low.reset_addr) i386_dr_low.reset_addr (i); } -@@ -556,26 +630,27 @@ i386_region_ok_for_watchpoint (CORE_ADDR addr, int len) +@@ -556,26 +630,27 @@ i386_region_ok_for_watchpoint (CORE_ADDR static int i386_stopped_data_address (struct target_ops *ops, CORE_ADDR *addr_p) { @@ -5417,7 +5417,7 @@ index 7e6814e..b1e8e7d 100644 rc = 1; if (maint_show_dr) i386_show_dr ("watchpoint_hit", addr, -1, hw_write); -@@ -689,6 +764,10 @@ i386_use_watchpoints (struct target_ops *t) +@@ -689,6 +764,10 @@ i386_use_watchpoints (struct target_ops t->to_remove_watchpoint = i386_remove_watchpoint; t->to_insert_hw_breakpoint = i386_insert_hw_breakpoint; t->to_remove_hw_breakpoint = i386_remove_hw_breakpoint; @@ -5428,11 +5428,11 @@ index 7e6814e..b1e8e7d 100644 } void -diff --git a/gdb/i386-nat.h b/gdb/i386-nat.h -index 819c6b8..bef8a35 100644 ---- a/gdb/i386-nat.h -+++ b/gdb/i386-nat.h -@@ -78,6 +78,28 @@ struct i386_dr_low_type +Index: gdb-7.2.90.20110429/gdb/i386-nat.h +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/i386-nat.h 2011-01-09 04:08:56.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/i386-nat.h 2011-04-29 09:40:46.000000000 +0200 +@@ -78,6 +78,28 @@ struct i386_dr_low_type extern struct i386_dr_low_type i386_dr_low; @@ -5461,10 +5461,10 @@ index 819c6b8..bef8a35 100644 /* Use this function to set i386_dr_low debug_register_length field rather than setting it directly to check that the length is only set once. It also enables the 'maint set/show show-debug-regs' -diff --git a/gdb/infrun.c b/gdb/infrun.c -index 7cee7c8..b94c11a 100644 ---- a/gdb/infrun.c -+++ b/gdb/infrun.c +Index: gdb-7.2.90.20110429/gdb/infrun.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/infrun.c 2011-04-20 19:04:32.000000000 +0200 ++++ gdb-7.2.90.20110429/gdb/infrun.c 2011-04-29 09:40:46.000000000 +0200 @@ -54,6 +54,8 @@ #include "inline-frame.h" #include "jit.h" @@ -5474,7 +5474,7 @@ index 7cee7c8..b94c11a 100644 /* Prototypes for local functions */ -@@ -2247,7 +2249,7 @@ static void insert_step_resume_breakpoint_at_sal (struct gdbarch *, +@@ -2247,7 +2249,7 @@ static void insert_step_resume_breakpoin struct frame_id); static void insert_longjmp_resume_breakpoint (struct gdbarch *, CORE_ADDR); static void check_exception_resume (struct execution_control_state *, @@ -5518,7 +5518,7 @@ index 7cee7c8..b94c11a 100644 keep_going (ecs); return; -@@ -5263,15 +5268,65 @@ insert_exception_resume_breakpoint (struct thread_info *tp, +@@ -5263,15 +5268,65 @@ insert_exception_resume_breakpoint (stru } } @@ -5585,7 +5585,7 @@ index 7cee7c8..b94c11a 100644 TRY_CATCH (e, RETURN_MASK_ERROR) { -@@ -6253,7 +6308,8 @@ static struct lval_funcs siginfo_value_funcs = +@@ -6253,7 +6308,8 @@ static struct lval_funcs siginfo_value_f if there's no object available. */ static struct value * @@ -5595,7 +5595,7 @@ index 7cee7c8..b94c11a 100644 { if (target_has_stack && !ptid_equal (inferior_ptid, null_ptid) -@@ -6826,6 +6882,15 @@ show_schedule_multiple (struct ui_file *file, int from_tty, +@@ -6821,6 +6877,15 @@ show_schedule_multiple (struct ui_file * "of all processes is %s.\n"), value); } @@ -5611,7 +5611,7 @@ index 7cee7c8..b94c11a 100644 void _initialize_infrun (void) { -@@ -7098,7 +7163,7 @@ Tells gdb whether to detach the child of a fork."), +@@ -7093,7 +7158,7 @@ Tells gdb whether to detach the child of value with a void typed value, and when we get here, gdbarch isn't initialized yet. At this point, we're quite sure there isn't another convenience variable of the same name. */ @@ -5620,10 +5620,10 @@ index 7cee7c8..b94c11a 100644 add_setshow_boolean_cmd ("observer", no_class, &observer_mode_1, _("\ -diff --git a/gdb/linespec.c b/gdb/linespec.c -index 70df3ca..5338161 100644 ---- a/gdb/linespec.c -+++ b/gdb/linespec.c +Index: gdb-7.2.90.20110429/gdb/linespec.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/linespec.c 2011-03-25 18:13:12.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/linespec.c 2011-04-29 09:40:46.000000000 +0200 @@ -43,6 +43,7 @@ #include "arch-utils.h" #include @@ -5640,7 +5640,7 @@ index 70df3ca..5338161 100644 This may all be followed by an "if EXPR", which we ignore. -@@ -837,6 +839,9 @@ decode_line_1 (char **argptr, int funfirstline, struct symtab *default_symtab, +@@ -837,6 +839,9 @@ decode_line_1 (char **argptr, int funfir if (**argptr == '*') return decode_indirect (argptr); @@ -5650,10 +5650,10 @@ index 70df3ca..5338161 100644 is_quoted = (strchr (get_gdb_completer_quote_characters (), **argptr) != NULL); -diff --git a/gdb/linespec.h b/gdb/linespec.h -index d8d2ec9..458235c 100644 ---- a/gdb/linespec.h -+++ b/gdb/linespec.h +Index: gdb-7.2.90.20110429/gdb/linespec.h +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/linespec.h 2011-03-24 20:47:17.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/linespec.h 2011-04-29 09:40:46.000000000 +0200 @@ -30,6 +30,10 @@ struct linespec_result display mechanism would do the wrong thing. */ int special_display; @@ -5665,10 +5665,10 @@ index d8d2ec9..458235c 100644 /* If non-NULL, an array of canonical names for returned symtab_and_line objects. The array has as many elements as the `nelts' field in the symtabs_and_line returned by decode_line_1. -diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c -index 732812d..03b3d19 100644 ---- a/gdb/linux-nat.c -+++ b/gdb/linux-nat.c +Index: gdb-7.2.90.20110429/gdb/linux-nat.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/linux-nat.c 2011-03-09 13:48:55.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/linux-nat.c 2011-04-29 09:40:46.000000000 +0200 @@ -1254,6 +1254,64 @@ iterate_over_lwps (ptid_t filter, return NULL; } @@ -5734,11 +5734,11 @@ index 732812d..03b3d19 100644 /* Update our internal state when changing from one checkpoint to another indicated by NEW_PTID. We can only switch single-threaded applications, so we only create one new LWP, and the previous list -diff --git a/gdb/linux-nat.h b/gdb/linux-nat.h -index 42cb2fc..05ac11d 100644 ---- a/gdb/linux-nat.h -+++ b/gdb/linux-nat.h -@@ -140,6 +140,11 @@ struct lwp_info *iterate_over_lwps (ptid_t filter, +Index: gdb-7.2.90.20110429/gdb/linux-nat.h +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/linux-nat.h 2011-01-05 23:22:49.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/linux-nat.h 2011-04-29 09:40:46.000000000 +0200 +@@ -140,6 +140,11 @@ struct lwp_info *iterate_over_lwps (ptid void *), void *data); @@ -5750,11 +5750,11 @@ index 42cb2fc..05ac11d 100644 /* Create a prototype generic GNU/Linux target. The client can override it with local methods. */ struct target_ops * linux_target (void); -diff --git a/gdb/machoread.c b/gdb/machoread.c -index dbf9ae4..3db9e16 100644 ---- a/gdb/machoread.c -+++ b/gdb/machoread.c -@@ -849,6 +849,7 @@ static const struct sym_fns macho_sym_fns = { +Index: gdb-7.2.90.20110429/gdb/machoread.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/machoread.c 2011-03-07 17:17:29.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/machoread.c 2011-04-29 09:40:46.000000000 +0200 +@@ -849,6 +849,7 @@ static const struct sym_fns macho_sym_fn default_symfile_segments, /* Get segment information from a file. */ NULL, macho_symfile_relocate, /* Relocate a debug section. */ @@ -5762,10 +5762,10 @@ index dbf9ae4..3db9e16 100644 &psym_functions }; -diff --git a/gdb/main.c b/gdb/main.c -index ff305a1..267f0b0 100644 ---- a/gdb/main.c -+++ b/gdb/main.c +Index: gdb-7.2.90.20110429/gdb/main.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/main.c 2011-03-07 19:34:31.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/main.c 2011-04-29 09:40:46.000000000 +0200 @@ -39,6 +39,7 @@ #include "interps.h" @@ -5913,11 +5913,11 @@ index ff305a1..267f0b0 100644 --quiet Do not print version number on startup.\n\ --readnow Fully read symbol files on first access.\n\ "), stream); -diff --git a/gdb/mi/mi-cmd-var.c b/gdb/mi/mi-cmd-var.c -index a401846..26dca8c 100644 ---- a/gdb/mi/mi-cmd-var.c -+++ b/gdb/mi/mi-cmd-var.c -@@ -707,7 +707,6 @@ mi_cmd_var_update (char *command, char **argv, int argc) +Index: gdb-7.2.90.20110429/gdb/mi/mi-cmd-var.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/mi/mi-cmd-var.c 2011-01-12 22:09:39.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/mi/mi-cmd-var.c 2011-04-29 09:40:46.000000000 +0200 +@@ -707,7 +707,6 @@ mi_cmd_var_update (char *command, char * } else { @@ -5925,11 +5925,11 @@ index a401846..26dca8c 100644 struct varobj *var = varobj_get_handle (name); varobj_update_one (var, print_values, 1 /* explicit */); -diff --git a/gdb/mipsread.c b/gdb/mipsread.c -index 74d795d..7e05317 100644 ---- a/gdb/mipsread.c -+++ b/gdb/mipsread.c -@@ -402,6 +402,7 @@ static const struct sym_fns ecoff_sym_fns = +Index: gdb-7.2.90.20110429/gdb/mipsread.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/mipsread.c 2011-03-07 17:17:29.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/mipsread.c 2011-04-29 09:40:46.000000000 +0200 +@@ -402,6 +402,7 @@ static const struct sym_fns ecoff_sym_fn default_symfile_segments, /* Get segment information from a file. */ NULL, default_symfile_relocate, /* Relocate a debug section. */ @@ -5937,11 +5937,11 @@ index 74d795d..7e05317 100644 &psym_functions }; -diff --git a/gdb/objfiles.c b/gdb/objfiles.c -index f3259dd..4cb3bed 100644 ---- a/gdb/objfiles.c -+++ b/gdb/objfiles.c -@@ -846,6 +846,11 @@ objfile_relocate1 (struct objfile *objfile, +Index: gdb-7.2.90.20110429/gdb/objfiles.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/objfiles.c 2011-04-25 23:25:18.000000000 +0200 ++++ gdb-7.2.90.20110429/gdb/objfiles.c 2011-04-29 09:40:46.000000000 +0200 +@@ -846,6 +846,11 @@ objfile_relocate1 (struct objfile *objfi obj_section_addr (s)); } @@ -5953,10 +5953,10 @@ index f3259dd..4cb3bed 100644 /* Data changed. */ return 1; } -diff --git a/gdb/p-valprint.c b/gdb/p-valprint.c -index d2efa5b..d98b3a4 100644 ---- a/gdb/p-valprint.c -+++ b/gdb/p-valprint.c +Index: gdb-7.2.90.20110429/gdb/p-valprint.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/p-valprint.c 2011-03-15 17:00:56.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/p-valprint.c 2011-04-29 09:40:46.000000000 +0200 @@ -39,6 +39,7 @@ #include "cp-abi.h" #include "cp-support.h" @@ -5965,7 +5965,7 @@ index d2efa5b..d98b3a4 100644 /* See val_print for a description of the various parameters of this -@@ -63,8 +64,31 @@ pascal_val_print (struct type *type, const gdb_byte *valaddr, +@@ -63,8 +64,31 @@ pascal_val_print (struct type *type, con struct type *char_type; LONGEST val; CORE_ADDR addr; @@ -5998,7 +5998,7 @@ index d2efa5b..d98b3a4 100644 switch (TYPE_CODE (type)) { case TYPE_CODE_ARRAY: -@@ -120,8 +144,8 @@ pascal_val_print (struct type *type, const gdb_byte *valaddr, +@@ -120,8 +144,8 @@ pascal_val_print (struct type *type, con { i = 0; } @@ -6009,7 +6009,7 @@ index d2efa5b..d98b3a4 100644 original_value, options, i); fprintf_filtered (stream, "}"); } -@@ -160,6 +184,7 @@ pascal_val_print (struct type *type, const gdb_byte *valaddr, +@@ -160,6 +184,7 @@ pascal_val_print (struct type *type, con /* Try to print what function it points to. */ print_address_demangle (gdbarch, addr, stream, demangle); /* Return value is irrelevant except for string pointers. */ @@ -6017,7 +6017,7 @@ index d2efa5b..d98b3a4 100644 return (0); } -@@ -251,6 +276,7 @@ pascal_val_print (struct type *type, const gdb_byte *valaddr, +@@ -251,6 +276,7 @@ pascal_val_print (struct type *type, con /* Return number of characters printed, including the terminating '\0' if we reached the end. val_print_string takes care including the terminating '\0' if necessary. */ @@ -6025,7 +6025,7 @@ index d2efa5b..d98b3a4 100644 return i; break; -@@ -567,6 +593,7 @@ pascal_val_print (struct type *type, const gdb_byte *valaddr, +@@ -567,6 +593,7 @@ pascal_val_print (struct type *type, con TYPE_CODE (type)); } gdb_flush (stream); @@ -6033,11 +6033,11 @@ index d2efa5b..d98b3a4 100644 return (0); } -diff --git a/gdb/parse.c b/gdb/parse.c -index 4815854..81f3f0c 100644 ---- a/gdb/parse.c -+++ b/gdb/parse.c -@@ -1502,6 +1502,7 @@ parser_fprintf (FILE *x, const char *y, ...) +Index: gdb-7.2.90.20110429/gdb/parse.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/parse.c 2011-03-28 22:21:03.000000000 +0200 ++++ gdb-7.2.90.20110429/gdb/parse.c 2011-04-29 09:40:46.000000000 +0200 +@@ -1502,6 +1502,7 @@ parser_fprintf (FILE *x, const char *y, int operator_check_standard (struct expression *exp, int pos, @@ -6045,7 +6045,7 @@ index 4815854..81f3f0c 100644 int (*objfile_func) (struct objfile *objfile, void *data), void *data) -@@ -1543,7 +1544,7 @@ operator_check_standard (struct expression *exp, int pos, +@@ -1543,7 +1544,7 @@ operator_check_standard (struct expressi struct type *type = elts[pos + 2 + arg].type; struct objfile *objfile = TYPE_OBJFILE (type); @@ -6054,7 +6054,7 @@ index 4815854..81f3f0c 100644 return 1; } } -@@ -1561,7 +1562,8 @@ operator_check_standard (struct expression *exp, int pos, +@@ -1561,7 +1562,8 @@ operator_check_standard (struct expressi /* Check objfile where the variable itself is placed. SYMBOL_OBJ_SECTION (symbol) may be NULL. */ @@ -6064,7 +6064,7 @@ index 4815854..81f3f0c 100644 return 1; /* Check objfile where is placed the code touching the variable. */ -@@ -1574,24 +1576,27 @@ operator_check_standard (struct expression *exp, int pos, +@@ -1574,24 +1576,27 @@ operator_check_standard (struct expressi /* Invoke callbacks for TYPE and OBJFILE if they were set as non-NULL. */ @@ -6111,7 +6111,7 @@ index 4815854..81f3f0c 100644 return 1; endpos = pos; -@@ -1637,8 +1644,29 @@ exp_uses_objfile (struct expression *exp, struct objfile *objfile) +@@ -1637,8 +1644,29 @@ exp_uses_objfile (struct expression *exp { gdb_assert (objfile->separate_debug_objfile_backlink == NULL); @@ -6142,11 +6142,11 @@ index 4815854..81f3f0c 100644 void _initialize_parse (void) -diff --git a/gdb/parser-defs.h b/gdb/parser-defs.h -index 3f743d1..3b942c4 100644 ---- a/gdb/parser-defs.h -+++ b/gdb/parser-defs.h -@@ -194,6 +194,8 @@ extern void operator_length_standard (const struct expression *, int, int *, +Index: gdb-7.2.90.20110429/gdb/parser-defs.h +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/parser-defs.h 2011-01-10 21:38:49.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/parser-defs.h 2011-04-29 09:40:46.000000000 +0200 +@@ -194,6 +194,8 @@ extern void operator_length_standard (co int *); extern int operator_check_standard (struct expression *exp, int pos, @@ -6163,7 +6163,7 @@ index 3f743d1..3b942c4 100644 int (*objfile_func) (struct objfile *objfile, void *data), void *data); -@@ -329,4 +332,10 @@ extern void parser_fprintf (FILE *, const char *, ...) ATTRIBUTE_PRINTF (2, 3); +@@ -329,4 +332,10 @@ extern void parser_fprintf (FILE *, cons extern int exp_uses_objfile (struct expression *exp, struct objfile *objfile); @@ -6174,11 +6174,11 @@ index 3f743d1..3b942c4 100644 +#endif + #endif /* PARSER_DEFS_H */ -diff --git a/gdb/ppc-linux-nat.c b/gdb/ppc-linux-nat.c -index f0c7f61..54cacbb 100644 ---- a/gdb/ppc-linux-nat.c -+++ b/gdb/ppc-linux-nat.c -@@ -1637,6 +1637,14 @@ booke_remove_point (struct ppc_hw_breakpoint *b, int tid) +Index: gdb-7.2.90.20110429/gdb/ppc-linux-nat.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/ppc-linux-nat.c 2011-04-18 23:29:18.000000000 +0200 ++++ gdb-7.2.90.20110429/gdb/ppc-linux-nat.c 2011-04-29 09:41:06.000000000 +0200 +@@ -1637,6 +1637,14 @@ booke_remove_point (struct ppc_hw_breakp hw_breaks[i].hw_break = NULL; } @@ -6202,7 +6202,7 @@ index f0c7f61..54cacbb 100644 struct ppc_hw_breakpoint p; if (!have_ptrace_booke_interface ()) -@@ -1681,18 +1687,23 @@ ppc_linux_insert_hw_breakpoint (struct gdbarch *gdbarch, +@@ -1681,18 +1687,23 @@ ppc_linux_insert_hw_breakpoint (struct g p.addr2 = 0; } @@ -6230,7 +6230,7 @@ index f0c7f61..54cacbb 100644 struct ppc_hw_breakpoint p; if (!have_ptrace_booke_interface ()) -@@ -1718,8 +1729,7 @@ ppc_linux_remove_hw_breakpoint (struct gdbarch *gdbarch, +@@ -1718,8 +1729,7 @@ ppc_linux_remove_hw_breakpoint (struct g p.addr2 = 0; } @@ -6240,8 +6240,8 @@ index f0c7f61..54cacbb 100644 return 0; } -@@ -1933,6 +1943,15 @@ ppc_linux_can_accel_watchpoint_condition (CORE_ADDR addr, int len, int rw, - && check_condition (addr, cond, &data_value)); +@@ -1946,6 +1956,15 @@ ppc_linux_can_accel_watchpoint_condition + && check_condition (addr, cond, &data_value, &len)); } +static void @@ -6256,7 +6256,7 @@ index f0c7f61..54cacbb 100644 /* Set up P with the parameters necessary to request a watchpoint covering LEN bytes starting at ADDR and if possible with condition expression COND evaluated by hardware. INSERT tells if we are creating a request for -@@ -1986,8 +2005,6 @@ static int +@@ -2000,8 +2019,6 @@ static int ppc_linux_insert_watchpoint (CORE_ADDR addr, int len, int rw, struct expression *cond) { @@ -6265,7 +6265,7 @@ index f0c7f61..54cacbb 100644 int ret = -1; if (have_ptrace_booke_interface ()) -@@ -1996,8 +2013,7 @@ ppc_linux_insert_watchpoint (CORE_ADDR addr, int len, int rw, +@@ -2010,8 +2027,7 @@ ppc_linux_insert_watchpoint (CORE_ADDR a create_watchpoint_request (&p, addr, len, rw, cond, 1); @@ -6275,7 +6275,7 @@ index f0c7f61..54cacbb 100644 ret = 0; } -@@ -2040,12 +2056,8 @@ ppc_linux_insert_watchpoint (CORE_ADDR addr, int len, int rw, +@@ -2054,12 +2070,8 @@ ppc_linux_insert_watchpoint (CORE_ADDR a saved_dabr_value = dabr_value; @@ -6289,7 +6289,7 @@ index f0c7f61..54cacbb 100644 } return ret; -@@ -2055,8 +2067,6 @@ static int +@@ -2069,8 +2081,6 @@ static int ppc_linux_remove_watchpoint (CORE_ADDR addr, int len, int rw, struct expression *cond) { @@ -6298,7 +6298,7 @@ index f0c7f61..54cacbb 100644 int ret = -1; if (have_ptrace_booke_interface ()) -@@ -2065,20 +2075,16 @@ ppc_linux_remove_watchpoint (CORE_ADDR addr, int len, int rw, +@@ -2079,20 +2089,16 @@ ppc_linux_remove_watchpoint (CORE_ADDR a create_watchpoint_request (&p, addr, len, rw, cond, 0); @@ -6321,11 +6321,11 @@ index f0c7f61..54cacbb 100644 } return ret; -diff --git a/gdb/printcmd.c b/gdb/printcmd.c -index f1ebb7e..e97d7f1 100644 ---- a/gdb/printcmd.c -+++ b/gdb/printcmd.c -@@ -975,6 +975,11 @@ print_command_1 (char *exp, int inspect, int voidprint) +Index: gdb-7.2.90.20110429/gdb/printcmd.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/printcmd.c 2011-03-22 15:39:40.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/printcmd.c 2011-04-29 09:40:46.000000000 +0200 +@@ -975,6 +975,11 @@ print_command_1 (char *exp, int inspect, else val = access_value_history (0); @@ -6362,7 +6362,7 @@ index f1ebb7e..e97d7f1 100644 /* Add an expression to the auto-display chain. -@@ -2870,4 +2893,8 @@ Show printing of source filename and line number with ."), NULL, +@@ -2870,4 +2893,8 @@ Show printing of source filename and lin add_com ("eval", no_class, eval_command, _("\ Convert \"printf format string\", arg1, arg2, arg3, ..., argn to\n\ a command line, and call it.")); @@ -6371,11 +6371,10 @@ index f1ebb7e..e97d7f1 100644 + observer_attach_mark_used (print_types_mark_used); +#endif } -diff --git a/gdb/python/lib/gdb/FrameIterator.py b/gdb/python/lib/gdb/FrameIterator.py -new file mode 100644 -index 0000000..5654546 ---- /dev/null -+++ b/gdb/python/lib/gdb/FrameIterator.py +Index: gdb-7.2.90.20110429/gdb/python/lib/gdb/FrameIterator.py +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/python/lib/gdb/FrameIterator.py 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,33 @@ +# Iterator over frames. + @@ -6410,11 +6409,10 @@ index 0000000..5654546 + raise StopIteration + self.frame = result.older () + return result -diff --git a/gdb/python/lib/gdb/FrameWrapper.py b/gdb/python/lib/gdb/FrameWrapper.py -new file mode 100644 -index 0000000..b790a54 ---- /dev/null -+++ b/gdb/python/lib/gdb/FrameWrapper.py +Index: gdb-7.2.90.20110429/gdb/python/lib/gdb/FrameWrapper.py +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/python/lib/gdb/FrameWrapper.py 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,112 @@ +# Wrapper API for frames. + @@ -6528,11 +6526,10 @@ index 0000000..b790a54 + + def __getattr__ (self, name): + return getattr (self.frame, name) -diff --git a/gdb/python/lib/gdb/backtrace.py b/gdb/python/lib/gdb/backtrace.py -new file mode 100644 -index 0000000..6bb4fb1 ---- /dev/null -+++ b/gdb/python/lib/gdb/backtrace.py +Index: gdb-7.2.90.20110429/gdb/python/lib/gdb/backtrace.py +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/python/lib/gdb/backtrace.py 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,42 @@ +# Filtering backtrace. + @@ -6576,11 +6573,10 @@ index 0000000..6bb4fb1 + return iter + return frame_filter (iter) + -diff --git a/gdb/python/lib/gdb/command/alias.py b/gdb/python/lib/gdb/command/alias.py -new file mode 100644 -index 0000000..96b6618 ---- /dev/null -+++ b/gdb/python/lib/gdb/command/alias.py +Index: gdb-7.2.90.20110429/gdb/python/lib/gdb/command/alias.py +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/python/lib/gdb/command/alias.py 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,59 @@ +# Alias command. + @@ -6641,11 +6637,10 @@ index 0000000..96b6618 + "This command is an alias for '%s'." % target) + +AliasCommand() -diff --git a/gdb/python/lib/gdb/command/backtrace.py b/gdb/python/lib/gdb/command/backtrace.py -new file mode 100644 -index 0000000..eeea909 ---- /dev/null -+++ b/gdb/python/lib/gdb/command/backtrace.py +Index: gdb-7.2.90.20110429/gdb/python/lib/gdb/command/backtrace.py +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/python/lib/gdb/command/backtrace.py 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,106 @@ +# New backtrace command. + @@ -6753,11 +6748,10 @@ index 0000000..eeea909 + pair[1].describe (sys.stdout, full) + +FilteringBacktrace() -diff --git a/gdb/python/lib/gdb/command/ignore_errors.py b/gdb/python/lib/gdb/command/ignore_errors.py -new file mode 100644 -index 0000000..6fa48ff ---- /dev/null -+++ b/gdb/python/lib/gdb/command/ignore_errors.py +Index: gdb-7.2.90.20110429/gdb/python/lib/gdb/command/ignore_errors.py +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/python/lib/gdb/command/ignore_errors.py 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,37 @@ +# Ignore errors in user commands. + @@ -6796,11 +6790,10 @@ index 0000000..6fa48ff + pass + +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..21a0bf0 ---- /dev/null -+++ b/gdb/python/lib/gdb/command/pahole.py +Index: gdb-7.2.90.20110429/gdb/python/lib/gdb/command/pahole.py +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/python/lib/gdb/command/pahole.py 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,75 @@ +# pahole command for gdb + @@ -6877,11 +6870,10 @@ index 0000000..21a0bf0 + self.pahole (type, 0, '') + +Pahole() -diff --git a/gdb/python/lib/gdb/command/require.py b/gdb/python/lib/gdb/command/require.py -new file mode 100644 -index 0000000..1fbc1e8 ---- /dev/null -+++ b/gdb/python/lib/gdb/command/require.py +Index: gdb-7.2.90.20110429/gdb/python/lib/gdb/command/require.py +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/python/lib/gdb/command/require.py 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,57 @@ +# Demand-loading commands. + @@ -6940,11 +6932,10 @@ index 0000000..1fbc1e8 +RequireCommand() +RequireSubcommand("command") +RequireSubcommand("function") -diff --git a/gdb/python/lib/gdb/command/upto.py b/gdb/python/lib/gdb/command/upto.py -new file mode 100644 -index 0000000..faf54ed ---- /dev/null -+++ b/gdb/python/lib/gdb/command/upto.py +Index: gdb-7.2.90.20110429/gdb/python/lib/gdb/command/upto.py +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/python/lib/gdb/command/upto.py 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,129 @@ +# upto command. + @@ -7075,18 +7066,16 @@ index 0000000..faf54ed +UptoSourceCommand () +UptoObjectCommand () +UptoWhereCommand () -diff --git a/gdb/python/lib/gdb/function/__init__.py b/gdb/python/lib/gdb/function/__init__.py -new file mode 100644 -index 0000000..8b13789 ---- /dev/null -+++ b/gdb/python/lib/gdb/function/__init__.py +Index: gdb-7.2.90.20110429/gdb/python/lib/gdb/function/__init__.py +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/python/lib/gdb/function/__init__.py 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1 @@ + -diff --git a/gdb/python/lib/gdb/function/caller_is.py b/gdb/python/lib/gdb/function/caller_is.py -new file mode 100644 -index 0000000..2b9c5c7 ---- /dev/null -+++ b/gdb/python/lib/gdb/function/caller_is.py +Index: gdb-7.2.90.20110429/gdb/python/lib/gdb/function/caller_is.py +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/python/lib/gdb/function/caller_is.py 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,58 @@ +# Caller-is functions. + @@ -7146,11 +7135,10 @@ index 0000000..2b9c5c7 + +CallerIs() +CallerMatches() -diff --git a/gdb/python/lib/gdb/function/in_scope.py b/gdb/python/lib/gdb/function/in_scope.py -new file mode 100644 -index 0000000..debb3bb ---- /dev/null -+++ b/gdb/python/lib/gdb/function/in_scope.py +Index: gdb-7.2.90.20110429/gdb/python/lib/gdb/function/in_scope.py +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/python/lib/gdb/function/in_scope.py 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,47 @@ +# In-scope function. + @@ -7199,10 +7187,10 @@ index 0000000..debb3bb + return wanted == found + +InScope () -diff --git a/gdb/python/py-type.c b/gdb/python/py-type.c -index c010420..3f4a261 100644 ---- a/gdb/python/py-type.c -+++ b/gdb/python/py-type.c +Index: gdb-7.2.90.20110429/gdb/python/py-type.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/python/py-type.c 2011-01-26 21:53:45.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/python/py-type.c 2011-04-29 09:40:46.000000000 +0200 @@ -29,6 +29,8 @@ #include "language.h" #include "vec.h" @@ -7233,7 +7221,7 @@ index c010420..3f4a261 100644 static PyTypeObject type_object_type; /* A Field object. */ -@@ -919,8 +929,63 @@ typy_richcompare (PyObject *self, PyObject *other, int op) +@@ -919,8 +929,63 @@ typy_richcompare (PyObject *self, PyObje @@ -7297,7 +7285,7 @@ index c010420..3f4a261 100644 static void save_objfile_types (struct objfile *objfile, void *datum) { -@@ -938,12 +1003,13 @@ save_objfile_types (struct objfile *objfile, void *datum) +@@ -938,12 +1003,13 @@ save_objfile_types (struct objfile *objf { type_object *next = obj->next; @@ -7315,7 +7303,7 @@ index c010420..3f4a261 100644 obj = next; } -@@ -954,43 +1020,28 @@ save_objfile_types (struct objfile *objfile, void *datum) +@@ -954,43 +1020,28 @@ save_objfile_types (struct objfile *objf } static void @@ -7327,8 +7315,7 @@ index c010420..3f4a261 100644 - if (type && TYPE_OBJFILE (type)) - { - struct objfile *objfile = TYPE_OBJFILE (type); -+ type_object *type_obj = (type_object *) obj; - +- - obj->next = objfile_data (objfile, typy_objfile_data_key); - if (obj->next) - obj->next->prev = obj; @@ -7336,6 +7323,8 @@ index c010420..3f4a261 100644 - } - else - obj->next = NULL; ++ type_object *type_obj = (type_object *) obj; ++ + typy_unlink (type_obj); + + type_obj->ob_type->tp_free (obj); @@ -7396,10 +7385,10 @@ index c010420..3f4a261 100644 } -diff --git a/gdb/python/py-value.c b/gdb/python/py-value.c -index 4381d52..5dff3e2 100644 ---- a/gdb/python/py-value.c -+++ b/gdb/python/py-value.c +Index: gdb-7.2.90.20110429/gdb/python/py-value.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/python/py-value.c 2011-03-18 17:09:57.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/python/py-value.c 2011-04-29 09:40:46.000000000 +0200 @@ -28,6 +28,7 @@ #include "infcall.h" #include "expression.h" @@ -7439,10 +7428,10 @@ index 4381d52..5dff3e2 100644 } -diff --git a/gdb/python/python.c b/gdb/python/python.c -index 90d5dc8..ec4823e 100644 ---- a/gdb/python/python.c -+++ b/gdb/python/python.c +Index: gdb-7.2.90.20110429/gdb/python/python.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/python/python.c 2011-03-18 09:44:47.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/python/python.c 2011-04-29 09:40:46.000000000 +0200 @@ -49,8 +49,11 @@ static int gdbpy_should_print_stack = 1; #include "linespec.h" #include "source.h" @@ -7518,11 +7507,11 @@ index 90d5dc8..ec4823e 100644 { "parameter", gdbpy_parameter, METH_VARARGS, "Return a gdb parameter's value" }, -diff --git a/gdb/python/python.h b/gdb/python/python.h -index ce0eb35..14572f4 100644 ---- a/gdb/python/python.h -+++ b/gdb/python/python.h -@@ -32,6 +32,8 @@ void eval_python_from_control_command (struct command_line *); +Index: gdb-7.2.90.20110429/gdb/python/python.h +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/python/python.h 2011-03-14 17:09:54.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/python/python.h 2011-04-29 09:40:46.000000000 +0200 +@@ -32,6 +32,8 @@ void eval_python_from_control_command (s void source_python_script (FILE *stream, const char *file); @@ -7531,11 +7520,11 @@ index ce0eb35..14572f4 100644 int apply_val_pretty_printer (struct type *type, const gdb_byte *valaddr, int embedded_offset, CORE_ADDR address, struct ui_file *stream, int recurse, -diff --git a/gdb/somread.c b/gdb/somread.c -index 70831a0..baf68ea 100644 ---- a/gdb/somread.c -+++ b/gdb/somread.c -@@ -439,6 +439,7 @@ static const struct sym_fns som_sym_fns = +Index: gdb-7.2.90.20110429/gdb/somread.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/somread.c 2011-03-07 17:17:29.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/somread.c 2011-04-29 09:40:46.000000000 +0200 +@@ -439,6 +439,7 @@ static const struct sym_fns som_sym_fns default_symfile_segments, /* Get segment information from a file. */ NULL, default_symfile_relocate, /* Relocate a debug section. */ @@ -7543,11 +7532,11 @@ index 70831a0..baf68ea 100644 &psym_functions }; -diff --git a/gdb/stack.c b/gdb/stack.c -index 0888b69..c3efd5b 100644 ---- a/gdb/stack.c -+++ b/gdb/stack.c -@@ -366,6 +366,7 @@ print_frame_args (struct symbol *func, struct frame_info *frame, +Index: gdb-7.2.90.20110429/gdb/stack.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/stack.c 2011-03-18 19:48:56.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/stack.c 2011-04-29 09:40:46.000000000 +0200 +@@ -366,6 +366,7 @@ print_frame_args (struct symbol *func, s { const struct language_defn *language; struct value_print_options opts; @@ -7555,7 +7544,7 @@ index 0888b69..c3efd5b 100644 /* Use the appropriate language to display our symbol, unless the user forced the language to a specific -@@ -378,7 +379,13 @@ print_frame_args (struct symbol *func, struct frame_info *frame, +@@ -378,7 +379,13 @@ print_frame_args (struct symbol *func, s get_raw_print_options (&opts); opts.deref_ref = 0; opts.summary = summary; @@ -7569,11 +7558,10 @@ index 0888b69..c3efd5b 100644 ui_out_field_stream (uiout, "value", stb); } else -diff --git a/gdb/stap-probe.c b/gdb/stap-probe.c -new file mode 100644 -index 0000000..836d904 ---- /dev/null -+++ b/gdb/stap-probe.c +Index: gdb-7.2.90.20110429/gdb/stap-probe.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/stap-probe.c 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,2041 @@ +/* SystemTap probe support for GDB. + @@ -9616,11 +9604,10 @@ index 0000000..836d904 + create_internalvar_type_lazy ("_probe_arg9", &probe_funcs, + (void *) (uintptr_t) 9); +} -diff --git a/gdb/stap-probe.h b/gdb/stap-probe.h -new file mode 100644 -index 0000000..391d96f ---- /dev/null -+++ b/gdb/stap-probe.h +Index: gdb-7.2.90.20110429/gdb/stap-probe.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/stap-probe.h 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,109 @@ +/* SystemTap probe support for GDB. + @@ -9731,10 +9718,10 @@ index 0000000..391d96f + int n); + +#endif /* !defined (STAP_PROBE_H) */ -diff --git a/gdb/symfile.h b/gdb/symfile.h -index a0151ea..752c46a 100644 ---- a/gdb/symfile.h -+++ b/gdb/symfile.h +Index: gdb-7.2.90.20110429/gdb/symfile.h +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/symfile.h 2011-04-25 23:25:18.000000000 +0200 ++++ gdb-7.2.90.20110429/gdb/symfile.h 2011-04-29 09:40:46.000000000 +0200 @@ -31,6 +31,11 @@ struct objfile; struct obj_section; struct obstack; @@ -9747,7 +9734,7 @@ index a0151ea..752c46a 100644 /* Comparison function for symbol look ups. */ -@@ -296,6 +301,52 @@ struct quick_symbol_functions +@@ -290,6 +295,52 @@ struct quick_symbol_functions void *data); }; @@ -9800,7 +9787,7 @@ index a0151ea..752c46a 100644 /* Structure to keep track of symbol reading functions for various object file types. */ -@@ -366,6 +417,10 @@ struct sym_fns +@@ -360,6 +411,10 @@ struct sym_fns bfd_byte *(*sym_relocate) (struct objfile *, asection *sectp, bfd_byte *buf); @@ -9811,10 +9798,10 @@ index a0151ea..752c46a 100644 /* The "quick" (aka partial) symbol functions for this symbol reader. */ const struct quick_symbol_functions *qf; -diff --git a/gdb/symtab.c b/gdb/symtab.c -index 8aa692d..0bcbbf7 100644 ---- a/gdb/symtab.c -+++ b/gdb/symtab.c +Index: gdb-7.2.90.20110429/gdb/symtab.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/symtab.c 2011-04-20 22:10:29.000000000 +0200 ++++ gdb-7.2.90.20110429/gdb/symtab.c 2011-04-29 09:40:46.000000000 +0200 @@ -770,6 +770,7 @@ init_sal (struct symtab_and_line *sal) sal->end = 0; sal->explicit_pc = 0; @@ -9823,11 +9810,11 @@ index 8aa692d..0bcbbf7 100644 } -diff --git a/gdb/symtab.h b/gdb/symtab.h -index abe5e86..6239f7f 100644 ---- a/gdb/symtab.h -+++ b/gdb/symtab.h -@@ -1109,6 +1109,10 @@ struct symtab_and_line +Index: gdb-7.2.90.20110429/gdb/symtab.h +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/symtab.h 2011-04-20 22:10:29.000000000 +0200 ++++ gdb-7.2.90.20110429/gdb/symtab.h 2011-04-29 09:40:46.000000000 +0200 +@@ -1112,6 +1112,10 @@ struct symtab_and_line CORE_ADDR end; int explicit_pc; int explicit_line; @@ -9838,11 +9825,10 @@ index abe5e86..6239f7f 100644 }; extern void init_sal (struct symtab_and_line *sal); -diff --git a/gdb/testsuite/gdb.arch/x86_64-vla-pointer-foo.S b/gdb/testsuite/gdb.arch/x86_64-vla-pointer-foo.S -new file mode 100644 -index 0000000..83faaf6 ---- /dev/null -+++ b/gdb/testsuite/gdb.arch/x86_64-vla-pointer-foo.S +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.arch/x86_64-vla-pointer-foo.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.arch/x86_64-vla-pointer-foo.S 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,457 @@ + .file "x86_64-vla-pointer.c" + .section .debug_abbrev,"",@progbits @@ -10301,11 +10287,10 @@ index 0000000..83faaf6 + .string "GNU C 4.3.2 20081105 (Red Hat 4.3.2-7)" + .ident "GCC: (GNU) 4.3.2 20081105 (Red Hat 4.3.2-7)" + .section .note.GNU-stack,"",@progbits -diff --git a/gdb/testsuite/gdb.arch/x86_64-vla-pointer.c b/gdb/testsuite/gdb.arch/x86_64-vla-pointer.c -new file mode 100644 -index 0000000..fe2c8f7 ---- /dev/null -+++ b/gdb/testsuite/gdb.arch/x86_64-vla-pointer.c +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.arch/x86_64-vla-pointer.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.arch/x86_64-vla-pointer.c 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,43 @@ +/* This testcase is part of GDB, the GNU debugger. + @@ -10350,11 +10335,10 @@ index 0000000..fe2c8f7 +} + +#endif -diff --git a/gdb/testsuite/gdb.arch/x86_64-vla-pointer.exp b/gdb/testsuite/gdb.arch/x86_64-vla-pointer.exp -new file mode 100644 -index 0000000..d243cf1 ---- /dev/null -+++ b/gdb/testsuite/gdb.arch/x86_64-vla-pointer.exp +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.arch/x86_64-vla-pointer.exp +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.arch/x86_64-vla-pointer.exp 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,66 @@ +# Copyright 2009 Free Software Foundation, Inc. + @@ -10422,11 +10406,10 @@ index 0000000..d243cf1 + +gdb_test "whatis *array" "type = char \\\[78\\\]" "second: whatis *array" +gdb_test "ptype *array" "type = char \\\[78\\\]" "second: ptype *array" -diff --git a/gdb/testsuite/gdb.arch/x86_64-vla-typedef-foo.S b/gdb/testsuite/gdb.arch/x86_64-vla-typedef-foo.S -new file mode 100644 -index 0000000..66f7a39 ---- /dev/null -+++ b/gdb/testsuite/gdb.arch/x86_64-vla-typedef-foo.S +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.arch/x86_64-vla-typedef-foo.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.arch/x86_64-vla-typedef-foo.S 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,455 @@ + .file "x86_64-vla-typedef.c" + .section .debug_abbrev,"",@progbits @@ -10883,11 +10866,10 @@ index 0000000..66f7a39 + .string "GNU C 4.3.2 20081105 (Red Hat 4.3.2-7)" + .ident "GCC: (GNU) 4.3.2 20081105 (Red Hat 4.3.2-7)" + .section .note.GNU-stack,"",@progbits -diff --git a/gdb/testsuite/gdb.arch/x86_64-vla-typedef.c b/gdb/testsuite/gdb.arch/x86_64-vla-typedef.c -new file mode 100644 -index 0000000..b809c4e ---- /dev/null -+++ b/gdb/testsuite/gdb.arch/x86_64-vla-typedef.c +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.arch/x86_64-vla-typedef.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.arch/x86_64-vla-typedef.c 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,43 @@ +/* This testcase is part of GDB, the GNU debugger. + @@ -10932,11 +10914,10 @@ index 0000000..b809c4e +} + +#endif -diff --git a/gdb/testsuite/gdb.arch/x86_64-vla-typedef.exp b/gdb/testsuite/gdb.arch/x86_64-vla-typedef.exp -new file mode 100644 -index 0000000..b05411e ---- /dev/null -+++ b/gdb/testsuite/gdb.arch/x86_64-vla-typedef.exp +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.arch/x86_64-vla-typedef.exp +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.arch/x86_64-vla-typedef.exp 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,64 @@ +# Copyright 2009 Free Software Foundation, Inc. + @@ -11002,10 +10983,10 @@ index 0000000..b05411e +gdb_test "whatis array" "type = array_t" "second: whatis array" + +gdb_test "ptype array" "type = char \\\[78\\\]" "second: ptype array" -diff --git a/gdb/testsuite/gdb.base/arrayidx.c b/gdb/testsuite/gdb.base/arrayidx.c -index 6c158bf..739ce34 100644 ---- a/gdb/testsuite/gdb.base/arrayidx.c -+++ b/gdb/testsuite/gdb.base/arrayidx.c +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.base/arrayidx.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/testsuite/gdb.base/arrayidx.c 2011-01-01 16:33:40.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.base/arrayidx.c 2011-04-29 09:40:46.000000000 +0200 @@ -17,6 +17,13 @@ int array[] = {1, 2, 3, 4}; @@ -11020,10 +11001,10 @@ index 6c158bf..739ce34 100644 int main (void) { -diff --git a/gdb/testsuite/gdb.base/arrayidx.exp b/gdb/testsuite/gdb.base/arrayidx.exp -index d8ee5c0..de4ba75 100644 ---- a/gdb/testsuite/gdb.base/arrayidx.exp -+++ b/gdb/testsuite/gdb.base/arrayidx.exp +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.base/arrayidx.exp +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/testsuite/gdb.base/arrayidx.exp 2011-01-01 16:33:40.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.base/arrayidx.exp 2011-04-29 09:40:46.000000000 +0200 @@ -57,4 +57,12 @@ gdb_test "print array" \ "\\{\\\[0\\\] = 1, \\\[1\\\] = 2, \\\[2\\\] = 3, \\\[3\\\] = 4\\}" \ "Print array with array-indexes on" @@ -11038,11 +11019,11 @@ index d8ee5c0..de4ba75 100644 + unsupported "$test (no GCC)" + } +} -diff --git a/gdb/testsuite/gdb.base/default.exp b/gdb/testsuite/gdb.base/default.exp -index d58c519..abb1b05 100644 ---- a/gdb/testsuite/gdb.base/default.exp -+++ b/gdb/testsuite/gdb.base/default.exp -@@ -607,6 +607,17 @@ gdb_test_list_exact "show convenience" "show convenience" \ +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.base/default.exp +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/testsuite/gdb.base/default.exp 2011-02-15 22:17:52.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.base/default.exp 2011-04-29 09:40:46.000000000 +0200 +@@ -607,6 +607,17 @@ gdb_test_list_exact "show convenience" " {$_sdata = void} \ {$_siginfo = void} \ {$_thread = 0} \ @@ -11060,11 +11041,10 @@ index d58c519..abb1b05 100644 } #test show directories -diff --git a/gdb/testsuite/gdb.base/internal-var-field-address.c b/gdb/testsuite/gdb.base/internal-var-field-address.c -new file mode 100644 -index 0000000..eeb7b85 ---- /dev/null -+++ b/gdb/testsuite/gdb.base/internal-var-field-address.c +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.base/internal-var-field-address.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.base/internal-var-field-address.c 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,20 @@ +/* This testcase is part of GDB, the GNU debugger. + @@ -11086,11 +11066,10 @@ index 0000000..eeb7b85 +struct { + int field; +} staticstruct = { 1 }; -diff --git a/gdb/testsuite/gdb.base/internal-var-field-address.exp b/gdb/testsuite/gdb.base/internal-var-field-address.exp -new file mode 100644 -index 0000000..6d82e73 ---- /dev/null -+++ b/gdb/testsuite/gdb.base/internal-var-field-address.exp +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.base/internal-var-field-address.exp +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.base/internal-var-field-address.exp 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,26 @@ +# Copyright 2009 Free Software Foundation, Inc. + @@ -11118,11 +11097,10 @@ index 0000000..6d82e73 + +gdb_test {set $varstruct = staticstruct} +gdb_test {p $varstruct.field} " = 1" -diff --git a/gdb/testsuite/gdb.base/stap-probe.c b/gdb/testsuite/gdb.base/stap-probe.c -new file mode 100644 -index 0000000..47e4b39 ---- /dev/null -+++ b/gdb/testsuite/gdb.base/stap-probe.c +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.base/stap-probe.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.base/stap-probe.c 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,69 @@ +/* This testcase is part of GDB, the GNU debugger. + @@ -11193,11 +11171,10 @@ index 0000000..47e4b39 + m1(); + m2(); +} -diff --git a/gdb/testsuite/gdb.base/stap-probe.exp b/gdb/testsuite/gdb.base/stap-probe.exp -new file mode 100644 -index 0000000..3fb7377 ---- /dev/null -+++ b/gdb/testsuite/gdb.base/stap-probe.exp +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.base/stap-probe.exp +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.base/stap-probe.exp 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,72 @@ +# Copyright (C) 2011 Free Software Foundation, Inc. + @@ -11271,11 +11248,10 @@ index 0000000..3fb7377 + return -1 +} +stap_test "-DUSE_PROBES" -diff --git a/gdb/testsuite/gdb.base/vla-overflow.c b/gdb/testsuite/gdb.base/vla-overflow.c -new file mode 100644 -index 0000000..c5d5ee0 ---- /dev/null -+++ b/gdb/testsuite/gdb.base/vla-overflow.c +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.base/vla-overflow.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.base/vla-overflow.c 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,30 @@ +/* This testcase is part of GDB, the GNU debugger. + @@ -11307,11 +11283,10 @@ index 0000000..c5d5ee0 + + return 0; +} -diff --git a/gdb/testsuite/gdb.base/vla-overflow.exp b/gdb/testsuite/gdb.base/vla-overflow.exp -new file mode 100644 -index 0000000..24a608f ---- /dev/null -+++ b/gdb/testsuite/gdb.base/vla-overflow.exp +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.base/vla-overflow.exp +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.base/vla-overflow.exp 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,109 @@ +# Copyright 2008 Free Software Foundation, Inc. + @@ -11422,11 +11397,10 @@ index 0000000..24a608f +gdb_test "bt" "in \[^ \]*abort \\(.* in main \\(.*" "Backtrace after abort()" + +verbose -log "kb_found in bt after abort() = [expr [memory_v_pages_get] * $pagesize / 1024]" -diff --git a/gdb/testsuite/gdb.base/vla.c b/gdb/testsuite/gdb.base/vla.c -new file mode 100644 -index 0000000..e1f3ed1 ---- /dev/null -+++ b/gdb/testsuite/gdb.base/vla.c +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.base/vla.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.base/vla.c 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,55 @@ +/* This testcase is part of GDB, the GNU debugger. + @@ -11483,11 +11457,10 @@ index 0000000..e1f3ed1 + foo (78); + return 0; +} -diff --git a/gdb/testsuite/gdb.base/vla.exp b/gdb/testsuite/gdb.base/vla.exp -new file mode 100644 -index 0000000..5da7378 ---- /dev/null -+++ b/gdb/testsuite/gdb.base/vla.exp +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.base/vla.exp +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.base/vla.exp 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,62 @@ +# Copyright 2008 Free Software Foundation, Inc. + @@ -11551,11 +11524,11 @@ index 0000000..5da7378 +gdb_test "p temp1" " = '1' " "second: print temp1" +gdb_test "p temp2" " = '2' " "second: print temp2" +gdb_test "p temp3" " = '3' " "second: print temp3" -diff --git a/gdb/testsuite/gdb.cp/nextoverthrow.exp b/gdb/testsuite/gdb.cp/nextoverthrow.exp -index 89c02d6..a970bb9 100644 ---- a/gdb/testsuite/gdb.cp/nextoverthrow.exp -+++ b/gdb/testsuite/gdb.cp/nextoverthrow.exp -@@ -53,6 +53,17 @@ gdb_test_multiple "print _Unwind_DebugHook" "check for unwinder hook" { +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.cp/nextoverthrow.exp +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/testsuite/gdb.cp/nextoverthrow.exp 2011-01-01 16:33:44.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.cp/nextoverthrow.exp 2011-04-29 09:40:46.000000000 +0200 +@@ -53,6 +53,17 @@ gdb_test_multiple "print _Unwind_DebugHo } } if {!$ok} { @@ -11573,11 +11546,10 @@ index 89c02d6..a970bb9 100644 unsupported "nextoverthrow.exp could not find _Unwind_DebugHook" return -1 } -diff --git a/gdb/testsuite/gdb.dwarf2/dw2-bound-loclist.S b/gdb/testsuite/gdb.dwarf2/dw2-bound-loclist.S -new file mode 100644 -index 0000000..aac3baa ---- /dev/null -+++ b/gdb/testsuite/gdb.dwarf2/dw2-bound-loclist.S +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.dwarf2/dw2-bound-loclist.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.dwarf2/dw2-bound-loclist.S 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,246 @@ +/* This testcase is part of GDB, the GNU debugger. + @@ -11825,11 +11797,10 @@ index 0000000..aac3baa + .string "char" +.Luint_str: + .string "unsigned int" -diff --git a/gdb/testsuite/gdb.dwarf2/dw2-bound-loclist.exp b/gdb/testsuite/gdb.dwarf2/dw2-bound-loclist.exp -new file mode 100644 -index 0000000..815ed93 ---- /dev/null -+++ b/gdb/testsuite/gdb.dwarf2/dw2-bound-loclist.exp +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.dwarf2/dw2-bound-loclist.exp +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.dwarf2/dw2-bound-loclist.exp 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,54 @@ +# Copyright 2010 Free Software Foundation, Inc. + @@ -11885,11 +11856,10 @@ index 0000000..815ed93 + +# The register contains unpredictable value - the array size. +gdb_test "ptype reg_string" {type = char \[-?[0-9]+\]} -diff --git a/gdb/testsuite/gdb.dwarf2/dw2-stripped.c b/gdb/testsuite/gdb.dwarf2/dw2-stripped.c -new file mode 100644 -index 0000000..1f02d90 ---- /dev/null -+++ b/gdb/testsuite/gdb.dwarf2/dw2-stripped.c +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.dwarf2/dw2-stripped.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.dwarf2/dw2-stripped.c 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,42 @@ +/* This testcase is part of GDB, the GNU debugger. + @@ -11933,11 +11903,10 @@ index 0000000..1f02d90 + func1 (1, 2); + return 0; +} -diff --git a/gdb/testsuite/gdb.dwarf2/dw2-stripped.exp b/gdb/testsuite/gdb.dwarf2/dw2-stripped.exp -new file mode 100644 -index 0000000..1c6e84a ---- /dev/null -+++ b/gdb/testsuite/gdb.dwarf2/dw2-stripped.exp +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.dwarf2/dw2-stripped.exp +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.dwarf2/dw2-stripped.exp 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,79 @@ +# Copyright 2006 Free Software Foundation, Inc. + @@ -12018,11 +11987,10 @@ index 0000000..1c6e84a +gdb_test "step" \ + "func.* \\(.*\\) at .*" \ + "step" -diff --git a/gdb/testsuite/gdb.dwarf2/dw2-struct-member-data-location.S b/gdb/testsuite/gdb.dwarf2/dw2-struct-member-data-location.S -new file mode 100644 -index 0000000..5fcdd84 ---- /dev/null -+++ b/gdb/testsuite/gdb.dwarf2/dw2-struct-member-data-location.S +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.dwarf2/dw2-struct-member-data-location.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.dwarf2/dw2-struct-member-data-location.S 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,83 @@ +/* This testcase is part of GDB, the GNU debugger. + @@ -12107,11 +12075,10 @@ index 0000000..5fcdd84 + + .byte 0x0 /* Terminator */ + .byte 0x0 /* Terminator */ -diff --git a/gdb/testsuite/gdb.dwarf2/dw2-struct-member-data-location.exp b/gdb/testsuite/gdb.dwarf2/dw2-struct-member-data-location.exp -new file mode 100644 -index 0000000..c41151c ---- /dev/null -+++ b/gdb/testsuite/gdb.dwarf2/dw2-struct-member-data-location.exp +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.dwarf2/dw2-struct-member-data-location.exp +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.dwarf2/dw2-struct-member-data-location.exp 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,37 @@ +# Copyright 2009 Free Software Foundation, Inc. + @@ -12150,11 +12117,10 @@ index 0000000..c41151c +clean_restart $binfile + +gdb_test "ptype struct some_struct" "type = struct some_struct {\[\r\n \t\]*void field;\[\r\n \t\]*}" -diff --git a/gdb/testsuite/gdb.fortran/dwarf-stride.exp b/gdb/testsuite/gdb.fortran/dwarf-stride.exp -new file mode 100644 -index 0000000..cd3486b ---- /dev/null -+++ b/gdb/testsuite/gdb.fortran/dwarf-stride.exp +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.fortran/dwarf-stride.exp +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.fortran/dwarf-stride.exp 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,42 @@ +# Copyright 2009 Free Software Foundation, Inc. + @@ -12198,11 +12164,10 @@ index 0000000..cd3486b +gdb_continue_to_breakpoint "break-here" ".*break-here.*" +gdb_test "p c40pt(1)" " = '0-hello.*" +gdb_test "p c40pt(2)" " = '1-hello.*" -diff --git a/gdb/testsuite/gdb.fortran/dwarf-stride.f90 b/gdb/testsuite/gdb.fortran/dwarf-stride.f90 -new file mode 100644 -index 0000000..e492b3a ---- /dev/null -+++ b/gdb/testsuite/gdb.fortran/dwarf-stride.f90 +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.fortran/dwarf-stride.f90 +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.fortran/dwarf-stride.f90 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,40 @@ +! Copyright 2009 Free Software Foundation, Inc. +! @@ -12244,11 +12209,10 @@ index 0000000..e492b3a + print *, c40pt ! break-here + +end program repro -diff --git a/gdb/testsuite/gdb.fortran/dynamic-other-frame-stub.f90 b/gdb/testsuite/gdb.fortran/dynamic-other-frame-stub.f90 -new file mode 100644 -index 0000000..261ce17 ---- /dev/null -+++ b/gdb/testsuite/gdb.fortran/dynamic-other-frame-stub.f90 +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.fortran/dynamic-other-frame-stub.f90 +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.fortran/dynamic-other-frame-stub.f90 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,24 @@ +! Copyright 2010 Free Software Foundation, Inc. +! @@ -12274,11 +12238,10 @@ index 0000000..261ce17 + real :: dummy + dummy = 1 +end subroutine bar -diff --git a/gdb/testsuite/gdb.fortran/dynamic-other-frame.exp b/gdb/testsuite/gdb.fortran/dynamic-other-frame.exp -new file mode 100644 -index 0000000..4fdd5ee ---- /dev/null -+++ b/gdb/testsuite/gdb.fortran/dynamic-other-frame.exp +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.fortran/dynamic-other-frame.exp +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.fortran/dynamic-other-frame.exp 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,37 @@ +# Copyright 2010 Free Software Foundation, Inc. + @@ -12317,11 +12280,10 @@ index 0000000..4fdd5ee +} + +gdb_test "bt" {foo \(string='hello'.*} -diff --git a/gdb/testsuite/gdb.fortran/dynamic-other-frame.f90 b/gdb/testsuite/gdb.fortran/dynamic-other-frame.f90 -new file mode 100644 -index 0000000..2bc637d ---- /dev/null -+++ b/gdb/testsuite/gdb.fortran/dynamic-other-frame.f90 +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.fortran/dynamic-other-frame.f90 +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.fortran/dynamic-other-frame.f90 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,36 @@ +! Copyright 2010 Free Software Foundation, Inc. +! @@ -12359,11 +12321,10 @@ index 0000000..2bc637d + end interface + call foo ('hello') +end -diff --git a/gdb/testsuite/gdb.fortran/dynamic.exp b/gdb/testsuite/gdb.fortran/dynamic.exp -new file mode 100644 -index 0000000..0ccebe0 ---- /dev/null -+++ b/gdb/testsuite/gdb.fortran/dynamic.exp +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.fortran/dynamic.exp +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.fortran/dynamic.exp 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,145 @@ +# Copyright 2007 Free Software Foundation, Inc. + @@ -12510,11 +12471,10 @@ index 0000000..0ccebe0 +gdb_test "p vart(3,8)" "\\$\[0-9\]* = 9" +# maps to foo::vary(1,3) +gdb_test "p vart(2,9)" "\\$\[0-9\]* = 10" -diff --git a/gdb/testsuite/gdb.fortran/dynamic.f90 b/gdb/testsuite/gdb.fortran/dynamic.f90 -new file mode 100644 -index 0000000..0f43564 ---- /dev/null -+++ b/gdb/testsuite/gdb.fortran/dynamic.f90 +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.fortran/dynamic.f90 +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.fortran/dynamic.f90 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,98 @@ +! Copyright 2007 Free Software Foundation, Inc. +! @@ -12614,11 +12574,10 @@ index 0000000..0f43564 + if (x (1, 1) .ne. 8 .or. x (2, 2) .ne. 9 .or. x (1, 2) .ne. 4) call abort + if (x (3, 1) .ne. 10) call abort +end -diff --git a/gdb/testsuite/gdb.fortran/string.exp b/gdb/testsuite/gdb.fortran/string.exp -new file mode 100644 -index 0000000..b1120c3 ---- /dev/null -+++ b/gdb/testsuite/gdb.fortran/string.exp +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.fortran/string.exp +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.fortran/string.exp 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,59 @@ +# Copyright 2008 Free Software Foundation, Inc. + @@ -12679,11 +12638,10 @@ index 0000000..b1120c3 +gdb_continue_to_breakpoint "var-finish" +gdb_test "p e" "\\$\[0-9\]* = 'e '" "p e re-set" +gdb_test "p f" "\\$\[0-9\]* = \\(\\( 'f ', 'f ', 'f ', 'f ', 'f ', 'f ', 'f '\\) \\( 'f2 ', 'f ', 'f ', 'f ', 'f ', 'f ', 'f '\\) \\( 'f ', 'f ', 'f ', 'f ', 'f ', 'f ', 'f '\\) \\)" "p *f re-set" -diff --git a/gdb/testsuite/gdb.fortran/string.f90 b/gdb/testsuite/gdb.fortran/string.f90 -new file mode 100644 -index 0000000..226dc5d ---- /dev/null -+++ b/gdb/testsuite/gdb.fortran/string.f90 +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.fortran/string.f90 +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.fortran/string.f90 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,37 @@ +! Copyright 2008 Free Software Foundation, Inc. +! @@ -12722,11 +12680,10 @@ index 0000000..226dc5d + h = 'h' + call foo (g, h) +end -diff --git a/gdb/testsuite/gdb.fortran/subrange.exp b/gdb/testsuite/gdb.fortran/subrange.exp -new file mode 100644 -index 0000000..be372c1 ---- /dev/null -+++ b/gdb/testsuite/gdb.fortran/subrange.exp +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.fortran/subrange.exp +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.fortran/subrange.exp 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,60 @@ +# Copyright 2011 Free Software Foundation, Inc. + @@ -12788,11 +12745,10 @@ index 0000000..be372c1 +delete_breakpoints +gdb_unload +gdb_test {p $a (3, 2:2)} { = \(23\)} -diff --git a/gdb/testsuite/gdb.fortran/subrange.f90 b/gdb/testsuite/gdb.fortran/subrange.f90 -new file mode 100644 -index 0000000..4747ea9 ---- /dev/null -+++ b/gdb/testsuite/gdb.fortran/subrange.f90 +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.fortran/subrange.f90 +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.fortran/subrange.f90 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,28 @@ +! Copyright 2011 Free Software Foundation, Inc. +! @@ -12822,10 +12778,10 @@ index 0000000..4747ea9 + ptr => a + write (*,*) a ! break-static +end -diff --git a/gdb/testsuite/gdb.gdb/selftest.exp b/gdb/testsuite/gdb.gdb/selftest.exp -index 30a71dd..4bb8e7d 100644 ---- a/gdb/testsuite/gdb.gdb/selftest.exp -+++ b/gdb/testsuite/gdb.gdb/selftest.exp +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.gdb/selftest.exp +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/testsuite/gdb.gdb/selftest.exp 2011-04-29 09:40:43.000000000 +0200 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.gdb/selftest.exp 2011-04-29 09:40:46.000000000 +0200 @@ -92,6 +92,10 @@ proc do_steps_and_nexts {} { set description "step over ttyarg initialization" set command "step" @@ -12837,11 +12793,10 @@ index 30a71dd..4bb8e7d 100644 -re ".*pre_stat_chain = make_command_stats_cleanup.*$gdb_prompt $" { set description "next over make_command_stats_cleanup and everything it calls" set command "next" -diff --git a/gdb/testsuite/gdb.mi/mi2-var-stale-type.c b/gdb/testsuite/gdb.mi/mi2-var-stale-type.c -new file mode 100644 -index 0000000..ebced3c ---- /dev/null -+++ b/gdb/testsuite/gdb.mi/mi2-var-stale-type.c +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.mi/mi2-var-stale-type.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.mi/mi2-var-stale-type.c 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,26 @@ +/* Copyright 2011 Free Software Foundation, Inc. + @@ -12869,11 +12824,10 @@ index 0000000..ebced3c + + return 0; +} -diff --git a/gdb/testsuite/gdb.mi/mi2-var-stale-type.exp b/gdb/testsuite/gdb.mi/mi2-var-stale-type.exp -new file mode 100644 -index 0000000..74a104e ---- /dev/null -+++ b/gdb/testsuite/gdb.mi/mi2-var-stale-type.exp +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.mi/mi2-var-stale-type.exp +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.mi/mi2-var-stale-type.exp 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,57 @@ +# Copyright 2011 Free Software Foundation, Inc. +# @@ -12932,11 +12886,10 @@ index 0000000..74a104e +mi_create_varobj "vla" "vla" "create local variable vla" + +mi_gdb_test "-var-update *" "\\^done,changelist=.*" "-var-update *" -diff --git a/gdb/testsuite/gdb.multi/watchpoint-multi.c b/gdb/testsuite/gdb.multi/watchpoint-multi.c -new file mode 100644 -index 0000000..153c18b ---- /dev/null -+++ b/gdb/testsuite/gdb.multi/watchpoint-multi.c +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.multi/watchpoint-multi.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.multi/watchpoint-multi.c 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,59 @@ +/* This testcase is part of GDB, the GNU debugger. + @@ -12997,11 +12950,10 @@ index 0000000..153c18b + marker_exit2 (); + return 0; +} -diff --git a/gdb/testsuite/gdb.multi/watchpoint-multi.exp b/gdb/testsuite/gdb.multi/watchpoint-multi.exp -new file mode 100644 -index 0000000..97fa6cd ---- /dev/null -+++ b/gdb/testsuite/gdb.multi/watchpoint-multi.exp +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.multi/watchpoint-multi.exp +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.multi/watchpoint-multi.exp 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,113 @@ +# Copyright 2010 Free Software Foundation, Inc. + @@ -13116,11 +13068,10 @@ index 0000000..97fa6cd + } +} + -diff --git a/gdb/testsuite/gdb.opt/array-from-register-func.c b/gdb/testsuite/gdb.opt/array-from-register-func.c -new file mode 100644 -index 0000000..729f457 ---- /dev/null -+++ b/gdb/testsuite/gdb.opt/array-from-register-func.c +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.opt/array-from-register-func.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.opt/array-from-register-func.c 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,22 @@ +/* This file is part of GDB, the GNU debugger. + @@ -13144,11 +13095,10 @@ index 0000000..729f457 +{ + return arr[0]; +} -diff --git a/gdb/testsuite/gdb.opt/array-from-register.c b/gdb/testsuite/gdb.opt/array-from-register.c -new file mode 100644 -index 0000000..3090e7e ---- /dev/null -+++ b/gdb/testsuite/gdb.opt/array-from-register.c +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.opt/array-from-register.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.opt/array-from-register.c 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,28 @@ +/* This file is part of GDB, the GNU debugger. + @@ -13178,11 +13128,10 @@ index 0000000..3090e7e + + return 0; +} -diff --git a/gdb/testsuite/gdb.opt/array-from-register.exp b/gdb/testsuite/gdb.opt/array-from-register.exp -new file mode 100644 -index 0000000..f2de718 ---- /dev/null -+++ b/gdb/testsuite/gdb.opt/array-from-register.exp +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.opt/array-from-register.exp +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.opt/array-from-register.exp 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,33 @@ +# Copyright 2009 Free Software Foundation, Inc. +# @@ -13217,11 +13166,10 @@ index 0000000..f2de718 +# Seen regression: +# Address requested for identifier "arr" which is in register $rdi +gdb_test "p arr\[0\]" "\\$\[0-9\]+ = 42" -diff --git a/gdb/testsuite/gdb.pascal/arrays.exp b/gdb/testsuite/gdb.pascal/arrays.exp -new file mode 100644 -index 0000000..ccc6e1e ---- /dev/null -+++ b/gdb/testsuite/gdb.pascal/arrays.exp +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.pascal/arrays.exp +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.pascal/arrays.exp 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,104 @@ +# Copyright 2008, 2009 Free Software Foundation, Inc. +# @@ -13327,11 +13275,10 @@ index 0000000..ccc6e1e +} +gdb_test "print DynArrChar" ".* = 'abcdefghijklm'" "Print dynamic array of char" + -diff --git a/gdb/testsuite/gdb.pascal/arrays.pas b/gdb/testsuite/gdb.pascal/arrays.pas -new file mode 100644 -index 0000000..295602d ---- /dev/null -+++ b/gdb/testsuite/gdb.pascal/arrays.pas +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.pascal/arrays.pas +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.pascal/arrays.pas 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,82 @@ +{ + Copyright 2008, 2009 Free Software Foundation, Inc. @@ -13415,11 +13362,11 @@ index 0000000..295602d + s := 'test'#0'string'; + writeln(s); { set breakpoint 2 here } +end. -diff --git a/gdb/testsuite/gdb.python/py-frame.exp b/gdb/testsuite/gdb.python/py-frame.exp -index 1cb573e..3605ee5 100644 ---- a/gdb/testsuite/gdb.python/py-frame.exp -+++ b/gdb/testsuite/gdb.python/py-frame.exp -@@ -78,8 +78,6 @@ gdb_test "python print bframe == gdb.newest_frame()" True \ +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.python/py-frame.exp +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/testsuite/gdb.python/py-frame.exp 2011-02-26 15:06:28.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.python/py-frame.exp 2011-04-29 09:40:46.000000000 +0200 +@@ -78,8 +78,6 @@ gdb_test "python print bframe == gdb.new gdb_test "python print 'result =', f0 == f1" " = False" "test equality comparison (false)" gdb_test "python print 'result =', f0 == f0" " = True" "test equality comparison (true)" @@ -13428,16 +13375,16 @@ index 1cb573e..3605ee5 100644 gdb_test "python print 'result =', f0.is_valid ()" " = True" "test Frame.is_valid" gdb_test "python print 'result =', f0.name ()" " = f2" "test Frame.name" gdb_test "python print 'result =', f0.type () == gdb.NORMAL_FRAME" " = True" "test Frame.type" -@@ -94,3 +92,5 @@ gdb_test "python print 'result =', f0.read_var ('variable_which_surely_doesnt_ex +@@ -94,3 +92,5 @@ gdb_test "python print 'result =', f0.re gdb_test "python print 'result =', f0.read_var ('a')" " = 1" "test Frame.read_var - success" gdb_test "python print 'result =', gdb.selected_frame () == f1" " = True" "test gdb.selected_frame" + +gdb_test "python print 'result =', f0.block ()" "" "test Frame.block" -diff --git a/gdb/testsuite/gdb.python/py-value.exp b/gdb/testsuite/gdb.python/py-value.exp -index e012d53..1bd9e53 100644 ---- a/gdb/testsuite/gdb.python/py-value.exp -+++ b/gdb/testsuite/gdb.python/py-value.exp +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.python/py-value.exp +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/testsuite/gdb.python/py-value.exp 2011-01-01 16:33:49.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.python/py-value.exp 2011-04-29 09:40:46.000000000 +0200 @@ -318,6 +318,15 @@ proc test_value_after_death {} { "print value's type" } @@ -13462,11 +13409,10 @@ index e012d53..1bd9e53 100644 # The following test recompiles the binary to test either C or C++ # values. -diff --git a/gdb/testsuite/gdb.threads/watchpoint-fork-child.c b/gdb/testsuite/gdb.threads/watchpoint-fork-child.c -new file mode 100644 -index 0000000..a2ad29a ---- /dev/null -+++ b/gdb/testsuite/gdb.threads/watchpoint-fork-child.c +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.threads/watchpoint-fork-child.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.threads/watchpoint-fork-child.c 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,127 @@ +/* Test case for forgotten hw-watchpoints after fork()-off of a process. + @@ -13595,11 +13541,10 @@ index 0000000..a2ad29a + i = sigaction (SIGUSR1, &oldact, NULL); + assert (i == 0); +} -diff --git a/gdb/testsuite/gdb.threads/watchpoint-fork-mt.c b/gdb/testsuite/gdb.threads/watchpoint-fork-mt.c -new file mode 100644 -index 0000000..08a5aff ---- /dev/null -+++ b/gdb/testsuite/gdb.threads/watchpoint-fork-mt.c +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.threads/watchpoint-fork-mt.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.threads/watchpoint-fork-mt.c 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,174 @@ +/* Test case for forgotten hw-watchpoints after fork()-off of a process. + @@ -13775,11 +13720,10 @@ index 0000000..08a5aff + mark_exit (); + return 0; +} -diff --git a/gdb/testsuite/gdb.threads/watchpoint-fork-parent.c b/gdb/testsuite/gdb.threads/watchpoint-fork-parent.c -new file mode 100644 -index 0000000..82d1182 ---- /dev/null -+++ b/gdb/testsuite/gdb.threads/watchpoint-fork-parent.c +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.threads/watchpoint-fork-parent.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.threads/watchpoint-fork-parent.c 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,74 @@ +/* Test case for forgotten hw-watchpoints after fork()-off of a process. + @@ -13855,11 +13799,10 @@ index 0000000..82d1182 + marker (); + } +} -diff --git a/gdb/testsuite/gdb.threads/watchpoint-fork-st.c b/gdb/testsuite/gdb.threads/watchpoint-fork-st.c -new file mode 100644 -index 0000000..a7eeedd ---- /dev/null -+++ b/gdb/testsuite/gdb.threads/watchpoint-fork-st.c +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.threads/watchpoint-fork-st.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.threads/watchpoint-fork-st.c 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,61 @@ +/* Test case for forgotten hw-watchpoints after fork()-off of a process. + @@ -13922,11 +13865,10 @@ index 0000000..a7eeedd + mark_exit (); + return 0; +} -diff --git a/gdb/testsuite/gdb.threads/watchpoint-fork.exp b/gdb/testsuite/gdb.threads/watchpoint-fork.exp -new file mode 100644 -index 0000000..117700b ---- /dev/null -+++ b/gdb/testsuite/gdb.threads/watchpoint-fork.exp +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.threads/watchpoint-fork.exp +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.threads/watchpoint-fork.exp 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,149 @@ +# Copyright 2008, 2009, 2010 Free Software Foundation, Inc. + @@ -14077,11 +14019,10 @@ index 0000000..117700b +} else { + untested "child" +} -diff --git a/gdb/testsuite/gdb.threads/watchpoint-fork.h b/gdb/testsuite/gdb.threads/watchpoint-fork.h -new file mode 100644 -index 0000000..31f7656 ---- /dev/null -+++ b/gdb/testsuite/gdb.threads/watchpoint-fork.h +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.threads/watchpoint-fork.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.threads/watchpoint-fork.h 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,32 @@ +/* Test case for forgotten hw-watchpoints after fork()-off of a process. + @@ -14115,11 +14056,10 @@ index 0000000..31f7656 + +extern void marker (void); +extern void forkoff (int nr); -diff --git a/gdb/testsuite/gdb.trace/stap-trace.c b/gdb/testsuite/gdb.trace/stap-trace.c -new file mode 100644 -index 0000000..27f317e ---- /dev/null -+++ b/gdb/testsuite/gdb.trace/stap-trace.c +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.trace/stap-trace.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.trace/stap-trace.c 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,71 @@ +/* This testcase is part of GDB, the GNU debugger. + @@ -14192,11 +14132,10 @@ index 0000000..27f317e + + return 0; +} -diff --git a/gdb/testsuite/gdb.trace/stap-trace.exp b/gdb/testsuite/gdb.trace/stap-trace.exp -new file mode 100644 -index 0000000..189355f ---- /dev/null -+++ b/gdb/testsuite/gdb.trace/stap-trace.exp +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.trace/stap-trace.exp +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.trace/stap-trace.exp 2011-04-29 09:40:46.000000000 +0200 @@ -0,0 +1,129 @@ +# Copyright 2011 +# Free Software Foundation, Inc. @@ -14327,10 +14266,10 @@ index 0000000..189355f + +# Finished! +gdb_test "tfind none" ".*" "" -diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp -index a512527..654e3c9 100644 ---- a/gdb/testsuite/lib/gdb.exp -+++ b/gdb/testsuite/lib/gdb.exp +Index: gdb-7.2.90.20110429/gdb/testsuite/lib/gdb.exp +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/testsuite/lib/gdb.exp 2011-03-25 14:08:11.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/testsuite/lib/gdb.exp 2011-04-29 09:40:46.000000000 +0200 @@ -141,6 +141,11 @@ proc gdb_unload {} { send_gdb "y\n" exp_continue @@ -14343,10 +14282,10 @@ index a512527..654e3c9 100644 -re "Discard symbol table from .*y or n.*$" { send_gdb "y\n" exp_continue -diff --git a/gdb/testsuite/lib/pascal.exp b/gdb/testsuite/lib/pascal.exp -index 891da37..236c5ca 100644 ---- a/gdb/testsuite/lib/pascal.exp -+++ b/gdb/testsuite/lib/pascal.exp +Index: gdb-7.2.90.20110429/gdb/testsuite/lib/pascal.exp +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/testsuite/lib/pascal.exp 2011-01-01 16:33:52.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/testsuite/lib/pascal.exp 2011-04-29 09:40:46.000000000 +0200 @@ -37,6 +37,9 @@ proc pascal_init {} { global pascal_compiler_is_fpc global gpc_compiler @@ -14378,10 +14317,10 @@ index 891da37..236c5ca 100644 } set pascal_init_done 1 } -diff --git a/gdb/thread.c b/gdb/thread.c -index 6ad1807..aef9dce 100644 ---- a/gdb/thread.c -+++ b/gdb/thread.c +Index: gdb-7.2.90.20110429/gdb/thread.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/thread.c 2011-04-19 17:24:49.000000000 +0200 ++++ gdb-7.2.90.20110429/gdb/thread.c 2011-04-29 09:40:46.000000000 +0200 @@ -1438,7 +1438,8 @@ update_thread_list (void) no thread is selected, or no threads exist. */ @@ -14392,7 +14331,7 @@ index 6ad1807..aef9dce 100644 { struct thread_info *tp = find_thread_ptid (inferior_ptid); -@@ -1449,6 +1450,15 @@ thread_id_make_value (struct gdbarch *gdbarch, struct internalvar *var) +@@ -1449,6 +1450,15 @@ thread_id_make_value (struct gdbarch *gd /* Commands with a prefix of `thread'. */ struct cmd_list_element *thread_cmd_list = NULL; @@ -14408,17 +14347,17 @@ index 6ad1807..aef9dce 100644 void _initialize_thread (void) { -@@ -1494,5 +1504,5 @@ Show printing of thread events (such as thread start and exit)."), NULL, +@@ -1494,5 +1504,5 @@ Show printing of thread events (such as show_print_thread_events, &setprintlist, &showprintlist); - create_internalvar_type_lazy ("_thread", thread_id_make_value); + create_internalvar_type_lazy ("_thread", &thread_funcs, NULL); } -diff --git a/gdb/top.c b/gdb/top.c -index a25550f..87f0b41 100644 ---- a/gdb/top.c -+++ b/gdb/top.c +Index: gdb-7.2.90.20110429/gdb/top.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/top.c 2011-03-12 23:59:24.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/top.c 2011-04-29 09:40:46.000000000 +0200 @@ -343,6 +343,9 @@ void prepare_execute_command (void) { @@ -14429,10 +14368,10 @@ index a25550f..87f0b41 100644 /* With multiple threads running while the one we're examining is stopped, the dcache can get stale without us being able to detect -diff --git a/gdb/tracepoint.c b/gdb/tracepoint.c -index 3ae35d0..1cb39ea 100644 ---- a/gdb/tracepoint.c -+++ b/gdb/tracepoint.c +Index: gdb-7.2.90.20110429/gdb/tracepoint.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/tracepoint.c 2011-03-18 19:47:56.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/tracepoint.c 2011-04-29 09:40:46.000000000 +0200 @@ -1600,6 +1600,8 @@ start_tracing (void) for (ix = 0; VEC_iterate (breakpoint_p, tp_vec, ix, t); ix++) @@ -14452,7 +14391,7 @@ index 3ae35d0..1cb39ea 100644 } VEC_free (breakpoint_p, tp_vec); -@@ -1669,7 +1674,28 @@ trace_stop_command (char *args, int from_tty) +@@ -1669,7 +1674,28 @@ trace_stop_command (char *args, int from void stop_tracing (void) { @@ -14481,7 +14420,7 @@ index 3ae35d0..1cb39ea 100644 /* Should change in response to reply? */ current_trace_status ()->running = 0; } -@@ -4497,7 +4523,8 @@ info_static_tracepoint_markers_command (char *arg, int from_tty) +@@ -4497,7 +4523,8 @@ info_static_tracepoint_markers_command ( available. */ static struct value * @@ -14491,7 +14430,7 @@ index 3ae35d0..1cb39ea 100644 { LONGEST size; gdb_byte *buf; -@@ -4676,6 +4703,15 @@ traceframe_available_memory (VEC(mem_range_s) **result, +@@ -4676,6 +4703,15 @@ traceframe_available_memory (VEC(mem_ran return 0; } @@ -14516,10 +14455,10 @@ index 3ae35d0..1cb39ea 100644 traceframe_number = -1; tracepoint_number = -1; -diff --git a/gdb/typeprint.c b/gdb/typeprint.c -index 03e6332..ce6d1e0 100644 ---- a/gdb/typeprint.c -+++ b/gdb/typeprint.c +Index: gdb-7.2.90.20110429/gdb/typeprint.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/typeprint.c 2011-01-11 22:53:25.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/typeprint.c 2011-04-29 09:40:46.000000000 +0200 @@ -36,6 +36,7 @@ #include "gdb_string.h" #include "exceptions.h" @@ -14573,11 +14512,11 @@ index 03e6332..ce6d1e0 100644 } static void -diff --git a/gdb/utils.c b/gdb/utils.c -index 51d32b7..5fee809 100644 ---- a/gdb/utils.c -+++ b/gdb/utils.c -@@ -2243,6 +2243,36 @@ set_batch_flag_and_make_cleanup_restore_page_info (void) +Index: gdb-7.2.90.20110429/gdb/utils.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/utils.c 2011-03-31 16:32:48.000000000 +0200 ++++ gdb-7.2.90.20110429/gdb/utils.c 2011-04-29 09:40:46.000000000 +0200 +@@ -2243,6 +2243,36 @@ set_batch_flag_and_make_cleanup_restore_ return back_to; } @@ -14614,11 +14553,11 @@ index 51d32b7..5fee809 100644 /* Set the screen size based on LINES_PER_PAGE and CHARS_PER_LINE. */ static void -diff --git a/gdb/valarith.c b/gdb/valarith.c -index 68f649f..aaa4487 100644 ---- a/gdb/valarith.c -+++ b/gdb/valarith.c -@@ -198,7 +198,10 @@ value_subscripted_rvalue (struct value *array, LONGEST index, int lowerbound) +Index: gdb-7.2.90.20110429/gdb/valarith.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/valarith.c 2011-02-18 20:10:46.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/valarith.c 2011-04-29 09:40:46.000000000 +0200 +@@ -198,7 +198,10 @@ value_subscripted_rvalue (struct value * struct type *array_type = check_typedef (value_type (array)); struct type *elt_type = check_typedef (TYPE_TARGET_TYPE (array_type)); unsigned int elt_size = TYPE_LENGTH (elt_type); @@ -14641,10 +14580,10 @@ index 68f649f..aaa4487 100644 return binop_types_user_defined_p (op, value_type (arg1), value_type (arg2)); } -diff --git a/gdb/valops.c b/gdb/valops.c -index 99115b7..dc27644 100644 ---- a/gdb/valops.c -+++ b/gdb/valops.c +Index: gdb-7.2.90.20110429/gdb/valops.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/valops.c 2011-03-29 19:04:30.000000000 +0200 ++++ gdb-7.2.90.20110429/gdb/valops.c 2011-04-29 09:40:46.000000000 +0200 @@ -47,6 +47,7 @@ #include "objfiles.h" #include "symtab.h" @@ -14653,7 +14592,7 @@ index 99115b7..dc27644 100644 extern int overload_debug; /* Local functions. */ -@@ -915,6 +916,65 @@ value_one (struct type *type, enum lval_type lv) +@@ -915,6 +916,65 @@ value_one (struct type *type, enum lval_ return val; } @@ -14745,7 +14684,7 @@ index 99115b7..dc27644 100644 } else if (VALUE_LVAL (val) == lval_register) { -@@ -1528,7 +1596,18 @@ address_of_variable (struct symbol *var, struct block *b) +@@ -1528,7 +1596,18 @@ address_of_variable (struct symbol *var, if ((VALUE_LVAL (val) == lval_memory && value_lazy (val)) || TYPE_CODE (type) == TYPE_CODE_FUNC) { @@ -14787,7 +14726,7 @@ index 99115b7..dc27644 100644 } /* Given a value which is a function, return a value which is a pointer -@@ -3695,6 +3779,8 @@ value_slice (struct value *array, int lowbound, int length) +@@ -3695,6 +3779,8 @@ value_slice (struct value *array, int lo TYPE_TARGET_TYPE (range_type), lowbound, lowbound + length - 1); @@ -14796,10 +14735,10 @@ index 99115b7..dc27644 100644 if (TYPE_CODE (array_type) == TYPE_CODE_BITSTRING) { int i; -diff --git a/gdb/valprint.c b/gdb/valprint.c -index 286ef9e..1fe58b1 100644 ---- a/gdb/valprint.c -+++ b/gdb/valprint.c +Index: gdb-7.2.90.20110429/gdb/valprint.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/valprint.c 2011-02-14 12:35:45.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/valprint.c 2011-04-29 09:40:46.000000000 +0200 @@ -36,6 +36,7 @@ #include "dfp.h" #include "python/python.h" @@ -14816,7 +14755,7 @@ index 286ef9e..1fe58b1 100644 case TYPE_CODE_BITSTRING: return 0; default: -@@ -1193,6 +1193,7 @@ val_print_array_elements (struct type *type, +@@ -1193,6 +1193,7 @@ val_print_array_elements (struct type *t { unsigned int things_printed = 0; unsigned len; @@ -14824,7 +14763,7 @@ index 286ef9e..1fe58b1 100644 struct type *elttype, *index_type; unsigned eltlen; /* Position of the array element we are examining to see -@@ -1201,9 +1202,33 @@ val_print_array_elements (struct type *type, +@@ -1201,9 +1202,33 @@ val_print_array_elements (struct type *t /* Number of repetitions we have detected so far. */ unsigned int reps; LONGEST low_bound, high_bound; @@ -14860,7 +14799,7 @@ index 286ef9e..1fe58b1 100644 index_type = TYPE_INDEX_TYPE (type); if (get_array_bounds (type, &low_bound, &high_bound)) -@@ -1284,6 +1309,8 @@ val_print_array_elements (struct type *type, +@@ -1284,6 +1309,8 @@ val_print_array_elements (struct type *t { fprintf_filtered (stream, "..."); } @@ -14869,10 +14808,10 @@ index 286ef9e..1fe58b1 100644 } /* Read LEN bytes of target memory at address MEMADDR, placing the -diff --git a/gdb/value.c b/gdb/value.c -index 2acb1df..6744b76 100644 ---- a/gdb/value.c -+++ b/gdb/value.c +Index: gdb-7.2.90.20110429/gdb/value.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/value.c 2011-02-27 21:57:15.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/value.c 2011-04-29 09:40:46.000000000 +0200 @@ -43,6 +43,7 @@ #include "python/python.h" #include @@ -14897,7 +14836,7 @@ index 2acb1df..6744b76 100644 if (whole->lval == lval_computed) { struct lval_funcs *funcs = whole->location.computed.funcs; -@@ -1352,6 +1356,12 @@ set_value_component_location (struct value *component, +@@ -1352,6 +1356,12 @@ set_value_component_location (struct val if (funcs->copy_closure) component->location.computed.closure = funcs->copy_closure (whole); } @@ -14910,7 +14849,7 @@ index 2acb1df..6744b76 100644 } -@@ -1485,6 +1495,31 @@ show_values (char *num_exp, int from_tty) +@@ -1485,6 +1495,31 @@ show_values (char *num_exp, int from_tty num_exp[1] = '\0'; } } @@ -15001,7 +14940,7 @@ index 2acb1df..6744b76 100644 /* Look up an internal variable with name NAME. NAME should not normally include a dollar sign. -@@ -1713,7 +1776,8 @@ value_of_internalvar (struct gdbarch *gdbarch, struct internalvar *var) +@@ -1713,7 +1776,8 @@ value_of_internalvar (struct gdbarch *gd break; case INTERNALVAR_MAKE_VALUE: @@ -15011,7 +14950,7 @@ index 2acb1df..6744b76 100644 break; default: -@@ -1909,6 +1973,11 @@ clear_internalvar (struct internalvar *var) +@@ -1909,6 +1973,11 @@ clear_internalvar (struct internalvar *v xfree (var->u.string); break; @@ -15023,7 +14962,7 @@ index 2acb1df..6744b76 100644 default: break; } -@@ -1963,6 +2032,38 @@ call_internal_function (struct gdbarch *gdbarch, +@@ -1963,6 +2032,38 @@ call_internal_function (struct gdbarch * return (*ifn->handler) (gdbarch, language, ifn->cookie, argc, argv); } @@ -15062,7 +15001,7 @@ index 2acb1df..6744b76 100644 /* The 'function' command. This does nothing -- it is just a placeholder to let "help function NAME" work. This is also used as the implementation of the sub-command that is created when -@@ -2010,11 +2111,10 @@ preserve_one_value (struct value *value, struct objfile *objfile, +@@ -2010,11 +2111,10 @@ preserve_one_value (struct value *value, htab_t copied_types) { if (TYPE_OBJFILE (value->type) == objfile) @@ -15076,7 +15015,7 @@ index 2acb1df..6744b76 100644 copied_types); } -@@ -2029,7 +2129,7 @@ preserve_one_internalvar (struct internalvar *var, struct objfile *objfile, +@@ -2029,7 +2129,7 @@ preserve_one_internalvar (struct interna case INTERNALVAR_INTEGER: if (var->u.integer.type && TYPE_OBJFILE (var->u.integer.type) == objfile) var->u.integer.type @@ -15085,7 +15024,7 @@ index 2acb1df..6744b76 100644 break; case INTERNALVAR_VALUE: -@@ -2080,14 +2180,22 @@ show_convenience (char *ignore, int from_tty) +@@ -2080,14 +2180,22 @@ show_convenience (char *ignore, int from get_user_print_options (&opts); for (var = internalvars; var; var = var->next) { @@ -15111,7 +15050,7 @@ index 2acb1df..6744b76 100644 } if (!varseen) printf_unfiltered (_("No debugger convenience variables now defined.\n" -@@ -3047,7 +3155,24 @@ value_from_history_ref (char *h, char **endp) +@@ -3047,7 +3155,24 @@ value_from_history_ref (char *h, char ** struct value * coerce_ref (struct value *arg) { @@ -15148,11 +15087,11 @@ index 2acb1df..6744b76 100644 + observer_attach_mark_used (value_types_mark_used); +#endif } -diff --git a/gdb/value.h b/gdb/value.h -index 0889cef..4b51a4a 100644 ---- a/gdb/value.h -+++ b/gdb/value.h -@@ -473,6 +473,10 @@ extern struct value *value_from_decfloat (struct type *type, +Index: gdb-7.2.90.20110429/gdb/value.h +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/value.h 2011-03-04 21:07:22.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/value.h 2011-04-29 09:40:46.000000000 +0200 +@@ -473,6 +473,10 @@ extern struct value *value_from_decfloat const gdb_byte *decbytes); extern struct value *value_from_history_ref (char *, char **); @@ -15163,7 +15102,7 @@ index 0889cef..4b51a4a 100644 extern struct value *value_at (struct type *type, CORE_ADDR addr); extern struct value *value_at_lazy (struct type *type, CORE_ADDR addr); -@@ -697,10 +701,52 @@ extern struct internalvar *lookup_only_internalvar (const char *name); +@@ -697,10 +701,52 @@ extern struct internalvar *lookup_only_i extern struct internalvar *create_internalvar (const char *name); @@ -15219,11 +15158,11 @@ index 0889cef..4b51a4a 100644 extern struct internalvar *lookup_internalvar (const char *name); -diff --git a/gdb/windows-tdep.c b/gdb/windows-tdep.c -index 31ddd14..b319250 100644 ---- a/gdb/windows-tdep.c -+++ b/gdb/windows-tdep.c -@@ -268,7 +268,7 @@ static struct lval_funcs tlb_value_funcs = +Index: gdb-7.2.90.20110429/gdb/windows-tdep.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/windows-tdep.c 2011-01-12 02:23:29.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/windows-tdep.c 2011-04-29 09:40:46.000000000 +0200 +@@ -268,7 +268,7 @@ static struct lval_funcs tlb_value_funcs if there's no object available. */ static struct value * @@ -15255,11 +15194,11 @@ index 31ddd14..b319250 100644 - create_internalvar_type_lazy ("_tlb", tlb_make_value); + create_internalvar_type_lazy ("_tlb", &tlb_funcs, NULL); } -diff --git a/gdb/xcoffread.c b/gdb/xcoffread.c -index 081080c..f71dbfe 100644 ---- a/gdb/xcoffread.c -+++ b/gdb/xcoffread.c -@@ -3090,6 +3090,7 @@ static const struct sym_fns xcoff_sym_fns = +Index: gdb-7.2.90.20110429/gdb/xcoffread.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/xcoffread.c 2011-03-07 17:17:29.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/xcoffread.c 2011-04-29 09:40:46.000000000 +0200 +@@ -3090,6 +3090,7 @@ static const struct sym_fns xcoff_sym_fn default_symfile_segments, /* Get segment information from a file. */ aix_process_linenos, default_symfile_relocate, /* Relocate a debug section. */ diff --git a/gdb-bz645773-case-insensitive-1of5.patch b/gdb-bz645773-case-insensitive-1of5.patch new file mode 100644 index 0000000..7bac6ff --- /dev/null +++ b/gdb-bz645773-case-insensitive-1of5.patch @@ -0,0 +1,84 @@ +[patch] Code cleanup: New SYMBOL_HASH_NEXT +http://sourceware.org/ml/gdb-patches/2011-04/msg00022.html +http://sourceware.org/ml/gdb-cvs/2011-04/msg00043.html + +### src/gdb/ChangeLog 2011/04/06 03:24:22 1.12908 +### src/gdb/ChangeLog 2011/04/06 19:50:03 1.12909 +## -1,3 +1,12 @@ ++2011-04-06 Jan Kratochvil ++ ++ Code cleanup. ++ * dictionary.c (dict_hash): Use SYMBOL_HASH_NEXT. ++ * dwarf2read.c (mapped_index_string_hash): Refer to SYMBOL_HASH_NEXT ++ in the function comment, a new note on values compatibility. ++ * minsyms.c (msymbol_hash_iw, msymbol_hash): Use SYMBOL_HASH_NEXT. ++ * symtab.h (SYMBOL_HASH_NEXT): New. ++ + 2011-04-06 Thiago Jung Bauermann + + * ppc-linux-nat.c (check_condition): Add len output parameter. +--- src/gdb/dictionary.c 2011/01/07 19:36:15 1.21 ++++ src/gdb/dictionary.c 2011/04/06 19:50:04 1.22 +@@ -826,7 +826,7 @@ + } + /* FALL THROUGH */ + default: +- hash = hash * 67 + *string - 113; ++ hash = SYMBOL_HASH_NEXT (hash, *string); + string += 1; + break; + } +--- src/gdb/dwarf2read.c 2011/04/04 14:10:12 1.520 ++++ src/gdb/dwarf2read.c 2011/04/06 19:50:04 1.521 +@@ -1962,11 +1962,11 @@ + do_cleanups (cleanup); + } + +-/* The hash function for strings in the mapped index. This is the +- same as the hashtab.c hash function, but we keep a separate copy to +- maintain control over the implementation. This is necessary +- because the hash function is tied to the format of the mapped index +- file. */ ++/* The hash function for strings in the mapped index. This is the same as ++ SYMBOL_HASH_NEXT, but we keep a separate copy to maintain control over the ++ implementation. This is necessary because the hash function is tied to the ++ format of the mapped index file. The hash values do not have to match with ++ SYMBOL_HASH_NEXT. */ + + static hashval_t + mapped_index_string_hash (const void *p) +--- src/gdb/minsyms.c 2011/03/28 20:29:51 1.81 ++++ src/gdb/minsyms.c 2011/04/06 19:50:05 1.82 +@@ -91,7 +91,7 @@ + ++string; + if (*string && *string != '(') + { +- hash = hash * 67 + *string - 113; ++ hash = SYMBOL_HASH_NEXT (hash, *string); + ++string; + } + } +@@ -106,7 +106,7 @@ + unsigned int hash = 0; + + for (; *string; ++string) +- hash = hash * 67 + *string - 113; ++ hash = SYMBOL_HASH_NEXT (hash, *string); + return hash; + } + +--- src/gdb/symtab.h 2011/04/04 15:19:59 1.177 ++++ src/gdb/symtab.h 2011/04/06 19:50:05 1.178 +@@ -1004,6 +1004,12 @@ + + extern unsigned int msymbol_hash (const char *); + ++/* Compute the next hash value from previous HASH and the character C. This ++ is only a GDB in-memory computed value with no external files compatibility ++ requirements. */ ++ ++#define SYMBOL_HASH_NEXT(hash, c) ((hash) * 67 + (c) - 113) ++ + extern struct objfile * msymbol_objfile (struct minimal_symbol *sym); + + extern void diff --git a/gdb-bz645773-case-insensitive-2of5.patch b/gdb-bz645773-case-insensitive-2of5.patch new file mode 100644 index 0000000..b7f2e32 --- /dev/null +++ b/gdb-bz645773-case-insensitive-2of5.patch @@ -0,0 +1,139 @@ +http://sourceware.org/ml/gdb-patches/2011-04/msg00124.html +Subject: [patch 1/3] case insensitive: Reformat code + +Hi, + +just some reformatting to make the later patch more clear. There should be no +functionality difference by this patch. c1+c2 are a bit ugly but I found any +other solution a bit ugly. + + +Thanks, +Jan + + +gdb/ +2011-04-08 Jan Kratochvil + + Format the code for the next patch. + * dwarf2read.c (struct mapped_index): Include delimiting newlines. + * utils.c (strcmp_iw_ordered): Reformat the code for the next patch. + New variables c1 and c2. + +--- a/gdb/dwarf2read.c ++++ b/gdb/dwarf2read.c +@@ -150,14 +150,19 @@ struct mapped_index + { + /* The total length of the buffer. */ + off_t total_size; ++ + /* A pointer to the address table data. */ + const gdb_byte *address_table; ++ + /* Size of the address table data in bytes. */ + offset_type address_table_size; ++ + /* The symbol table, implemented as a hash table. */ + const offset_type *symbol_table; ++ + /* Size in slots, each slot is 2 offset_types. */ + offset_type symbol_table_slots; ++ + /* A pointer to the constant pool. */ + const char *constant_pool; + }; +--- a/gdb/utils.c ++++ b/gdb/utils.c +@@ -3023,48 +3023,55 @@ strcmp_iw (const char *string1, const char *string2) + int + strcmp_iw_ordered (const char *string1, const char *string2) + { +- while ((*string1 != '\0') && (*string2 != '\0')) ++ /* Formatting stub. */ ++ if (1) + { +- while (isspace (*string1)) +- { +- string1++; +- } +- while (isspace (*string2)) +- { +- string2++; +- } +- if (*string1 != *string2) ++ /* C1 and C2 are valid only if *string1 != '\0' && *string2 != '\0'. ++ Provide stub characters if we are already at the end of one of the ++ strings. */ ++ char c1 = 'X', c2 = 'X'; ++ ++ while (*string1 != '\0' && *string2 != '\0') + { +- break; ++ while (isspace (*string1)) ++ string1++; ++ while (isspace (*string2)) ++ string2++; ++ ++ c1 = *string1; ++ c2 = *string2; ++ if (c1 != c2) ++ break; ++ ++ if (*string1 != '\0') ++ { ++ string1++; ++ string2++; ++ } + } +- if (*string1 != '\0') ++ ++ switch (*string1) + { +- string1++; +- string2++; ++ /* Characters are non-equal unless they're both '\0'; we want to ++ make sure we get the comparison right according to our ++ comparison in the cases where one of them is '\0' or '('. */ ++ case '\0': ++ if (*string2 == '\0') ++ return 0; ++ else ++ return -1; ++ case '(': ++ if (*string2 == '\0') ++ return 1; ++ else ++ return -1; ++ default: ++ if (*string2 == '\0' || *string2 == '(') ++ return 1; ++ else ++ return c1 - c2; + } + } +- +- switch (*string1) +- { +- /* Characters are non-equal unless they're both '\0'; we want to +- make sure we get the comparison right according to our +- comparison in the cases where one of them is '\0' or '('. */ +- case '\0': +- if (*string2 == '\0') +- return 0; +- else +- return -1; +- case '(': +- if (*string2 == '\0') +- return 1; +- else +- return -1; +- default: +- if (*string2 == '(') +- return 1; +- else +- return *string1 - *string2; +- } + } + + /* A simple comparison function with opposite semantics to strcmp. */ + diff --git a/gdb-bz645773-case-insensitive-3of5.patch b/gdb-bz645773-case-insensitive-3of5.patch new file mode 100644 index 0000000..ccd4bf2 --- /dev/null +++ b/gdb-bz645773-case-insensitive-3of5.patch @@ -0,0 +1,188 @@ +http://sourceware.org/ml/gdb-patches/2011-04/msg00125.html +Subject: [patch 2/3] case insensitive: re_comp->regcomp + +Hi, + +re_comp cannot be passed REG_ICASE. Therefore change the code. The should +have no functionality impact. + +The new boolean field `preg_p' could be maybe replaced by a conditional +`preg.buffer != NULL' which would work with libiberty regcomp implementation +but I do not see it guaranteed anywhere. GDB is always using static libiberty +implementation which I do not see why in the case it is running on glibc. +But if it gets fixed one day and it starts to use externally linked +regcomp/regexec I would find the `preg.buffer != NULL' conditional dangerous. + + +Thanks, +Jan + + +gdb/ +2011-04-08 Jan Kratochvil + + Replace re_comp/re_exec by regcomp/regexec. + * symtab.c (struct search_symbols_data): New fields preg, preg_p. + (search_symbols_name_matches): Use them, use regexec. + (search_symbols): New variable retval_chain, adjust the use of + old_chain against it. Replace re_comp by regcomp. Use the new struct + search_symbols_data fields, use regexec instead of re_exec. + +Index: gdb-7.2.90.20110429/gdb/symtab.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/symtab.c 2011-04-29 09:43:33.000000000 +0200 ++++ gdb-7.2.90.20110429/gdb/symtab.c 2011-04-29 09:43:55.000000000 +0200 +@@ -2958,7 +2958,10 @@ struct search_symbols_data + { + int nfiles; + char **files; +- char *regexp; ++ ++ /* It is true if PREG contains valid data, false otherwise. */ ++ unsigned preg_p : 1; ++ regex_t preg; + }; + + /* A callback for expand_symtabs_matching. */ +@@ -2976,7 +2979,7 @@ search_symbols_name_matches (const char + { + struct search_symbols_data *data = user_data; + +- return data->regexp == NULL || re_exec (symname); ++ return !data->preg_p || regexec (&data->preg, symname, 0, NULL, 0) == 0; + } + + /* Search the symbol table for matches to the regular expression REGEXP, +@@ -3023,9 +3026,13 @@ search_symbols (char *regexp, domain_enu + struct symbol_search *sr; + struct symbol_search *psr; + struct symbol_search *tail; +- struct cleanup *old_chain = NULL; + struct search_symbols_data datum; + ++ /* OLD_CHAIN .. RETVAL_CHAIN is always freed, RETVAL_CHAIN .. current ++ CLEANUP_CHAIN is freed only in the case of an error. */ ++ struct cleanup *old_chain = make_cleanup (null_cleanup, NULL); ++ struct cleanup *retval_chain; ++ + if (kind < VARIABLES_DOMAIN || kind >= ALL_DOMAIN) + error (_("must search on specific domain")); + +@@ -3036,6 +3043,7 @@ search_symbols (char *regexp, domain_enu + + sr = *matches = NULL; + tail = NULL; ++ datum.preg_p = 0; + + if (regexp != NULL) + { +@@ -3045,6 +3053,7 @@ search_symbols (char *regexp, domain_enu + and or . */ + char *opend; + char *opname = operator_chars (regexp, &opend); ++ int errcode; + + if (*opname) + { +@@ -3073,8 +3082,16 @@ search_symbols (char *regexp, domain_enu + } + } + +- if (0 != (val = re_comp (regexp))) +- error (_("Invalid regexp (%s): %s"), val, regexp); ++ errcode = regcomp (&datum.preg, regexp, REG_NOSUB); ++ if (errcode != 0) ++ { ++ char *err = get_regcomp_error (errcode, &datum.preg); ++ ++ make_cleanup (xfree, err); ++ error (_("Invalid regexp (%s): %s"), err, regexp); ++ } ++ datum.preg_p = 1; ++ make_regfree_cleanup (&datum.preg); + } + + /* Search through the partial symtabs *first* for all symbols +@@ -3083,7 +3100,6 @@ search_symbols (char *regexp, domain_enu + + datum.nfiles = nfiles; + datum.files = files; +- datum.regexp = regexp; + ALL_OBJFILES (objfile) + { + if (objfile->sf) +@@ -3094,6 +3110,8 @@ search_symbols (char *regexp, domain_enu + &datum); + } + ++ retval_chain = old_chain; ++ + /* Here, we search through the minimal symbol tables for functions + and variables that match, and force their symbols to be read. + This is in particular necessary for demangled variable names, +@@ -3117,8 +3135,9 @@ search_symbols (char *regexp, domain_enu + MSYMBOL_TYPE (msymbol) == ourtype3 || + MSYMBOL_TYPE (msymbol) == ourtype4) + { +- if (regexp == NULL +- || re_exec (SYMBOL_NATURAL_NAME (msymbol)) != 0) ++ if (!datum.preg_p ++ || regexec (&datum.preg, SYMBOL_NATURAL_NAME (msymbol), 0, ++ NULL, 0) == 0) + { + if (0 == find_pc_symtab (SYMBOL_VALUE_ADDRESS (msymbol))) + { +@@ -3156,8 +3175,9 @@ search_symbols (char *regexp, domain_enu + QUIT; + + if (file_matches (real_symtab->filename, files, nfiles) +- && ((regexp == NULL +- || re_exec (SYMBOL_NATURAL_NAME (sym)) != 0) ++ && ((!datum.preg_p ++ || regexec (&datum.preg, SYMBOL_NATURAL_NAME (sym), 0, ++ NULL, 0) == 0) + && ((kind == VARIABLES_DOMAIN + && SYMBOL_CLASS (sym) != LOC_TYPEDEF + && SYMBOL_CLASS (sym) != LOC_UNRESOLVED +@@ -3199,7 +3219,7 @@ search_symbols (char *regexp, domain_enu + tail = sort_search_symbols (&dummy, nfound); + sr = dummy.next; + +- old_chain = make_cleanup_free_search_symbols (sr); ++ make_cleanup_free_search_symbols (sr); + } + else + tail = sort_search_symbols (prevtail, nfound); +@@ -3221,8 +3241,9 @@ search_symbols (char *regexp, domain_enu + MSYMBOL_TYPE (msymbol) == ourtype3 || + MSYMBOL_TYPE (msymbol) == ourtype4) + { +- if (regexp == NULL +- || re_exec (SYMBOL_NATURAL_NAME (msymbol)) != 0) ++ if (!datum.preg_p ++ || regexec (&datum.preg, SYMBOL_NATURAL_NAME (msymbol), 0, ++ NULL, 0) == 0) + { + /* Functions: Look up by address. */ + if (kind != FUNCTIONS_DOMAIN || +@@ -3244,7 +3265,7 @@ search_symbols (char *regexp, domain_enu + if (tail == NULL) + { + sr = psr; +- old_chain = make_cleanup_free_search_symbols (sr); ++ make_cleanup_free_search_symbols (sr); + } + else + tail->next = psr; +@@ -3256,9 +3277,9 @@ search_symbols (char *regexp, domain_enu + } + } + ++ discard_cleanups (retval_chain); ++ do_cleanups (old_chain); + *matches = sr; +- if (sr != NULL) +- discard_cleanups (old_chain); + } + + /* Helper function for symtab_symbol_info, this function uses diff --git a/gdb-bz645773-case-insensitive-4of5.patch b/gdb-bz645773-case-insensitive-4of5.patch new file mode 100644 index 0000000..2ef369d --- /dev/null +++ b/gdb-bz645773-case-insensitive-4of5.patch @@ -0,0 +1,666 @@ +http://sourceware.org/ml/gdb-patches/2011-04/msg00418.html +Subject: Re: [patch 3/3] case insensitive: the fix [rediff] + +On Fri, 22 Apr 2011 21:05:07 +0200, Eli Zaretskii wrote: +> This @table will look weird in the manual: it produces lines that +> begin with a lower-case letter. Perhaps reorder thusly: + +OK, thanks for the review. + + +Regards, +Jan + + +gdb/doc/ +2011-04-22 Jan Kratochvil + Eli Zaretskii + + * gdb.texinfo (Index Section Format): Change the version to 5. + Describe the different formula. + +gdb/ +2011-04-08 Jan Kratochvil + + * dwarf2read.c: Include ctype.h. + (struct mapped_index): New field version. + (mapped_index_string_hash): New parameter index_version. New comment + for it. Call tolower appropriately. + (find_slot_in_mapped_hash): New variable cmp, initialize it, use it. + Choose the right index version for mapped_index_string_hash. + (dwarf2_read_index): Support also the index version 5. Initialize the + new struct mapped_index field version. + (hash_strtab_entry): Pass INT_MAX for the new parameter, explain why. + (find_slot): Explain the version needs. Pass INT_MAX for the new + parameter. + (write_psymtabs_to_index): Produce version 5. + * minsyms.c (lookup_minimal_symbol): New variable cmp, initialize it, + use it. New comment for SYMBOL_MATCHES_SEARCH_NAME. + * psymtab.c (lookup_partial_symbol): Find the + SYMBOL_MATCHES_SEARCH_NAME start of the found block of matching + entries. + * symtab.c (lookup_symbol_in_language): Remove the case_sensitive_off + NAME lowercasing. + (search_symbols): Pass REG_ICASE to regcomp for case_sensitive_off. + (completion_list_add_name): New variable ncmp, initialize it, use it. + * symtab.h (SYMBOL_HASH_NEXT): Always call tolower. + * utils.c (strcmp_iw): Support case_sensitive_off. + (strcmp_iw_ordered): Sort in a way compatible with case_sensitive_off. + New function comment part. New variables saved_string1, + saved_string2 and case_pass. Add a proper second pass. + +gdb/testsuite/ +2011-04-08 Jan Kratochvil + + * gdb.base/fortran-sym-case.c: New file. + * gdb.base/fortran-sym-case.exp: New file. + * gdb.dwarf2/dw2-case-insensitive-debug.S: New file. + * gdb.dwarf2/dw2-case-insensitive.c: New file. + * gdb.dwarf2/dw2-case-insensitive.exp: New file. + +Index: gdb-7.2.90.20110429/gdb/dwarf2read.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/dwarf2read.c 2011-04-29 09:43:34.000000000 +0200 ++++ gdb-7.2.90.20110429/gdb/dwarf2read.c 2011-04-29 09:45:58.000000000 +0200 +@@ -152,6 +152,9 @@ DEF_VEC_I (offset_type); + a comment by the code that writes the index. */ + struct mapped_index + { ++ /* Index data format version. */ ++ int version; ++ + /* The total length of the buffer. */ + off_t total_size; + +@@ -1990,17 +1993,23 @@ create_addrmap_from_index (struct objfil + SYMBOL_HASH_NEXT, but we keep a separate copy to maintain control over the + implementation. This is necessary because the hash function is tied to the + format of the mapped index file. The hash values do not have to match with +- SYMBOL_HASH_NEXT. */ ++ SYMBOL_HASH_NEXT. ++ ++ Use INT_MAX for INDEX_VERSION if you generate the current index format. */ + + static hashval_t +-mapped_index_string_hash (const void *p) ++mapped_index_string_hash (int index_version, const void *p) + { + const unsigned char *str = (const unsigned char *) p; + hashval_t r = 0; + unsigned char c; + + while ((c = *str++) != 0) +- r = r * 67 + c - 113; ++ { ++ if (index_version >= 5) ++ c = tolower (c); ++ r = r * 67 + c - 113; ++ } + + return r; + } +@@ -2013,11 +2022,19 @@ static int + find_slot_in_mapped_hash (struct mapped_index *index, const char *name, + offset_type **vec_out) + { +- offset_type hash = mapped_index_string_hash (name); ++ /* Index version 4 did not support case insensitive searches. But the ++ indexes for case insensitive languages are built in lowercase, therefore ++ simulate our NAME being searched is also lowercased. */ ++ offset_type hash = mapped_index_string_hash ((index->version == 4 ++ && case_sensitivity == case_sensitive_off ++ ? 5 : index->version), ++ name); + offset_type slot, step; ++ int (*cmp) (const char *, const char *); + + slot = hash & (index->symbol_table_slots - 1); + step = ((hash * 17) & (index->symbol_table_slots - 1)) | 1; ++ cmp = (case_sensitivity == case_sensitive_on ? strcmp : strcasecmp); + + for (;;) + { +@@ -2028,7 +2045,7 @@ find_slot_in_mapped_hash (struct mapped_ + return 0; + + str = index->constant_pool + MAYBE_SWAP (index->symbol_table[i]); +- if (!strcmp (name, str)) ++ if (!cmp (name, str)) + { + *vec_out = (offset_type *) (index->constant_pool + + MAYBE_SWAP (index->symbol_table[i + 1])); +@@ -2071,15 +2088,17 @@ dwarf2_read_index (struct objfile *objfi + /* Versions earlier than 3 emitted every copy of a psymbol. This + causes the index to behave very poorly for certain requests. Version 3 + contained incomplete addrmap. So, it seems better to just ignore such +- indices. */ ++ indices. Index version 4 uses a different hash function than index ++ version 5 and later. */ + if (version < 4) + return 0; + /* Indexes with higher version than the one supported by GDB may be no + longer backward compatible. */ +- if (version > 4) ++ if (version > 5) + return 0; + + map = OBSTACK_ZALLOC (&objfile->objfile_obstack, struct mapped_index); ++ map->version = version; + map->total_size = dwarf2_per_objfile->gdb_index.size; + + metadata = (offset_type *) (addr + sizeof (offset_type)); +@@ -15602,13 +15621,16 @@ struct strtab_entry + const char *str; + }; + +-/* Hash function for a strtab_entry. */ ++/* Hash function for a strtab_entry. ++ ++ Function is used only during write_hash_table so no index format backward ++ compatibility is needed. */ + + static hashval_t + hash_strtab_entry (const void *e) + { + const struct strtab_entry *entry = e; +- return mapped_index_string_hash (entry->str); ++ return mapped_index_string_hash (INT_MAX, entry->str); + } + + /* Equality function for a strtab_entry. */ +@@ -15746,12 +15768,15 @@ cleanup_mapped_symtab (void *p) + } + + /* Find a slot in SYMTAB for the symbol NAME. Returns a pointer to +- the slot. */ ++ the slot. ++ ++ Function is used only during write_hash_table so no index format backward ++ compatibility is needed. */ + + static struct symtab_index_entry ** + find_slot (struct mapped_symtab *symtab, const char *name) + { +- offset_type index, step, hash = mapped_index_string_hash (name); ++ offset_type index, step, hash = mapped_index_string_hash (INT_MAX, name); + + index = hash & (symtab->size - 1); + step = ((hash * 17) & (symtab->size - 1)) | 1; +@@ -16279,7 +16304,7 @@ write_psymtabs_to_index (struct objfile + total_len = size_of_contents; + + /* The version number. */ +- val = MAYBE_SWAP (4); ++ val = MAYBE_SWAP (5); + obstack_grow (&contents, &val, sizeof (val)); + + /* The offset of the CU list from the start of the file. */ +Index: gdb-7.2.90.20110429/gdb/minsyms.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/minsyms.c 2011-04-29 09:43:34.000000000 +0200 ++++ gdb-7.2.90.20110429/gdb/minsyms.c 2011-04-29 09:44:15.000000000 +0200 +@@ -239,11 +239,16 @@ lookup_minimal_symbol (const char *name, + + if (pass == 1) + { +- match = strcmp (SYMBOL_LINKAGE_NAME (msymbol), +- modified_name) == 0; ++ int (*cmp) (const char *, const char *); ++ ++ cmp = (case_sensitivity == case_sensitive_on ++ ? strcmp : strcasecmp); ++ match = cmp (SYMBOL_LINKAGE_NAME (msymbol), ++ modified_name) == 0; + } + else + { ++ /* The function respects CASE_SENSITIVITY. */ + match = SYMBOL_MATCHES_SEARCH_NAME (msymbol, + modified_name); + } +Index: gdb-7.2.90.20110429/gdb/psymtab.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/psymtab.c 2011-04-20 22:10:29.000000000 +0200 ++++ gdb-7.2.90.20110429/gdb/psymtab.c 2011-04-29 09:44:15.000000000 +0200 +@@ -690,8 +690,15 @@ lookup_partial_symbol (struct partial_sy + internal_error (__FILE__, __LINE__, + _("failed internal consistency check")); + +- while (top <= real_top +- && SYMBOL_MATCHES_SEARCH_NAME (*top, search_name)) ++ /* For `case_sensitivity == case_sensitive_off' strcmp_iw_ordered will ++ search more exactly than what matches SYMBOL_MATCHES_SEARCH_NAME. */ ++ while (top >= start && SYMBOL_MATCHES_SEARCH_NAME (*top, search_name)) ++ top--; ++ ++ /* Fixup to have a symbol which matches SYMBOL_MATCHES_SEARCH_NAME. */ ++ top++; ++ ++ while (top <= real_top && SYMBOL_MATCHES_SEARCH_NAME (*top, search_name)) + { + if (symbol_matches_domain (SYMBOL_LANGUAGE (*top), + SYMBOL_DOMAIN (*top), domain)) +Index: gdb-7.2.90.20110429/gdb/symtab.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/symtab.c 2011-04-29 09:43:55.000000000 +0200 ++++ gdb-7.2.90.20110429/gdb/symtab.c 2011-04-29 09:44:15.000000000 +0200 +@@ -1062,19 +1062,6 @@ lookup_symbol_in_language (const char *n + } + } + +- if (case_sensitivity == case_sensitive_off) +- { +- char *copy; +- int len, i; +- +- len = strlen (name); +- copy = (char *) alloca (len + 1); +- for (i= 0; i < len; i++) +- copy[i] = tolower (name[i]); +- copy[len] = 0; +- modified_name = copy; +- } +- + returnval = lookup_symbol_aux (modified_name, block, domain, lang, + is_a_field_of_this); + do_cleanups (cleanup); +@@ -3082,7 +3069,9 @@ search_symbols (char *regexp, domain_enu + } + } + +- errcode = regcomp (&datum.preg, regexp, REG_NOSUB); ++ errcode = regcomp (&datum.preg, regexp, ++ REG_NOSUB | (case_sensitivity == case_sensitive_off ++ ? REG_ICASE : 0)); + if (errcode != 0) + { + char *err = get_regcomp_error (errcode, &datum.preg); +@@ -3529,10 +3518,13 @@ completion_list_add_name (char *symname, + char *text, char *word) + { + int newsize; ++ int (*ncmp) (const char *, const char *, size_t); ++ ++ ncmp = (case_sensitivity == case_sensitive_on ? strncmp : strncasecmp); + + /* Clip symbols that cannot match. */ + +- if (strncmp (symname, sym_text, sym_text_len) != 0) ++ if (ncmp (symname, sym_text, sym_text_len) != 0) + { + return; + } +Index: gdb-7.2.90.20110429/gdb/symtab.h +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/symtab.h 2011-04-29 09:43:34.000000000 +0200 ++++ gdb-7.2.90.20110429/gdb/symtab.h 2011-04-29 09:44:15.000000000 +0200 +@@ -1030,7 +1030,8 @@ extern unsigned int msymbol_hash (const + is only a GDB in-memory computed value with no external files compatibility + requirements. */ + +-#define SYMBOL_HASH_NEXT(hash, c) ((hash) * 67 + (c) - 113) ++#define SYMBOL_HASH_NEXT(hash, c) \ ++ ((hash) * 67 + tolower ((unsigned char) (c)) - 113) + + extern struct objfile * msymbol_objfile (struct minimal_symbol *sym); + +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.base/fortran-sym-case.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.base/fortran-sym-case.c 2011-04-29 09:44:15.000000000 +0200 +@@ -0,0 +1,22 @@ ++/* This testcase is part of GDB, the GNU debugger. ++ ++ Copyright 2011 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 3 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, see . */ ++ ++int ++main (int argc, char **aRGv) ++{ ++ return 0; ++} +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.base/fortran-sym-case.exp +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.base/fortran-sym-case.exp 2011-04-29 09:44:15.000000000 +0200 +@@ -0,0 +1,27 @@ ++# Copyright (C) 2011 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 3 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, see . ++ ++set testfile fortran-sym-case ++if { [prepare_for_testing ${testfile}.exp ${testfile}] } { ++ return -1 ++} ++ ++if ![runto_main] { ++ return -1 ++} ++ ++gdb_test "set language fortran" {Warning: the current language does not match this frame\.} ++ ++gdb_test "frame" ", aRGv=.*" +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.dwarf2/dw2-case-insensitive-debug.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.dwarf2/dw2-case-insensitive-debug.S 2011-04-29 09:44:15.000000000 +0200 +@@ -0,0 +1,102 @@ ++/* This testcase is part of GDB, the GNU debugger. ++ ++ Copyright 2011 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 3 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, see . */ ++ ++ .section .debug_info ++.Lcu1_begin: ++ /* CU header */ ++ .4byte .Lcu1_end - .Lcu1_start /* Length of Compilation Unit */ ++.Lcu1_start: ++ .2byte 2 /* DWARF Version */ ++ .4byte .Labbrev1_begin /* Offset into abbrev section */ ++ .byte 4 /* Pointer size */ ++ ++ /* CU die */ ++ .uleb128 1 /* Abbrev: DW_TAG_compile_unit */ ++ .ascii "file1.txt\0" /* DW_AT_name */ ++ .ascii "GNU C 3.3.3\0" /* DW_AT_producer */ ++ .byte 8 /* DW_AT_language (DW_LANG_Fortran90) */ ++ .4byte FUNC_lang /* DW_AT_low_pc */ ++ .4byte main /* DW_AT_high_pc */ ++ ++ .uleb128 3 /* Abbrev: DW_TAG_subprogram */ ++ .byte 1 /* DW_AT_external */ ++ .ascii "FUNC_lang\0" /* DW_AT_name */ ++ .4byte FUNC_lang /* DW_AT_low_pc */ ++ .4byte main /* DW_AT_high_pc */ ++ .byte 1 /* DW_AT_prototyped */ ++ .4byte .Ltype - .Lcu1_begin /* DW_AT_type */ ++ ++.Ltype: ++ .uleb128 0x5 /* Abbrev: DW_TAG_base_type */ ++ .byte 0x4 /* DW_AT_byte_size */ ++ .byte 0x5 /* DW_AT_encoding */ ++ .ascii "foo\0" /* DW_AT_name */ ++ ++ .byte 0 /* End of children of CU */ ++.Lcu1_end: ++ ++/* Abbrev table */ ++ .section .debug_abbrev ++.Labbrev1_begin: ++ .uleb128 1 /* Abbrev code */ ++ .uleb128 0x11 /* DW_TAG_compile_unit */ ++ .byte 1 /* has_children */ ++ .uleb128 0x3 /* DW_AT_name */ ++ .uleb128 0x8 /* DW_FORM_string */ ++ .uleb128 0x25 /* DW_AT_producer */ ++ .uleb128 0x8 /* DW_FORM_string */ ++ .uleb128 0x13 /* DW_AT_language */ ++ .uleb128 0xb /* DW_FORM_data1 */ ++ .uleb128 0x11 /* DW_AT_low_pc */ ++ .uleb128 0x1 /* DW_FORM_addr */ ++ .uleb128 0x12 /* DW_AT_high_pc */ ++ .uleb128 0x1 /* DW_FORM_addr */ ++ .byte 0x0 /* Terminator */ ++ .byte 0x0 /* Terminator */ ++ ++ .uleb128 3 /* Abbrev code */ ++ .uleb128 0x2e /* DW_TAG_subprogram */ ++ .byte 0 /* has_children */ ++ .uleb128 0x3f /* DW_AT_external */ ++ .uleb128 0xc /* DW_FORM_flag */ ++ .uleb128 0x3 /* DW_AT_name */ ++ .uleb128 0x8 /* DW_FORM_string */ ++ .uleb128 0x11 /* DW_AT_low_pc */ ++ .uleb128 0x1 /* DW_FORM_addr */ ++ .uleb128 0x12 /* DW_AT_high_pc */ ++ .uleb128 0x1 /* DW_FORM_addr */ ++ .uleb128 0x27 /* DW_AT_prototyped */ ++ .uleb128 0xc /* DW_FORM_flag */ ++ .uleb128 0x49 /* DW_AT_type */ ++ .uleb128 0x13 /* DW_FORM_ref4 */ ++ .byte 0x0 /* Terminator */ ++ .byte 0x0 /* Terminator */ ++ ++ .uleb128 0x5 /* Abbrev code */ ++ .uleb128 0x24 /* DW_TAG_base_type */ ++ .byte 0x0 /* DW_children_no */ ++ .uleb128 0xb /* DW_AT_byte_size */ ++ .uleb128 0xb /* DW_FORM_data1 */ ++ .uleb128 0x3e /* DW_AT_encoding */ ++ .uleb128 0xb /* DW_FORM_data1 */ ++ .uleb128 0x3 /* DW_AT_name */ ++ .uleb128 0x8 /* DW_FORM_string */ ++ .byte 0x0 /* Terminator */ ++ .byte 0x0 /* Terminator */ ++ ++ .byte 0x0 /* Terminator */ ++ .byte 0x0 /* Terminator */ +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.dwarf2/dw2-case-insensitive.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.dwarf2/dw2-case-insensitive.c 2011-04-29 09:44:15.000000000 +0200 +@@ -0,0 +1,38 @@ ++/* This testcase is part of GDB, the GNU debugger. ++ ++ Copyright 2011 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 3 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, see . */ ++ ++/* Use DW_LANG_Fortran90 for case insensitive DWARF. */ ++ ++void ++FUNC_lang (void) ++{ ++} ++ ++/* Symbol is present only in ELF .symtab. */ ++ ++void ++FUNC_symtab (void) ++{ ++} ++ ++int ++main (void) ++{ ++ FUNC_lang (); ++ FUNC_symtab (); ++ return 0; ++} +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.dwarf2/dw2-case-insensitive.exp +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.dwarf2/dw2-case-insensitive.exp 2011-04-29 09:44:15.000000000 +0200 +@@ -0,0 +1,49 @@ ++# Copyright 2011 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 3 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, see . ++load_lib dwarf.exp ++ ++# This test can only be run on targets which support DWARF-2 and use gas. ++if {![dwarf2_support]} { ++ return 0 ++} ++ ++set testfile "dw2-case-insensitive" ++ ++if { [prepare_for_testing ${testfile}.exp ${testfile} [list ${testfile}.c ${testfile}-debug.S] {nodebug}] } { ++ return -1 ++} ++ ++gdb_test "show case-sensitive" {Case sensitivity in name search is "auto; currently on"\.} ++ ++gdb_test "info functions fUnC_lang" \ ++ "All functions matching regular expression \"fUnC_lang\":" \ ++ "regexp case-sensitive on" ++ ++gdb_test "set case-sensitive off" {warning: the current case sensitivity setting does not match the language\.} ++ ++gdb_test "info functions fUnC_lang" \ ++ "All functions matching regular expression \"fUnC_lang\":\[\r\n\]+File file1.txt:\r\nfoo FUNC_lang\\(void\\);" \ ++ "regexp case-sensitive off" ++ ++gdb_test "p fuNC_lang" { = {foo \(void\)} 0x[0-9a-f]+ } ++gdb_test "p fuNC_symtab" { = {} 0x[0-9a-f]+ } ++ ++if {[gdb_breakpoint "fuNC_lang"] == 1} { ++ pass "setting breakpoint at fuNC_lang" ++} ++ ++if {[gdb_breakpoint "fuNC_symtab"] == 1} { ++ pass "setting breakpoint at fuNC_symtab" ++} +Index: gdb-7.2.90.20110429/gdb/utils.c +=================================================================== +--- gdb-7.2.90.20110429.orig/gdb/utils.c 2011-04-29 09:43:34.000000000 +0200 ++++ gdb-7.2.90.20110429/gdb/utils.c 2011-04-29 09:44:15.000000000 +0200 +@@ -3003,10 +3003,12 @@ strcmp_iw (const char *string1, const ch + { + string2++; + } +- if (*string1 != *string2) +- { +- break; +- } ++ if (case_sensitivity == case_sensitive_on && *string1 != *string2) ++ break; ++ if (case_sensitivity == case_sensitive_off ++ && (tolower ((unsigned char) *string1) ++ != tolower ((unsigned char) *string2))) ++ break; + if (*string1 != '\0') + { + string1++; +@@ -3027,6 +3029,10 @@ strcmp_iw (const char *string1, const ch + strcmp_iw(LIST_ELT, NAME), then the place to start looking is right + where this function would put NAME. + ++ This function must be neutral to the CASE_SENSITIVITY setting as the user ++ may choose it during later lookup. Therefore this function always sorts ++ primarily case-insensitively and secondarily case-sensitively. ++ + Here are some examples of why using strcmp to sort is a bad idea: + + Whitespace example: +@@ -3052,8 +3058,10 @@ strcmp_iw (const char *string1, const ch + int + strcmp_iw_ordered (const char *string1, const char *string2) + { +- /* Formatting stub. */ +- if (1) ++ const char *saved_string1 = string1, *saved_string2 = string2; ++ enum case_sensitivity case_pass = case_sensitive_off; ++ ++ for (;;) + { + /* C1 and C2 are valid only if *string1 != '\0' && *string2 != '\0'. + Provide stub characters if we are already at the end of one of the +@@ -3067,8 +3075,17 @@ strcmp_iw_ordered (const char *string1, + while (isspace (*string2)) + string2++; + ++ switch (case_pass) ++ { ++ case case_sensitive_off: ++ c1 = tolower ((unsigned char) *string1); ++ c2 = tolower ((unsigned char) *string2); ++ break; ++ case case_sensitive_on: + c1 = *string1; + c2 = *string2; ++ break; ++ } + if (c1 != c2) + break; + +@@ -3086,7 +3103,7 @@ strcmp_iw_ordered (const char *string1, + comparison in the cases where one of them is '\0' or '('. */ + case '\0': + if (*string2 == '\0') +- return 0; ++ break; + else + return -1; + case '(': +@@ -3097,9 +3114,22 @@ strcmp_iw_ordered (const char *string1, + default: + if (*string2 == '\0' || *string2 == '(') + return 1; +- else +- return c1 - c2; ++ else if (c1 > c2) ++ return 1; ++ else if (c1 < c2) ++ return -1; ++ /* PASSTHRU */ + } ++ ++ if (case_pass == case_sensitive_on) ++ return 0; ++ ++ /* Otherwise the strings were equal in case insensitive way, make ++ a more fine grained comparison in a case sensitive way. */ ++ ++ case_pass = case_sensitive_on; ++ string1 = saved_string1; ++ string2 = saved_string2; + } + } + diff --git a/gdb-bz645773-case-insensitive-5of5.patch b/gdb-bz645773-case-insensitive-5of5.patch new file mode 100644 index 0000000..7077037 --- /dev/null +++ b/gdb-bz645773-case-insensitive-5of5.patch @@ -0,0 +1,62 @@ +http://sourceware.org/ml/gdb-patches/2011-04/msg00546.html +Subject: [obv] Fix completer pre-expansion for case insensitive lookups + +Hi, + +due to the pending patches there happened a semantic collision. Both pathsets +were right on their own but together it did not work well. There could be +a testcase for it but I do not provide it, it seems obvious enought to me. + +The two patches were: + Re: [patch 3/3] case insensitive: the fix [rediff] + http://sourceware.org/ml/gdb-patches/2011-04/msg00418.html + - see the change in completion_list_add_name +and + [patch][+7.3] Fix physname completion regression + http://sourceware.org/ml/gdb-patches/2011-04/msg00140.html + - see expand_partial_symbol_name which just called + completion_list_add_name before but now it has explicit strncmp. + +Another problem is this code is still wrong. That is the subject of: + CU expansion problem for parameters + http://sourceware.org/bugzilla/show_bug.cgi?id=12708 + +But I did not want to mix two unrelated fixes into a single patch + +No regressions on {x86_64,x86_64-m32,i686}-fedora15-linux-gnu. Checked it in +already to not get lost in the inter-patch dependencies again. + + +Sorry, +Jan + + +http://sourceware.org/ml/gdb-cvs/2011-04/msg00186.html + +### src/gdb/ChangeLog 2011/04/28 15:52:53 1.12964 +### src/gdb/ChangeLog 2011/04/28 17:37:02 1.12965 +## -1,3 +1,8 @@ ++2011-04-28 Jan Kratochvil ++ ++ * symtab.c (expand_partial_symbol_name): New variable NCMP. Support ++ case insensitive comparison. ++ + 2011-04-28 Ulrich Weigand + + * infrun.c (proceed): Revert previous change. +--- src/gdb/symtab.c 2011/04/27 20:03:03 1.269 ++++ src/gdb/symtab.c 2011/04/28 17:37:06 1.270 +@@ -3707,8 +3707,11 @@ + expand_partial_symbol_name (const char *name, void *user_data) + { + struct add_name_data *datum = (struct add_name_data *) user_data; ++ int (*ncmp) (const char *, const char *, size_t); + +- return strncmp (name, datum->sym_text, datum->sym_text_len) == 0; ++ ncmp = (case_sensitivity == case_sensitive_on ? strncmp : strncasecmp); ++ ++ return ncmp (name, datum->sym_text, datum->sym_text_len) == 0; + } + + char ** + diff --git a/gdb-fortran-common.patch b/gdb-fortran-common.patch index acc3622..be5bf22 100644 --- a/gdb-fortran-common.patch +++ b/gdb-fortran-common.patch @@ -1,8 +1,8 @@ -Index: gdb-7.2.50.20110117/gdb/dwarf2read.c +Index: gdb-7.2.90.20110429/gdb/dwarf2read.c =================================================================== ---- gdb-7.2.50.20110117.orig/gdb/dwarf2read.c 2011-01-17 15:50:41.000000000 +0100 -+++ gdb-7.2.50.20110117/gdb/dwarf2read.c 2011-01-17 15:56:23.000000000 +0100 -@@ -7465,12 +7465,14 @@ read_set_type (struct die_info *die, str +--- gdb-7.2.90.20110429.orig/gdb/dwarf2read.c 2011-04-29 09:41:14.000000000 +0200 ++++ gdb-7.2.90.20110429/gdb/dwarf2read.c 2011-04-29 09:41:20.000000000 +0200 +@@ -7569,12 +7569,14 @@ read_set_type (struct die_info *die, str return set_die_type (die, set_type, cu); } @@ -19,7 +19,7 @@ Index: gdb-7.2.50.20110117/gdb/dwarf2read.c struct attribute *attr; struct symbol *sym; CORE_ADDR base = (CORE_ADDR) 0; -@@ -7495,10 +7497,40 @@ read_common_block (struct die_info *die, +@@ -7599,10 +7601,40 @@ read_common_block (struct die_info *die, } if (die->child != NULL) { @@ -60,7 +60,7 @@ Index: gdb-7.2.50.20110117/gdb/dwarf2read.c attr = dwarf2_attr (child_die, DW_AT_data_member_location, cu); if (sym != NULL && attr != NULL) { -@@ -7516,8 +7548,25 @@ read_common_block (struct die_info *die, +@@ -7620,8 +7652,25 @@ read_common_block (struct die_info *die, SYMBOL_VALUE_ADDRESS (sym) = base + byte_offset; add_symbol_to_list (sym, &global_symbols); } @@ -86,7 +86,7 @@ Index: gdb-7.2.50.20110117/gdb/dwarf2read.c } } -@@ -11111,6 +11160,13 @@ new_symbol_full (struct die_info *die, s +@@ -11286,6 +11335,13 @@ new_symbol_full (struct die_info *die, s { var_decode_location (attr, sym, cu); attr2 = dwarf2_attr (die, DW_AT_external, cu); @@ -100,7 +100,7 @@ Index: gdb-7.2.50.20110117/gdb/dwarf2read.c if (SYMBOL_CLASS (sym) == LOC_STATIC && SYMBOL_VALUE_ADDRESS (sym) == 0 && !dwarf2_per_objfile->has_section_at_zero) -@@ -11283,6 +11339,11 @@ new_symbol_full (struct die_info *die, s +@@ -11458,6 +11514,11 @@ new_symbol_full (struct die_info *die, s SYMBOL_CLASS (sym) = LOC_TYPEDEF; list_to_add = &global_symbols; break; @@ -112,10 +112,10 @@ Index: gdb-7.2.50.20110117/gdb/dwarf2read.c default: /* Not a tag we recognize. Hopefully we aren't processing trash data, but since we must specifically ignore things -Index: gdb-7.2.50.20110117/gdb/f-lang.c +Index: gdb-7.2.90.20110429/gdb/f-lang.c =================================================================== ---- gdb-7.2.50.20110117.orig/gdb/f-lang.c 2011-01-17 15:56:07.000000000 +0100 -+++ gdb-7.2.50.20110117/gdb/f-lang.c 2011-01-17 15:56:48.000000000 +0100 +--- gdb-7.2.90.20110429.orig/gdb/f-lang.c 2011-04-29 09:41:15.000000000 +0200 ++++ gdb-7.2.90.20110429/gdb/f-lang.c 2011-04-29 09:41:20.000000000 +0200 @@ -446,27 +446,3 @@ _initialize_f_language (void) add_language (&f_language_defn); @@ -144,10 +144,10 @@ Index: gdb-7.2.50.20110117/gdb/f-lang.c - } - return (NULL); -} -Index: gdb-7.2.50.20110117/gdb/f-lang.h +Index: gdb-7.2.90.20110429/gdb/f-lang.h =================================================================== ---- gdb-7.2.50.20110117.orig/gdb/f-lang.h 2011-01-17 15:54:14.000000000 +0100 -+++ gdb-7.2.50.20110117/gdb/f-lang.h 2011-01-17 15:56:23.000000000 +0100 +--- gdb-7.2.90.20110429.orig/gdb/f-lang.h 2011-04-29 09:41:15.000000000 +0200 ++++ gdb-7.2.90.20110429/gdb/f-lang.h 2011-04-29 09:41:20.000000000 +0200 @@ -52,36 +52,8 @@ enum f90_range_type NONE_BOUND_DEFAULT /* "(low:high)" */ }; @@ -185,10 +185,10 @@ Index: gdb-7.2.50.20110117/gdb/f-lang.h /* When reasonable array bounds cannot be fetched, such as when you ask to 'mt print symbols' and there is no stack frame and -Index: gdb-7.2.50.20110117/gdb/f-valprint.c +Index: gdb-7.2.90.20110429/gdb/f-valprint.c =================================================================== ---- gdb-7.2.50.20110117.orig/gdb/f-valprint.c 2011-01-17 15:54:36.000000000 +0100 -+++ gdb-7.2.50.20110117/gdb/f-valprint.c 2011-01-17 15:59:38.000000000 +0100 +--- gdb-7.2.90.20110429.orig/gdb/f-valprint.c 2011-04-29 09:41:15.000000000 +0200 ++++ gdb-7.2.90.20110429/gdb/f-valprint.c 2011-04-29 09:41:20.000000000 +0200 @@ -34,6 +34,8 @@ #include "gdbcore.h" #include "command.h" @@ -198,7 +198,7 @@ Index: gdb-7.2.50.20110117/gdb/f-valprint.c extern void _initialize_f_valprint (void); static void info_common_command (char *, int); -@@ -489,22 +491,54 @@ f_val_print (struct type *type, const gd +@@ -501,22 +503,54 @@ f_val_print (struct type *type, const gd return 0; } @@ -266,7 +266,7 @@ Index: gdb-7.2.50.20110117/gdb/f-valprint.c } /* This function is used to print out the values in a given COMMON -@@ -514,11 +548,9 @@ list_all_visible_commons (char *funname) +@@ -526,11 +560,9 @@ list_all_visible_commons (char *funname) static void info_common_command (char *comname, int from_tty) { @@ -280,7 +280,7 @@ Index: gdb-7.2.50.20110117/gdb/f-valprint.c /* We have been told to display the contents of F77 COMMON block supposedly visible in this function. Let us -@@ -530,74 +562,31 @@ info_common_command (char *comname, int +@@ -542,74 +574,31 @@ info_common_command (char *comname, int /* The following is generally ripped off from stack.c's routine print_frame_info(). */ @@ -371,11 +371,11 @@ Index: gdb-7.2.50.20110117/gdb/f-valprint.c } void -Index: gdb-7.2.50.20110117/gdb/stack.c +Index: gdb-7.2.90.20110429/gdb/stack.c =================================================================== ---- gdb-7.2.50.20110117.orig/gdb/stack.c 2011-01-17 15:47:37.000000000 +0100 -+++ gdb-7.2.50.20110117/gdb/stack.c 2011-01-17 15:56:23.000000000 +0100 -@@ -1498,6 +1498,8 @@ iterate_over_block_locals (struct block +--- gdb-7.2.90.20110429.orig/gdb/stack.c 2011-04-29 09:40:46.000000000 +0200 ++++ gdb-7.2.90.20110429/gdb/stack.c 2011-04-29 09:41:20.000000000 +0200 +@@ -1525,6 +1525,8 @@ iterate_over_block_locals (struct block case LOC_COMPUTED: if (SYMBOL_IS_ARGUMENT (sym)) break; @@ -384,26 +384,26 @@ Index: gdb-7.2.50.20110117/gdb/stack.c (*cb) (SYMBOL_PRINT_NAME (sym), sym, cb_data); break; -Index: gdb-7.2.50.20110117/gdb/symtab.h +Index: gdb-7.2.90.20110429/gdb/symtab.h =================================================================== ---- gdb-7.2.50.20110117.orig/gdb/symtab.h 2011-01-17 15:47:37.000000000 +0100 -+++ gdb-7.2.50.20110117/gdb/symtab.h 2011-01-17 15:56:23.000000000 +0100 -@@ -408,7 +408,10 @@ typedef enum domain_enum_tag - FUNCTIONS_DOMAIN, +--- gdb-7.2.90.20110429.orig/gdb/symtab.h 2011-04-29 09:40:46.000000000 +0200 ++++ gdb-7.2.90.20110429/gdb/symtab.h 2011-04-29 09:42:17.000000000 +0200 +@@ -411,7 +411,10 @@ typedef enum domain_enum_tag + TYPES_DOMAIN, - /* All defined types */ -- TYPES_DOMAIN -+ TYPES_DOMAIN, + /* Any type. */ +- ALL_DOMAIN ++ ALL_DOMAIN, + + /* Fortran common blocks. Their naming must be separate from VAR_DOMAIN. */ + COMMON_BLOCK_DOMAIN } domain_enum; -Index: gdb-7.2.50.20110117/gdb/testsuite/gdb.fortran/common-block.exp +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.fortran/common-block.exp =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.50.20110117/gdb/testsuite/gdb.fortran/common-block.exp 2011-01-17 15:56:23.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.fortran/common-block.exp 2011-04-29 09:41:20.000000000 +0200 @@ -0,0 +1,101 @@ +# Copyright 2008 Free Software Foundation, Inc. + @@ -506,10 +506,10 @@ Index: gdb-7.2.50.20110117/gdb/testsuite/gdb.fortran/common-block.exp +gdb_test "p ix_x" " = 1 *" "p ix_x in" +gdb_test "p iy_y" " = 2 *" "p iy_y in" +gdb_test "p iz_z2" " = 3 *" "p iz_z2 in" -Index: gdb-7.2.50.20110117/gdb/testsuite/gdb.fortran/common-block.f90 +Index: gdb-7.2.90.20110429/gdb/testsuite/gdb.fortran/common-block.f90 =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gdb-7.2.50.20110117/gdb/testsuite/gdb.fortran/common-block.f90 2011-01-17 15:56:23.000000000 +0100 ++++ gdb-7.2.90.20110429/gdb/testsuite/gdb.fortran/common-block.f90 2011-04-29 09:41:20.000000000 +0200 @@ -0,0 +1,67 @@ +! Copyright 2008 Free Software Foundation, Inc. +! diff --git a/gdb-optim-g-prologue-skip.patch b/gdb-optim-g-prologue-skip.patch new file mode 100644 index 0000000..1daab13 --- /dev/null +++ b/gdb-optim-g-prologue-skip.patch @@ -0,0 +1,830 @@ +http://sourceware.org/ml/gdb-patches/2011-04/msg00229.html +Subject: [rfc, 7.3?] -O2 -g breakpoints internal error + prologue skipping + +[ Backported. ] + +Hi, + +obsoletes my: + [patch] Fix internal error on some -O2 -g breakpoints + http://sourceware.org/ml/gdb-patches/2010-07/msg00533.html +and IMO also Paul's: + [patch] Fix for PR gdb/12573 + http://sourceware.org/ml/gdb-patches/2011-03/msg00883.html +it is an improvement of: + [patch] Do not skip prologue for -O2 -g with GCC VTA Re: [patch] Fix for PR gdb/12573 + http://sourceware.org/ml/gdb-patches/2011-03/msg01129.html + +Just the removal of gdb_assert may place the breakpoints on -O2 -g code too +late. IMO on `(gdb) break Bar::Bar' no real inferior modification should +happen while with the Paul's reproducer in the PR the `free(malloc(1));' line +is already executed when GDB stops. This over-execution is tested in the +attached artificial reproducer by the testcase "no statement got executed". + +There are several issues of this patch: + +#1 The two-pass complicated execution in skip_prologue_sal currently has no +effect as the functionality depending on it does not work now. But that is +a separate new Bug and the two passes will be needed after its fix: + regression by physname: PE32 prologue skip vs. static initializers + http://sourceware.org/bugzilla/show_bug.cgi?id=12680 + +#2 A conservative approach has been taken. The problematic prologue skipping +is disabled only if .debug_loc reference is found which proves -O2 (with -g). + This test is imperfect as there may exist optimized debug code not using + any location list and still facing inlining issues if handled as + unoptimized code. For a future better test see GCC PR other/32998. + GCC PR other/32998 = -frecord-gcc-switches issues, Status: NEW +The opposite option would be to keep the prologue skipping enabled only if +there is any DW_AT_location(DW_OP_fbreg(x)). I haven't tested this way, it +seems very intrusive to me. In practice I doubt there will be a real world +case of -O2 -g CU not referencing .debug_loc - such as if all its code accesses +only global variables and has no local variables. Just the testcase originally +was such a countercase CU. :-/ The GDB internal error is kept in place as it +still can happen in such case, this problem is not yet fully fixed. + +#3 Whether a .debug_loc reference may be present with still invalid +DW_AT_location before prologue I do not know, it does not seem to happen for +GCC. There is currently no DW_AT_producer check. Even before VTA (Variable +Tracking Assignments, since FSF GCC 4.5, -O2 -g variables DW_AT_location +improvement) it seems to me the validity at function entry point worked well +enough. + +#4 This whole problems appears only with involvement of inlined code, either +explicitly or implicitly. But GDB does not support inlined code breakpoints +well (PR breakpoints/10738, RH BZ#149125). When one plays with testing this +patch various suitable breakpoints are not placed but AFAIK all of them are in +the scope of the PR 10738. + +#5 If function does not start is not on a line boundary the multi-location +breakpoints are already not found properly and everything fails. I do not +think it can ever happen in real world. Even for a singe-line code + void f (void) {} void g (void) {} +GCC places there multiple line markers - -O2 -g, duplicity is for prologues: +File name Line number Starting address +1.c 1 0 +1.c 1 0 +1.c 1 0x10 +1.c 1 0x10 + + +Whether this should go for 7.3 I am not sure. The simple removal of +gdb_assert looks nice, GDB does not crash. But GDB behaves wrong and `break +func' may not stop before a crash there at all etc. + +No regressions on {x86_64,x86_64-m32,i686}-fedora15-linux-gnu. + +I will to commit it without any review/discussion. + + +Thanks, +Jan + + +gdb/ +2011-04-15 Jan Kratochvil + + * dwarf2read.c (struct dwarf2_cu): New field has_loclist. + (process_full_comp_unit): Set also symtab->locations_valid. Move the + symtab->language code. + (var_decode_location): Set cu->has_loclist. + * symtab.c (skip_prologue_sal): New variables saved_pc, force_skip and + skip. Intialize force_skip from locations_valid. Move the prologue + skipping code into two passes. + * symtab.h (struct symtab): Make the primary field a bitfield. New + field locations_valid. + +gdb/testsuite/ +2011-04-15 Jan Kratochvil + + * gdb.dwarf2/dw2-skip-prologue.S: New file. + * gdb.dwarf2/dw2-skip-prologue.c: New file. + * gdb.dwarf2/dw2-skip-prologue.exp: New file. + +--- a/gdb/dwarf2read.c ++++ b/gdb/dwarf2read.c +@@ -396,6 +396,13 @@ struct dwarf2_cu + DIEs for namespaces, we don't need to try to infer them + from mangled names. */ + unsigned int has_namespace_info : 1; ++ ++ /* This CU references .debug_loc. See the symtab->locations_valid field. ++ This test is imperfect as there may exist optimized debug code not using ++ any location list and still facing inlining issues if handled as ++ unoptimized code. For a future better test see GCC PR other/32998. */ ++ ++ unsigned int has_loclist : 1; + }; + + /* Persistent data held for a compilation unit, even when not +@@ -4654,13 +4661,15 @@ process_full_comp_unit (struct dwarf2_per_cu_data *per_cu) + + symtab = end_symtab (highpc + baseaddr, objfile, SECT_OFF_TEXT (objfile)); + +- /* Set symtab language to language from DW_AT_language. +- If the compilation is from a C file generated by language preprocessors, +- do not set the language if it was already deduced by start_subfile. */ +- if (symtab != NULL +- && !(cu->language == language_c && symtab->language != language_c)) ++ if (symtab != NULL) + { +- symtab->language = cu->language; ++ /* Set symtab language to language from DW_AT_language. If the ++ compilation is from a C file generated by language preprocessors, do ++ not set the language if it was already deduced by start_subfile. */ ++ if (!(cu->language == language_c && symtab->language != language_c)) ++ symtab->language = cu->language; ++ ++ symtab->locations_valid = cu->has_loclist; + } + + if (dwarf2_per_objfile->using_index) +@@ -11221,6 +11230,9 @@ var_decode_location (struct attribute *a + + SYMBOL_CLASS (sym) = LOC_COMPUTED; + dwarf2_symbol_mark_computed (attr, sym, cu); ++ ++ if (SYMBOL_COMPUTED_OPS (sym) == &dwarf2_loclist_funcs) ++ cu->has_loclist = 1; + } + + /* Given a pointer to a DWARF information entry, figure out if we need +--- a/gdb/symtab.c ++++ b/gdb/symtab.c +@@ -2454,12 +2454,13 @@ skip_prologue_sal (struct symtab_and_line *sal) + struct symbol *sym; + struct symtab_and_line start_sal; + struct cleanup *old_chain; +- CORE_ADDR pc; ++ CORE_ADDR pc, saved_pc; + struct obj_section *section; + const char *name; + struct objfile *objfile; + struct gdbarch *gdbarch; + struct block *b, *function_block; ++ int force_skip, skip; + + /* Do not change the SAL is PC was specified explicitly. */ + if (sal->explicit_pc) +@@ -2497,46 +2498,69 @@ skip_prologue_sal (struct symtab_and_line *sal) + + gdbarch = get_objfile_arch (objfile); + +- /* If the function is in an unmapped overlay, use its unmapped LMA address, +- so that gdbarch_skip_prologue has something unique to work on. */ +- if (section_is_overlay (section) && !section_is_mapped (section)) +- pc = overlay_unmapped_address (pc, section); ++ /* Process the prologue in two passes. In the first pass try to skip the ++ prologue (SKIP is true) and verify there is a real need for it (indicated ++ by FORCE_SKIP). If no such reason was found run a second pass where the ++ prologue is not skipped (SKIP is false). */ + +- /* Skip "first line" of function (which is actually its prologue). */ +- pc += gdbarch_deprecated_function_start_offset (gdbarch); +- pc = gdbarch_skip_prologue (gdbarch, pc); ++ skip = 1; ++ force_skip = 1; + +- /* For overlays, map pc back into its mapped VMA range. */ +- pc = overlay_mapped_address (pc, section); ++ /* Be conservative - allow direct PC (without skipping prologue) only if we ++ have proven the CU (Compilation Unit) supports it. sal->SYMTAB does not ++ have to be set by the caller so we use SYM instead. */ ++ if (sym && SYMBOL_SYMTAB (sym)->locations_valid) ++ force_skip = 0; + +- /* Calculate line number. */ +- start_sal = find_pc_sect_line (pc, section, 0); +- +- /* Check if gdbarch_skip_prologue left us in mid-line, and the next +- line is still part of the same function. */ +- if (start_sal.pc != pc +- && (sym? (BLOCK_START (SYMBOL_BLOCK_VALUE (sym)) <= start_sal.end +- && start_sal.end < BLOCK_END (SYMBOL_BLOCK_VALUE (sym))) +- : (lookup_minimal_symbol_by_pc_section (start_sal.end, section) +- == lookup_minimal_symbol_by_pc_section (pc, section)))) ++ saved_pc = pc; ++ do + { +- /* First pc of next line */ +- pc = start_sal.end; +- /* Recalculate the line number (might not be N+1). */ +- start_sal = find_pc_sect_line (pc, section, 0); +- } ++ pc = saved_pc; + +- /* On targets with executable formats that don't have a concept of +- constructors (ELF with .init has, PE doesn't), gcc emits a call +- to `__main' in `main' between the prologue and before user +- code. */ +- if (gdbarch_skip_main_prologue_p (gdbarch) +- && name && strcmp (name, "main") == 0) +- { +- pc = gdbarch_skip_main_prologue (gdbarch, pc); +- /* Recalculate the line number (might not be N+1). */ ++ /* If the function is in an unmapped overlay, use its unmapped LMA address, ++ so that gdbarch_skip_prologue has something unique to work on. */ ++ if (section_is_overlay (section) && !section_is_mapped (section)) ++ pc = overlay_unmapped_address (pc, section); ++ ++ /* Skip "first line" of function (which is actually its prologue). */ ++ pc += gdbarch_deprecated_function_start_offset (gdbarch); ++ if (skip) ++ pc = gdbarch_skip_prologue (gdbarch, pc); ++ ++ /* For overlays, map pc back into its mapped VMA range. */ ++ pc = overlay_mapped_address (pc, section); ++ ++ /* Calculate line number. */ + start_sal = find_pc_sect_line (pc, section, 0); ++ ++ /* Check if gdbarch_skip_prologue left us in mid-line, and the next ++ line is still part of the same function. */ ++ if (skip && start_sal.pc != pc ++ && (sym? (BLOCK_START (SYMBOL_BLOCK_VALUE (sym)) <= start_sal.end ++ && start_sal.end < BLOCK_END (SYMBOL_BLOCK_VALUE (sym))) ++ : (lookup_minimal_symbol_by_pc_section (start_sal.end, section) ++ == lookup_minimal_symbol_by_pc_section (pc, section)))) ++ { ++ /* First pc of next line */ ++ pc = start_sal.end; ++ /* Recalculate the line number (might not be N+1). */ ++ start_sal = find_pc_sect_line (pc, section, 0); ++ } ++ ++ /* On targets with executable formats that don't have a concept of ++ constructors (ELF with .init has, PE doesn't), gcc emits a call ++ to `__main' in `main' between the prologue and before user ++ code. */ ++ if (gdbarch_skip_main_prologue_p (gdbarch) ++ && name && strcmp (name, "main") == 0) ++ { ++ pc = gdbarch_skip_main_prologue (gdbarch, pc); ++ /* Recalculate the line number (might not be N+1). */ ++ start_sal = find_pc_sect_line (pc, section, 0); ++ force_skip = 1; ++ } + } ++ while (!force_skip && skip--); + + /* If we still don't have a valid source line, try to find the first + PC in the lineinfo table that belongs to the same function. This +@@ -2546,7 +2570,7 @@ skip_prologue_sal (struct symtab_and_line *sal) + the case with the DJGPP target using "gcc -gcoff" when the + compiler inserted code after the prologue to make sure the stack + is aligned. */ +- if (sym && start_sal.symtab == NULL) ++ if (!force_skip && sym && start_sal.symtab == NULL) + { + pc = skip_prologue_using_lineinfo (pc, SYMBOL_SYMTAB (sym)); + /* Recalculate the line number. */ +--- a/gdb/symtab.h ++++ b/gdb/symtab.h +@@ -767,7 +767,13 @@ struct symtab + should be designated the primary, so that the blockvector + is relocated exactly once by objfile_relocate. */ + +- int primary; ++ unsigned int primary : 1; ++ ++ /* Symtab has been compiled with both optimizations and debug info so that ++ GDB may stop skipping prologues as variables locations are valid already ++ at function entry points. */ ++ ++ unsigned int locations_valid : 1; + + /* The macro table for this symtab. Like the blockvector, this + may be shared between different symtabs --- and normally is for +--- /dev/null ++++ b/gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.S +@@ -0,0 +1,391 @@ ++/* This testcase is part of GDB, the GNU debugger. ++ ++ Copyright 2011 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 3 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, see . */ ++ ++ .section .debug_info ++.Lcu1_begin: ++ /* CU header */ ++ .4byte .Lcu1_end - .Lcu1_start /* Length of Compilation Unit */ ++.Lcu1_start: ++ .2byte 2 /* DWARF Version */ ++ .4byte .Labbrev1_begin /* Offset into abbrev section */ ++ .byte 4 /* Pointer size */ ++ ++ /* CU die */ ++ .uleb128 1 /* Abbrev: DW_TAG_compile_unit */ ++ .4byte .Lline1_begin /* DW_AT_stmt_list */ ++ .4byte func_start /* DW_AT_low_pc */ ++ .4byte func_end /* DW_AT_high_pc */ ++ .ascii "main.c\0" /* DW_AT_name */ ++ .ascii "GNU C 3.3.3\0" /* DW_AT_producer */ ++ .byte 2 /* DW_AT_language (DW_LANG_C) */ ++ ++ .uleb128 2 /* Abbrev: DW_TAG_subprogram */ ++ .byte 1 /* DW_AT_external */ ++ .ascii "func\0" /* DW_AT_name */ ++ .4byte .Ltype_int-.Lcu1_begin /* DW_AT_type */ ++ .4byte func_start /* DW_AT_low_pc */ ++ .4byte func_end /* DW_AT_high_pc */ ++ ++/* GDB `has_loclist' detection of -O2 -g code needs to see a DW_AT_location ++ location list. There may exist -O2 -g CUs still not needing/using any such ++ location list - exactly like this CU. Make one up. */ ++ ++ .uleb128 0x7 /* (DIE (0x42) DW_TAG_formal_parameter) */ ++ .ascii "param\0" /* DW_AT_name */ ++ .long .Ltype_int - .Lcu1_begin /* DW_AT_type */ ++ .long loclist /* DW_AT_location */ ++ ++ .uleb128 4 /* Abbrev: DW_TAG_inlined_subroutine */ ++ .ascii "inlined\0" /* DW_AT_name */ ++ .4byte func0 /* DW_AT_low_pc */ ++ .4byte func1 /* DW_AT_high_pc */ ++ .byte 3 /* DW_AT_inline (DW_INL_declared_inlined) */ ++ .byte 1 /* DW_AT_call_file */ ++ .byte 8 /* DW_AT_call_line */ ++ ++ .uleb128 4 /* Abbrev: DW_TAG_inlined_subroutine */ ++ .ascii "inlined2\0" /* DW_AT_name */ ++ .4byte func2 /* DW_AT_low_pc */ ++ .4byte func3 /* DW_AT_high_pc */ ++ .byte 3 /* DW_AT_inline (DW_INL_declared_inlined) */ ++ .byte 1 /* DW_AT_call_file */ ++ .byte 11 /* DW_AT_call_line */ ++ ++#ifdef INLINED ++ .uleb128 4 /* Abbrev: DW_TAG_inlined_subroutine */ ++ .ascii "otherinline\0" /* DW_AT_name */ ++ .4byte func3 /* DW_AT_low_pc */ ++ .4byte func_end /* DW_AT_high_pc */ ++ .byte 3 /* DW_AT_inline (DW_INL_declared_inlined) */ ++ .byte 1 /* DW_AT_call_file */ ++ .byte 9 /* DW_AT_call_line */ ++#endif ++ ++#ifdef LEXICAL ++ .uleb128 5 /* Abbrev: DW_TAG_lexical_block */ ++ .4byte func3 /* DW_AT_low_pc */ ++ .4byte func_end /* DW_AT_high_pc */ ++ ++ /* GDB would otherwise ignore the DW_TAG_lexical_block. */ ++ .uleb128 6 /* Abbrev: DW_TAG_variable */ ++ .ascii "lexicalvar\0" /* DW_AT_name */ ++ .4byte .Ltype_int-.Lcu1_begin /* DW_AT_type */ ++ ++ .byte 0 /* End of children of DW_TAG_lexical_block */ ++#endif ++ ++ .byte 0 /* End of children of DW_TAG_subprogram */ ++ ++/* Simulate `fund' is also named `func' so that the function name matches and ++ fund's SAL is not discarded in expand_line_sal_maybe. */ ++ ++ .uleb128 2 /* Abbrev: DW_TAG_subprogram */ ++ .byte 1 /* DW_AT_external */ ++ .ascii "func\0" /* DW_AT_name */ ++ .4byte .Ltype_int-.Lcu1_begin /* DW_AT_type */ ++ .4byte fund_start /* DW_AT_low_pc */ ++ .4byte fund_end /* DW_AT_high_pc */ ++ ++ .byte 0 /* End of children of DW_TAG_subprogram */ ++ ++.Ltype_int: ++ .uleb128 3 /* Abbrev: DW_TAG_base_type */ ++ .ascii "int\0" /* DW_AT_name */ ++ .byte 4 /* DW_AT_byte_size */ ++ .byte 5 /* DW_AT_encoding */ ++ ++ .byte 0 /* End of children of CU */ ++ ++.Lcu1_end: ++ ++ .section .debug_loc ++loclist: ++ /* Reset the location list base address first. */ ++ .long -1, 0 ++ ++ .long func_start, func_end ++ .2byte 2f-1f ++1: .byte 0x50 /* DW_OP_reg0 */ ++2: ++ /* Location list end. */ ++ .long 0, 0 ++ ++/* Abbrev table */ ++ .section .debug_abbrev ++.Labbrev1_begin: ++ .uleb128 1 /* Abbrev code */ ++ .uleb128 0x11 /* DW_TAG_compile_unit */ ++ .byte 1 /* has_children */ ++ .uleb128 0x10 /* DW_AT_stmt_list */ ++ .uleb128 0x6 /* DW_FORM_data4 */ ++ .uleb128 0x11 /* DW_AT_low_pc */ ++ .uleb128 0x1 /* DW_FORM_addr */ ++ .uleb128 0x12 /* DW_AT_high_pc */ ++ .uleb128 0x1 /* DW_FORM_addr */ ++ .uleb128 0x3 /* DW_AT_name */ ++ .uleb128 0x8 /* DW_FORM_string */ ++ .uleb128 0x25 /* DW_AT_producer */ ++ .uleb128 0x8 /* DW_FORM_string */ ++ .uleb128 0x13 /* DW_AT_language */ ++ .uleb128 0xb /* DW_FORM_data1 */ ++ .byte 0x0 /* Terminator */ ++ .byte 0x0 /* Terminator */ ++ ++ .uleb128 2 /* Abbrev code */ ++ .uleb128 0x2e /* DW_TAG_subprogram */ ++ .byte 1 /* has_children */ ++ .uleb128 0x3f /* DW_AT_external */ ++ .uleb128 0xc /* DW_FORM_flag */ ++ .uleb128 0x3 /* DW_AT_name */ ++ .uleb128 0x8 /* DW_FORM_string */ ++ .uleb128 0x49 /* DW_AT_type */ ++ .uleb128 0x13 /* DW_FORM_ref4 */ ++ .uleb128 0x11 /* DW_AT_low_pc */ ++ .uleb128 0x1 /* DW_FORM_addr */ ++ .uleb128 0x12 /* DW_AT_high_pc */ ++ .uleb128 0x1 /* DW_FORM_addr */ ++ .byte 0x0 /* Terminator */ ++ .byte 0x0 /* Terminator */ ++ ++ .uleb128 3 /* Abbrev code */ ++ .uleb128 0x24 /* DW_TAG_base_type */ ++ .byte 0 /* has_children */ ++ .uleb128 0x3 /* DW_AT_name */ ++ .uleb128 0x8 /* DW_FORM_string */ ++ .uleb128 0xb /* DW_AT_byte_size */ ++ .uleb128 0xb /* DW_FORM_data1 */ ++ .uleb128 0x3e /* DW_AT_encoding */ ++ .uleb128 0xb /* DW_FORM_data1 */ ++ .byte 0x0 /* Terminator */ ++ .byte 0x0 /* Terminator */ ++ ++ .uleb128 4 /* Abbrev code */ ++ .uleb128 0x1d /* DW_TAG_inlined_subroutine */ ++ .byte 0 /* has_children */ ++ .uleb128 0x3 /* DW_AT_name */ ++ .uleb128 0x8 /* DW_FORM_string */ ++ .uleb128 0x11 /* DW_AT_low_pc */ ++ .uleb128 0x1 /* DW_FORM_addr */ ++ .uleb128 0x12 /* DW_AT_high_pc */ ++ .uleb128 0x1 /* DW_FORM_addr */ ++ .uleb128 0x20 /* DW_AT_inline */ ++ .uleb128 0xb /* DW_FORM_data1 */ ++ .uleb128 0x58 /* DW_AT_call_file */ ++ .uleb128 0xb /* DW_FORM_data1 */ ++ .uleb128 0x59 /* DW_AT_call_line */ ++ .uleb128 0xb /* DW_FORM_data1 */ ++ .byte 0x0 /* Terminator */ ++ .byte 0x0 /* Terminator */ ++ ++ .uleb128 5 /* Abbrev code */ ++ .uleb128 0x0b /* DW_TAG_lexical_block */ ++ .byte 1 /* has_children */ ++ .uleb128 0x11 /* DW_AT_low_pc */ ++ .uleb128 0x1 /* DW_FORM_addr */ ++ .uleb128 0x12 /* DW_AT_high_pc */ ++ .uleb128 0x1 /* DW_FORM_addr */ ++ .byte 0x0 /* Terminator */ ++ .byte 0x0 /* Terminator */ ++ ++ .uleb128 6 /* Abbrev code */ ++ .uleb128 0x34 /* DW_TAG_variable */ ++ .byte 0 /* has_children */ ++ .uleb128 0x3 /* DW_AT_name */ ++ .uleb128 0x8 /* DW_FORM_string */ ++ .uleb128 0x49 /* DW_AT_type */ ++ .uleb128 0x13 /* DW_FORM_ref4 */ ++ .byte 0x0 /* Terminator */ ++ .byte 0x0 /* Terminator */ ++ ++ .uleb128 0x7 /* (abbrev code) */ ++ .uleb128 0x5 /* (TAG: DW_TAG_formal_parameter) */ ++ .byte 0x0 /* DW_children_no */ ++ .uleb128 0x3 /* DW_AT_name */ ++ .uleb128 0x8 /* DW_FORM_string */ ++ .uleb128 0x49 /* (DW_AT_type) */ ++ .uleb128 0x13 /* (DW_FORM_ref4) */ ++ .uleb128 0x02 /* (DW_AT_location) */ ++ .uleb128 0x06 /* (DW_FORM_data4) */ ++ .byte 0x0 ++ .byte 0x0 ++ ++ .byte 0x0 /* Terminator */ ++ .byte 0x0 /* Terminator */ ++ ++/* Line table */ ++ .section .debug_line ++.Lline1_begin: ++ .4byte .Lline1_end - .Lline1_start /* Initial length */ ++.Lline1_start: ++ .2byte 2 /* Version */ ++ .4byte .Lline1_lines - .Lline1_hdr /* header_length */ ++.Lline1_hdr: ++ .byte 1 /* Minimum insn length */ ++ .byte 1 /* default_is_stmt */ ++ .byte 1 /* line_base */ ++ .byte 1 /* line_range */ ++ .byte 0x10 /* opcode_base */ ++ ++ /* Standard lengths */ ++ .byte 0 ++ .byte 1 ++ .byte 1 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ ++ /* Include directories */ ++ .byte 0 ++ ++ /* File names */ ++ .ascii "main.c\0" ++ .uleb128 0 ++ .uleb128 0 ++ .uleb128 0 ++ ++ .ascii "other.c\0" ++ .uleb128 0 ++ .uleb128 0 ++ .uleb128 0 ++ ++ .byte 0 ++ ++.Lline1_lines: ++ .byte 0 /* DW_LNE_set_address */ ++ .uleb128 5 ++ .byte 2 ++ .4byte func_start ++ .byte 3 /* DW_LNS_advance_line */ ++ .sleb128 4 /* ... to 5 */ ++ .byte 1 /* DW_LNS_copy */ ++ ++ .byte 0 /* DW_LNE_set_address */ ++ .uleb128 5 ++ .byte 2 ++ .4byte func0 ++ .byte 4 /* DW_LNS_set_file */ ++ .uleb128 2 ++ .byte 3 /* DW_LNS_advance_line */ ++ .sleb128 -4 /* ... to 1 */ ++ .byte 1 /* DW_LNS_copy */ ++ ++ .byte 0 /* DW_LNE_set_address */ ++ .uleb128 5 ++ .byte 2 ++ .4byte func1 ++ .byte 4 /* DW_LNS_set_file */ ++ .uleb128 1 ++ .byte 3 /* DW_LNS_advance_line */ ++ .sleb128 8 /* ... to 9 */ ++ .byte 1 /* DW_LNS_copy */ ++ ++ .byte 0 /* DW_LNE_set_address */ ++ .uleb128 5 ++ .byte 2 ++ .4byte func2 ++ .byte 4 /* DW_LNS_set_file */ ++ .uleb128 2 ++ .byte 3 /* DW_LNS_advance_line */ ++ .sleb128 -8 /* ... to 1 */ ++ .byte 1 /* DW_LNS_copy */ ++ ++ .byte 0 /* DW_LNE_set_address */ ++ .uleb128 5 ++ .byte 2 ++ .4byte func3 ++ .byte 4 /* DW_LNS_set_file */ ++ .uleb128 1 ++ .byte 3 /* DW_LNS_advance_line */ ++ .sleb128 8 /* ... to 9 */ ++ .byte 1 /* DW_LNS_copy */ ++ ++ .byte 0 /* DW_LNE_set_address */ ++ .uleb128 5 ++ .byte 2 ++ .4byte func_end ++ ++/* Equivalent copy but renamed s/func/fund/. */ ++ ++ .byte 0 /* DW_LNE_set_address */ ++ .uleb128 5 ++ .byte 2 ++ .4byte fund_start ++ .byte 3 /* DW_LNS_advance_line */ ++ .sleb128 -4 /* ... to 5 */ ++ .byte 1 /* DW_LNS_copy */ ++ ++ .byte 0 /* DW_LNE_set_address */ ++ .uleb128 5 ++ .byte 2 ++ .4byte fund0 ++ .byte 4 /* DW_LNS_set_file */ ++ .uleb128 2 ++ .byte 3 /* DW_LNS_advance_line */ ++ .sleb128 -4 /* ... to 1 */ ++ .byte 1 /* DW_LNS_copy */ ++ ++ .byte 0 /* DW_LNE_set_address */ ++ .uleb128 5 ++ .byte 2 ++ .4byte fund1 ++ .byte 4 /* DW_LNS_set_file */ ++ .uleb128 1 ++ .byte 3 /* DW_LNS_advance_line */ ++ .sleb128 8 /* ... to 9 */ ++ .byte 1 /* DW_LNS_copy */ ++ ++ .byte 0 /* DW_LNE_set_address */ ++ .uleb128 5 ++ .byte 2 ++ .4byte fund2 ++ .byte 4 /* DW_LNS_set_file */ ++ .uleb128 2 ++ .byte 3 /* DW_LNS_advance_line */ ++ .sleb128 -8 /* ... to 1 */ ++ .byte 1 /* DW_LNS_copy */ ++ ++ .byte 0 /* DW_LNE_set_address */ ++ .uleb128 5 ++ .byte 2 ++ .4byte fund3 ++ .byte 4 /* DW_LNS_set_file */ ++ .uleb128 1 ++ .byte 3 /* DW_LNS_advance_line */ ++ .sleb128 8 /* ... to 9 */ ++ .byte 1 /* DW_LNS_copy */ ++ ++ .byte 0 /* DW_LNE_set_address */ ++ .uleb128 5 ++ .byte 2 ++ .4byte fund_end ++ ++/* Line numbering end. */ ++ ++ .byte 0 /* DW_LNE_end_of_sequence */ ++ .uleb128 1 ++ .byte 1 ++ ++.Lline1_end: +--- /dev/null ++++ b/gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.c +@@ -0,0 +1,58 @@ ++/* This testcase is part of GDB, the GNU debugger. ++ ++ Copyright 2011 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 3 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, see . */ ++ ++static volatile int v; ++ ++asm ("func_start: .globl func_start\n"); ++static int ++func (void) ++{ ++ v++; ++asm ("func0: .globl func0\n"); ++ v++; ++asm ("func1: .globl func1\n"); ++ v++; ++asm ("func2: .globl func2\n"); ++ v++; ++asm ("func3: .globl func3\n"); ++ return v; ++} ++asm ("func_end: .globl func_end\n"); ++ ++/* Equivalent copy but renamed s/func/fund/. */ ++ ++asm ("fund_start: .globl fund_start\n"); ++static int ++fund (void) ++{ ++ v++; ++asm ("fund0: .globl fund0\n"); ++ v++; ++asm ("fund1: .globl fund1\n"); ++ v++; ++asm ("fund2: .globl fund2\n"); ++ v++; ++asm ("fund3: .globl fund3\n"); ++ return v; ++} ++asm ("fund_end: .globl fund_end\n"); ++ ++int ++main (void) ++{ ++ return func () + fund (); ++} +--- /dev/null ++++ b/gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.exp +@@ -0,0 +1,74 @@ ++# Copyright 2011 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 3 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, see . ++load_lib dwarf.exp ++ ++# Test multiple location breakpoints vs. prologue analysis on -O2 -g code. ++# when the first statement of a function is an inlined function GDB could ++# crash. Map of this testcase: ++# ++# File name Line number Starting address ++# main.c 5 func_start ++# other.c 1 func0 ++# `inlined' called at main.c line 8 ++# main.c 9 func1 ++# func1 = Breakpoint location 1 ++# other.c 1 func2 ++# `inlined2' called at main.c line 11 ++# main.c 9 func3 ++# func3 = Breakpoint location 2 ++# `otherinline' called at main.c line 9 ++# end of main func_end ++ ++# This test can only be run on targets which support DWARF-2 and use gas. ++if {![dwarf2_support]} { ++ return 0 ++} ++ ++set testfile "dw2-skip-prologue" ++set executable ${testfile} ++set binfile ${objdir}/${subdir}/${executable} ++ ++if {[build_executable ${testfile}.exp ${executable} "${testfile}.c ${testfile}.S" {additional_flags=-DINLINED}] == -1} { ++ return -1 ++} ++ ++# We need those symbols global to access them from the .S file. ++set test "strip stub symbols" ++set objcopy_program [transform objcopy] ++set result [catch "exec $objcopy_program \ ++ -N func0 -N func1 -N func2 -N func3 -N func_start -N func_end \ ++ -N fund0 -N fund1 -N fund2 -N fund3 -N fund -N fund_start \ ++ ${binfile}" output] ++verbose "result is $result" ++verbose "output is $output" ++if {$result != 0} { ++ fail $test ++ return ++} ++pass $test ++ ++clean_restart $executable ++ ++if ![runto_main] { ++ return -1 ++} ++ ++gdb_breakpoint "func" ++gdb_continue_to_breakpoint "func" ++ ++# Sanity check GDB has really found 2 locations ++gdb_test {info break $bpnum} "\r\n2\\.1\[ \t\]\[^\n\]*\r\n2\\.2\[ \t\]\[^\n\]*" "2 locations found" ++ ++gdb_test "p v" " = 0" "no statement got executed" + diff --git a/gdb-physname-expand-completer.patch b/gdb-physname-expand-completer.patch new file mode 100644 index 0000000..4d53870 --- /dev/null +++ b/gdb-physname-expand-completer.patch @@ -0,0 +1,228 @@ +http://sourceware.org/ml/gdb-patches/2011-04/msg00551.html +Subject: [patch] physname-related CU expansion issue for C++ (PR 12708) + +Hi, + +http://sourceware.org/bugzilla/show_bug.cgi?id=12708#c1 + +The dependency on CU expansion is a physname regression. +But the feature of originally-typed-parameters symbols was not present before +physname at all so it is rather buggy-feature than a regression. + +for +typedef int int_typedef; +void f (int_typedef x) {} + +gdb -nx ./1b.o -ex 'set language c++' -ex "complete b 'f(" -ex q + ++ prephysname (42284fdf9d8cdb20c8e833bdbdb2b56977fea525^) +b 'f(int) ++ prephysname -readnow +b 'f(int) + ++ physname (42284fdf9d8cdb20c8e833bdbdb2b56977fea525) +b 'f(int) ++ physname -readnow +b 'f(int) +b 'f(int_typedef) + ++ HEAD +b 'f(int) ++ HEAD -readnow +b 'f(int) +b 'f(int_typedef) + + +This is another issue from the fact that partial symtabs (and even gdbindex) +no longer contain parameters as before. 'f(' can never be found any partial +symtabs, only `f' will be present there. + +No regressions on {x86_64,x86_64-m32,i686}-fedora15-linux-gnu. + + +Thanks, +Jan + + +gdb/ +2011-04-28 Jan Kratochvil + + + * symtab.c (compare_symbol_name): New function. + (completion_list_add_name, expand_partial_symbol_name): Call it, + remove the variable ncmp. + (default_make_symbol_completion_list_break_on): Reduce SYM_TEXT_LEN, + gdb_assert it. + +Gdb/testsuite/ +2011-04-28 Jan Kratochvil + + * gdb.cp/psymtab-parameter.cc: New file. + * gdb.cp/psymtab-parameter.exp: New file. + +--- a/gdb/symtab.c ++++ b/gdb/symtab.c +@@ -3489,6 +3489,40 @@ rbreak_command (char *regexp, int from_tty) + } + + ++/* Evaluate if NAME matches SYM_TEXT and SYM_TEXT_LEN. ++ ++ Either sym_text[sym_text_len] != '(' and then we search for any ++ symbol starting with SYM_TEXT text. ++ ++ Otherwise sym_text[sym_text_len] == '(' and then we require symbol name to ++ be terminated at that point. Partial symbol tables do not have parameters ++ information. */ ++ ++static int ++compare_symbol_name (const char *name, const char *sym_text, int sym_text_len) ++{ ++ int (*ncmp) (const char *, const char *, size_t); ++ ++ ncmp = (case_sensitivity == case_sensitive_on ? strncmp : strncasecmp); ++ ++ if (ncmp (name, sym_text, sym_text_len) != 0) ++ return 0; ++ ++ if (sym_text[sym_text_len] == '(') ++ { ++ /* User searches for `name(someth...'. Require NAME to be terminated. ++ Normally psymtabs and gdbindex have no parameter types so '\0' will be ++ present but accept even parameters presence. In this case this ++ function is in fact strcmp_iw but whitespace skipping is not supported ++ for tab completion. */ ++ ++ if (name[sym_text_len] != '\0' && name[sym_text_len] != '(') ++ return 0; ++ } ++ ++ return 1; ++} ++ + /* Helper routine for make_symbol_completion_list. */ + + static int return_val_size; +@@ -3508,16 +3542,10 @@ completion_list_add_name (char *symname, char *sym_text, int sym_text_len, + char *text, char *word) + { + int newsize; +- int (*ncmp) (const char *, const char *, size_t); +- +- ncmp = (case_sensitivity == case_sensitive_on ? strncmp : strncasecmp); + + /* Clip symbols that cannot match. */ +- +- if (ncmp (symname, sym_text, sym_text_len) != 0) +- { +- return; +- } ++ if (!compare_symbol_name (symname, sym_text, sym_text_len)) ++ return; + + /* We have a match for a completion, so add SYMNAME to the current list + of matches. Note that the name is moved to freshly malloc'd space. */ +@@ -3707,11 +3735,8 @@ static int + expand_partial_symbol_name (const char *name, void *user_data) + { + struct add_name_data *datum = (struct add_name_data *) user_data; +- int (*ncmp) (const char *, const char *, size_t); +- +- ncmp = (case_sensitivity == case_sensitive_on ? strncmp : strncasecmp); + +- return ncmp (name, datum->sym_text, datum->sym_text_len) == 0; ++ return compare_symbol_name (name, datum->sym_text, datum->sym_text_len); + } + + char ** +@@ -3790,6 +3815,22 @@ default_make_symbol_completion_list_break_on (char *text, char *word, + + sym_text_len = strlen (sym_text); + ++ /* Prepare SYM_TEXT_LEN for compare_symbol_name. */ ++ ++ if (current_language->la_language == language_cplus ++ || current_language->la_language == language_java ++ || current_language->la_language == language_fortran) ++ { ++ /* These languages may have parameters entered by user but they are never ++ present in the partial symbol tables. */ ++ ++ const char *cs = memchr (sym_text, '(', sym_text_len); ++ ++ if (cs) ++ sym_text_len = cs - sym_text; ++ } ++ gdb_assert (sym_text[sym_text_len] == '\0' || sym_text[sym_text_len] == '('); ++ + return_val_size = 100; + return_val_index = 0; + return_val = (char **) xmalloc ((return_val_size + 1) * sizeof (char *)); +--- /dev/null ++++ b/gdb/testsuite/gdb.cp/psymtab-parameter.cc +@@ -0,0 +1,22 @@ ++/* This testcase is part of GDB, the GNU debugger. ++ ++ Copyright 2009, 2010, 2011 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 3 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, see . ++ */ ++ ++typedef int typedefed; ++void func (typedefed param) ++{ ++} +--- /dev/null ++++ b/gdb/testsuite/gdb.cp/psymtab-parameter.exp +@@ -0,0 +1,39 @@ ++# Copyright 2011 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 3 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, see . ++ ++if { [skip_cplus_tests] } { continue } ++ ++ ++set testfile psymtab-parameter ++set executable ${testfile}.x ++set srcfile ${testfile}.cc ++set binfile ${objdir}/${subdir}/${executable} ++ ++if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" object {debug c++}] != "" } { ++ untested ${testfile}.exp ++ return -1 ++} ++ ++clean_restart $executable ++ ++# As `main' is not present GDB fails to find the proper inferior language. ++gdb_test_no_output "set language c++" ++ ++# The goal is to keep the CU (Compilation Unit) unexpanded. It would be rather ++# XFAIL than FAIL here. For example -readnow breaks it. ++gdb_test_no_output "maintenance info symtabs" ++ ++# GDB has shown only the `func(int)' entry before. ++gdb_test "complete break 'func(" "break 'func\\(int\\)\r\nbreak 'func\\(typedefed\\)" + diff --git a/gdb-upstream.patch b/gdb-upstream.patch new file mode 100644 index 0000000..3d7a95f --- /dev/null +++ b/gdb-upstream.patch @@ -0,0 +1,139 @@ +Fix Python access to inlined frames (BZ 694824). +http://sourceware.org/ml/gdb-cvs/2011-04/msg00189.html + +### src/gdb/ChangeLog 2011/04/27 03:52:20 1.12887.2.14 +### src/gdb/ChangeLog 2011/04/29 07:32:37 1.12887.2.15 +## -1,3 +1,9 @@ ++2011-04-29 Jan Kratochvil ++ ++ Fix Python access to inlined frames. ++ * python/py-frame.c (frapy_read_var): Find BLOCK using get_frame_block. ++ * python/py-symbol.c (gdbpy_lookup_symbol): Likewise. ++ + 2011-04-26 Michael Walle + + * remote.c (remote_start_remote): Ack packet after sending the +--- src/gdb/python/py-frame.c 2011/01/26 20:53:45 1.15 ++++ src/gdb/python/py-frame.c 2011/04/29 07:32:40 1.15.2.1 +@@ -436,7 +436,7 @@ + FRAPY_REQUIRE_VALID ((frame_object *) self, frame); + + if (!block) +- block = block_for_pc (get_frame_address_in_block (frame)); ++ block = get_frame_block (frame, NULL); + var = lookup_symbol (var_name, block, VAR_DOMAIN, NULL); + } + GDB_PY_HANDLE_EXCEPTION (except); +--- src/gdb/python/py-symbol.c 2011/03/17 09:36:16 1.6 ++++ src/gdb/python/py-symbol.c 2011/04/29 07:32:40 1.6.2.1 +@@ -275,8 +275,8 @@ + + TRY_CATCH (except, RETURN_MASK_ALL) + { +- selected_frame = get_selected_frame (_("No frame selected.")); +- block = block_for_pc (get_frame_address_in_block (selected_frame)); ++ selected_frame = get_selected_frame (_("No frame selected.")); ++ block = get_frame_block (selected_frame, NULL); + } + GDB_PY_HANDLE_EXCEPTION (except); + } +### src/gdb/testsuite/ChangeLog 2011/04/25 21:25:18 1.2655.2.4 +### src/gdb/testsuite/ChangeLog 2011/04/29 07:32:40 1.2655.2.5 +## -1,3 +1,9 @@ ++2011-04-29 Jan Kratochvil ++ ++ Fix Python access to inlined frames. ++ * gdb.python/py-frame-inline.c: New file. ++ * gdb.python/py-frame-inline.exp: New file. ++ + 2011-04-25 Jan Kratochvil + + * gdb.base/gdbindex-stabs-dwarf.c: New file. +--- src/gdb/testsuite/gdb.python/py-frame-inline.c ++++ src/gdb/testsuite/gdb.python/py-frame-inline.c 2011-04-29 07:33:45.912552000 +0000 +@@ -0,0 +1,43 @@ ++/* This test is part of GDB, the GNU debugger. ++ ++ Copyright 2011 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 3 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, see . */ ++ ++volatile int v = 42; ++ ++__attribute__((__always_inline__)) static int ++f (void) ++{ ++ /* Provide first stub line so that GDB understand the PC is already inside ++ the inlined function and does not expect a step into it. */ ++ v++; ++ v++; /* break-here */ ++ ++ return v; ++} ++ ++__attribute__((__noinline__)) static int ++g (void) ++{ ++ volatile int l = v; ++ ++ return f (); ++} ++ ++int ++main (void) ++{ ++ return g (); ++} +--- src/gdb/testsuite/gdb.python/py-frame-inline.exp ++++ src/gdb/testsuite/gdb.python/py-frame-inline.exp 2011-04-29 07:33:46.649817000 +0000 +@@ -0,0 +1,39 @@ ++# Copyright (C) 2011 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 3 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, see . ++ ++load_lib gdb-python.exp ++ ++set testfile "py-frame-inline" ++set srcfile ${testfile}.c ++if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile}] } { ++ return -1 ++} ++ ++# Skip all tests if Python scripting is not enabled. ++if { [skip_python_tests] } { continue } ++ ++if ![runto main] then { ++ fail "Can't run to function f" ++ return 0 ++} ++ ++gdb_breakpoint [gdb_get_line_number "break-here"] ++gdb_continue_to_breakpoint "Block break here." ++ ++gdb_test "info frame" "inlined into frame 1\r\n.*" ++ ++gdb_test "up" "#1 g .*" ++ ++gdb_test "python print gdb.selected_frame().read_var('l')" "\r\n42" diff --git a/gdb.spec b/gdb.spec index ebf699b..e006d72 100644 --- a/gdb.spec +++ b/gdb.spec @@ -23,11 +23,11 @@ Name: gdb%{?_with_debug:-debug} # Set version to contents of gdb/version.in. # NOTE: the FSF gdb versions are numbered N.M for official releases, like 6.3 # and, since January 2005, X.Y.Z.date for daily snapshots, like 6.3.50.20050112 # (daily snapshot from mailine), or 6.3.0.20040112 (head of the release branch). -Version: 7.2.90.20110411 +Version: 7.2.90.20110429 # 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: 34%{?_with_upstream:.upstream}%{?dist} +Release: 35%{?_with_upstream:.upstream}%{?dist} License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ and GPLv2+ with exceptions and GPL+ and LGPLv2+ and BSD and Public Domain Group: Development/Debuggers @@ -262,7 +262,7 @@ Patch231: gdb-6.3-bz202689-exec-from-pthread-test.patch # Backported fixups post the source tarball. #Xdrop: Just backports. -#Patch232: gdb-upstream.patch +Patch232: gdb-upstream.patch # Testcase for PPC Power6/DFP instructions disassembly (BZ 230000). #=fedoratest+ppc @@ -557,6 +557,19 @@ Patch574: gdb-core-thread-internalerr-3of3.patch # rebuild to fix it, we need to be able to use gdb :) Patch579: gdb-7.2.50-sparc-add-workaround-to-broken-debug-files.patch +# Fix case insensitive symbols for Fortran by iFort (BZ 645773). +Patch580: gdb-bz645773-case-insensitive-1of5.patch +Patch581: gdb-bz645773-case-insensitive-2of5.patch +Patch582: gdb-bz645773-case-insensitive-3of5.patch +Patch583: gdb-bz645773-case-insensitive-4of5.patch +Patch588: gdb-bz645773-case-insensitive-5of5.patch + +# Fix -O2 -g breakpoints internal error + prologue skipping (BZ 612253). +Patch589: gdb-optim-g-prologue-skip.patch + +# Fix physname-related CU expansion issue for C++ (PR 12708). +Patch590: gdb-physname-expand-completer.patch + BuildRequires: ncurses-devel%{?_isa} texinfo gettext flex bison expat-devel%{?_isa} Requires: readline%{?_isa} BuildRequires: readline-devel%{?_isa} @@ -713,7 +726,7 @@ rm -f gdb/jv-exp.c gdb/m2-exp.c gdb/objc-exp.c gdb/p-exp.c %if 0%{!?_with_upstream:1} -#patch232 -p1 +%patch232 -p1 %patch349 -p1 %patch1 -p1 %patch3 -p1 @@ -826,6 +839,13 @@ rm -f gdb/jv-exp.c gdb/m2-exp.c gdb/objc-exp.c gdb/p-exp.c %patch573 -p1 %patch574 -p1 %patch579 -p1 +%patch580 -p1 +%patch581 -p1 +%patch582 -p1 +%patch583 -p1 +%patch588 -p1 +%patch589 -p1 +%patch590 -p1 %patch390 -p1 %patch393 -p1 @@ -1254,6 +1274,13 @@ fi %{_infodir}/gdb.info* %changelog +* Fri Apr 29 2011 Jan Kratochvil - 7.2.90.20110429-35.fc15 +- Rebase to FSF GDB 7.2.90.20110429 (which is a 7.3 pre-release). +- Fix -O2 -g breakpoints internal error + prologue skipping (BZ 612253). +- Fix case insensitive symbols for Fortran by iFort (BZ 645773). +- Fix physname-related CU expansion issue for C++ (PR 12708). +- Fix Python access to inlined frames (BZ 694824). + * Mon Apr 11 2011 Jan Kratochvil - 7.2.90.20110411-34.fc15 - Rebase to FSF GDB 7.2.90.20110411 (which is a 7.3 pre-release). - Include the proper fix for anonymous struct typedefs (Tom Tromey, BZ 672230). diff --git a/sources b/sources index ff27557..14ecfea 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ 04e5c4b1b9e633422cc48990fe61958d libstdc++-v3-python-r155978.tar.bz2 -7095f3f412e27a73c39df4aa737a386a gdb-7.2.90.20110411.tar.bz2 +e585e484001f5cd69e87cbcd0c99c1f7 gdb-7.2.90.20110429.tar.bz2