- Upgrade to GDB 6.7. Drop redundant patches, forward-port remaining ones.
- Fix rereading of the main executable on its change.
This commit is contained in:
parent
cc171577b7
commit
eb9d945afa
@ -1 +1 @@
|
||||
gdb-6.6.tar.bz2
|
||||
gdb-6.7.tar.bz2
|
||||
|
@ -11,16 +11,14 @@ testsuite/gdb.base:
|
||||
|
||||
* setshow.exp: Add testing of "set backtrace past-zero-pc" option.
|
||||
|
||||
Index: gdb-6.5/gdb/testsuite/gdb.base/setshow.exp
|
||||
2007-10-15 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
Port to GDB-6.7.
|
||||
|
||||
Index: gdb-6.7/gdb/testsuite/gdb.base/setshow.exp
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/testsuite/gdb.base/setshow.exp 2006-07-11 02:46:50.000000000 -0300
|
||||
+++ gdb-6.5/gdb/testsuite/gdb.base/setshow.exp 2006-07-11 02:47:24.000000000 -0300
|
||||
@@ -1,4 +1,4 @@
|
||||
-# Copyright 1992, 1994, 1996, 1997, 1998, 2001, 2003
|
||||
+# Copyright 1992, 1994, 1996, 1997, 1998, 2001, 2003, 2005
|
||||
# Free Software Foundation, Inc.
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
--- gdb-6.7.orig/gdb/testsuite/gdb.base/setshow.exp 2007-08-23 20:14:17.000000000 +0200
|
||||
+++ gdb-6.7/gdb/testsuite/gdb.base/setshow.exp 2007-10-15 21:34:52.000000000 +0200
|
||||
@@ -106,6 +106,16 @@ if { ![target_info exists use_gdb_stub]
|
||||
delete_breakpoints
|
||||
gdb_test "run" "Starting program:.*foo bar blup baz bubble.*" "passing args"
|
||||
@ -38,11 +36,11 @@ Index: gdb-6.5/gdb/testsuite/gdb.base/setshow.exp
|
||||
#test set check range on
|
||||
gdb_test "set check range on" "" "set check range on"
|
||||
#test show check range on
|
||||
Index: gdb-6.5/gdb/frame.c
|
||||
Index: gdb-6.7/gdb/frame.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/frame.c 2006-07-11 02:46:50.000000000 -0300
|
||||
+++ gdb-6.5/gdb/frame.c 2006-07-11 02:51:20.000000000 -0300
|
||||
@@ -131,6 +131,16 @@ Whether backtraces should continue past
|
||||
--- gdb-6.7.orig/gdb/frame.c 2007-10-12 22:35:58.000000000 +0200
|
||||
+++ gdb-6.7/gdb/frame.c 2007-10-15 21:34:52.000000000 +0200
|
||||
@@ -133,6 +133,16 @@ Whether backtraces should continue past
|
||||
value);
|
||||
}
|
||||
|
||||
@ -59,7 +57,7 @@ Index: gdb-6.5/gdb/frame.c
|
||||
static int backtrace_past_entry;
|
||||
static void
|
||||
show_backtrace_past_entry (struct ui_file *file, int from_tty,
|
||||
@@ -1313,9 +1323,7 @@ get_prev_frame (struct frame_info *this_
|
||||
@@ -1483,9 +1493,7 @@ get_prev_frame (struct frame_info *this_
|
||||
}
|
||||
|
||||
if (this_frame->level > 0
|
||||
@ -70,7 +68,7 @@ Index: gdb-6.5/gdb/frame.c
|
||||
&& get_frame_type (this_frame) == NORMAL_FRAME
|
||||
&& get_frame_type (get_next_frame (this_frame)) == NORMAL_FRAME
|
||||
&& get_frame_pc (this_frame) == 0)
|
||||
@@ -1629,6 +1637,17 @@ the rest of the stack trace."),
|
||||
@@ -1850,6 +1858,17 @@ the rest of the stack trace."),
|
||||
&set_backtrace_cmdlist,
|
||||
&show_backtrace_cmdlist);
|
||||
|
||||
|
@ -1,427 +0,0 @@
|
||||
2007-02-08 Joel Brobecker <brobecker@gnat.com>
|
||||
Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
Daniel Jacobowitz <dan@codesourcery.com>
|
||||
|
||||
* rs6000-tdep.c (bl_to_blrl_insn_p): New function.
|
||||
(skip_prologue): Allow bl->blrl used by PIC code.
|
||||
|
||||
--- ./gdb/rs6000-tdep.c 9 Jan 2007 17:58:57 -0000 1.260
|
||||
+++ ./gdb/rs6000-tdep.c 8 Feb 2007 14:22:53 -0000 1.261
|
||||
@@ -902,6 +902,30 @@ store_param_on_stack_p (unsigned long op
|
||||
return 0;
|
||||
}
|
||||
|
||||
+/* Assuming that INSN is a "bl" instruction located at PC, return
|
||||
+ nonzero if the destination of the branch is a "blrl" instruction.
|
||||
+
|
||||
+ This sequence is sometimes found in certain function prologues.
|
||||
+ It allows the function to load the LR register with a value that
|
||||
+ they can use to access PIC data using PC-relative offsets. */
|
||||
+
|
||||
+static int
|
||||
+bl_to_blrl_insn_p (CORE_ADDR pc, int insn)
|
||||
+{
|
||||
+ const int opcode = 18;
|
||||
+ const CORE_ADDR dest = branch_dest (opcode, insn, pc, -1);
|
||||
+ int dest_insn;
|
||||
+
|
||||
+ if (dest == -1)
|
||||
+ return 0; /* Should never happen, but just return zero to be safe. */
|
||||
+
|
||||
+ dest_insn = read_memory_integer (dest, 4);
|
||||
+ if ((dest_insn & 0xfc00ffff) == 0x4c000021) /* blrl */
|
||||
+ return 1;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static CORE_ADDR
|
||||
skip_prologue (CORE_ADDR pc, CORE_ADDR lim_pc, struct rs6000_framedata *fdata)
|
||||
{
|
||||
@@ -1133,6 +1157,12 @@ skip_prologue (CORE_ADDR pc, CORE_ADDR l
|
||||
to save fprs??? */
|
||||
|
||||
fdata->frameless = 0;
|
||||
+
|
||||
+ /* If the return address has already been saved, we can skip
|
||||
+ calls to blrl (for PIC). */
|
||||
+ if (lr_reg != -1 && bl_to_blrl_insn_p (pc, op))
|
||||
+ continue;
|
||||
+
|
||||
/* Don't skip over the subroutine call if it is not within
|
||||
the first three instructions of the prologue and either
|
||||
we have no line table information or the line info tells
|
||||
|
||||
|
||||
|
||||
2007-03-27 Andreas Schwab <schwab@suse.de>
|
||||
Daniel Jacobowitz <dan@codesourcery.com>
|
||||
|
||||
* dwarf2-frame.c (dwarf2_frame_eh_frame_regnum): Rename to...
|
||||
(dwarf2_frame_adjust_regnum): ...this. Make static. Add eh_frame_p
|
||||
argument. Update all callers.
|
||||
(struct dwarf2_frame_ops): Replace eh_frame_regnum with adjust_regnum.
|
||||
(dwarf2_frame_set_eh_frame_regnum): Rename to...
|
||||
(dwarf2_frame_set_adjust_regnum): ...this. Update argument type.
|
||||
* dwarf2frame.h (dwarf2_frame_set_eh_frame_regnum): Rename to...
|
||||
(dwarf2_frame_set_adjust_regnum): ...this.
|
||||
(dwarf2_frame_eh_frame_regnum): Delete prototype.
|
||||
* rs6000-tdep.c: Include "dwarf2-frame.h".
|
||||
(rs6000_adjust_frame_regnum): Define.
|
||||
(rs6000_gdbarch_init): Enable use of DWARF CFI frame unwinder.
|
||||
Register rs6000_adjust_frame_regnum.
|
||||
|
||||
* Makefile.in (rs6000-tdep.o): Update dependencies.
|
||||
|
||||
--- ./gdb/dwarf2-frame.c 27 Feb 2007 20:17:18 -0000 1.68
|
||||
+++ ./gdb/dwarf2-frame.c 27 Mar 2007 19:02:42 -0000 1.69
|
||||
@@ -107,6 +107,9 @@ struct dwarf2_fde
|
||||
};
|
||||
|
||||
static struct dwarf2_fde *dwarf2_frame_find_fde (CORE_ADDR *pc);
|
||||
+
|
||||
+static int dwarf2_frame_adjust_regnum (struct gdbarch *gdbarch, int regnum,
|
||||
+ int eh_frame_p);
|
||||
|
||||
|
||||
/* Structure describing a frame state. */
|
||||
@@ -314,8 +317,7 @@ execute_cfa_program (gdb_byte *insn_ptr,
|
||||
else if ((insn & 0xc0) == DW_CFA_offset)
|
||||
{
|
||||
reg = insn & 0x3f;
|
||||
- if (eh_frame_p)
|
||||
- reg = dwarf2_frame_eh_frame_regnum (gdbarch, reg);
|
||||
+ reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
|
||||
insn_ptr = read_uleb128 (insn_ptr, insn_end, &utmp);
|
||||
offset = utmp * fs->data_align;
|
||||
dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
|
||||
@@ -326,8 +328,7 @@ execute_cfa_program (gdb_byte *insn_ptr,
|
||||
{
|
||||
gdb_assert (fs->initial.reg);
|
||||
reg = insn & 0x3f;
|
||||
- if (eh_frame_p)
|
||||
- reg = dwarf2_frame_eh_frame_regnum (gdbarch, reg);
|
||||
+ reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
|
||||
dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
|
||||
if (reg < fs->initial.num_regs)
|
||||
fs->regs.reg[reg] = fs->initial.reg[reg];
|
||||
@@ -368,8 +369,7 @@ register %s (#%d) at 0x%s"),
|
||||
|
||||
case DW_CFA_offset_extended:
|
||||
insn_ptr = read_uleb128 (insn_ptr, insn_end, ®);
|
||||
- if (eh_frame_p)
|
||||
- reg = dwarf2_frame_eh_frame_regnum (gdbarch, reg);
|
||||
+ reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
|
||||
insn_ptr = read_uleb128 (insn_ptr, insn_end, &utmp);
|
||||
offset = utmp * fs->data_align;
|
||||
dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
|
||||
@@ -380,35 +380,30 @@ register %s (#%d) at 0x%s"),
|
||||
case DW_CFA_restore_extended:
|
||||
gdb_assert (fs->initial.reg);
|
||||
insn_ptr = read_uleb128 (insn_ptr, insn_end, ®);
|
||||
- if (eh_frame_p)
|
||||
- reg = dwarf2_frame_eh_frame_regnum (gdbarch, reg);
|
||||
+ reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
|
||||
dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
|
||||
fs->regs.reg[reg] = fs->initial.reg[reg];
|
||||
break;
|
||||
|
||||
case DW_CFA_undefined:
|
||||
insn_ptr = read_uleb128 (insn_ptr, insn_end, ®);
|
||||
- if (eh_frame_p)
|
||||
- reg = dwarf2_frame_eh_frame_regnum (gdbarch, reg);
|
||||
+ reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
|
||||
dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
|
||||
fs->regs.reg[reg].how = DWARF2_FRAME_REG_UNDEFINED;
|
||||
break;
|
||||
|
||||
case DW_CFA_same_value:
|
||||
insn_ptr = read_uleb128 (insn_ptr, insn_end, ®);
|
||||
- if (eh_frame_p)
|
||||
- reg = dwarf2_frame_eh_frame_regnum (gdbarch, reg);
|
||||
+ reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
|
||||
dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
|
||||
fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAME_VALUE;
|
||||
break;
|
||||
|
||||
case DW_CFA_register:
|
||||
insn_ptr = read_uleb128 (insn_ptr, insn_end, ®);
|
||||
- if (eh_frame_p)
|
||||
- reg = dwarf2_frame_eh_frame_regnum (gdbarch, reg);
|
||||
+ reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
|
||||
insn_ptr = read_uleb128 (insn_ptr, insn_end, &utmp);
|
||||
- if (eh_frame_p)
|
||||
- utmp = dwarf2_frame_eh_frame_regnum (gdbarch, utmp);
|
||||
+ utmp = dwarf2_frame_adjust_regnum (gdbarch, utmp, eh_frame_p);
|
||||
dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
|
||||
fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_REG;
|
||||
fs->regs.reg[reg].loc.reg = utmp;
|
||||
@@ -456,9 +451,8 @@ bad CFI data; mismatched DW_CFA_restore_
|
||||
|
||||
case DW_CFA_def_cfa_register:
|
||||
insn_ptr = read_uleb128 (insn_ptr, insn_end, &fs->cfa_reg);
|
||||
- if (eh_frame_p)
|
||||
- fs->cfa_reg = dwarf2_frame_eh_frame_regnum (gdbarch,
|
||||
- fs->cfa_reg);
|
||||
+ fs->cfa_reg = dwarf2_frame_adjust_regnum (gdbarch, fs->cfa_reg,
|
||||
+ eh_frame_p);
|
||||
fs->cfa_how = CFA_REG_OFFSET;
|
||||
break;
|
||||
|
||||
@@ -484,8 +478,7 @@ bad CFI data; mismatched DW_CFA_restore_
|
||||
|
||||
case DW_CFA_expression:
|
||||
insn_ptr = read_uleb128 (insn_ptr, insn_end, ®);
|
||||
- if (eh_frame_p)
|
||||
- reg = dwarf2_frame_eh_frame_regnum (gdbarch, reg);
|
||||
+ reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
|
||||
dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
|
||||
insn_ptr = read_uleb128 (insn_ptr, insn_end, &utmp);
|
||||
fs->regs.reg[reg].loc.exp = insn_ptr;
|
||||
@@ -496,8 +489,7 @@ bad CFI data; mismatched DW_CFA_restore_
|
||||
|
||||
case DW_CFA_offset_extended_sf:
|
||||
insn_ptr = read_uleb128 (insn_ptr, insn_end, ®);
|
||||
- if (eh_frame_p)
|
||||
- reg = dwarf2_frame_eh_frame_regnum (gdbarch, reg);
|
||||
+ reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
|
||||
insn_ptr = read_sleb128 (insn_ptr, insn_end, &offset);
|
||||
offset *= fs->data_align;
|
||||
dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
|
||||
@@ -535,9 +527,8 @@ bad CFI data; mismatched DW_CFA_restore_
|
||||
|
||||
case DW_CFA_def_cfa_sf:
|
||||
insn_ptr = read_uleb128 (insn_ptr, insn_end, &fs->cfa_reg);
|
||||
- if (eh_frame_p)
|
||||
- fs->cfa_reg = dwarf2_frame_eh_frame_regnum (gdbarch,
|
||||
- fs->cfa_reg);
|
||||
+ fs->cfa_reg = dwarf2_frame_adjust_regnum (gdbarch, fs->cfa_reg,
|
||||
+ eh_frame_p);
|
||||
insn_ptr = read_sleb128 (insn_ptr, insn_end, &offset);
|
||||
fs->cfa_offset = offset * fs->data_align;
|
||||
fs->cfa_how = CFA_REG_OFFSET;
|
||||
@@ -581,6 +572,7 @@ bad CFI data; mismatched DW_CFA_restore_
|
||||
|
||||
case DW_CFA_GNU_negative_offset_extended:
|
||||
insn_ptr = read_uleb128 (insn_ptr, insn_end, ®);
|
||||
+ reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
|
||||
insn_ptr = read_uleb128 (insn_ptr, insn_end, &offset);
|
||||
offset *= fs->data_align;
|
||||
dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
|
||||
@@ -617,8 +607,9 @@ struct dwarf2_frame_ops
|
||||
trampoline. */
|
||||
int (*signal_frame_p) (struct gdbarch *, struct frame_info *);
|
||||
|
||||
- /* Convert .eh_frame register number to DWARF register number. */
|
||||
- int (*eh_frame_regnum) (struct gdbarch *, int);
|
||||
+ /* Convert .eh_frame register number to DWARF register number, or
|
||||
+ adjust .debug_frame register number. */
|
||||
+ int (*adjust_regnum) (struct gdbarch *, int, int);
|
||||
};
|
||||
|
||||
/* Default architecture-specific register state initialization
|
||||
@@ -726,29 +717,30 @@ dwarf2_frame_signal_frame_p (struct gdba
|
||||
return ops->signal_frame_p (gdbarch, next_frame);
|
||||
}
|
||||
|
||||
-/* Set the architecture-specific mapping of .eh_frame register numbers to
|
||||
- DWARF register numbers. */
|
||||
+/* Set the architecture-specific adjustment of .eh_frame and .debug_frame
|
||||
+ register numbers. */
|
||||
|
||||
void
|
||||
-dwarf2_frame_set_eh_frame_regnum (struct gdbarch *gdbarch,
|
||||
- int (*eh_frame_regnum) (struct gdbarch *,
|
||||
- int))
|
||||
+dwarf2_frame_set_adjust_regnum (struct gdbarch *gdbarch,
|
||||
+ int (*adjust_regnum) (struct gdbarch *,
|
||||
+ int, int))
|
||||
{
|
||||
struct dwarf2_frame_ops *ops = gdbarch_data (gdbarch, dwarf2_frame_data);
|
||||
|
||||
- ops->eh_frame_regnum = eh_frame_regnum;
|
||||
+ ops->adjust_regnum = adjust_regnum;
|
||||
}
|
||||
|
||||
-/* Translate a .eh_frame register to DWARF register. */
|
||||
+/* Translate a .eh_frame register to DWARF register, or adjust a .debug_frame
|
||||
+ register. */
|
||||
|
||||
-int
|
||||
-dwarf2_frame_eh_frame_regnum (struct gdbarch *gdbarch, int regnum)
|
||||
+static int
|
||||
+dwarf2_frame_adjust_regnum (struct gdbarch *gdbarch, int regnum, int eh_frame_p)
|
||||
{
|
||||
struct dwarf2_frame_ops *ops = gdbarch_data (gdbarch, dwarf2_frame_data);
|
||||
|
||||
- if (ops->eh_frame_regnum == NULL)
|
||||
+ if (ops->adjust_regnum == NULL)
|
||||
return regnum;
|
||||
- return ops->eh_frame_regnum (gdbarch, regnum);
|
||||
+ return ops->adjust_regnum (gdbarch, regnum, eh_frame_p);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -1726,10 +1718,10 @@ decode_frame_entry_1 (struct comp_unit *
|
||||
else
|
||||
cie->return_address_register = read_unsigned_leb128 (unit->abfd, buf,
|
||||
&bytes_read);
|
||||
- if (eh_frame_p)
|
||||
- cie->return_address_register
|
||||
- = dwarf2_frame_eh_frame_regnum (current_gdbarch,
|
||||
- cie->return_address_register);
|
||||
+ cie->return_address_register
|
||||
+ = dwarf2_frame_adjust_regnum (current_gdbarch,
|
||||
+ cie->return_address_register,
|
||||
+ eh_frame_p);
|
||||
|
||||
buf += bytes_read;
|
||||
|
||||
--- ./gdb/dwarf2-frame.h 9 Jan 2007 17:58:50 -0000 1.14
|
||||
+++ ./gdb/dwarf2-frame.h 27 Mar 2007 19:02:42 -0000 1.15
|
||||
@@ -94,18 +94,13 @@ extern void
|
||||
int (*signal_frame_p) (struct gdbarch *,
|
||||
struct frame_info *));
|
||||
|
||||
-/* Set the architecture-specific mapping of .eh_frame register numbers to
|
||||
- DWARF register numbers. */
|
||||
+/* Set the architecture-specific adjustment of .eh_frame and .debug_frame
|
||||
+ register numbers. */
|
||||
|
||||
extern void
|
||||
- dwarf2_frame_set_eh_frame_regnum (struct gdbarch *gdbarch,
|
||||
- int (*eh_frame_regnum) (struct gdbarch *,
|
||||
- int));
|
||||
-
|
||||
-/* Translate a .eh_frame register to DWARF register. */
|
||||
-
|
||||
-extern int
|
||||
- dwarf2_frame_eh_frame_regnum (struct gdbarch *gdbarch, int regnum);
|
||||
+ dwarf2_frame_set_adjust_regnum (struct gdbarch *gdbarch,
|
||||
+ int (*adjust_regnum) (struct gdbarch *,
|
||||
+ int, int));
|
||||
|
||||
/* Return the frame unwind methods for the function that contains PC,
|
||||
or NULL if it can't be handled by DWARF CFI frame unwinder. */
|
||||
--- ./gdb/rs6000-tdep.c 13 Mar 2007 17:34:22 -0000 1.266
|
||||
+++ ./gdb/rs6000-tdep.c 27 Mar 2007 19:02:42 -0000 1.267
|
||||
@@ -40,6 +40,7 @@
|
||||
#include "sim-regno.h"
|
||||
#include "gdb/sim-ppc.h"
|
||||
#include "reggroups.h"
|
||||
+#include "dwarf2-frame.h"
|
||||
|
||||
#include "libbfd.h" /* for bfd_default_set_arch_mach */
|
||||
#include "coff/internal.h" /* for libcoff.h */
|
||||
@@ -2294,6 +2295,69 @@ rs6000_dwarf2_reg_to_regnum (int num)
|
||||
}
|
||||
}
|
||||
|
||||
+/* Translate a .eh_frame register to DWARF register, or adjust a
|
||||
+ .debug_frame register. */
|
||||
+
|
||||
+static int
|
||||
+rs6000_adjust_frame_regnum (struct gdbarch *gdbarch, int num, int eh_frame_p)
|
||||
+{
|
||||
+ /* GCC releases before 3.4 use GCC internal register numbering in
|
||||
+ .debug_frame (and .debug_info, et cetera). The numbering is
|
||||
+ different from the standard SysV numbering for everything except
|
||||
+ for GPRs and FPRs. We can not detect this problem in most cases
|
||||
+ - to get accurate debug info for variables living in lr, ctr, v0,
|
||||
+ et cetera, use a newer version of GCC. But we must detect
|
||||
+ one important case - lr is in column 65 in .debug_frame output,
|
||||
+ instead of 108.
|
||||
+
|
||||
+ GCC 3.4, and the "hammer" branch, have a related problem. They
|
||||
+ record lr register saves in .debug_frame as 108, but still record
|
||||
+ the return column as 65. We fix that up too.
|
||||
+
|
||||
+ We can do this because 65 is assigned to fpsr, and GCC never
|
||||
+ generates debug info referring to it. To add support for
|
||||
+ handwritten debug info that restores fpsr, we would need to add a
|
||||
+ producer version check to this. */
|
||||
+ if (!eh_frame_p)
|
||||
+ {
|
||||
+ if (num == 65)
|
||||
+ return 108;
|
||||
+ else
|
||||
+ return num;
|
||||
+ }
|
||||
+
|
||||
+ /* .eh_frame is GCC specific. For binary compatibility, it uses GCC
|
||||
+ internal register numbering; translate that to the standard DWARF2
|
||||
+ register numbering. */
|
||||
+ if (0 <= num && num <= 63) /* r0-r31,fp0-fp31 */
|
||||
+ return num;
|
||||
+ else if (68 <= num && num <= 75) /* cr0-cr8 */
|
||||
+ return num - 68 + 86;
|
||||
+ else if (77 <= num && num <= 108) /* vr0-vr31 */
|
||||
+ return num - 77 + 1124;
|
||||
+ else
|
||||
+ switch (num)
|
||||
+ {
|
||||
+ case 64: /* mq */
|
||||
+ return 100;
|
||||
+ case 65: /* lr */
|
||||
+ return 108;
|
||||
+ case 66: /* ctr */
|
||||
+ return 109;
|
||||
+ case 76: /* xer */
|
||||
+ return 101;
|
||||
+ case 109: /* vrsave */
|
||||
+ return 356;
|
||||
+ case 110: /* vscr */
|
||||
+ return 67;
|
||||
+ case 111: /* spe_acc */
|
||||
+ return 99;
|
||||
+ case 112: /* spefscr */
|
||||
+ return 612;
|
||||
+ default:
|
||||
+ return num;
|
||||
+ }
|
||||
+}
|
||||
|
||||
/* Support for CONVERT_FROM_FUNC_PTR_ADDR (ARCH, ADDR, TARG).
|
||||
|
||||
@@ -3428,6 +3492,10 @@ rs6000_gdbarch_init (struct gdbarch_info
|
||||
(gdbarch, rs6000_in_solib_return_trampoline);
|
||||
set_gdbarch_skip_trampoline_code (gdbarch, rs6000_skip_trampoline_code);
|
||||
|
||||
+ /* Hook in the DWARF CFI frame unwinder. */
|
||||
+ frame_unwind_append_sniffer (gdbarch, dwarf2_frame_sniffer);
|
||||
+ dwarf2_frame_set_adjust_regnum (gdbarch, rs6000_adjust_frame_regnum);
|
||||
+
|
||||
/* Hook in ABI-specific overrides, if they have been registered. */
|
||||
gdbarch_init_osabi (info, gdbarch);
|
||||
|
||||
--- ./gdb/Makefile.in.orig 2007-07-31 16:42:29.000000000 -0400
|
||||
+++ ./gdb/Makefile.in 2007-08-01 13:42:51.000000000 -0400
|
||||
@@ -2468,7 +2468,7 @@ rs6000-tdep.o: rs6000-tdep.c $(defs_h) $
|
||||
$(reggroups_h) $(libbfd_h) $(coff_internal_h) $(libcoff_h) \
|
||||
$(coff_xcoff_h) $(libxcoff_h) $(elf_bfd_h) $(solib_svr4_h) \
|
||||
$(ppc_tdep_h) $(gdb_assert_h) $(dis_asm_h) $(trad_frame_h) \
|
||||
- $(frame_unwind_h) $(frame_base_h) $(rs6000_tdep_h)
|
||||
+ $(frame_unwind_h) $(frame_base_h) $(rs6000_tdep_h) $(dwarf2_frame_h)
|
||||
rs6000-aix-tdep.o: rs6000-aix-tdep.c $(defs_h) $(osabi_h) $(rs6000_tdep_h)
|
||||
s390-nat.o: s390-nat.c $(defs_h) $(tm_h) $(regcache_h) $(inferior_h) \
|
||||
$(s390_tdep_h) $(observer_h) $(linux_nat_h)
|
||||
s390-tdep.o: s390-tdep.c $(defs_h) $(arch_utils_h) $(frame_h) $(inferior_h) \
|
||||
|
||||
|
||||
|
||||
2007-04-10 Andreas Schwab <schwab@suse.de>
|
||||
|
||||
* rs6000-tdep.c (rs6000_dwarf2_reg_to_regnum): Decode 64 as CR
|
||||
register.
|
||||
|
||||
--- ./gdb/rs6000-tdep.c 1 Apr 2007 18:24:59 -0000 1.269
|
||||
+++ ./gdb/rs6000-tdep.c 10 Apr 2007 16:02:41 -0000 1.270
|
||||
@@ -2274,6 +2274,8 @@ rs6000_dwarf2_reg_to_regnum (int num)
|
||||
else
|
||||
switch (num)
|
||||
{
|
||||
+ case 64:
|
||||
+ return tdep->ppc_cr_regnum;
|
||||
case 67:
|
||||
return tdep->ppc_vrsave_regnum - 1; /* vscr */
|
||||
case 99:
|
@ -16,10 +16,10 @@
|
||||
+ /* no decoration */
|
||||
+ break;
|
||||
+ case gnu_v3_base_object_ctor:
|
||||
+ d_append_string_constant (dpi, "$base");
|
||||
+ d_append_string (dpi, "$base");
|
||||
+ break;
|
||||
+ case gnu_v3_complete_object_allocating_ctor:
|
||||
+ d_append_string_constant (dpi, "$allocate");
|
||||
+ d_append_string (dpi, "$allocate");
|
||||
+ break;
|
||||
+ }
|
||||
return;
|
||||
@ -30,13 +30,13 @@
|
||||
+ switch (dc->u.s_dtor.kind)
|
||||
+ {
|
||||
+ case gnu_v3_deleting_dtor:
|
||||
+ d_append_string_constant (dpi, "$delete");
|
||||
+ d_append_string (dpi, "$delete");
|
||||
+ break;
|
||||
+ case gnu_v3_complete_object_dtor:
|
||||
+ /* no decoration */
|
||||
+ break;
|
||||
+ case gnu_v3_base_object_dtor:
|
||||
+ d_append_string_constant (dpi, "$base");
|
||||
+ d_append_string (dpi, "$base");
|
||||
+ break;
|
||||
+ }
|
||||
return;
|
||||
|
@ -43,18 +43,15 @@
|
||||
(breakpoint_re_set_one): New variables ID_S, ID, PC_LIST, NUM_PC_VALUES.
|
||||
Parse the "%42" suffix of the multiple-PC breakpoints's ADDR_STRINGs.
|
||||
|
||||
Index: gdb-6.5/gdb/mi/mi-cmd-disas.c
|
||||
2007-10-14 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
Port to GDB-6.7.
|
||||
|
||||
Index: gdb-6.7/gdb/mi/mi-cmd-disas.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/mi/mi-cmd-disas.c 2006-07-11 01:30:43.000000000 -0300
|
||||
+++ gdb-6.5/gdb/mi/mi-cmd-disas.c 2006-07-11 02:16:07.000000000 -0300
|
||||
@@ -1,5 +1,5 @@
|
||||
/* MI Command Set - disassemble commands.
|
||||
- Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||
+ Copyright (C) 2000, 2001, 2002, 2005 Free Software Foundation, Inc.
|
||||
Contributed by Cygnus Solutions (a Red Hat company).
|
||||
|
||||
This file is part of GDB.
|
||||
@@ -145,11 +145,18 @@ mi_cmd_disassemble (char *command, char
|
||||
--- gdb-6.7.orig/gdb/mi/mi-cmd-disas.c 2007-08-23 20:08:48.000000000 +0200
|
||||
+++ gdb-6.7/gdb/mi/mi-cmd-disas.c 2007-10-14 23:26:23.000000000 +0200
|
||||
@@ -143,11 +143,18 @@ mi_cmd_disassemble (char *command, char
|
||||
|
||||
if (line_seen && file_seen)
|
||||
{
|
||||
@ -74,19 +71,11 @@ Index: gdb-6.5/gdb/mi/mi-cmd-disas.c
|
||||
if (find_pc_partial_function (start, NULL, &low, &high) == 0)
|
||||
error (_("mi_cmd_disassemble: No function contains specified address"));
|
||||
}
|
||||
Index: gdb-6.5/gdb/tui/tui-layout.c
|
||||
Index: gdb-6.7/gdb/tui/tui-layout.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/tui/tui-layout.c 2006-07-11 01:30:43.000000000 -0300
|
||||
+++ gdb-6.5/gdb/tui/tui-layout.c 2006-07-11 02:16:07.000000000 -0300
|
||||
@@ -1,6 +1,6 @@
|
||||
/* TUI layout window management.
|
||||
|
||||
- Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software
|
||||
+ Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software
|
||||
Foundation, Inc.
|
||||
|
||||
Contributed by Hewlett-Packard Company.
|
||||
@@ -511,7 +511,8 @@ extract_display_start_addr (void)
|
||||
--- gdb-6.7.orig/gdb/tui/tui-layout.c 2007-08-23 20:08:50.000000000 +0200
|
||||
+++ gdb-6.7/gdb/tui/tui-layout.c 2007-10-14 23:26:23.000000000 +0200
|
||||
@@ -516,7 +516,8 @@ extract_display_start_addr (void)
|
||||
{
|
||||
enum tui_layout_type cur_layout = tui_current_layout ();
|
||||
CORE_ADDR addr;
|
||||
@ -96,7 +85,7 @@ Index: gdb-6.5/gdb/tui/tui-layout.c
|
||||
struct symtab_and_line cursal = get_current_source_symtab_and_line ();
|
||||
|
||||
switch (cur_layout)
|
||||
@@ -520,8 +521,11 @@ extract_display_start_addr (void)
|
||||
@@ -525,8 +526,11 @@ extract_display_start_addr (void)
|
||||
case SRC_DATA_COMMAND:
|
||||
find_line_pc (cursal.symtab,
|
||||
TUI_SRC_WIN->detail.source_info.start_line_or_addr.u.line_no,
|
||||
@ -110,19 +99,11 @@ Index: gdb-6.5/gdb/tui/tui-layout.c
|
||||
break;
|
||||
case DISASSEM_COMMAND:
|
||||
case SRC_DISASSEM_COMMAND:
|
||||
Index: gdb-6.5/gdb/tui/tui-win.c
|
||||
Index: gdb-6.7/gdb/tui/tui-win.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/tui/tui-win.c 2006-07-11 01:30:43.000000000 -0300
|
||||
+++ gdb-6.5/gdb/tui/tui-win.c 2006-07-11 02:16:12.000000000 -0300
|
||||
@@ -1,6 +1,6 @@
|
||||
/* TUI window generic functions.
|
||||
|
||||
- Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2006
|
||||
+ Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
Contributed by Hewlett-Packard Company.
|
||||
@@ -1342,8 +1342,16 @@ make_visible_with_new_height (struct tui
|
||||
--- gdb-6.7.orig/gdb/tui/tui-win.c 2007-08-23 20:08:50.000000000 +0200
|
||||
+++ gdb-6.7/gdb/tui/tui-win.c 2007-10-14 23:26:23.000000000 +0200
|
||||
@@ -1359,8 +1359,16 @@ make_visible_with_new_height (struct tui
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -140,18 +121,10 @@ Index: gdb-6.5/gdb/tui/tui-win.c
|
||||
}
|
||||
tui_update_source_window (win_info, s, line, TRUE);
|
||||
}
|
||||
Index: gdb-6.5/gdb/tui/tui-winsource.c
|
||||
Index: gdb-6.7/gdb/tui/tui-winsource.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/tui/tui-winsource.c 2006-07-11 01:30:43.000000000 -0300
|
||||
+++ gdb-6.5/gdb/tui/tui-winsource.c 2006-07-11 01:39:20.000000000 -0300
|
||||
@@ -1,6 +1,6 @@
|
||||
/* TUI display source/assembly window.
|
||||
|
||||
- Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2006
|
||||
+ Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
Contributed by Hewlett-Packard Company.
|
||||
--- gdb-6.7.orig/gdb/tui/tui-winsource.c 2007-08-23 20:08:50.000000000 +0200
|
||||
+++ gdb-6.7/gdb/tui/tui-winsource.c 2007-10-14 23:26:23.000000000 +0200
|
||||
@@ -173,14 +173,21 @@ tui_update_source_windows_with_addr (COR
|
||||
void
|
||||
tui_update_source_windows_with_line (struct symtab *s, int line)
|
||||
@ -190,19 +163,10 @@ Index: gdb-6.5/gdb/tui/tui-winsource.c
|
||||
tui_show_disassem (pc);
|
||||
}
|
||||
break;
|
||||
Index: gdb-6.5/gdb/symtab.c
|
||||
Index: gdb-6.7/gdb/symtab.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/symtab.c 2006-07-11 01:30:43.000000000 -0300
|
||||
+++ gdb-6.5/gdb/symtab.c 2006-07-11 02:16:05.000000000 -0300
|
||||
@@ -1,7 +1,7 @@
|
||||
/* Symbol table lookup for the GNU debugger, GDB.
|
||||
|
||||
Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
|
||||
- 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
|
||||
+ 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GDB.
|
||||
--- gdb-6.7.orig/gdb/symtab.c 2007-10-12 22:35:58.000000000 +0200
|
||||
+++ gdb-6.7/gdb/symtab.c 2007-10-14 23:26:23.000000000 +0200
|
||||
@@ -73,7 +73,9 @@ static void sources_info (char *, int);
|
||||
|
||||
static void output_source_filename (const char *, int *);
|
||||
@ -214,7 +178,7 @@ Index: gdb-6.5/gdb/symtab.c
|
||||
|
||||
/* This one is used by linespec.c */
|
||||
|
||||
@@ -2233,6 +2235,9 @@ find_pc_line (CORE_ADDR pc, int notcurre
|
||||
@@ -2252,6 +2254,9 @@ find_pc_line (CORE_ADDR pc, int notcurre
|
||||
/* Find line number LINE in any symtab whose name is the same as
|
||||
SYMTAB.
|
||||
|
||||
@ -224,7 +188,7 @@ Index: gdb-6.5/gdb/symtab.c
|
||||
If found, return the symtab that contains the linetable in which it was
|
||||
found, set *INDEX to the index in the linetable of the best entry
|
||||
found, and set *EXACT_MATCH nonzero if the value returned is an
|
||||
@@ -2249,13 +2254,19 @@ find_line_symtab (struct symtab *symtab,
|
||||
@@ -2268,13 +2273,19 @@ find_line_symtab (struct symtab *symtab,
|
||||
so far seen. */
|
||||
|
||||
int best_index;
|
||||
@ -245,7 +209,7 @@ Index: gdb-6.5/gdb/symtab.c
|
||||
if (best_index < 0 || !exact)
|
||||
{
|
||||
/* Didn't find an exact match. So we better keep looking for
|
||||
@@ -2286,7 +2297,7 @@ find_line_symtab (struct symtab *symtab,
|
||||
@@ -2305,7 +2316,7 @@ find_line_symtab (struct symtab *symtab,
|
||||
if (strcmp (symtab->filename, s->filename) != 0)
|
||||
continue;
|
||||
l = LINETABLE (s);
|
||||
@ -254,7 +218,7 @@ Index: gdb-6.5/gdb/symtab.c
|
||||
if (ind >= 0)
|
||||
{
|
||||
if (exact)
|
||||
@@ -2322,13 +2333,23 @@ done:
|
||||
@@ -2341,13 +2352,23 @@ done:
|
||||
Returns zero for invalid line number (and sets the PC to 0).
|
||||
The source file is specified with a struct symtab. */
|
||||
|
||||
@ -281,7 +245,7 @@ Index: gdb-6.5/gdb/symtab.c
|
||||
if (symtab == 0)
|
||||
return 0;
|
||||
|
||||
@@ -2336,7 +2357,73 @@ find_line_pc (struct symtab *symtab, int
|
||||
@@ -2355,7 +2376,73 @@ find_line_pc (struct symtab *symtab, int
|
||||
if (symtab != NULL)
|
||||
{
|
||||
l = LINETABLE (symtab);
|
||||
@ -356,7 +320,7 @@ Index: gdb-6.5/gdb/symtab.c
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
@@ -2354,12 +2418,22 @@ find_line_pc_range (struct symtab_and_li
|
||||
@@ -2373,12 +2460,22 @@ find_line_pc_range (struct symtab_and_li
|
||||
CORE_ADDR *endptr)
|
||||
{
|
||||
CORE_ADDR startaddr;
|
||||
@ -380,7 +344,7 @@ Index: gdb-6.5/gdb/symtab.c
|
||||
/* This whole function is based on address. For example, if line 10 has
|
||||
two parts, one from 0x100 to 0x200 and one from 0x300 to 0x400, then
|
||||
"info line *0x123" should say the line goes from 0x100 to 0x200
|
||||
@@ -2389,7 +2463,7 @@ find_line_pc_range (struct symtab_and_li
|
||||
@@ -2408,7 +2505,7 @@ find_line_pc_range (struct symtab_and_li
|
||||
Set *EXACT_MATCH nonzero if the value returned is an exact match. */
|
||||
|
||||
static int
|
||||
@ -389,7 +353,7 @@ Index: gdb-6.5/gdb/symtab.c
|
||||
int *exact_match)
|
||||
{
|
||||
int i;
|
||||
@@ -2408,7 +2482,7 @@ find_line_common (struct linetable *l, i
|
||||
@@ -2427,7 +2524,7 @@ find_line_common (struct linetable *l, i
|
||||
return -1;
|
||||
|
||||
len = l->nitems;
|
||||
@ -398,7 +362,7 @@ Index: gdb-6.5/gdb/symtab.c
|
||||
{
|
||||
struct linetable_entry *item = &(l->item[i]);
|
||||
|
||||
@@ -2432,6 +2506,52 @@ find_line_common (struct linetable *l, i
|
||||
@@ -2451,6 +2548,52 @@ find_line_common (struct linetable *l, i
|
||||
return best_index;
|
||||
}
|
||||
|
||||
@ -451,20 +415,11 @@ Index: gdb-6.5/gdb/symtab.c
|
||||
int
|
||||
find_pc_line_pc_range (CORE_ADDR pc, CORE_ADDR *startptr, CORE_ADDR *endptr)
|
||||
{
|
||||
Index: gdb-6.5/gdb/symtab.h
|
||||
Index: gdb-6.7/gdb/symtab.h
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/symtab.h 2006-07-11 01:30:43.000000000 -0300
|
||||
+++ gdb-6.5/gdb/symtab.h 2006-07-11 01:39:20.000000000 -0300
|
||||
@@ -1,7 +1,7 @@
|
||||
/* Symbol table definitions for GDB.
|
||||
|
||||
Copyright (C) 1986, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
|
||||
- 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software
|
||||
+ 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software
|
||||
Foundation, Inc.
|
||||
|
||||
This file is part of GDB.
|
||||
@@ -1256,13 +1256,16 @@ extern struct symtab_and_line find_pc_se
|
||||
--- gdb-6.7.orig/gdb/symtab.h 2007-08-23 20:08:45.000000000 +0200
|
||||
+++ gdb-6.7/gdb/symtab.h 2007-10-14 23:26:23.000000000 +0200
|
||||
@@ -1271,13 +1271,16 @@ extern struct symtab_and_line find_pc_se
|
||||
|
||||
/* Given a symtab and line number, return the pc there. */
|
||||
|
||||
@ -482,11 +437,11 @@ Index: gdb-6.5/gdb/symtab.h
|
||||
/* Given a string, return the line specified by it. For commands like "list"
|
||||
and "breakpoint". */
|
||||
|
||||
Index: gdb-6.5/gdb/breakpoint.c
|
||||
Index: gdb-6.7/gdb/breakpoint.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/breakpoint.c 2006-07-11 01:30:53.000000000 -0300
|
||||
+++ gdb-6.5/gdb/breakpoint.c 2006-07-11 01:39:20.000000000 -0300
|
||||
@@ -5268,12 +5268,70 @@ static void
|
||||
--- gdb-6.7.orig/gdb/breakpoint.c 2007-10-13 05:29:58.000000000 +0200
|
||||
+++ gdb-6.7/gdb/breakpoint.c 2007-10-14 23:26:23.000000000 +0200
|
||||
@@ -5325,12 +5325,70 @@ parse_breakpoint_sals (char **address,
|
||||
|
||||
static void
|
||||
breakpoint_sals_to_pc (struct symtabs_and_lines *sals,
|
||||
@ -562,7 +517,7 @@ Index: gdb-6.5/gdb/breakpoint.c
|
||||
|
||||
/* It's possible for the PC to be nonzero, but still an illegal
|
||||
value on some targets.
|
||||
@@ -5406,6 +5436,10 @@ break_command_1 (char *arg, int flag, in
|
||||
@@ -5465,6 +5523,10 @@ break_command_1 (char *arg, int flag, in
|
||||
|
||||
if (!pending)
|
||||
{
|
||||
@ -573,7 +528,7 @@ Index: gdb-6.5/gdb/breakpoint.c
|
||||
/* Make sure that all storage allocated to SALS gets freed. */
|
||||
make_cleanup (xfree, sals.sals);
|
||||
|
||||
@@ -5436,11 +5470,6 @@ break_command_1 (char *arg, int flag, in
|
||||
@@ -5495,11 +5557,6 @@ break_command_1 (char *arg, int flag, in
|
||||
make_cleanup (xfree, addr_string[i]);
|
||||
}
|
||||
|
||||
@ -585,7 +540,7 @@ Index: gdb-6.5/gdb/breakpoint.c
|
||||
/* Verify that condition can be parsed, before setting any
|
||||
breakpoints. Allocate a separate condition expression for each
|
||||
breakpoint. */
|
||||
@@ -5665,7 +5688,7 @@ do_captured_breakpoint (struct ui_out *u
|
||||
@@ -5675,7 +5732,7 @@ do_captured_breakpoint (struct ui_out *u
|
||||
error (_("Garbage %s following breakpoint address"), address_end);
|
||||
|
||||
/* Resolve all line numbers to PC's. */
|
||||
@ -594,7 +549,7 @@ Index: gdb-6.5/gdb/breakpoint.c
|
||||
|
||||
/* Verify that conditions can be parsed, before setting any
|
||||
breakpoints. */
|
||||
@@ -5670,14 +5699,16 @@ gdb_breakpoint (char *address, char *con
|
||||
@@ -5732,14 +5789,16 @@ gdb_breakpoint (char *address, char *con
|
||||
void
|
||||
resolve_sal_pc (struct symtab_and_line *sal)
|
||||
{
|
||||
@ -614,7 +569,7 @@ Index: gdb-6.5/gdb/breakpoint.c
|
||||
}
|
||||
|
||||
if (sal->section == 0 && sal->symtab != NULL)
|
||||
@@ -5714,6 +5745,54 @@ resolve_sal_pc (struct symtab_and_line *
|
||||
@@ -5776,6 +5835,54 @@ resolve_sal_pc (struct symtab_and_line *
|
||||
}
|
||||
}
|
||||
|
||||
@ -669,7 +624,7 @@ Index: gdb-6.5/gdb/breakpoint.c
|
||||
void
|
||||
break_command (char *arg, int from_tty)
|
||||
{
|
||||
@@ -7304,6 +7305,8 @@ breakpoint_re_set_one (void *bint)
|
||||
@@ -7320,6 +7427,8 @@ breakpoint_re_set_one (void *bint)
|
||||
int *not_found_ptr = NULL;
|
||||
struct symtabs_and_lines sals;
|
||||
char *s;
|
||||
@ -678,7 +633,7 @@ Index: gdb-6.5/gdb/breakpoint.c
|
||||
enum enable_state save_enable;
|
||||
|
||||
switch (b->type)
|
||||
@@ -7364,11 +7367,44 @@ breakpoint_re_set_one (void *bint)
|
||||
@@ -7380,11 +7489,44 @@ breakpoint_re_set_one (void *bint)
|
||||
set_language (b->language);
|
||||
input_radix = b->input_radix;
|
||||
s = b->addr_string;
|
||||
|
@ -4,11 +4,15 @@
|
||||
destructors as this will be handled in find_methods.
|
||||
(find_methods): Fix ctor check to also check for dtor.
|
||||
|
||||
Index: gdb-6.5/gdb/linespec.c
|
||||
2007-10-14 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
Port to GDB-6.7.
|
||||
|
||||
Index: gdb-6.7/gdb/linespec.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/linespec.c 2006-07-07 01:04:56.000000000 -0300
|
||||
+++ gdb-6.5/gdb/linespec.c 2006-07-07 02:05:35.000000000 -0300
|
||||
@@ -377,12 +377,14 @@ add_matching_methods (int method_counter
|
||||
--- gdb-6.7.orig/gdb/linespec.c 2007-10-13 05:26:33.000000000 +0200
|
||||
+++ gdb-6.7/gdb/linespec.c 2007-10-14 23:31:03.000000000 +0200
|
||||
@@ -398,12 +398,14 @@ add_matching_methods (int method_counter
|
||||
|
||||
/* Check for special case of looking for member that
|
||||
doesn't have a mangled name provided. This will happen
|
||||
@ -24,9 +28,9 @@ Index: gdb-6.5/gdb/linespec.c
|
||||
+ || (strlen (phys_name) == strlen (class_name) + 1
|
||||
+ && phys_name[0] == '~'))
|
||||
return add_minsym_members (class_name, phys_name, msym_arr);
|
||||
|
||||
|
||||
/* Destructor is handled by caller, don't add it to
|
||||
@@ -1709,6 +1711,11 @@ collect_methods (char *copy, struct type
|
||||
@@ -1731,6 +1733,11 @@ collect_methods (char *copy, struct type
|
||||
{
|
||||
int i1 = 0; /* Counter for the symbol array. */
|
||||
|
||||
@ -38,11 +42,11 @@ Index: gdb-6.5/gdb/linespec.c
|
||||
if (destructor_name_p (copy, t))
|
||||
{
|
||||
/* Destructors are a special case. */
|
||||
@@ -1727,6 +1734,7 @@ collect_methods (char *copy, struct type
|
||||
@@ -1749,6 +1756,7 @@ collect_methods (char *copy, struct type
|
||||
}
|
||||
}
|
||||
else
|
||||
+#endif
|
||||
i1 = find_methods (t, copy, sym_arr, msym_arr);
|
||||
i1 = find_methods (t, copy, SYMBOL_LANGUAGE (sym_class), sym_arr, msym_arr);
|
||||
|
||||
return i1;
|
||||
|
@ -2,7 +2,7 @@ Index: gdb-6.6/gdb/gcore.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/gcore.c
|
||||
+++ gdb-6.6/gdb/gcore.c
|
||||
@@ -475,8 +475,13 @@ gcore_copy_callback (bfd *obfd, asection
|
||||
@@ -475,8 +475,14 @@ gcore_copy_callback (bfd *obfd, asection
|
||||
if (size > total_size)
|
||||
size = total_size;
|
||||
|
||||
@ -12,7 +12,8 @@ Index: gdb-6.6/gdb/gcore.c
|
||||
if (target_read_memory (bfd_section_vma (obfd, osec) + offset,
|
||||
- memhunk, size) != 0)
|
||||
+ memhunk, size) != 0
|
||||
+ && (strcmp (TARGET_ARCHITECTURE->arch_name, "ia64")
|
||||
+ && (strcmp (gdbarch_bfd_arch_info (current_gdbarch)->arch_name,
|
||||
+ "ia64")
|
||||
+ || bfd_section_vma (obfd, osec) != 0))
|
||||
{
|
||||
warning (_("Memory read failed for corefile section, %s bytes at 0x%s."),
|
||||
|
@ -17,9 +17,15 @@
|
||||
(libunwind_frame_prev_register): Support request for
|
||||
getting the cursor address.
|
||||
|
||||
--- gdb-6.3/gdb/ia64-tdep.c.fix 2005-07-11 18:13:42.000000000 -0400
|
||||
+++ gdb-6.3/gdb/ia64-tdep.c 2005-07-11 18:15:52.000000000 -0400
|
||||
@@ -141,7 +141,7 @@ static int lr_regnum = IA64_VRAP_REGNUM;
|
||||
2007-10-14 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
Port to GDB-6.7.
|
||||
|
||||
Index: gdb-6.7/gdb/ia64-tdep.c
|
||||
===================================================================
|
||||
--- gdb-6.7.orig/gdb/ia64-tdep.c 2007-10-14 23:57:38.000000000 +0200
|
||||
+++ gdb-6.7/gdb/ia64-tdep.c 2007-10-15 00:05:20.000000000 +0200
|
||||
@@ -131,7 +131,7 @@ static int lr_regnum = IA64_VRAP_REGNUM;
|
||||
they may not be accessible via the ptrace register get/set interfaces. */
|
||||
enum pseudo_regs { FIRST_PSEUDO_REGNUM = NUM_IA64_RAW_REGS, VBOF_REGNUM = IA64_NAT127_REGNUM + 1, V32_REGNUM,
|
||||
V127_REGNUM = V32_REGNUM + 95,
|
||||
@ -28,7 +34,7 @@
|
||||
|
||||
/* Array of register names; There should be ia64_num_regs strings in
|
||||
the initializer. */
|
||||
@@ -253,6 +253,7 @@ static char *ia64_register_names[] =
|
||||
@@ -243,6 +243,7 @@ static char *ia64_register_names[] =
|
||||
"p40", "p41", "p42", "p43", "p44", "p45", "p46", "p47",
|
||||
"p48", "p49", "p50", "p51", "p52", "p53", "p54", "p55",
|
||||
"p56", "p57", "p58", "p59", "p60", "p61", "p62", "p63",
|
||||
@ -36,7 +42,7 @@
|
||||
};
|
||||
|
||||
struct ia64_frame_cache
|
||||
@@ -1855,6 +1856,12 @@ ia64_frame_prev_register (struct frame_i
|
||||
@@ -1856,6 +1857,12 @@ ia64_frame_prev_register (struct frame_i
|
||||
read_memory (addr, valuep, register_size (current_gdbarch, regnum));
|
||||
}
|
||||
}
|
||||
@ -49,7 +55,7 @@
|
||||
else
|
||||
{
|
||||
CORE_ADDR addr = 0;
|
||||
@@ -2177,6 +2184,12 @@ ia64_sigtramp_frame_prev_register (struc
|
||||
@@ -2178,6 +2185,12 @@ ia64_sigtramp_frame_prev_register (struc
|
||||
*addrp = pr_addr;
|
||||
}
|
||||
}
|
||||
@ -62,7 +68,7 @@
|
||||
else
|
||||
{
|
||||
/* All other registers not listed above. */
|
||||
@@ -2296,6 +2309,8 @@ ia64_gdb2uw_regnum (int regnum)
|
||||
@@ -2299,6 +2312,8 @@ ia64_gdb2uw_regnum (int regnum)
|
||||
return UNW_IA64_AR + (regnum - IA64_AR0_REGNUM);
|
||||
else if ((unsigned) (regnum - IA64_NAT0_REGNUM) < 128)
|
||||
return UNW_IA64_NAT + (regnum - IA64_NAT0_REGNUM);
|
||||
@ -71,7 +77,7 @@
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
@@ -2331,6 +2346,21 @@ ia64_uw2gdb_regnum (int uw_regnum)
|
||||
@@ -2334,6 +2349,21 @@ ia64_uw2gdb_regnum (int uw_regnum)
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -93,7 +99,7 @@
|
||||
/* Gdb libunwind-frame callback function to reveal if register is a float
|
||||
register or not. */
|
||||
static int
|
||||
@@ -3111,6 +3141,7 @@ static struct libunwind_descr ia64_libun
|
||||
@@ -3046,6 +3076,7 @@ static struct libunwind_descr ia64_libun
|
||||
ia64_gdb2uw_regnum,
|
||||
ia64_uw2gdb_regnum,
|
||||
ia64_is_fpreg,
|
||||
@ -101,9 +107,11 @@
|
||||
&ia64_unw_accessors,
|
||||
&ia64_unw_rse_accessors,
|
||||
};
|
||||
--- gdb-6.3/gdb/libunwind-frame.c.fix 2005-07-11 18:17:05.000000000 -0400
|
||||
+++ gdb-6.3/gdb/libunwind-frame.c 2005-07-11 18:20:31.000000000 -0400
|
||||
@@ -122,6 +122,7 @@ libunwind_frame_set_descr (struct gdbarc
|
||||
Index: gdb-6.7/gdb/libunwind-frame.c
|
||||
===================================================================
|
||||
--- gdb-6.7.orig/gdb/libunwind-frame.c 2007-08-23 20:08:35.000000000 +0200
|
||||
+++ gdb-6.7/gdb/libunwind-frame.c 2007-10-15 00:07:56.000000000 +0200
|
||||
@@ -125,6 +125,7 @@ libunwind_frame_set_descr (struct gdbarc
|
||||
arch_descr->is_fpreg = descr->is_fpreg;
|
||||
arch_descr->accessors = descr->accessors;
|
||||
arch_descr->special_accessors = descr->special_accessors;
|
||||
@ -111,7 +119,7 @@
|
||||
}
|
||||
|
||||
static struct libunwind_frame_cache *
|
||||
@@ -129,6 +130,7 @@ libunwind_frame_cache (struct frame_info
|
||||
@@ -132,6 +133,7 @@ libunwind_frame_cache (struct frame_info
|
||||
{
|
||||
unw_accessors_t *acc;
|
||||
unw_addr_space_t as;
|
||||
@ -119,7 +127,7 @@
|
||||
unw_word_t fp;
|
||||
unw_regnum_t uw_sp_regnum;
|
||||
struct libunwind_frame_cache *cache;
|
||||
@@ -147,22 +149,33 @@ libunwind_frame_cache (struct frame_info
|
||||
@@ -153,23 +155,34 @@ libunwind_frame_cache (struct frame_info
|
||||
&& get_frame_type (next_frame) != SIGTRAMP_FRAME)
|
||||
return NULL;
|
||||
|
||||
@ -151,7 +159,8 @@
|
||||
+ {
|
||||
+ acc = descr->accessors;
|
||||
+ as = unw_create_addr_space_p (acc,
|
||||
TARGET_BYTE_ORDER == BFD_ENDIAN_BIG
|
||||
gdbarch_byte_order (current_gdbarch)
|
||||
== BFD_ENDIAN_BIG
|
||||
? __BIG_ENDIAN
|
||||
: __LITTLE_ENDIAN);
|
||||
|
||||
@ -162,9 +171,9 @@
|
||||
+ cache->cursor = *cursor_addr;
|
||||
+
|
||||
if (unw_step_p (&cache->cursor) < 0)
|
||||
return NULL;
|
||||
|
||||
@@ -285,6 +298,16 @@ libunwind_frame_prev_register (struct fr
|
||||
{
|
||||
unw_destroy_addr_space_p (as);
|
||||
@@ -316,6 +329,16 @@ libunwind_frame_prev_register (struct fr
|
||||
if (uw_regnum < 0)
|
||||
return;
|
||||
|
||||
@ -181,9 +190,11 @@
|
||||
/* To get the previous register, we use the libunwind register APIs with
|
||||
the cursor we have already pushed back to the previous frame. */
|
||||
|
||||
--- gdb-6.3/gdb/libunwind-frame.h.fix 2005-07-11 18:17:24.000000000 -0400
|
||||
+++ gdb-6.3/gdb/libunwind-frame.h 2005-07-11 18:18:46.000000000 -0400
|
||||
@@ -37,6 +37,7 @@ struct libunwind_descr
|
||||
Index: gdb-6.7/gdb/libunwind-frame.h
|
||||
===================================================================
|
||||
--- gdb-6.7.orig/gdb/libunwind-frame.h 2007-08-23 20:08:35.000000000 +0200
|
||||
+++ gdb-6.7/gdb/libunwind-frame.h 2007-10-15 00:05:20.000000000 +0200
|
||||
@@ -36,6 +36,7 @@ struct libunwind_descr
|
||||
int (*gdb2uw) (int);
|
||||
int (*uw2gdb) (int);
|
||||
int (*is_fpreg) (int);
|
||||
|
@ -11,20 +11,24 @@
|
||||
* ia64-tdep.c (ia64_libunwind_sigtramp_frame_this_id): Calculate
|
||||
the base address using the current stack pointer plus a fixed
|
||||
offset.
|
||||
|
||||
Index: gdb-6.5/gdb/libunwind-frame.c
|
||||
|
||||
2007-10-14 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
Port to GDB-6.7.
|
||||
|
||||
Index: gdb-6.7/gdb/libunwind-frame.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/libunwind-frame.c 2006-07-07 03:04:32.000000000 -0300
|
||||
+++ gdb-6.5/gdb/libunwind-frame.c 2006-07-07 03:07:33.000000000 -0300
|
||||
@@ -62,6 +62,7 @@ static unw_word_t (*unw_find_dyn_list_p)
|
||||
--- gdb-6.7.orig/gdb/libunwind-frame.c 2007-10-15 00:08:30.000000000 +0200
|
||||
+++ gdb-6.7/gdb/libunwind-frame.c 2007-10-15 00:13:29.000000000 +0200
|
||||
@@ -61,6 +61,7 @@ static unw_word_t (*unw_find_dyn_list_p)
|
||||
struct libunwind_frame_cache
|
||||
{
|
||||
CORE_ADDR base;
|
||||
+ CORE_ADDR sp;
|
||||
CORE_ADDR func_addr;
|
||||
unw_cursor_t cursor;
|
||||
};
|
||||
@@ -131,7 +132,7 @@ libunwind_frame_cache (struct frame_info
|
||||
unw_addr_space_t as;
|
||||
@@ -134,7 +135,7 @@ libunwind_frame_cache (struct frame_info
|
||||
unw_accessors_t *acc;
|
||||
unw_addr_space_t as;
|
||||
unw_cursor_t *cursor_addr;
|
||||
@ -33,7 +37,7 @@ Index: gdb-6.5/gdb/libunwind-frame.c
|
||||
unw_regnum_t uw_sp_regnum;
|
||||
struct libunwind_frame_cache *cache;
|
||||
struct libunwind_descr *descr;
|
||||
@@ -176,15 +177,28 @@ libunwind_frame_cache (struct frame_info
|
||||
@@ -183,14 +184,29 @@ libunwind_frame_cache (struct frame_info
|
||||
else /* make copy */
|
||||
cache->cursor = *cursor_addr;
|
||||
|
||||
@ -46,25 +50,34 @@ Index: gdb-6.5/gdb/libunwind-frame.c
|
||||
+ sigaltstack as we want. To handle this, we record the stack
|
||||
+ address so the caller may calculate a more correct base address
|
||||
+ to use. */
|
||||
+ uw_sp_regnum = descr->gdb2uw (SP_REGNUM);
|
||||
+ uw_sp_regnum = descr->gdb2uw (gdbarch_sp_regnum (current_gdbarch));
|
||||
+ ret = unw_get_reg_p (&cache->cursor, uw_sp_regnum, &sp);
|
||||
+ if (ret < 0)
|
||||
+ error ("Can't get libunwind sp register.");
|
||||
+ {
|
||||
+ unw_destroy_addr_space_p (as);
|
||||
+ error (_("Can't get libunwind sp register."));
|
||||
+ }
|
||||
+
|
||||
if (unw_step_p (&cache->cursor) < 0)
|
||||
return NULL;
|
||||
{
|
||||
unw_destroy_addr_space_p (as);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
- /* To get base address, get sp from previous frame. */
|
||||
- uw_sp_regnum = descr->gdb2uw (SP_REGNUM);
|
||||
- uw_sp_regnum = descr->gdb2uw (gdbarch_sp_regnum (current_gdbarch));
|
||||
ret = unw_get_reg_p (&cache->cursor, uw_sp_regnum, &fp);
|
||||
if (ret < 0)
|
||||
error (_("Can't get libunwind sp register."));
|
||||
{
|
||||
@@ -198,6 +214,7 @@ libunwind_frame_cache (struct frame_info
|
||||
error (_("Can't get libunwind sp register."));
|
||||
}
|
||||
|
||||
+ cache->sp = (CORE_ADDR)sp;
|
||||
cache->base = (CORE_ADDR)fp;
|
||||
cache->as = as;
|
||||
|
||||
*this_cache = cache;
|
||||
@@ -371,6 +385,31 @@ libunwind_search_unwind_table (void *as,
|
||||
@@ -402,6 +419,31 @@ libunwind_search_unwind_table (void *as,
|
||||
di, pi, need_unwind_info, args);
|
||||
}
|
||||
|
||||
@ -96,20 +109,20 @@ Index: gdb-6.5/gdb/libunwind-frame.c
|
||||
/* Verify if we are in a sigtramp frame and we can use libunwind to unwind. */
|
||||
const struct frame_unwind *
|
||||
libunwind_sigtramp_frame_sniffer (struct frame_info *next_frame)
|
||||
@@ -403,7 +442,7 @@ libunwind_sigtramp_frame_sniffer (struct
|
||||
/* Check to see if we are in a signal frame. */
|
||||
@@ -439,7 +481,7 @@ libunwind_sigtramp_frame_sniffer (struct
|
||||
ret = unw_is_signal_frame_p (&cursor);
|
||||
unw_destroy_addr_space_p (as);
|
||||
if (ret > 0)
|
||||
- return &libunwind_frame_unwind;
|
||||
+ return &libunwind_sigtramp_frame_unwind;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
Index: gdb-6.5/gdb/libunwind-frame.h
|
||||
Index: gdb-6.7/gdb/libunwind-frame.h
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/libunwind-frame.h 2006-07-07 02:51:32.000000000 -0300
|
||||
+++ gdb-6.5/gdb/libunwind-frame.h 2006-07-07 03:05:49.000000000 -0300
|
||||
@@ -49,6 +49,9 @@ void libunwind_frame_set_descr (struct g
|
||||
--- gdb-6.7.orig/gdb/libunwind-frame.h 2007-10-15 00:05:20.000000000 +0200
|
||||
+++ gdb-6.7/gdb/libunwind-frame.h 2007-10-15 00:08:36.000000000 +0200
|
||||
@@ -48,6 +48,9 @@ void libunwind_frame_set_descr (struct g
|
||||
|
||||
void libunwind_frame_this_id (struct frame_info *next_frame, void **this_cache,
|
||||
struct frame_id *this_id);
|
||||
@ -119,11 +132,11 @@ Index: gdb-6.5/gdb/libunwind-frame.h
|
||||
void libunwind_frame_prev_register (struct frame_info *next_frame, void **this_cache,
|
||||
int regnum, int *optimizedp,
|
||||
enum lval_type *lvalp, CORE_ADDR *addrp,
|
||||
Index: gdb-6.5/gdb/ia64-tdep.c
|
||||
Index: gdb-6.7/gdb/ia64-tdep.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/ia64-tdep.c 2006-07-07 02:51:32.000000000 -0300
|
||||
+++ gdb-6.5/gdb/ia64-tdep.c 2006-07-07 03:05:49.000000000 -0300
|
||||
@@ -3031,7 +3031,7 @@ ia64_libunwind_sigtramp_frame_this_id (s
|
||||
--- gdb-6.7.orig/gdb/ia64-tdep.c 2007-10-15 00:05:20.000000000 +0200
|
||||
+++ gdb-6.7/gdb/ia64-tdep.c 2007-10-15 00:08:36.000000000 +0200
|
||||
@@ -2968,7 +2968,7 @@ ia64_libunwind_sigtramp_frame_this_id (s
|
||||
struct frame_id id;
|
||||
CORE_ADDR prev_ip;
|
||||
|
||||
@ -132,7 +145,7 @@ Index: gdb-6.5/gdb/ia64-tdep.c
|
||||
if (frame_id_eq (id, null_frame_id))
|
||||
{
|
||||
(*this_id) = null_frame_id;
|
||||
@@ -3043,8 +3043,14 @@ ia64_libunwind_sigtramp_frame_this_id (s
|
||||
@@ -2980,8 +2980,14 @@ ia64_libunwind_sigtramp_frame_this_id (s
|
||||
frame_unwind_register (next_frame, IA64_BSP_REGNUM, buf);
|
||||
bsp = extract_unsigned_integer (buf, 8);
|
||||
|
||||
|
@ -1,19 +0,0 @@
|
||||
2005-03-30 Jeff Johnston <jjohnstn@redhat.com>
|
||||
|
||||
* bfd/elfcode.h: Change code to allow for idiosyncrasies of
|
||||
ia64 vsyscall page.
|
||||
|
||||
Index: gdb-6.5/bfd/elfcode.h
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/bfd/elfcode.h 2006-05-11 05:57:08.000000000 -0300
|
||||
+++ gdb-6.5/bfd/elfcode.h 2006-07-07 02:36:03.000000000 -0300
|
||||
@@ -1625,7 +1625,8 @@ NAME(_bfd_elf,bfd_from_remote_memory)
|
||||
if (segment_end > (bfd_vma) contents_size)
|
||||
contents_size = segment_end;
|
||||
|
||||
- if ((i_phdrs[i].p_offset & -i_phdrs[i].p_align) == 0)
|
||||
+ if ((i_phdrs[i].p_offset & -i_phdrs[i].p_align) == 0
|
||||
+ && loadbase == ehdr_vma)
|
||||
loadbase = ehdr_vma - (i_phdrs[i].p_vaddr & -i_phdrs[i].p_align);
|
||||
|
||||
last_phdr = &i_phdrs[i];
|
@ -21,11 +21,15 @@
|
||||
* remote.h: Ditto.
|
||||
* dcache.h: Ditto.
|
||||
|
||||
Index: gdb-6.6/gdb/symfile-mem.c
|
||||
2007-10-15 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
Port to GDB-6.7.
|
||||
|
||||
Index: gdb-6.7/gdb/symfile-mem.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/symfile-mem.c 2007-01-20 16:09:05.000000000 +0100
|
||||
+++ gdb-6.6/gdb/symfile-mem.c 2007-01-20 16:09:17.000000000 +0100
|
||||
@@ -58,6 +58,14 @@
|
||||
--- gdb-6.7.orig/gdb/symfile-mem.c 2007-10-13 05:29:58.000000000 +0200
|
||||
+++ gdb-6.7/gdb/symfile-mem.c 2007-10-15 21:37:54.000000000 +0200
|
||||
@@ -56,6 +56,14 @@
|
||||
#include "elf/common.h"
|
||||
|
||||
|
||||
@ -40,7 +44,7 @@ Index: gdb-6.6/gdb/symfile-mem.c
|
||||
/* Read inferior memory at ADDR to find the header of a loaded object file
|
||||
and read its in-core symbols out of inferior memory. TEMPL is a bfd
|
||||
representing the target's format. NAME is the name to use for this
|
||||
@@ -78,7 +86,7 @@ symbol_file_add_from_memory (struct bfd
|
||||
@@ -76,7 +84,7 @@ symbol_file_add_from_memory (struct bfd
|
||||
error (_("add-symbol-file-from-memory not supported for this target"));
|
||||
|
||||
nbfd = bfd_elf_bfd_from_remote_memory (templ, addr, &loadbase,
|
||||
@ -49,11 +53,11 @@ Index: gdb-6.6/gdb/symfile-mem.c
|
||||
if (nbfd == NULL)
|
||||
error (_("Failed to read a valid object file image from memory."));
|
||||
|
||||
Index: gdb-6.6/gdb/target.c
|
||||
Index: gdb-6.7/gdb/target.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/target.c 2007-01-20 16:09:12.000000000 +0100
|
||||
+++ gdb-6.6/gdb/target.c 2007-01-20 16:09:17.000000000 +0100
|
||||
@@ -56,7 +56,7 @@ static int nosymbol (char *, CORE_ADDR *
|
||||
--- gdb-6.7.orig/gdb/target.c 2007-10-14 23:42:39.000000000 +0200
|
||||
+++ gdb-6.7/gdb/target.c 2007-10-15 21:37:54.000000000 +0200
|
||||
@@ -55,7 +55,7 @@ static int nosymbol (char *, CORE_ADDR *
|
||||
|
||||
static void tcomplain (void) ATTR_NORETURN;
|
||||
|
||||
@ -62,7 +66,7 @@ Index: gdb-6.6/gdb/target.c
|
||||
|
||||
static int return_zero (void);
|
||||
|
||||
@@ -284,7 +284,7 @@ target_mourn_inferior (void)
|
||||
@@ -283,7 +283,7 @@ target_mourn_inferior (void)
|
||||
observer_notify_mourn_inferior (¤t_target);
|
||||
}
|
||||
|
||||
@ -71,8 +75,8 @@ Index: gdb-6.6/gdb/target.c
|
||||
nomemory (CORE_ADDR memaddr, char *myaddr, int len, int write,
|
||||
struct target_ops *t)
|
||||
{
|
||||
@@ -517,7 +517,7 @@ update_current_target (void)
|
||||
(void (*) (void))
|
||||
@@ -518,7 +518,7 @@ update_current_target (void)
|
||||
(void (*) (struct regcache *))
|
||||
noprocess);
|
||||
de_fault (deprecated_xfer_memory,
|
||||
- (int (*) (CORE_ADDR, gdb_byte *, int, int, struct mem_attrib *, struct target_ops *))
|
||||
@ -80,7 +84,7 @@ Index: gdb-6.6/gdb/target.c
|
||||
nomemory);
|
||||
de_fault (to_files_info,
|
||||
(void (*) (struct target_ops *))
|
||||
@@ -1178,7 +1178,7 @@ target_xfer_partial (struct target_ops *
|
||||
@@ -1195,7 +1195,7 @@ target_xfer_partial (struct target_ops *
|
||||
it makes no progress, and then return how much was transferred). */
|
||||
|
||||
int
|
||||
@ -89,7 +93,7 @@ Index: gdb-6.6/gdb/target.c
|
||||
{
|
||||
if (target_read (¤t_target, TARGET_OBJECT_MEMORY, NULL,
|
||||
myaddr, memaddr, len) == len)
|
||||
@@ -1188,7 +1188,7 @@ target_read_memory (CORE_ADDR memaddr, g
|
||||
@@ -1205,7 +1205,7 @@ target_read_memory (CORE_ADDR memaddr, g
|
||||
}
|
||||
|
||||
int
|
||||
@ -98,7 +102,7 @@ Index: gdb-6.6/gdb/target.c
|
||||
{
|
||||
if (target_write (¤t_target, TARGET_OBJECT_MEMORY, NULL,
|
||||
myaddr, memaddr, len) == len)
|
||||
@@ -2186,8 +2186,8 @@ debug_to_prepare_to_store (void)
|
||||
@@ -2228,8 +2228,8 @@ debug_to_prepare_to_store (struct regcac
|
||||
fprintf_unfiltered (gdb_stdlog, "target_prepare_to_store ()\n");
|
||||
}
|
||||
|
||||
@ -109,7 +113,7 @@ Index: gdb-6.6/gdb/target.c
|
||||
int write, struct mem_attrib *attrib,
|
||||
struct target_ops *target)
|
||||
{
|
||||
@@ -2197,9 +2197,9 @@ deprecated_debug_xfer_memory (CORE_ADDR
|
||||
@@ -2239,9 +2239,9 @@ deprecated_debug_xfer_memory (CORE_ADDR
|
||||
attrib, target);
|
||||
|
||||
fprintf_unfiltered (gdb_stdlog,
|
||||
@ -121,11 +125,11 @@ Index: gdb-6.6/gdb/target.c
|
||||
|
||||
if (retval > 0)
|
||||
{
|
||||
Index: gdb-6.6/gdb/target.h
|
||||
Index: gdb-6.7/gdb/target.h
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/target.h 2007-01-20 16:09:10.000000000 +0100
|
||||
+++ gdb-6.6/gdb/target.h 2007-01-20 16:09:17.000000000 +0100
|
||||
@@ -347,10 +347,10 @@ struct target_ops
|
||||
--- gdb-6.7.orig/gdb/target.h 2007-10-14 23:24:52.000000000 +0200
|
||||
+++ gdb-6.7/gdb/target.h 2007-10-15 21:39:20.000000000 +0200
|
||||
@@ -351,10 +351,10 @@ struct target_ops
|
||||
NOTE: cagney/2004-10-01: This has been entirely superseeded by
|
||||
to_xfer_partial and inferior inheritance. */
|
||||
|
||||
@ -140,7 +144,7 @@ Index: gdb-6.6/gdb/target.h
|
||||
|
||||
void (*to_files_info) (struct target_ops *);
|
||||
int (*to_insert_breakpoint) (struct bp_target_info *);
|
||||
@@ -605,16 +605,17 @@ extern DCACHE *target_dcache;
|
||||
@@ -615,13 +615,14 @@ extern DCACHE *target_dcache;
|
||||
|
||||
extern int target_read_string (CORE_ADDR, char **, int, int *);
|
||||
|
||||
@ -157,46 +161,13 @@ Index: gdb-6.6/gdb/target.h
|
||||
+extern LONGEST xfer_memory (CORE_ADDR, gdb_byte *, LONGEST, int,
|
||||
+ struct mem_attrib *, struct target_ops *);
|
||||
|
||||
-extern int child_xfer_memory (CORE_ADDR, gdb_byte *, int, int,
|
||||
- struct mem_attrib *, struct target_ops *);
|
||||
+extern LONGEST child_xfer_memory (CORE_ADDR, gdb_byte *, LONGEST, int,
|
||||
+ struct mem_attrib *, struct target_ops *);
|
||||
|
||||
/* Fetches the target's memory map. If one is found it is sorted
|
||||
and returned, after some consistency checking. Otherwise, NULL
|
||||
Index: gdb-6.6/gdb/infptrace.c
|
||||
Index: gdb-6.7/gdb/dcache.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/infptrace.c 2005-12-17 23:34:01.000000000 +0100
|
||||
+++ gdb-6.6/gdb/infptrace.c 2007-01-20 16:09:17.000000000 +0100
|
||||
@@ -331,17 +331,17 @@ store_inferior_registers (int regnum)
|
||||
deprecated_child_ops doesn't allow memory operations to cross below
|
||||
us in the target stack anyway. */
|
||||
|
||||
-int
|
||||
-child_xfer_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len, int write,
|
||||
+LONGEST
|
||||
+child_xfer_memory (CORE_ADDR memaddr, gdb_byte *myaddr, LONGEST len, int write,
|
||||
struct mem_attrib *attrib, struct target_ops *target)
|
||||
{
|
||||
- int i;
|
||||
+ LONGEST i;
|
||||
/* Round starting address down to longword boundary. */
|
||||
CORE_ADDR addr = memaddr & -(CORE_ADDR) sizeof (PTRACE_TYPE_RET);
|
||||
/* Round ending address up; get number of longwords that makes. */
|
||||
- int count = ((((memaddr + len) - addr) + sizeof (PTRACE_TYPE_RET) - 1)
|
||||
- / sizeof (PTRACE_TYPE_RET));
|
||||
- int alloc = count * sizeof (PTRACE_TYPE_RET);
|
||||
+ LONGEST count = ((((memaddr + len) - addr) + sizeof (PTRACE_TYPE_RET) - 1)
|
||||
+ / sizeof (PTRACE_TYPE_RET));
|
||||
+ LONGEST alloc = count * sizeof (PTRACE_TYPE_RET);
|
||||
PTRACE_TYPE_RET *buffer;
|
||||
struct cleanup *old_chain = NULL;
|
||||
|
||||
Index: gdb-6.6/gdb/dcache.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/dcache.c 2006-08-15 20:46:24.000000000 +0200
|
||||
+++ gdb-6.6/gdb/dcache.c 2007-01-20 16:09:17.000000000 +0100
|
||||
@@ -519,9 +519,9 @@ dcache_free (DCACHE *dcache)
|
||||
--- gdb-6.7.orig/gdb/dcache.c 2007-08-23 20:08:28.000000000 +0200
|
||||
+++ gdb-6.7/gdb/dcache.c 2007-10-15 21:37:54.000000000 +0200
|
||||
@@ -517,9 +517,9 @@ dcache_free (DCACHE *dcache)
|
||||
|
||||
This routine is indended to be called by remote_xfer_ functions. */
|
||||
|
||||
@ -208,11 +179,11 @@ Index: gdb-6.6/gdb/dcache.c
|
||||
{
|
||||
int i;
|
||||
int (*xfunc) (DCACHE *dcache, CORE_ADDR addr, gdb_byte *ptr);
|
||||
Index: gdb-6.6/gdb/dcache.h
|
||||
Index: gdb-6.7/gdb/dcache.h
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/dcache.h 2005-12-17 23:33:59.000000000 +0100
|
||||
+++ gdb-6.6/gdb/dcache.h 2007-01-20 16:09:17.000000000 +0100
|
||||
@@ -37,7 +37,7 @@ void dcache_free (DCACHE *);
|
||||
--- gdb-6.7.orig/gdb/dcache.h 2007-08-23 20:08:28.000000000 +0200
|
||||
+++ gdb-6.7/gdb/dcache.h 2007-10-15 21:37:54.000000000 +0200
|
||||
@@ -35,7 +35,7 @@ void dcache_free (DCACHE *);
|
||||
|
||||
/* Simple to call from <remote>_xfer_memory */
|
||||
|
||||
@ -222,11 +193,11 @@ Index: gdb-6.6/gdb/dcache.h
|
||||
+ LONGEST len, int should_write);
|
||||
|
||||
#endif /* DCACHE_H */
|
||||
Index: gdb-6.6/gdb/exec.c
|
||||
Index: gdb-6.7/gdb/exec.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/exec.c 2006-11-10 20:20:35.000000000 +0100
|
||||
+++ gdb-6.6/gdb/exec.c 2007-01-20 16:09:17.000000000 +0100
|
||||
@@ -452,8 +452,8 @@ map_vmap (bfd *abfd, bfd *arch)
|
||||
--- gdb-6.7.orig/gdb/exec.c 2007-08-23 20:08:28.000000000 +0200
|
||||
+++ gdb-6.7/gdb/exec.c 2007-10-15 21:37:54.000000000 +0200
|
||||
@@ -453,8 +453,8 @@ map_vmap (bfd *abfd, bfd *arch)
|
||||
The same routine is used to handle both core and exec files;
|
||||
we just tail-call it with more arguments to select between them. */
|
||||
|
||||
@ -237,11 +208,11 @@ Index: gdb-6.6/gdb/exec.c
|
||||
struct mem_attrib *attrib, struct target_ops *target)
|
||||
{
|
||||
int res;
|
||||
Index: gdb-6.6/gdb/linux-nat.c
|
||||
Index: gdb-6.7/gdb/linux-nat.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/linux-nat.c 2007-01-20 16:09:14.000000000 +0100
|
||||
+++ gdb-6.6/gdb/linux-nat.c 2007-01-20 16:09:17.000000000 +0100
|
||||
@@ -3266,7 +3266,7 @@ linux_xfer_partial (struct target_ops *o
|
||||
--- gdb-6.7.orig/gdb/linux-nat.c 2007-10-15 00:13:52.000000000 +0200
|
||||
+++ gdb-6.7/gdb/linux-nat.c 2007-10-15 21:37:54.000000000 +0200
|
||||
@@ -3248,7 +3248,7 @@ linux_xfer_partial (struct target_ops *o
|
||||
Revert when Bugzilla 147436 is fixed. */
|
||||
if (iterate_over_lwps (ia64_linux_check_stack_region, &range) != NULL)
|
||||
{ /* This region contains ia64 rse registers, we have to re-read. */
|
||||
@ -250,11 +221,11 @@ Index: gdb-6.6/gdb/linux-nat.c
|
||||
|
||||
/* Re-read register stack area. */
|
||||
xxfer = super_xfer_partial (ops, object, annex,
|
||||
Index: gdb-6.6/gdb/remote.c
|
||||
Index: gdb-6.7/gdb/remote.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/remote.c 2007-01-20 16:09:12.000000000 +0100
|
||||
+++ gdb-6.6/gdb/remote.c 2007-01-20 16:09:17.000000000 +0100
|
||||
@@ -27,6 +27,7 @@
|
||||
--- gdb-6.7.orig/gdb/remote.c 2007-10-14 23:42:39.000000000 +0200
|
||||
+++ gdb-6.7/gdb/remote.c 2007-10-15 21:37:54.000000000 +0200
|
||||
@@ -25,6 +25,7 @@
|
||||
#include "gdb_string.h"
|
||||
#include <ctype.h>
|
||||
#include <fcntl.h>
|
||||
@ -262,7 +233,7 @@ Index: gdb-6.6/gdb/remote.c
|
||||
#include "inferior.h"
|
||||
#include "bfd.h"
|
||||
#include "symfile.h"
|
||||
@@ -4185,19 +4186,27 @@ remote_read_bytes (CORE_ADDR memaddr, gd
|
||||
@@ -4484,19 +4485,27 @@ remote_read_bytes (CORE_ADDR memaddr, gd
|
||||
if SHOULD_WRITE is nonzero. Returns length of data written or
|
||||
read; 0 for error. TARGET is unused. */
|
||||
|
||||
@ -293,11 +264,11 @@ Index: gdb-6.6/gdb/remote.c
|
||||
}
|
||||
|
||||
/* Sends a packet with content determined by the printf format string
|
||||
Index: gdb-6.6/gdb/remote-sim.c
|
||||
Index: gdb-6.7/gdb/remote-sim.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/remote-sim.c 2006-11-10 20:20:36.000000000 +0100
|
||||
+++ gdb-6.6/gdb/remote-sim.c 2007-01-20 16:10:10.000000000 +0100
|
||||
@@ -745,11 +745,14 @@ gdbsim_prepare_to_store (void)
|
||||
--- gdb-6.7.orig/gdb/remote-sim.c 2007-08-23 20:08:36.000000000 +0200
|
||||
+++ gdb-6.7/gdb/remote-sim.c 2007-10-15 21:41:33.000000000 +0200
|
||||
@@ -747,11 +747,14 @@ gdbsim_prepare_to_store (struct regcache
|
||||
|
||||
Returns the number of bytes transferred. */
|
||||
|
||||
@ -314,13 +285,13 @@ Index: gdb-6.6/gdb/remote-sim.c
|
||||
/* If no program is running yet, then ignore the simulator for
|
||||
memory. Pass the request down to the next target, hopefully
|
||||
an exec file. */
|
||||
@@ -765,22 +768,22 @@ gdbsim_xfer_inferior_memory (CORE_ADDR m
|
||||
@@ -767,22 +770,22 @@ gdbsim_xfer_inferior_memory (CORE_ADDR m
|
||||
printf_filtered ("gdbsim_xfer_inferior_memory: myaddr 0x");
|
||||
gdb_print_host_address (myaddr, gdb_stdout);
|
||||
printf_filtered (", memaddr 0x%s, len %d, write %d\n",
|
||||
- paddr_nz (memaddr), len, write);
|
||||
+ paddr_nz (memaddr), xfer_len, write);
|
||||
if (sr_get_debug () && write)
|
||||
if (remote_debug && write)
|
||||
- dump_mem (myaddr, len);
|
||||
+ dump_mem (myaddr, xfer_len);
|
||||
}
|
||||
@ -333,10 +304,10 @@ Index: gdb-6.6/gdb/remote-sim.c
|
||||
else
|
||||
{
|
||||
- len = sim_read (gdbsim_desc, memaddr, myaddr, len);
|
||||
- if (sr_get_debug () && len > 0)
|
||||
- if (remote_debug && len > 0)
|
||||
- dump_mem (myaddr, len);
|
||||
+ xfer_len = sim_read (gdbsim_desc, memaddr, myaddr, xfer_len);
|
||||
+ if (sr_get_debug () && xfer_len > 0)
|
||||
+ if (remote_debug && xfer_len > 0)
|
||||
+ dump_mem (myaddr, xfer_len);
|
||||
}
|
||||
- return len;
|
||||
|
@ -15,44 +15,49 @@
|
||||
(decode_variable_not_found): ... a new function here.
|
||||
(decode_variable): New function.
|
||||
|
||||
Index: gdb-6.5/gdb/linespec.c
|
||||
2007-10-31 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
Port to GDB-6.7.
|
||||
|
||||
Index: gdb-6.7/gdb/linespec.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/linespec.c 2006-01-10 20:14:43.000000000 -0200
|
||||
+++ gdb-6.5/gdb/linespec.c 2006-07-07 01:04:56.000000000 -0300
|
||||
@@ -37,6 +37,7 @@
|
||||
#include "objc-lang.h"
|
||||
--- gdb-6.7.orig/gdb/linespec.c 2007-08-23 20:08:35.000000000 +0200
|
||||
+++ gdb-6.7/gdb/linespec.c 2007-10-13 05:26:33.000000000 +0200
|
||||
@@ -36,6 +36,7 @@
|
||||
#include "linespec.h"
|
||||
#include "exceptions.h"
|
||||
#include "language.h"
|
||||
+#include "gdb_assert.h"
|
||||
|
||||
/* We share this one with symtab.c, but it is not exported widely. */
|
||||
|
||||
@@ -75,7 +75,8 @@ static struct symtabs_and_lines find_met
|
||||
struct symbol *sym_class);
|
||||
@@ -75,7 +76,8 @@ static struct symtabs_and_lines find_met
|
||||
|
||||
static int collect_methods (char *copy, struct type *t,
|
||||
struct symbol *sym_class,
|
||||
- struct symbol **sym_arr);
|
||||
+ struct symbol **sym_arr,
|
||||
+ struct minimal_symbol **msym_arr);
|
||||
|
||||
static NORETURN void cplusplus_error (const char *name,
|
||||
const char *fmt, ...)
|
||||
@@ -83,10 +84,12 @@ static NORETURN void cplusplus_error (co
|
||||
|
||||
@@ -84,11 +86,13 @@ static NORETURN void cplusplus_error (co
|
||||
static int total_number_of_methods (struct type *type);
|
||||
|
||||
-static int find_methods (struct type *, char *, struct symbol **);
|
||||
+static int find_methods (struct type *, char *, struct symbol **,
|
||||
static int find_methods (struct type *, char *,
|
||||
- enum language, struct symbol **);
|
||||
+ enum language, struct symbol **,
|
||||
+ struct minimal_symbol **);
|
||||
|
||||
static int add_matching_methods (int method_counter, struct type *t,
|
||||
enum language language,
|
||||
- struct symbol **sym_arr);
|
||||
+ struct symbol **sym_arr,
|
||||
+ struct minimal_symbol **msym_arr);
|
||||
|
||||
static int add_constructors (int method_counter, struct type *t,
|
||||
struct symbol **sym_arr);
|
||||
@@ -101,6 +104,9 @@ static int is_objc_method_format (const
|
||||
enum language language,
|
||||
@@ -104,6 +108,9 @@ static int is_objc_method_format (const
|
||||
static struct symtabs_and_lines decode_line_2 (struct symbol *[],
|
||||
int, int, char ***);
|
||||
|
||||
@ -62,7 +67,7 @@ Index: gdb-6.5/gdb/linespec.c
|
||||
static struct symtab *symtab_from_filename (char **argptr,
|
||||
char *p, int is_quote_enclosed,
|
||||
int *not_found_ptr);
|
||||
@@ -191,12 +197,18 @@ total_number_of_methods (struct type *ty
|
||||
@@ -194,13 +201,18 @@ total_number_of_methods (struct type *ty
|
||||
/* Recursive helper function for decode_line_1.
|
||||
Look for methods named NAME in type T.
|
||||
Return number of matches.
|
||||
@ -77,29 +82,27 @@ Index: gdb-6.5/gdb/linespec.c
|
||||
Note that this function is g++ specific. */
|
||||
|
||||
static int
|
||||
-find_methods (struct type *t, char *name, struct symbol **sym_arr)
|
||||
+find_methods (struct type *t, char *name, struct symbol **sym_arr,
|
||||
+ struct minimal_symbol **msym_arr)
|
||||
find_methods (struct type *t, char *name, enum language language,
|
||||
- struct symbol **sym_arr)
|
||||
+ struct symbol **sym_arr, struct minimal_symbol **msym_arr)
|
||||
{
|
||||
int i1 = 0;
|
||||
int ibase;
|
||||
@@ -239,7 +251,8 @@ find_methods (struct type *t, char *name
|
||||
@@ -243,7 +255,7 @@ find_methods (struct type *t, char *name
|
||||
if (strcmp_iw (name, method_name) == 0)
|
||||
/* Find all the overloaded methods with that name. */
|
||||
i1 += add_matching_methods (method_counter, t,
|
||||
i1 += add_matching_methods (method_counter, t, language,
|
||||
- sym_arr + i1);
|
||||
+ sym_arr + i1,
|
||||
+ msym_arr);
|
||||
+ sym_arr + i1, msym_arr);
|
||||
else if (strncmp (class_name, name, name_len) == 0
|
||||
&& (class_name[name_len] == '\0'
|
||||
|| class_name[name_len] == '<'))
|
||||
@@ -261,21 +274,101 @@ find_methods (struct type *t, char *name
|
||||
|
||||
@@ -266,21 +278,100 @@ find_methods (struct type *t, char *name
|
||||
if (i1 == 0)
|
||||
for (ibase = 0; ibase < TYPE_N_BASECLASSES (t); ibase++)
|
||||
- i1 += find_methods (TYPE_BASECLASS (t, ibase), name, sym_arr + i1);
|
||||
+ i1 += find_methods (TYPE_BASECLASS (t, ibase), name, sym_arr + i1,
|
||||
+ msym_arr);
|
||||
i1 += find_methods (TYPE_BASECLASS (t, ibase), name,
|
||||
- language, sym_arr + i1);
|
||||
+ language, sym_arr + i1, msym_arr);
|
||||
|
||||
return i1;
|
||||
}
|
||||
@ -185,8 +188,8 @@ Index: gdb-6.5/gdb/linespec.c
|
||||
|
||||
static int
|
||||
add_matching_methods (int method_counter, struct type *t,
|
||||
- struct symbol **sym_arr)
|
||||
+ struct symbol **sym_arr,
|
||||
- enum language language, struct symbol **sym_arr)
|
||||
+ enum language language, struct symbol **sym_arr,
|
||||
+ struct minimal_symbol **msym_arr)
|
||||
{
|
||||
int field_counter;
|
||||
@ -197,11 +200,10 @@ Index: gdb-6.5/gdb/linespec.c
|
||||
|
||||
for (field_counter = TYPE_FN_FIELDLIST_LENGTH (t, method_counter) - 1;
|
||||
field_counter >= 0;
|
||||
@@ -299,6 +374,16 @@ add_matching_methods (int method_counter
|
||||
}
|
||||
@@ -305,6 +396,16 @@ add_matching_methods (int method_counter
|
||||
else
|
||||
phys_name = TYPE_FN_FIELD_PHYSNAME (f, field_counter);
|
||||
+
|
||||
|
||||
+ /* Check for special case of looking for member that
|
||||
+ doesn't have a mangled name provided. This will happen
|
||||
+ when we have in-charge and not-in-charge constructors.
|
||||
@ -211,10 +213,11 @@ Index: gdb-6.5/gdb/linespec.c
|
||||
+ table which has the full member name information we need. */
|
||||
+ if (strlen (phys_name) <= strlen (class_name))
|
||||
+ return add_minsym_members (class_name, phys_name, msym_arr);
|
||||
|
||||
+
|
||||
/* Destructor is handled by caller, don't add it to
|
||||
the list. */
|
||||
@@ -324,6 +409,9 @@ add_matching_methods (int method_counter
|
||||
if (is_destructor_name (phys_name) != 0)
|
||||
@@ -330,6 +431,9 @@ add_matching_methods (int method_counter
|
||||
}
|
||||
}
|
||||
|
||||
@ -224,7 +227,7 @@ Index: gdb-6.5/gdb/linespec.c
|
||||
return i1;
|
||||
}
|
||||
|
||||
@@ -603,6 +691,146 @@ decode_line_2 (struct symbol *sym_arr[],
|
||||
@@ -610,6 +714,146 @@ decode_line_2 (struct symbol *sym_arr[],
|
||||
discard_cleanups (old_chain);
|
||||
return return_values;
|
||||
}
|
||||
@ -371,20 +374,20 @@ Index: gdb-6.5/gdb/linespec.c
|
||||
|
||||
/* The parser of linespec itself. */
|
||||
|
||||
@@ -1406,36 +1634,46 @@ find_method (int funfirstline, char ***c
|
||||
int i1; /* Counter for the symbol array. */
|
||||
@@ -1414,35 +1658,46 @@ find_method (int funfirstline, char ***c
|
||||
struct symbol **sym_arr = alloca (total_number_of_methods (t)
|
||||
* sizeof (struct symbol *));
|
||||
|
||||
+ struct minimal_symbol **msym_arr = alloca (total_number_of_methods (t)
|
||||
+ * sizeof (struct minimal_symbol *));
|
||||
+
|
||||
+ msym_arr[0] = NULL;
|
||||
|
||||
+
|
||||
/* Find all methods with a matching name, and put them in
|
||||
sym_arr. */
|
||||
|
||||
- i1 = collect_methods (copy, t, sym_arr);
|
||||
+ i1 = collect_methods (copy, t, sym_arr, msym_arr);
|
||||
- i1 = collect_methods (copy, t, sym_class, sym_arr);
|
||||
+ i1 = collect_methods (copy, t, sym_class, sym_arr, msym_arr);
|
||||
|
||||
if (i1 == 1)
|
||||
{
|
||||
@ -428,11 +431,11 @@ Index: gdb-6.5/gdb/linespec.c
|
||||
/* There is more than one field with that name
|
||||
(overloaded). Ask the user which one to use. */
|
||||
+ if (msym_arr[0] != NULL)
|
||||
+ return decode_line_3 (msym_arr, i1, funfirstline, canonical);
|
||||
+ return decode_line_3 (msym_arr, i1, funfirstline, canonical);
|
||||
return decode_line_2 (sym_arr, i1, funfirstline, canonical);
|
||||
}
|
||||
else
|
||||
@@ -1462,11 +1700,12 @@ find_method (int funfirstline, char ***c
|
||||
@@ -1469,11 +1722,12 @@ find_method (int funfirstline, char ***c
|
||||
}
|
||||
|
||||
/* Find all methods named COPY in the class whose type is T, and put
|
||||
@ -441,22 +444,22 @@ Index: gdb-6.5/gdb/linespec.c
|
||||
|
||||
static int
|
||||
collect_methods (char *copy, struct type *t,
|
||||
- struct symbol **sym_arr)
|
||||
+ struct symbol **sym_arr,
|
||||
- struct symbol *sym_class, struct symbol **sym_arr)
|
||||
+ struct symbol *sym_class, struct symbol **sym_arr,
|
||||
+ struct minimal_symbol **msym_arr)
|
||||
{
|
||||
int i1 = 0; /* Counter for the symbol array. */
|
||||
|
||||
@@ -1488,7 +1727,7 @@ collect_methods (char *copy, struct type
|
||||
@@ -1495,7 +1749,7 @@ collect_methods (char *copy, struct type
|
||||
}
|
||||
}
|
||||
else
|
||||
- i1 = find_methods (t, copy, sym_arr);
|
||||
+ i1 = find_methods (t, copy, sym_arr, msym_arr);
|
||||
- i1 = find_methods (t, copy, SYMBOL_LANGUAGE (sym_class), sym_arr);
|
||||
+ i1 = find_methods (t, copy, SYMBOL_LANGUAGE (sym_class), sym_arr, msym_arr);
|
||||
|
||||
return i1;
|
||||
}
|
||||
@@ -1976,12 +2021,13 @@ decode_dollar (char *copy, int funfirstl
|
||||
@@ -1717,12 +1971,13 @@ decode_dollar (char *copy, int funfirstl
|
||||
and do not issue an error message. */
|
||||
|
||||
static struct symtabs_and_lines
|
||||
@ -472,7 +475,7 @@ Index: gdb-6.5/gdb/linespec.c
|
||||
|
||||
struct minimal_symbol *msymbol;
|
||||
|
||||
@@ -2001,8 +2047,25 @@ decode_variable (char *copy, int funfirs
|
||||
@@ -1740,8 +1995,25 @@ decode_variable (char *copy, int funfirs
|
||||
msymbol = lookup_minimal_symbol (copy, NULL, NULL);
|
||||
|
||||
if (msymbol != NULL)
|
||||
@ -484,10 +487,10 @@ Index: gdb-6.5/gdb/linespec.c
|
||||
+ if (file_symtab == 0)
|
||||
+ build_canonical_line_spec (retval.sals, SYMBOL_LINKAGE_NAME (msymbol),
|
||||
+ canonical);
|
||||
+
|
||||
|
||||
+ return retval;
|
||||
+ }
|
||||
|
||||
+
|
||||
+ retval.nelts = 0;
|
||||
+ retval.sals = NULL;
|
||||
+ return retval;
|
||||
@ -499,7 +502,7 @@ Index: gdb-6.5/gdb/linespec.c
|
||||
if (!have_full_symbols () &&
|
||||
!have_partial_symbols () && !have_minimal_symbols ())
|
||||
error (_("No symbol table is loaded. Use the \"file\" command."));
|
||||
@@ -2010,6 +2064,132 @@ decode_variable (char *copy, int funfirs
|
||||
@@ -1751,6 +2023,132 @@ decode_variable (char *copy, int funfirs
|
||||
throw_error (NOT_FOUND_ERROR, _("Function \"%s\" not defined."), copy);
|
||||
}
|
||||
|
||||
@ -632,15 +635,17 @@ Index: gdb-6.5/gdb/linespec.c
|
||||
|
||||
|
||||
|
||||
diff -u -rup gdb-6.6-orig/gdb/Makefile.in gdb-6.6/gdb/Makefile.in
|
||||
--- gdb-6.6-orig/gdb/Makefile.in 2007-10-05 15:22:37.000000000 +0200
|
||||
+++ gdb-6.6/gdb/Makefile.in 2007-10-05 16:29:10.000000000 +0200
|
||||
@@ -2266,7 +2266,7 @@ libunwind-frame.o: libunwind-frame.c $(d
|
||||
Index: gdb-6.7/gdb/Makefile.in
|
||||
===================================================================
|
||||
--- gdb-6.7.orig/gdb/Makefile.in 2007-10-13 05:09:50.000000000 +0200
|
||||
+++ gdb-6.7/gdb/Makefile.in 2007-10-13 05:15:13.000000000 +0200
|
||||
@@ -2233,7 +2233,8 @@ libunwind-frame.o: libunwind-frame.c $(d
|
||||
linespec.o: linespec.c $(defs_h) $(symtab_h) $(frame_h) $(command_h) \
|
||||
$(symfile_h) $(objfiles_h) $(source_h) $(demangle_h) $(value_h) \
|
||||
$(completer_h) $(cp_abi_h) $(parser_defs_h) $(block_h) \
|
||||
- $(objc_lang_h) $(linespec_h) $(exceptions_h)
|
||||
+ $(objc_lang_h) $(linespec_h) $(exceptions_h) $(gdb_assert_h)
|
||||
- $(objc_lang_h) $(linespec_h) $(exceptions_h) $(language_h)
|
||||
+ $(objc_lang_h) $(linespec_h) $(exceptions_h) $(language_h) \
|
||||
+ $(gdb_assert_h)
|
||||
linux-fork.o: linux-fork.c $(defs_h) $(inferior_h) $(regcache_h) $(gdbcmd_h) \
|
||||
$(infcall_h) $(gdb_assert_h) $(gdb_string_h) $(linux_fork_h) \
|
||||
$(linux_nat_h)
|
||||
|
@ -9,10 +9,14 @@
|
||||
|
||||
* gdb.base/follow-child.exp, gdb.base/follow-child.c: New files.
|
||||
|
||||
Index: gdb-6.6/gdb/doc/observer.texi
|
||||
2007-10-16 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
Port to GDB-6.7.
|
||||
|
||||
Index: gdb-6.7/gdb/doc/observer.texi
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/doc/observer.texi
|
||||
+++ gdb-6.6/gdb/doc/observer.texi
|
||||
--- gdb-6.7.orig/gdb/doc/observer.texi 2007-10-13 05:09:50.000000000 +0200
|
||||
+++ gdb-6.7/gdb/doc/observer.texi 2007-10-14 23:24:52.000000000 +0200
|
||||
@@ -119,6 +119,10 @@ when @value{GDBN} calls this observer, t
|
||||
haven't been loaded yet.
|
||||
@end deftypefun
|
||||
@ -24,11 +28,11 @@ Index: gdb-6.6/gdb/doc/observer.texi
|
||||
@deftypefun void solib_unloaded (struct so_list *@var{solib})
|
||||
The shared library specified by @var{solib} has been unloaded.
|
||||
@end deftypefun
|
||||
Index: gdb-6.6/gdb/linux-nat.c
|
||||
Index: gdb-6.7/gdb/linux-nat.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/linux-nat.c
|
||||
+++ gdb-6.6/gdb/linux-nat.c
|
||||
@@ -803,11 +803,26 @@ iterate_over_lwps (int (*callback) (stru
|
||||
--- gdb-6.7.orig/gdb/linux-nat.c 2007-10-13 05:09:50.000000000 +0200
|
||||
+++ gdb-6.7/gdb/linux-nat.c 2007-10-14 23:24:52.000000000 +0200
|
||||
@@ -742,11 +742,26 @@ iterate_over_lwps (int (*callback) (stru
|
||||
{
|
||||
struct lwp_info *lp, *lpnext;
|
||||
|
||||
@ -58,7 +62,7 @@ Index: gdb-6.6/gdb/linux-nat.c
|
||||
}
|
||||
|
||||
return NULL;
|
||||
@@ -3262,6 +3274,18 @@ linux_nat_add_target (struct target_ops
|
||||
@@ -3272,6 +3284,18 @@ linux_nat_add_target (struct target_ops
|
||||
thread_db_init (t);
|
||||
}
|
||||
|
||||
@ -77,7 +81,7 @@ Index: gdb-6.6/gdb/linux-nat.c
|
||||
void
|
||||
_initialize_linux_nat (void)
|
||||
{
|
||||
@@ -3276,6 +3300,8 @@ Specify any of the following keywords fo
|
||||
@@ -3286,6 +3310,8 @@ Specify any of the following keywords fo
|
||||
status -- list a different bunch of random process info.\n\
|
||||
all -- list all available /proc info."));
|
||||
|
||||
@ -86,19 +90,19 @@ Index: gdb-6.6/gdb/linux-nat.c
|
||||
/* Save the original signal mask. */
|
||||
sigprocmask (SIG_SETMASK, NULL, &normal_mask);
|
||||
|
||||
Index: gdb-6.6/gdb/target.c
|
||||
Index: gdb-6.7/gdb/target.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/target.c
|
||||
+++ gdb-6.6/gdb/target.c
|
||||
@@ -40,6 +40,7 @@
|
||||
#include "gdb_assert.h"
|
||||
--- gdb-6.7.orig/gdb/target.c 2007-08-23 20:08:45.000000000 +0200
|
||||
+++ gdb-6.7/gdb/target.c 2007-10-14 23:25:13.000000000 +0200
|
||||
@@ -39,6 +39,7 @@
|
||||
#include "gdbcore.h"
|
||||
#include "exceptions.h"
|
||||
#include "target-descriptions.h"
|
||||
+#include "observer.h"
|
||||
|
||||
static void target_info (char *, int);
|
||||
|
||||
@@ -276,6 +277,13 @@ target_load (char *arg, int from_tty)
|
||||
@@ -275,6 +276,13 @@ target_load (char *arg, int from_tty)
|
||||
(*current_target.to_load) (arg, from_tty);
|
||||
}
|
||||
|
||||
@ -112,11 +116,11 @@ Index: gdb-6.6/gdb/target.c
|
||||
static int
|
||||
nomemory (CORE_ADDR memaddr, char *myaddr, int len, int write,
|
||||
struct target_ops *t)
|
||||
Index: gdb-6.6/gdb/target.h
|
||||
Index: gdb-6.7/gdb/target.h
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/target.h
|
||||
+++ gdb-6.6/gdb/target.h
|
||||
@@ -891,8 +891,7 @@ int target_follow_fork (int follow_child
|
||||
--- gdb-6.7.orig/gdb/target.h 2007-08-23 20:08:46.000000000 +0200
|
||||
+++ gdb-6.7/gdb/target.h 2007-10-14 23:24:52.000000000 +0200
|
||||
@@ -864,8 +864,7 @@ int target_follow_fork (int follow_child
|
||||
|
||||
/* The inferior process has died. Do what is right. */
|
||||
|
||||
|
@ -1,8 +1,8 @@
|
||||
Index: gdb-6.6/gdb/dwarf2read.c
|
||||
Index: gdb-6.7/gdb/dwarf2read.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/dwarf2read.c
|
||||
+++ gdb-6.6/gdb/dwarf2read.c
|
||||
@@ -1219,7 +1219,7 @@ dwarf2_build_psymtabs (struct objfile *o
|
||||
--- gdb-6.7.orig/gdb/dwarf2read.c 2007-10-13 05:27:15.000000000 +0200
|
||||
+++ gdb-6.7/gdb/dwarf2read.c 2007-10-13 05:29:58.000000000 +0200
|
||||
@@ -1226,7 +1226,7 @@ dwarf2_build_psymtabs (struct objfile *o
|
||||
else
|
||||
dwarf2_per_objfile->loc_buffer = NULL;
|
||||
|
||||
@ -11,11 +11,11 @@ Index: gdb-6.6/gdb/dwarf2read.c
|
||||
|| (objfile->global_psymbols.size == 0
|
||||
&& objfile->static_psymbols.size == 0))
|
||||
{
|
||||
Index: gdb-6.6/gdb/auxv.c
|
||||
Index: gdb-6.7/gdb/auxv.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/auxv.c
|
||||
+++ gdb-6.6/gdb/auxv.c
|
||||
@@ -82,7 +82,7 @@ procfs_xfer_auxv (struct target_ops *ops
|
||||
--- gdb-6.7.orig/gdb/auxv.c 2007-08-23 20:08:26.000000000 +0200
|
||||
+++ gdb-6.7/gdb/auxv.c 2007-10-13 05:29:58.000000000 +0200
|
||||
@@ -80,7 +80,7 @@ procfs_xfer_auxv (struct target_ops *ops
|
||||
Return 1 if an entry was read into *TYPEP and *VALP. */
|
||||
int
|
||||
target_auxv_parse (struct target_ops *ops, gdb_byte **readptr,
|
||||
@ -24,7 +24,7 @@ Index: gdb-6.6/gdb/auxv.c
|
||||
{
|
||||
const int sizeof_auxv_field = TYPE_LENGTH (builtin_type_void_data_ptr);
|
||||
gdb_byte *ptr = *readptr;
|
||||
@@ -107,9 +107,10 @@ target_auxv_parse (struct target_ops *op
|
||||
@@ -105,9 +105,10 @@ target_auxv_parse (struct target_ops *op
|
||||
an error getting the information. On success, return 1 after
|
||||
storing the entry's value field in *VALP. */
|
||||
int
|
||||
@ -37,7 +37,7 @@ Index: gdb-6.6/gdb/auxv.c
|
||||
gdb_byte *data;
|
||||
LONGEST n = target_read_alloc (ops, TARGET_OBJECT_AUXV, NULL, &data);
|
||||
gdb_byte *ptr = data;
|
||||
@@ -119,10 +120,10 @@ target_auxv_search (struct target_ops *o
|
||||
@@ -117,10 +118,10 @@ target_auxv_search (struct target_ops *o
|
||||
return n;
|
||||
|
||||
while (1)
|
||||
@ -50,7 +50,7 @@ Index: gdb-6.6/gdb/auxv.c
|
||||
{
|
||||
xfree (data);
|
||||
*valp = val;
|
||||
@@ -145,7 +146,8 @@ target_auxv_search (struct target_ops *o
|
||||
@@ -143,7 +144,8 @@ target_auxv_search (struct target_ops *o
|
||||
int
|
||||
fprint_target_auxv (struct ui_file *file, struct target_ops *ops)
|
||||
{
|
||||
@ -60,7 +60,7 @@ Index: gdb-6.6/gdb/auxv.c
|
||||
gdb_byte *data;
|
||||
LONGEST len = target_read_alloc (ops, TARGET_OBJECT_AUXV, NULL,
|
||||
&data);
|
||||
@@ -155,14 +157,14 @@ fprint_target_auxv (struct ui_file *file
|
||||
@@ -153,14 +155,14 @@ fprint_target_auxv (struct ui_file *file
|
||||
if (len <= 0)
|
||||
return len;
|
||||
|
||||
@ -77,7 +77,7 @@ Index: gdb-6.6/gdb/auxv.c
|
||||
{
|
||||
#define TAG(tag, text, kind) \
|
||||
case tag: name = #tag; description = text; flavor = kind; break
|
||||
@@ -213,7 +215,7 @@ fprint_target_auxv (struct ui_file *file
|
||||
@@ -211,7 +213,7 @@ fprint_target_auxv (struct ui_file *file
|
||||
}
|
||||
|
||||
fprintf_filtered (file, "%-4s %-20s %-30s ",
|
||||
@ -86,11 +86,11 @@ Index: gdb-6.6/gdb/auxv.c
|
||||
switch (flavor)
|
||||
{
|
||||
case dec:
|
||||
Index: gdb-6.6/gdb/auxv.h
|
||||
Index: gdb-6.7/gdb/auxv.h
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/auxv.h
|
||||
+++ gdb-6.6/gdb/auxv.h
|
||||
@@ -37,14 +37,14 @@ struct target_ops; /* Forward declarati
|
||||
--- gdb-6.7.orig/gdb/auxv.h 2007-08-23 20:08:26.000000000 +0200
|
||||
+++ gdb-6.7/gdb/auxv.h 2007-10-13 05:29:58.000000000 +0200
|
||||
@@ -35,14 +35,14 @@ struct target_ops; /* Forward declarati
|
||||
Return 1 if an entry was read into *TYPEP and *VALP. */
|
||||
extern int target_auxv_parse (struct target_ops *ops,
|
||||
gdb_byte **readptr, gdb_byte *endptr,
|
||||
@ -107,11 +107,11 @@ Index: gdb-6.6/gdb/auxv.h
|
||||
|
||||
/* Print the contents of the target's AUXV on the specified file. */
|
||||
extern int fprint_target_auxv (struct ui_file *file, struct target_ops *ops);
|
||||
Index: gdb-6.6/gdb/breakpoint.h
|
||||
Index: gdb-6.7/gdb/breakpoint.h
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/breakpoint.h
|
||||
+++ gdb-6.6/gdb/breakpoint.h
|
||||
@@ -159,6 +159,7 @@ enum enable_state
|
||||
--- gdb-6.7.orig/gdb/breakpoint.h 2007-10-13 05:09:50.000000000 +0200
|
||||
+++ gdb-6.7/gdb/breakpoint.h 2007-10-13 05:29:58.000000000 +0200
|
||||
@@ -153,6 +153,7 @@ enum enable_state
|
||||
automatically enabled and reset when the call
|
||||
"lands" (either completes, or stops at another
|
||||
eventpoint). */
|
||||
@ -121,7 +121,7 @@ Index: gdb-6.6/gdb/breakpoint.h
|
||||
breakpoint instruction on top of it, or restore
|
||||
@@ -807,8 +808,12 @@ extern void remove_thread_event_breakpoi
|
||||
|
||||
extern void disable_breakpoints_in_shlibs (int silent);
|
||||
extern void disable_breakpoints_in_shlibs (void);
|
||||
|
||||
+extern void disable_breakpoints_at_startup (int silent);
|
||||
+
|
||||
@ -132,11 +132,11 @@ Index: gdb-6.6/gdb/breakpoint.h
|
||||
extern void create_solib_load_event_breakpoint (char *, int, char *, char *);
|
||||
|
||||
extern void create_solib_unload_event_breakpoint (char *, int,
|
||||
Index: gdb-6.6/gdb/symfile-mem.c
|
||||
Index: gdb-6.7/gdb/symfile-mem.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/symfile-mem.c
|
||||
+++ gdb-6.6/gdb/symfile-mem.c
|
||||
@@ -110,7 +110,7 @@ symbol_file_add_from_memory (struct bfd
|
||||
--- gdb-6.7.orig/gdb/symfile-mem.c 2007-08-23 20:08:39.000000000 +0200
|
||||
+++ gdb-6.7/gdb/symfile-mem.c 2007-10-13 05:29:58.000000000 +0200
|
||||
@@ -108,7 +108,7 @@ symbol_file_add_from_memory (struct bfd
|
||||
}
|
||||
|
||||
objf = symbol_file_add_from_bfd (nbfd, from_tty,
|
||||
@ -145,11 +145,11 @@ Index: gdb-6.6/gdb/symfile-mem.c
|
||||
|
||||
/* This might change our ideas about frames already looked at. */
|
||||
reinit_frame_cache ();
|
||||
Index: gdb-6.6/gdb/infrun.c
|
||||
Index: gdb-6.7/gdb/infrun.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/infrun.c
|
||||
+++ gdb-6.6/gdb/infrun.c
|
||||
@@ -2249,6 +2249,11 @@ process_event_stop_test:
|
||||
--- gdb-6.7.orig/gdb/infrun.c 2007-10-13 05:09:50.000000000 +0200
|
||||
+++ gdb-6.7/gdb/infrun.c 2007-10-13 05:29:58.000000000 +0200
|
||||
@@ -2305,6 +2305,11 @@ process_event_stop_test:
|
||||
code segments in shared libraries might be mapped in now. */
|
||||
re_enable_breakpoints_in_shlibs ();
|
||||
|
||||
@ -161,11 +161,11 @@ Index: gdb-6.6/gdb/infrun.c
|
||||
/* If requested, stop when the dynamic linker notifies
|
||||
gdb of events. This allows the user to get control
|
||||
and place breakpoints in initializer routines for
|
||||
Index: gdb-6.6/gdb/objfiles.c
|
||||
Index: gdb-6.7/gdb/objfiles.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/objfiles.c
|
||||
+++ gdb-6.6/gdb/objfiles.c
|
||||
@@ -50,6 +50,9 @@
|
||||
--- gdb-6.7.orig/gdb/objfiles.c 2007-08-23 20:08:36.000000000 +0200
|
||||
+++ gdb-6.7/gdb/objfiles.c 2007-10-13 05:29:58.000000000 +0200
|
||||
@@ -48,6 +48,9 @@
|
||||
#include "dictionary.h"
|
||||
#include "source.h"
|
||||
|
||||
@ -175,7 +175,7 @@ Index: gdb-6.6/gdb/objfiles.c
|
||||
/* Prototypes for local functions */
|
||||
|
||||
static void objfile_alloc_data (struct objfile *objfile);
|
||||
@@ -261,7 +264,19 @@ init_entry_point_info (struct objfile *o
|
||||
@@ -259,7 +262,19 @@ init_entry_point_info (struct objfile *o
|
||||
CORE_ADDR
|
||||
entry_point_address (void)
|
||||
{
|
||||
@ -196,11 +196,11 @@ Index: gdb-6.6/gdb/objfiles.c
|
||||
}
|
||||
|
||||
/* Create the terminating entry of OBJFILE's minimal symbol table.
|
||||
Index: gdb-6.6/gdb/solib-svr4.c
|
||||
Index: gdb-6.7/gdb/solib-svr4.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/solib-svr4.c
|
||||
+++ gdb-6.6/gdb/solib-svr4.c
|
||||
@@ -34,6 +34,8 @@
|
||||
--- gdb-6.7.orig/gdb/solib-svr4.c 2007-10-12 22:34:03.000000000 +0200
|
||||
+++ gdb-6.7/gdb/solib-svr4.c 2007-10-14 23:04:45.000000000 +0200
|
||||
@@ -31,6 +31,8 @@
|
||||
#include "gdbcore.h"
|
||||
#include "target.h"
|
||||
#include "inferior.h"
|
||||
@ -209,7 +209,7 @@ Index: gdb-6.6/gdb/solib-svr4.c
|
||||
|
||||
#include "gdb_assert.h"
|
||||
|
||||
@@ -267,7 +269,9 @@ static char *debug_loader_name;
|
||||
@@ -249,7 +251,9 @@ static char *debug_loader_name;
|
||||
|
||||
/* Local function prototypes */
|
||||
|
||||
@ -217,44 +217,57 @@ Index: gdb-6.6/gdb/solib-svr4.c
|
||||
static int match_main (char *);
|
||||
+#endif
|
||||
|
||||
static CORE_ADDR bfd_lookup_symbol (bfd *, char *, flagword);
|
||||
static CORE_ADDR bfd_lookup_symbol (bfd *, char *);
|
||||
|
||||
@@ -389,22 +393,79 @@ elf_locate_base (void)
|
||||
{
|
||||
struct bfd_section *dyninfo_sect;
|
||||
int dyninfo_sect_size;
|
||||
- CORE_ADDR dyninfo_addr;
|
||||
+ CORE_ADDR dyninfo_addr, relocated_dyninfo_addr, entry_addr;
|
||||
gdb_byte *buf;
|
||||
gdb_byte *bufend;
|
||||
int arch_size;
|
||||
@@ -352,10 +356,12 @@ scan_dyntag (int dyntag, bfd *abfd, CORE
|
||||
int arch_size, step, sect_size;
|
||||
long dyn_tag;
|
||||
CORE_ADDR dyn_ptr, dyn_addr;
|
||||
+ CORE_ADDR entry_addr;
|
||||
gdb_byte *bufend, *bufstart, *buf;
|
||||
Elf32_External_Dyn *x_dynp_32;
|
||||
Elf64_External_Dyn *x_dynp_64;
|
||||
struct bfd_section *sect;
|
||||
+ int ret;
|
||||
+
|
||||
+ /* Find the address of the entry point of the program from the
|
||||
+ auxv vector. */
|
||||
+ ret = target_auxv_search (¤t_target, AT_ENTRY, &entry_addr);
|
||||
+
|
||||
+ if (ret == 0 || ret == -1)
|
||||
+ {
|
||||
+ /* No auxv info, maybe an older kernel. Fake our way through. */
|
||||
+ entry_addr = bfd_get_start_address (exec_bfd);
|
||||
+
|
||||
+ if (debug_solib)
|
||||
+ fprintf_unfiltered (gdb_stdlog,
|
||||
+ "elf_locate_base: program entry address not found. Using bfd's 0x%s for %s\n",
|
||||
+ paddr_nz (entry_addr), exec_bfd->filename);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ if (debug_solib)
|
||||
+ fprintf_unfiltered (gdb_stdlog,
|
||||
+ "elf_locate_base: found program entry address 0x%s for %s\n",
|
||||
+ paddr_nz (entry_addr), exec_bfd->filename);
|
||||
+ }
|
||||
|
||||
if (abfd == NULL)
|
||||
return 0;
|
||||
@@ -363,19 +369,74 @@ scan_dyntag (int dyntag, bfd *abfd, CORE
|
||||
if (arch_size == -1)
|
||||
return 0;
|
||||
|
||||
+ /* The auxv vector based relocatable files reading is limited to the main
|
||||
+ executable. */
|
||||
+ gdb_assert (abfd == exec_bfd || ptr == NULL);
|
||||
+
|
||||
+ if (ptr != NULL)
|
||||
+ {
|
||||
+ /* Find the address of the entry point of the program from the
|
||||
+ auxv vector. */
|
||||
+ ret = target_auxv_search (¤t_target, AT_ENTRY, &entry_addr);
|
||||
+
|
||||
+ if (ret == 0 || ret == -1)
|
||||
+ {
|
||||
+ /* No auxv info, maybe an older kernel. Fake our way through. */
|
||||
+ entry_addr = bfd_get_start_address (exec_bfd);
|
||||
+
|
||||
+ if (debug_solib)
|
||||
+ fprintf_unfiltered (gdb_stdlog,
|
||||
+ "elf_locate_base: program entry address not found. Using bfd's 0x%s for %s\n",
|
||||
+ paddr_nz (entry_addr), exec_bfd->filename);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ if (debug_solib)
|
||||
+ fprintf_unfiltered (gdb_stdlog,
|
||||
+ "elf_locate_base: found program entry address 0x%s for %s\n",
|
||||
+ paddr_nz (entry_addr), exec_bfd->filename);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
/* Find the start address of the .dynamic section. */
|
||||
dyninfo_sect = bfd_get_section_by_name (exec_bfd, ".dynamic");
|
||||
if (dyninfo_sect == NULL)
|
||||
sect = bfd_get_section_by_name (abfd, ".dynamic");
|
||||
if (sect == NULL)
|
||||
- return 0;
|
||||
+ {
|
||||
+ if (debug_solib)
|
||||
@ -271,50 +284,78 @@ Index: gdb-6.6/gdb/solib-svr4.c
|
||||
+ exec_bfd->filename);
|
||||
+ }
|
||||
+
|
||||
dyninfo_addr = bfd_section_vma (exec_bfd, dyninfo_sect);
|
||||
dyn_addr = bfd_section_vma (abfd, sect);
|
||||
+ if (debug_solib)
|
||||
+ fprintf_unfiltered (gdb_stdlog,
|
||||
+ "elf_locate_base: unrelocated .dynamic addr 0x%s\n",
|
||||
+ paddr_nz (dyninfo_addr));
|
||||
+
|
||||
+ relocated_dyninfo_addr = dyninfo_addr
|
||||
+ + entry_addr - bfd_get_start_address(exec_bfd);
|
||||
+ if (debug_solib)
|
||||
+ fprintf_unfiltered (gdb_stdlog,
|
||||
+ "elf_locate_base: relocated .dyn addr 0x%s for %s\n",
|
||||
+ paddr_nz(relocated_dyninfo_addr), exec_bfd->filename);
|
||||
+ "elf_locate_base: .dynamic addr 0x%s\n",
|
||||
+ paddr_nz (dyn_addr));
|
||||
|
||||
/* Read in .dynamic section, silently ignore errors. */
|
||||
dyninfo_sect_size = bfd_section_size (exec_bfd, dyninfo_sect);
|
||||
buf = alloca (dyninfo_sect_size);
|
||||
- if (target_read_memory (dyninfo_addr, buf, dyninfo_sect_size))
|
||||
- return 0;
|
||||
/* Read in .dynamic from the BFD. We will get the actual value
|
||||
from memory later. */
|
||||
sect_size = bfd_section_size (abfd, sect);
|
||||
buf = bufstart = alloca (sect_size);
|
||||
+ if (debug_solib)
|
||||
+ fprintf_unfiltered (gdb_stdlog,
|
||||
+ "elf_locate_base: read in .dynamic section\n");
|
||||
+ if (target_read_memory (relocated_dyninfo_addr, buf, dyninfo_sect_size))
|
||||
if (!bfd_get_section_contents (abfd, sect,
|
||||
buf, 0, sect_size))
|
||||
- return 0;
|
||||
+ {
|
||||
+ if (debug_solib)
|
||||
+ fprintf_unfiltered (gdb_stdlog,
|
||||
+ "elf_locate_base: couldn't read .dynamic section at 0x%s -- return now\n",
|
||||
+ paddr_nz (relocated_dyninfo_addr));
|
||||
+ "elf_locate_base: couldn't read .dynamic section -- return now\n");
|
||||
+ return 0;
|
||||
+ }
|
||||
|
||||
/* Find the DT_DEBUG entry in the the .dynamic section.
|
||||
For mips elf we look for DT_MIPS_RLD_MAP, mips elf apparently has
|
||||
@@ -431,6 +492,10 @@ elf_locate_base (void)
|
||||
{
|
||||
dyn_ptr = bfd_h_get_32 (exec_bfd,
|
||||
(bfd_byte *) x_dynp->d_un.d_ptr);
|
||||
+ if (debug_solib)
|
||||
+ fprintf_unfiltered (gdb_stdlog,
|
||||
+ "elf_locate_base: DT_DEBUG entry has value 0x%s -- return now\n",
|
||||
+ paddr_nz (dyn_ptr));
|
||||
return dyn_ptr;
|
||||
}
|
||||
else if (dyn_tag == DT_MIPS_RLD_MAP)
|
||||
@@ -556,6 +621,10 @@ solib_svr4_r_map (void)
|
||||
/* Iterate over BUF and scan for DYNTAG. If found, set PTR and return. */
|
||||
step = (arch_size == 32) ? sizeof (Elf32_External_Dyn)
|
||||
@@ -408,9 +469,43 @@ scan_dyntag (int dyntag, bfd *abfd, CORE
|
||||
CORE_ADDR ptr_addr;
|
||||
|
||||
ptr_addr = dyn_addr + (buf - bufstart) + arch_size / 8;
|
||||
+ if (ptr != NULL)
|
||||
+ {
|
||||
+ if (debug_solib)
|
||||
+ fprintf_unfiltered (gdb_stdlog,
|
||||
+ "elf_locate_base: unrelocated ptr addr 0x%s\n",
|
||||
+ paddr_nz (ptr_addr));
|
||||
+ ptr_addr += entry_addr - bfd_get_start_address (exec_bfd);
|
||||
+ if (debug_solib)
|
||||
+ fprintf_unfiltered (gdb_stdlog,
|
||||
+ "elf_locate_base: relocated ptr addr 0x%s"
|
||||
+ " (auxv entry 0x%s, bfd start address 0x%s)"
|
||||
+ " for %s\n",
|
||||
+ paddr_nz (ptr_addr), paddr_nz (entry_addr),
|
||||
+ paddr_nz (bfd_get_start_address (exec_bfd)),
|
||||
+ exec_bfd->filename);
|
||||
+ }
|
||||
if (target_read_memory (ptr_addr, ptr_buf, arch_size / 8) == 0)
|
||||
- dyn_ptr = extract_typed_address (ptr_buf,
|
||||
- builtin_type_void_data_ptr);
|
||||
+ {
|
||||
+ dyn_ptr = extract_typed_address (ptr_buf,
|
||||
+ builtin_type_void_data_ptr);
|
||||
+ if (ptr != NULL)
|
||||
+ {
|
||||
+ if (debug_solib)
|
||||
+ fprintf_unfiltered (gdb_stdlog,
|
||||
+ "elf_locate_base: Tag entry has value 0x%s -- return now\n",
|
||||
+ paddr_nz (dyn_ptr));
|
||||
+ }
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ if (ptr != NULL)
|
||||
+ {
|
||||
+ if (debug_solib)
|
||||
+ fprintf_unfiltered (gdb_stdlog,
|
||||
+ "elf_locate_base: Couldn't read tag entry value -- return now\n");
|
||||
+ }
|
||||
+ }
|
||||
*ptr = dyn_ptr;
|
||||
}
|
||||
return 1;
|
||||
@@ -547,6 +638,10 @@ solib_svr4_r_map (void)
|
||||
{
|
||||
struct link_map_offsets *lmo = svr4_fetch_link_map_offsets ();
|
||||
|
||||
@ -325,7 +366,7 @@ Index: gdb-6.6/gdb/solib-svr4.c
|
||||
return read_memory_typed_address (debug_base + lmo->r_map_offset,
|
||||
builtin_type_void_data_ptr);
|
||||
}
|
||||
@@ -713,6 +782,11 @@ svr4_current_sos (void)
|
||||
@@ -704,6 +799,11 @@ svr4_current_sos (void)
|
||||
struct so_list **link_ptr = &head;
|
||||
CORE_ADDR ldsomap = 0;
|
||||
|
||||
@ -337,7 +378,7 @@ Index: gdb-6.6/gdb/solib-svr4.c
|
||||
/* Make sure we've looked up the inferior's dynamic linker's base
|
||||
structure. */
|
||||
if (! debug_base)
|
||||
@@ -722,11 +796,21 @@ svr4_current_sos (void)
|
||||
@@ -713,11 +813,21 @@ svr4_current_sos (void)
|
||||
/* If we can't find the dynamic linker's base structure, this
|
||||
must not be a dynamically linked executable. Hmm. */
|
||||
if (! debug_base)
|
||||
@ -360,7 +401,7 @@ Index: gdb-6.6/gdb/solib-svr4.c
|
||||
lm = solib_svr4_r_map ();
|
||||
|
||||
while (lm)
|
||||
@@ -742,23 +826,103 @@ svr4_current_sos (void)
|
||||
@@ -733,23 +843,103 @@ svr4_current_sos (void)
|
||||
new->lm_info->lm = xzalloc (lmo->link_map_size);
|
||||
make_cleanup (xfree, new->lm_info->lm);
|
||||
|
||||
@ -465,15 +506,15 @@ Index: gdb-6.6/gdb/solib-svr4.c
|
||||
target_read_string (LM_NAME (new), &buffer,
|
||||
SO_NAME_MAX_PATH_SIZE - 1, &errcode);
|
||||
if (errcode != 0)
|
||||
@@ -766,22 +930,37 @@ svr4_current_sos (void)
|
||||
@@ -757,23 +947,35 @@ svr4_current_sos (void)
|
||||
safe_strerror (errcode));
|
||||
else
|
||||
{
|
||||
- strncpy (new->so_name, buffer, SO_NAME_MAX_PATH_SIZE - 1);
|
||||
- new->so_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0';
|
||||
- xfree (buffer);
|
||||
- strcpy (new->so_original_name, new->so_name);
|
||||
- }
|
||||
- xfree (buffer);
|
||||
-
|
||||
- /* If this entry has no name, or its name matches the name
|
||||
- for the main executable, don't include it in the list. */
|
||||
@ -485,22 +526,18 @@ Index: gdb-6.6/gdb/solib-svr4.c
|
||||
- new->next = 0;
|
||||
- *link_ptr = new;
|
||||
- link_ptr = &new->next;
|
||||
+ if (debug_solib)
|
||||
+ fprintf_unfiltered (gdb_stdlog,
|
||||
+ "svr4_current_sos: LM_NAME is <%s>\n",
|
||||
+ buffer);
|
||||
+ /* The name could be empty, in which case it is the
|
||||
+ system supplied DSO. */
|
||||
+ if (strcmp (buffer, "") == 0)
|
||||
+ if (debug_solib)
|
||||
+ fprintf_unfiltered (gdb_stdlog,
|
||||
+ "svr4_current_sos: LM_NAME is <%s>\n",
|
||||
+ buffer);
|
||||
+ /* The name could be empty, in which case it is the
|
||||
+ system supplied DSO. */
|
||||
+ if (strcmp (buffer, "") == 0)
|
||||
+ free_so (new);
|
||||
+ else
|
||||
+ {
|
||||
+ xfree (buffer);
|
||||
+ free_so (new);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ strncpy (new->so_name, buffer, SO_NAME_MAX_PATH_SIZE - 1);
|
||||
+ new->so_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0';
|
||||
+ xfree (buffer);
|
||||
+ strcpy (new->so_original_name, new->so_name);
|
||||
+ if (debug_solib)
|
||||
+ {
|
||||
@ -517,9 +554,11 @@ Index: gdb-6.6/gdb/solib-svr4.c
|
||||
+ link_ptr = &new->next;
|
||||
+ }
|
||||
}
|
||||
+ xfree (buffer);
|
||||
}
|
||||
|
||||
@@ -798,6 +977,11 @@ svr4_current_sos (void)
|
||||
/* On Solaris, the dynamic linker is not in the normal list of
|
||||
@@ -789,6 +991,11 @@ svr4_current_sos (void)
|
||||
if (head == NULL)
|
||||
return svr4_default_sos ();
|
||||
|
||||
@ -531,7 +570,7 @@ Index: gdb-6.6/gdb/solib-svr4.c
|
||||
return head;
|
||||
}
|
||||
|
||||
@@ -874,7 +1058,7 @@ svr4_fetch_objfile_link_map (struct objf
|
||||
@@ -868,7 +1075,7 @@ svr4_fetch_objfile_link_map (struct objf
|
||||
/* On some systems, the only way to recognize the link map entry for
|
||||
the main executable file is by looking at its name. Return
|
||||
non-zero iff SONAME matches one of the known main executable names. */
|
||||
@ -540,7 +579,7 @@ Index: gdb-6.6/gdb/solib-svr4.c
|
||||
static int
|
||||
match_main (char *soname)
|
||||
{
|
||||
@@ -888,6 +1072,7 @@ match_main (char *soname)
|
||||
@@ -882,6 +1089,7 @@ match_main (char *soname)
|
||||
|
||||
return (0);
|
||||
}
|
||||
@ -548,7 +587,7 @@ Index: gdb-6.6/gdb/solib-svr4.c
|
||||
|
||||
/* Return 1 if PC lies in the dynamic symbol resolution code of the
|
||||
SVR4 run time loader. */
|
||||
@@ -987,6 +1172,11 @@ enable_break (void)
|
||||
@@ -979,6 +1187,11 @@ enable_break (void)
|
||||
/* Find the .interp section; if not found, warn the user and drop
|
||||
into the old breakpoint at symbol code. */
|
||||
interp_sect = bfd_get_section_by_name (exec_bfd, ".interp");
|
||||
@ -560,7 +599,7 @@ Index: gdb-6.6/gdb/solib-svr4.c
|
||||
if (interp_sect)
|
||||
{
|
||||
unsigned int interp_sect_size;
|
||||
@@ -1025,6 +1215,9 @@ enable_break (void)
|
||||
@@ -1018,6 +1231,9 @@ enable_break (void)
|
||||
if (tmp_fd >= 0)
|
||||
tmp_bfd = bfd_fopen (tmp_pathname, gnutarget, FOPEN_RB, tmp_fd);
|
||||
|
||||
@ -570,7 +609,7 @@ Index: gdb-6.6/gdb/solib-svr4.c
|
||||
if (tmp_bfd == NULL)
|
||||
goto bkpt_at_symbol;
|
||||
|
||||
@@ -1111,6 +1304,9 @@ enable_break (void)
|
||||
@@ -1115,6 +1331,9 @@ enable_break (void)
|
||||
if (sym_addr != 0)
|
||||
{
|
||||
create_solib_event_breakpoint (load_addr + sym_addr);
|
||||
@ -580,7 +619,7 @@ Index: gdb-6.6/gdb/solib-svr4.c
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -1372,6 +1568,8 @@ svr4_solib_create_inferior_hook (void)
|
||||
@@ -1375,6 +1594,8 @@ svr4_solib_create_inferior_hook (void)
|
||||
while (stop_signal != TARGET_SIGNAL_TRAP);
|
||||
stop_soon = NO_STOP_QUIETLY;
|
||||
#endif /* defined(_SCO_DS) */
|
||||
@ -589,7 +628,7 @@ Index: gdb-6.6/gdb/solib-svr4.c
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -1558,6 +1756,75 @@ svr4_lp64_fetch_link_map_offsets (void)
|
||||
@@ -1551,6 +1772,75 @@ svr4_lp64_fetch_link_map_offsets (void)
|
||||
|
||||
return lmp;
|
||||
}
|
||||
@ -664,8 +703,8 @@ Index: gdb-6.6/gdb/solib-svr4.c
|
||||
+
|
||||
|
||||
|
||||
static struct target_so_ops svr4_so_ops;
|
||||
@@ -1580,4 +1847,8 @@ _initialize_svr4_solib (void)
|
||||
struct target_so_ops svr4_so_ops;
|
||||
@@ -1592,4 +1882,8 @@ _initialize_svr4_solib (void)
|
||||
|
||||
/* FIXME: Don't do this here. *_gdbarch_init() should set so_ops. */
|
||||
current_target_so_ops = &svr4_so_ops;
|
||||
@ -674,12 +713,12 @@ Index: gdb-6.6/gdb/solib-svr4.c
|
||||
+ "Display the inferior's linkmap.");
|
||||
+
|
||||
}
|
||||
Index: gdb-6.6/gdb/varobj.c
|
||||
Index: gdb-6.7/gdb/varobj.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/varobj.c
|
||||
+++ gdb-6.6/gdb/varobj.c
|
||||
@@ -870,6 +870,62 @@ varobj_list (struct varobj ***varlist)
|
||||
return rootcount;
|
||||
--- gdb-6.7.orig/gdb/varobj.c 2007-08-31 21:01:17.000000000 +0200
|
||||
+++ gdb-6.7/gdb/varobj.c 2007-10-13 05:29:58.000000000 +0200
|
||||
@@ -1116,6 +1116,62 @@ install_new_value (struct varobj *var, s
|
||||
return changed;
|
||||
}
|
||||
|
||||
+void
|
||||
@ -741,11 +780,11 @@ Index: gdb-6.6/gdb/varobj.c
|
||||
/* Update the values for a variable and its children. This is a
|
||||
two-pronged attack. First, re-parse the value for the root's
|
||||
expression to see if it's changed. Then go all the way
|
||||
Index: gdb-6.6/gdb/solist.h
|
||||
Index: gdb-6.7/gdb/solist.h
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/solist.h
|
||||
+++ gdb-6.6/gdb/solist.h
|
||||
@@ -62,6 +62,8 @@ struct so_list
|
||||
--- gdb-6.7.orig/gdb/solist.h 2007-08-23 20:08:38.000000000 +0200
|
||||
+++ gdb-6.7/gdb/solist.h 2007-10-13 05:29:58.000000000 +0200
|
||||
@@ -61,6 +61,8 @@ struct so_list
|
||||
bfd *abfd;
|
||||
char symbols_loaded; /* flag: symbols read in yet? */
|
||||
char from_tty; /* flag: print msgs? */
|
||||
@ -754,7 +793,7 @@ Index: gdb-6.6/gdb/solist.h
|
||||
struct objfile *objfile; /* objfile for loaded lib */
|
||||
struct section_table *sections;
|
||||
struct section_table *sections_end;
|
||||
@@ -113,9 +115,15 @@ void free_so (struct so_list *so);
|
||||
@@ -123,9 +125,15 @@ void free_so (struct so_list *so);
|
||||
/* Return address of first so_list entry in master shared object list. */
|
||||
struct so_list *master_so_list (void);
|
||||
|
||||
@ -770,29 +809,29 @@ Index: gdb-6.6/gdb/solist.h
|
||||
/* FIXME: gdbarch needs to control this variable */
|
||||
extern struct target_so_ops *current_target_so_ops;
|
||||
|
||||
@@ -126,4 +134,6 @@ extern struct target_so_ops *current_tar
|
||||
#define TARGET_SO_IN_DYNSYM_RESOLVE_CODE \
|
||||
(current_target_so_ops->in_dynsym_resolve_code)
|
||||
@@ -143,4 +151,6 @@ struct symbol *solib_global_lookup (cons
|
||||
const domain_enum domain,
|
||||
struct symtab **symtab);
|
||||
|
||||
+/* Controls the printing of debugging output. */
|
||||
+extern int debug_solib;
|
||||
#endif
|
||||
Index: gdb-6.6/gdb/varobj.h
|
||||
Index: gdb-6.7/gdb/varobj.h
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/varobj.h
|
||||
+++ gdb-6.6/gdb/varobj.h
|
||||
@@ -99,4 +99,6 @@ extern int varobj_list (struct varobj **
|
||||
--- gdb-6.7.orig/gdb/varobj.h 2007-08-31 20:52:05.000000000 +0200
|
||||
+++ gdb-6.7/gdb/varobj.h 2007-10-13 05:29:58.000000000 +0200
|
||||
@@ -114,4 +114,6 @@ extern int varobj_update (struct varobj
|
||||
|
||||
extern int varobj_update (struct varobj **varp, struct varobj ***changelist);
|
||||
extern void varobj_invalidate (void);
|
||||
|
||||
+extern void varobj_refresh(void);
|
||||
+
|
||||
#endif /* VAROBJ_H */
|
||||
Index: gdb-6.6/gdb/symfile.c
|
||||
Index: gdb-6.7/gdb/symfile.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/symfile.c
|
||||
+++ gdb-6.6/gdb/symfile.c
|
||||
@@ -49,6 +49,7 @@
|
||||
--- gdb-6.7.orig/gdb/symfile.c 2007-09-24 23:48:05.000000000 +0200
|
||||
+++ gdb-6.7/gdb/symfile.c 2007-10-13 05:32:14.000000000 +0200
|
||||
@@ -47,6 +47,7 @@
|
||||
#include "readline/readline.h"
|
||||
#include "gdb_assert.h"
|
||||
#include "block.h"
|
||||
@ -800,7 +839,7 @@ Index: gdb-6.6/gdb/symfile.c
|
||||
#include "observer.h"
|
||||
#include "exec.h"
|
||||
#include "parser-defs.h"
|
||||
@@ -659,7 +660,7 @@ syms_from_objfile (struct objfile *objfi
|
||||
@@ -779,7 +780,7 @@ syms_from_objfile (struct objfile *objfi
|
||||
|
||||
/* Now either addrs or offsets is non-zero. */
|
||||
|
||||
@ -809,7 +848,7 @@ Index: gdb-6.6/gdb/symfile.c
|
||||
{
|
||||
/* We will modify the main symbol table, make sure that all its users
|
||||
will be cleaned up if an error occurs during symbol reading. */
|
||||
@@ -687,7 +688,7 @@ syms_from_objfile (struct objfile *objfi
|
||||
@@ -807,7 +808,7 @@ syms_from_objfile (struct objfile *objfi
|
||||
|
||||
We no longer warn if the lowest section is not a text segment (as
|
||||
happens for the PA64 port. */
|
||||
@ -818,7 +857,7 @@ Index: gdb-6.6/gdb/symfile.c
|
||||
{
|
||||
asection *lower_sect;
|
||||
asection *sect;
|
||||
@@ -856,17 +857,21 @@ new_symfile_objfile (struct objfile *obj
|
||||
@@ -976,17 +977,21 @@ new_symfile_objfile (struct objfile *obj
|
||||
/* If this is the main symbol file we have to clean up all users of the
|
||||
old main symbol file. Otherwise it is sufficient to fixup all the
|
||||
breakpoints that may have been redefined by this symbol file. */
|
||||
@ -842,7 +881,7 @@ Index: gdb-6.6/gdb/symfile.c
|
||||
|
||||
/* We're done reading the symbol file; finish off complaints. */
|
||||
clear_complaints (&symfile_complaints, 0, verbo);
|
||||
@@ -909,7 +914,7 @@ symbol_file_add_with_addrs_or_offsets (b
|
||||
@@ -1029,7 +1034,7 @@ symbol_file_add_with_addrs_or_offsets (b
|
||||
interactively wiping out any existing symbols. */
|
||||
|
||||
if ((have_full_symbols () || have_partial_symbols ())
|
||||
@ -851,7 +890,7 @@ Index: gdb-6.6/gdb/symfile.c
|
||||
&& from_tty
|
||||
&& !query ("Load new symbol table from \"%s\"? ", name))
|
||||
error (_("Not confirmed."));
|
||||
@@ -1090,6 +1095,10 @@ symbol_file_clear (int from_tty)
|
||||
@@ -1213,6 +1218,10 @@ symbol_file_clear (int from_tty)
|
||||
symfile_objfile->name)
|
||||
: !query (_("Discard symbol table? "))))
|
||||
error (_("Not confirmed."));
|
||||
@ -862,7 +901,7 @@ Index: gdb-6.6/gdb/symfile.c
|
||||
free_all_objfiles ();
|
||||
|
||||
/* solib descriptors may have handles to objfiles. Since their
|
||||
@@ -2204,6 +2213,8 @@ reread_symbols (void)
|
||||
@@ -2470,6 +2479,8 @@ reread_symbols (void)
|
||||
/* Discard cleanups as symbol reading was successful. */
|
||||
discard_cleanups (old_cleanups);
|
||||
|
||||
@ -871,19 +910,19 @@ Index: gdb-6.6/gdb/symfile.c
|
||||
/* If the mtime has changed between the time we set new_modtime
|
||||
and now, we *want* this to be out of date, so don't call stat
|
||||
again now. */
|
||||
@@ -2579,6 +2590,7 @@ clear_symtab_users (void)
|
||||
@@ -2837,6 +2848,7 @@ clear_symtab_users (void)
|
||||
breakpoint_re_set ();
|
||||
set_default_breakpoint (0, 0, 0, 0);
|
||||
clear_pc_function_cache ();
|
||||
if (deprecated_target_new_objfile_hook)
|
||||
deprecated_target_new_objfile_hook (NULL);
|
||||
+ varobj_refresh ();
|
||||
observer_notify_new_objfile (NULL);
|
||||
|
||||
/* Clear globals which might have pointed into a removed objfile.
|
||||
FIXME: It's not clear which of these are supposed to persist
|
||||
Index: gdb-6.6/gdb/breakpoint.c
|
||||
Index: gdb-6.7/gdb/breakpoint.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/breakpoint.c
|
||||
+++ gdb-6.6/gdb/breakpoint.c
|
||||
@@ -781,15 +781,15 @@ insert_watchpoints_for_new_thread (ptid_
|
||||
--- gdb-6.7.orig/gdb/breakpoint.c 2007-10-13 05:27:15.000000000 +0200
|
||||
+++ gdb-6.7/gdb/breakpoint.c 2007-10-13 05:29:58.000000000 +0200
|
||||
@@ -840,15 +840,15 @@ insert_watchpoints_for_new_thread (ptid_
|
||||
struct value *v = b->owner->val_chain;
|
||||
|
||||
/* Look at each value on the value chain. */
|
||||
@ -902,7 +941,7 @@ Index: gdb-6.6/gdb/breakpoint.c
|
||||
|
||||
/* We only watch structs and arrays if user asked
|
||||
for it explicitly, never if they just happen to
|
||||
@@ -801,8 +801,8 @@ insert_watchpoints_for_new_thread (ptid_
|
||||
@@ -860,8 +860,8 @@ insert_watchpoints_for_new_thread (ptid_
|
||||
CORE_ADDR addr;
|
||||
int len, type;
|
||||
|
||||
@ -913,7 +952,7 @@ Index: gdb-6.6/gdb/breakpoint.c
|
||||
type = hw_write;
|
||||
if (b->owner->type == bp_read_watchpoint)
|
||||
type = hw_read;
|
||||
@@ -2682,12 +2682,12 @@ mark_triggered_watchpoints (CORE_ADDR st
|
||||
@@ -2749,12 +2749,12 @@ mark_triggered_watchpoints (CORE_ADDR st
|
||||
|| b->type == bp_read_watchpoint
|
||||
|| b->type == bp_access_watchpoint)
|
||||
{
|
||||
@ -929,7 +968,7 @@ Index: gdb-6.6/gdb/breakpoint.c
|
||||
|
||||
if (v == b->val_chain
|
||||
|| (TYPE_CODE (vtype) != TYPE_CODE_STRUCT
|
||||
@@ -2695,11 +2695,11 @@ mark_triggered_watchpoints (CORE_ADDR st
|
||||
@@ -2762,11 +2762,11 @@ mark_triggered_watchpoints (CORE_ADDR st
|
||||
{
|
||||
CORE_ADDR vaddr;
|
||||
|
||||
@ -943,7 +982,7 @@ Index: gdb-6.6/gdb/breakpoint.c
|
||||
b->watchpoint_triggered = 1;
|
||||
}
|
||||
}
|
||||
@@ -2869,12 +2869,12 @@ bpstat_stop_status (CORE_ADDR bp_addr, p
|
||||
@@ -2936,12 +2936,12 @@ bpstat_stop_status (CORE_ADDR bp_addr, p
|
||||
bs->stop = 0;
|
||||
continue;
|
||||
}
|
||||
@ -959,7 +998,7 @@ Index: gdb-6.6/gdb/breakpoint.c
|
||||
|
||||
if (v == b->val_chain
|
||||
|| (TYPE_CODE (vtype) != TYPE_CODE_STRUCT
|
||||
@@ -2882,11 +2882,11 @@ bpstat_stop_status (CORE_ADDR bp_addr, p
|
||||
@@ -2949,11 +2949,11 @@ bpstat_stop_status (CORE_ADDR bp_addr, p
|
||||
{
|
||||
CORE_ADDR vaddr;
|
||||
|
||||
@ -973,7 +1012,7 @@ Index: gdb-6.6/gdb/breakpoint.c
|
||||
must_check_value = 1;
|
||||
}
|
||||
}
|
||||
@@ -3937,6 +3937,7 @@ describe_other_breakpoints (CORE_ADDR pc
|
||||
@@ -3996,6 +3996,7 @@ describe_other_breakpoints (CORE_ADDR pc
|
||||
printf_filtered ("%s%s ",
|
||||
((b->enable_state == bp_disabled ||
|
||||
b->enable_state == bp_shlib_disabled ||
|
||||
@ -981,7 +1020,7 @@ Index: gdb-6.6/gdb/breakpoint.c
|
||||
b->enable_state == bp_call_disabled)
|
||||
? " (disabled)"
|
||||
: b->enable_state == bp_permanent
|
||||
@@ -4615,6 +4616,62 @@ re_enable_breakpoints_in_shlibs (void)
|
||||
@@ -4669,6 +4670,62 @@ re_enable_breakpoints_in_shlibs (void)
|
||||
}
|
||||
}
|
||||
|
||||
@ -1044,7 +1083,7 @@ Index: gdb-6.6/gdb/breakpoint.c
|
||||
static void
|
||||
solib_load_unload_1 (char *hookname, int tempflag, char *dll_pathname,
|
||||
char *cond_string, enum bptype bp_kind)
|
||||
@@ -6961,6 +7018,7 @@ delete_breakpoint (struct breakpoint *bp
|
||||
@@ -7084,6 +7141,7 @@ delete_breakpoint (struct breakpoint *bp
|
||||
&& !b->loc->duplicate
|
||||
&& b->enable_state != bp_disabled
|
||||
&& b->enable_state != bp_shlib_disabled
|
||||
@ -1052,7 +1091,7 @@ Index: gdb-6.6/gdb/breakpoint.c
|
||||
&& !b->pending
|
||||
&& b->enable_state != bp_call_disabled)
|
||||
{
|
||||
@@ -7176,7 +7234,8 @@ breakpoint_re_set_one (void *bint)
|
||||
@@ -7308,7 +7366,8 @@ breakpoint_re_set_one (void *bint)
|
||||
break;
|
||||
|
||||
save_enable = b->enable_state;
|
||||
@ -1062,20 +1101,20 @@ Index: gdb-6.6/gdb/breakpoint.c
|
||||
b->enable_state = bp_disabled;
|
||||
else
|
||||
/* If resetting a shlib-disabled breakpoint, we don't want to
|
||||
Index: gdb-6.6/gdb/solib.c
|
||||
Index: gdb-6.7/gdb/solib.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/solib.c
|
||||
+++ gdb-6.6/gdb/solib.c
|
||||
@@ -72,6 +72,8 @@ solib_ops (struct gdbarch *gdbarch)
|
||||
--- gdb-6.7.orig/gdb/solib.c 2007-08-23 20:08:38.000000000 +0200
|
||||
+++ gdb-6.7/gdb/solib.c 2007-10-13 05:32:46.000000000 +0200
|
||||
@@ -78,6 +78,8 @@ set_solib_ops (struct gdbarch *gdbarch,
|
||||
|
||||
/* external data declarations */
|
||||
|
||||
+int debug_solib;
|
||||
+
|
||||
/* FIXME: gdbarch needs to control this variable */
|
||||
/* FIXME: gdbarch needs to control this variable, or else every
|
||||
configuration needs to call set_solib_ops. */
|
||||
struct target_so_ops *current_target_so_ops;
|
||||
|
||||
@@ -102,6 +104,8 @@ The search path for loading non-absolute
|
||||
@@ -105,6 +107,8 @@ The search path for loading non-absolute
|
||||
value);
|
||||
}
|
||||
|
||||
@ -1084,7 +1123,7 @@ Index: gdb-6.6/gdb/solib.c
|
||||
/*
|
||||
|
||||
GLOBAL FUNCTION
|
||||
@@ -376,7 +380,6 @@ free_so (struct so_list *so)
|
||||
@@ -394,7 +398,6 @@ free_so (struct so_list *so)
|
||||
xfree (so);
|
||||
}
|
||||
|
||||
@ -1092,7 +1131,7 @@ Index: gdb-6.6/gdb/solib.c
|
||||
/* Return address of first so_list entry in master shared object list. */
|
||||
struct so_list *
|
||||
master_so_list (void)
|
||||
@@ -384,7 +387,6 @@ master_so_list (void)
|
||||
@@ -402,7 +405,6 @@ master_so_list (void)
|
||||
return so_list_head;
|
||||
}
|
||||
|
||||
@ -1100,7 +1139,7 @@ Index: gdb-6.6/gdb/solib.c
|
||||
/* A small stub to get us past the arg-passing pinhole of catch_errors. */
|
||||
|
||||
static int
|
||||
@@ -396,15 +398,40 @@ symbol_add_stub (void *arg)
|
||||
@@ -414,15 +416,40 @@ symbol_add_stub (void *arg)
|
||||
/* Have we already loaded this shared object? */
|
||||
ALL_OBJFILES (so->objfile)
|
||||
{
|
||||
@ -1144,7 +1183,7 @@ Index: gdb-6.6/gdb/solib.c
|
||||
free_section_addr_info (sap);
|
||||
|
||||
return (1);
|
||||
@@ -532,6 +559,10 @@ update_solib_list (int from_tty, struct
|
||||
@@ -550,6 +577,10 @@ update_solib_list (int from_tty, struct
|
||||
the inferior's current list. */
|
||||
while (i)
|
||||
{
|
||||
@ -1155,7 +1194,7 @@ Index: gdb-6.6/gdb/solib.c
|
||||
if (! strcmp (gdb->so_original_name, i->so_original_name))
|
||||
break;
|
||||
|
||||
@@ -585,28 +616,7 @@ update_solib_list (int from_tty, struct
|
||||
@@ -603,28 +634,7 @@ update_solib_list (int from_tty, struct
|
||||
/* Fill in the rest of each of the `struct so_list' nodes. */
|
||||
for (i = inferior; i; i = i->next)
|
||||
{
|
||||
@ -1185,7 +1224,7 @@ Index: gdb-6.6/gdb/solib.c
|
||||
|
||||
/* Notify any observer that the shared object has been
|
||||
loaded now that we've added it to GDB's tables. */
|
||||
@@ -702,6 +712,41 @@ solib_add (char *pattern, int from_tty,
|
||||
@@ -720,6 +730,41 @@ solib_add (char *pattern, int from_tty,
|
||||
}
|
||||
}
|
||||
|
||||
@ -1227,7 +1266,7 @@ Index: gdb-6.6/gdb/solib.c
|
||||
|
||||
/*
|
||||
|
||||
@@ -1006,4 +1051,12 @@ This takes precedence over the environme
|
||||
@@ -1045,4 +1090,12 @@ This takes precedence over the environme
|
||||
reload_shared_libraries,
|
||||
show_solib_search_path,
|
||||
&setlist, &showlist);
|
||||
@ -1240,11 +1279,11 @@ Index: gdb-6.6/gdb/solib.c
|
||||
+ NULL, NULL,
|
||||
+ &setdebuglist, &showdebuglist);
|
||||
}
|
||||
Index: gdb-6.6/gdb/elfread.c
|
||||
Index: gdb-6.7/gdb/elfread.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/elfread.c
|
||||
+++ gdb-6.6/gdb/elfread.c
|
||||
@@ -556,7 +556,7 @@ elf_symfile_read (struct objfile *objfil
|
||||
--- gdb-6.7.orig/gdb/elfread.c 2007-08-23 20:08:28.000000000 +0200
|
||||
+++ gdb-6.7/gdb/elfread.c 2007-10-13 05:29:58.000000000 +0200
|
||||
@@ -611,7 +611,7 @@ elf_symfile_read (struct objfile *objfil
|
||||
/* If we are reinitializing, or if we have never loaded syms yet,
|
||||
set table to empty. MAINLINE is cleared so that *_read_psymtab
|
||||
functions do not all also re-initialize the psymbol table. */
|
||||
@ -1253,3 +1292,125 @@ Index: gdb-6.6/gdb/elfread.c
|
||||
{
|
||||
init_psymbol_list (objfile, 0);
|
||||
mainline = 0;
|
||||
|
||||
2007-10-31 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
Port to GDB-6.7 - workaround too early breakpoint address analysis.
|
||||
|
||||
diff -u -X /home/jkratoch/.diffi.list -rup gdb-6.7-orig/gdb/Makefile.in gdb-6.7-patched/gdb/Makefile.in
|
||||
--- gdb-6.7-orig/gdb/Makefile.in 2007-10-31 12:50:10.000000000 +0100
|
||||
+++ gdb-6.7-patched/gdb/Makefile.in 2007-10-31 00:38:11.000000000 +0100
|
||||
@@ -1824,7 +1824,7 @@ amd64-tdep.o: amd64-tdep.c $(defs_h) $(a
|
||||
$(dummy_frame_h) $(frame_h) $(frame_base_h) $(frame_unwind_h) \
|
||||
$(inferior_h) $(gdbcmd_h) $(gdbcore_h) $(objfiles_h) $(regcache_h) \
|
||||
$(regset_h) $(symfile_h) $(gdb_assert_h) $(amd64_tdep_h) \
|
||||
- $(i387_tdep_h)
|
||||
+ $(i387_tdep_h) $(exceptions_h)
|
||||
annotate.o: annotate.c $(defs_h) $(annotate_h) $(value_h) $(target_h) \
|
||||
$(gdbtypes_h) $(breakpoint_h)
|
||||
arch-utils.o: arch-utils.c $(defs_h) $(arch_utils_h) $(buildsym_h) \
|
||||
diff -u -X /home/jkratoch/.diffi.list -rup gdb-6.7-orig/gdb/amd64-tdep.c gdb-6.7-patched/gdb/amd64-tdep.c
|
||||
--- gdb-6.7-orig/gdb/amd64-tdep.c 2007-10-31 12:50:09.000000000 +0100
|
||||
+++ gdb-6.7-patched/gdb/amd64-tdep.c 2007-10-31 00:46:13.000000000 +0100
|
||||
@@ -36,6 +36,7 @@
|
||||
#include "symfile.h"
|
||||
#include "dwarf2-frame.h"
|
||||
#include "gdb_assert.h"
|
||||
+#include "exceptions.h"
|
||||
|
||||
#include "amd64-tdep.h"
|
||||
#include "i387-tdep.h"
|
||||
@@ -734,16 +735,28 @@ amd64_alloc_frame_cache (void)
|
||||
Any function that doesn't start with this sequence will be assumed
|
||||
to have no prologue and thus no valid frame pointer in %rbp. */
|
||||
|
||||
-static CORE_ADDR
|
||||
-amd64_analyze_prologue (CORE_ADDR pc, CORE_ADDR current_pc,
|
||||
- struct amd64_frame_cache *cache)
|
||||
+struct amd64_analyze_prologue_data
|
||||
+ {
|
||||
+ CORE_ADDR pc, current_pc;
|
||||
+ struct amd64_frame_cache *cache;
|
||||
+ CORE_ADDR retval;
|
||||
+ };
|
||||
+
|
||||
+static int
|
||||
+amd64_analyze_prologue_1 (void *data_pointer)
|
||||
{
|
||||
+ struct amd64_analyze_prologue_data *data = data_pointer;
|
||||
+ CORE_ADDR pc = data->pc, current_pc = data->current_pc;
|
||||
+ struct amd64_frame_cache *cache = data->cache;
|
||||
static gdb_byte proto[3] = { 0x48, 0x89, 0xe5 }; /* movq %rsp, %rbp */
|
||||
gdb_byte buf[3];
|
||||
gdb_byte op;
|
||||
|
||||
if (current_pc <= pc)
|
||||
- return current_pc;
|
||||
+ {
|
||||
+ data->retval = current_pc;
|
||||
+ return 1;
|
||||
+ }
|
||||
|
||||
op = read_memory_unsigned_integer (pc, 1);
|
||||
|
||||
@@ -756,18 +769,57 @@ amd64_analyze_prologue (CORE_ADDR pc, CO
|
||||
|
||||
/* If that's all, return now. */
|
||||
if (current_pc <= pc + 1)
|
||||
- return current_pc;
|
||||
+ {
|
||||
+ data->retval = current_pc;
|
||||
+ return 1;
|
||||
+ }
|
||||
|
||||
/* Check for `movq %rsp, %rbp'. */
|
||||
read_memory (pc + 1, buf, 3);
|
||||
if (memcmp (buf, proto, 3) != 0)
|
||||
- return pc + 1;
|
||||
+ {
|
||||
+ data->retval = pc + 1;
|
||||
+ return 1;
|
||||
+ }
|
||||
|
||||
/* OK, we actually have a frame. */
|
||||
cache->frameless_p = 0;
|
||||
- return pc + 4;
|
||||
+ data->retval = pc + 4;
|
||||
+ return 1;
|
||||
}
|
||||
|
||||
+ data->retval = pc;
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
+/* Catch memory read errors and return just PC in such case.
|
||||
+ It occurs very early on enable_break->new_symfile_objfile->
|
||||
+ ->breakpoint_re_set->decode_line_1->decode_variable_1->
|
||||
+ ->find_function_start_sal */
|
||||
+
|
||||
+static CORE_ADDR
|
||||
+amd64_analyze_prologue (CORE_ADDR pc, CORE_ADDR current_pc,
|
||||
+ struct amd64_frame_cache *cache)
|
||||
+{
|
||||
+ int status;
|
||||
+ struct amd64_analyze_prologue_data data;
|
||||
+ struct ui_file *saved_gdb_stderr;
|
||||
+
|
||||
+ /* Suppress error messages. */
|
||||
+ saved_gdb_stderr = gdb_stderr;
|
||||
+ gdb_stderr = ui_file_new ();
|
||||
+
|
||||
+ data.pc = pc;
|
||||
+ data.current_pc = current_pc;
|
||||
+ data.cache = cache;
|
||||
+ status = catch_errors (amd64_analyze_prologue_1, &data, "", RETURN_MASK_ALL);
|
||||
+
|
||||
+ /* Stop suppressing error messages. */
|
||||
+ ui_file_delete (gdb_stderr);
|
||||
+ gdb_stderr = saved_gdb_stderr;
|
||||
+
|
||||
+ if (status)
|
||||
+ return data.retval;
|
||||
return pc;
|
||||
}
|
||||
|
||||
|
@ -3,64 +3,29 @@
|
||||
* solib-svr4.c (enable_break): Convert a symbol descriptor into
|
||||
the corresponding function entry point.
|
||||
(solib_break_names): Delete "._dl_debug_state", no longer needed.
|
||||
|
||||
2007-10-12 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
Port to GDB-6.7.
|
||||
|
||||
*** ./gdb/solib-svr4.c.dist Fri Oct 22 11:50:31 2004
|
||||
--- ./gdb/solib-svr4.c Fri Oct 22 11:53:19 2004
|
||||
***************
|
||||
*** 86,102 ****
|
||||
"_dl_debug_state",
|
||||
"rtld_db_dlactivity",
|
||||
"_rtld_debug_state",
|
||||
-
|
||||
- /* On the 64-bit PowerPC, the linker symbol with the same name as
|
||||
- the C function points to a function descriptor, not to the entry
|
||||
- point. The linker symbol whose name is the C function name
|
||||
- prefixed with a '.' points to the function's entry point. So
|
||||
- when we look through this table, we ignore symbols that point
|
||||
- into the data section (thus skipping the descriptor's symbol),
|
||||
- and eventually try this one, giving us the real entry point
|
||||
- address. */
|
||||
- "._dl_debug_state",
|
||||
-
|
||||
NULL
|
||||
};
|
||||
|
||||
--- 86,91 ----
|
||||
***************
|
||||
*** 1284,1301 ****
|
||||
/* Now try to set a breakpoint in the dynamic linker. */
|
||||
for (bkpt_namep = solib_break_names; *bkpt_namep != NULL; bkpt_namep++)
|
||||
{
|
||||
! /* On ABI's that use function descriptors, there are usually
|
||||
! two linker symbols associated with each C function: one
|
||||
! pointing at the actual entry point of the machine code,
|
||||
! and one pointing at the function's descriptor. The
|
||||
! latter symbol has the same name as the C function.
|
||||
!
|
||||
! What we're looking for here is the machine code entry
|
||||
! point, so we are only interested in symbols in code
|
||||
! sections. */
|
||||
! sym_addr = bfd_lookup_symbol (tmp_bfd, *bkpt_namep, SEC_CODE);
|
||||
if (sym_addr != 0)
|
||||
! break;
|
||||
}
|
||||
|
||||
/* We're done with both the temporary bfd and target. Remember,
|
||||
--- 1273,1289 ----
|
||||
/* Now try to set a breakpoint in the dynamic linker. */
|
||||
for (bkpt_namep = solib_break_names; *bkpt_namep != NULL; bkpt_namep++)
|
||||
{
|
||||
! sym_addr = bfd_lookup_symbol (tmp_bfd, *bkpt_namep, 0);
|
||||
if (sym_addr != 0)
|
||||
! {
|
||||
! /* The symbol might be a descriptor, convert to into the
|
||||
! corresponding code address. */
|
||||
! sym_addr = gdbarch_convert_from_func_ptr_addr (current_gdbarch,
|
||||
! sym_addr,
|
||||
! tmp_bfd_target);
|
||||
! if (sym_addr != 0)
|
||||
! break;
|
||||
! }
|
||||
}
|
||||
|
||||
/* We're done with both the temporary bfd and target. Remember,
|
||||
Index: gdb-6.7/gdb/solib-svr4.c
|
||||
===================================================================
|
||||
--- gdb-6.7.orig/gdb/solib-svr4.c 2007-10-09 20:03:30.000000000 +0200
|
||||
+++ gdb-6.7/gdb/solib-svr4.c 2007-10-12 22:34:03.000000000 +0200
|
||||
@@ -1089,7 +1089,15 @@ enable_break (void)
|
||||
{
|
||||
sym_addr = bfd_lookup_symbol (tmp_bfd, *bkpt_namep);
|
||||
if (sym_addr != 0)
|
||||
- break;
|
||||
+ {
|
||||
+ /* The symbol might be a descriptor, convert to into the
|
||||
+ corresponding code address. */
|
||||
+ sym_addr = gdbarch_convert_from_func_ptr_addr (current_gdbarch,
|
||||
+ sym_addr,
|
||||
+ tmp_bfd_target);
|
||||
+ if (sym_addr != 0)
|
||||
+ break;
|
||||
+ }
|
||||
}
|
||||
|
||||
if (sym_addr != 0)
|
||||
|
@ -83,3 +83,12 @@
|
||||
{
|
||||
xfree (basename);
|
||||
xfree (dir);
|
||||
@@ -1952,7 +1952,7 @@ find_separate_debug_file (struct objfile
|
||||
strcat (debugfile, "/");
|
||||
strcat (debugfile, basename);
|
||||
|
||||
- if (separate_debug_file_exists (debugfile, crc32))
|
||||
+ if (separate_debug_file_exists (debugfile, crc32, objfile->name))
|
||||
{
|
||||
xfree (build_id_filename);
|
||||
xfree (canon_name);
|
||||
|
@ -3,13 +3,17 @@
|
||||
* top.c (gdb_readline_wrapper): Ensure terminal is gdb's before calling
|
||||
readline.
|
||||
|
||||
Index: gdb-6.5/gdb/top.c
|
||||
2007-10-14 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
Port to GDB-6.7.
|
||||
|
||||
Index: gdb-6.7/gdb/top.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/top.c 2006-03-29 19:53:33.000000000 -0300
|
||||
+++ gdb-6.5/gdb/top.c 2006-07-07 02:29:42.000000000 -0300
|
||||
@@ -728,6 +728,14 @@ gdb_readline_wrapper (char *prompt)
|
||||
after_char_processing_hook = NULL;
|
||||
}
|
||||
--- gdb-6.7.orig/gdb/top.c 2007-09-02 23:13:56.000000000 +0200
|
||||
+++ gdb-6.7/gdb/top.c 2007-10-14 23:38:27.000000000 +0200
|
||||
@@ -795,6 +795,14 @@ gdb_readline_wrapper (char *prompt)
|
||||
|
||||
back_to = make_cleanup (gdb_readline_wrapper_cleanup, cleanup);
|
||||
|
||||
+ /* Before calling readline, ensure we have the terminal. If we don't
|
||||
+ have the terminal and call readline, we risk the possibility of
|
||||
@ -19,6 +23,6 @@ Index: gdb-6.5/gdb/top.c
|
||||
+ a page break prompt. */
|
||||
+ terminal_ours ();
|
||||
+
|
||||
return readline (prompt);
|
||||
}
|
||||
|
||||
/* Display our prompt and prevent double prompt display. */
|
||||
display_gdb_prompt (prompt);
|
||||
rl_already_prompted = 1;
|
||||
|
@ -1,29 +1,13 @@
|
||||
Index: gdb/testsuite/ChangeLog
|
||||
2005-01-21 Jeff Johnston <jjohnstn@redhat.com>
|
||||
[base]
|
||||
|
||||
* gdb.cp/constructortest.exp: New test.
|
||||
* gdb.cp/constructortest.cc: Ditto.
|
||||
* gdb.cp/templates.exp: Change break of dtor to be fully quoted.
|
||||
2007-10-14 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
2007-09-22 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
Port to GDB-6.7.
|
||||
|
||||
* gdb.cp/constructortest.exp, gdb.cp/constructortest.cc: Test also the
|
||||
`$delete' destructor variant.
|
||||
|
||||
2007-09-25 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* gdb.cp/constructortest.exp: Delete the FIXME workaround of restarting
|
||||
the whole GDB.
|
||||
|
||||
2007-10-05 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* gdb.cp/constructortest.exp: Test BREAKPOINT_RE_SET for multiple PCs
|
||||
by PIE.
|
||||
* gdb.cp/constructortest.exp: Handle the change of settings breakpoints
|
||||
always at all the ctor/dtor variants.
|
||||
|
||||
--- gdb-6.3/gdb/testsuite/gdb.cp/constructortest.cc.fix Fri Jan 21 17:06:56 2005
|
||||
+++ gdb-6.3/gdb/testsuite/gdb.cp/constructortest.cc Fri Jan 21 17:05:18 2005
|
||||
Index: gdb-6.7/gdb/testsuite/gdb.cp/constructortest.cc
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gdb-6.7/gdb/testsuite/gdb.cp/constructortest.cc 2007-10-14 23:29:48.000000000 +0200
|
||||
@@ -0,0 +1,99 @@
|
||||
+/* This testcase is part of GDB, the GNU debugger.
|
||||
+
|
||||
@ -124,8 +108,10 @@ Index: gdb/testsuite/ChangeLog
|
||||
+{
|
||||
+ y = 2; /* First line D */
|
||||
+}
|
||||
--- gdb-6.3/gdb/testsuite/gdb.cp/constructortest.exp.fix Fri Jan 21 17:07:02 2005
|
||||
+++ gdb-6.3/gdb/testsuite/gdb.cp/constructortest.exp Fri Jan 21 17:05:29 2005
|
||||
Index: gdb-6.7/gdb/testsuite/gdb.cp/constructortest.exp
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gdb-6.7/gdb/testsuite/gdb.cp/constructortest.exp 2007-10-14 23:29:48.000000000 +0200
|
||||
@@ -0,0 +1,148 @@
|
||||
+# This testcase is part of GDB, the GNU debugger.
|
||||
+
|
||||
@ -275,14 +261,10 @@ Index: gdb/testsuite/ChangeLog
|
||||
+}
|
||||
+
|
||||
+gdb_continue_to_breakpoint "First line ~C"
|
||||
--- gdb-6.3/gdb/testsuite/gdb.cp/templates.exp.fix Fri Jan 21 17:07:10 2005
|
||||
+++ gdb-6.3/gdb/testsuite/gdb.cp/templates.exp Fri Jan 21 17:09:09 2005
|
||||
@@ -1,4 +1,4 @@
|
||||
-# Copyright 1992, 1994, 1995, 1996, 1997, 1999, 2000, 2002, 2003, 2004
|
||||
+# Copyright 1992, 1994, 1995, 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005
|
||||
# Free Software Foundation, Inc.
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
Index: gdb-6.7/gdb/testsuite/gdb.cp/templates.exp
|
||||
===================================================================
|
||||
--- gdb-6.7.orig/gdb/testsuite/gdb.cp/templates.exp 2007-08-23 20:14:17.000000000 +0200
|
||||
+++ gdb-6.7/gdb/testsuite/gdb.cp/templates.exp 2007-10-14 23:29:48.000000000 +0200
|
||||
@@ -142,7 +142,7 @@ proc test_template_breakpoints {} {
|
||||
# See CLLbs14792
|
||||
if {$hp_aCC_compiler} {setup_xfail hppa*-*-* CLLbs14792}
|
||||
|
@ -1,38 +1,43 @@
|
||||
Index: gdb-6.5/gdb/testsuite/configure.ac
|
||||
2007-10-13 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
Port to GDB-6.7.
|
||||
|
||||
Index: gdb-6.7/gdb/testsuite/configure.ac
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/testsuite/configure.ac 2006-07-07 01:12:31.000000000 -0300
|
||||
+++ gdb-6.5/gdb/testsuite/configure.ac 2006-07-07 01:13:23.000000000 -0300
|
||||
@@ -114,4 +114,4 @@ AC_OUTPUT([Makefile \
|
||||
--- gdb-6.7.orig/gdb/testsuite/configure.ac 2007-08-23 19:58:44.000000000 +0200
|
||||
+++ gdb-6.7/gdb/testsuite/configure.ac 2007-10-13 05:28:28.000000000 +0200
|
||||
@@ -114,5 +114,5 @@ AC_OUTPUT([Makefile \
|
||||
gdb.cp/Makefile gdb.disasm/Makefile gdb.dwarf2/Makefile \
|
||||
gdb.fortran/Makefile gdb.server/Makefile \
|
||||
gdb.java/Makefile gdb.mi/Makefile \
|
||||
- gdb.objc/Makefile gdb.threads/Makefile gdb.trace/Makefile])
|
||||
+ gdb.objc/Makefile gdb.pie/Makefile gdb.threads/Makefile gdb.trace/Makefile])
|
||||
Index: gdb-6.5/gdb/testsuite/configure
|
||||
- gdb.objc/Makefile gdb.threads/Makefile gdb.trace/Makefile \
|
||||
+ gdb.objc/Makefile gdb.pie/Makefile gdb.threads/Makefile gdb.trace/Makefile \
|
||||
gdb.xml/Makefile])
|
||||
Index: gdb-6.7/gdb/testsuite/configure
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/testsuite/configure 2006-07-07 01:12:31.000000000 -0300
|
||||
+++ gdb-6.5/gdb/testsuite/configure 2006-07-07 01:13:23.000000000 -0300
|
||||
@@ -3075,7 +3075,7 @@ done
|
||||
--- gdb-6.7.orig/gdb/testsuite/configure 2007-01-23 18:11:54.000000000 +0100
|
||||
+++ gdb-6.7/gdb/testsuite/configure 2007-10-13 05:29:11.000000000 +0200
|
||||
@@ -3102,7 +3102,7 @@ done
|
||||
|
||||
|
||||
|
||||
- ac_config_files="$ac_config_files Makefile gdb.ada/Makefile gdb.arch/Makefile gdb.asm/Makefile gdb.base/Makefile gdb.cp/Makefile gdb.disasm/Makefile gdb.dwarf2/Makefile gdb.fortran/Makefile gdb.server/Makefile gdb.java/Makefile gdb.mi/Makefile gdb.objc/Makefile gdb.threads/Makefile gdb.trace/Makefile"
|
||||
+ ac_config_files="$ac_config_files Makefile gdb.ada/Makefile gdb.arch/Makefile gdb.asm/Makefile gdb.base/Makefile gdb.cp/Makefile gdb.disasm/Makefile gdb.dwarf2/Makefile gdb.fortran/Makefile gdb.server/Makefile gdb.java/Makefile gdb.mi/Makefile gdb.objc/Makefile gdb.pie/Makefile gdb.threads/Makefile gdb.trace/Makefile"
|
||||
- ac_config_files="$ac_config_files Makefile gdb.ada/Makefile gdb.arch/Makefile gdb.asm/Makefile gdb.base/Makefile gdb.cp/Makefile gdb.disasm/Makefile gdb.dwarf2/Makefile gdb.fortran/Makefile gdb.server/Makefile gdb.java/Makefile gdb.mi/Makefile gdb.objc/Makefile gdb.threads/Makefile gdb.trace/Makefile gdb.xml/Makefile"
|
||||
+ ac_config_files="$ac_config_files Makefile gdb.ada/Makefile gdb.arch/Makefile gdb.asm/Makefile gdb.base/Makefile gdb.cp/Makefile gdb.disasm/Makefile gdb.dwarf2/Makefile gdb.fortran/Makefile gdb.server/Makefile gdb.java/Makefile gdb.mi/Makefile gdb.objc/Makefile gdb.pie/Makefile gdb.threads/Makefile gdb.trace/Makefile gdb.xml/Makefile"
|
||||
cat >confcache <<\_ACEOF
|
||||
# This file is a shell script that caches the results of configure
|
||||
# tests run on this system so they can be shared between configure
|
||||
@@ -3639,6 +3639,7 @@ do
|
||||
@@ -3666,6 +3666,7 @@ do
|
||||
"gdb.java/Makefile" ) CONFIG_FILES="$CONFIG_FILES gdb.java/Makefile" ;;
|
||||
"gdb.mi/Makefile" ) CONFIG_FILES="$CONFIG_FILES gdb.mi/Makefile" ;;
|
||||
"gdb.objc/Makefile" ) CONFIG_FILES="$CONFIG_FILES gdb.objc/Makefile" ;;
|
||||
+ "gdb.pie/Makefile" ) CONFIG_FILES="$CONFIG_FILES gdb.pie/Makefile" ;;
|
||||
"gdb.threads/Makefile" ) CONFIG_FILES="$CONFIG_FILES gdb.threads/Makefile" ;;
|
||||
"gdb.trace/Makefile" ) CONFIG_FILES="$CONFIG_FILES gdb.trace/Makefile" ;;
|
||||
*) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
|
||||
Index: gdb-6.5/gdb/testsuite/gdb.pie/attach.c
|
||||
"gdb.xml/Makefile" ) CONFIG_FILES="$CONFIG_FILES gdb.xml/Makefile" ;;
|
||||
Index: gdb-6.7/gdb/testsuite/gdb.pie/attach.c
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gdb-6.5/gdb/testsuite/gdb.pie/attach.c 2006-07-07 01:13:23.000000000 -0300
|
||||
+++ gdb-6.7/gdb/testsuite/gdb.pie/attach.c 2007-10-13 05:27:45.000000000 +0200
|
||||
@@ -0,0 +1,20 @@
|
||||
+/* This program is intended to be started outside of gdb, and then
|
||||
+ attached to by gdb. Thus, it simply spins in a loop. The loop
|
||||
@ -54,10 +59,10 @@ Index: gdb-6.5/gdb/testsuite/gdb.pie/attach.c
|
||||
+ }
|
||||
+ return 0;
|
||||
+}
|
||||
Index: gdb-6.5/gdb/testsuite/gdb.pie/attach2.c
|
||||
Index: gdb-6.7/gdb/testsuite/gdb.pie/attach2.c
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gdb-6.5/gdb/testsuite/gdb.pie/attach2.c 2006-07-07 01:13:23.000000000 -0300
|
||||
+++ gdb-6.7/gdb/testsuite/gdb.pie/attach2.c 2007-10-13 05:27:45.000000000 +0200
|
||||
@@ -0,0 +1,24 @@
|
||||
+/* This program is intended to be started outside of gdb, and then
|
||||
+ attached to by gdb. Thus, it simply spins in a loop. The loop
|
||||
@ -83,10 +88,10 @@ Index: gdb-6.5/gdb/testsuite/gdb.pie/attach2.c
|
||||
+ }
|
||||
+ return (0);
|
||||
+}
|
||||
Index: gdb-6.5/gdb/testsuite/gdb.pie/break.c
|
||||
Index: gdb-6.7/gdb/testsuite/gdb.pie/break.c
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gdb-6.5/gdb/testsuite/gdb.pie/break.c 2006-07-07 01:13:23.000000000 -0300
|
||||
+++ gdb-6.7/gdb/testsuite/gdb.pie/break.c 2007-10-13 05:27:45.000000000 +0200
|
||||
@@ -0,0 +1,146 @@
|
||||
+/* This testcase is part of GDB, the GNU debugger.
|
||||
+
|
||||
@ -234,10 +239,10 @@ Index: gdb-6.5/gdb/testsuite/gdb.pie/break.c
|
||||
+ }
|
||||
+ return 0;
|
||||
+}
|
||||
Index: gdb-6.5/gdb/testsuite/gdb.pie/break1.c
|
||||
Index: gdb-6.7/gdb/testsuite/gdb.pie/break1.c
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gdb-6.5/gdb/testsuite/gdb.pie/break1.c 2006-07-07 01:13:23.000000000 -0300
|
||||
+++ gdb-6.7/gdb/testsuite/gdb.pie/break1.c 2007-10-13 05:27:45.000000000 +0200
|
||||
@@ -0,0 +1,44 @@
|
||||
+/* This testcase is part of GDB, the GNU debugger.
|
||||
+
|
||||
@ -283,10 +288,10 @@ Index: gdb-6.5/gdb/testsuite/gdb.pie/break1.c
|
||||
+void marker3 (a, b) char *a, *b; {} /* set breakpoint 18 here */
|
||||
+void marker4 (d) long d; {} /* set breakpoint 13 here */
|
||||
+#endif
|
||||
Index: gdb-6.5/gdb/testsuite/gdb.pie/coremaker.c
|
||||
Index: gdb-6.7/gdb/testsuite/gdb.pie/coremaker.c
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gdb-6.5/gdb/testsuite/gdb.pie/coremaker.c 2006-07-07 01:13:23.000000000 -0300
|
||||
+++ gdb-6.7/gdb/testsuite/gdb.pie/coremaker.c 2007-10-13 05:27:45.000000000 +0200
|
||||
@@ -0,0 +1,142 @@
|
||||
+/* Copyright 1992, 1993, 1994, 1995, 1996, 1999
|
||||
+ Free Software Foundation, Inc.
|
||||
@ -430,10 +435,10 @@ Index: gdb-6.5/gdb/testsuite/gdb.pie/coremaker.c
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
Index: gdb-6.5/gdb/testsuite/gdb.pie/attach.exp
|
||||
Index: gdb-6.7/gdb/testsuite/gdb.pie/attach.exp
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gdb-6.5/gdb/testsuite/gdb.pie/attach.exp 2006-07-07 01:13:23.000000000 -0300
|
||||
+++ gdb-6.7/gdb/testsuite/gdb.pie/attach.exp 2007-10-13 05:27:45.000000000 +0200
|
||||
@@ -0,0 +1,432 @@
|
||||
+# Copyright 1997, 1999, 2002 Free Software Foundation, Inc.
|
||||
+
|
||||
@ -867,10 +872,10 @@ Index: gdb-6.5/gdb/testsuite/gdb.pie/attach.exp
|
||||
+do_call_attach_tests
|
||||
+
|
||||
+return 0
|
||||
Index: gdb-6.5/gdb/testsuite/gdb.pie/break.exp
|
||||
Index: gdb-6.7/gdb/testsuite/gdb.pie/break.exp
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gdb-6.5/gdb/testsuite/gdb.pie/break.exp 2006-07-07 01:13:23.000000000 -0300
|
||||
+++ gdb-6.7/gdb/testsuite/gdb.pie/break.exp 2007-10-13 05:27:45.000000000 +0200
|
||||
@@ -0,0 +1,973 @@
|
||||
+# Copyright 1988, 1990, 1991, 1992, 1994, 1995, 1996, 1997, 1998, 1999,
|
||||
+# 2000, 2002, 2003, 2004
|
||||
@ -1845,10 +1850,10 @@ Index: gdb-6.5/gdb/testsuite/gdb.pie/break.exp
|
||||
+ send_gdb "set args main\n"
|
||||
+ gdb_expect -re ".*$gdb_prompt $" {}
|
||||
+}
|
||||
Index: gdb-6.5/gdb/testsuite/gdb.pie/corefile.exp
|
||||
Index: gdb-6.7/gdb/testsuite/gdb.pie/corefile.exp
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gdb-6.5/gdb/testsuite/gdb.pie/corefile.exp 2006-07-07 01:13:23.000000000 -0300
|
||||
+++ gdb-6.7/gdb/testsuite/gdb.pie/corefile.exp 2007-10-13 05:27:45.000000000 +0200
|
||||
@@ -0,0 +1,243 @@
|
||||
+# Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000
|
||||
+# Free Software Foundation, Inc.
|
||||
@ -2093,10 +2098,10 @@ Index: gdb-6.5/gdb/testsuite/gdb.pie/corefile.exp
|
||||
+gdb_test "up" "#\[0-9\]* *\[0-9xa-fH'\]* in .* \\(\\).*" "up in corefile.exp (reinit)"
|
||||
+
|
||||
+gdb_test "core" "No core file now."
|
||||
Index: gdb-6.5/gdb/testsuite/gdb.pie/Makefile.in
|
||||
Index: gdb-6.7/gdb/testsuite/gdb.pie/Makefile.in
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gdb-6.5/gdb/testsuite/gdb.pie/Makefile.in 2006-07-07 01:13:23.000000000 -0300
|
||||
+++ gdb-6.7/gdb/testsuite/gdb.pie/Makefile.in 2007-10-13 05:27:45.000000000 +0200
|
||||
@@ -0,0 +1,19 @@
|
||||
+VPATH = @srcdir@
|
||||
+srcdir = @srcdir@
|
||||
|
@ -28,15 +28,18 @@
|
||||
* doc/observer.texi: Add two new observers for linux_new_thread
|
||||
and sigtrap.
|
||||
|
||||
Index: gdb-6.5/gdb/doc/observer.texi
|
||||
2007-10-13 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
Port to GDB-6.7.
|
||||
|
||||
Index: gdb-6.7/gdb/doc/observer.texi
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/doc/observer.texi 2006-07-11 12:30:23.000000000 -0300
|
||||
+++ gdb-6.5/gdb/doc/observer.texi 2006-07-11 15:00:15.000000000 -0300
|
||||
@@ -122,3 +122,13 @@ haven't been loaded yet.
|
||||
@deftypefun void solib_unloaded (struct so_list *@var{solib})
|
||||
The shared library specified by @var{solib} has been unloaded.
|
||||
--- gdb-6.7.orig/gdb/doc/observer.texi 2007-05-11 21:55:20.000000000 +0200
|
||||
+++ gdb-6.7/gdb/doc/observer.texi 2007-10-13 04:51:21.000000000 +0200
|
||||
@@ -129,3 +129,12 @@ Called with @var{objfile} equal to @code
|
||||
previously loaded symbol table data has now been invalidated.
|
||||
@end deftypefun
|
||||
+
|
||||
|
||||
+@deftypefun void linux_new_thread (ptid_t @var{ptid})
|
||||
+A new linux thread described by @var{ptid} has been officially attached
|
||||
+to by gdb.
|
||||
@ -46,11 +49,11 @@ Index: gdb-6.5/gdb/doc/observer.texi
|
||||
+A low-level SIGTRAP has been discovered. This notification can be used to save
|
||||
+additional state necessary if the trap is deferred for later handling.
|
||||
+@end deftypefun
|
||||
Index: gdb-6.5/gdb/infrun.c
|
||||
Index: gdb-6.7/gdb/infrun.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/infrun.c 2006-07-11 12:30:23.000000000 -0300
|
||||
+++ gdb-6.5/gdb/infrun.c 2006-07-11 15:00:17.000000000 -0300
|
||||
@@ -1703,9 +1703,19 @@ handle_inferior_event (struct execution_
|
||||
--- gdb-6.7.orig/gdb/infrun.c 2007-10-12 22:35:58.000000000 +0200
|
||||
+++ gdb-6.7/gdb/infrun.c 2007-10-13 04:50:11.000000000 +0200
|
||||
@@ -1784,9 +1784,19 @@ handle_inferior_event (struct execution_
|
||||
single step over a watchpoint without disabling the watchpoint. */
|
||||
if (HAVE_STEPPABLE_WATCHPOINT && STOPPED_BY_WATCHPOINT (ecs->ws))
|
||||
{
|
||||
@ -71,16 +74,16 @@ Index: gdb-6.5/gdb/infrun.c
|
||||
prepare_to_wait (ecs);
|
||||
return;
|
||||
}
|
||||
@@ -1715,6 +1725,8 @@ handle_inferior_event (struct execution_
|
||||
register or page protection watchpoint scheme need here? */
|
||||
if (HAVE_NONSTEPPABLE_WATCHPOINT && STOPPED_BY_WATCHPOINT (ecs->ws))
|
||||
@@ -1797,6 +1807,8 @@ handle_inferior_event (struct execution_
|
||||
if (gdbarch_have_nonsteppable_watchpoint (current_gdbarch)
|
||||
&& STOPPED_BY_WATCHPOINT (ecs->ws))
|
||||
{
|
||||
+ CORE_ADDR addr = 0;
|
||||
+
|
||||
/* At this point, we are stopped at an instruction which has
|
||||
attempted to write to a piece of memory under control of
|
||||
a watchpoint. The instruction hasn't actually executed
|
||||
@@ -1722,15 +1734,12 @@ handle_inferior_event (struct execution_
|
||||
@@ -1804,15 +1816,12 @@ handle_inferior_event (struct execution_
|
||||
now, we would get the old value, and therefore no change
|
||||
would seem to have occurred.
|
||||
|
||||
@ -102,7 +105,7 @@ Index: gdb-6.5/gdb/infrun.c
|
||||
|
||||
if (debug_infrun)
|
||||
fprintf_unfiltered (gdb_stdlog, "infrun: STOPPED_BY_WATCHPOINT\n");
|
||||
@@ -1801,6 +1810,41 @@ handle_inferior_event (struct execution_
|
||||
@@ -1883,6 +1892,41 @@ handle_inferior_event (struct execution_
|
||||
}
|
||||
}
|
||||
|
||||
@ -144,7 +147,7 @@ Index: gdb-6.5/gdb/infrun.c
|
||||
/* Look at the cause of the stop, and decide what to do.
|
||||
The alternatives are:
|
||||
1) break; to really stop and return to the debugger,
|
||||
@@ -1852,6 +1896,8 @@ handle_inferior_event (struct execution_
|
||||
@@ -1935,6 +1979,8 @@ handle_inferior_event (struct execution_
|
||||
See more comments in inferior.h. */
|
||||
if (stop_soon == STOP_QUIETLY_NO_SIGSTOP)
|
||||
{
|
||||
@ -153,11 +156,11 @@ Index: gdb-6.5/gdb/infrun.c
|
||||
stop_stepping (ecs);
|
||||
if (stop_signal == TARGET_SIGNAL_STOP)
|
||||
stop_signal = TARGET_SIGNAL_0;
|
||||
Index: gdb-6.5/gdb/breakpoint.c
|
||||
Index: gdb-6.7/gdb/breakpoint.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/breakpoint.c 2006-07-11 12:30:23.000000000 -0300
|
||||
+++ gdb-6.5/gdb/breakpoint.c 2006-07-11 15:00:19.000000000 -0300
|
||||
@@ -748,6 +748,90 @@ insert_catchpoint (struct ui_out *uo, vo
|
||||
--- gdb-6.7.orig/gdb/breakpoint.c 2007-08-30 00:07:47.000000000 +0200
|
||||
+++ gdb-6.7/gdb/breakpoint.c 2007-10-13 04:50:11.000000000 +0200
|
||||
@@ -806,6 +806,90 @@ insert_catchpoint (struct ui_out *uo, vo
|
||||
}
|
||||
}
|
||||
|
||||
@ -247,8 +250,8 @@ Index: gdb-6.5/gdb/breakpoint.c
|
||||
+
|
||||
/* Helper routine: free the value chain for a breakpoint (watchpoint). */
|
||||
|
||||
static void free_valchain (struct bp_location *b)
|
||||
@@ -1190,6 +1274,7 @@ remove_breakpoints (void)
|
||||
static void
|
||||
@@ -1294,6 +1378,7 @@ remove_breakpoints (void)
|
||||
{
|
||||
struct bp_location *b;
|
||||
int val;
|
||||
@ -256,7 +259,7 @@ Index: gdb-6.5/gdb/breakpoint.c
|
||||
|
||||
ALL_BP_LOCATIONS (b)
|
||||
{
|
||||
@@ -1197,10 +1282,10 @@ remove_breakpoints (void)
|
||||
@@ -1301,10 +1386,10 @@ remove_breakpoints (void)
|
||||
{
|
||||
val = remove_breakpoint (b, mark_uninserted);
|
||||
if (val != 0)
|
||||
@ -269,7 +272,7 @@ Index: gdb-6.5/gdb/breakpoint.c
|
||||
}
|
||||
|
||||
int
|
||||
@@ -2126,8 +2211,13 @@ print_it_typical (bpstat bs)
|
||||
@@ -2187,8 +2272,13 @@ print_it_typical (bpstat bs)
|
||||
break;
|
||||
|
||||
case bp_thread_event:
|
||||
@ -285,7 +288,7 @@ Index: gdb-6.5/gdb/breakpoint.c
|
||||
printf_filtered (_("Thread Event Breakpoint: gdb should not stop!\n"));
|
||||
return PRINT_NOTHING;
|
||||
break;
|
||||
@@ -2567,6 +2657,54 @@ which its expression is valid.\n");
|
||||
@@ -2636,6 +2726,54 @@ which its expression is valid.\n");
|
||||
}
|
||||
}
|
||||
|
||||
@ -340,7 +343,7 @@ Index: gdb-6.5/gdb/breakpoint.c
|
||||
/* Get a bpstat associated with having just stopped at address
|
||||
BP_ADDR in thread PTID. STOPPED_BY_WATCHPOINT is 1 if the
|
||||
target thinks we stopped due to a hardware watchpoint, 0 if we
|
||||
@@ -2697,82 +2835,61 @@ bpstat_stop_status (CORE_ADDR bp_addr, p
|
||||
@@ -2766,82 +2904,61 @@ bpstat_stop_status (CORE_ADDR bp_addr, p
|
||||
bs->stop = 1;
|
||||
bs->print = 1;
|
||||
|
||||
@ -468,7 +471,7 @@ Index: gdb-6.5/gdb/breakpoint.c
|
||||
{
|
||||
char *message = xstrprintf ("Error evaluating expression for watchpoint %d\n",
|
||||
b->number);
|
||||
@@ -2801,6 +2918,15 @@ bpstat_stop_status (CORE_ADDR bp_addr, p
|
||||
@@ -2870,6 +2987,15 @@ bpstat_stop_status (CORE_ADDR bp_addr, p
|
||||
break;
|
||||
case WP_VALUE_NOT_CHANGED:
|
||||
/* Stop. */
|
||||
@ -484,7 +487,7 @@ Index: gdb-6.5/gdb/breakpoint.c
|
||||
++(b->hit_count);
|
||||
break;
|
||||
default:
|
||||
@@ -2816,7 +2942,7 @@ bpstat_stop_status (CORE_ADDR bp_addr, p
|
||||
@@ -2885,7 +3011,7 @@ bpstat_stop_status (CORE_ADDR bp_addr, p
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -493,7 +496,7 @@ Index: gdb-6.5/gdb/breakpoint.c
|
||||
{
|
||||
/* This is a case where some watchpoint(s) triggered,
|
||||
but not at the address of this watchpoint (FOUND
|
||||
@@ -4112,6 +4238,7 @@ set_raw_breakpoint (struct symtab_and_li
|
||||
@@ -4186,6 +4312,7 @@ set_raw_breakpoint (struct symtab_and_li
|
||||
b->exec_pathname = NULL;
|
||||
b->ops = NULL;
|
||||
b->pending = 0;
|
||||
@ -501,11 +504,11 @@ Index: gdb-6.5/gdb/breakpoint.c
|
||||
|
||||
/* Add this breakpoint to the end of the chain
|
||||
so that a list of breakpoints will come out in order
|
||||
Index: gdb-6.5/gdb/breakpoint.h
|
||||
Index: gdb-6.7/gdb/breakpoint.h
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/breakpoint.h 2006-07-11 12:30:23.000000000 -0300
|
||||
+++ gdb-6.5/gdb/breakpoint.h 2006-07-11 15:00:17.000000000 -0300
|
||||
@@ -426,6 +426,11 @@ struct breakpoint
|
||||
--- gdb-6.7.orig/gdb/breakpoint.h 2007-08-23 20:08:26.000000000 +0200
|
||||
+++ gdb-6.7/gdb/breakpoint.h 2007-10-13 04:50:11.000000000 +0200
|
||||
@@ -420,6 +420,11 @@ struct breakpoint
|
||||
|
||||
/* Is breakpoint pending on shlib loads? */
|
||||
int pending;
|
||||
@ -517,7 +520,7 @@ Index: gdb-6.5/gdb/breakpoint.h
|
||||
};
|
||||
|
||||
/* The following stuff is an abstract data type "bpstat" ("breakpoint
|
||||
@@ -692,6 +697,14 @@ extern void tbreak_command (char *, int)
|
||||
@@ -688,6 +693,14 @@ extern void tbreak_command (char *, int)
|
||||
|
||||
extern int insert_breakpoints (void);
|
||||
|
||||
@ -532,11 +535,11 @@ Index: gdb-6.5/gdb/breakpoint.h
|
||||
extern int remove_breakpoints (void);
|
||||
|
||||
/* This function can be used to physically insert eventpoints from the
|
||||
Index: gdb-6.5/gdb/linux-nat.c
|
||||
Index: gdb-6.7/gdb/linux-nat.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/linux-nat.c 2006-07-11 12:32:29.000000000 -0300
|
||||
+++ gdb-6.5/gdb/linux-nat.c 2006-07-11 15:00:15.000000000 -0300
|
||||
@@ -36,6 +36,7 @@
|
||||
--- gdb-6.7.orig/gdb/linux-nat.c 2007-10-12 22:35:58.000000000 +0200
|
||||
+++ gdb-6.7/gdb/linux-nat.c 2007-10-13 04:50:11.000000000 +0200
|
||||
@@ -34,6 +34,7 @@
|
||||
#include "gdbthread.h"
|
||||
#include "gdbcmd.h"
|
||||
#include "regcache.h"
|
||||
@ -544,7 +547,7 @@ Index: gdb-6.5/gdb/linux-nat.c
|
||||
#include "regset.h"
|
||||
#include "inf-ptrace.h"
|
||||
#include "auxv.h"
|
||||
@@ -764,6 +765,9 @@ delete_lwp (ptid_t ptid)
|
||||
@@ -704,6 +705,9 @@ delete_lwp (ptid_t ptid)
|
||||
else
|
||||
lwp_list = lp->next;
|
||||
|
||||
@ -554,7 +557,7 @@ Index: gdb-6.5/gdb/linux-nat.c
|
||||
xfree (lp);
|
||||
}
|
||||
|
||||
@@ -1478,6 +1482,13 @@ stop_wait_callback (struct lwp_info *lp,
|
||||
@@ -1501,6 +1505,13 @@ stop_wait_callback (struct lwp_info *lp,
|
||||
user will delete or disable the breakpoint, but the
|
||||
thread will have already tripped on it. */
|
||||
|
||||
@ -568,7 +571,7 @@ Index: gdb-6.5/gdb/linux-nat.c
|
||||
/* Now resume this LWP and get the SIGSTOP event. */
|
||||
errno = 0;
|
||||
ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0, 0);
|
||||
@@ -2054,6 +2065,14 @@ retry:
|
||||
@@ -2061,6 +2072,14 @@ retry:
|
||||
target_pid_to_str (lp->ptid));
|
||||
}
|
||||
|
||||
@ -583,11 +586,11 @@ Index: gdb-6.5/gdb/linux-nat.c
|
||||
/* Handle GNU/Linux's extended waitstatus for trace events. */
|
||||
if (WIFSTOPPED (status) && WSTOPSIG (status) == SIGTRAP && status >> 16 != 0)
|
||||
{
|
||||
Index: gdb-6.5/gdb/linux-nat.h
|
||||
Index: gdb-6.7/gdb/linux-nat.h
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/linux-nat.h 2006-07-11 12:30:23.000000000 -0300
|
||||
+++ gdb-6.5/gdb/linux-nat.h 2006-07-11 12:32:29.000000000 -0300
|
||||
@@ -63,6 +63,18 @@ struct lwp_info
|
||||
--- gdb-6.7.orig/gdb/linux-nat.h 2007-10-12 22:35:58.000000000 +0200
|
||||
+++ gdb-6.7/gdb/linux-nat.h 2007-10-13 04:50:11.000000000 +0200
|
||||
@@ -61,6 +61,18 @@ struct lwp_info
|
||||
|
||||
/* Next LWP in list. */
|
||||
struct lwp_info *next;
|
||||
@ -606,41 +609,41 @@ Index: gdb-6.5/gdb/linux-nat.h
|
||||
};
|
||||
|
||||
/* Attempt to initialize libthread_db. */
|
||||
Index: gdb-6.5/gdb/Makefile.in
|
||||
Index: gdb-6.7/gdb/Makefile.in
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/Makefile.in 2006-07-11 12:30:23.000000000 -0300
|
||||
+++ gdb-6.5/gdb/Makefile.in 2006-07-11 15:00:19.000000000 -0300
|
||||
@@ -2113,7 +2113,7 @@ i387-tdep.o: i387-tdep.c $(defs_h) $(dou
|
||||
--- gdb-6.7.orig/gdb/Makefile.in 2007-09-05 02:14:02.000000000 +0200
|
||||
+++ gdb-6.7/gdb/Makefile.in 2007-10-13 04:50:53.000000000 +0200
|
||||
@@ -2160,7 +2160,7 @@ i387-tdep.o: i387-tdep.c $(defs_h) $(dou
|
||||
$(gdb_assert_h) $(gdb_string_h) $(i386_tdep_h) $(i387_tdep_h)
|
||||
ia64-linux-nat.o: ia64-linux-nat.c $(defs_h) $(gdb_string_h) $(inferior_h) \
|
||||
$(target_h) $(gdbcore_h) $(regcache_h) $(ia64_tdep_h) $(gdb_wait_h) \
|
||||
- $(gregset_h) $(linux_nat_h)
|
||||
+ $(gregset_h) $(observer_h) $(linux_nat_h)
|
||||
ia64-linux-tdep.o: ia64-linux-tdep.c $(defs_h) $(ia64_tdep_h) \
|
||||
$(arch_utils_h) $(gdbcore_h) $(regcache_h) $(osabi_h) $(solib_svr4_h)
|
||||
ia64-tdep.o: ia64-tdep.c $(defs_h) $(inferior_h) $(gdbcore_h) \
|
||||
@@ -2518,7 +2518,7 @@ rs6000-tdep.o: rs6000-tdep.c $(defs_h) $
|
||||
$(frame_unwind_h) $(frame_base_h) $(rs6000_tdep_h)
|
||||
rs6000-aix-tdep.o: rs6000-aix-tdep.c $(defs_h) $(osabi_h) $(rs6000_tdep_h)
|
||||
s390-nat.o: s390-nat.c $(defs_h) $(tm_h) $(regcache_h) $(inferior_h) \
|
||||
$(arch_utils_h) $(gdbcore_h) $(regcache_h) $(osabi_h) $(solib_svr4_h) \
|
||||
$(symtab_h)
|
||||
@@ -2541,7 +2541,7 @@ rs6000-tdep.o: rs6000-tdep.c $(defs_h) $
|
||||
rs6000-aix-tdep.o: rs6000-aix-tdep.c $(defs_h) $(gdb_string_h) $(osabi_h) \
|
||||
$(regcache_h) $(regset_h) $(rs6000_tdep_h) $(ppc_tdep_h)
|
||||
s390-nat.o: s390-nat.c $(defs_h) $(regcache_h) $(inferior_h) \
|
||||
- $(s390_tdep_h) $(target_h) $(linux_nat_h)
|
||||
+ $(s390_tdep_h) $(target_h) $(observer_h) $(linux_nat_h)
|
||||
+ $(s390_tdep_h) $(target_h) $(linux_nat_h) $(observer_h)
|
||||
s390-tdep.o: s390-tdep.c $(defs_h) $(arch_utils_h) $(frame_h) $(inferior_h) \
|
||||
$(symtab_h) $(target_h) $(gdbcore_h) $(gdbcmd_h) $(objfiles_h) \
|
||||
$(floatformat_h) $(regcache_h) $(trad_frame_h) $(frame_base_h) \
|
||||
Index: gdb-6.5/gdb/linux-thread-db.c
|
||||
Index: gdb-6.7/gdb/linux-thread-db.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/linux-thread-db.c 2006-07-11 12:30:23.000000000 -0300
|
||||
+++ gdb-6.5/gdb/linux-thread-db.c 2006-07-11 15:00:18.000000000 -0300
|
||||
@@ -36,6 +36,7 @@
|
||||
--- gdb-6.7.orig/gdb/linux-thread-db.c 2007-08-23 20:08:35.000000000 +0200
|
||||
+++ gdb-6.7/gdb/linux-thread-db.c 2007-10-13 04:53:59.000000000 +0200
|
||||
@@ -34,6 +34,7 @@
|
||||
#include "target.h"
|
||||
#include "regcache.h"
|
||||
#include "solib-svr4.h"
|
||||
+#include "observer.h"
|
||||
#include "gdbcore.h"
|
||||
#include "observer.h"
|
||||
#include "linux-nat.h"
|
||||
|
||||
@@ -718,6 +719,7 @@ attach_thread (ptid_t ptid, const td_thr
|
||||
@@ -673,6 +674,7 @@ attach_thread (ptid_t ptid, const td_thr
|
||||
{
|
||||
struct thread_info *tp;
|
||||
td_err_e err;
|
||||
@ -648,17 +651,21 @@ Index: gdb-6.5/gdb/linux-thread-db.c
|
||||
|
||||
/* If we're being called after a TD_CREATE event, we may already
|
||||
know about this thread. There are two ways this can happen. We
|
||||
@@ -753,11 +755,18 @@ attach_thread (ptid_t ptid, const td_thr
|
||||
@@ -700,8 +702,10 @@ attach_thread (ptid_t ptid, const td_thr
|
||||
if (ti_p->ti_state == TD_THR_UNKNOWN || ti_p->ti_state == TD_THR_ZOMBIE)
|
||||
return; /* A zombie thread -- do not attach. */
|
||||
|
||||
+ new_ptid = BUILD_LWP (ti_p->ti_lid, GET_PID (ptid));
|
||||
+
|
||||
/* Under GNU/Linux, we have to attach to each and every thread. */
|
||||
#ifdef ATTACH_LWP
|
||||
- ATTACH_LWP (BUILD_LWP (ti_p->ti_lid, GET_PID (ptid)), 0);
|
||||
+ ATTACH_LWP (new_ptid, 0);
|
||||
#endif
|
||||
- if (lin_lwp_attach_lwp (BUILD_LWP (ti_p->ti_lid, GET_PID (ptid)), 0) < 0)
|
||||
+ if (lin_lwp_attach_lwp (new_ptid, 0) < 0)
|
||||
return;
|
||||
|
||||
/* Add the thread to GDB's thread list. */
|
||||
@@ -712,6 +716,11 @@ attach_thread (ptid_t ptid, const td_thr
|
||||
if (verbose)
|
||||
printf_unfiltered (_("[New %s]\n"), target_pid_to_str (ptid));
|
||||
|
||||
+ /* Notify any observers of a new linux thread. This
|
||||
+ would include any linux platforms that have to insert hardware
|
||||
@ -668,8 +675,8 @@ Index: gdb-6.5/gdb/linux-thread-db.c
|
||||
/* Enable thread event reporting for this thread. */
|
||||
err = td_thr_event_enable_p (th_p, 1);
|
||||
if (err != TD_OK)
|
||||
@@ -946,7 +955,8 @@ thread_db_wait (ptid_t ptid, struct targ
|
||||
return pid_to_ptid (-1);
|
||||
@@ -891,7 +900,8 @@ thread_db_wait (ptid_t ptid, struct targ
|
||||
thread_db_find_new_threads ();
|
||||
|
||||
if (ourstatus->kind == TARGET_WAITKIND_STOPPED
|
||||
- && ourstatus->value.sig == TARGET_SIGNAL_TRAP)
|
||||
@ -678,11 +685,11 @@ Index: gdb-6.5/gdb/linux-thread-db.c
|
||||
/* Check for a thread event. */
|
||||
check_event (ptid);
|
||||
|
||||
Index: gdb-6.5/gdb/i386-linux-nat.c
|
||||
Index: gdb-6.7/gdb/i386-linux-nat.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/i386-linux-nat.c 2006-07-11 12:30:23.000000000 -0300
|
||||
+++ gdb-6.5/gdb/i386-linux-nat.c 2006-07-11 15:00:09.000000000 -0300
|
||||
@@ -619,10 +619,9 @@ i386_linux_dr_get (int regnum)
|
||||
--- gdb-6.7.orig/gdb/i386-linux-nat.c 2007-08-23 20:08:34.000000000 +0200
|
||||
+++ gdb-6.7/gdb/i386-linux-nat.c 2007-10-13 04:50:11.000000000 +0200
|
||||
@@ -585,10 +585,9 @@ i386_linux_dr_get (int regnum)
|
||||
int tid;
|
||||
unsigned long value;
|
||||
|
||||
@ -696,7 +703,7 @@ Index: gdb-6.5/gdb/i386-linux-nat.c
|
||||
|
||||
/* FIXME: kettenis/2001-03-27: Calling perror_with_name if the
|
||||
ptrace call fails breaks debugging remote targets. The correct
|
||||
@@ -647,10 +646,9 @@ i386_linux_dr_set (int regnum, unsigned
|
||||
@@ -613,10 +612,9 @@ i386_linux_dr_set (int regnum, unsigned
|
||||
{
|
||||
int tid;
|
||||
|
||||
@ -710,11 +717,11 @@ Index: gdb-6.5/gdb/i386-linux-nat.c
|
||||
|
||||
errno = 0;
|
||||
ptrace (PTRACE_POKEUSER, tid,
|
||||
Index: gdb-6.5/gdb/ia64-linux-nat.c
|
||||
Index: gdb-6.7/gdb/ia64-linux-nat.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/ia64-linux-nat.c 2006-07-11 12:30:23.000000000 -0300
|
||||
+++ gdb-6.5/gdb/ia64-linux-nat.c 2006-07-11 15:00:00.000000000 -0300
|
||||
@@ -29,6 +29,7 @@
|
||||
--- gdb-6.7.orig/gdb/ia64-linux-nat.c 2007-08-23 20:08:35.000000000 +0200
|
||||
+++ gdb-6.7/gdb/ia64-linux-nat.c 2007-10-13 05:07:58.000000000 +0200
|
||||
@@ -27,6 +27,7 @@
|
||||
#include "regcache.h"
|
||||
#include "ia64-tdep.h"
|
||||
#include "linux-nat.h"
|
||||
@ -722,25 +729,27 @@ Index: gdb-6.5/gdb/ia64-linux-nat.c
|
||||
|
||||
#include <signal.h>
|
||||
#include <sys/ptrace.h>
|
||||
@@ -561,8 +562,9 @@ is_power_of_2 (int val)
|
||||
@@ -550,10 +551,10 @@ is_power_of_2 (int val)
|
||||
return onecount <= 1;
|
||||
}
|
||||
|
||||
-int
|
||||
-ia64_linux_insert_watchpoint (ptid_t ptid, CORE_ADDR addr, int len, int rw)
|
||||
+/* Internal routine to insert one watchpoint for a specified thread. */
|
||||
+static int
|
||||
static int
|
||||
-ia64_linux_insert_watchpoint (CORE_ADDR addr, int len, int rw)
|
||||
+ia64_linux_insert_one_watchpoint (ptid_t ptid, CORE_ADDR addr, int len, int rw)
|
||||
{
|
||||
- ptid_t ptid = inferior_ptid;
|
||||
int idx;
|
||||
long dbr_addr, dbr_mask;
|
||||
@@ -608,8 +610,38 @@ ia64_linux_insert_watchpoint (ptid_t pti
|
||||
int max_watchpoints = 4;
|
||||
@@ -598,10 +599,39 @@ ia64_linux_insert_watchpoint (CORE_ADDR
|
||||
return 0;
|
||||
}
|
||||
|
||||
+/* Internal callback routine which can be used via iterate_over_lwps
|
||||
+ to insert a specific watchpoint from all active threads. */
|
||||
+static int
|
||||
static int
|
||||
-ia64_linux_remove_watchpoint (CORE_ADDR addr, int len, int type)
|
||||
+ia64_linux_insert_watchpoint_callback (struct lwp_info *lwp, void *data)
|
||||
+{
|
||||
+ struct linux_watchpoint *args = (struct linux_watchpoint *)data;
|
||||
@ -750,9 +759,8 @@ Index: gdb-6.5/gdb/ia64-linux-nat.c
|
||||
+}
|
||||
+
|
||||
+/* Insert a watchpoint for all threads. */
|
||||
int
|
||||
-ia64_linux_remove_watchpoint (ptid_t ptid, CORE_ADDR addr, int len)
|
||||
+ia64_linux_insert_watchpoint (ptid_t ptid, CORE_ADDR addr, int len, int rw)
|
||||
+static int
|
||||
+ia64_linux_insert_watchpoint (CORE_ADDR addr, int len, int rw)
|
||||
+{
|
||||
+ struct linux_watchpoint args;
|
||||
+
|
||||
@ -770,11 +778,13 @@ Index: gdb-6.5/gdb/ia64-linux-nat.c
|
||||
+
|
||||
+/* Internal routine to remove one watchpoint for a specified thread. */
|
||||
+static int
|
||||
+ia64_linux_remove_one_watchpoint (ptid_t ptid, CORE_ADDR addr, int len)
|
||||
+ia64_linux_remove_one_watchpoint (ptid_t ptid, CORE_ADDR addr, int len, int type)
|
||||
{
|
||||
- ptid_t ptid = inferior_ptid;
|
||||
int idx;
|
||||
long dbr_addr, dbr_mask;
|
||||
@@ -632,23 +664,74 @@ ia64_linux_remove_watchpoint (ptid_t pti
|
||||
int max_watchpoints = 4;
|
||||
@@ -623,13 +653,55 @@ ia64_linux_remove_watchpoint (CORE_ADDR
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -790,8 +800,8 @@ Index: gdb-6.5/gdb/ia64-linux-nat.c
|
||||
+}
|
||||
+
|
||||
+/* Remove a watchpoint for all threads. */
|
||||
+int
|
||||
+ia64_linux_remove_watchpoint (ptid_t ptid, CORE_ADDR addr, int len)
|
||||
+static int
|
||||
+ia64_linux_remove_watchpoint (CORE_ADDR addr, int len)
|
||||
+{
|
||||
+ struct linux_watchpoint args;
|
||||
+
|
||||
@ -818,8 +828,8 @@ Index: gdb-6.5/gdb/ia64-linux-nat.c
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
int
|
||||
ia64_linux_stopped_data_address (CORE_ADDR *addr_p)
|
||||
static int
|
||||
ia64_linux_stopped_data_address (struct target_ops *ops, CORE_ADDR *addr_p)
|
||||
{
|
||||
CORE_ADDR psr;
|
||||
int tid;
|
||||
@ -827,9 +837,10 @@ Index: gdb-6.5/gdb/ia64-linux-nat.c
|
||||
+ struct siginfo *siginfo_p;
|
||||
ptid_t ptid = inferior_ptid;
|
||||
+ struct lwp_info *lp;
|
||||
struct regcache *regcache = get_current_regcache ();
|
||||
|
||||
tid = TIDGET(ptid);
|
||||
if (tid == 0)
|
||||
@@ -637,10 +709,19 @@ ia64_linux_stopped_data_address (struct
|
||||
tid = PIDGET (ptid);
|
||||
|
||||
errno = 0;
|
||||
@ -851,17 +862,17 @@ Index: gdb-6.5/gdb/ia64-linux-nat.c
|
||||
+ (siginfo_p->si_code & 0xffff) != 0x0004 /* TRAP_HWBKPT */)
|
||||
return 0;
|
||||
|
||||
psr = read_register_pid (IA64_PSR_REGNUM, ptid);
|
||||
@@ -656,7 +739,7 @@ ia64_linux_stopped_data_address (CORE_AD
|
||||
regcache_cooked_read_unsigned (regcache, IA64_PSR_REGNUM, &psr);
|
||||
@@ -648,7 +729,7 @@ ia64_linux_stopped_data_address (struct
|
||||
for the next instruction */
|
||||
write_register_pid (IA64_PSR_REGNUM, psr, ptid);
|
||||
regcache_cooked_write_unsigned (regcache, IA64_PSR_REGNUM, psr);
|
||||
|
||||
- *addr_p = (CORE_ADDR)siginfo.si_addr;
|
||||
+ *addr_p = (CORE_ADDR)siginfo_p->si_addr;
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -685,6 +768,31 @@ ia64_linux_xfer_partial (struct target_o
|
||||
@@ -796,6 +877,31 @@ ia64_linux_xfer_partial (struct target_o
|
||||
offset, len);
|
||||
}
|
||||
|
||||
@ -893,7 +904,7 @@ Index: gdb-6.5/gdb/ia64-linux-nat.c
|
||||
void _initialize_ia64_linux_nat (void);
|
||||
|
||||
void
|
||||
@@ -701,4 +809,7 @@ _initialize_ia64_linux_nat (void)
|
||||
@@ -834,4 +940,7 @@ _initialize_ia64_linux_nat (void)
|
||||
|
||||
/* Register the target. */
|
||||
linux_nat_add_target (t);
|
||||
@ -901,11 +912,11 @@ Index: gdb-6.5/gdb/ia64-linux-nat.c
|
||||
+ observer_attach_linux_new_thread (ia64_linux_new_thread);
|
||||
+ observer_attach_sigtrap (ia64_linux_save_sigtrap_info);
|
||||
}
|
||||
Index: gdb-6.5/gdb/amd64-linux-nat.c
|
||||
Index: gdb-6.7/gdb/amd64-linux-nat.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/amd64-linux-nat.c 2006-07-11 12:30:23.000000000 -0300
|
||||
+++ gdb-6.5/gdb/amd64-linux-nat.c 2006-07-11 15:00:09.000000000 -0300
|
||||
@@ -234,10 +234,9 @@ amd64_linux_dr_get (int regnum)
|
||||
--- gdb-6.7.orig/gdb/amd64-linux-nat.c 2007-08-23 20:08:26.000000000 +0200
|
||||
+++ gdb-6.7/gdb/amd64-linux-nat.c 2007-10-13 04:50:11.000000000 +0200
|
||||
@@ -240,10 +240,9 @@ amd64_linux_dr_get (int regnum)
|
||||
int tid;
|
||||
unsigned long value;
|
||||
|
||||
@ -919,7 +930,7 @@ Index: gdb-6.5/gdb/amd64-linux-nat.c
|
||||
|
||||
/* FIXME: kettenis/2001-03-27: Calling perror_with_name if the
|
||||
ptrace call fails breaks debugging remote targets. The correct
|
||||
@@ -262,10 +261,9 @@ amd64_linux_dr_set (int regnum, unsigned
|
||||
@@ -268,10 +267,9 @@ amd64_linux_dr_set (int regnum, unsigned
|
||||
{
|
||||
int tid;
|
||||
|
||||
@ -933,11 +944,11 @@ Index: gdb-6.5/gdb/amd64-linux-nat.c
|
||||
|
||||
errno = 0;
|
||||
ptrace (PT_WRITE_U, tid, offsetof (struct user, u_debugreg[regnum]), value);
|
||||
Index: gdb-6.5/gdb/s390-nat.c
|
||||
Index: gdb-6.7/gdb/s390-nat.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/s390-nat.c 2006-07-11 12:30:23.000000000 -0300
|
||||
+++ gdb-6.5/gdb/s390-nat.c 2006-07-11 15:00:26.000000000 -0300
|
||||
@@ -30,6 +30,7 @@
|
||||
--- gdb-6.7.orig/gdb/s390-nat.c 2007-08-23 20:08:37.000000000 +0200
|
||||
+++ gdb-6.7/gdb/s390-nat.c 2007-10-13 04:50:11.000000000 +0200
|
||||
@@ -27,6 +27,7 @@
|
||||
#include "linux-nat.h"
|
||||
|
||||
#include "s390-tdep.h"
|
||||
@ -945,8 +956,8 @@ Index: gdb-6.5/gdb/s390-nat.c
|
||||
|
||||
#include <asm/ptrace.h>
|
||||
#include <sys/ptrace.h>
|
||||
@@ -114,14 +115,14 @@ fill_fpregset (fpregset_t *regp, int reg
|
||||
((char *)regp) + regmap_fpregset[i]);
|
||||
@@ -111,14 +112,14 @@ fill_fpregset (const struct regcache *re
|
||||
(char *)regp + regmap_fpregset[i]);
|
||||
}
|
||||
|
||||
-/* Find the TID for the current inferior thread to use with ptrace. */
|
||||
@ -964,25 +975,25 @@ Index: gdb-6.5/gdb/s390-nat.c
|
||||
|
||||
return tid;
|
||||
}
|
||||
@@ -205,7 +206,7 @@ store_fpregs (int tid, int regnum)
|
||||
@@ -202,7 +203,7 @@ store_fpregs (const struct regcache *reg
|
||||
static void
|
||||
s390_linux_fetch_inferior_registers (int regnum)
|
||||
s390_linux_fetch_inferior_registers (struct regcache *regcache, int regnum)
|
||||
{
|
||||
- int tid = s390_inferior_tid ();
|
||||
+ int tid = s390_tid (inferior_ptid);
|
||||
|
||||
if (regnum == -1
|
||||
|| (regnum < S390_NUM_REGS && regmap_gregset[regnum] != -1))
|
||||
@@ -221,7 +222,7 @@ s390_linux_fetch_inferior_registers (int
|
||||
@@ -218,7 +219,7 @@ s390_linux_fetch_inferior_registers (str
|
||||
static void
|
||||
s390_linux_store_inferior_registers (int regnum)
|
||||
s390_linux_store_inferior_registers (struct regcache *regcache, int regnum)
|
||||
{
|
||||
- int tid = s390_inferior_tid ();
|
||||
+ int tid = s390_tid (inferior_ptid);
|
||||
|
||||
if (regnum == -1
|
||||
|| (regnum < S390_NUM_REGS && regmap_gregset[regnum] != -1))
|
||||
@@ -263,7 +264,7 @@ s390_stopped_by_watchpoint (void)
|
||||
@@ -260,7 +261,7 @@ s390_stopped_by_watchpoint (void)
|
||||
parea.len = sizeof (per_lowcore);
|
||||
parea.process_addr = (addr_t) & per_lowcore;
|
||||
parea.kernel_addr = offsetof (struct user_regs_struct, per_info.lowcore);
|
||||
@ -991,7 +1002,7 @@ Index: gdb-6.5/gdb/s390-nat.c
|
||||
perror_with_name (_("Couldn't retrieve watchpoint status"));
|
||||
|
||||
return per_lowcore.perc_storage_alteration == 1
|
||||
@@ -271,9 +272,9 @@ s390_stopped_by_watchpoint (void)
|
||||
@@ -268,9 +269,9 @@ s390_stopped_by_watchpoint (void)
|
||||
}
|
||||
|
||||
static void
|
||||
@ -1003,7 +1014,7 @@ Index: gdb-6.5/gdb/s390-nat.c
|
||||
|
||||
per_struct per_info;
|
||||
ptrace_area parea;
|
||||
@@ -310,6 +311,16 @@ s390_fix_watch_points (void)
|
||||
@@ -307,6 +308,16 @@ s390_fix_watch_points (void)
|
||||
perror_with_name (_("Couldn't modify watchpoint status"));
|
||||
}
|
||||
|
||||
@ -1020,7 +1031,7 @@ Index: gdb-6.5/gdb/s390-nat.c
|
||||
static int
|
||||
s390_insert_watchpoint (CORE_ADDR addr, int len, int type)
|
||||
{
|
||||
@@ -323,10 +334,24 @@ s390_insert_watchpoint (CORE_ADDR addr,
|
||||
@@ -320,10 +331,24 @@ s390_insert_watchpoint (CORE_ADDR addr,
|
||||
area->next = watch_base;
|
||||
watch_base = area;
|
||||
|
||||
@ -1046,7 +1057,7 @@ Index: gdb-6.5/gdb/s390-nat.c
|
||||
static int
|
||||
s390_remove_watchpoint (CORE_ADDR addr, int len, int type)
|
||||
{
|
||||
@@ -348,7 +373,11 @@ s390_remove_watchpoint (CORE_ADDR addr,
|
||||
@@ -345,7 +370,11 @@ s390_remove_watchpoint (CORE_ADDR addr,
|
||||
*parea = area->next;
|
||||
xfree (area);
|
||||
|
||||
@ -1059,7 +1070,7 @@ Index: gdb-6.5/gdb/s390-nat.c
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -364,6 +393,15 @@ s390_region_ok_for_hw_watchpoint (CORE_A
|
||||
@@ -361,6 +390,15 @@ s390_region_ok_for_hw_watchpoint (CORE_A
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -1075,7 +1086,7 @@ Index: gdb-6.5/gdb/s390-nat.c
|
||||
|
||||
void _initialize_s390_nat (void);
|
||||
|
||||
@@ -389,4 +427,6 @@ _initialize_s390_nat (void)
|
||||
@@ -386,4 +424,6 @@ _initialize_s390_nat (void)
|
||||
|
||||
/* Register the target. */
|
||||
linux_nat_add_target (t);
|
||||
|
@ -35,11 +35,15 @@
|
||||
* testsuite/gdb.threads/watchthreads2.c: New test case.
|
||||
* testsuite/gdb.threads/watchthreads2.exp: Ditto.
|
||||
|
||||
Index: gdb-6.5/gdb/config/i386/nm-linux64.h
|
||||
2007-10-14 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
Port to GDB-6.7.
|
||||
|
||||
Index: gdb-6.7/gdb/config/i386/nm-linux64.h
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/config/i386/nm-linux64.h 2006-07-12 01:54:10.000000000 -0300
|
||||
+++ gdb-6.5/gdb/config/i386/nm-linux64.h 2006-07-12 01:54:29.000000000 -0300
|
||||
@@ -35,22 +35,59 @@
|
||||
--- gdb-6.7.orig/gdb/config/i386/nm-linux64.h 2007-08-23 20:08:48.000000000 +0200
|
||||
+++ gdb-6.7/gdb/config/i386/nm-linux64.h 2007-10-14 23:41:50.000000000 +0200
|
||||
@@ -33,20 +33,58 @@
|
||||
|
||||
/* Provide access to the i386 hardware debugging registers. */
|
||||
|
||||
@ -66,7 +70,7 @@ Index: gdb-6.5/gdb/config/i386/nm-linux64.h
|
||||
#define I386_DR_LOW_GET_STATUS() \
|
||||
- amd64_linux_dr_get_status ()
|
||||
+ amd64_linux_dr_get_status (inferior_ptid)
|
||||
|
||||
+
|
||||
+/* Watchpoints and hardware breakpoints. */
|
||||
+
|
||||
+/* Insert a watchpoint to watch a memory region which starts at
|
||||
@ -105,14 +109,13 @@ Index: gdb-6.5/gdb/config/i386/nm-linux64.h
|
||||
+#define target_remove_hw_breakpoint(bp_tgt) \
|
||||
+ amd64_linux_remove_hw_breakpoint (bp_tgt)
|
||||
|
||||
/* Override copies of {fetch,store}_inferior_registers in `infptrace.c'. */
|
||||
#define FETCH_INFERIOR_REGISTERS
|
||||
Index: gdb-6.5/gdb/config/i386/nm-linux.h
|
||||
#endif /* nm-linux64.h */
|
||||
Index: gdb-6.7/gdb/config/i386/nm-linux.h
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/config/i386/nm-linux.h 2006-07-12 01:54:10.000000000 -0300
|
||||
+++ gdb-6.5/gdb/config/i386/nm-linux.h 2006-07-12 01:54:29.000000000 -0300
|
||||
@@ -46,23 +46,61 @@ extern CORE_ADDR register_u_addr (CORE_A
|
||||
|
||||
--- gdb-6.7.orig/gdb/config/i386/nm-linux.h 2007-08-23 20:08:48.000000000 +0200
|
||||
+++ gdb-6.7/gdb/config/i386/nm-linux.h 2007-10-14 23:40:55.000000000 +0200
|
||||
@@ -29,21 +29,60 @@
|
||||
|
||||
/* Provide access to the i386 hardware debugging registers. */
|
||||
|
||||
-extern void i386_linux_dr_set_control (unsigned long control);
|
||||
@ -138,8 +141,7 @@ Index: gdb-6.5/gdb/config/i386/nm-linux.h
|
||||
#define I386_DR_LOW_GET_STATUS() \
|
||||
- i386_linux_dr_get_status ()
|
||||
+ i386_linux_dr_get_status (inferior_ptid)
|
||||
|
||||
|
||||
+
|
||||
+/* Watchpoints and hardware breakpoints. */
|
||||
+
|
||||
+/* Insert a watchpoint to watch a memory region which starts at
|
||||
@ -178,14 +180,14 @@ Index: gdb-6.5/gdb/config/i386/nm-linux.h
|
||||
+#define target_remove_hw_breakpoint(bp_tgt) \
|
||||
+ i386_linux_remove_hw_breakpoint (bp_tgt)
|
||||
+
|
||||
/* Override copies of {fetch,store}_inferior_registers in `infptrace.c'. */
|
||||
#define FETCH_INFERIOR_REGISTERS
|
||||
|
||||
|
||||
Index: gdb-6.5/gdb/i386-nat.c
|
||||
#ifdef HAVE_PTRACE_GETFPXREGS
|
||||
Index: gdb-6.7/gdb/i386-nat.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/i386-nat.c 2006-07-12 01:54:10.000000000 -0300
|
||||
+++ gdb-6.5/gdb/i386-nat.c 2006-07-12 01:54:29.000000000 -0300
|
||||
@@ -21,6 +21,7 @@
|
||||
--- gdb-6.7.orig/gdb/i386-nat.c 2007-08-23 20:08:34.000000000 +0200
|
||||
+++ gdb-6.7/gdb/i386-nat.c 2007-10-14 23:39:04.000000000 +0200
|
||||
@@ -19,6 +19,7 @@
|
||||
|
||||
#include "defs.h"
|
||||
#include "breakpoint.h"
|
||||
@ -193,10 +195,10 @@ Index: gdb-6.5/gdb/i386-nat.c
|
||||
#include "command.h"
|
||||
#include "gdbcmd.h"
|
||||
|
||||
Index: gdb-6.5/gdb/testsuite/gdb.threads/watchthreads2.c
|
||||
Index: gdb-6.7/gdb/testsuite/gdb.threads/watchthreads2.c
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gdb-6.5/gdb/testsuite/gdb.threads/watchthreads2.c 2006-07-12 01:54:29.000000000 -0300
|
||||
+++ gdb-6.7/gdb/testsuite/gdb.threads/watchthreads2.c 2007-10-14 23:39:04.000000000 +0200
|
||||
@@ -0,0 +1,66 @@
|
||||
+/* This testcase is part of GDB, the GNU debugger.
|
||||
+
|
||||
@ -264,10 +266,10 @@ Index: gdb-6.5/gdb/testsuite/gdb.threads/watchthreads2.c
|
||||
+ pthread_exit(NULL);
|
||||
+}
|
||||
+
|
||||
Index: gdb-6.5/gdb/testsuite/gdb.threads/watchthreads2.exp
|
||||
Index: gdb-6.7/gdb/testsuite/gdb.threads/watchthreads2.exp
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gdb-6.5/gdb/testsuite/gdb.threads/watchthreads2.exp 2006-07-12 01:54:29.000000000 -0300
|
||||
+++ gdb-6.7/gdb/testsuite/gdb.threads/watchthreads2.exp 2007-10-14 23:39:04.000000000 +0200
|
||||
@@ -0,0 +1,133 @@
|
||||
+# This testcase is part of GDB, the GNU debugger.
|
||||
+
|
||||
@ -402,11 +404,11 @@ Index: gdb-6.5/gdb/testsuite/gdb.threads/watchthreads2.exp
|
||||
+} else {
|
||||
+ fail $message
|
||||
+}
|
||||
Index: gdb-6.5/gdb/i386-linux-nat.c
|
||||
Index: gdb-6.7/gdb/i386-linux-nat.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/i386-linux-nat.c 2006-07-12 01:54:28.000000000 -0300
|
||||
+++ gdb-6.5/gdb/i386-linux-nat.c 2006-07-12 01:57:19.000000000 -0300
|
||||
@@ -24,6 +24,7 @@
|
||||
--- gdb-6.7.orig/gdb/i386-linux-nat.c 2007-10-13 05:09:50.000000000 +0200
|
||||
+++ gdb-6.7/gdb/i386-linux-nat.c 2007-10-14 23:39:04.000000000 +0200
|
||||
@@ -22,6 +22,7 @@
|
||||
#include "inferior.h"
|
||||
#include "gdbcore.h"
|
||||
#include "regcache.h"
|
||||
@ -414,7 +416,7 @@ Index: gdb-6.5/gdb/i386-linux-nat.c
|
||||
#include "target.h"
|
||||
#include "linux-nat.h"
|
||||
|
||||
@@ -614,14 +615,14 @@ i386_linux_store_inferior_registers (int
|
||||
@@ -580,14 +581,14 @@ i386_linux_store_inferior_registers (str
|
||||
/* Support for debug registers. */
|
||||
|
||||
static unsigned long
|
||||
@ -432,7 +434,7 @@ Index: gdb-6.5/gdb/i386-linux-nat.c
|
||||
|
||||
/* FIXME: kettenis/2001-03-27: Calling perror_with_name if the
|
||||
ptrace call fails breaks debugging remote targets. The correct
|
||||
@@ -642,13 +643,13 @@ i386_linux_dr_get (int regnum)
|
||||
@@ -608,13 +609,13 @@ i386_linux_dr_get (int regnum)
|
||||
}
|
||||
|
||||
static void
|
||||
@ -449,7 +451,7 @@ Index: gdb-6.5/gdb/i386-linux-nat.c
|
||||
|
||||
errno = 0;
|
||||
ptrace (PTRACE_POKEUSER, tid,
|
||||
@@ -658,34 +659,158 @@ i386_linux_dr_set (int regnum, unsigned
|
||||
@@ -624,34 +625,158 @@ i386_linux_dr_set (int regnum, unsigned
|
||||
}
|
||||
|
||||
void
|
||||
@ -616,26 +618,26 @@ Index: gdb-6.5/gdb/i386-linux-nat.c
|
||||
/* Called by libthread_db. Returns a pointer to the thread local
|
||||
storage (or its descriptor). */
|
||||
|
||||
@@ -843,4 +968,6 @@ _initialize_i386_linux_nat (void)
|
||||
@@ -816,4 +941,6 @@ _initialize_i386_linux_nat (void)
|
||||
|
||||
/* Register the target. */
|
||||
linux_nat_add_target (t);
|
||||
+
|
||||
+ observer_attach_linux_new_thread (i386_linux_new_thread);
|
||||
}
|
||||
Index: gdb-6.5/gdb/amd64-linux-nat.c
|
||||
Index: gdb-6.7/gdb/amd64-linux-nat.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/amd64-linux-nat.c 2006-07-12 01:54:28.000000000 -0300
|
||||
+++ gdb-6.5/gdb/amd64-linux-nat.c 2006-07-12 01:54:29.000000000 -0300
|
||||
@@ -25,6 +25,7 @@
|
||||
--- gdb-6.7.orig/gdb/amd64-linux-nat.c 2007-10-13 05:09:50.000000000 +0200
|
||||
+++ gdb-6.7/gdb/amd64-linux-nat.c 2007-10-14 23:39:04.000000000 +0200
|
||||
@@ -23,6 +23,7 @@
|
||||
#include "inferior.h"
|
||||
#include "gdbcore.h"
|
||||
#include "regcache.h"
|
||||
+#include "observer.h"
|
||||
#include "linux-nat.h"
|
||||
#include "amd64-linux-tdep.h"
|
||||
|
||||
#include "gdb_assert.h"
|
||||
@@ -229,14 +230,14 @@ amd64_linux_store_inferior_registers (in
|
||||
@@ -235,14 +236,14 @@ amd64_linux_store_inferior_registers (st
|
||||
|
||||
|
||||
static unsigned long
|
||||
@ -653,7 +655,7 @@ Index: gdb-6.5/gdb/amd64-linux-nat.c
|
||||
|
||||
/* FIXME: kettenis/2001-03-27: Calling perror_with_name if the
|
||||
ptrace call fails breaks debugging remote targets. The correct
|
||||
@@ -257,13 +258,13 @@ amd64_linux_dr_get (int regnum)
|
||||
@@ -263,13 +264,13 @@ amd64_linux_dr_get (int regnum)
|
||||
}
|
||||
|
||||
static void
|
||||
@ -670,7 +672,7 @@ Index: gdb-6.5/gdb/amd64-linux-nat.c
|
||||
|
||||
errno = 0;
|
||||
ptrace (PT_WRITE_U, tid, offsetof (struct user, u_debugreg[regnum]), value);
|
||||
@@ -272,34 +273,158 @@ amd64_linux_dr_set (int regnum, unsigned
|
||||
@@ -278,34 +279,158 @@ amd64_linux_dr_set (int regnum, unsigned
|
||||
}
|
||||
|
||||
void
|
||||
@ -837,18 +839,18 @@ Index: gdb-6.5/gdb/amd64-linux-nat.c
|
||||
/* This function is called by libthread_db as part of its handling of
|
||||
a request for a thread's local storage address. */
|
||||
|
||||
@@ -399,4 +524,6 @@ _initialize_amd64_linux_nat (void)
|
||||
@@ -406,4 +531,6 @@ _initialize_amd64_linux_nat (void)
|
||||
|
||||
/* Register the target. */
|
||||
linux_nat_add_target (t);
|
||||
+
|
||||
+ observer_attach_linux_new_thread (amd64_linux_new_thread);
|
||||
}
|
||||
Index: gdb-6.5/gdb/testsuite/gdb.threads/watchthreads.c
|
||||
Index: gdb-6.7/gdb/testsuite/gdb.threads/watchthreads.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/testsuite/gdb.threads/watchthreads.c 2006-07-12 01:55:19.000000000 -0300
|
||||
+++ gdb-6.5/gdb/testsuite/gdb.threads/watchthreads.c 2006-07-12 01:56:51.000000000 -0300
|
||||
@@ -58,7 +58,7 @@ void *thread_function(void *arg) {
|
||||
--- gdb-6.7.orig/gdb/testsuite/gdb.threads/watchthreads.c 2007-08-23 20:08:50.000000000 +0200
|
||||
+++ gdb-6.7/gdb/testsuite/gdb.threads/watchthreads.c 2007-10-14 23:39:04.000000000 +0200
|
||||
@@ -56,7 +56,7 @@ void *thread_function(void *arg) {
|
||||
/* Don't run forever. Run just short of it :) */
|
||||
while (*myp > 0)
|
||||
{
|
||||
|
@ -1,194 +1,38 @@
|
||||
Index: gdb-6.6/gdb/mi/mi-cmd-env.c
|
||||
[base]
|
||||
|
||||
2007-10-14 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
Port to GDB-6.7.
|
||||
|
||||
Index: gdb-6.7/gdb/mi/mi-cmd-env.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/mi/mi-cmd-env.c
|
||||
+++ gdb-6.6/gdb/mi/mi-cmd-env.c
|
||||
@@ -126,7 +126,7 @@ mi_cmd_env_path (char *command, char **a
|
||||
static struct mi_opt opts[] =
|
||||
{
|
||||
{"r", RESET_OPT, 0},
|
||||
- 0
|
||||
+ {0}
|
||||
};
|
||||
--- gdb-6.7.orig/gdb/mi/mi-cmd-env.c 2007-10-14 23:42:39.000000000 +0200
|
||||
+++ gdb-6.7/gdb/mi/mi-cmd-env.c 2007-10-14 23:42:39.000000000 +0200
|
||||
@@ -78,7 +78,8 @@ mi_cmd_env_pwd (char *command, char **ar
|
||||
|
||||
/* Otherwise the mi level is 2 or higher. */
|
||||
|
||||
dont_repeat ();
|
||||
@@ -198,7 +198,7 @@ mi_cmd_env_dir (char *command, char **ar
|
||||
static struct mi_opt opts[] =
|
||||
{
|
||||
{"r", RESET_OPT, 0},
|
||||
- 0
|
||||
+ {0}
|
||||
};
|
||||
- getcwd (gdb_dirbuf, sizeof (gdb_dirbuf));
|
||||
+ /* Unused result. */
|
||||
+ 1 && getcwd (gdb_dirbuf, sizeof (gdb_dirbuf));
|
||||
ui_out_field_string (uiout, "cwd", gdb_dirbuf);
|
||||
|
||||
dont_repeat ();
|
||||
Index: gdb-6.6/gdb/mi/mi-getopt.c
|
||||
return MI_CMD_DONE;
|
||||
Index: gdb-6.7/gdb/testsuite/gdb.base/move-dir.h
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/mi/mi-getopt.c
|
||||
+++ gdb-6.6/gdb/mi/mi-getopt.c
|
||||
@@ -82,7 +82,7 @@ mi_valid_noargs (const char *prefix, int
|
||||
char *optarg;
|
||||
static struct mi_opt opts[] =
|
||||
{
|
||||
- 0
|
||||
+ {0}
|
||||
};
|
||||
|
||||
if (mi_getopt (prefix, argc, argv, opts, &optind, &optarg) == -1)
|
||||
Index: gdb-6.6/gdb/mi/mi-cmd-break.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/mi/mi-cmd-break.c
|
||||
+++ gdb-6.6/gdb/mi/mi-cmd-break.c
|
||||
@@ -90,7 +90,7 @@ mi_cmd_break_insert (char *command, char
|
||||
{"c", CONDITION_OPT, 1},
|
||||
{"i", IGNORE_COUNT_OPT, 1},
|
||||
{"p", THREAD_OPT, 1},
|
||||
- 0
|
||||
+ {0}
|
||||
};
|
||||
|
||||
/* Parse arguments. It could be -r or -h or -t, <location> or ``--''
|
||||
@@ -196,7 +196,7 @@ mi_cmd_break_watch (char *command, char
|
||||
{
|
||||
{"r", READ_OPT, 0},
|
||||
{"a", ACCESS_OPT, 0},
|
||||
- 0
|
||||
+ {0}
|
||||
};
|
||||
|
||||
/* Parse arguments. */
|
||||
Index: gdb-6.6/gdb/mi/mi-cmd-disas.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/mi/mi-cmd-disas.c
|
||||
+++ gdb-6.6/gdb/mi/mi-cmd-disas.c
|
||||
@@ -84,7 +84,7 @@ mi_cmd_disassemble (char *command, char
|
||||
{"n", NUM_OPT, 1},
|
||||
{"s", START_OPT, 1},
|
||||
{"e", END_OPT, 1},
|
||||
- 0
|
||||
+ {0}
|
||||
};
|
||||
|
||||
/* Get the options with their arguments. Keep track of what we
|
||||
Index: gdb-6.6/gdb/mi/mi-main.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/mi/mi-main.c
|
||||
+++ gdb-6.6/gdb/mi/mi-main.c
|
||||
@@ -773,7 +773,7 @@ mi_cmd_data_read_memory (char *command,
|
||||
static struct mi_opt opts[] =
|
||||
{
|
||||
{"o", OFFSET_OPT, 1},
|
||||
- 0
|
||||
+ {0}
|
||||
};
|
||||
|
||||
while (1)
|
||||
@@ -973,7 +973,7 @@ mi_cmd_data_write_memory (char *command,
|
||||
static struct mi_opt opts[] =
|
||||
{
|
||||
{"o", OFFSET_OPT, 1},
|
||||
- 0
|
||||
+ {0}
|
||||
};
|
||||
|
||||
while (1)
|
||||
Index: gdb-6.6/gdb/p-valprint.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/p-valprint.c
|
||||
+++ gdb-6.6/gdb/p-valprint.c
|
||||
@@ -753,7 +753,7 @@ pascal_object_print_value_fields (struct
|
||||
int dont_print_statmem)
|
||||
{
|
||||
int i, len, n_baseclasses;
|
||||
- struct obstack tmp_obstack;
|
||||
+ struct obstack tmp_obstack = {0};
|
||||
char *last_dont_print = obstack_next_free (&dont_print_statmem_obstack);
|
||||
|
||||
CHECK_TYPEDEF (type);
|
||||
@@ -922,7 +922,7 @@ pascal_object_print_value (struct type *
|
||||
enum val_prettyprint pretty,
|
||||
struct type **dont_print_vb)
|
||||
{
|
||||
- struct obstack tmp_obstack;
|
||||
+ struct obstack tmp_obstack = {0};
|
||||
struct type **last_dont_print
|
||||
= (struct type **) obstack_next_free (&dont_print_vb_obstack);
|
||||
int i, n_baseclasses = TYPE_N_BASECLASSES (type);
|
||||
Index: gdb-6.6/gdb/cp-valprint.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/cp-valprint.c
|
||||
+++ gdb-6.6/gdb/cp-valprint.c
|
||||
@@ -265,7 +265,7 @@ cp_print_value_fields (struct type *type
|
||||
struct type **dont_print_vb,int dont_print_statmem)
|
||||
{
|
||||
int i, len, n_baseclasses;
|
||||
- struct obstack tmp_obstack;
|
||||
+ struct obstack tmp_obstack = {0};
|
||||
char *last_dont_print = obstack_next_free (&dont_print_statmem_obstack);
|
||||
int fields_seen = 0;
|
||||
|
||||
@@ -524,7 +524,7 @@ cp_print_value (struct type *type, struc
|
||||
struct ui_file *stream, int format, int recurse,
|
||||
enum val_prettyprint pretty, struct type **dont_print_vb)
|
||||
{
|
||||
- struct obstack tmp_obstack;
|
||||
+ struct obstack tmp_obstack = {0};
|
||||
struct type **last_dont_print
|
||||
= (struct type **) obstack_next_free (&dont_print_vb_obstack);
|
||||
int i, n_baseclasses = TYPE_N_BASECLASSES (type);
|
||||
Index: gdb-6.6/gdb/tui/tui-layout.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/tui/tui-layout.c
|
||||
+++ gdb-6.6/gdb/tui/tui-layout.c
|
||||
@@ -755,7 +755,7 @@ show_source_disasm_command (void)
|
||||
if (TUI_DISASM_WIN == NULL)
|
||||
{
|
||||
make_disasm_window (&TUI_DISASM_WIN, asm_height, src_height - 1);
|
||||
- init_and_make_win ((void **) & locator,
|
||||
+ init_and_make_win ((void **)(char *) & locator,
|
||||
LOCATOR_WIN,
|
||||
2 /* 1 */ ,
|
||||
tui_term_width (),
|
||||
@@ -848,7 +848,7 @@ show_data (enum tui_layout_type new_layo
|
||||
make_source_window (&tui_win_list[win_type], src_height, data_height - 1);
|
||||
else
|
||||
make_disasm_window (&tui_win_list[win_type], src_height, data_height - 1);
|
||||
- init_and_make_win ((void **) & locator,
|
||||
+ init_and_make_win ((void **)(char *) & locator,
|
||||
LOCATOR_WIN,
|
||||
2 /* 1 */ ,
|
||||
tui_term_width (),
|
||||
@@ -963,7 +963,7 @@ make_source_or_disasm_window (struct tui
|
||||
execution_info = tui_source_exec_info_win_ptr ();
|
||||
else
|
||||
execution_info = tui_disassem_exec_info_win_ptr ();
|
||||
- init_and_make_win ((void **) & execution_info,
|
||||
+ init_and_make_win ((void **)(char *) & execution_info,
|
||||
EXEC_INFO_WIN,
|
||||
height,
|
||||
3,
|
||||
@@ -1013,7 +1013,7 @@ show_source_or_disasm_and_command (enum
|
||||
make_source_window (win_info_ptr, src_height - 1, 0);
|
||||
else
|
||||
make_disasm_window (win_info_ptr, src_height - 1, 0);
|
||||
- init_and_make_win ((void **) & locator,
|
||||
+ init_and_make_win ((void **)(char *) & locator,
|
||||
LOCATOR_WIN,
|
||||
2 /* 1 */ ,
|
||||
tui_term_width (),
|
||||
Index: gdb-6.6/gdb/testsuite/gdb.base/move-dir.h
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/testsuite/gdb.base/move-dir.h
|
||||
+++ gdb-6.6/gdb/testsuite/gdb.base/move-dir.h
|
||||
--- gdb-6.7.orig/gdb/testsuite/gdb.base/move-dir.h 2007-10-14 23:31:22.000000000 +0200
|
||||
+++ gdb-6.7/gdb/testsuite/gdb.base/move-dir.h 2007-10-14 23:42:39.000000000 +0200
|
||||
@@ -1,4 +1,4 @@
|
||||
-#include <stdlib.h>
|
||||
+#include <stdio.h>
|
||||
|
||||
void other() {
|
||||
const char* ostring = "other";
|
||||
Index: gdb-6.6/gdb/testsuite/gdb.base/sigrepeat.c
|
||||
Index: gdb-6.7/gdb/testsuite/gdb.base/sigrepeat.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/testsuite/gdb.base/sigrepeat.c
|
||||
+++ gdb-6.6/gdb/testsuite/gdb.base/sigrepeat.c
|
||||
@@ -22,6 +22,7 @@
|
||||
--- gdb-6.7.orig/gdb/testsuite/gdb.base/sigrepeat.c 2007-08-23 20:08:49.000000000 +0200
|
||||
+++ gdb-6.7/gdb/testsuite/gdb.base/sigrepeat.c 2007-10-14 23:42:39.000000000 +0200
|
||||
@@ -21,6 +21,7 @@
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <signal.h>
|
||||
@ -196,11 +40,11 @@ Index: gdb-6.6/gdb/testsuite/gdb.base/sigrepeat.c
|
||||
#include <sys/time.h>
|
||||
|
||||
static volatile int done[2];
|
||||
Index: gdb-6.6/gdb/s390-tdep.c
|
||||
Index: gdb-6.7/gdb/s390-tdep.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/s390-tdep.c
|
||||
+++ gdb-6.6/gdb/s390-tdep.c
|
||||
@@ -2277,6 +2277,9 @@ s390_return_value (struct gdbarch *gdbar
|
||||
--- gdb-6.7.orig/gdb/s390-tdep.c 2007-10-02 21:26:42.000000000 +0200
|
||||
+++ gdb-6.7/gdb/s390-tdep.c 2007-10-14 23:42:39.000000000 +0200
|
||||
@@ -2214,6 +2214,9 @@ s390_return_value (struct gdbarch *gdbar
|
||||
case RETURN_VALUE_STRUCT_CONVENTION:
|
||||
error (_("Cannot set function return value."));
|
||||
break;
|
||||
@ -210,7 +54,7 @@ Index: gdb-6.6/gdb/s390-tdep.c
|
||||
}
|
||||
}
|
||||
else if (out)
|
||||
@@ -2309,6 +2312,9 @@ s390_return_value (struct gdbarch *gdbar
|
||||
@@ -2246,6 +2249,9 @@ s390_return_value (struct gdbarch *gdbar
|
||||
case RETURN_VALUE_STRUCT_CONVENTION:
|
||||
error (_("Function return value unknown."));
|
||||
break;
|
||||
@ -220,27 +64,10 @@ Index: gdb-6.6/gdb/s390-tdep.c
|
||||
}
|
||||
}
|
||||
|
||||
Index: gdb-6.6/gdb/remote.c
|
||||
Index: gdb-6.7/gdb/f-exp.y
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/remote.c
|
||||
+++ gdb-6.6/gdb/remote.c
|
||||
@@ -2843,10 +2843,10 @@ cleanup_sigint_signal_handler (void *dum
|
||||
{
|
||||
signal (SIGINT, handle_sigint);
|
||||
if (sigint_remote_twice_token)
|
||||
- delete_async_signal_handler ((struct async_signal_handler **)
|
||||
+ delete_async_signal_handler ((struct async_signal_handler **) (char *)
|
||||
&sigint_remote_twice_token);
|
||||
if (sigint_remote_token)
|
||||
- delete_async_signal_handler ((struct async_signal_handler **)
|
||||
+ delete_async_signal_handler ((struct async_signal_handler **) (char *)
|
||||
&sigint_remote_token);
|
||||
}
|
||||
|
||||
Index: gdb-6.6/gdb/f-exp.y
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/f-exp.y
|
||||
+++ gdb-6.6/gdb/f-exp.y
|
||||
--- gdb-6.7.orig/gdb/f-exp.y 2007-06-12 17:33:03.000000000 +0200
|
||||
+++ gdb-6.7/gdb/f-exp.y 2007-10-14 23:42:39.000000000 +0200
|
||||
@@ -567,6 +567,8 @@ ptype : typebase
|
||||
case tp_function:
|
||||
follow_type = lookup_function_type (follow_type);
|
||||
@ -250,48 +77,11 @@ Index: gdb-6.6/gdb/f-exp.y
|
||||
}
|
||||
$$ = follow_type;
|
||||
}
|
||||
Index: gdb-6.6/gdb/remote-fileio.c
|
||||
Index: gdb-6.7/gdb/source.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/remote-fileio.c
|
||||
+++ gdb-6.6/gdb/remote-fileio.c
|
||||
@@ -1332,19 +1332,19 @@ static struct {
|
||||
char *name;
|
||||
void (*func)(char *);
|
||||
} remote_fio_func_map[] = {
|
||||
- "open", remote_fileio_func_open,
|
||||
- "close", remote_fileio_func_close,
|
||||
- "read", remote_fileio_func_read,
|
||||
- "write", remote_fileio_func_write,
|
||||
- "lseek", remote_fileio_func_lseek,
|
||||
- "rename", remote_fileio_func_rename,
|
||||
- "unlink", remote_fileio_func_unlink,
|
||||
- "stat", remote_fileio_func_stat,
|
||||
- "fstat", remote_fileio_func_fstat,
|
||||
- "gettimeofday", remote_fileio_func_gettimeofday,
|
||||
- "isatty", remote_fileio_func_isatty,
|
||||
- "system", remote_fileio_func_system,
|
||||
- NULL, NULL
|
||||
+ {"open", remote_fileio_func_open},
|
||||
+ {"close", remote_fileio_func_close},
|
||||
+ {"read", remote_fileio_func_read},
|
||||
+ {"write", remote_fileio_func_write},
|
||||
+ {"lseek", remote_fileio_func_lseek},
|
||||
+ {"rename", remote_fileio_func_rename},
|
||||
+ {"unlink", remote_fileio_func_unlink},
|
||||
+ {"stat", remote_fileio_func_stat},
|
||||
+ {"fstat", remote_fileio_func_fstat},
|
||||
+ {"gettimeofday", remote_fileio_func_gettimeofday},
|
||||
+ {"isatty", remote_fileio_func_isatty},
|
||||
+ {"system", remote_fileio_func_system},
|
||||
+ {NULL, NULL}
|
||||
};
|
||||
|
||||
static int
|
||||
Index: gdb-6.6/gdb/source.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/source.c
|
||||
+++ gdb-6.6/gdb/source.c
|
||||
@@ -172,7 +172,7 @@ get_current_source_symtab_and_line (void
|
||||
--- gdb-6.7.orig/gdb/source.c 2007-08-23 20:08:38.000000000 +0200
|
||||
+++ gdb-6.7/gdb/source.c 2007-10-14 23:42:39.000000000 +0200
|
||||
@@ -170,7 +170,7 @@ get_current_source_symtab_and_line (void
|
||||
void
|
||||
set_default_source_symtab_and_line (void)
|
||||
{
|
||||
@ -300,7 +90,7 @@ Index: gdb-6.6/gdb/source.c
|
||||
|
||||
if (!have_full_symbols () && !have_partial_symbols ())
|
||||
error (_("No symbol table is loaded. Use the \"file\" command."));
|
||||
@@ -1428,7 +1428,7 @@ static void
|
||||
@@ -1439,7 +1439,7 @@ static void
|
||||
line_info (char *arg, int from_tty)
|
||||
{
|
||||
struct symtabs_and_lines sals;
|
||||
@ -309,92 +99,24 @@ Index: gdb-6.6/gdb/source.c
|
||||
CORE_ADDR start_pc, end_pc;
|
||||
int i;
|
||||
|
||||
Index: gdb-6.6/gdb/symfile.c
|
||||
Index: gdb-6.7/gdb/linespec.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/symfile.c
|
||||
+++ gdb-6.6/gdb/symfile.c
|
||||
@@ -2933,6 +2933,8 @@ add_psymbol_with_dem_name_to_list (char
|
||||
deprecated_bcache (buf, dem_namelength + 1, objfile->psymbol_cache);
|
||||
break;
|
||||
/* FIXME What should be done for the default case? Ignoring for now. */
|
||||
+ default:
|
||||
+ break;
|
||||
}
|
||||
|
||||
/* val and coreaddr are mutually exclusive, one of them *will* be zero */
|
||||
Index: gdb-6.6/gdb/linespec.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/linespec.c
|
||||
+++ gdb-6.6/gdb/linespec.c
|
||||
@@ -1631,7 +1631,7 @@ static struct symtabs_and_lines
|
||||
--- gdb-6.7.orig/gdb/linespec.c 2007-10-14 23:31:03.000000000 +0200
|
||||
+++ gdb-6.7/gdb/linespec.c 2007-10-14 23:53:57.000000000 +0200
|
||||
@@ -1654,7 +1654,7 @@ static struct symtabs_and_lines
|
||||
find_method (int funfirstline, char ***canonical, char *saved_arg,
|
||||
char *copy, struct type *t, struct symbol *sym_class)
|
||||
{
|
||||
- struct symtabs_and_lines values;
|
||||
+ struct symtabs_and_lines values = {0};
|
||||
struct symbol *sym = 0;
|
||||
+ struct symtabs_and_lines values = { NULL };
|
||||
struct symbol *sym = NULL;
|
||||
int i1; /* Counter for the symbol array. */
|
||||
struct symbol **sym_arr = alloca (total_number_of_methods (t)
|
||||
Index: gdb-6.6/gdb/macroscope.c
|
||||
Index: gdb-6.7/gdb/gdb-events.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/macroscope.c
|
||||
+++ gdb-6.6/gdb/macroscope.c
|
||||
@@ -33,7 +33,7 @@
|
||||
struct macro_scope *
|
||||
sal_macro_scope (struct symtab_and_line sal)
|
||||
{
|
||||
- struct macro_source_file *main, *inclusion;
|
||||
+ struct macro_source_file *main_sf, *inclusion;
|
||||
struct macro_scope *ms;
|
||||
|
||||
if (! sal.symtab
|
||||
@@ -42,8 +42,8 @@ sal_macro_scope (struct symtab_and_line
|
||||
|
||||
ms = (struct macro_scope *) xmalloc (sizeof (*ms));
|
||||
|
||||
- main = macro_main (sal.symtab->macro_table);
|
||||
- inclusion = macro_lookup_inclusion (main, sal.symtab->filename);
|
||||
+ main_sf = macro_main (sal.symtab->macro_table);
|
||||
+ inclusion = macro_lookup_inclusion (main_sf, sal.symtab->filename);
|
||||
|
||||
if (inclusion)
|
||||
{
|
||||
@@ -66,7 +66,7 @@ sal_macro_scope (struct symtab_and_line
|
||||
|
||||
For the time being, though, we'll just treat these as
|
||||
occurring at the end of the main source file. */
|
||||
- ms->file = main;
|
||||
+ ms->file = main_sf;
|
||||
ms->line = -1;
|
||||
|
||||
complaint (&symfile_complaints,
|
||||
@@ -83,7 +83,6 @@ struct macro_scope *
|
||||
default_macro_scope (void)
|
||||
{
|
||||
struct symtab_and_line sal;
|
||||
- struct macro_source_file *main;
|
||||
struct macro_scope *ms;
|
||||
|
||||
/* If there's a selected frame, use its PC. */
|
||||
Index: gdb-6.6/gdb/target.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/target.c
|
||||
+++ gdb-6.6/gdb/target.c
|
||||
@@ -1045,6 +1045,9 @@ memory_xfer_partial (struct target_ops *
|
||||
if (writebuf != NULL)
|
||||
error (_("Writing to flash memory forbidden in this context"));
|
||||
break;
|
||||
+
|
||||
+ default:
|
||||
+ break;
|
||||
}
|
||||
|
||||
if (region->attrib.cache)
|
||||
Index: gdb-6.6/gdb/gdb-events.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/gdb-events.c
|
||||
+++ gdb-6.6/gdb/gdb-events.c
|
||||
@@ -321,6 +321,8 @@ gdb_events_deliver (struct gdb_events *v
|
||||
--- gdb-6.7.orig/gdb/gdb-events.c 2007-08-23 20:08:31.000000000 +0200
|
||||
+++ gdb-6.7/gdb/gdb-events.c 2007-10-14 23:42:39.000000000 +0200
|
||||
@@ -319,6 +319,8 @@ gdb_events_deliver (struct gdb_events *v
|
||||
case architecture_changed:
|
||||
vector->architecture_changed ();
|
||||
break;
|
||||
@ -403,11 +125,11 @@ Index: gdb-6.6/gdb/gdb-events.c
|
||||
}
|
||||
delivering_events = event->next;
|
||||
xfree (event);
|
||||
Index: gdb-6.6/gdb/dwarf2read.c
|
||||
Index: gdb-6.7/gdb/dwarf2read.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/dwarf2read.c
|
||||
+++ gdb-6.6/gdb/dwarf2read.c
|
||||
@@ -9307,6 +9307,7 @@ dwarf_decode_macros (struct line_header
|
||||
--- gdb-6.7.orig/gdb/dwarf2read.c 2007-10-14 23:31:22.000000000 +0200
|
||||
+++ gdb-6.7/gdb/dwarf2read.c 2007-10-14 23:42:39.000000000 +0200
|
||||
@@ -9585,6 +9585,7 @@ dwarf_decode_macros (struct line_header
|
||||
for (;;)
|
||||
{
|
||||
enum dwarf_macinfo_record_type macinfo_type;
|
||||
@ -415,7 +137,7 @@ Index: gdb-6.6/gdb/dwarf2read.c
|
||||
|
||||
/* Do we at least have room for a macinfo type byte? */
|
||||
if (mac_ptr >= mac_end)
|
||||
@@ -9318,13 +9319,16 @@ dwarf_decode_macros (struct line_header
|
||||
@@ -9596,13 +9597,16 @@ dwarf_decode_macros (struct line_header
|
||||
macinfo_type = read_1_byte (abfd, mac_ptr);
|
||||
mac_ptr++;
|
||||
|
||||
@ -437,11 +159,11 @@ Index: gdb-6.6/gdb/dwarf2read.c
|
||||
case DW_MACINFO_define:
|
||||
case DW_MACINFO_undef:
|
||||
{
|
||||
Index: gdb-6.6/gdb/stabsread.c
|
||||
Index: gdb-6.7/gdb/stabsread.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/stabsread.c
|
||||
+++ gdb-6.6/gdb/stabsread.c
|
||||
@@ -1794,7 +1794,8 @@ again:
|
||||
--- gdb-6.7.orig/gdb/stabsread.c 2007-10-09 00:44:32.000000000 +0200
|
||||
+++ gdb-6.7/gdb/stabsread.c 2007-10-14 23:42:39.000000000 +0200
|
||||
@@ -1842,7 +1842,8 @@ again:
|
||||
struct type *domain = read_type (pp, objfile);
|
||||
struct type *return_type;
|
||||
struct field *args;
|
||||
@ -451,11 +173,11 @@ Index: gdb-6.6/gdb/stabsread.c
|
||||
|
||||
if (**pp != ',')
|
||||
/* Invalid member type data format. */
|
||||
Index: gdb-6.6/gdb/dwarf2expr.c
|
||||
Index: gdb-6.7/gdb/dwarf2expr.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/dwarf2expr.c
|
||||
+++ gdb-6.6/gdb/dwarf2expr.c
|
||||
@@ -559,6 +559,8 @@ execute_stack_op (struct dwarf_expr_cont
|
||||
--- gdb-6.7.orig/gdb/dwarf2expr.c 2007-08-23 20:08:28.000000000 +0200
|
||||
+++ gdb-6.7/gdb/dwarf2expr.c 2007-10-14 23:42:39.000000000 +0200
|
||||
@@ -594,6 +594,8 @@ execute_stack_op (struct dwarf_expr_cont
|
||||
op_ptr = read_uleb128 (op_ptr, op_end, ®);
|
||||
result += reg;
|
||||
break;
|
||||
@ -464,24 +186,11 @@ Index: gdb-6.6/gdb/dwarf2expr.c
|
||||
}
|
||||
break;
|
||||
|
||||
Index: gdb-6.6/gdb/varobj.c
|
||||
Index: gdb-6.7/gdb/varobj.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/varobj.c
|
||||
+++ gdb-6.6/gdb/varobj.c
|
||||
@@ -325,10 +325,9 @@ struct language_specific
|
||||
|
||||
/* Array of known source language routines. */
|
||||
static struct language_specific
|
||||
- languages[vlang_end][sizeof (struct language_specific)] = {
|
||||
+ languages[vlang_end] = {
|
||||
/* Unknown (try treating as C */
|
||||
- {
|
||||
- vlang_unknown,
|
||||
+ {vlang_unknown,
|
||||
c_number_of_children,
|
||||
c_name_of_variable,
|
||||
c_name_of_child,
|
||||
@@ -339,8 +338,7 @@ static struct language_specific
|
||||
--- gdb-6.7.orig/gdb/varobj.c 2007-10-13 05:29:58.000000000 +0200
|
||||
+++ gdb-6.7/gdb/varobj.c 2007-10-14 23:42:39.000000000 +0200
|
||||
@@ -347,8 +347,7 @@ static struct language_specific language
|
||||
c_value_of_variable}
|
||||
,
|
||||
/* C */
|
||||
@ -491,7 +200,7 @@ Index: gdb-6.6/gdb/varobj.c
|
||||
c_number_of_children,
|
||||
c_name_of_variable,
|
||||
c_name_of_child,
|
||||
@@ -351,8 +349,7 @@ static struct language_specific
|
||||
@@ -360,8 +359,7 @@ static struct language_specific language
|
||||
c_value_of_variable}
|
||||
,
|
||||
/* C++ */
|
||||
@ -501,7 +210,7 @@ Index: gdb-6.6/gdb/varobj.c
|
||||
cplus_number_of_children,
|
||||
cplus_name_of_variable,
|
||||
cplus_name_of_child,
|
||||
@@ -363,8 +360,7 @@ static struct language_specific
|
||||
@@ -373,8 +371,7 @@ static struct language_specific language
|
||||
cplus_value_of_variable}
|
||||
,
|
||||
/* Java */
|
||||
@ -511,20 +220,11 @@ Index: gdb-6.6/gdb/varobj.c
|
||||
java_number_of_children,
|
||||
java_name_of_variable,
|
||||
java_name_of_child,
|
||||
@@ -519,7 +515,7 @@ varobj_create (char *objname,
|
||||
|
||||
/* Set language info */
|
||||
lang = variable_language (var);
|
||||
- var->root->lang = languages[lang];
|
||||
+ var->root->lang = &languages[lang];
|
||||
|
||||
/* Set ourselves as our root */
|
||||
var->root->rootvar = var;
|
||||
Index: gdb-6.6/gdb/doublest.c
|
||||
Index: gdb-6.7/gdb/doublest.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/doublest.c
|
||||
+++ gdb-6.6/gdb/doublest.c
|
||||
@@ -94,15 +94,10 @@ get_field (const bfd_byte *data, enum fl
|
||||
--- gdb-6.7.orig/gdb/doublest.c 2007-08-23 20:08:28.000000000 +0200
|
||||
+++ gdb-6.7/gdb/doublest.c 2007-10-14 23:42:39.000000000 +0200
|
||||
@@ -92,15 +92,10 @@ get_field (const bfd_byte *data, enum fl
|
||||
{
|
||||
result |= (unsigned long)*(data + cur_byte) << cur_bitshift;
|
||||
cur_bitshift += FLOATFORMAT_CHAR_BIT;
|
||||
@ -544,10 +244,11 @@ Index: gdb-6.6/gdb/doublest.c
|
||||
}
|
||||
if (len < sizeof(result) * FLOATFORMAT_CHAR_BIT)
|
||||
/* Mask out bits which are not part of the field */
|
||||
diff -u -rup gdb-6.6-orig/gdb/cli/cli-cmds.c gdb-6.6/gdb/cli/cli-cmds.c
|
||||
--- gdb-6.6-orig/gdb/cli/cli-cmds.c 2007-04-08 20:49:09.000000000 +0200
|
||||
+++ gdb-6.6/gdb/cli/cli-cmds.c 2007-04-08 20:54:49.000000000 +0200
|
||||
@@ -323,7 +323,8 @@ pwd_command (char *args, int from_tty)
|
||||
Index: gdb-6.7/gdb/cli/cli-cmds.c
|
||||
===================================================================
|
||||
--- gdb-6.7.orig/gdb/cli/cli-cmds.c 2007-08-23 20:08:47.000000000 +0200
|
||||
+++ gdb-6.7/gdb/cli/cli-cmds.c 2007-10-14 23:42:39.000000000 +0200
|
||||
@@ -320,7 +320,8 @@ pwd_command (char *args, int from_tty)
|
||||
{
|
||||
if (args)
|
||||
error (_("The \"pwd\" command does not take an argument: %s"), args);
|
||||
@ -557,10 +258,11 @@ diff -u -rup gdb-6.6-orig/gdb/cli/cli-cmds.c gdb-6.6/gdb/cli/cli-cmds.c
|
||||
|
||||
if (strcmp (gdb_dirbuf, current_directory) != 0)
|
||||
printf_unfiltered (_("Working directory %s\n (canonically %s).\n"),
|
||||
diff -u -rup gdb-6.6-orig/gdb/inflow.c gdb-6.6/gdb/inflow.c
|
||||
--- gdb-6.6-orig/gdb/inflow.c 2006-02-10 23:01:43.000000000 +0100
|
||||
+++ gdb-6.6/gdb/inflow.c 2007-04-08 20:56:48.000000000 +0200
|
||||
@@ -549,17 +549,20 @@ new_tty (void)
|
||||
Index: gdb-6.7/gdb/inflow.c
|
||||
===================================================================
|
||||
--- gdb-6.7.orig/gdb/inflow.c 2007-08-23 20:08:35.000000000 +0200
|
||||
+++ gdb-6.7/gdb/inflow.c 2007-10-14 23:42:39.000000000 +0200
|
||||
@@ -547,17 +547,20 @@ new_tty (void)
|
||||
if (tty != 0)
|
||||
{
|
||||
close (0);
|
||||
@ -584,12 +286,13 @@ diff -u -rup gdb-6.6-orig/gdb/inflow.c gdb-6.6/gdb/inflow.c
|
||||
}
|
||||
if (tty > 2)
|
||||
close (tty);
|
||||
diff -u -rup gdb-6.6-orig/gdb/linux-nat.c gdb-6.6/gdb/linux-nat.c
|
||||
--- gdb-6.6-orig/gdb/linux-nat.c 2007-04-08 20:49:11.000000000 +0200
|
||||
+++ gdb-6.6/gdb/linux-nat.c 2007-04-08 20:54:08.000000000 +0200
|
||||
@@ -2972,7 +2972,8 @@ linux_nat_info_proc_cmd (char *args, int
|
||||
Index: gdb-6.7/gdb/linux-nat.c
|
||||
===================================================================
|
||||
--- gdb-6.7.orig/gdb/linux-nat.c 2007-10-14 23:31:22.000000000 +0200
|
||||
+++ gdb-6.7/gdb/linux-nat.c 2007-10-14 23:42:39.000000000 +0200
|
||||
@@ -2895,7 +2895,8 @@ linux_nat_info_proc_cmd (char *args, int
|
||||
sprintf (fname1, "/proc/%lld/cmdline", pid);
|
||||
if ((procfile = fopen (fname1, "r")) > 0)
|
||||
if ((procfile = fopen (fname1, "r")) != NULL)
|
||||
{
|
||||
- fgets (buffer, sizeof (buffer), procfile);
|
||||
+ /* Unused result. */
|
||||
@ -597,10 +300,11 @@ diff -u -rup gdb-6.6-orig/gdb/linux-nat.c gdb-6.6/gdb/linux-nat.c
|
||||
printf_filtered ("cmdline = '%s'\n", buffer);
|
||||
fclose (procfile);
|
||||
}
|
||||
diff -u -rup gdb-6.6-orig/gdb/main.c gdb-6.6/gdb/main.c
|
||||
--- gdb-6.6-orig/gdb/main.c 2007-04-08 20:49:09.000000000 +0200
|
||||
+++ gdb-6.6/gdb/main.c 2007-04-08 20:55:30.000000000 +0200
|
||||
@@ -195,7 +195,8 @@ captured_main (void *data)
|
||||
Index: gdb-6.7/gdb/main.c
|
||||
===================================================================
|
||||
--- gdb-6.7.orig/gdb/main.c 2007-08-23 20:08:36.000000000 +0200
|
||||
+++ gdb-6.7/gdb/main.c 2007-10-14 23:42:39.000000000 +0200
|
||||
@@ -193,7 +193,8 @@ captured_main (void *data)
|
||||
line[0] = '\0'; /* Terminate saved (now empty) cmd line */
|
||||
instream = stdin;
|
||||
|
||||
@ -610,23 +314,11 @@ diff -u -rup gdb-6.6-orig/gdb/main.c gdb-6.6/gdb/main.c
|
||||
current_directory = gdb_dirbuf;
|
||||
|
||||
gdb_stdout = stdio_fileopen (stdout);
|
||||
diff -u -rup gdb-6.6-orig/gdb/mi/mi-cmd-env.c gdb-6.6/gdb/mi/mi-cmd-env.c
|
||||
--- gdb-6.6-orig/gdb/mi/mi-cmd-env.c 2007-04-08 20:49:09.000000000 +0200
|
||||
+++ gdb-6.6/gdb/mi/mi-cmd-env.c 2007-04-08 20:55:11.000000000 +0200
|
||||
@@ -80,7 +80,8 @@ mi_cmd_env_pwd (char *command, char **ar
|
||||
|
||||
/* Otherwise the mi level is 2 or higher. */
|
||||
|
||||
- getcwd (gdb_dirbuf, sizeof (gdb_dirbuf));
|
||||
+ /* Unused result. */
|
||||
+ 1 && getcwd (gdb_dirbuf, sizeof (gdb_dirbuf));
|
||||
ui_out_field_string (uiout, "cwd", gdb_dirbuf);
|
||||
|
||||
return MI_CMD_DONE;
|
||||
diff -u -rup gdb-6.6-orig/gdb/top.c gdb-6.6/gdb/top.c
|
||||
--- gdb-6.6-orig/gdb/top.c 2007-04-08 20:49:10.000000000 +0200
|
||||
+++ gdb-6.6/gdb/top.c 2007-04-08 20:55:46.000000000 +0200
|
||||
@@ -1643,7 +1643,8 @@ gdb_init (char *argv0)
|
||||
Index: gdb-6.7/gdb/top.c
|
||||
===================================================================
|
||||
--- gdb-6.7.orig/gdb/top.c 2007-10-14 23:38:27.000000000 +0200
|
||||
+++ gdb-6.7/gdb/top.c 2007-10-14 23:42:39.000000000 +0200
|
||||
@@ -1636,7 +1636,8 @@ gdb_init (char *argv0)
|
||||
|
||||
/* Run the init function of each source file */
|
||||
|
||||
@ -636,10 +328,11 @@ diff -u -rup gdb-6.6-orig/gdb/top.c gdb-6.6/gdb/top.c
|
||||
current_directory = gdb_dirbuf;
|
||||
|
||||
#ifdef __MSDOS__
|
||||
diff -u -rup gdb-6.6-orig/gdb/ui-file.c gdb-6.6/gdb/ui-file.c
|
||||
--- gdb-6.6-orig/gdb/ui-file.c 2005-12-17 23:34:03.000000000 +0100
|
||||
+++ gdb-6.6/gdb/ui-file.c 2007-04-08 20:56:21.000000000 +0200
|
||||
@@ -482,7 +482,8 @@ stdio_file_write (struct ui_file *file,
|
||||
Index: gdb-6.7/gdb/ui-file.c
|
||||
===================================================================
|
||||
--- gdb-6.7.orig/gdb/ui-file.c 2007-08-23 20:08:46.000000000 +0200
|
||||
+++ gdb-6.7/gdb/ui-file.c 2007-10-14 23:42:39.000000000 +0200
|
||||
@@ -480,7 +480,8 @@ stdio_file_write (struct ui_file *file,
|
||||
if (stdio->magic != &stdio_file_magic)
|
||||
internal_error (__FILE__, __LINE__,
|
||||
_("stdio_file_write: bad magic number"));
|
||||
@ -649,10 +342,11 @@ diff -u -rup gdb-6.6-orig/gdb/ui-file.c gdb-6.6/gdb/ui-file.c
|
||||
}
|
||||
|
||||
static void
|
||||
diff -u -rup gdb-6.6-orig/gdb/utils.c gdb-6.6/gdb/utils.c
|
||||
--- gdb-6.6-orig/gdb/utils.c 2007-04-08 20:49:09.000000000 +0200
|
||||
+++ gdb-6.6/gdb/utils.c 2007-04-08 20:56:01.000000000 +0200
|
||||
@@ -718,7 +718,8 @@ internal_vproblem (struct internal_probl
|
||||
Index: gdb-6.7/gdb/utils.c
|
||||
===================================================================
|
||||
--- gdb-6.7.orig/gdb/utils.c 2007-08-23 20:08:46.000000000 +0200
|
||||
+++ gdb-6.7/gdb/utils.c 2007-10-14 23:42:39.000000000 +0200
|
||||
@@ -716,7 +716,8 @@ internal_vproblem (struct internal_probl
|
||||
abort (); /* NOTE: GDB has only three calls to abort(). */
|
||||
default:
|
||||
dejavu = 3;
|
||||
@ -662,9 +356,11 @@ diff -u -rup gdb-6.6-orig/gdb/utils.c gdb-6.6/gdb/utils.c
|
||||
exit (1);
|
||||
}
|
||||
}
|
||||
--- ./gdb/gdbserver/gdbreplay.c 29 Mar 2007 01:06:47 -0000 1.14
|
||||
+++ ./gdb/gdbserver/gdbreplay.c 8 Aug 2007 20:32:12 -0000
|
||||
@@ -358,7 +358,12 @@ expect (FILE *fp)
|
||||
Index: gdb-6.7/gdb/gdbserver/gdbreplay.c
|
||||
===================================================================
|
||||
--- gdb-6.7.orig/gdb/gdbserver/gdbreplay.c 2007-08-23 20:08:48.000000000 +0200
|
||||
+++ gdb-6.7/gdb/gdbserver/gdbreplay.c 2007-10-14 23:42:39.000000000 +0200
|
||||
@@ -356,7 +356,12 @@ expect (FILE *fp)
|
||||
{
|
||||
break;
|
||||
}
|
||||
@ -678,7 +374,7 @@ diff -u -rup gdb-6.6-orig/gdb/utils.c gdb-6.6/gdb/utils.c
|
||||
}
|
||||
while (fromlog == fromgdb);
|
||||
if (fromlog != EOL)
|
||||
@@ -385,7 +390,11 @@ play (FILE *fp)
|
||||
@@ -383,7 +388,11 @@ play (FILE *fp)
|
||||
while ((fromlog = logchar (fp)) != EOL)
|
||||
{
|
||||
ch = fromlog;
|
||||
|
@ -1,351 +0,0 @@
|
||||
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=109921
|
||||
|
||||
|
||||
2007-01-09 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* buildsym.c (start_subfile_index): Renamed `start_subfile' now
|
||||
supporting the FILE_INDEX parameter.
|
||||
(start_subfile): Backward compatible stub for `start_subfile_index'.
|
||||
(end_symtab): Resolve new SYMBOL.FILE.SYMTAB from SYMBOL.FILE.INDEX.
|
||||
Substitute possibly missing DIRNAME from the CU's main file DIRNAME.
|
||||
Clear `subfiles' variable as its data have been deallocated.
|
||||
* buildsym.h (struct subfile): New field `file_index'.
|
||||
(start_subfile_index): New prototype.
|
||||
* dwarf2read.c (add_file_name): Ensure subfile has been founded.
|
||||
(dwarf_decode_lines): Specify the new FILE_INDEX parameter.
|
||||
(dwarf2_start_subfile): New FILE_INDEX parameter.
|
||||
(new_symbol): Extract `DW_AT_decl_file' DWARF 2 information entry.
|
||||
* symtab.c (lookup_symbol): Override by the new SYMBOL.FILE.SYMTAB.
|
||||
(search_symbols): Likewise.
|
||||
* symtab.h (struct symbol): New fields FILE.INDEX and FILE.SYMTAB.
|
||||
(SYMBOL_FILE_INDEX, SYMBOL_FILE_SYMTAB): New macros.
|
||||
|
||||
|
||||
Index: gdb-6.6/gdb/buildsym.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/buildsym.c 2006-08-25 18:32:32.000000000 +0200
|
||||
+++ gdb-6.6/gdb/buildsym.c 2007-01-20 13:59:48.000000000 +0100
|
||||
@@ -540,7 +540,7 @@ make_blockvector (struct objfile *objfil
|
||||
the directory in which it resides (or NULL if not known). */
|
||||
|
||||
void
|
||||
-start_subfile (char *name, char *dirname)
|
||||
+start_subfile_index (char *name, char *dirname, unsigned file_index)
|
||||
{
|
||||
struct subfile *subfile;
|
||||
|
||||
@@ -552,6 +552,17 @@ start_subfile (char *name, char *dirname
|
||||
if (FILENAME_CMP (subfile->name, name) == 0)
|
||||
{
|
||||
current_subfile = subfile;
|
||||
+
|
||||
+ if (subfile->file_index != 0 && file_index != 0
|
||||
+ && subfile->file_index != file_index)
|
||||
+ complaint (&symfile_complaints, _("Filenames indexing conflict: "
|
||||
+ "name \"%s\" dir \"%s\" index %u vs. "
|
||||
+ "name \"%s\" dir \"%s\" index %u"),
|
||||
+ subfile->name, subfile->dirname, subfile->file_index,
|
||||
+ name, dirname, file_index);
|
||||
+ if (subfile->file_index == 0)
|
||||
+ subfile->file_index = file_index;
|
||||
+
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -567,6 +578,7 @@ start_subfile (char *name, char *dirname
|
||||
current_subfile = subfile;
|
||||
|
||||
/* Save its name and compilation directory name */
|
||||
+ subfile->file_index = file_index;
|
||||
subfile->name = (name == NULL) ? NULL : savestring (name, strlen (name));
|
||||
subfile->dirname =
|
||||
(dirname == NULL) ? NULL : savestring (dirname, strlen (dirname));
|
||||
@@ -622,6 +634,13 @@ start_subfile (char *name, char *dirname
|
||||
}
|
||||
}
|
||||
|
||||
+/* Backward compatibility. */
|
||||
+void
|
||||
+start_subfile (char *name, char *dirname)
|
||||
+{
|
||||
+ start_subfile_index (name, dirname, 0);
|
||||
+}
|
||||
+
|
||||
/* For stabs readers, the first N_SO symbol is assumed to be the
|
||||
source file name, and the subfile struct is initialized using that
|
||||
assumption. If another N_SO symbol is later seen, immediately
|
||||
@@ -821,9 +840,12 @@ end_symtab (CORE_ADDR end_addr, struct o
|
||||
{
|
||||
struct symtab *symtab = NULL;
|
||||
struct blockvector *blockvector;
|
||||
- struct subfile *subfile;
|
||||
+ struct subfile *subfile, *subfile_main;
|
||||
struct context_stack *cstk;
|
||||
struct subfile *nextsub;
|
||||
+ int subfiles_count;
|
||||
+ struct symtab **file_index_to_symtab;
|
||||
+ size_t file_index_to_symtab_size;
|
||||
|
||||
/* Finish the lexical context of the last function in the file; pop
|
||||
the context stack. */
|
||||
@@ -921,6 +943,18 @@ end_symtab (CORE_ADDR end_addr, struct o
|
||||
#endif
|
||||
PROCESS_LINENUMBER_HOOK (); /* Needed for xcoff. */
|
||||
|
||||
+ /* Get the last subfile s SUBFILE_MAIN which is the main file of CU.
|
||||
+ Count SUBFILES_COUNT.
|
||||
+ Start with 1 as we do not iterate past the last item. */
|
||||
+ subfiles_count = 1;
|
||||
+ for (subfile_main = subfiles; subfile_main && subfile_main->next;
|
||||
+ subfile_main = subfile_main->next)
|
||||
+ subfiles_count++;
|
||||
+
|
||||
+ file_index_to_symtab_size = sizeof (*file_index_to_symtab) * subfiles_count;
|
||||
+ file_index_to_symtab = xmalloc (file_index_to_symtab_size);
|
||||
+ memset ((char *) file_index_to_symtab, 0, file_index_to_symtab_size);
|
||||
+
|
||||
/* Now create the symtab objects proper, one for each subfile. */
|
||||
/* (The main file is the last one on the chain.) */
|
||||
|
||||
@@ -981,6 +1015,16 @@ end_symtab (CORE_ADDR end_addr, struct o
|
||||
strlen (subfile->dirname) + 1);
|
||||
strcpy (symtab->dirname, subfile->dirname);
|
||||
}
|
||||
+ /* Non-primary subfiles may miss COMP_DIR resulting in NULL
|
||||
+ DIRNAME and so default it from the CU file - SUBFILE_MAIN. */
|
||||
+ else if (subfile_main->dirname)
|
||||
+ {
|
||||
+ /* Reallocate the dirname on the symbol obstack */
|
||||
+ symtab->dirname = (char *)
|
||||
+ obstack_alloc (&objfile->objfile_obstack,
|
||||
+ strlen (subfile_main->dirname) + 1);
|
||||
+ strcpy (symtab->dirname, subfile_main->dirname);
|
||||
+ }
|
||||
else
|
||||
{
|
||||
symtab->dirname = NULL;
|
||||
@@ -1009,6 +1053,13 @@ end_symtab (CORE_ADDR end_addr, struct o
|
||||
but the main file. */
|
||||
|
||||
symtab->primary = 0;
|
||||
+
|
||||
+ /* It may be zero for files unlisted in File Table. */
|
||||
+ if (subfile->file_index)
|
||||
+ {
|
||||
+ gdb_assert (subfile->file_index <= subfiles_count);
|
||||
+ file_index_to_symtab[subfile->file_index - 1] = symtab;
|
||||
+ }
|
||||
}
|
||||
if (subfile->name != NULL)
|
||||
{
|
||||
@@ -1037,9 +1088,40 @@ end_symtab (CORE_ADDR end_addr, struct o
|
||||
symtab->primary = 1;
|
||||
}
|
||||
|
||||
+ /* Resolve `struct symbol.file.index' into `struct symbol.file.symtab'. */
|
||||
+ if (blockvector)
|
||||
+ {
|
||||
+ int block_i;
|
||||
+
|
||||
+ for (block_i = 0; block_i < BLOCKVECTOR_NBLOCKS (blockvector); block_i++)
|
||||
+ {
|
||||
+ struct symbol *sym;
|
||||
+ struct dict_iterator iter;
|
||||
+
|
||||
+ for (sym = dict_iterator_first (BLOCK_DICT
|
||||
+ (BLOCKVECTOR_BLOCK (blockvector, block_i)), &iter);
|
||||
+ sym != NULL;
|
||||
+ sym = dict_iterator_next (&iter))
|
||||
+ {
|
||||
+ /* Beware the ordering as `sym->file' is a union. */
|
||||
+ if (SYMBOL_FILE_INDEX (sym)
|
||||
+ && file_index_to_symtab[SYMBOL_FILE_INDEX (sym) - 1])
|
||||
+ SYMBOL_FILE_SYMTAB (sym) = file_index_to_symtab
|
||||
+ [SYMBOL_FILE_INDEX (sym) - 1];
|
||||
+ else
|
||||
+ {
|
||||
+ /* Default to the primary symbol table, never use NULL. */
|
||||
+ SYMBOL_FILE_SYMTAB (sym) = symtab;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ xfree (file_index_to_symtab);
|
||||
last_source_file = NULL;
|
||||
current_subfile = NULL;
|
||||
pending_macros = NULL;
|
||||
+ subfiles = NULL;
|
||||
|
||||
return symtab;
|
||||
}
|
||||
Index: gdb-6.6/gdb/buildsym.h
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/buildsym.h 2005-12-17 23:33:59.000000000 +0100
|
||||
+++ gdb-6.6/gdb/buildsym.h 2007-01-20 13:59:48.000000000 +0100
|
||||
@@ -63,6 +63,7 @@ EXTERN CORE_ADDR last_source_start_addr;
|
||||
struct subfile
|
||||
{
|
||||
struct subfile *next;
|
||||
+ unsigned file_index;
|
||||
char *name;
|
||||
char *dirname;
|
||||
struct linetable *line_vector;
|
||||
@@ -240,6 +241,9 @@ extern void finish_block (struct symbol
|
||||
|
||||
extern void really_free_pendings (void *dummy);
|
||||
|
||||
+extern void start_subfile_index (char *name, char *dirname,
|
||||
+ unsigned file_index);
|
||||
+
|
||||
extern void start_subfile (char *name, char *dirname);
|
||||
|
||||
extern void patch_subfile_names (struct subfile *subfile, char *name);
|
||||
Index: gdb-6.6/gdb/dwarf2read.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/dwarf2read.c 2007-01-20 06:43:04.000000000 +0100
|
||||
+++ gdb-6.6/gdb/dwarf2read.c 2007-01-20 14:00:12.000000000 +0100
|
||||
@@ -853,7 +853,7 @@ static struct line_header *(dwarf_decode
|
||||
static void dwarf_decode_lines (struct line_header *, char *, bfd *,
|
||||
struct dwarf2_cu *, struct partial_symtab *);
|
||||
|
||||
-static void dwarf2_start_subfile (char *, char *, char *);
|
||||
+static void dwarf2_start_subfile (char *, char *, char *, unsigned);
|
||||
|
||||
static struct symbol *new_symbol (struct die_info *, struct type *,
|
||||
struct dwarf2_cu *);
|
||||
@@ -6428,6 +6428,7 @@ add_file_name (struct line_header *lh,
|
||||
unsigned int length)
|
||||
{
|
||||
struct file_entry *fe;
|
||||
+ char *dir = NULL;
|
||||
|
||||
/* Grow the array if necessary. */
|
||||
if (lh->file_names_size == 0)
|
||||
@@ -6450,6 +6451,10 @@ add_file_name (struct line_header *lh,
|
||||
fe->mod_time = mod_time;
|
||||
fe->length = length;
|
||||
fe->included_p = 0;
|
||||
+
|
||||
+ if (dir_index)
|
||||
+ dir = lh->include_dirs[dir_index - 1];
|
||||
+ dwarf2_start_subfile (name, dir, NULL, lh->num_file_names);
|
||||
}
|
||||
|
||||
|
||||
@@ -6668,7 +6673,7 @@ dwarf_decode_lines (struct line_header *
|
||||
if (fe->dir_index)
|
||||
dir = lh->include_dirs[fe->dir_index - 1];
|
||||
|
||||
- dwarf2_start_subfile (fe->name, dir, comp_dir);
|
||||
+ dwarf2_start_subfile (fe->name, dir, comp_dir, file);
|
||||
}
|
||||
|
||||
/* Decode the table. */
|
||||
@@ -6785,7 +6790,7 @@ dwarf_decode_lines (struct line_header *
|
||||
if (!decode_for_pst_p)
|
||||
{
|
||||
last_subfile = current_subfile;
|
||||
- dwarf2_start_subfile (fe->name, dir, comp_dir);
|
||||
+ dwarf2_start_subfile (fe->name, dir, comp_dir, file);
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -6889,7 +6894,8 @@ dwarf_decode_lines (struct line_header *
|
||||
subfile's name. */
|
||||
|
||||
static void
|
||||
-dwarf2_start_subfile (char *filename, char *dirname, char *comp_dir)
|
||||
+dwarf2_start_subfile (char *filename, char *dirname, char *comp_dir,
|
||||
+ unsigned file_index)
|
||||
{
|
||||
char *fullname;
|
||||
|
||||
@@ -6908,7 +6914,7 @@ dwarf2_start_subfile (char *filename, ch
|
||||
else
|
||||
fullname = filename;
|
||||
|
||||
- start_subfile (fullname, comp_dir);
|
||||
+ start_subfile_index (fullname, comp_dir, file_index);
|
||||
|
||||
if (fullname != filename)
|
||||
xfree (fullname);
|
||||
@@ -7017,6 +7023,13 @@ new_symbol (struct die_info *die, struct
|
||||
{
|
||||
SYMBOL_LINE (sym) = DW_UNSND (attr);
|
||||
}
|
||||
+ attr = dwarf2_attr (die, DW_AT_decl_file, cu);
|
||||
+ if (attr)
|
||||
+ {
|
||||
+ /* Do not yet search `objfile->symtabs' here as they still do not
|
||||
+ have filled in their FILE.INDEX fields. */
|
||||
+ SYMBOL_FILE_INDEX (sym) = DW_UNSND (attr);
|
||||
+ }
|
||||
switch (die->tag)
|
||||
{
|
||||
case DW_TAG_label:
|
||||
Index: gdb-6.6/gdb/symtab.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/symtab.c 2007-01-20 13:59:25.000000000 +0100
|
||||
+++ gdb-6.6/gdb/symtab.c 2007-01-20 13:59:48.000000000 +0100
|
||||
@@ -1129,6 +1129,10 @@ lookup_symbol (const char *name, const s
|
||||
if (needtofreename)
|
||||
xfree (demangled_name);
|
||||
|
||||
+ /* Override the returned symtab with optional symbol's specific one. */
|
||||
+ if (returnval != NULL && symtab != NULL)
|
||||
+ *symtab = SYMBOL_FILE_SYMTAB (returnval);
|
||||
+
|
||||
return returnval;
|
||||
}
|
||||
|
||||
@@ -3235,7 +3239,7 @@ search_symbols (char *regexp, domain_enu
|
||||
ALL_BLOCK_SYMBOLS (b, iter, sym)
|
||||
{
|
||||
QUIT;
|
||||
- if (file_matches (s->filename, files, nfiles)
|
||||
+ if (file_matches (SYMBOL_FILE_SYMTAB (sym)->filename, files, nfiles)
|
||||
&& ((regexp == NULL
|
||||
|| re_exec (SYMBOL_NATURAL_NAME (sym)) != 0)
|
||||
&& ((kind == VARIABLES_DOMAIN && SYMBOL_CLASS (sym) != LOC_TYPEDEF
|
||||
@@ -3248,7 +3252,7 @@ search_symbols (char *regexp, domain_enu
|
||||
/* match */
|
||||
psr = (struct symbol_search *) xmalloc (sizeof (struct symbol_search));
|
||||
psr->block = i;
|
||||
- psr->symtab = s;
|
||||
+ psr->symtab = SYMBOL_FILE_SYMTAB (sym);
|
||||
psr->symbol = sym;
|
||||
psr->msymbol = NULL;
|
||||
psr->next = NULL;
|
||||
Index: gdb-6.6/gdb/symtab.h
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/symtab.h 2007-01-20 06:43:00.000000000 +0100
|
||||
+++ gdb-6.6/gdb/symtab.h 2007-01-20 13:59:48.000000000 +0100
|
||||
@@ -623,6 +623,18 @@ struct symbol
|
||||
|
||||
ENUM_BITFIELD(address_class) aclass : 6;
|
||||
|
||||
+ /* File name it comes from. Use with `line' below.
|
||||
+ FILE.INDEX is zero if the symbol's specific file is not known and in such
|
||||
+ case we later default to the main file of the compilation unit.
|
||||
+ FILE.SYMTAB gets resolved during end_symtab() and it is never NULL. */
|
||||
+
|
||||
+ union
|
||||
+ {
|
||||
+ unsigned index;
|
||||
+ struct symtab *symtab;
|
||||
+ }
|
||||
+ file;
|
||||
+
|
||||
/* Line number of definition. FIXME: Should we really make the assumption
|
||||
that nobody will try to debug files longer than 64K lines? What about
|
||||
machine generated programs? */
|
||||
@@ -663,6 +675,8 @@ struct symbol
|
||||
#define SYMBOL_DOMAIN(symbol) (symbol)->domain
|
||||
#define SYMBOL_CLASS(symbol) (symbol)->aclass
|
||||
#define SYMBOL_TYPE(symbol) (symbol)->type
|
||||
+#define SYMBOL_FILE_INDEX(symbol) (symbol)->file.index
|
||||
+#define SYMBOL_FILE_SYMTAB(symbol) (symbol)->file.symtab
|
||||
#define SYMBOL_LINE(symbol) (symbol)->line
|
||||
#define SYMBOL_BASEREG(symbol) (symbol)->aux_value.basereg
|
||||
#define SYMBOL_OBJFILE(symbol) (symbol)->aux_value.objfile
|
@ -1,30 +0,0 @@
|
||||
2006-12-30 Andrew Cagney <cagney@redhat.com>
|
||||
Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* dwarf2-frame.c (execute_cfa_program): New support of
|
||||
`DW_CFA_GNU_negative_offset_extended'.
|
||||
|
||||
|
||||
Index: ./gdb/dwarf2-frame.c
|
||||
===================================================================
|
||||
RCS file: /cvs/src/src/gdb/dwarf2-frame.c,v
|
||||
retrieving revision 1.64
|
||||
diff -u -p -r1.64 dwarf2-frame.c
|
||||
--- ./gdb/dwarf2-frame.c 28 Nov 2006 17:28:29 -0000 1.64
|
||||
+++ ./gdb/dwarf2-frame.c 30 Dec 2006 18:24:58 -0000
|
||||
@@ -555,6 +555,15 @@ bad CFI data; mismatched DW_CFA_restore_
|
||||
insn_ptr = read_uleb128 (insn_ptr, insn_end, &utmp);
|
||||
break;
|
||||
|
||||
+ case DW_CFA_GNU_negative_offset_extended:
|
||||
+ insn_ptr = read_uleb128 (insn_ptr, insn_end, ®);
|
||||
+ insn_ptr = read_uleb128 (insn_ptr, insn_end, &offset);
|
||||
+ offset *= fs->data_align;
|
||||
+ dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
|
||||
+ fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_OFFSET;
|
||||
+ fs->regs.reg[reg].loc.offset = -offset;
|
||||
+ break;
|
||||
+
|
||||
default:
|
||||
internal_error (__FILE__, __LINE__, _("Unknown CFI encountered."));
|
||||
}
|
@ -1,509 +0,0 @@
|
||||
2006-12-30 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* gdb.arch/i386-gnu-cfi.exp, gdb.arch/i386-gnu-cfi.c,
|
||||
gdb.arch/i386-gnu-cfi-asm.S: New files.
|
||||
|
||||
|
||||
Index: ./gdb/testsuite/gdb.arch/i386-gnu-cfi-asm.S
|
||||
===================================================================
|
||||
RCS file: ./gdb/testsuite/gdb.arch/i386-gnu-cfi-asm.S
|
||||
diff -N ./gdb/testsuite/gdb.arch/i386-gnu-cfi-asm.S
|
||||
--- /dev/null 1 Jan 1970 00:00:00 -0000
|
||||
+++ ./gdb/testsuite/gdb.arch/i386-gnu-cfi-asm.S 30 Dec 2006 18:25:02 -0000
|
||||
@@ -0,0 +1,357 @@
|
||||
+/* Copyright 2006 Free Software Foundation, Inc.
|
||||
+ *
|
||||
+ * This program is free software; you can redistribute it and/or modify
|
||||
+ * it under the terms of the GNU General Public License as published by
|
||||
+ * the Free Software Foundation; either version 2 of the License, or
|
||||
+ * (at your option) any later version.
|
||||
+ *
|
||||
+ * This program is distributed in the hope that it will be useful,
|
||||
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+ * GNU General Public License for more details.
|
||||
+ *
|
||||
+ * You should have received a copy of the GNU General Public License
|
||||
+ * along with this program; if not, write to the Free Software
|
||||
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
+ *
|
||||
+ * Please email any bugs, comments, and/or additions to this file to:
|
||||
+ * bug-gdb@gnu.org
|
||||
+ *
|
||||
+ * This file is part of the gdb testsuite.
|
||||
+ *
|
||||
+ * It was generated using
|
||||
+ * "gcc -g -O9 -S -o gate.s gate.c -fasynchronous-unwind-tables",
|
||||
+ * using the following source file:
|
||||
+ *
|
||||
+ *
|
||||
+ * void *gate (void *(*gate) (void *data), void *data)
|
||||
+ * {
|
||||
+ * return 1 + (*gate) (data);
|
||||
+ * }
|
||||
+ *
|
||||
+ * Changes are marked as `CHANGE' below.
|
||||
+ */
|
||||
+
|
||||
+ .file "gate.c"
|
||||
+ .section .debug_abbrev,"",@progbits
|
||||
+.Ldebug_abbrev0:
|
||||
+ .section .debug_info,"",@progbits
|
||||
+.Ldebug_info0:
|
||||
+ .section .debug_line,"",@progbits
|
||||
+.Ldebug_line0:
|
||||
+ .text
|
||||
+.Ltext0:
|
||||
+ .p2align 4,,15
|
||||
+.globl gate
|
||||
+ .type gate, @function
|
||||
+gate:
|
||||
+.LFB2:
|
||||
+ .file 1 "gate.c"
|
||||
+ .loc 1 2 0
|
||||
+.LVL0:
|
||||
+ pushl %ebp
|
||||
+.LCFI0:
|
||||
+ movl %esp, %ebp
|
||||
+.LCFI1:
|
||||
+ subl $8, %esp
|
||||
+.LCFI2:
|
||||
+ .loc 1 3 0
|
||||
+ movl 12(%ebp), %eax
|
||||
+ movl %eax, (%esp)
|
||||
+ call *8(%ebp)
|
||||
+ .loc 1 4 0
|
||||
+ leave
|
||||
+ .loc 1 3 0
|
||||
+ addl $1, %eax
|
||||
+ .loc 1 4 0
|
||||
+ ret
|
||||
+.LFE2:
|
||||
+ .size gate, .-gate
|
||||
+ .section .debug_frame,"",@progbits
|
||||
+.Lframe0:
|
||||
+ .long .LECIE0-.LSCIE0
|
||||
+.LSCIE0:
|
||||
+ .long 0xffffffff
|
||||
+ .byte 0x1
|
||||
+ .string ""
|
||||
+ .uleb128 0x1
|
||||
+ .sleb128 -4
|
||||
+ .byte 0x8
|
||||
+ .byte 0xc
|
||||
+ .uleb128 0x4
|
||||
+ .uleb128 0x4
|
||||
+ .byte 0x88
|
||||
+ .uleb128 0x1
|
||||
+ .align 4
|
||||
+.LECIE0:
|
||||
+.LSFDE0:
|
||||
+ .long .LEFDE0-.LASFDE0
|
||||
+.LASFDE0:
|
||||
+ .long .Lframe0
|
||||
+ .long .LFB2
|
||||
+ .long .LFE2-.LFB2
|
||||
+ .byte 0x4
|
||||
+ .long .LCFI0-.LFB2
|
||||
+ .byte 0xe
|
||||
+ .uleb128 0x8
|
||||
+ .byte 0x85
|
||||
+ .uleb128 0x2
|
||||
+
|
||||
+ /* CHANGE */
|
||||
+ .byte 0x2f
|
||||
+ .uleb128 0x1
|
||||
+ .uleb128 0x0
|
||||
+ /* CHANGE */
|
||||
+
|
||||
+ .byte 0x4
|
||||
+ .long .LCFI1-.LCFI0
|
||||
+ .byte 0xd
|
||||
+ .uleb128 0x5
|
||||
+ .align 4
|
||||
+.LEFDE0:
|
||||
+ .section .eh_frame,"a",@progbits
|
||||
+.Lframe1:
|
||||
+ .long .LECIE1-.LSCIE1
|
||||
+.LSCIE1:
|
||||
+ .long 0x0
|
||||
+ .byte 0x1
|
||||
+ .string ""
|
||||
+ .uleb128 0x1
|
||||
+ .sleb128 -4
|
||||
+ .byte 0x8
|
||||
+ .byte 0xc
|
||||
+ .uleb128 0x4
|
||||
+ .uleb128 0x4
|
||||
+ .byte 0x88
|
||||
+ .uleb128 0x1
|
||||
+ .align 4
|
||||
+.LECIE1:
|
||||
+.LSFDE1:
|
||||
+ .long .LEFDE1-.LASFDE1
|
||||
+.LASFDE1:
|
||||
+ .long .LASFDE1-.Lframe1
|
||||
+ .long .LFB2
|
||||
+ .long .LFE2-.LFB2
|
||||
+ .byte 0x4
|
||||
+ .long .LCFI0-.LFB2
|
||||
+ .byte 0xe
|
||||
+ .uleb128 0x8
|
||||
+ .byte 0x85
|
||||
+ .uleb128 0x2
|
||||
+
|
||||
+ /* CHANGE */
|
||||
+ .byte 0x2f
|
||||
+ .uleb128 0x1
|
||||
+ .uleb128 0x0
|
||||
+ /* CHANGE */
|
||||
+
|
||||
+ .byte 0x4
|
||||
+ .long .LCFI1-.LCFI0
|
||||
+ .byte 0xd
|
||||
+ .uleb128 0x5
|
||||
+ .align 4
|
||||
+.LEFDE1:
|
||||
+ .text
|
||||
+.Letext0:
|
||||
+ .section .debug_loc,"",@progbits
|
||||
+.Ldebug_loc0:
|
||||
+.LLST0:
|
||||
+ .long .LFB2-.Ltext0
|
||||
+ .long .LCFI0-.Ltext0
|
||||
+ .value 0x2
|
||||
+ .byte 0x74
|
||||
+ .sleb128 4
|
||||
+ .long .LCFI0-.Ltext0
|
||||
+ .long .LCFI1-.Ltext0
|
||||
+ .value 0x2
|
||||
+ .byte 0x74
|
||||
+ .sleb128 8
|
||||
+ .long .LCFI1-.Ltext0
|
||||
+ .long .LFE2-.Ltext0
|
||||
+ .value 0x2
|
||||
+ .byte 0x75
|
||||
+ .sleb128 8
|
||||
+ .long 0x0
|
||||
+ .long 0x0
|
||||
+ .section .debug_info
|
||||
+ .long 0x74
|
||||
+ .value 0x2
|
||||
+ .long .Ldebug_abbrev0
|
||||
+ .byte 0x4
|
||||
+ .uleb128 0x1
|
||||
+ .long .Ldebug_line0
|
||||
+ .long .Letext0
|
||||
+ .long .Ltext0
|
||||
+ .long .LASF2
|
||||
+ .byte 0x1
|
||||
+ .long .LASF3
|
||||
+ .long .LASF4
|
||||
+ .uleb128 0x2
|
||||
+ .long 0x5f
|
||||
+ .byte 0x1
|
||||
+ .long .LASF0
|
||||
+ .byte 0x1
|
||||
+ .byte 0x2
|
||||
+ .byte 0x1
|
||||
+ .long 0x5f
|
||||
+ .long .LFB2
|
||||
+ .long .LFE2
|
||||
+ .long .LLST0
|
||||
+ .uleb128 0x3
|
||||
+ .long .LASF0
|
||||
+ .byte 0x1
|
||||
+ .byte 0x1
|
||||
+ .long 0x71
|
||||
+ .byte 0x2
|
||||
+ .byte 0x91
|
||||
+ .sleb128 0
|
||||
+ .uleb128 0x3
|
||||
+ .long .LASF1
|
||||
+ .byte 0x1
|
||||
+ .byte 0x1
|
||||
+ .long 0x5f
|
||||
+ .byte 0x2
|
||||
+ .byte 0x91
|
||||
+ .sleb128 4
|
||||
+ .byte 0x0
|
||||
+ .uleb128 0x4
|
||||
+ .byte 0x4
|
||||
+ .uleb128 0x5
|
||||
+ .long 0x71
|
||||
+ .byte 0x1
|
||||
+ .long 0x5f
|
||||
+ .uleb128 0x6
|
||||
+ .long 0x5f
|
||||
+ .byte 0x0
|
||||
+ .uleb128 0x7
|
||||
+ .byte 0x4
|
||||
+ .long 0x61
|
||||
+ .byte 0x0
|
||||
+ .section .debug_abbrev
|
||||
+ .uleb128 0x1
|
||||
+ .uleb128 0x11
|
||||
+ .byte 0x1
|
||||
+ .uleb128 0x10
|
||||
+ .uleb128 0x6
|
||||
+ .uleb128 0x12
|
||||
+ .uleb128 0x1
|
||||
+ .uleb128 0x11
|
||||
+ .uleb128 0x1
|
||||
+ .uleb128 0x25
|
||||
+ .uleb128 0xe
|
||||
+ .uleb128 0x13
|
||||
+ .uleb128 0xb
|
||||
+ .uleb128 0x3
|
||||
+ .uleb128 0xe
|
||||
+ .uleb128 0x1b
|
||||
+ .uleb128 0xe
|
||||
+ .byte 0x0
|
||||
+ .byte 0x0
|
||||
+ .uleb128 0x2
|
||||
+ .uleb128 0x2e
|
||||
+ .byte 0x1
|
||||
+ .uleb128 0x1
|
||||
+ .uleb128 0x13
|
||||
+ .uleb128 0x3f
|
||||
+ .uleb128 0xc
|
||||
+ .uleb128 0x3
|
||||
+ .uleb128 0xe
|
||||
+ .uleb128 0x3a
|
||||
+ .uleb128 0xb
|
||||
+ .uleb128 0x3b
|
||||
+ .uleb128 0xb
|
||||
+ .uleb128 0x27
|
||||
+ .uleb128 0xc
|
||||
+ .uleb128 0x49
|
||||
+ .uleb128 0x13
|
||||
+ .uleb128 0x11
|
||||
+ .uleb128 0x1
|
||||
+ .uleb128 0x12
|
||||
+ .uleb128 0x1
|
||||
+ .uleb128 0x40
|
||||
+ .uleb128 0x6
|
||||
+ .byte 0x0
|
||||
+ .byte 0x0
|
||||
+ .uleb128 0x3
|
||||
+ .uleb128 0x5
|
||||
+ .byte 0x0
|
||||
+ .uleb128 0x3
|
||||
+ .uleb128 0xe
|
||||
+ .uleb128 0x3a
|
||||
+ .uleb128 0xb
|
||||
+ .uleb128 0x3b
|
||||
+ .uleb128 0xb
|
||||
+ .uleb128 0x49
|
||||
+ .uleb128 0x13
|
||||
+ .uleb128 0x2
|
||||
+ .uleb128 0xa
|
||||
+ .byte 0x0
|
||||
+ .byte 0x0
|
||||
+ .uleb128 0x4
|
||||
+ .uleb128 0xf
|
||||
+ .byte 0x0
|
||||
+ .uleb128 0xb
|
||||
+ .uleb128 0xb
|
||||
+ .byte 0x0
|
||||
+ .byte 0x0
|
||||
+ .uleb128 0x5
|
||||
+ .uleb128 0x15
|
||||
+ .byte 0x1
|
||||
+ .uleb128 0x1
|
||||
+ .uleb128 0x13
|
||||
+ .uleb128 0x27
|
||||
+ .uleb128 0xc
|
||||
+ .uleb128 0x49
|
||||
+ .uleb128 0x13
|
||||
+ .byte 0x0
|
||||
+ .byte 0x0
|
||||
+ .uleb128 0x6
|
||||
+ .uleb128 0x5
|
||||
+ .byte 0x0
|
||||
+ .uleb128 0x49
|
||||
+ .uleb128 0x13
|
||||
+ .byte 0x0
|
||||
+ .byte 0x0
|
||||
+ .uleb128 0x7
|
||||
+ .uleb128 0xf
|
||||
+ .byte 0x0
|
||||
+ .uleb128 0xb
|
||||
+ .uleb128 0xb
|
||||
+ .uleb128 0x49
|
||||
+ .uleb128 0x13
|
||||
+ .byte 0x0
|
||||
+ .byte 0x0
|
||||
+ .byte 0x0
|
||||
+ .section .debug_pubnames,"",@progbits
|
||||
+ .long 0x17
|
||||
+ .value 0x2
|
||||
+ .long .Ldebug_info0
|
||||
+ .long 0x78
|
||||
+ .long 0x25
|
||||
+ .string "gate"
|
||||
+ .long 0x0
|
||||
+ .section .debug_aranges,"",@progbits
|
||||
+ .long 0x1c
|
||||
+ .value 0x2
|
||||
+ .long .Ldebug_info0
|
||||
+ .byte 0x4
|
||||
+ .byte 0x0
|
||||
+ .value 0x0
|
||||
+ .value 0x0
|
||||
+ .long .Ltext0
|
||||
+ .long .Letext0-.Ltext0
|
||||
+ .long 0x0
|
||||
+ .long 0x0
|
||||
+ .section .debug_str,"MS",@progbits,1
|
||||
+.LASF1:
|
||||
+ .string "data"
|
||||
+.LASF0:
|
||||
+ .string "gate"
|
||||
+.LASF3:
|
||||
+ .string "gate.c"
|
||||
+.LASF4:
|
||||
+ .string "/home/jkratoch/redhat/bz165025"
|
||||
+.LASF2:
|
||||
+ .string "GNU C 4.1.1 20061213 (Red Hat 4.1.1-46)"
|
||||
+ .ident "GCC: (GNU) 4.1.1 20061213 (Red Hat 4.1.1-46)"
|
||||
+ .section .note.GNU-stack,"",@progbits
|
||||
Index: ./gdb/testsuite/gdb.arch/i386-gnu-cfi.c
|
||||
===================================================================
|
||||
RCS file: ./gdb/testsuite/gdb.arch/i386-gnu-cfi.c
|
||||
diff -N ./gdb/testsuite/gdb.arch/i386-gnu-cfi.c
|
||||
--- /dev/null 1 Jan 1970 00:00:00 -0000
|
||||
+++ ./gdb/testsuite/gdb.arch/i386-gnu-cfi.c 30 Dec 2006 18:25:02 -0000
|
||||
@@ -0,0 +1,31 @@
|
||||
+/* Unwinding of DW_CFA_GNU_negative_offset_extended test program.
|
||||
+
|
||||
+ Copyright 2006, Free Software Foundation, Inc.
|
||||
+
|
||||
+ This file is part of GDB.
|
||||
+
|
||||
+ This program is free software; you can redistribute it and/or modify
|
||||
+ it under the terms of the GNU General Public License as published by
|
||||
+ the Free Software Foundation; either version 2 of the License, or
|
||||
+ (at your option) any later version.
|
||||
+
|
||||
+ This program is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+ GNU General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU General Public License
|
||||
+ along with this program; if not, write to the Free Software
|
||||
+ Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
+ Boston, MA 02111-1307, USA. */
|
||||
+
|
||||
+#include <stdlib.h>
|
||||
+
|
||||
+/* i386-gnu-cfi-asm.S: */
|
||||
+extern void *gate (void *(*gate) (void *data), void *data);
|
||||
+
|
||||
+int main (void)
|
||||
+{
|
||||
+ gate ((void *(*) (void *data)) abort, NULL);
|
||||
+ return 0;
|
||||
+}
|
||||
Index: ./gdb/testsuite/gdb.arch/i386-gnu-cfi.exp
|
||||
===================================================================
|
||||
RCS file: ./gdb/testsuite/gdb.arch/i386-gnu-cfi.exp
|
||||
diff -N ./gdb/testsuite/gdb.arch/i386-gnu-cfi.exp
|
||||
--- /dev/null 1 Jan 1970 00:00:00 -0000
|
||||
+++ ./gdb/testsuite/gdb.arch/i386-gnu-cfi.exp 30 Dec 2006 18:25:02 -0000
|
||||
@@ -0,0 +1,94 @@
|
||||
+# Copyright 2006 Free Software Foundation, Inc.
|
||||
+
|
||||
+# This program is free software; you can redistribute it and/or modify
|
||||
+# it under the terms of the GNU General Public License as published by
|
||||
+# the Free Software Foundation; either version 2 of the License, or
|
||||
+# (at your option) any later version.
|
||||
+#
|
||||
+# This program is distributed in the hope that it will be useful,
|
||||
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+# GNU General Public License for more details.
|
||||
+#
|
||||
+# You should have received a copy of the GNU General Public License
|
||||
+# along with this program; if not, write to the Free Software
|
||||
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
+
|
||||
+# Please email any bugs, comments, and/or additions to this file to:
|
||||
+# bug-gdb@gnu.org
|
||||
+
|
||||
+# This file is part of the gdb testsuite.
|
||||
+
|
||||
+# Unwinding of DW_CFA_GNU_negative_offset_extended test program.
|
||||
+
|
||||
+if $tracelevel {
|
||||
+ strace $tracelevel
|
||||
+}
|
||||
+
|
||||
+# Test i386 unwinder.
|
||||
+
|
||||
+set prms_id 0
|
||||
+set bug_id 0
|
||||
+
|
||||
+if ![istarget "i?86-*-*"] then {
|
||||
+ verbose "Skipping i386 unwinder tests."
|
||||
+ return
|
||||
+}
|
||||
+
|
||||
+set testfile "i386-gnu-cfi"
|
||||
+set srcfilec ${testfile}.c
|
||||
+set srcfileasm ${testfile}-asm.S
|
||||
+set binfile ${objdir}/${subdir}/${testfile}
|
||||
+
|
||||
+# some targets have leading underscores on assembly symbols.
|
||||
+# TODO: detect this automatically
|
||||
+set additional_flags ""
|
||||
+if [istarget "i?86-*-cygwin*"] then {
|
||||
+ set additional_flags "additional_flags=-DSYMBOL_PREFIX=\"_\""
|
||||
+}
|
||||
+
|
||||
+if { [gdb_compile "${srcdir}/${subdir}/${srcfilec} ${srcdir}/${subdir}/${srcfileasm}" "${binfile}" executable [list debug $additional_flags]] != "" } {
|
||||
+ untested i386-gnu-cfi.exp
|
||||
+ return -1
|
||||
+}
|
||||
+
|
||||
+# Get things started.
|
||||
+
|
||||
+gdb_exit
|
||||
+gdb_start
|
||||
+gdb_reinitialize_dir $srcdir/$subdir
|
||||
+gdb_load ${binfile}
|
||||
+
|
||||
+# We should stop in abort(3).
|
||||
+
|
||||
+gdb_test "run" \
|
||||
+ "Program received signal SIGABRT,.*" \
|
||||
+ "run"
|
||||
+
|
||||
+# Backtrace would crash before.
|
||||
+
|
||||
+gdb_test "bt" \
|
||||
+ "main \\(\\) at .*${testfile}.c.*" \
|
||||
+ "backtrace"
|
||||
+
|
||||
+# Check we see the inserted `DW_CFA_GNU_negative_offset_extended' CFI.
|
||||
+# We see there the original CFI-stored filename `gate.c'.
|
||||
+
|
||||
+gdb_test "up 3" \
|
||||
+ "gate \\(\[^()\]*\\) at .*gate.c.*" \
|
||||
+ "shift up to the modified frame"
|
||||
+
|
||||
+send_gdb "info frame\n";
|
||||
+gdb_expect {
|
||||
+ -re "Stack level 3, frame at (0x\[0-9a-f\]+):.*Saved registers:.* ecx at (0x\[0-9a-f\]+),.*" {
|
||||
+ pass "Value of the CFI inserted register"
|
||||
+ if { [string compare $expect_out(1,string) $expect_out(2,string)] } then {
|
||||
+ fail "Value of the CFI inserted register"
|
||||
+ } else {
|
||||
+ pass "Value of the CFI inserted register"
|
||||
+ }
|
||||
+ }
|
||||
+ default {
|
||||
+ fail "Existence of the CFI inserted register"
|
||||
+ }
|
||||
+}
|
@ -64,7 +64,7 @@ diff -u -p -r1.36 value.c
|
||||
{
|
||||
/* Assume a CORE_ADDR can fit in a LONGEST (for now). Not sure
|
||||
whether we want this to be true eventually. */
|
||||
@@ -1054,6 +1053,33 @@ value_as_address (struct value *val)
|
||||
@@ -1054,6 +1053,34 @@ value_as_address (struct value *val)
|
||||
return unpack_long (value_type (val), value_contents (val));
|
||||
#endif
|
||||
}
|
||||
@ -76,6 +76,7 @@ diff -u -p -r1.36 value.c
|
||||
+value_as_address (struct value *val)
|
||||
+{
|
||||
+ CORE_ADDR addr;
|
||||
+ int addr_bit;
|
||||
+
|
||||
+ addr = value_as_address_core (val);
|
||||
+
|
||||
@ -88,7 +89,7 @@ diff -u -p -r1.36 value.c
|
||||
+ either zero or sign extended. Should ADDRESS_TO_POINTER() or
|
||||
+ some ADDRESS_TO_PRINTABLE() be used to do the conversion? */
|
||||
+
|
||||
+ int addr_bit = TARGET_ADDR_BIT;
|
||||
+ addr_bit = gdbarch_addr_bit (current_gdbarch);
|
||||
+
|
||||
+ if (addr_bit < (sizeof (CORE_ADDR) * HOST_CHAR_BIT))
|
||||
+ addr &= ((CORE_ADDR) 1 << addr_bit) - 1;
|
||||
|
@ -1,54 +0,0 @@
|
||||
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=205551
|
||||
|
||||
|
||||
2006-09-10 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* printcmd.c (printf_command): Handle forgotten "%p".
|
||||
|
||||
2006-09-10 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* gdb.base/display.exp: New test of `printf' "%p" formatting.
|
||||
|
||||
|
||||
diff -u -r sources-clean/gdb/printcmd.c sources-custom/gdb/printcmd.c
|
||||
--- sources-clean/gdb/printcmd.c 2006-07-29 20:29:26.000000000 +0200
|
||||
+++ sources-custom/gdb/printcmd.c 2006-09-12 16:18:55.000000000 +0200
|
||||
@@ -43,6 +43,9 @@
|
||||
#include "gdb_assert.h"
|
||||
#include "block.h"
|
||||
#include "disasm.h"
|
||||
+#ifdef HAVE_STDINT_H
|
||||
+#include <stdint.h>
|
||||
+#endif
|
||||
|
||||
#ifdef TUI
|
||||
#include "tui/tui.h" /* For tui_active et.al. */
|
||||
@@ -2065,6 +2068,16 @@
|
||||
#else
|
||||
error (_("long long not supported in printf"));
|
||||
#endif
|
||||
+ case ptr_arg:
|
||||
+#ifdef HAVE_UINTPTR_T
|
||||
+ {
|
||||
+ void *val = (void *) (uintptr_t) value_as_address (val_args[i]);
|
||||
+ printf_filtered (current_substring, val);
|
||||
+ break;
|
||||
+ }
|
||||
+#else
|
||||
+ error (_("pointer not supported in printf"));
|
||||
+#endif
|
||||
case int_arg:
|
||||
{
|
||||
int val = value_as_long (val_args[i]);
|
||||
diff -u -r sources-clean/gdb/testsuite/gdb.base/display.exp sources-custom/gdb/testsuite/gdb.base/display.exp
|
||||
--- sources-clean/gdb/testsuite/gdb.base/display.exp 2006-08-13 02:53:36.000000000 +0200
|
||||
+++ sources-custom/gdb/testsuite/gdb.base/display.exp 2006-09-12 16:17:24.000000000 +0200
|
||||
@@ -179,6 +179,8 @@
|
||||
gdb_test "printf \"\"" ".*" "re-set term"
|
||||
gdb_test "printf \"\\w\"" ".*Unrecognized escape character.*"
|
||||
gdb_test "printf \"%d\" j" ".*Invalid argument syntax.*"
|
||||
+# 0 or hex vs. dec printing may be platform dependent:
|
||||
+gdb_test "printf \"<%p>\\n\", (void *)7" ".*7>.*"
|
||||
|
||||
# play with "print", too
|
||||
#
|
@ -1,52 +0,0 @@
|
||||
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=215816
|
||||
|
||||
|
||||
2007-01-03 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
Daniel Jacobowitz <dan@codesourcery.com>
|
||||
|
||||
* gdb.base/readline.exp: Set $TERM. Test arrow keys in
|
||||
secondary prompts.
|
||||
|
||||
|
||||
--- ./gdb/testsuite/gdb.base/readline.exp 8 Jun 2003 13:14:05 -0000 1.2
|
||||
+++ ./gdb/testsuite/gdb.base/readline.exp 3 Jan 2007 21:22:47 -0000
|
||||
@@ -1,4 +1,4 @@
|
||||
-# Copyright 2002 Free Software Foundation, Inc.
|
||||
+# Copyright 2002, 2003, 2007 Free Software Foundation, Inc.
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
@@ -159,6 +159,14 @@ if [info exists env(INPUTRC)] {
|
||||
}
|
||||
set env(INPUTRC) "/dev/null"
|
||||
|
||||
+# The arrow key test relies on the standard VT100 bindings, so make
|
||||
+# sure that an appropriate terminal is selected. The same bug
|
||||
+# doesn't show up if we use ^P / ^N instead.
|
||||
+if [info exists env(TERM)] {
|
||||
+ set old_term $env(TERM)
|
||||
+}
|
||||
+set env(TERM) "vt100"
|
||||
+
|
||||
gdb_start
|
||||
gdb_reinitialize_dir $srcdir/$subdir
|
||||
|
||||
@@ -178,6 +186,18 @@ operate_and_get_next "operate-and-get-ne
|
||||
"p 5" "" \
|
||||
"end" ".* = 5"
|
||||
|
||||
+# Verify that arrow keys work in secondary prompts. The control
|
||||
+# sequence is a hard-coded VT100 up arrow.
|
||||
+gdb_test "print 42" "\\\$\[0-9\]* = 42"
|
||||
+set msg "arrow keys with secondary prompt"
|
||||
+gdb_test_multiple "if 1 > 0\n\033\[A\033\[A\nend" $msg {
|
||||
+ -re ".*\\\$\[0-9\]* = 42\r\n$gdb_prompt $" {
|
||||
+ pass $msg
|
||||
+ }
|
||||
+ -re ".*Undefined command:.*$gdb_prompt $" {
|
||||
+ fail $msg
|
||||
+ }
|
||||
+}
|
||||
|
||||
# Now repeat the first test with a history file that fills the entire
|
||||
# history list.
|
@ -1,165 +0,0 @@
|
||||
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=215816
|
||||
|
||||
|
||||
2007-01-03 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
Daniel Jacobowitz <dan@codesourcery.com>
|
||||
|
||||
* Makefile.in (top.o): Update.
|
||||
* top.c (gdb_readline_wrapper_done, gdb_readline_wrapper_result)
|
||||
(saved_after_char_processing_hook, gdb_readline_wrapper_line)
|
||||
(struct gdb_readline_wrapper_cleanup, gdb_readline_wrapper_cleanup):
|
||||
New.
|
||||
(gdb_readline_wrapper): Rewrite to use asynchronous readline.
|
||||
|
||||
|
||||
--- ./gdb/Makefile.in 3 Jan 2007 18:05:43 -0000 1.864
|
||||
+++ ./gdb/Makefile.in 3 Jan 2007 21:22:46 -0000
|
||||
@@ -2782,7 +2782,7 @@ top.o: top.c $(defs_h) $(gdbcmd_h) $(cal
|
||||
$(annotate_h) $(completer_h) $(top_h) $(version_h) $(serial_h) \
|
||||
$(doublest_h) $(gdb_assert_h) $(readline_h) $(readline_history_h) \
|
||||
$(event_top_h) $(gdb_string_h) $(gdb_stat_h) $(ui_out_h) \
|
||||
- $(cli_out_h) $(main_h)
|
||||
+ $(cli_out_h) $(main_h) $(event_loop_h)
|
||||
tracepoint.o: tracepoint.c $(defs_h) $(symtab_h) $(frame_h) $(gdbtypes_h) \
|
||||
$(expression_h) $(gdbcmd_h) $(value_h) $(target_h) $(language_h) \
|
||||
$(gdb_string_h) $(inferior_h) $(tracepoint_h) $(remote_h) \
|
||||
--- ./gdb/top.c 1 Jan 2007 05:57:49 -0000 1.116
|
||||
+++ ./gdb/top.c 3 Jan 2007 21:22:47 -0000
|
||||
@@ -47,6 +47,7 @@
|
||||
#include "doublest.h"
|
||||
#include "gdb_assert.h"
|
||||
#include "main.h"
|
||||
+#include "event-loop.h"
|
||||
|
||||
/* readline include files */
|
||||
#include "readline/readline.h"
|
||||
@@ -710,24 +710,84 @@
|
||||
}
|
||||
|
||||
/* This is like readline(), but it has some gdb-specific behavior.
|
||||
- gdb can use readline in both the synchronous and async modes during
|
||||
+ gdb may want readline in both the synchronous and async modes during
|
||||
a single gdb invocation. At the ordinary top-level prompt we might
|
||||
be using the async readline. That means we can't use
|
||||
rl_pre_input_hook, since it doesn't work properly in async mode.
|
||||
However, for a secondary prompt (" >", such as occurs during a
|
||||
- `define'), gdb just calls readline() directly, running it in
|
||||
- synchronous mode. So for operate-and-get-next to work in this
|
||||
- situation, we have to switch the hooks around. That is what
|
||||
- gdb_readline_wrapper is for. */
|
||||
+ `define'), gdb wants a synchronous response.
|
||||
+
|
||||
+ We used to call readline() directly, running it in synchronous
|
||||
+ mode. But mixing modes this way is not supported, and as of
|
||||
+ readline 5.x it no longer works; the arrow keys come unbound during
|
||||
+ the synchronous call. So we make a nested call into the event
|
||||
+ loop. That's what gdb_readline_wrapper is for. */
|
||||
+
|
||||
+/* A flag set as soon as gdb_readline_wrapper_line is called; we can't
|
||||
+ rely on gdb_readline_wrapper_result, which might still be NULL if
|
||||
+ the user types Control-D for EOF. */
|
||||
+static int gdb_readline_wrapper_done;
|
||||
+
|
||||
+/* The result of the current call to gdb_readline_wrapper, once a newline
|
||||
+ is seen. */
|
||||
+static char *gdb_readline_wrapper_result;
|
||||
+
|
||||
+/* Any intercepted hook. Operate-and-get-next sets this, expecting it
|
||||
+ to be called after the newline is processed (which will redisplay
|
||||
+ the prompt). But in gdb_readline_wrapper we will not get a new
|
||||
+ prompt until the next call, or until we return to the event loop.
|
||||
+ So we disable this hook around the newline and restore it before we
|
||||
+ return. */
|
||||
+static void (*saved_after_char_processing_hook) (void);
|
||||
+
|
||||
+/* This function is called when readline has seen a complete line of
|
||||
+ text. */
|
||||
+
|
||||
+static void
|
||||
+gdb_readline_wrapper_line (char *line)
|
||||
+{
|
||||
+ gdb_assert (!gdb_readline_wrapper_done);
|
||||
+ gdb_readline_wrapper_result = line;
|
||||
+ gdb_readline_wrapper_done = 1;
|
||||
+
|
||||
+ /* Prevent operate-and-get-next from acting too early. */
|
||||
+ saved_after_char_processing_hook = after_char_processing_hook;
|
||||
+ after_char_processing_hook = NULL;
|
||||
+}
|
||||
+
|
||||
+struct gdb_readline_wrapper_cleanup
|
||||
+ {
|
||||
+ void (*handler_orig) (char *);
|
||||
+ char *prompt_orig;
|
||||
+ int already_prompted_orig;
|
||||
+ };
|
||||
+
|
||||
+static void
|
||||
+gdb_readline_wrapper_cleanup (void *arg)
|
||||
+{
|
||||
+ struct gdb_readline_wrapper_cleanup *cleanup = arg;
|
||||
+
|
||||
+ gdb_assert (rl_already_prompted == 1);
|
||||
+ rl_already_prompted = cleanup->already_prompted_orig;
|
||||
+ PROMPT (0) = cleanup->prompt_orig;
|
||||
+
|
||||
+ gdb_assert (input_handler == gdb_readline_wrapper_line);
|
||||
+ input_handler = cleanup->handler_orig;
|
||||
+ gdb_readline_wrapper_result = NULL;
|
||||
+ gdb_readline_wrapper_done = 0;
|
||||
+
|
||||
+ after_char_processing_hook = saved_after_char_processing_hook;
|
||||
+ saved_after_char_processing_hook = NULL;
|
||||
+
|
||||
+ xfree (cleanup);
|
||||
+}
|
||||
+
|
||||
char *
|
||||
gdb_readline_wrapper (char *prompt)
|
||||
{
|
||||
- /* Set the hook that works in this case. */
|
||||
- if (after_char_processing_hook)
|
||||
- {
|
||||
- rl_pre_input_hook = (Function *) after_char_processing_hook;
|
||||
- after_char_processing_hook = NULL;
|
||||
- }
|
||||
+ struct cleanup *back_to;
|
||||
+ struct gdb_readline_wrapper_cleanup *cleanup;
|
||||
+ char *retval;
|
||||
|
||||
/* Before calling readline, ensure we have the terminal. If we don't
|
||||
have the terminal and call readline, we risk the possibility of
|
||||
@@ -737,7 +797,32 @@
|
||||
a page break prompt. */
|
||||
terminal_ours ();
|
||||
|
||||
- return readline (prompt);
|
||||
+ cleanup = xmalloc (sizeof (*cleanup));
|
||||
+ cleanup->handler_orig = input_handler;
|
||||
+ input_handler = gdb_readline_wrapper_line;
|
||||
+
|
||||
+ cleanup->prompt_orig = get_prompt ();
|
||||
+ PROMPT (0) = prompt;
|
||||
+ cleanup->already_prompted_orig = rl_already_prompted;
|
||||
+
|
||||
+ back_to = make_cleanup (gdb_readline_wrapper_cleanup, cleanup);
|
||||
+
|
||||
+ /* Display our prompt and prevent double prompt display. */
|
||||
+ display_gdb_prompt (NULL);
|
||||
+ rl_already_prompted = 1;
|
||||
+
|
||||
+ if (after_char_processing_hook)
|
||||
+ (*after_char_processing_hook) ();
|
||||
+ gdb_assert (after_char_processing_hook == NULL);
|
||||
+
|
||||
+ /* gdb_do_one_event argument is unused. */
|
||||
+ while (gdb_do_one_event (NULL) >= 0)
|
||||
+ if (gdb_readline_wrapper_done)
|
||||
+ break;
|
||||
+
|
||||
+ retval = gdb_readline_wrapper_result;
|
||||
+ do_cleanups (back_to);
|
||||
+ return retval;
|
||||
}
|
||||
|
||||
|
@ -16,10 +16,15 @@ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=216711
|
||||
* gdb.threads/bt-clone-stop.exp, gdb.threads/bt-clone-stop.c:
|
||||
New file.
|
||||
|
||||
2007-10-16 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
--- ./gdb/amd64-linux-tdep.c 19 Aug 2006 15:15:18 -0000 1.12
|
||||
+++ ./gdb/amd64-linux-tdep.c 17 Dec 2006 17:59:05 -0000
|
||||
@@ -235,6 +235,80 @@ amd64_linux_register_reggroup_p (struct
|
||||
Port to GDB-6.7.
|
||||
|
||||
Index: gdb-6.7/gdb/amd64-linux-tdep.c
|
||||
===================================================================
|
||||
--- gdb-6.7.orig/gdb/amd64-linux-tdep.c 2007-08-23 20:08:26.000000000 +0200
|
||||
+++ gdb-6.7/gdb/amd64-linux-tdep.c 2007-10-16 15:57:03.000000000 +0200
|
||||
@@ -234,6 +234,80 @@ amd64_linux_register_reggroup_p (struct
|
||||
|
||||
/* Set the program counter for process PTID to PC. */
|
||||
|
||||
@ -98,9 +103,9 @@ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=216711
|
||||
+}
|
||||
+
|
||||
static void
|
||||
amd64_linux_write_pc (CORE_ADDR pc, ptid_t ptid)
|
||||
amd64_linux_write_pc (struct regcache *regcache, CORE_ADDR pc)
|
||||
{
|
||||
@@ -273,6 +342,8 @@ amd64_linux_init_abi (struct gdbarch_inf
|
||||
@@ -272,6 +346,8 @@ amd64_linux_init_abi (struct gdbarch_inf
|
||||
tdep->sc_reg_offset = amd64_linux_sc_reg_offset;
|
||||
tdep->sc_num_regs = ARRAY_SIZE (amd64_linux_sc_reg_offset);
|
||||
|
||||
@ -109,9 +114,11 @@ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=216711
|
||||
/* GNU/Linux uses SVR4-style shared libraries. */
|
||||
set_solib_svr4_fetch_link_map_offsets
|
||||
(gdbarch, svr4_lp64_fetch_link_map_offsets);
|
||||
--- ./gdb/amd64-tdep.c 19 Aug 2006 15:15:18 -0000 1.32
|
||||
+++ ./gdb/amd64-tdep.c 17 Dec 2006 17:59:05 -0000
|
||||
@@ -879,11 +879,16 @@ amd64_frame_this_id (struct frame_info *
|
||||
Index: gdb-6.7/gdb/amd64-tdep.c
|
||||
===================================================================
|
||||
--- gdb-6.7.orig/gdb/amd64-tdep.c 2007-10-12 17:48:39.000000000 +0200
|
||||
+++ gdb-6.7/gdb/amd64-tdep.c 2007-10-16 15:57:03.000000000 +0200
|
||||
@@ -849,11 +849,16 @@ amd64_frame_this_id (struct frame_info *
|
||||
{
|
||||
struct amd64_frame_cache *cache =
|
||||
amd64_frame_cache (next_frame, this_cache);
|
||||
@ -128,9 +135,11 @@ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=216711
|
||||
(*this_id) = frame_id_build (cache->base + 16, cache->pc);
|
||||
}
|
||||
|
||||
--- ./gdb/i386-tdep.c 8 Aug 2006 21:36:46 -0000 1.225
|
||||
+++ ./gdb/i386-tdep.c 17 Dec 2006 17:59:10 -0000
|
||||
@@ -2313,6 +2313,9 @@ i386_gdbarch_init (struct gdbarch_info i
|
||||
Index: gdb-6.7/gdb/i386-tdep.c
|
||||
===================================================================
|
||||
--- gdb-6.7.orig/gdb/i386-tdep.c 2007-10-12 17:48:39.000000000 +0200
|
||||
+++ gdb-6.7/gdb/i386-tdep.c 2007-10-16 15:57:03.000000000 +0200
|
||||
@@ -2355,6 +2355,9 @@ i386_gdbarch_init (struct gdbarch_info i
|
||||
tdep->sc_pc_offset = -1;
|
||||
tdep->sc_sp_offset = -1;
|
||||
|
||||
@ -140,20 +149,24 @@ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=216711
|
||||
/* The format used for `long double' on almost all i386 targets is
|
||||
the i387 extended floating-point format. In fact, of all targets
|
||||
in the GCC 2.95 tree, only OSF/1 does it different, and insists
|
||||
--- ./gdb/i386-tdep.h 21 Jan 2006 20:59:50 -0000 1.46
|
||||
+++ ./gdb/i386-tdep.h 17 Dec 2006 17:59:10 -0000
|
||||
@@ -104,6 +104,9 @@ struct gdbarch_tdep
|
||||
is deprecated, please use `sc_reg_offset' instead. */
|
||||
int sc_pc_offset;
|
||||
int sc_sp_offset;
|
||||
Index: gdb-6.7/gdb/i386-tdep.h
|
||||
===================================================================
|
||||
--- gdb-6.7.orig/gdb/i386-tdep.h 2007-08-23 20:08:34.000000000 +0200
|
||||
+++ gdb-6.7/gdb/i386-tdep.h 2007-10-16 15:57:32.000000000 +0200
|
||||
@@ -106,6 +106,9 @@ struct gdbarch_tdep
|
||||
/* ISA-specific data types. */
|
||||
struct type *i386_mmx_type;
|
||||
struct type *i386_sse_type;
|
||||
+
|
||||
+ /* Detect OS dependent outermost frames; such as `clone'. */
|
||||
+ int (*outermost_frame_p) (struct frame_info *next_frame);
|
||||
};
|
||||
|
||||
/* Floating-point registers. */
|
||||
--- /dev/null 1 Jan 1970 00:00:00 -0000
|
||||
+++ ./gdb/testsuite/gdb.threads/bt-clone-stop.c 17 Dec 2006 17:59:19 -0000
|
||||
Index: gdb-6.7/gdb/testsuite/gdb.threads/bt-clone-stop.c
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gdb-6.7/gdb/testsuite/gdb.threads/bt-clone-stop.c 2007-10-16 15:57:03.000000000 +0200
|
||||
@@ -0,0 +1,39 @@
|
||||
+/* This testcase is part of GDB, the GNU debugger.
|
||||
+
|
||||
@ -194,8 +207,10 @@ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=216711
|
||||
+ for (;;)
|
||||
+ pause();
|
||||
+}
|
||||
--- /dev/null 1 Jan 1970 00:00:00 -0000
|
||||
+++ ./gdb/testsuite/gdb.threads/bt-clone-stop.exp 17 Dec 2006 17:59:19 -0000
|
||||
Index: gdb-6.7/gdb/testsuite/gdb.threads/bt-clone-stop.exp
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gdb-6.7/gdb/testsuite/gdb.threads/bt-clone-stop.exp 2007-10-16 15:57:03.000000000 +0200
|
||||
@@ -0,0 +1,61 @@
|
||||
+# Copyright 2006 Free Software Foundation, Inc.
|
||||
+
|
||||
|
@ -122,3 +122,56 @@ Index: ./gdb/ppc-linux-tdep.c
|
||||
|
||||
if (tdep->wordsize == 4)
|
||||
{
|
||||
|
||||
|
||||
|
||||
2007-10-17 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
Port to GDB-6.7.
|
||||
|
||||
diff -u -u -X /home/jkratoch/.diffi.list -rup gdb-6.7-patched/gdb/gdbtypes.c gdb-6.7/gdb/gdbtypes.c
|
||||
--- gdb-6.7-patched/gdb/gdbtypes.c 2007-09-05 02:51:48.000000000 +0200
|
||||
+++ gdb-6.7/gdb/gdbtypes.c 2007-10-17 12:09:00.000000000 +0200
|
||||
@@ -95,6 +95,10 @@ const struct floatformat *floatformats_v
|
||||
&floatformat_vax_d,
|
||||
&floatformat_vax_d
|
||||
};
|
||||
+const struct floatformat *floatformat_ppc64_long_double[BFD_ENDIAN_UNKNOWN] = {
|
||||
+ &floatformat_ppc64_long_double_big,
|
||||
+ &floatformat_ppc64_long_double_little
|
||||
+};
|
||||
|
||||
struct type *builtin_type_ieee_single;
|
||||
struct type *builtin_type_ieee_double;
|
||||
diff -u -u -X /home/jkratoch/.diffi.list -rup gdb-6.7-patched/gdb/gdbtypes.h gdb-6.7/gdb/gdbtypes.h
|
||||
--- gdb-6.7-patched/gdb/gdbtypes.h 2007-09-05 02:51:48.000000000 +0200
|
||||
+++ gdb-6.7/gdb/gdbtypes.h 2007-10-17 12:08:30.000000000 +0200
|
||||
@@ -1121,6 +1121,7 @@ extern const struct floatformat *floatfo
|
||||
extern const struct floatformat *floatformats_ia64_quad[BFD_ENDIAN_UNKNOWN];
|
||||
extern const struct floatformat *floatformats_vax_f[BFD_ENDIAN_UNKNOWN];
|
||||
extern const struct floatformat *floatformats_vax_d[BFD_ENDIAN_UNKNOWN];
|
||||
+extern const struct floatformat *floatformat_ppc64_long_double[BFD_ENDIAN_UNKNOWN];
|
||||
|
||||
extern struct type *builtin_type_ieee_single;
|
||||
extern struct type *builtin_type_ieee_double;
|
||||
diff -u -u -X /home/jkratoch/.diffi.list -rup gdb-6.7-patched/gdb/rs6000-tdep.c gdb-6.7/gdb/rs6000-tdep.c
|
||||
--- gdb-6.7-patched/gdb/rs6000-tdep.c 2007-10-16 20:52:45.000000000 +0200
|
||||
+++ gdb-6.7/gdb/rs6000-tdep.c 2007-10-17 12:07:54.000000000 +0200
|
||||
@@ -3755,16 +3755,7 @@ rs6000_gdbarch_init (struct gdbarch_info
|
||||
set_gdbarch_double_bit (gdbarch, 8 * TARGET_CHAR_BIT);
|
||||
if (sysv_abi)
|
||||
{
|
||||
- int byte_order = gdbarch_byte_order (gdbarch);
|
||||
-
|
||||
- if (byte_order == BFD_ENDIAN_BIG)
|
||||
- set_gdbarch_long_double_format (gdbarch, &floatformat_ppc64_long_double_big);
|
||||
- else if (byte_order == BFD_ENDIAN_LITTLE)
|
||||
- set_gdbarch_long_double_format (gdbarch, &floatformat_ppc64_long_double_little);
|
||||
- else
|
||||
- internal_error (__FILE__, __LINE__,
|
||||
- _("rs6000_gdbarch_init: "
|
||||
- "bad byte order"));
|
||||
+ set_gdbarch_long_double_format (gdbarch, floatformat_ppc64_long_double);
|
||||
set_gdbarch_long_double_bit (gdbarch, 16 * TARGET_CHAR_BIT);
|
||||
}
|
||||
else
|
||||
|
@ -6,11 +6,15 @@ for gdb/ChangeLog:
|
||||
boundaries.
|
||||
* dwarfread.c (locval): Likewise.
|
||||
|
||||
Index: gdb-6.5/gdb/dwarf2read.c
|
||||
2007-10-15 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
Port to GDB-6.7.
|
||||
|
||||
Index: gdb-6.7/gdb/dwarf2read.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/dwarf2read.c 2006-09-04 02:02:23.000000000 -0300
|
||||
+++ gdb-6.5/gdb/dwarf2read.c 2006-09-04 02:02:23.000000000 -0300
|
||||
@@ -8667,8 +8667,7 @@ dwarf2_fundamental_type (struct objfile
|
||||
--- gdb-6.7.orig/gdb/dwarf2read.c 2007-10-15 00:08:30.000000000 +0200
|
||||
+++ gdb-6.7/gdb/dwarf2read.c 2007-10-15 21:42:43.000000000 +0200
|
||||
@@ -9070,8 +9070,7 @@ dwarf2_fundamental_type (struct objfile
|
||||
callers will only want a very basic result and this can become a
|
||||
complaint.
|
||||
|
||||
@ -20,7 +24,7 @@ Index: gdb-6.5/gdb/dwarf2read.c
|
||||
|
||||
static CORE_ADDR
|
||||
decode_locdesc (struct dwarf_block *blk, struct dwarf2_cu *cu)
|
||||
@@ -8685,7 +8684,7 @@ decode_locdesc (struct dwarf_block *blk,
|
||||
@@ -9088,7 +9087,7 @@ decode_locdesc (struct dwarf_block *blk,
|
||||
|
||||
i = 0;
|
||||
stacki = 0;
|
||||
@ -29,7 +33,7 @@ Index: gdb-6.5/gdb/dwarf2read.c
|
||||
|
||||
while (i < size)
|
||||
{
|
||||
@@ -8864,6 +8863,16 @@ decode_locdesc (struct dwarf_block *blk,
|
||||
@@ -9270,6 +9269,16 @@ decode_locdesc (struct dwarf_block *blk,
|
||||
dwarf_stack_op_name (op));
|
||||
return (stack[stacki]);
|
||||
}
|
||||
@ -46,44 +50,3 @@ Index: gdb-6.5/gdb/dwarf2read.c
|
||||
}
|
||||
return (stack[stacki]);
|
||||
}
|
||||
Index: gdb-6.5/gdb/dwarfread.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/dwarfread.c 2005-12-17 20:33:59.000000000 -0200
|
||||
+++ gdb-6.5/gdb/dwarfread.c 2006-09-04 02:02:23.000000000 -0300
|
||||
@@ -2138,9 +2138,7 @@ decode_line_numbers (char *linetable)
|
||||
|
||||
NOTES
|
||||
|
||||
- Note that stack[0] is unused except as a default error return.
|
||||
- Note that stack overflow is not yet handled.
|
||||
- */
|
||||
+ Note that stack[0] is unused except as a default error return. */
|
||||
|
||||
static int
|
||||
locval (struct dieinfo *dip)
|
||||
@@ -2160,7 +2158,7 @@ locval (struct dieinfo *dip)
|
||||
loc += nbytes;
|
||||
end = loc + locsize;
|
||||
stacki = 0;
|
||||
- stack[stacki] = 0;
|
||||
+ stack[++stacki] = 0;
|
||||
dip->isreg = 0;
|
||||
dip->offreg = 0;
|
||||
dip->optimized_out = 1;
|
||||
@@ -2224,6 +2222,16 @@ locval (struct dieinfo *dip)
|
||||
stacki--;
|
||||
break;
|
||||
}
|
||||
+ /* Enforce maximum stack depth of size-1 to avoid ++stacki writing
|
||||
+ outside of the allocated space. Also enforce minimum > 0.
|
||||
+ -- wad@google.com 14 Aug 2006 */
|
||||
+ if (stacki >= sizeof (stack) / sizeof (*stack) - 1)
|
||||
+ internal_error (__FILE__, __LINE__,
|
||||
+ _("location description stack too deep: %d"),
|
||||
+ stacki);
|
||||
+ if (stacki <= 0)
|
||||
+ internal_error (__FILE__, __LINE__,
|
||||
+ _("location description stack too shallow"));
|
||||
}
|
||||
return (stack[stacki]);
|
||||
}
|
||||
|
@ -15,12 +15,15 @@
|
||||
* linux-nat.h: Likewise.
|
||||
* Makefile.in: Dependencies updated.
|
||||
|
||||
2007-10-16 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
Index: gdb-6.6/gdb/Makefile.in
|
||||
Port to GDB-6.7.
|
||||
|
||||
Index: gdb-6.7/gdb/Makefile.in
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/Makefile.in 2007-01-20 06:43:02.000000000 +0100
|
||||
+++ gdb-6.6/gdb/Makefile.in 2007-01-20 06:57:16.000000000 +0100
|
||||
@@ -705,6 +705,7 @@ gdb_expat_h = gdb_expat.h
|
||||
--- gdb-6.7.orig/gdb/Makefile.in 2007-10-14 23:57:38.000000000 +0200
|
||||
+++ gdb-6.7/gdb/Makefile.in 2007-10-16 15:46:48.000000000 +0200
|
||||
@@ -717,6 +717,7 @@ gdb_expat_h = gdb_expat.h
|
||||
gdb_locale_h = gdb_locale.h
|
||||
gdb_obstack_h = gdb_obstack.h $(obstack_h)
|
||||
gdb_proc_service_h = gdb_proc_service.h $(gregset_h)
|
||||
@ -28,7 +31,7 @@ Index: gdb-6.6/gdb/Makefile.in
|
||||
gdb_ptrace_h = gdb_ptrace.h
|
||||
gdb_regex_h = gdb_regex.h $(xregex_h)
|
||||
gdb_select_h = gdb_select.h
|
||||
@@ -714,6 +715,7 @@ gdb_string_h = gdb_string.h
|
||||
@@ -726,6 +727,7 @@ gdb_string_h = gdb_string.h
|
||||
gdb_thread_db_h = gdb_thread_db.h
|
||||
gdbthread_h = gdbthread.h $(breakpoint_h) $(frame_h)
|
||||
gdbtypes_h = gdbtypes.h $(hashtab_h)
|
||||
@ -36,31 +39,31 @@ Index: gdb-6.6/gdb/Makefile.in
|
||||
gdb_vfork_h = gdb_vfork.h
|
||||
gdb_wait_h = gdb_wait.h
|
||||
glibc_tdep_h = glibc-tdep.h
|
||||
@@ -1779,7 +1781,8 @@ amd64fbsd-tdep.o: amd64fbsd-tdep.c $(def
|
||||
@@ -1793,7 +1795,8 @@ amd64fbsd-tdep.o: amd64fbsd-tdep.c $(def
|
||||
amd64-linux-nat.o: amd64-linux-nat.c $(defs_h) $(inferior_h) $(gdbcore_h) \
|
||||
$(regcache_h) $(linux_nat_h) $(gdb_assert_h) $(gdb_string_h) \
|
||||
$(gdb_proc_service_h) $(gregset_h) $(amd64_tdep_h) \
|
||||
- $(i386_linux_tdep_h) $(amd64_nat_h) $(target_h) $(amd64_linux_tdep_h)
|
||||
+ $(i386_linux_tdep_h) $(amd64_nat_h) $(target_h) $(amd64_linux_tdep_h) \
|
||||
- $(i386_linux_tdep_h) $(amd64_nat_h) $(amd64_linux_tdep_h)
|
||||
+ $(i386_linux_tdep_h) $(amd64_nat_h) $(amd64_linux_tdep_h) \
|
||||
+ $(i387_tdep_h) $(elf_bfd_h) $(gdb_procfs32_h)
|
||||
amd64-linux-tdep.o: amd64-linux-tdep.c $(defs_h) $(frame_h) $(gdbcore_h) \
|
||||
$(regcache_h) $(osabi_h) $(symtab_h) $(gdb_string_h) $(amd64_tdep_h) \
|
||||
$(solib_svr4_h) $(gdbtypes_h) $(reggroups_h) $(amd64_linux_tdep_h)
|
||||
Index: gdb-6.6/gdb/amd64-linux-nat.c
|
||||
Index: gdb-6.7/gdb/amd64-linux-nat.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/amd64-linux-nat.c 2007-01-20 06:43:00.000000000 +0100
|
||||
+++ gdb-6.6/gdb/amd64-linux-nat.c 2007-01-20 06:56:21.000000000 +0100
|
||||
@@ -53,6 +53,9 @@
|
||||
--- gdb-6.7.orig/gdb/amd64-linux-nat.c 2007-10-14 23:39:04.000000000 +0200
|
||||
+++ gdb-6.7/gdb/amd64-linux-nat.c 2007-10-16 15:46:18.000000000 +0200
|
||||
@@ -51,6 +51,9 @@
|
||||
#include "amd64-tdep.h"
|
||||
#include "i386-linux-tdep.h"
|
||||
#include "amd64-nat.h"
|
||||
+#include "i387-tdep.h"
|
||||
+#include "bfd/elf-bfd.h"
|
||||
+#include "elf-bfd.h"
|
||||
+#include "gdb_procfs32.h"
|
||||
|
||||
/* Mapping between the general-purpose registers in GNU/Linux x86-64
|
||||
`struct user' format and GDB's register cache layout. */
|
||||
@@ -87,6 +90,35 @@ static int amd64_linux_gregset64_reg_off
|
||||
@@ -85,6 +88,35 @@ static int amd64_linux_gregset64_reg_off
|
||||
GNU/Linux i386 registers are all 32-bit, but since we're
|
||||
little-endian we get away with that. */
|
||||
|
||||
@ -96,7 +99,7 @@ Index: gdb-6.6/gdb/amd64-linux-nat.c
|
||||
/* From <sys/reg.h> on GNU/Linux i386. */
|
||||
static int amd64_linux_gregset32_reg_offset[] =
|
||||
{
|
||||
@@ -105,6 +137,94 @@ static int amd64_linux_gregset32_reg_off
|
||||
@@ -103,6 +135,96 @@ static int amd64_linux_gregset32_reg_off
|
||||
};
|
||||
|
||||
|
||||
@ -157,12 +160,13 @@ Index: gdb-6.6/gdb/amd64-linux-nat.c
|
||||
+}
|
||||
+
|
||||
+static char *
|
||||
+amd64_elfcore_write_prxfpreg32 (bfd *abfd, char *buf, int *bufsiz)
|
||||
+amd64_elfcore_write_prxfpreg32 (bfd *abfd, char *buf, int *bufsiz,
|
||||
+ struct regcache *regcache)
|
||||
+{
|
||||
+ char *note_name = "LINUX";
|
||||
+ elf_fpxregset32_t fpxregs32;
|
||||
+
|
||||
+ i387_fill_fxsave (&fpxregs32, -1);
|
||||
+ i387_collect_fxsave (regcache, -1, &fpxregs32);
|
||||
+ return elfcore_write_note(abfd, buf, bufsiz,
|
||||
+ note_name, NT_PRXFPREG, &fpxregs32,
|
||||
+ sizeof(fpxregs32));
|
||||
@ -170,18 +174,19 @@ Index: gdb-6.6/gdb/amd64-linux-nat.c
|
||||
+
|
||||
+static char *
|
||||
+amd64_linux_elfcore_write_prfpreg (bfd *abfd, char *buf,
|
||||
+ int *bufsiz, const void *fpregs, int size)
|
||||
+ int *bufsiz, const void *fpregs, int size,
|
||||
+ struct regcache *regcache)
|
||||
+{
|
||||
+ if (gdbarch_ptr_bit(current_gdbarch) == 32)
|
||||
+ {
|
||||
+ char *note_name = "CORE";
|
||||
+ elf_fpregset32_t fpregs32;
|
||||
+
|
||||
+ i387_fill_fsave (&fpregs32, -1);
|
||||
+ i387_collect_fsave (regcache, -1, &fpregs32);
|
||||
+ buf = elfcore_write_note(abfd, buf, bufsiz, note_name,
|
||||
+ NT_FPREGSET, &fpregs32, sizeof(fpregs32));
|
||||
+
|
||||
+ return amd64_elfcore_write_prxfpreg32 (abfd, buf, bufsiz);
|
||||
+ return amd64_elfcore_write_prxfpreg32 (abfd, buf, bufsiz, regcache);
|
||||
+ }
|
||||
+ else
|
||||
+ return elfcore_write_prfpreg (abfd, buf, bufsiz, fpregs, size);
|
||||
@ -203,11 +208,11 @@ Index: gdb-6.6/gdb/amd64-linux-nat.c
|
||||
/* Register the target. */
|
||||
linux_nat_add_target (t);
|
||||
|
||||
Index: gdb-6.6/gdb/config.in
|
||||
Index: gdb-6.7/gdb/config.in
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/config.in 2006-08-08 22:32:15.000000000 +0200
|
||||
+++ gdb-6.6/gdb/config.in 2007-01-20 06:56:21.000000000 +0100
|
||||
@@ -373,6 +373,9 @@
|
||||
--- gdb-6.7.orig/gdb/config.in 2007-06-18 17:46:37.000000000 +0200
|
||||
+++ gdb-6.7/gdb/config.in 2007-10-16 15:46:18.000000000 +0200
|
||||
@@ -385,6 +385,9 @@
|
||||
/* Define to 1 if you have the <sys/poll.h> header file. */
|
||||
#undef HAVE_SYS_POLL_H
|
||||
|
||||
@ -217,7 +222,7 @@ Index: gdb-6.6/gdb/config.in
|
||||
/* Define to 1 if you have the <sys/procfs.h> header file. */
|
||||
#undef HAVE_SYS_PROCFS_H
|
||||
|
||||
@@ -397,6 +400,9 @@
|
||||
@@ -412,6 +415,9 @@
|
||||
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||
#undef HAVE_SYS_TYPES_H
|
||||
|
||||
@ -227,11 +232,11 @@ Index: gdb-6.6/gdb/config.in
|
||||
/* Define to 1 if you have the <sys/user.h> header file. */
|
||||
#undef HAVE_SYS_USER_H
|
||||
|
||||
Index: gdb-6.6/gdb/configure
|
||||
Index: gdb-6.7/gdb/configure
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/configure 2007-01-20 06:43:00.000000000 +0100
|
||||
+++ gdb-6.6/gdb/configure 2007-01-20 06:56:21.000000000 +0100
|
||||
@@ -9966,6 +9966,157 @@ done
|
||||
--- gdb-6.7.orig/gdb/configure 2007-09-29 22:54:13.000000000 +0200
|
||||
+++ gdb-6.7/gdb/configure 2007-10-16 15:46:18.000000000 +0200
|
||||
@@ -10439,6 +10439,157 @@ done
|
||||
|
||||
|
||||
|
||||
@ -389,11 +394,11 @@ Index: gdb-6.6/gdb/configure
|
||||
for ac_header in sys/wait.h wait.h
|
||||
do
|
||||
as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
|
||||
Index: gdb-6.6/gdb/configure.ac
|
||||
Index: gdb-6.7/gdb/configure.ac
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/configure.ac 2007-01-20 06:43:01.000000000 +0100
|
||||
+++ gdb-6.6/gdb/configure.ac 2007-01-20 06:56:21.000000000 +0100
|
||||
@@ -371,6 +371,7 @@ AC_CHECK_HEADERS(sys/user.h, [], [],
|
||||
--- gdb-6.7.orig/gdb/configure.ac 2007-09-29 22:54:13.000000000 +0200
|
||||
+++ gdb-6.7/gdb/configure.ac 2007-10-16 15:46:18.000000000 +0200
|
||||
@@ -424,6 +424,7 @@ AC_CHECK_HEADERS(sys/user.h, [], [],
|
||||
# include <sys/param.h>
|
||||
#endif
|
||||
])
|
||||
@ -401,11 +406,11 @@ Index: gdb-6.6/gdb/configure.ac
|
||||
AC_CHECK_HEADERS(sys/wait.h wait.h)
|
||||
AC_CHECK_HEADERS(termios.h termio.h sgtty.h)
|
||||
AC_CHECK_HEADERS(unistd.h)
|
||||
Index: gdb-6.6/gdb/gcore.c
|
||||
Index: gdb-6.7/gdb/gcore.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/gcore.c 2007-01-20 06:43:02.000000000 +0100
|
||||
+++ gdb-6.6/gdb/gcore.c 2007-01-20 06:56:21.000000000 +0100
|
||||
@@ -320,6 +320,11 @@ gcore_create_callback (CORE_ADDR vaddr,
|
||||
--- gdb-6.7.orig/gdb/gcore.c 2007-10-14 23:57:38.000000000 +0200
|
||||
+++ gdb-6.7/gdb/gcore.c 2007-10-16 15:46:18.000000000 +0200
|
||||
@@ -317,6 +317,11 @@ gcore_create_callback (CORE_ADDR vaddr,
|
||||
asection *osec;
|
||||
flagword flags = SEC_ALLOC | SEC_HAS_CONTENTS | SEC_LOAD;
|
||||
|
||||
@ -417,10 +422,10 @@ Index: gdb-6.6/gdb/gcore.c
|
||||
/* If the memory segment has no permissions set, ignore it, otherwise
|
||||
when we later try to access it for read/write, we'll get an error
|
||||
or jam the kernel. */
|
||||
Index: gdb-6.6/gdb/gdb_procfs32.h
|
||||
Index: gdb-6.7/gdb/gdb_procfs32.h
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gdb-6.6/gdb/gdb_procfs32.h 2007-01-20 06:56:21.000000000 +0100
|
||||
+++ gdb-6.7/gdb/gdb_procfs32.h 2007-10-16 15:46:18.000000000 +0200
|
||||
@@ -0,0 +1,128 @@
|
||||
+#ifdef HAVE_SYS_PROCFS32_H
|
||||
+#include <sys/procfs32.h>
|
||||
@ -550,10 +555,10 @@ Index: gdb-6.6/gdb/gdb_procfs32.h
|
||||
+#endif /* _SYS_PROCFS32_H */
|
||||
+
|
||||
+#endif /* HAVE_SYS_PROCFS32_H */
|
||||
Index: gdb-6.6/gdb/gdb_user32.h
|
||||
Index: gdb-6.7/gdb/gdb_user32.h
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gdb-6.6/gdb/gdb_user32.h 2007-01-20 06:56:21.000000000 +0100
|
||||
+++ gdb-6.7/gdb/gdb_user32.h 2007-10-16 15:46:18.000000000 +0200
|
||||
@@ -0,0 +1,108 @@
|
||||
+#ifdef HAVE_SYS_USER32_H
|
||||
+#include <sys/user32.h>
|
||||
@ -663,11 +668,11 @@ Index: gdb-6.6/gdb/gdb_user32.h
|
||||
+#endif /* _SYS_USER32_H */
|
||||
+
|
||||
+#endif /* HAVE_SYS_USER32_H */
|
||||
Index: gdb-6.6/gdb/linux-nat.c
|
||||
Index: gdb-6.7/gdb/linux-nat.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/linux-nat.c 2007-01-20 06:43:04.000000000 +0100
|
||||
+++ gdb-6.6/gdb/linux-nat.c 2007-01-20 06:56:21.000000000 +0100
|
||||
@@ -100,6 +100,15 @@ static LONGEST (*super_xfer_partial) (st
|
||||
--- gdb-6.7.orig/gdb/linux-nat.c 2007-10-15 21:42:26.000000000 +0200
|
||||
+++ gdb-6.7/gdb/linux-nat.c 2007-10-16 15:46:18.000000000 +0200
|
||||
@@ -98,6 +98,21 @@ static LONGEST (*super_xfer_partial) (st
|
||||
const gdb_byte *,
|
||||
ULONGEST, LONGEST);
|
||||
|
||||
@ -677,15 +682,21 @@ Index: gdb-6.6/gdb/linux-nat.c
|
||||
+ (bfd *, char *, int *, const char *, const char *) = elfcore_write_prpsinfo;
|
||||
+char *(*linux_elfcore_write_prstatus)
|
||||
+ (bfd *, char *, int *, long, int, const void *) = elfcore_write_prstatus;
|
||||
+char *(*linux_elfcore_write_prfpreg)
|
||||
+ (bfd *, char *, int *, const void *, int) = elfcore_write_prfpreg;
|
||||
+static char *
|
||||
+linux_elfcore_write_prfpreg_bfd (bfd *abfd, char *buf, int *bufsiz,
|
||||
+ const void *fpregs, int size, struct regcache *regcache)
|
||||
+{
|
||||
+ return elfcore_write_prfpreg (abfd, buf, bufsiz, fpregs, size);
|
||||
+}
|
||||
+char *(*linux_elfcore_write_prfpreg) (bfd *, char *, int *, const void *, int,
|
||||
+ struct regcache *) = linux_elfcore_write_prfpreg_bfd;
|
||||
+
|
||||
static int debug_linux_nat;
|
||||
static void
|
||||
show_debug_linux_nat (struct ui_file *file, int from_tty,
|
||||
@@ -2715,11 +2724,11 @@ linux_nat_do_thread_registers (bfd *obfd
|
||||
@@ -2687,11 +2696,11 @@ linux_nat_do_thread_registers (bfd *obfd
|
||||
else
|
||||
fill_gregset (&gregs, -1);
|
||||
fill_gregset (regcache, &gregs, -1);
|
||||
|
||||
- note_data = (char *) elfcore_write_prstatus (obfd,
|
||||
- note_data,
|
||||
@ -700,9 +711,9 @@ Index: gdb-6.6/gdb/linux-nat.c
|
||||
|
||||
if (core_regset_p
|
||||
&& (regset = gdbarch_regset_from_core_section (gdbarch, ".reg2",
|
||||
@@ -2730,10 +2739,10 @@ linux_nat_do_thread_registers (bfd *obfd
|
||||
@@ -2702,10 +2711,11 @@ linux_nat_do_thread_registers (bfd *obfd
|
||||
else
|
||||
fill_fpregset (&fpregs, -1);
|
||||
fill_fpregset (regcache, &fpregs, -1);
|
||||
|
||||
- note_data = (char *) elfcore_write_prfpreg (obfd,
|
||||
- note_data,
|
||||
@ -711,13 +722,14 @@ Index: gdb-6.6/gdb/linux-nat.c
|
||||
+ note_data = (char *) linux_elfcore_write_prfpreg (obfd,
|
||||
+ note_data,
|
||||
+ note_size,
|
||||
+ &fpregs, sizeof (fpregs));
|
||||
+ &fpregs, sizeof (fpregs),
|
||||
+ regcache);
|
||||
|
||||
#ifdef FILL_FPXREGSET
|
||||
if (core_regset_p
|
||||
@@ -2828,9 +2837,9 @@ linux_nat_make_corefile_notes (bfd *obfd
|
||||
strncat (psargs, get_inferior_args (),
|
||||
sizeof (psargs) - strlen (psargs));
|
||||
@@ -2799,9 +2808,9 @@ linux_nat_make_corefile_notes (bfd *obfd
|
||||
psargs_end - string_end);
|
||||
}
|
||||
}
|
||||
- note_data = (char *) elfcore_write_prpsinfo (obfd,
|
||||
- note_data,
|
||||
@ -728,11 +740,11 @@ Index: gdb-6.6/gdb/linux-nat.c
|
||||
}
|
||||
|
||||
/* Dump information for threads. */
|
||||
Index: gdb-6.6/gdb/linux-nat.h
|
||||
Index: gdb-6.7/gdb/linux-nat.h
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/linux-nat.h 2007-01-20 06:42:58.000000000 +0100
|
||||
+++ gdb-6.6/gdb/linux-nat.h 2007-01-20 06:56:21.000000000 +0100
|
||||
@@ -108,3 +108,12 @@ void linux_nat_add_target (struct target
|
||||
--- gdb-6.7.orig/gdb/linux-nat.h 2007-10-13 05:09:50.000000000 +0200
|
||||
+++ gdb-6.7/gdb/linux-nat.h 2007-10-16 15:46:18.000000000 +0200
|
||||
@@ -110,3 +110,12 @@ void linux_nat_add_target (struct target
|
||||
/* Update linux-nat internal state when changing from one fork
|
||||
to another. */
|
||||
void linux_nat_switch_fork (ptid_t new_ptid);
|
||||
@ -744,4 +756,4 @@ Index: gdb-6.6/gdb/linux-nat.h
|
||||
+extern char *(*linux_elfcore_write_prstatus)
|
||||
+ (bfd *, char *, int *, long, int, const void *);
|
||||
+extern char *(*linux_elfcore_write_prfpreg)
|
||||
+ (bfd *, char *, int *, const void *, int);
|
||||
+ (bfd *, char *, int *, const void *, int, struct regcache *);
|
||||
|
@ -1,143 +0,0 @@
|
||||
2006-10-29 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* gdb/symtab.c (matching_bfd_sections): Fix VMA matching for objects
|
||||
loaded at a different address than stored on the disk.
|
||||
|
||||
2006-10-29 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* gdb.base/relativedebug.c, gdb.base/relativedebug.exp: New file,
|
||||
resolving of PC in libc pause(3) (with possibly different on-disk VMA).
|
||||
|
||||
|
||||
Index: ./gdb/symtab.c
|
||||
===================================================================
|
||||
--- ./gdb/symtab.c 17 Oct 2006 20:17:44 -0000 1.148
|
||||
+++ ./gdb/symtab.c 29 Oct 2006 22:29:21 -0000
|
||||
@@ -739,8 +739,11 @@ matching_bfd_sections (asection *first,
|
||||
if (bfd_get_section_size (first) != bfd_get_section_size (second))
|
||||
return 0;
|
||||
|
||||
+ /* In-memory addresses may start at a different offset, relativize them. */
|
||||
if (bfd_get_section_vma (first->owner, first)
|
||||
- != bfd_get_section_vma (second->owner, second))
|
||||
+ - bfd_get_start_address (first->owner)
|
||||
+ != bfd_get_section_vma (second->owner, second)
|
||||
+ - bfd_get_start_address (second->owner))
|
||||
return 0;
|
||||
|
||||
if (bfd_get_section_name (first->owner, first) == NULL
|
||||
Index: ./gdb/testsuite/gdb.base/relativedebug.c
|
||||
===================================================================
|
||||
--- /dev/null 1 Jan 1970 00:00:00 -0000
|
||||
+++ ./gdb/testsuite/gdb.base/relativedebug.c 29 Oct 2006 22:29:21 -0000
|
||||
@@ -0,0 +1,37 @@
|
||||
+/* This testcase is part of GDB, the GNU debugger.
|
||||
+
|
||||
+ Copyright 2006 Free Software Foundation, Inc.
|
||||
+
|
||||
+ This program is free software; you can redistribute it and/or modify
|
||||
+ it under the terms of the GNU General Public License as published by
|
||||
+ the Free Software Foundation; either version 2 of the License, or
|
||||
+ (at your option) any later version.
|
||||
+
|
||||
+ This program is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+ GNU General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU General Public License
|
||||
+ along with this program; if not, write to the Free Software
|
||||
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
+ 02111-1307, USA. */
|
||||
+
|
||||
+#include <unistd.h>
|
||||
+#include <stdlib.h>
|
||||
+#include <signal.h>
|
||||
+
|
||||
+
|
||||
+static void handler (int signo)
|
||||
+{
|
||||
+ abort ();
|
||||
+}
|
||||
+
|
||||
+int main (void)
|
||||
+{
|
||||
+ signal (SIGALRM, handler);
|
||||
+ alarm (1);
|
||||
+ pause ();
|
||||
+ pause ();
|
||||
+ return 0;
|
||||
+}
|
||||
Index: ./gdb/testsuite/gdb.base/relativedebug.exp
|
||||
===================================================================
|
||||
--- /dev/null 1 Jan 1970 00:00:00 -0000
|
||||
+++ ./gdb/testsuite/gdb.base/relativedebug.exp 29 Oct 2006 22:29:21 -0000
|
||||
@@ -0,0 +1,68 @@
|
||||
+# Copyright 2006 Free Software Foundation, Inc.
|
||||
+
|
||||
+# This program is free software; you can redistribute it and/or modify
|
||||
+# it under the terms of the GNU General Public License as published by
|
||||
+# the Free Software Foundation; either version 2 of the License, or
|
||||
+# (at your option) any later version.
|
||||
+#
|
||||
+# This program is distributed in the hope that it will be useful,
|
||||
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+# GNU General Public License for more details.
|
||||
+#
|
||||
+# You should have received a copy of the GNU General Public License
|
||||
+# along with this program; if not, write to the Free Software
|
||||
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
+
|
||||
+if $tracelevel then {
|
||||
+ strace $tracelevel
|
||||
+}
|
||||
+
|
||||
+set testfile relativedebug
|
||||
+set srcfile ${testfile}.c
|
||||
+set binfile ${objdir}/${subdir}/${testfile}
|
||||
+if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
|
||||
+ untested "Couldn't compile test program"
|
||||
+ return -1
|
||||
+}
|
||||
+
|
||||
+# Get things started.
|
||||
+
|
||||
+gdb_exit
|
||||
+gdb_start
|
||||
+gdb_reinitialize_dir $srcdir/$subdir
|
||||
+gdb_load ${binfile}
|
||||
+
|
||||
+# pause () -> SIGALRM -> handler () -> abort ()
|
||||
+
|
||||
+gdb_test "run" \
|
||||
+ ".*Program received signal SIGABRT, Aborted..*" \
|
||||
+ "run"
|
||||
+
|
||||
+# incorrect (#6):
|
||||
+# (gdb) bt
|
||||
+# #0 0x00325402 in __kernel_vsyscall ()
|
||||
+# #1 0x00718f20 in *__GI_raise (sig=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
|
||||
+# #2 0x0071a801 in *__GI_abort () at abort.c:88
|
||||
+# #3 0x0804841f in handler (signo=14) at ./gdb.base/relativedebug.c:27
|
||||
+# #4 <signal handler called>
|
||||
+# #5 0x00325402 in __kernel_vsyscall ()
|
||||
+# #6 0x0077ebc6 in ?? () from /lib/i686/nosegneg/libc.so.6
|
||||
+# #7 0x08048455 in main () at ./gdb.base/relativedebug.c:34
|
||||
+# (gdb)
|
||||
+
|
||||
+# correct (#6):
|
||||
+# (gdb) bt
|
||||
+# #0 0x00b33402 in __kernel_vsyscall ()
|
||||
+# #1 0x00718f20 in *__GI_raise (sig=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
|
||||
+# #2 0x0071a801 in *__GI_abort () at abort.c:88
|
||||
+# #3 0x0804841f in handler (signo=14) at ./gdb.base/relativedebug.c:27
|
||||
+# #4 <signal handler called>
|
||||
+# #5 0x00b33402 in __kernel_vsyscall ()
|
||||
+# #6 0x0077ebc6 in __pause_nocancel () from /lib/i686/nosegneg/libc.so.6
|
||||
+# #7 0x08048455 in main () at ./gdb.base/relativedebug.c:34
|
||||
+# (gdb)
|
||||
+
|
||||
+gdb_test "bt" \
|
||||
+ ".*\[^a-zA-Z\]pause\[^a-zA-Z\].*" \
|
||||
+ "pause(3) seen there"
|
@ -12,15 +12,15 @@ The testsuite needs `gdb-6.5-tls-of-separate-debuginfo.patch'.
|
||||
* solib-svr4.c (svr4_fetch_objfile_link_map): Match even absolute
|
||||
requested pathnames to the internal loaded relative pathnames.
|
||||
|
||||
2007-10-16 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
Index: gdb-6.5/gdb/solib-svr4.c
|
||||
Port to GDB-6.7.
|
||||
|
||||
Index: gdb-6.7/gdb/solib-svr4.c
|
||||
===================================================================
|
||||
RCS file: /cvs/src/src/gdb/solib-svr4.c,v
|
||||
retrieving revision 1.58
|
||||
diff -u -p -r1.58 gdb-6.5/gdb/solib-svr4.c
|
||||
--- gdb-6.5.orig/gdb/solib-svr4.c 18 May 2006 20:38:56 -0000 1.58
|
||||
+++ gdb-6.5/gdb/solib-svr4.c 1 Sep 2006 18:47:10 -0000
|
||||
@@ -774,62 +774,81 @@ CORE_ADDR
|
||||
--- gdb-6.7.orig/gdb/solib-svr4.c 2007-10-14 23:04:45.000000000 +0200
|
||||
+++ gdb-6.7/gdb/solib-svr4.c 2007-10-16 15:43:56.000000000 +0200
|
||||
@@ -1009,10 +1009,14 @@ CORE_ADDR
|
||||
svr4_fetch_objfile_link_map (struct objfile *objfile)
|
||||
{
|
||||
CORE_ADDR lm;
|
||||
@ -29,136 +29,48 @@ diff -u -p -r1.58 gdb-6.5/gdb/solib-svr4.c
|
||||
if ((debug_base = locate_base ()) == 0)
|
||||
return 0; /* failed somehow... */
|
||||
|
||||
- /* Position ourselves on the first link map. */
|
||||
- lm = solib_svr4_r_map ();
|
||||
- while (lm)
|
||||
+ for (resolve = 0; resolve <= 1; resolve++)
|
||||
{
|
||||
- /* Get info on the layout of the r_debug and link_map structures. */
|
||||
- struct link_map_offsets *lmo = svr4_fetch_link_map_offsets ();
|
||||
- int errcode;
|
||||
- char *buffer;
|
||||
- struct lm_info objfile_lm_info;
|
||||
- struct cleanup *old_chain;
|
||||
- CORE_ADDR name_address;
|
||||
- gdb_byte *l_name_buf = xmalloc (lmo->l_name_size);
|
||||
- old_chain = make_cleanup (xfree, l_name_buf);
|
||||
-
|
||||
- /* Set up the buffer to contain the portion of the link_map
|
||||
- structure that gdb cares about. Note that this is not the
|
||||
- whole link_map structure. */
|
||||
- objfile_lm_info.lm = xzalloc (lmo->link_map_size);
|
||||
- make_cleanup (xfree, objfile_lm_info.lm);
|
||||
-
|
||||
- /* Read the link map into our internal structure. */
|
||||
- read_memory (lm, objfile_lm_info.lm, lmo->link_map_size);
|
||||
-
|
||||
- /* Read address of name from target memory to GDB. */
|
||||
- read_memory (lm + lmo->l_name_offset, l_name_buf, lmo->l_name_size);
|
||||
-
|
||||
- /* Extract this object's name. Assume that the address is
|
||||
- unsigned. */
|
||||
- name_address = extract_unsigned_integer (l_name_buf, lmo->l_name_size);
|
||||
- target_read_string (name_address, &buffer,
|
||||
- SO_NAME_MAX_PATH_SIZE - 1, &errcode);
|
||||
- make_cleanup (xfree, buffer);
|
||||
- if (errcode != 0)
|
||||
- warning (_("Can't read pathname for load map: %s."),
|
||||
- safe_strerror (errcode));
|
||||
- else
|
||||
- {
|
||||
- /* Is this the linkmap for the file we want? */
|
||||
- /* If the file is not a shared library and has no name,
|
||||
- we are sure it is the main executable, so we return that. */
|
||||
- if ((buffer && strcmp (buffer, objfile->name) == 0)
|
||||
- || (!(objfile->flags & OBJF_SHARED) && (strcmp (buffer, "") == 0)))
|
||||
- {
|
||||
- do_cleanups (old_chain);
|
||||
- return lm;
|
||||
- }
|
||||
- }
|
||||
- /* Not the file we wanted, continue checking. Assume that the
|
||||
- address is unsigned. */
|
||||
- lm = extract_unsigned_integer (objfile_lm_info.lm + lmo->l_next_offset,
|
||||
- lmo->l_next_size);
|
||||
- do_cleanups (old_chain);
|
||||
+ /* Position ourselves on the first link map. */
|
||||
+ lm = solib_svr4_r_map ();
|
||||
+ while (lm)
|
||||
+ {
|
||||
+ /* Get info on the layout of the r_debug and link_map structures. */
|
||||
+ struct link_map_offsets *lmo = svr4_fetch_link_map_offsets ();
|
||||
+ int errcode;
|
||||
+ char *buffer;
|
||||
+ struct lm_info objfile_lm_info;
|
||||
+ struct cleanup *old_chain;
|
||||
+ CORE_ADDR name_address;
|
||||
+ gdb_byte *l_name_buf = xmalloc (lmo->l_name_size);
|
||||
+ old_chain = make_cleanup (xfree, l_name_buf);
|
||||
+for (resolve = 0; resolve <= 1; resolve++)
|
||||
+{
|
||||
+
|
||||
+ /* Set up the buffer to contain the portion of the link_map
|
||||
+ structure that gdb cares about. Note that this is not the
|
||||
+ whole link_map structure. */
|
||||
+ objfile_lm_info.lm = xzalloc (lmo->link_map_size);
|
||||
+ make_cleanup (xfree, objfile_lm_info.lm);
|
||||
+
|
||||
+ /* Read the link map into our internal structure. */
|
||||
+ read_memory (lm, objfile_lm_info.lm, lmo->link_map_size);
|
||||
+
|
||||
+ /* Read address of name from target memory to GDB. */
|
||||
+ read_memory (lm + lmo->l_name_offset, l_name_buf, lmo->l_name_size);
|
||||
+
|
||||
+ /* Extract this object's name. Assume that the address is
|
||||
+ unsigned. */
|
||||
+ name_address = extract_unsigned_integer (l_name_buf, lmo->l_name_size);
|
||||
+ target_read_string (name_address, &buffer,
|
||||
+ SO_NAME_MAX_PATH_SIZE - 1, &errcode);
|
||||
+ make_cleanup (xfree, buffer);
|
||||
+ if (errcode != 0)
|
||||
+ warning (_("Can't read pathname for load map: %s."),
|
||||
+ safe_strerror (errcode));
|
||||
+ else
|
||||
/* Position ourselves on the first link map. */
|
||||
lm = solib_svr4_r_map ();
|
||||
while (lm)
|
||||
@@ -1051,6 +1055,21 @@ svr4_fetch_objfile_link_map (struct objf
|
||||
safe_strerror (errcode));
|
||||
else
|
||||
{
|
||||
+ /* solib_svr4_r_map() may contain relative pathnames while
|
||||
+ `objfile->name' is absolute. */
|
||||
+ if (resolve && buffer && buffer[0] != '/')
|
||||
+ {
|
||||
+ /* solib_svr4_r_map() may contain relative pathnames while
|
||||
+ `objfile->name' is absolute. */
|
||||
+ if (resolve && buffer && buffer[0] != '/')
|
||||
+ {
|
||||
+ char *absolute;
|
||||
+ int fd;
|
||||
+ char *absolute;
|
||||
+ int fd;
|
||||
+
|
||||
+ fd = solib_open (buffer, &absolute);
|
||||
+ if (fd != -1)
|
||||
+ {
|
||||
+ make_cleanup (xfree, absolute);
|
||||
+ buffer = absolute;
|
||||
+ close (fd);
|
||||
+ }
|
||||
+ }
|
||||
+ /* Is this the linkmap for the file we want? */
|
||||
+ /* If the file is not a shared library and has no name,
|
||||
+ we are sure it is the main executable, so we return that. */
|
||||
+ if ((buffer && strcmp (buffer, objfile->name) == 0)
|
||||
+ || (!(objfile->flags & OBJF_SHARED) && (strcmp (buffer, "") == 0)))
|
||||
+ fd = solib_open (buffer, &absolute);
|
||||
+ if (fd != -1)
|
||||
+ {
|
||||
+ do_cleanups (old_chain);
|
||||
+ return lm;
|
||||
+ make_cleanup (xfree, absolute);
|
||||
+ buffer = absolute;
|
||||
+ close (fd);
|
||||
+ }
|
||||
+ }
|
||||
+ /* Not the file we wanted, continue checking. Assume that the
|
||||
+ address is unsigned. */
|
||||
+ lm = extract_unsigned_integer (objfile_lm_info.lm + lmo->l_next_offset,
|
||||
+ lmo->l_next_size);
|
||||
+ do_cleanups (old_chain);
|
||||
+ }
|
||||
/* Is this the linkmap for the file we want? */
|
||||
/* If the file is not a shared library and has no name,
|
||||
we are sure it is the main executable, so we return that. */
|
||||
@@ -1069,6 +1088,9 @@ svr4_fetch_objfile_link_map (struct objf
|
||||
builtin_type_void_data_ptr);
|
||||
do_cleanups (old_chain);
|
||||
}
|
||||
+
|
||||
+} /* resolve */
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
Index: gdb-6.5/gdb/testsuite/gdb.threads/tls-sepdebug-main.c
|
||||
|
||||
Index: gdb-6.7/gdb/testsuite/gdb.threads/tls-sepdebug-main.c
|
||||
===================================================================
|
||||
RCS file: gdb-6.5/gdb/testsuite/gdb.threads/tls-sepdebug-main.c
|
||||
diff -N gdb-6.5/gdb/testsuite/gdb.threads/tls-sepdebug-main.c
|
||||
--- /dev/null 1 Jan 1970 00:00:00 -0000
|
||||
+++ gdb-6.5/gdb/testsuite/gdb.threads/tls-sepdebug-main.c 1 Sep 2006 18:47:14 -0000
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gdb-6.7/gdb/testsuite/gdb.threads/tls-sepdebug-main.c 2007-10-16 15:40:01.000000000 +0200
|
||||
@@ -0,0 +1,25 @@
|
||||
+/* This testcase is part of GDB, the GNU debugger.
|
||||
+
|
||||
@ -185,12 +97,10 @@ diff -N gdb-6.5/gdb/testsuite/gdb.threads/tls-sepdebug-main.c
|
||||
+{
|
||||
+ return 0;
|
||||
+}
|
||||
Index: gdb-6.5/gdb/testsuite/gdb.threads/tls-sepdebug-shared.c
|
||||
Index: gdb-6.7/gdb/testsuite/gdb.threads/tls-sepdebug-shared.c
|
||||
===================================================================
|
||||
RCS file: gdb-6.5/gdb/testsuite/gdb.threads/tls-sepdebug-shared.c
|
||||
diff -N gdb-6.5/gdb/testsuite/gdb.threads/tls-sepdebug-shared.c
|
||||
--- /dev/null 1 Jan 1970 00:00:00 -0000
|
||||
+++ gdb-6.5/gdb/testsuite/gdb.threads/tls-sepdebug-shared.c 1 Sep 2006 18:47:14 -0000
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gdb-6.7/gdb/testsuite/gdb.threads/tls-sepdebug-shared.c 2007-10-16 15:40:01.000000000 +0200
|
||||
@@ -0,0 +1,22 @@
|
||||
+/* This testcase is part of GDB, the GNU debugger.
|
||||
+
|
||||
@ -214,12 +124,10 @@ diff -N gdb-6.5/gdb/testsuite/gdb.threads/tls-sepdebug-shared.c
|
||||
+ bug-gdb@prep.ai.mit.edu */
|
||||
+
|
||||
+__thread int var = 42;
|
||||
Index: gdb-6.5/gdb/testsuite/gdb.threads/tls-sepdebug.exp
|
||||
Index: gdb-6.7/gdb/testsuite/gdb.threads/tls-sepdebug.exp
|
||||
===================================================================
|
||||
RCS file: gdb-6.5/gdb/testsuite/gdb.threads/tls-sepdebug.exp
|
||||
diff -N gdb-6.5/gdb/testsuite/gdb.threads/tls-sepdebug.exp
|
||||
--- /dev/null 1 Jan 1970 00:00:00 -0000
|
||||
+++ gdb-6.5/gdb/testsuite/gdb.threads/tls-sepdebug.exp 1 Sep 2006 18:47:14 -0000
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gdb-6.7/gdb/testsuite/gdb.threads/tls-sepdebug.exp 2007-10-16 15:40:01.000000000 +0200
|
||||
@@ -0,0 +1,81 @@
|
||||
+# Copyright 2006 Free Software Foundation, Inc.
|
||||
+
|
||||
|
@ -1,189 +0,0 @@
|
||||
2006-10-30 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* gdb/minsyms.c (lookup_minimal_symbol_by_pc_section): Handle
|
||||
overlapping non-zero sized functions (for glibc `__nanosleep').
|
||||
|
||||
2006-10-30 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* gdb.arch/i386-size-overlap.c, gdb.arch/i386-size-overlap.exp: New
|
||||
file, provide nested (overlapping) functions for the PC resolving.
|
||||
|
||||
|
||||
Index: ./gdb/minsyms.c
|
||||
===================================================================
|
||||
--- ./gdb/minsyms.c 17 Oct 2006 20:17:44 -0000 1.47
|
||||
+++ ./gdb/minsyms.c 30 Oct 2006 12:41:26 -0000
|
||||
@@ -511,6 +511,29 @@ lookup_minimal_symbol_by_pc_section (COR
|
||||
continue;
|
||||
}
|
||||
|
||||
+ /* We are behind the current symbol's size.
|
||||
+ Try the previous symbol - if it is non-zero sized one it
|
||||
+ may overlap the current one and reach our PC.
|
||||
+ It occurs for GNU/Linux glibc `__nanosleep' overlapping
|
||||
+ later `__nanosleep_nocancel' with PC at 0077ec66:
|
||||
+ Num: Value Size Type Bind Vis Ndx Name
|
||||
+ 7247: 0077ec20 124 FUNC WEAK DEFAULT 11 __nanosleep
|
||||
+ 4651: 0077ec2a 32 FUNC LOCAL DEFAULT 11 __nanosleep_nocancel
|
||||
+ Test `gdb.arch/i386-size' + `gdb.arch/i386-unwind'.
|
||||
+ Limit it only for the overlapping cases as we could harm
|
||||
+ the zero-sized symbols detection logic around.
|
||||
+ */
|
||||
+ if (hi > 0
|
||||
+ && MSYMBOL_SIZE (&msymbol[hi]) != 0
|
||||
+ && pc >= (SYMBOL_VALUE_ADDRESS (&msymbol[hi])
|
||||
+ + MSYMBOL_SIZE (&msymbol[hi]))
|
||||
+ && pc < (SYMBOL_VALUE_ADDRESS (&msymbol[hi - 1])
|
||||
+ + MSYMBOL_SIZE (&msymbol[hi - 1])))
|
||||
+ {
|
||||
+ hi--;
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
/* Otherwise, this symbol must be as good as we're going
|
||||
to get. */
|
||||
break;
|
||||
Index: ./gdb/testsuite/gdb.arch/i386-size-overlap.c
|
||||
===================================================================
|
||||
--- /dev/null 1 Jan 1970 00:00:00 -0000
|
||||
+++ ./gdb/testsuite/gdb.arch/i386-size-overlap.c 30 Oct 2006 12:41:35 -0000
|
||||
@@ -0,0 +1,53 @@
|
||||
+/* Overlapping symbol sizes test program.
|
||||
+
|
||||
+ Copyright 2006 Free Software Foundation, Inc.
|
||||
+
|
||||
+ This file is part of GDB.
|
||||
+
|
||||
+ This program is free software; you can redistribute it and/or modify
|
||||
+ it under the terms of the GNU General Public License as published by
|
||||
+ the Free Software Foundation; either version 2 of the License, or
|
||||
+ (at your option) any later version.
|
||||
+
|
||||
+ This program is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+ GNU General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU General Public License
|
||||
+ along with this program; if not, write to the Free Software
|
||||
+ Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
+ Boston, MA 02111-1307, USA. */
|
||||
+
|
||||
+#ifdef SYMBOL_PREFIX
|
||||
+#define SYMBOL(str) SYMBOL_PREFIX #str
|
||||
+#else
|
||||
+#define SYMBOL(str) #str
|
||||
+#endif
|
||||
+
|
||||
+void
|
||||
+trap (void)
|
||||
+{
|
||||
+ asm ("int $0x03");
|
||||
+}
|
||||
+
|
||||
+/* Jump from a function with its symbol size set, to a function
|
||||
+ named by a local label. GDB should report the `main' function
|
||||
+ even for the rest, after the global `inner' ends. */
|
||||
+
|
||||
+asm(".text\n"
|
||||
+ " .align 8\n"
|
||||
+ " .globl " SYMBOL (main) "\n"
|
||||
+ SYMBOL (main) ":\n"
|
||||
+ " pushl %ebp\n"
|
||||
+ " mov %esp, %ebp\n"
|
||||
+ " call .Lfunc\n"
|
||||
+ " ret\n"
|
||||
+ SYMBOL (inner) ":\n"
|
||||
+ " ret\n"
|
||||
+ " .size " SYMBOL (inner) ", .-" SYMBOL (inner) "\n"
|
||||
+ ".Lfunc:\n"
|
||||
+ " pushl %ebp\n"
|
||||
+ " mov %esp, %ebp\n"
|
||||
+ " call " SYMBOL (trap) "\n"
|
||||
+ " .size " SYMBOL (main) ", .-" SYMBOL (main) "\n");
|
||||
Index: gdb/testsuite/gdb.arch/i386-size-overlap.exp
|
||||
===================================================================
|
||||
RCS file: gdb/testsuite/gdb.arch/i386-size-overlap.exp
|
||||
diff -N ./gdb/testsuite/gdb.arch/i386-size-overlap.exp
|
||||
--- /dev/null 1 Jan 1970 00:00:00 -0000
|
||||
+++ ./gdb/testsuite/gdb.arch/i386-size-overlap.exp 30 Oct 2006 12:41:35 -0000
|
||||
@@ -0,0 +1,79 @@
|
||||
+# Copyright 2006 Free Software Foundation, Inc.
|
||||
+
|
||||
+# This program is free software; you can redistribute it and/or modify
|
||||
+# it under the terms of the GNU General Public License as published by
|
||||
+# the Free Software Foundation; either version 2 of the License, or
|
||||
+# (at your option) any later version.
|
||||
+#
|
||||
+# This program is distributed in the hope that it will be useful,
|
||||
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+# GNU General Public License for more details.
|
||||
+#
|
||||
+# You should have received a copy of the GNU General Public License
|
||||
+# along with this program; if not, write to the Free Software
|
||||
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
+
|
||||
+# Please email any bugs, comments, and/or additions to this file to:
|
||||
+# bug-gdb@gnu.org
|
||||
+
|
||||
+# This file is part of the gdb testsuite.
|
||||
+
|
||||
+if $tracelevel {
|
||||
+ strace $tracelevel
|
||||
+}
|
||||
+
|
||||
+# Test that GDB can handle overlapping sizes of symbols.
|
||||
+
|
||||
+if ![istarget "i?86-*-*"] then {
|
||||
+ verbose "Skipping i386 unwinder tests."
|
||||
+ return
|
||||
+}
|
||||
+
|
||||
+set testfile "i386-size-overlap"
|
||||
+set srcfile ${testfile}.c
|
||||
+set binfile ${objdir}/${subdir}/${testfile}
|
||||
+
|
||||
+# some targets have leading underscores on assembly symbols.
|
||||
+# TODO: detect this automatically
|
||||
+set additional_flags ""
|
||||
+if [istarget "i?86-*-cygwin*"] then {
|
||||
+ set additional_flags "additional_flags=-DSYMBOL_PREFIX=\"_\""
|
||||
+}
|
||||
+
|
||||
+if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" \
|
||||
+ executable [list debug $additional_flags]] != "" } {
|
||||
+ untested "i386-size"
|
||||
+ return -1
|
||||
+}
|
||||
+
|
||||
+gdb_exit
|
||||
+gdb_start
|
||||
+gdb_reinitialize_dir $srcdir/$subdir
|
||||
+gdb_load ${binfile}
|
||||
+
|
||||
+# We use gdb_run_cmd so this stands a chance to work for remote
|
||||
+# targets too.
|
||||
+gdb_run_cmd
|
||||
+
|
||||
+gdb_expect {
|
||||
+ -re "Program received signal SIGTRAP.*$gdb_prompt $" {
|
||||
+ pass "run past main"
|
||||
+ }
|
||||
+ -re ".*$gdb_prompt $" {
|
||||
+ fail "run past main"
|
||||
+ }
|
||||
+ timeout {
|
||||
+ fail "run past main (timeout)"
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+set message "backtrace shows the outer function"
|
||||
+gdb_test_multiple "backtrace 10" $message {
|
||||
+ -re "#1\[ \t]*$hex in inner.*$gdb_prompt $" {
|
||||
+ fail $message
|
||||
+ }
|
||||
+ -re "#1\[ \t]*$hex in main.*$gdb_prompt $" {
|
||||
+ pass $message
|
||||
+ }
|
||||
+}
|
@ -1,43 +0,0 @@
|
||||
2007-01-13 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* lib/gdb.exp (get_compiler_info): Cope with nondefault output logs.
|
||||
|
||||
|
||||
diff -u -rupN gdb-6.5-ppc/gdb/testsuite/lib/gdb.exp gdb-6.5/gdb/testsuite/lib/gdb.exp
|
||||
--- gdb-6.5-ppc/gdb/testsuite/lib/gdb.exp 2007-01-12 14:33:26.000000000 -0500
|
||||
+++ gdb-6.5/gdb/testsuite/lib/gdb.exp 2007-01-12 21:15:02.000000000 -0500
|
||||
@@ -1351,9 +1351,10 @@ proc get_compiler_info {binfile args} {
|
||||
|
||||
# Run $ifile through the right preprocessor.
|
||||
# Toggle gdb.log to keep the compiler output out of the log.
|
||||
+ set log_old [log_file -info]
|
||||
log_file
|
||||
set cppout [ gdb_compile "${ifile}" "" preprocess [list "$args" quiet] ]
|
||||
- log_file -a "$outdir/$tool.log"
|
||||
+ eval "log_file $log_old"
|
||||
|
||||
# Eval the output.
|
||||
set unknown 0
|
||||
|
||||
|
||||
2007-01-14 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* lib/gdb.exp: Abort on missing `site.exp'.
|
||||
|
||||
|
||||
diff -u -rup gdb-6.5-orig/gdb/testsuite/lib/gdb.exp gdb-6.5/gdb/testsuite/lib/gdb.exp
|
||||
--- gdb-6.5-orig/gdb/testsuite/lib/gdb.exp 2006-12-17 11:59:42.000000000 +0100
|
||||
+++ gdb-6.5/gdb/testsuite/lib/gdb.exp 2007-01-14 16:27:03.000000000 +0100
|
||||
@@ -22,6 +22,12 @@
|
||||
# need to be modified for any target, it can be done with a variable
|
||||
# or by passing arguments.
|
||||
|
||||
+if {$tool == ""} {
|
||||
+ # Tests would fail, logs on get_compiler_info() would be missing.
|
||||
+ send_error "`site.exp' not found, run `make site.exp'!\n"
|
||||
+ exit 2
|
||||
+}
|
||||
+
|
||||
load_lib libgloss.exp
|
||||
|
||||
global GDB
|
@ -1,116 +0,0 @@
|
||||
Compatibility with: linux-2.6-elf-core-sysctl.patch
|
||||
fs.binfmt_elf.core_dump_elf_headers=1
|
||||
|
||||
2007-08-07 Alan Modra <amodra@bigpond.net.au>
|
||||
|
||||
* elf.c: (_bfd_elf_make_section_from_phdr): Properly handle
|
||||
bss segments.
|
||||
|
||||
--- ./bfd/elf.c 6 Aug 2007 18:35:18 -0000 1.405
|
||||
+++ ./bfd/elf.c 6 Aug 2007 22:53:27 -0000 1.406
|
||||
@@ -2223,7 +2223,7 @@ _bfd_elf_new_section_hook (bfd *abfd, as
|
||||
for the single program segment. The first has the length specified by
|
||||
the file size of the segment, and the second has the length specified
|
||||
by the difference between the two sizes. In effect, the segment is split
|
||||
- into it's initialized and uninitialized parts.
|
||||
+ into its initialized and uninitialized parts.
|
||||
|
||||
*/
|
||||
|
||||
@@ -2242,40 +2242,46 @@ _bfd_elf_make_section_from_phdr (bfd *ab
|
||||
split = ((hdr->p_memsz > 0)
|
||||
&& (hdr->p_filesz > 0)
|
||||
&& (hdr->p_memsz > hdr->p_filesz));
|
||||
- sprintf (namebuf, "%s%d%s", typename, index, split ? "a" : "");
|
||||
- len = strlen (namebuf) + 1;
|
||||
- name = bfd_alloc (abfd, len);
|
||||
- if (!name)
|
||||
- return FALSE;
|
||||
- memcpy (name, namebuf, len);
|
||||
- newsect = bfd_make_section (abfd, name);
|
||||
- if (newsect == NULL)
|
||||
- return FALSE;
|
||||
- newsect->vma = hdr->p_vaddr;
|
||||
- newsect->lma = hdr->p_paddr;
|
||||
- newsect->size = hdr->p_filesz;
|
||||
- newsect->filepos = hdr->p_offset;
|
||||
- newsect->flags |= SEC_HAS_CONTENTS;
|
||||
- newsect->alignment_power = bfd_log2 (hdr->p_align);
|
||||
- if (hdr->p_type == PT_LOAD)
|
||||
+
|
||||
+ if (hdr->p_filesz > 0)
|
||||
{
|
||||
- newsect->flags |= SEC_ALLOC;
|
||||
- newsect->flags |= SEC_LOAD;
|
||||
- if (hdr->p_flags & PF_X)
|
||||
+ sprintf (namebuf, "%s%d%s", typename, index, split ? "a" : "");
|
||||
+ len = strlen (namebuf) + 1;
|
||||
+ name = bfd_alloc (abfd, len);
|
||||
+ if (!name)
|
||||
+ return FALSE;
|
||||
+ memcpy (name, namebuf, len);
|
||||
+ newsect = bfd_make_section (abfd, name);
|
||||
+ if (newsect == NULL)
|
||||
+ return FALSE;
|
||||
+ newsect->vma = hdr->p_vaddr;
|
||||
+ newsect->lma = hdr->p_paddr;
|
||||
+ newsect->size = hdr->p_filesz;
|
||||
+ newsect->filepos = hdr->p_offset;
|
||||
+ newsect->flags |= SEC_HAS_CONTENTS;
|
||||
+ newsect->alignment_power = bfd_log2 (hdr->p_align);
|
||||
+ if (hdr->p_type == PT_LOAD)
|
||||
{
|
||||
- /* FIXME: all we known is that it has execute PERMISSION,
|
||||
- may be data. */
|
||||
- newsect->flags |= SEC_CODE;
|
||||
+ newsect->flags |= SEC_ALLOC;
|
||||
+ newsect->flags |= SEC_LOAD;
|
||||
+ if (hdr->p_flags & PF_X)
|
||||
+ {
|
||||
+ /* FIXME: all we known is that it has execute PERMISSION,
|
||||
+ may be data. */
|
||||
+ newsect->flags |= SEC_CODE;
|
||||
+ }
|
||||
+ }
|
||||
+ if (!(hdr->p_flags & PF_W))
|
||||
+ {
|
||||
+ newsect->flags |= SEC_READONLY;
|
||||
}
|
||||
- }
|
||||
- if (!(hdr->p_flags & PF_W))
|
||||
- {
|
||||
- newsect->flags |= SEC_READONLY;
|
||||
}
|
||||
|
||||
- if (split)
|
||||
+ if (hdr->p_memsz > hdr->p_filesz)
|
||||
{
|
||||
- sprintf (namebuf, "%s%db", typename, index);
|
||||
+ bfd_vma align;
|
||||
+
|
||||
+ sprintf (namebuf, "%s%d%s", typename, index, split ? "b" : "");
|
||||
len = strlen (namebuf) + 1;
|
||||
name = bfd_alloc (abfd, len);
|
||||
if (!name)
|
||||
@@ -2287,8 +2293,21 @@ _bfd_elf_make_section_from_phdr (bfd *ab
|
||||
newsect->vma = hdr->p_vaddr + hdr->p_filesz;
|
||||
newsect->lma = hdr->p_paddr + hdr->p_filesz;
|
||||
newsect->size = hdr->p_memsz - hdr->p_filesz;
|
||||
+ newsect->filepos = hdr->p_offset + hdr->p_filesz;
|
||||
+ align = newsect->vma & -newsect->vma;
|
||||
+ if (align == 0 || align > hdr->p_align)
|
||||
+ align = hdr->p_align;
|
||||
+ newsect->alignment_power = bfd_log2 (align);
|
||||
if (hdr->p_type == PT_LOAD)
|
||||
{
|
||||
+ /* Hack for gdb. Segments that have not been modified do
|
||||
+ not have their contents written to a core file, on the
|
||||
+ assumption that a debugger can find the contents in the
|
||||
+ executable. We flag this case by setting the fake
|
||||
+ section size to zero. Note that "real" bss sections will
|
||||
+ always have their contents dumped to the core file. */
|
||||
+ if (bfd_get_format (abfd) == bfd_core)
|
||||
+ newsect->size = 0;
|
||||
newsect->flags |= SEC_ALLOC;
|
||||
if (hdr->p_flags & PF_X)
|
||||
newsect->flags |= SEC_CODE;
|
@ -1,7 +1,14 @@
|
||||
diff -u -rup gdb-6.6-orig/gdb/Makefile.in gdb-6.6/gdb/Makefile.in
|
||||
--- gdb-6.6-orig/gdb/Makefile.in 2007-08-28 15:31:19.000000000 +0200
|
||||
+++ gdb-6.6/gdb/Makefile.in 2007-08-28 15:32:40.000000000 +0200
|
||||
@@ -1917,7 +1917,8 @@ corelow.o: corelow.c $(defs_h) $(arch_ut
|
||||
[base]
|
||||
|
||||
2007-10-16 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
Port to GDB-6.7.
|
||||
|
||||
Index: gdb-6.7/gdb/Makefile.in
|
||||
===================================================================
|
||||
--- gdb-6.7.orig/gdb/Makefile.in 2007-10-16 16:19:18.000000000 +0200
|
||||
+++ gdb-6.7/gdb/Makefile.in 2007-10-16 16:42:34.000000000 +0200
|
||||
@@ -1932,7 +1932,8 @@ corelow.o: corelow.c $(defs_h) $(arch_ut
|
||||
$(inferior_h) $(symtab_h) $(command_h) $(bfd_h) $(target_h) \
|
||||
$(gdbcore_h) $(gdbthread_h) $(regcache_h) $(regset_h) $(symfile_h) \
|
||||
$(exec_h) $(readline_h) $(gdb_assert_h) \
|
||||
@ -9,22 +16,23 @@ diff -u -rup gdb-6.6-orig/gdb/Makefile.in gdb-6.6/gdb/Makefile.in
|
||||
+ $(exceptions_h) $(solib_h) $(auxv_h) $(elf_common_h) $(objfiles_h) \
|
||||
+ $(gdbcmd_h)
|
||||
core-regset.o: core-regset.c $(defs_h) $(command_h) $(gdbcore_h) \
|
||||
$(inferior_h) $(target_h) $(gdb_string_h) $(gregset_h)
|
||||
$(inferior_h) $(target_h) $(regcache_h) $(gdb_string_h) $(gregset_h)
|
||||
cp-abi.o: cp-abi.c $(defs_h) $(value_h) $(cp_abi_h) $(command_h) $(gdbcmd_h) \
|
||||
@@ -2785,7 +2786,8 @@ symfile.o: symfile.c $(defs_h) $(bfdlink
|
||||
@@ -2769,7 +2770,8 @@ symfile.o: symfile.c $(defs_h) $(bfdlink
|
||||
$(gdb_stabs_h) $(gdb_obstack_h) $(completer_h) $(bcache_h) \
|
||||
$(hashtab_h) $(readline_h) $(gdb_assert_h) $(block_h) \
|
||||
$(gdb_string_h) $(gdb_stat_h) $(observer_h) $(exec_h) \
|
||||
- $(parser_defs_h) $(elf_bfd_h)
|
||||
+ $(parser_defs_h) $(elf_bfd_h) $(gdb_stdint_h) $(libbfd_h) $(elf_bfd_h) \
|
||||
+ $(elf_external_h)
|
||||
- $(parser_defs_h) $(varobj_h) $(elf_bfd_h)
|
||||
+ $(parser_defs_h) $(varobj_h) $(elf_bfd_h) $(gdb_stdint_h) $(libbfd_h) \
|
||||
+ $(elf_bfd_h) $(elf_external_h)
|
||||
symfile-mem.o: symfile-mem.c $(defs_h) $(symtab_h) $(gdbcore_h) \
|
||||
$(objfiles_h) $(exceptions_h) $(gdbcmd_h) $(target_h) $(value_h) \
|
||||
$(symfile_h) $(observer_h) $(auxv_h) $(elf_common_h)
|
||||
diff -u -rup gdb-6.6-orig/gdb/corelow.c gdb-6.6/gdb/corelow.c
|
||||
--- gdb-6.6-orig/gdb/corelow.c 2006-04-18 21:20:06.000000000 +0200
|
||||
+++ gdb-6.6/gdb/corelow.c 2007-08-28 15:31:56.000000000 +0200
|
||||
@@ -46,6 +46,10 @@
|
||||
Index: gdb-6.7/gdb/corelow.c
|
||||
===================================================================
|
||||
--- gdb-6.7.orig/gdb/corelow.c 2007-09-04 01:06:35.000000000 +0200
|
||||
+++ gdb-6.7/gdb/corelow.c 2007-10-16 16:41:50.000000000 +0200
|
||||
@@ -44,6 +44,10 @@
|
||||
#include "gdb_assert.h"
|
||||
#include "exceptions.h"
|
||||
#include "solib.h"
|
||||
@ -35,7 +43,7 @@ diff -u -rup gdb-6.6-orig/gdb/corelow.c gdb-6.6/gdb/corelow.c
|
||||
|
||||
|
||||
#ifndef O_LARGEFILE
|
||||
@@ -253,6 +257,66 @@ add_to_thread_list (bfd *abfd, asection
|
||||
@@ -251,6 +255,66 @@ add_to_thread_list (bfd *abfd, asection
|
||||
inferior_ptid = pid_to_ptid (thread_id); /* Yes, make it current */
|
||||
}
|
||||
|
||||
@ -102,7 +110,7 @@ diff -u -rup gdb-6.6-orig/gdb/corelow.c gdb-6.6/gdb/corelow.c
|
||||
/* This routine opens and sets up the core file bfd. */
|
||||
|
||||
static void
|
||||
@@ -417,6 +420,15 @@ core_open (char *filename, int from_tty)
|
||||
@@ -347,6 +411,15 @@ core_open (char *filename, int from_tty)
|
||||
ontop = !push_target (&core_ops);
|
||||
discard_cleanups (old_chain);
|
||||
|
||||
@ -118,7 +126,7 @@ diff -u -rup gdb-6.6-orig/gdb/corelow.c gdb-6.6/gdb/corelow.c
|
||||
/* This is done first, before anything has a chance to query the
|
||||
inferior for information such as symbols. */
|
||||
post_create_inferior (&core_ops, from_tty);
|
||||
@@ -662,4 +734,13 @@ _initialize_corelow (void)
|
||||
@@ -678,4 +751,13 @@ _initialize_corelow (void)
|
||||
|
||||
if (!coreops_suppress_target)
|
||||
add_target (&core_ops);
|
||||
@ -132,16 +140,16 @@ diff -u -rup gdb-6.6-orig/gdb/corelow.c gdb-6.6/gdb/corelow.c
|
||||
+ show_build_id_core_loads,
|
||||
+ &setlist, &showlist);
|
||||
}
|
||||
diff -u -rup gdb-6.6-orig/gdb/solib-svr4.c gdb-6.6/gdb/solib-svr4.c
|
||||
--- gdb-6.6-orig/gdb/solib-svr4.c 2007-08-28 15:31:19.000000000 +0200
|
||||
+++ gdb-6.6/gdb/solib-svr4.c 2007-08-28 15:34:02.000000000 +0200
|
||||
@@ -943,10 +943,35 @@ svr4_current_sos (void)
|
||||
}
|
||||
else
|
||||
{
|
||||
Index: gdb-6.7/gdb/solib-svr4.c
|
||||
===================================================================
|
||||
--- gdb-6.7.orig/gdb/solib-svr4.c 2007-10-16 15:43:56.000000000 +0200
|
||||
+++ gdb-6.7/gdb/solib-svr4.c 2007-10-16 16:44:44.000000000 +0200
|
||||
@@ -957,9 +957,35 @@ svr4_current_sos (void)
|
||||
free_so (new);
|
||||
else
|
||||
{
|
||||
- strncpy (new->so_name, buffer, SO_NAME_MAX_PATH_SIZE - 1);
|
||||
- new->so_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0';
|
||||
- xfree (buffer);
|
||||
- strcpy (new->so_original_name, new->so_name);
|
||||
+ struct build_id *build_id;
|
||||
+
|
||||
@ -175,12 +183,13 @@ diff -u -rup gdb-6.6-orig/gdb/solib-svr4.c gdb-6.6/gdb/solib-svr4.c
|
||||
if (debug_solib)
|
||||
{
|
||||
fprintf_unfiltered (gdb_stdlog,
|
||||
diff -u -rup gdb-6.6-orig/gdb/symfile.c gdb-6.6/gdb/symfile.c
|
||||
--- gdb-6.6-orig/gdb/symfile.c 2007-08-28 15:31:19.000000000 +0200
|
||||
+++ gdb-6.6/gdb/symfile.c 2007-08-28 15:36:22.000000000 +0200
|
||||
@@ -54,6 +54,9 @@
|
||||
#include "exec.h"
|
||||
Index: gdb-6.7/gdb/symfile.c
|
||||
===================================================================
|
||||
--- gdb-6.7.orig/gdb/symfile.c 2007-10-15 21:42:26.000000000 +0200
|
||||
+++ gdb-6.7/gdb/symfile.c 2007-10-16 16:46:30.000000000 +0200
|
||||
@@ -53,6 +53,9 @@
|
||||
#include "parser-defs.h"
|
||||
#include "varobj.h"
|
||||
#include "elf-bfd.h"
|
||||
+#include "gdb_stdint.h"
|
||||
+#include "libbfd.h"
|
||||
@ -188,7 +197,7 @@ diff -u -rup gdb-6.6-orig/gdb/symfile.c gdb-6.6/gdb/symfile.c
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <fcntl.h>
|
||||
@@ -62,6 +65,7 @@
|
||||
@@ -61,6 +64,7 @@
|
||||
#include <ctype.h>
|
||||
#include <time.h>
|
||||
#include <sys/time.h>
|
||||
@ -196,7 +205,7 @@ diff -u -rup gdb-6.6-orig/gdb/symfile.c gdb-6.6/gdb/symfile.c
|
||||
|
||||
|
||||
int (*deprecated_ui_load_progress_hook) (const char *section, unsigned long num);
|
||||
@@ -1120,16 +1124,62 @@ symbol_file_clear (int from_tty)
|
||||
@@ -1238,16 +1242,62 @@ symbol_file_clear (int from_tty)
|
||||
printf_unfiltered (_("No symbol file now.\n"));
|
||||
}
|
||||
|
||||
@ -261,7 +270,7 @@ diff -u -rup gdb-6.6-orig/gdb/symfile.c gdb-6.6/gdb/symfile.c
|
||||
{
|
||||
struct build_id *retval;
|
||||
|
||||
@@ -1145,6 +1195,348 @@ build_id_bfd_get (bfd *abfd)
|
||||
@@ -1263,6 +1313,348 @@ build_id_bfd_get (bfd *abfd)
|
||||
return retval;
|
||||
}
|
||||
|
||||
@ -610,7 +619,7 @@ diff -u -rup gdb-6.6-orig/gdb/symfile.c gdb-6.6/gdb/symfile.c
|
||||
/* Return if FILENAME has NT_GNU_BUILD_ID matching the CHECK value. */
|
||||
|
||||
static int
|
||||
@@ -1159,7 +1551,7 @@ build_id_verify (const char *filename, s
|
||||
@@ -1277,7 +1669,7 @@ build_id_verify (const char *filename, s
|
||||
if (abfd == NULL)
|
||||
return 0;
|
||||
|
||||
@ -619,9 +628,9 @@ diff -u -rup gdb-6.6-orig/gdb/symfile.c gdb-6.6/gdb/symfile.c
|
||||
|
||||
if (found == NULL)
|
||||
warning (_("File \"%s\" has no build-id, file skipped"), filename);
|
||||
@@ -1177,8 +1569,9 @@ build_id_verify (const char *filename, s
|
||||
|
||||
static char *debug_file_directory = NULL;
|
||||
@@ -1293,8 +1685,9 @@ build_id_verify (const char *filename, s
|
||||
return retval;
|
||||
}
|
||||
|
||||
-static char *
|
||||
-build_id_to_debug_filename (struct build_id *build_id)
|
||||
@ -631,7 +640,7 @@ diff -u -rup gdb-6.6-orig/gdb/symfile.c gdb-6.6/gdb/symfile.c
|
||||
{
|
||||
char *link, *s, *retval = NULL;
|
||||
gdb_byte *data = build_id->data;
|
||||
@@ -1186,7 +1579,9 @@ build_id_to_debug_filename (struct build
|
||||
@@ -1302,7 +1695,9 @@ build_id_to_debug_filename (struct build
|
||||
|
||||
/* DEBUG_FILE_DIRECTORY/.build-id/ab/cdef */
|
||||
link = xmalloc (strlen (debug_file_directory) + (sizeof "/.build-id/" - 1) + 1
|
||||
@ -642,7 +651,7 @@ diff -u -rup gdb-6.6-orig/gdb/symfile.c gdb-6.6/gdb/symfile.c
|
||||
s = link + sprintf (link, "%s/.build-id/", debug_file_directory);
|
||||
if (size > 0)
|
||||
{
|
||||
@@ -1197,12 +1592,14 @@ build_id_to_debug_filename (struct build
|
||||
@@ -1313,12 +1708,14 @@ build_id_to_debug_filename (struct build
|
||||
*s++ = '/';
|
||||
while (size-- > 0)
|
||||
s += sprintf (s, "%02x", (unsigned) *data++);
|
||||
@ -659,7 +668,7 @@ diff -u -rup gdb-6.6-orig/gdb/symfile.c gdb-6.6/gdb/symfile.c
|
||||
|
||||
if (retval != NULL && !build_id_verify (retval, build_id))
|
||||
{
|
||||
@@ -1210,6 +1607,11 @@ build_id_to_debug_filename (struct build
|
||||
@@ -1326,6 +1723,11 @@ build_id_to_debug_filename (struct build
|
||||
retval = NULL;
|
||||
}
|
||||
|
||||
@ -671,7 +680,7 @@ diff -u -rup gdb-6.6-orig/gdb/symfile.c gdb-6.6/gdb/symfile.c
|
||||
return retval;
|
||||
}
|
||||
|
||||
@@ -1305,23 +1707,27 @@ find_separate_debug_file (struct objfile
|
||||
@@ -1423,23 +1825,27 @@ find_separate_debug_file (struct objfile
|
||||
unsigned long crc32;
|
||||
int i;
|
||||
struct build_id *build_id;
|
||||
@ -704,7 +713,7 @@ diff -u -rup gdb-6.6-orig/gdb/symfile.c gdb-6.6/gdb/symfile.c
|
||||
}
|
||||
|
||||
basename = get_debug_link_info (objfile, &crc32);
|
||||
@@ -1329,7 +1735,10 @@ find_separate_debug_file (struct objfile
|
||||
@@ -1447,7 +1853,10 @@ find_separate_debug_file (struct objfile
|
||||
if (basename == NULL)
|
||||
/* There's no separate debug info, hence there's no way we could
|
||||
load it => no warning. */
|
||||
@ -716,7 +725,7 @@ diff -u -rup gdb-6.6-orig/gdb/symfile.c gdb-6.6/gdb/symfile.c
|
||||
|
||||
dir = xstrdup (objfile->name);
|
||||
|
||||
@@ -1358,6 +1767,7 @@ find_separate_debug_file (struct objfile
|
||||
@@ -1476,6 +1885,7 @@ find_separate_debug_file (struct objfile
|
||||
|
||||
if (separate_debug_file_exists (debugfile, crc32, objfile->name))
|
||||
{
|
||||
@ -724,7 +733,7 @@ diff -u -rup gdb-6.6-orig/gdb/symfile.c gdb-6.6/gdb/symfile.c
|
||||
xfree (basename);
|
||||
xfree (dir);
|
||||
return xstrdup (debugfile);
|
||||
@@ -1371,6 +1781,7 @@ find_separate_debug_file (struct objfile
|
||||
@@ -1489,6 +1899,7 @@ find_separate_debug_file (struct objfile
|
||||
|
||||
if (separate_debug_file_exists (debugfile, crc32, objfile->name))
|
||||
{
|
||||
@ -732,7 +741,7 @@ diff -u -rup gdb-6.6-orig/gdb/symfile.c gdb-6.6/gdb/symfile.c
|
||||
xfree (basename);
|
||||
xfree (dir);
|
||||
return xstrdup (debugfile);
|
||||
@@ -1384,11 +1795,20 @@ find_separate_debug_file (struct objfile
|
||||
@@ -1502,6 +1913,7 @@ find_separate_debug_file (struct objfile
|
||||
|
||||
if (separate_debug_file_exists (debugfile, crc32, objfile->name))
|
||||
{
|
||||
@ -740,8 +749,18 @@ diff -u -rup gdb-6.6-orig/gdb/symfile.c gdb-6.6/gdb/symfile.c
|
||||
xfree (basename);
|
||||
xfree (dir);
|
||||
return xstrdup (debugfile);
|
||||
@@ -1521,6 +1933,7 @@ find_separate_debug_file (struct objfile
|
||||
|
||||
if (separate_debug_file_exists (debugfile, crc32, objfile->name))
|
||||
{
|
||||
+ xfree (build_id_filename);
|
||||
xfree (canon_name);
|
||||
xfree (basename);
|
||||
xfree (dir);
|
||||
@@ -1528,6 +1941,14 @@ find_separate_debug_file (struct objfile
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+ if (build_id_filename != NULL)
|
||||
+ {
|
||||
+ fprintf_unfiltered (gdb_stdlog,
|
||||
@ -750,10 +769,10 @@ diff -u -rup gdb-6.6-orig/gdb/symfile.c gdb-6.6/gdb/symfile.c
|
||||
+ xfree (build_id_filename);
|
||||
+ }
|
||||
+
|
||||
xfree (basename);
|
||||
xfree (dir);
|
||||
return NULL;
|
||||
@@ -4024,4 +4443,12 @@ the global debug-file directory prepende
|
||||
if (canon_name)
|
||||
xfree (canon_name);
|
||||
|
||||
@@ -4223,4 +4644,12 @@ the global debug-file directory prepende
|
||||
NULL,
|
||||
show_debug_file_directory,
|
||||
&setlist, &showlist);
|
||||
@ -766,12 +785,13 @@ diff -u -rup gdb-6.6-orig/gdb/symfile.c gdb-6.6/gdb/symfile.c
|
||||
+ show_build_id_debug,
|
||||
+ &setdebuglist, &showdebuglist);
|
||||
}
|
||||
diff -u -rup gdb-6.6-orig/gdb/symfile.h gdb-6.6/gdb/symfile.h
|
||||
--- gdb-6.6-orig/gdb/symfile.h 2005-12-17 23:34:03.000000000 +0100
|
||||
+++ gdb-6.6/gdb/symfile.h 2007-08-28 15:31:56.000000000 +0200
|
||||
@@ -322,6 +322,12 @@ extern bfd_byte *symfile_relocate_debug_
|
||||
extern void dwarf_build_psymtabs (struct objfile *, int, file_ptr,
|
||||
unsigned int, file_ptr, unsigned int);
|
||||
Index: gdb-6.7/gdb/symfile.h
|
||||
===================================================================
|
||||
--- gdb-6.7.orig/gdb/symfile.h 2007-09-24 23:48:05.000000000 +0200
|
||||
+++ gdb-6.7/gdb/symfile.h 2007-10-16 16:41:50.000000000 +0200
|
||||
@@ -353,6 +353,12 @@ extern int symfile_map_offsets_to_segmen
|
||||
struct symfile_segment_data *get_symfile_segment_data (bfd *abfd);
|
||||
void free_symfile_segment_data (struct symfile_segment_data *data);
|
||||
|
||||
+/* build-id support. */
|
||||
+struct build_id;
|
||||
|
@ -1,715 +0,0 @@
|
||||
http://sources.redhat.com/ml/gdb-patches/2007-08/msg00478.html
|
||||
v2
|
||||
[ Backported for GDB-6.6. ]
|
||||
|
||||
2007-08-26 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* Makefile.in (symfile.o): Update dependencies.
|
||||
* symfile.c (symbol_file_add_with_addrs_or_offsets): Initialize the
|
||||
DEBUGFILE variable. FIND_SEPARATE_DEBUG_FILE called only if !PSYMTABS.
|
||||
(struct build_id): New structure.
|
||||
(build_id_bfd_get, build_id_verify, build_id_to_debug_filename): New.
|
||||
(find_separate_debug_file): New variable BUILD_ID.
|
||||
Call BUILD_ID_BFD_GET with BUILD_ID_TO_DEBUG_FILENAME as the first try.
|
||||
|
||||
2007-08-26 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* lib/gdb.exp (build_id_debug_filename_get): New function.
|
||||
* gdb.base/sepdebug.exp: Reflect the changes in the heading comment.
|
||||
Remove the generate DEBUG file for the future testcase runs.
|
||||
New testcase for the NT_GNU_BUILD_ID retrieval.
|
||||
Move the final testing step to ...
|
||||
(test_different_dir): ... a new function.
|
||||
New parameter XFAIL to XFAIL all the tests performed.
|
||||
New parameter TEST_DIFFERENT_DIR parametrizing the directory.
|
||||
New parameter TYPE to PF_PREFIX all the tests performed.
|
||||
|
||||
2007-08-26 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* gdb.texinfo (Separate Debug Files): Included a BUILD ID description.
|
||||
Enlisted BUILD ID to the debug file searching example.
|
||||
Included a BUILD ID `.note.gnu.build-id' section description.
|
||||
Updated/added the debug files splitting instructions for OBJCOPY.
|
||||
|
||||
diff -u -rup gdb-6.6-orig/gdb/Makefile.in gdb-6.6/gdb/Makefile.in
|
||||
--- gdb-6.6-orig/gdb/Makefile.in 2007-08-28 14:32:18.000000000 +0200
|
||||
+++ gdb-6.6/gdb/Makefile.in 2007-08-28 14:33:56.000000000 +0200
|
||||
@@ -2785,7 +2785,7 @@ symfile.o: symfile.c $(defs_h) $(bfdlink
|
||||
$(gdb_stabs_h) $(gdb_obstack_h) $(completer_h) $(bcache_h) \
|
||||
$(hashtab_h) $(readline_h) $(gdb_assert_h) $(block_h) \
|
||||
$(gdb_string_h) $(gdb_stat_h) $(observer_h) $(exec_h) \
|
||||
- $(parser_defs_h)
|
||||
+ $(parser_defs_h) $(elf_bfd_h)
|
||||
symfile-mem.o: symfile-mem.c $(defs_h) $(symtab_h) $(gdbcore_h) \
|
||||
$(objfiles_h) $(exceptions_h) $(gdbcmd_h) $(target_h) $(value_h) \
|
||||
$(symfile_h) $(observer_h) $(auxv_h) $(elf_common_h)
|
||||
diff -u -rup gdb-6.6-orig/gdb/doc/gdb.texinfo gdb-6.6/gdb/doc/gdb.texinfo
|
||||
--- gdb-6.6-orig/gdb/doc/gdb.texinfo 2007-08-28 14:32:18.000000000 +0200
|
||||
+++ gdb-6.6/gdb/doc/gdb.texinfo 2007-08-28 14:33:03.000000000 +0200
|
||||
@@ -11857,18 +11857,32 @@ than the executable code itself --- some
|
||||
information for their executables in separate files, which users can
|
||||
install only when they need to debug a problem.
|
||||
|
||||
-If an executable's debugging information has been extracted to a
|
||||
-separate file, the executable should contain a @dfn{debug link} giving
|
||||
-the name of the debugging information file (with no directory
|
||||
-components), and a checksum of its contents. (The exact form of a
|
||||
-debug link is described below.) If the full name of the directory
|
||||
-containing the executable is @var{execdir}, and the executable has a
|
||||
-debug link that specifies the name @var{debugfile}, then @value{GDBN}
|
||||
-will automatically search for the debugging information file in three
|
||||
-places:
|
||||
+There are two identificators how the separate debug file may be found:
|
||||
|
||||
@itemize @bullet
|
||||
@item
|
||||
+@dfn{debug link} is present only in the executable if its debug information has
|
||||
+been split out. It is not present in the separate debug file. It provides the
|
||||
+separate debug file filename, usually as @file{executable.debug}.
|
||||
+@item
|
||||
+@dfn{build id} is present in all the files (if the operating system supports
|
||||
+it). The executable file and its separate debug file have the same unique
|
||||
+@dfn{build id} content.
|
||||
+@end itemize
|
||||
+
|
||||
+If the full name of the directory containing the executable is @var{execdir},
|
||||
+the executable has a debug link that specifies the name @var{debugfile},
|
||||
+@var{bu} is the first byte (two hexadecimal characters) of the build id
|
||||
+content, @var{ild-id} are the remaining bytes / hexadecimal characters and
|
||||
+@var{globaldebugdir} is the global debug file directory then @value{GDBN} will
|
||||
+automatically search for the debugging information file in four places:
|
||||
+
|
||||
+@itemize @bullet
|
||||
+@item
|
||||
+a specific file in the subdirectory of the global debug file directory
|
||||
+according to the @dfn{build id} content (if present), the file tried is
|
||||
+@file{@var{globaldebugdir}/.debug-id/@var{bu}/@var{ild-id}.debug}.
|
||||
+@item
|
||||
the directory containing the executable file (that is, it will look
|
||||
for a file named @file{@var{execdir}/@var{debugfile}},
|
||||
@item
|
||||
@@ -11883,15 +11897,17 @@ executable's full path, and the name fro
|
||||
@end itemize
|
||||
@noindent
|
||||
@value{GDBN} checks under each of these names for a debugging
|
||||
-information file whose checksum matches that given in the link, and
|
||||
-reads the debugging information from the first one it finds.
|
||||
-
|
||||
-So, for example, if you ask @value{GDBN} to debug @file{/usr/bin/ls},
|
||||
-which has a link containing the name @file{ls.debug}, and the global
|
||||
-debug directory is @file{/usr/lib/debug}, then @value{GDBN} will look
|
||||
-for debug information in @file{/usr/bin/ls.debug},
|
||||
-@file{/usr/bin/.debug/ls.debug}, and
|
||||
-@file{/usr/lib/debug/usr/bin/ls.debug}.
|
||||
+information file with build id content matching the build id content of the
|
||||
+executable file - or - whose checksum matches the one given in the link in the
|
||||
+debug link case. In each case @value{GDBN} reads the debugging information
|
||||
+from the first debug file it finds.
|
||||
+
|
||||
+So, for example, if you ask @value{GDBN} to debug @file{/usr/bin/ls}, which has
|
||||
+a @dfn{debug link} containing the name @file{ls.debug}, its @dfn{build id}
|
||||
+value in hexadecimal is @code{abcdef} and the global debug directory is
|
||||
+@file{/usr/lib/debug}, then @value{GDBN} will look for debug information in
|
||||
+@file{/usr/lib/debug/.build-id/ab/cdef.debug}, @file{/usr/bin/ls.debug},
|
||||
+@file{/usr/bin/.debug/ls.debug}, and @file{/usr/lib/debug/usr/bin/ls.debug}.
|
||||
|
||||
You can set the global debugging info directory's name, and view the
|
||||
name @value{GDBN} is currently using.
|
||||
@@ -11933,6 +11949,16 @@ Any executable file format can carry a d
|
||||
contain a section named @code{.gnu_debuglink} with the contents
|
||||
described above.
|
||||
|
||||
+@cindex @code{.note.gnu.build-id} sections
|
||||
+@cindex build id
|
||||
+Build id is a special section of the executable file named
|
||||
+@code{.note.gnu.build-id}. The section contains unique identification hash
|
||||
+derived from the built files - it remains the same across multiple builds of
|
||||
+the same build tree. The default algorithm SHA1 produces 160 bits (40
|
||||
+hexadecimal characters) of the content. The same section and value is present
|
||||
+in the original built binary with symbols, in its stripped variant and in the
|
||||
+separate debug information file.
|
||||
+
|
||||
The debugging information file itself should be an ordinary
|
||||
executable, containing a full set of linker symbols, sections, and
|
||||
debugging information. The sections of the debugging information file
|
||||
@@ -11940,18 +11966,21 @@ should have the same names, addresses an
|
||||
but they need not contain any data --- much like a @code{.bss} section
|
||||
in an ordinary executable.
|
||||
|
||||
-As of December 2002, there is no standard GNU utility to produce
|
||||
-separated executable / debugging information file pairs. Ulrich
|
||||
-Drepper's @file{elfutils} package, starting with version 0.53,
|
||||
-contains a version of the @code{strip} command such that the command
|
||||
-@kbd{strip foo -f foo.debug} removes the debugging information from
|
||||
-the executable file @file{foo}, places it in the file
|
||||
-@file{foo.debug}, and leaves behind a debug link in @file{foo}.
|
||||
-
|
||||
-Since there are many different ways to compute CRC's (different
|
||||
-polynomials, reversals, byte ordering, etc.), the simplest way to
|
||||
-describe the CRC used in @code{.gnu_debuglink} sections is to give the
|
||||
-complete code for a function that computes it:
|
||||
+@sc{gnu} binary utilities contain the @samp{objcopy} utility able to produce
|
||||
+the separated executable / debugging information file pairs by commands
|
||||
+@kbd{objcopy --only-keep-debug foo foo.debug; strip -g foo; objcopy
|
||||
+--add-gnu-debuglink="foo.debug" "foo"}. These commands remove the debugging
|
||||
+information from the executable file @file{foo}, place it in the file
|
||||
+@file{foo.debug}, and leave behind a debug link in @file{foo}. Ulrich
|
||||
+Drepper's @file{elfutils} package, starting with version 0.53, contains
|
||||
+a version of the @code{strip} command such that the command @kbd{strip foo -f
|
||||
+foo.debug} has the same functionality as the three commands above.
|
||||
+
|
||||
+Since there are many different ways to compute CRC's for the debug link
|
||||
+(different polynomials, reversals, byte ordering, etc.). This computation does
|
||||
+not apply to the build id section. The simplest way to describe the CRC used
|
||||
+in @code{.gnu_debuglink} sections is to give the complete code for a function
|
||||
+that computes it:
|
||||
|
||||
@kindex gnu_debuglink_crc32
|
||||
@smallexample
|
||||
diff -u -rup gdb-6.6-orig/gdb/symfile.c gdb-6.6/gdb/symfile.c
|
||||
--- gdb-6.6-orig/gdb/symfile.c 2007-08-28 14:32:17.000000000 +0200
|
||||
+++ gdb-6.6/gdb/symfile.c 2007-08-28 14:34:12.000000000 +0200
|
||||
@@ -53,6 +53,7 @@
|
||||
#include "observer.h"
|
||||
#include "exec.h"
|
||||
#include "parser-defs.h"
|
||||
+#include "elf-bfd.h"
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <fcntl.h>
|
||||
@@ -904,7 +905,7 @@ symbol_file_add_with_addrs_or_offsets (b
|
||||
{
|
||||
struct objfile *objfile;
|
||||
struct partial_symtab *psymtab;
|
||||
- char *debugfile;
|
||||
+ char *debugfile = NULL;
|
||||
struct section_addr_info *orig_addrs = NULL;
|
||||
struct cleanup *my_cleanups;
|
||||
const char *name = bfd_get_filename (abfd);
|
||||
@@ -968,7 +969,11 @@ symbol_file_add_with_addrs_or_offsets (b
|
||||
}
|
||||
}
|
||||
|
||||
- debugfile = find_separate_debug_file (objfile);
|
||||
+ /* If the file has its own symbol tables it has no separate debug info.
|
||||
+ `.dynsym'/`.symtab' go to MSYMBOLS, `.debug_info' goes to SYMTABS/PSYMTABS.
|
||||
+ `.gnu_debuglink' may no longer be present with `.note.gnu.build-id'. */
|
||||
+ if (objfile->psymtabs == NULL)
|
||||
+ debugfile = find_separate_debug_file (objfile);
|
||||
if (debugfile)
|
||||
{
|
||||
if (addrs != NULL)
|
||||
@@ -1115,6 +1120,99 @@ symbol_file_clear (int from_tty)
|
||||
printf_unfiltered (_("No symbol file now.\n"));
|
||||
}
|
||||
|
||||
+struct build_id
|
||||
+ {
|
||||
+ size_t size;
|
||||
+ gdb_byte data[1];
|
||||
+ };
|
||||
+
|
||||
+/* Locate NT_GNU_BUILD_ID from ABFD and return its content. */
|
||||
+
|
||||
+static struct build_id *
|
||||
+build_id_bfd_get (bfd *abfd)
|
||||
+{
|
||||
+ struct build_id *retval;
|
||||
+
|
||||
+ if (!bfd_check_format (abfd, bfd_object)
|
||||
+ || bfd_get_flavour (abfd) != bfd_target_elf_flavour
|
||||
+ || elf_tdata (abfd)->build_id == NULL)
|
||||
+ return NULL;
|
||||
+
|
||||
+ retval = xmalloc (sizeof *retval - 1 + elf_tdata (abfd)->build_id_size);
|
||||
+ retval->size = elf_tdata (abfd)->build_id_size;
|
||||
+ memcpy (retval->data, elf_tdata (abfd)->build_id, retval->size);
|
||||
+
|
||||
+ return retval;
|
||||
+}
|
||||
+
|
||||
+/* Return if FILENAME has NT_GNU_BUILD_ID matching the CHECK value. */
|
||||
+
|
||||
+static int
|
||||
+build_id_verify (const char *filename, struct build_id *check)
|
||||
+{
|
||||
+ bfd *abfd;
|
||||
+ struct build_id *found = NULL;
|
||||
+ int retval = 0;
|
||||
+
|
||||
+ /* We expect to be silent on the non-existing files. */
|
||||
+ abfd = bfd_openr (filename, gnutarget);
|
||||
+ if (abfd == NULL)
|
||||
+ return 0;
|
||||
+
|
||||
+ found = build_id_bfd_get (abfd);
|
||||
+
|
||||
+ if (found == NULL)
|
||||
+ warning (_("File \"%s\" has no build-id, file skipped"), filename);
|
||||
+ else if (found->size != check->size
|
||||
+ || memcmp (found->data, check->data, found->size) != 0)
|
||||
+ warning (_("File \"%s\" has a different build-id, file skipped"), filename);
|
||||
+ else
|
||||
+ retval = 1;
|
||||
+
|
||||
+ if (!bfd_close (abfd))
|
||||
+ warning (_("cannot close \"%s\": %s"), filename,
|
||||
+ bfd_errmsg (bfd_get_error ()));
|
||||
+ return retval;
|
||||
+}
|
||||
+
|
||||
+static char *debug_file_directory = NULL;
|
||||
+
|
||||
+static char *
|
||||
+build_id_to_debug_filename (struct build_id *build_id)
|
||||
+{
|
||||
+ char *link, *s, *retval = NULL;
|
||||
+ gdb_byte *data = build_id->data;
|
||||
+ size_t size = build_id->size;
|
||||
+
|
||||
+ /* DEBUG_FILE_DIRECTORY/.build-id/ab/cdef */
|
||||
+ link = xmalloc (strlen (debug_file_directory) + (sizeof "/.build-id/" - 1) + 1
|
||||
+ + 2 * size + (sizeof ".debug" - 1) + 1);
|
||||
+ s = link + sprintf (link, "%s/.build-id/", debug_file_directory);
|
||||
+ if (size > 0)
|
||||
+ {
|
||||
+ size--;
|
||||
+ s += sprintf (s, "%02x", (unsigned) *data++);
|
||||
+ }
|
||||
+ if (size > 0)
|
||||
+ *s++ = '/';
|
||||
+ while (size-- > 0)
|
||||
+ s += sprintf (s, "%02x", (unsigned) *data++);
|
||||
+ strcpy (s, ".debug");
|
||||
+
|
||||
+ /* lrealpath() is expensive even for the usually non-existent files. */
|
||||
+ if (access (link, F_OK) == 0)
|
||||
+ retval = lrealpath (link);
|
||||
+ xfree (link);
|
||||
+
|
||||
+ if (retval != NULL && !build_id_verify (retval, build_id))
|
||||
+ {
|
||||
+ xfree (retval);
|
||||
+ retval = NULL;
|
||||
+ }
|
||||
+
|
||||
+ return retval;
|
||||
+}
|
||||
+
|
||||
static char *
|
||||
get_debug_link_info (struct objfile *objfile, unsigned long *crc32_out)
|
||||
{
|
||||
@@ -1278,7 +1280,6 @@ separate_debug_file_exists (const char *
|
||||
return 1;
|
||||
}
|
||||
|
||||
-static char *debug_file_directory = NULL;
|
||||
static void
|
||||
show_debug_file_directory (struct ui_file *file, int from_tty,
|
||||
struct cmd_list_element *c, const char *value)
|
||||
@@ -1207,6 +1303,25 @@ find_separate_debug_file (struct objfile
|
||||
bfd_size_type debuglink_size;
|
||||
unsigned long crc32;
|
||||
int i;
|
||||
+ struct build_id *build_id;
|
||||
+
|
||||
+ build_id = build_id_bfd_get (objfile->obfd);
|
||||
+ if (build_id != NULL)
|
||||
+ {
|
||||
+ char *build_id_name;
|
||||
+
|
||||
+ build_id_name = build_id_to_debug_filename (build_id);
|
||||
+ free (build_id);
|
||||
+ /* Prevent looping on a stripped .debug file. */
|
||||
+ if (build_id_name != NULL && strcmp (build_id_name, objfile->name) == 0)
|
||||
+ {
|
||||
+ warning (_("\"%s\": separate debug info file has no debug info"),
|
||||
+ build_id_name);
|
||||
+ xfree (build_id_name);
|
||||
+ }
|
||||
+ else if (build_id_name != NULL)
|
||||
+ return build_id_name;
|
||||
+ }
|
||||
|
||||
basename = get_debug_link_info (objfile, &crc32);
|
||||
|
||||
diff -u -rup gdb-6.6-orig/gdb/testsuite/gdb.base/sepdebug.exp gdb-6.6/gdb/testsuite/gdb.base/sepdebug.exp
|
||||
--- gdb-6.6-orig/gdb/testsuite/gdb.base/sepdebug.exp 2007-08-28 14:32:17.000000000 +0200
|
||||
+++ gdb-6.6/gdb/testsuite/gdb.base/sepdebug.exp 2007-08-28 14:46:38.000000000 +0200
|
||||
@@ -21,11 +21,14 @@
|
||||
|
||||
# Based on break.exp, written by Rob Savoye. (rob@cygnus.com)
|
||||
# Modified to test gdb's handling of separate debug info files.
|
||||
+# Modified to test gdb's handling of a debug-id retrieval.
|
||||
|
||||
# This file has two parts. The first is testing that gdb behaves
|
||||
# normally after reading in an executable and its corresponding
|
||||
# separate debug file. The second moves the .debug file to a different
|
||||
# location and tests the "set debug-file-directory" command.
|
||||
+# The third is for testing build-id retrievel by finding the separate
|
||||
+# ".debug-id/ab/cdef.debug" file.
|
||||
|
||||
|
||||
if $tracelevel then {
|
||||
@@ -851,110 +854,6 @@ proc test_next_with_recursion {} {
|
||||
test_next_with_recursion
|
||||
|
||||
|
||||
-#********
|
||||
-
|
||||
-# now move the .debug file to a different location so that we can test
|
||||
-# the "set debug-file-directory" command.
|
||||
-
|
||||
-remote_exec build "mv ${objdir}/${subdir}/.debug/${testfile}.debug ${objdir}/${subdir}"
|
||||
-gdb_exit
|
||||
-gdb_start
|
||||
-gdb_reinitialize_dir $srcdir/$subdir
|
||||
-gdb_test "set debug-file-directory ${objdir}/${subdir}" ".*" "set separate debug location"
|
||||
-gdb_load ${binfile}
|
||||
-
|
||||
-if [target_info exists gdb_stub] {
|
||||
- gdb_step_for_stub;
|
||||
-}
|
||||
-
|
||||
-#
|
||||
-# test break at function
|
||||
-#
|
||||
-gdb_test "break main" \
|
||||
- "Breakpoint.*at.* file .*$srcfile, line.*" \
|
||||
- "breakpoint function, optimized file"
|
||||
-
|
||||
-#
|
||||
-# test break at function
|
||||
-#
|
||||
-gdb_test "break marker4" \
|
||||
- "Breakpoint.*at.* file .*$srcfile, line.*" \
|
||||
- "breakpoint small function, optimized file"
|
||||
-
|
||||
-#
|
||||
-# run until the breakpoint at main is hit. For non-stubs-using targets.
|
||||
-#
|
||||
-if ![target_info exists use_gdb_stub] {
|
||||
- if [istarget "*-*-vxworks*"] then {
|
||||
- send_gdb "run vxmain \"2\"\n"
|
||||
- set timeout 120
|
||||
- verbose "Timeout is now $timeout seconds" 2
|
||||
- } else {
|
||||
- send_gdb "run\n"
|
||||
- }
|
||||
- gdb_expect {
|
||||
- -re "The program .* has been started already.*y or n. $" {
|
||||
- send_gdb "y\n"
|
||||
- exp_continue
|
||||
- }
|
||||
- -re "Starting program.*Breakpoint \[0-9\]+,.*main .*argc.*argv.* at .*$srcfile:$bp_location6.*$bp_location6\[\t \]+if .argc.* \{.*$gdb_prompt $"\
|
||||
- { pass "run until function breakpoint, optimized file" }
|
||||
- -re "Starting program.*Breakpoint \[0-9\]+,.*main .*argc.*argv.* at .*$gdb_prompt $"\
|
||||
- { pass "run until function breakpoint, optimized file (code motion)" }
|
||||
- -re ".*$gdb_prompt $" { fail "run until function breakpoint, optimized file" }
|
||||
- timeout { fail "run until function breakpoint, optimized file (timeout)" }
|
||||
- }
|
||||
-} else {
|
||||
- if ![target_info exists gdb_stub] {
|
||||
- gdb_test continue ".*Continuing\\..*Breakpoint \[0-9\]+, main \\(argc=.*, argv=.*, envp=.*\\) at .*$srcfile:$bp_location6.*$bp_location6\[\t \]+if .argc.*\{.*" "stub continue, optimized file"
|
||||
- }
|
||||
-}
|
||||
-
|
||||
-#
|
||||
-# run until the breakpoint at a small function
|
||||
-#
|
||||
-
|
||||
-#
|
||||
-# Add a second pass pattern. The behavior differs here between stabs
|
||||
-# and dwarf for one-line functions. Stabs preserves two line symbols
|
||||
-# (one before the prologue and one after) with the same line number,
|
||||
-# but dwarf regards these as duplicates and discards one of them.
|
||||
-# Therefore the address after the prologue (where the breakpoint is)
|
||||
-# has no exactly matching line symbol, and GDB reports the breakpoint
|
||||
-# as if it were in the middle of a line rather than at the beginning.
|
||||
-
|
||||
-set bp_location13 [gdb_get_line_number "set breakpoint 13 here"]
|
||||
-set bp_location14 [gdb_get_line_number "set breakpoint 14 here"]
|
||||
-send_gdb "continue\n"
|
||||
-gdb_expect {
|
||||
- -re "Breakpoint $decimal, marker4 \\(d=177601976\\) at .*$srcfile:$bp_location13\[\r\n\]+$bp_location13\[\t \]+void marker4.*" {
|
||||
- pass "run until breakpoint set at small function, optimized file"
|
||||
- }
|
||||
- -re "Breakpoint $decimal, $hex in marker4 \\(d=177601976\\) at .*$srcfile:$bp_location13\[\r\n\]+$bp_location13\[\t \]+void marker4.*" {
|
||||
- pass "run until breakpoint set at small function, optimized file"
|
||||
- }
|
||||
- -re "Breakpoint $decimal, marker4 \\(d=177601976\\) at .*$srcfile:$bp_location14\[\r\n\]+$bp_location14\[\t \]+void marker4.*" {
|
||||
- # marker4() is defined at line 46 when compiled with -DPROTOTYPES
|
||||
- pass "run until breakpoint set at small function, optimized file (line bp_location14)"
|
||||
- }
|
||||
- -re ".*$gdb_prompt " {
|
||||
- fail "run until breakpoint set at small function, optimized file"
|
||||
- }
|
||||
- timeout {
|
||||
- fail "run until breakpoint set at small function, optimized file (timeout)"
|
||||
- }
|
||||
-}
|
||||
-
|
||||
-
|
||||
-# Reset the default arguments for VxWorks
|
||||
-if [istarget "*-*-vxworks*"] {
|
||||
- set timeout 10
|
||||
- verbose "Timeout is now $timeout seconds" 2
|
||||
- send_gdb "set args main\n"
|
||||
- gdb_expect -re ".*$gdb_prompt $" {}
|
||||
-}
|
||||
-
|
||||
-
|
||||
# Compile up a second, different, object file. Copy its debug info
|
||||
# over the top of the new debug info. Note that somewhere in the
|
||||
# above the "set debug-file-directory" variable is set to
|
||||
@@ -973,6 +872,7 @@ if [gdb_gnu_strip_debug $binfile] {
|
||||
unsupported "cannot produce separate debug info files"
|
||||
return -1
|
||||
}
|
||||
+remote_exec build "cp ${existing_binfile}.debug ${existing_binfile}.debug-backup"
|
||||
remote_exec build "cp $corrupt_debug_file ${existing_binfile}.debug"
|
||||
|
||||
gdb_exit
|
||||
@@ -990,3 +890,188 @@ gdb_test_multiple "file $existing_binfil
|
||||
exp_continue
|
||||
}
|
||||
}
|
||||
+
|
||||
+remote_exec build "cp ${existing_binfile}.debug-backup ${existing_binfile}.debug"
|
||||
+
|
||||
+#********
|
||||
+
|
||||
+proc test_different_dir {type test_different_dir xfail} {
|
||||
+ global srcdir subdir objdir binfile srcfile timeout gdb_prompt
|
||||
+ global pf_prefix
|
||||
+ global bp_location6 decimal hex
|
||||
+
|
||||
+ set pf_prefix "$type:"
|
||||
+
|
||||
+ gdb_exit
|
||||
+ gdb_start
|
||||
+ gdb_reinitialize_dir $srcdir/$subdir
|
||||
+ gdb_test "set debug-file-directory ${test_different_dir}" ".*" "set separate debug location"
|
||||
+ gdb_load ${binfile}
|
||||
+
|
||||
+ if [target_info exists gdb_stub] {
|
||||
+ gdb_step_for_stub;
|
||||
+ }
|
||||
+
|
||||
+ #
|
||||
+ # test break at function
|
||||
+ #
|
||||
+ if {$xfail} {
|
||||
+ setup_xfail "*-*-*"
|
||||
+ }
|
||||
+ gdb_test "break main" \
|
||||
+ "Breakpoint.*at.* file .*$srcfile, line.*" \
|
||||
+ "breakpoint function, optimized file"
|
||||
+
|
||||
+ #
|
||||
+ # test break at function
|
||||
+ #
|
||||
+ if {$xfail} {
|
||||
+ setup_xfail "*-*-*"
|
||||
+ }
|
||||
+ gdb_test "break marker4" \
|
||||
+ "Breakpoint.*at.* file .*$srcfile, line.*" \
|
||||
+ "breakpoint small function, optimized file"
|
||||
+
|
||||
+ #
|
||||
+ # run until the breakpoint at main is hit. For non-stubs-using targets.
|
||||
+ #
|
||||
+ gdb_run_cmd
|
||||
+ if {$xfail} {
|
||||
+ setup_xfail "*-*-*"
|
||||
+ }
|
||||
+ gdb_expect {
|
||||
+ -re "Breakpoint \[0-9\]+,.*main .*argc.*argv.* at .*$srcfile:$bp_location6.*$bp_location6\[\t \]+if .argc.* \{.*$gdb_prompt $" {
|
||||
+ pass "run until function breakpoint, optimized file"
|
||||
+ }
|
||||
+ -re "Breakpoint \[0-9\]+,.*main .*argc.*argv.* at .*$gdb_prompt $" {
|
||||
+ pass "run until function breakpoint, optimized file (code motion)"
|
||||
+ }
|
||||
+ -re "$gdb_prompt $" {
|
||||
+ fail "run until function breakpoint, optimized file"
|
||||
+ }
|
||||
+ timeout {
|
||||
+ fail "run until function breakpoint, optimized file (timeout)"
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if ![target_info exists use_gdb_stub] {
|
||||
+ if [istarget "*-*-vxworks*"] then {
|
||||
+ send_gdb "run vxmain \"2\"\n"
|
||||
+ set timeout 120
|
||||
+ verbose "Timeout is now $timeout seconds" 2
|
||||
+ } else {
|
||||
+ send_gdb "run\n"
|
||||
+ }
|
||||
+ if {$xfail} {
|
||||
+ setup_xfail "*-*-*"
|
||||
+ }
|
||||
+ gdb_expect {
|
||||
+ -re "The program .* has been started already.*y or n. $" {
|
||||
+ send_gdb "y\n"
|
||||
+ exp_continue
|
||||
+ }
|
||||
+ -re "Starting program.*Breakpoint \[0-9\]+,.*main .*argc.*argv.* at .*$srcfile:$bp_location6.*$bp_location6\[\t \]+if .argc.* \{.*$gdb_prompt $"\
|
||||
+ { pass "run until function breakpoint, optimized file" }
|
||||
+ -re "Starting program.*Breakpoint \[0-9\]+,.*main .*argc.*argv.* at .*$gdb_prompt $"\
|
||||
+ { pass "run until function breakpoint, optimized file (code motion)" }
|
||||
+ -re ".*$gdb_prompt $" { fail "run until function breakpoint, optimized file" }
|
||||
+ timeout { fail "run until function breakpoint, optimized file (timeout)" }
|
||||
+ }
|
||||
+ } else {
|
||||
+ if ![target_info exists gdb_stub] {
|
||||
+ gdb_test continue ".*Continuing\\..*Breakpoint \[0-9\]+, main \\(argc=.*, argv=.*, envp=.*\\) at .*$srcfile:$bp_location6.*$bp_location6\[\t \]+if .argc.*\{.*" "stub continue, optimized file"
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+
|
||||
+ #
|
||||
+ # run until the breakpoint at a small function
|
||||
+ #
|
||||
+
|
||||
+ #
|
||||
+ # Add a second pass pattern. The behavior differs here between stabs
|
||||
+ # and dwarf for one-line functions. Stabs preserves two line symbols
|
||||
+ # (one before the prologue and one after) with the same line number,
|
||||
+ # but dwarf regards these as duplicates and discards one of them.
|
||||
+ # Therefore the address after the prologue (where the breakpoint is)
|
||||
+ # has no exactly matching line symbol, and GDB reports the breakpoint
|
||||
+ # as if it were in the middle of a line rather than at the beginning.
|
||||
+
|
||||
+ set bp_location13 [gdb_get_line_number "set breakpoint 13 here"]
|
||||
+ set bp_location14 [gdb_get_line_number "set breakpoint 14 here"]
|
||||
+ send_gdb "continue\n"
|
||||
+ if {$xfail} {
|
||||
+ setup_xfail "*-*-*"
|
||||
+ }
|
||||
+ gdb_expect {
|
||||
+ -re "Breakpoint $decimal, marker4 \\(d=177601976\\) at .*$srcfile:$bp_location13\[\r\n\]+$bp_location13\[\t \]+void marker4.*" {
|
||||
+ pass "run until breakpoint set at small function, optimized file"
|
||||
+ }
|
||||
+ -re "Breakpoint $decimal, $hex in marker4 \\(d=177601976\\) at .*$srcfile:$bp_location13\[\r\n\]+$bp_location13\[\t \]+void marker4.*" {
|
||||
+ pass "run until breakpoint set at small function, optimized file"
|
||||
+ }
|
||||
+ -re "Breakpoint $decimal, marker4 \\(d=177601976\\) at .*$srcfile:$bp_location14\[\r\n\]+$bp_location14\[\t \]+void marker4.*" {
|
||||
+ # marker4() is defined at line 46 when compiled with -DPROTOTYPES
|
||||
+ pass "run until breakpoint set at small function, optimized file (line bp_location14)"
|
||||
+ }
|
||||
+ -re ".*$gdb_prompt " {
|
||||
+ fail "run until breakpoint set at small function, optimized file"
|
||||
+ }
|
||||
+ timeout {
|
||||
+ fail "run until breakpoint set at small function, optimized file (timeout)"
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ # Reset the default arguments for VxWorks
|
||||
+ if [istarget "*-*-vxworks*"] {
|
||||
+ set timeout 10
|
||||
+ verbose "Timeout is now $timeout seconds" 2
|
||||
+ send_gdb "set args main\n"
|
||||
+ gdb_expect -re ".*$gdb_prompt $" {}
|
||||
+ }
|
||||
+
|
||||
+ unset pf_prefix
|
||||
+# proc test_different_dir
|
||||
+}
|
||||
+
|
||||
+
|
||||
+# now move the .debug file to a different location so that we can test
|
||||
+# the "set debug-file-directory" command.
|
||||
+
|
||||
+remote_exec build "mv ${objdir}/${subdir}/.debug/${testfile}.debug ${objdir}/${subdir}"
|
||||
+set debugfile "${objdir}/${subdir}/${testfile}.debug"
|
||||
+
|
||||
+test_different_dir debuglink "${objdir}/${subdir}" 0
|
||||
+
|
||||
+
|
||||
+# NT_GNU_BUILD_ID / .note.gnu.build-id test:
|
||||
+
|
||||
+set build_id_debug_filename [build_id_debug_filename_get $binfile]
|
||||
+if {$build_id_debug_filename eq ""} {
|
||||
+ unsupported "build-id is not supported by the compiler"
|
||||
+
|
||||
+ # Spare debug files may confuse testsuite runs in the future.
|
||||
+ remote_exec build "rm -f $debugfile"
|
||||
+} else {
|
||||
+ set build_id_debugself_filename [build_id_debug_filename_get $debugfile]
|
||||
+ set test "build-id support by binutils"
|
||||
+ set xfail 0
|
||||
+ if {$build_id_debugself_filename eq ""} {
|
||||
+ unsupported $test
|
||||
+ set xfail 1
|
||||
+ } elseif {$build_id_debugself_filename ne $build_id_debug_filename} {
|
||||
+ fail $test
|
||||
+ } else {
|
||||
+ pass $test
|
||||
+ }
|
||||
+
|
||||
+ file mkdir [file dirname ${objdir}/${subdir}/${build_id_debug_filename}]
|
||||
+ remote_exec build "mv $debugfile ${objdir}/${subdir}/${build_id_debug_filename}"
|
||||
+
|
||||
+ test_different_dir build-id "${objdir}/${subdir}" $xfail
|
||||
+
|
||||
+ # Spare debug files may confuse testsuite runs in the future.
|
||||
+ remote_exec build "rm -f ${objdir}/${subdir}/${build_id_debug_filename}"
|
||||
+}
|
||||
diff -u -rup gdb-6.6-orig/gdb/testsuite/lib/gdb.exp gdb-6.6/gdb/testsuite/lib/gdb.exp
|
||||
--- gdb-6.6-orig/gdb/testsuite/lib/gdb.exp 2007-08-28 14:32:18.000000000 +0200
|
||||
+++ gdb-6.6/gdb/testsuite/lib/gdb.exp 2007-08-28 14:33:03.000000000 +0200
|
||||
@@ -2323,6 +2323,27 @@ proc separate_debug_filename { exec } {
|
||||
return $debug_file
|
||||
}
|
||||
|
||||
+# Return the build-id hex string (usually 160 bits as 40 hex characters)
|
||||
+# converted to the form: .build-id/ab/cdef1234...89.debug
|
||||
+# Return "" if no build-id found.
|
||||
+proc build_id_debug_filename_get { exec } {
|
||||
+ set tmp "${exec}-tmp"
|
||||
+ exec objcopy -j .note.gnu.build-id -O binary $exec $tmp
|
||||
+ set fi [open $tmp]
|
||||
+ # Skip the NOTE header.
|
||||
+ read $fi 16
|
||||
+ set data [read $fi]
|
||||
+ close $fi
|
||||
+ file delete $tmp
|
||||
+ if {$data eq ""} {
|
||||
+ return ""
|
||||
+ }
|
||||
+ # Convert it to hex.
|
||||
+ binary scan $data H* data
|
||||
+ set data [regsub {^..} $data {\0/}]
|
||||
+ return ".build-id/${data}.debug";
|
||||
+}
|
||||
+
|
||||
# Create stripped files for DEST, replacing it. If ARGS is passed, it is a
|
||||
# list of optional flags. The only currently supported flag is no-main,
|
||||
# which removes the symbol entry for main from the separate debug file.
|
||||
--- gdb-6.6/gdb/testsuite/gdb.base/sepdebug.exp 2007-08-28 15:27:36.000000000 +0200
|
||||
+++ gdb-6.6/gdb/testsuite/gdb.base/sepdebug.exp 2007-08-28 15:25:23.000000000 +0200
|
||||
@@ -860,14 +860,14 @@ test_next_with_recursion
|
||||
# ${objdir}/${subdir} so need to move things there.
|
||||
|
||||
set existing_binfile $binfile
|
||||
-set testfile "sepdebug2"
|
||||
-set srcfile ${testfile}.c
|
||||
-set binfile ${objdir}/${subdir}/${testfile}
|
||||
-set corrupt_debug_file [separate_debug_filename $binfile]
|
||||
-if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-w}] != "" } {
|
||||
+set testfile2 "sepdebug2"
|
||||
+set srcfile2 ${testfile2}.c
|
||||
+set binfile2 ${objdir}/${subdir}/${testfile2}
|
||||
+set corrupt_debug_file [separate_debug_filename $binfile2]
|
||||
+if { [gdb_compile "${srcdir}/${subdir}/${srcfile2}" "${binfile2}" executable {debug additional_flags=-w}] != "" } {
|
||||
return -1
|
||||
}
|
||||
-if [gdb_gnu_strip_debug $binfile] {
|
||||
+if [gdb_gnu_strip_debug $binfile2] {
|
||||
# check that you have a recent version of strip and objcopy installed
|
||||
unsupported "cannot produce separate debug info files"
|
||||
return -1
|
@ -1,9 +1,14 @@
|
||||
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=225783
|
||||
|
||||
2007-10-16 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
--- gdb-6.6/gdb/testsuite/gdb.base/prelink.exp.orig 2006-03-08 19:22:09.000000000 -0500
|
||||
+++ gdb-6.6/gdb/testsuite/gdb.base/prelink.exp 2007-04-08 13:22:45.000000000 -0400
|
||||
@@ -48,7 +48,7 @@
|
||||
Port to GDB-6.7.
|
||||
|
||||
Index: gdb-6.7/gdb/testsuite/gdb.base/prelink.exp
|
||||
===================================================================
|
||||
--- gdb-6.7.orig/gdb/testsuite/gdb.base/prelink.exp 2007-08-23 20:14:17.000000000 +0200
|
||||
+++ gdb-6.7/gdb/testsuite/gdb.base/prelink.exp 2007-10-16 16:16:51.000000000 +0200
|
||||
@@ -47,7 +47,7 @@ if { [gdb_compile "${srcdir}/${subdir}/$
|
||||
return -1
|
||||
}
|
||||
|
||||
@ -12,13 +17,13 @@ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=225783
|
||||
# Maybe we don't have prelink.
|
||||
return -1
|
||||
}
|
||||
@@ -89,11 +89,11 @@
|
||||
@@ -88,11 +88,11 @@ if { $found == 0 } {
|
||||
return 0
|
||||
}
|
||||
|
||||
-if {[catch "system \"prelink -uN ${libfile}\""] != 0} {
|
||||
+if {[catch "system \"/usr/sbin/prelink -uN ${libfile}\""] != 0} {
|
||||
untested "${libfile} was not prelinked, maybe system libraries are not prelinked?"
|
||||
untested "${testfile}.so was not prelinked, maybe system libraries are not prelinked?"
|
||||
return 0
|
||||
}
|
||||
-catch "system \"prelink -qNR ${libfile}\""
|
||||
|
@ -1,201 +0,0 @@
|
||||
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=232014
|
||||
|
||||
|
||||
Based on `gdb-6.5-gcore-i386-on-amd64.patch'.
|
||||
|
||||
|
||||
diff -u -rup gdb-6.6-orig/gdb/Makefile.in gdb-6.6/gdb/Makefile.in
|
||||
--- gdb-6.6-orig/gdb/Makefile.in 2007-03-12 17:59:56.000000000 -0400
|
||||
+++ gdb-6.6/gdb/Makefile.in 2007-04-23 13:05:05.000000000 -0400
|
||||
@@ -2481,7 +2481,7 @@ ppcbug-rom.o: ppcbug-rom.c $(defs_h) $(g
|
||||
ppc-linux-nat.o: ppc-linux-nat.c $(defs_h) $(gdb_string_h) $(frame_h) \
|
||||
$(inferior_h) $(gdbcore_h) $(regcache_h) $(gdb_assert_h) \
|
||||
$(gdb_wait_h) $(gregset_h) $(ppc_tdep_h) $(target_h) \
|
||||
- $(linux_nat_h)
|
||||
+ $(linux_nat_h) $(elf_bfd_h) $(gdb_procfs32_h)
|
||||
ppc-linux-tdep.o: ppc-linux-tdep.c $(defs_h) $(frame_h) $(inferior_h) \
|
||||
$(symtab_h) $(target_h) $(gdbcore_h) $(gdbcmd_h) $(symfile_h) \
|
||||
$(objfiles_h) $(regcache_h) $(value_h) $(osabi_h) $(regset_h) \
|
||||
diff -u -rup gdb-6.6-orig/gdb/gdb_procfs32.h gdb-6.6/gdb/gdb_procfs32.h
|
||||
--- gdb-6.6-orig/gdb/gdb_procfs32.h 2007-03-12 17:59:55.000000000 -0400
|
||||
+++ gdb-6.6/gdb/gdb_procfs32.h 2007-04-23 13:07:03.000000000 -0400
|
||||
@@ -23,6 +23,8 @@
|
||||
#ifndef _SYS_PROCFS32_H
|
||||
#define _SYS_PROCFS32_H 1
|
||||
|
||||
+#if defined(__x86_64__) || defined(__ppc64__) || defined(__powerpc64__)
|
||||
+
|
||||
/* This is somewhat modelled after the file of the same name on SVR4
|
||||
systems. It provides a definition of the core file format for ELF
|
||||
used on Linux. It doesn't have anything to do with the /proc file
|
||||
@@ -49,17 +51,27 @@ typedef unsigned int elf_greg32_t;
|
||||
user_regs_struct' directly in the typedef, but tradition says that
|
||||
the register set is an array, which does have some peculiar
|
||||
semantics, so leave it that way. */
|
||||
+#if defined(__x86_64__)
|
||||
#define ELF_NGREG32 (sizeof (struct user_regs32_struct) / sizeof(elf_greg32_t))
|
||||
+#elif defined(__ppc64__) || defined(__powerpc64__)
|
||||
+#define ELF_NGREG32 48
|
||||
+#else
|
||||
+#error "Unsupported platform"
|
||||
+#endif
|
||||
typedef elf_greg32_t elf_gregset32_t[ELF_NGREG32];
|
||||
|
||||
/* Register set for the floating-point registers. */
|
||||
-typedef struct user_fpregs32_struct elf_fpregset32_t;
|
||||
-
|
||||
/* Register set for the extended floating-point registers. Includes
|
||||
the Pentium III SSE registers in addition to the classic
|
||||
floating-point stuff. */
|
||||
+#if defined(__x86_64__)
|
||||
+typedef struct user_fpregs32_struct elf_fpregset32_t;
|
||||
typedef struct user_fpxregs32_struct elf_fpxregset32_t;
|
||||
-
|
||||
+#elif defined(__ppc64__) || defined(__powerpc64__)
|
||||
+typedef elf_fpregset_t elf_fpregset32_t;
|
||||
+#else
|
||||
+#error "Unsupported platform"
|
||||
+#endif
|
||||
|
||||
/* Definitions to generate Intel SVR4-like core files. These mostly
|
||||
have the same names as the SVR4 types with "elf_" tacked on the
|
||||
@@ -100,8 +112,15 @@
|
||||
char pr_zomb; /* Zombie. */
|
||||
char pr_nice; /* Nice val. */
|
||||
unsigned int pr_flag; /* Flags. */
|
||||
+#if defined(__x86_64__)
|
||||
unsigned short int pr_uid;
|
||||
unsigned short int pr_gid;
|
||||
+#elif defined(__ppc64__) || defined(__powerpc64__)
|
||||
+ unsigned int pr_uid;
|
||||
+ unsigned int pr_gid;
|
||||
+#else
|
||||
+#error "Unsupported platform"
|
||||
+#endif
|
||||
int pr_pid, pr_ppid, pr_pgrp, pr_sid;
|
||||
/* Lots missing */
|
||||
char pr_fname[16]; /* Filename of executable. */
|
||||
@@ -123,6 +135,8 @@ typedef struct elf_prpsinfo32 prpsinfo32
|
||||
|
||||
__END_DECLS
|
||||
|
||||
+#endif /* defined(__x86_64__) || defined(__ppc64__) || defined(__powerpc64__) */
|
||||
+
|
||||
#endif /* _SYS_PROCFS32_H */
|
||||
|
||||
#endif /* HAVE_SYS_PROCFS32_H */
|
||||
diff -u -rup gdb-6.6-orig/gdb/gdb_user32.h gdb-6.6/gdb/gdb_user32.h
|
||||
--- gdb-6.6-orig/gdb/gdb_user32.h 2007-03-12 17:59:55.000000000 -0400
|
||||
+++ gdb-6.6/gdb/gdb_user32.h 2007-04-23 13:05:05.000000000 -0400
|
||||
@@ -32,6 +32,8 @@ typedef unsigned int gdb_uint32_t;
|
||||
#ifndef _SYS_USER32_H
|
||||
#define _SYS_USER32_H 1
|
||||
|
||||
+#ifdef __x86_64__
|
||||
+
|
||||
/* These are the 32-bit x86 structures. */
|
||||
|
||||
struct user_fpregs32_struct
|
||||
@@ -103,6 +105,8 @@ struct user32
|
||||
int u_debugreg [8];
|
||||
};
|
||||
|
||||
+#endif /* __x86_64__ */
|
||||
+
|
||||
#endif /* _SYS_USER32_H */
|
||||
|
||||
#endif /* HAVE_SYS_USER32_H */
|
||||
diff -u -rup gdb-6.6-orig/gdb/ppc-linux-nat.c gdb-6.6/gdb/ppc-linux-nat.c
|
||||
--- gdb-6.6-orig/gdb/ppc-linux-nat.c 2006-05-05 16:45:03.000000000 -0400
|
||||
+++ gdb-6.6/gdb/ppc-linux-nat.c 2007-04-23 13:16:09.000000000 -0400
|
||||
@@ -29,6 +29,8 @@
|
||||
#include "gdb_assert.h"
|
||||
#include "target.h"
|
||||
#include "linux-nat.h"
|
||||
+#include "bfd/elf-bfd.h"
|
||||
+#include "gdb_procfs32.h"
|
||||
|
||||
#include <stdint.h>
|
||||
#include <sys/types.h>
|
||||
@@ -1002,6 +1004,68 @@ fill_fpregset (gdb_fpregset_t *fpregsetp
|
||||
}
|
||||
}
|
||||
|
||||
+#if defined(__ppc64__) || defined(__powerpc64__)
|
||||
+
|
||||
+/* This functions make ELF32 32-bit elfcore note sections
|
||||
+ on ppc64 environment. */
|
||||
+
|
||||
+static char *
|
||||
+ppc_linux_elfcore_write_prpsinfo (bfd *abfd, char *buf, int *bufsiz,
|
||||
+ const char *fname, const char *psargs)
|
||||
+{
|
||||
+ if (gdbarch_ptr_bit(current_gdbarch) == 32)
|
||||
+ {
|
||||
+ int note_type;
|
||||
+ char *note_name = "CORE";
|
||||
+ struct elf_prpsinfo32 data;
|
||||
+ note_type = NT_PRPSINFO;
|
||||
+
|
||||
+ memset (&data, 0, sizeof (data));
|
||||
+ strncpy (data.pr_fname, fname, sizeof (data.pr_fname));
|
||||
+ strncpy (data.pr_psargs, psargs, sizeof (data.pr_psargs));
|
||||
+ return elfcore_write_note (abfd, buf, bufsiz,
|
||||
+ note_name, note_type, &data, sizeof (data));
|
||||
+ }
|
||||
+ else
|
||||
+ return elfcore_write_prpsinfo (abfd, buf, bufsiz, fname, psargs);
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+ppc_linux_set_registers (const gdb_byte *gregs, gdb_byte *buf)
|
||||
+{
|
||||
+ int i;
|
||||
+ const int elf_ngreg = 48;
|
||||
+
|
||||
+ /* Copy the ppc registers in the ppc64 layout into ppc layout. */
|
||||
+ for (i = 0; i < elf_ngreg; i++)
|
||||
+ memcpy (buf + 4 * i, gregs + 8 * i + 4, 4);
|
||||
+ /* CR and XER are an exception as they are shifted left there,
|
||||
+ see fill_gregset(). */
|
||||
+ memcpy (buf + 4 * PT_CCR, gregs + 8 * PT_CCR + 0, 4);
|
||||
+ memcpy (buf + 4 * PT_XER, gregs + 8 * PT_XER + 0, 4);
|
||||
+}
|
||||
+
|
||||
+static char *
|
||||
+ppc_linux_elfcore_write_prstatus (bfd *abfd, char *buf, int *bufsiz,
|
||||
+ long pid, int cursig, const void *gregs)
|
||||
+{
|
||||
+ if (gdbarch_ptr_bit(current_gdbarch) == 32)
|
||||
+ {
|
||||
+ char *note_name = "CORE";
|
||||
+ struct elf_prstatus32 prstat;
|
||||
+ memset (&prstat, 0, sizeof (prstat));
|
||||
+ prstat.pr_pid = pid;
|
||||
+ prstat.pr_cursig = cursig;
|
||||
+ ppc_linux_set_registers (gregs, (gdb_byte *) &prstat.pr_reg);
|
||||
+ return elfcore_write_note (abfd, buf, bufsiz, note_name,
|
||||
+ NT_PRSTATUS, &prstat, sizeof (prstat));
|
||||
+ }
|
||||
+ else
|
||||
+ return elfcore_write_prstatus (abfd, buf, bufsiz, pid, cursig, gregs);
|
||||
+}
|
||||
+
|
||||
+#endif /* defined(__ppc64__) || defined(__powerpc64__) */
|
||||
+
|
||||
void _initialize_ppc_linux_nat (void);
|
||||
|
||||
void
|
||||
@@ -1024,6 +1084,12 @@ _initialize_ppc_linux_nat (void)
|
||||
t->to_stopped_by_watchpoint = ppc_linux_stopped_by_watchpoint;
|
||||
t->to_stopped_data_address = ppc_linux_stopped_data_address;
|
||||
|
||||
+#if defined(__ppc64__) || defined(__powerpc64__)
|
||||
+ /* This functions make elfcore note sections. */
|
||||
+ linux_elfcore_write_prpsinfo = ppc_linux_elfcore_write_prpsinfo;
|
||||
+ linux_elfcore_write_prstatus = ppc_linux_elfcore_write_prstatus;
|
||||
+#endif /* defined(__ppc64__) || defined(__powerpc64__) */
|
||||
+
|
||||
/* Register the target. */
|
||||
linux_nat_add_target (t);
|
||||
}
|
@ -1,325 +0,0 @@
|
||||
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=233716
|
||||
http://sources.redhat.com/ml/gdb-patches/2007-03/msg00129.html
|
||||
|
||||
|
||||
2007-03-12 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* gdbtypes.h (TYPE_FLAG_STUB_SUPPORTED, TYPE_STUB_SUPPORTED): New
|
||||
macros.
|
||||
(TYPE_IS_OPAQUE): Empty vs. opaque structures are now
|
||||
distinct on the TYPE_STUB_SUPPORTED debug targets.
|
||||
* dwarf2read.c (read_structure_type): Set TYPE_FLAG_STUB_SUPPORTED.
|
||||
* dwarfread.c (struct_type): New comment on TYPE_FLAG_STUB_SUPPORTED.
|
||||
|
||||
2007-03-12 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* gdb.base/type-opaque-lib.c, gdb.base/type-opaque-main.c,
|
||||
gdb.base/type-opaque.exp: New files.
|
||||
|
||||
|
||||
--- ./gdb/dwarf2read.c 12 Feb 2007 15:19:31 -0000 1.215
|
||||
+++ ./gdb/dwarf2read.c 12 Mar 2007 21:33:06 -0000
|
||||
@@ -3879,6 +3879,7 @@ read_structure_type (struct die_info *di
|
||||
TYPE_LENGTH (type) = 0;
|
||||
}
|
||||
|
||||
+ TYPE_FLAGS (type) |= TYPE_FLAG_STUB_SUPPORTED;
|
||||
if (die_is_declaration (die, cu))
|
||||
TYPE_FLAGS (type) |= TYPE_FLAG_STUB;
|
||||
|
||||
--- ./gdb/dwarfread.c 12 Feb 2007 15:19:31 -0000 1.47
|
||||
+++ ./gdb/dwarfread.c 12 Mar 2007 21:33:07 -0000
|
||||
@@ -1083,7 +1083,10 @@ struct_type (struct dieinfo *dip, char *
|
||||
not even have any fields, if this DIE was generated due to a reference
|
||||
to an anonymous structure or union. In this case, TYPE_FLAG_STUB is
|
||||
set, which clues gdb in to the fact that it needs to search elsewhere
|
||||
- for the full structure definition. */
|
||||
+ for the full structure definition.
|
||||
+ As such opaque reference is not distinguishable from an empty STRUCT
|
||||
+ definition as DWARF1 is missing DW_AT_declaration we cannot set
|
||||
+ TYPE_FLAG_STUB_SUPPORTED here. */
|
||||
if (nfields == 0)
|
||||
{
|
||||
TYPE_FLAGS (type) |= TYPE_FLAG_STUB;
|
||||
--- ./gdb/gdbtypes.h 29 Jan 2007 17:31:06 -0000 1.68
|
||||
+++ ./gdb/gdbtypes.h 12 Mar 2007 21:33:08 -0000
|
||||
@@ -319,6 +319,14 @@ enum type_code
|
||||
|
||||
#define TYPE_FLAG_FIXED_INSTANCE (1 << 15)
|
||||
|
||||
+/* This debug target supports TYPE_STUB(t). In the unsupported case we have to
|
||||
+ rely on NFIELDS to be zero etc., see TYPE_IS_OPAQUE ().
|
||||
+ TYPE_STUB(t) with !TYPE_STUB_SUPPORTED(t) may exist if we only guessed
|
||||
+ the TYPE_STUB(t) value (see dwarfread.c). */
|
||||
+
|
||||
+#define TYPE_FLAG_STUB_SUPPORTED (1 << 16)
|
||||
+#define TYPE_STUB_SUPPORTED(t) (TYPE_FLAGS (t) & TYPE_FLAG_STUB_SUPPORTED)
|
||||
+
|
||||
/* Array bound type. */
|
||||
enum array_bound_type
|
||||
{
|
||||
@@ -969,7 +977,8 @@ extern void allocate_cplus_struct_type (
|
||||
#define TYPE_IS_OPAQUE(thistype) (((TYPE_CODE (thistype) == TYPE_CODE_STRUCT) || \
|
||||
(TYPE_CODE (thistype) == TYPE_CODE_UNION)) && \
|
||||
(TYPE_NFIELDS (thistype) == 0) && \
|
||||
- (TYPE_CPLUS_SPECIFIC (thistype) && (TYPE_NFN_FIELDS (thistype) == 0)))
|
||||
+ (TYPE_CPLUS_SPECIFIC (thistype) && (TYPE_NFN_FIELDS (thistype) == 0)) && \
|
||||
+ (TYPE_STUB (thistype) || !TYPE_STUB_SUPPORTED (thistype)))
|
||||
|
||||
struct builtin_type
|
||||
{
|
||||
--- /dev/null 1 Jan 1970 00:00:00 -0000
|
||||
+++ ./gdb/testsuite/gdb.base/type-opaque-lib.c 12 Mar 2007 21:33:09 -0000
|
||||
@@ -0,0 +1,56 @@
|
||||
+/* Test resolving of an opaque type from the loaded shared library.
|
||||
+
|
||||
+ Copyright 2007, Free Software Foundation, Inc.
|
||||
+
|
||||
+ This file is part of GDB.
|
||||
+
|
||||
+ This program is free software; you can redistribute it and/or modify
|
||||
+ it under the terms of the GNU General Public License as published by
|
||||
+ the Free Software Foundation; either version 2 of the License, or
|
||||
+ (at your option) any later version.
|
||||
+
|
||||
+ This program is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+ GNU General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU General Public License
|
||||
+ along with this program; if not, write to the Free Software
|
||||
+ Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
+ Boston, MA 02111-1307, USA. */
|
||||
+
|
||||
+struct struct_libtype_opaque
|
||||
+{
|
||||
+ int libfield_opaque;
|
||||
+};
|
||||
+struct struct_libtype_opaque struct_libtype_opaque_use;
|
||||
+
|
||||
+struct struct_libtype_empty
|
||||
+{
|
||||
+ int libfield_empty;
|
||||
+};
|
||||
+struct struct_libtype_empty struct_libtype_empty_use;
|
||||
+
|
||||
+struct struct_libtype_filled
|
||||
+{
|
||||
+ int libfield_filled;
|
||||
+};
|
||||
+struct struct_libtype_filled struct_libtype_filled_use;
|
||||
+
|
||||
+union union_libtype_opaque
|
||||
+{
|
||||
+ int libfield_opaque;
|
||||
+};
|
||||
+union union_libtype_opaque union_libtype_opaque_use;
|
||||
+
|
||||
+union union_libtype_empty
|
||||
+{
|
||||
+ int libfield_empty;
|
||||
+};
|
||||
+union union_libtype_empty union_libtype_empty_use;
|
||||
+
|
||||
+union union_libtype_filled
|
||||
+{
|
||||
+ int libfield_filled;
|
||||
+};
|
||||
+union union_libtype_filled union_libtype_filled_use;
|
||||
--- /dev/null 1 Jan 1970 00:00:00 -0000
|
||||
+++ ./gdb/testsuite/gdb.base/type-opaque-main.c 12 Mar 2007 21:33:09 -0000
|
||||
@@ -0,0 +1,56 @@
|
||||
+/* Test resolving of an opaque type from the loaded shared library.
|
||||
+
|
||||
+ Copyright 2007, Free Software Foundation, Inc.
|
||||
+
|
||||
+ This file is part of GDB.
|
||||
+
|
||||
+ This program is free software; you can redistribute it and/or modify
|
||||
+ it under the terms of the GNU General Public License as published by
|
||||
+ the Free Software Foundation; either version 2 of the License, or
|
||||
+ (at your option) any later version.
|
||||
+
|
||||
+ This program is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+ GNU General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU General Public License
|
||||
+ along with this program; if not, write to the Free Software
|
||||
+ Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
+ Boston, MA 02111-1307, USA. */
|
||||
+
|
||||
+struct struct_libtype_opaque;
|
||||
+
|
||||
+struct struct_libtype_empty
|
||||
+ {
|
||||
+ };
|
||||
+
|
||||
+struct struct_libtype_filled
|
||||
+ {
|
||||
+ long mainfield_filled;
|
||||
+ };
|
||||
+
|
||||
+union union_libtype_opaque;
|
||||
+
|
||||
+union union_libtype_empty
|
||||
+ {
|
||||
+ };
|
||||
+
|
||||
+union union_libtype_filled
|
||||
+ {
|
||||
+ long mainfield_filled;
|
||||
+ };
|
||||
+
|
||||
+int main (void)
|
||||
+{
|
||||
+ volatile struct struct_libtype_opaque *pointer_struct_opaque = (void *) 0;
|
||||
+ volatile struct struct_libtype_empty *pointer_struct_empty = (void *) 0;
|
||||
+ volatile struct struct_libtype_filled *pointer_struct_filled = (void *) 0;
|
||||
+ volatile union union_libtype_opaque *pointer_union_opaque = (void *) 0;
|
||||
+ volatile union union_libtype_empty *pointer_union_empty = (void *) 0;
|
||||
+ volatile union union_libtype_filled *pointer_union_filled = (void *) 0;
|
||||
+
|
||||
+ return (long) pointer_struct_opaque + (long) pointer_struct_empty
|
||||
+ + (long) pointer_struct_filled + (long) pointer_union_opaque
|
||||
+ + (long) pointer_union_empty + (long) pointer_union_filled;
|
||||
+}
|
||||
--- /dev/null 1 Jan 1970 00:00:00 -0000
|
||||
+++ ./gdb/testsuite/gdb.base/type-opaque.exp 12 Mar 2007 21:33:09 -0000
|
||||
@@ -0,0 +1,134 @@
|
||||
+# Copyright 2004, 2007 Free Software Foundation, Inc.
|
||||
+
|
||||
+# This program is free software; you can redistribute it and/or modify
|
||||
+# it under the terms of the GNU General Public License as published by
|
||||
+# the Free Software Foundation; either version 2 of the License, or
|
||||
+# (at your option) any later version.
|
||||
+#
|
||||
+# This program is distributed in the hope that it will be useful,
|
||||
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+# GNU General Public License for more details.
|
||||
+#
|
||||
+# You should have received a copy of the GNU General Public License
|
||||
+# along with this program; if not, write to the Free Software
|
||||
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
+
|
||||
+# Please email any bugs, comments, and/or additions to this file to:
|
||||
+# bug-gdb@prep.ai.mit.edu
|
||||
+
|
||||
+# Test resolving of an opaque type from the loaded shared library.
|
||||
+
|
||||
+if $tracelevel then {
|
||||
+ strace $tracelevel
|
||||
+}
|
||||
+
|
||||
+set testfile type-opaque-main
|
||||
+set libfile type-opaque-lib
|
||||
+set srcfile ${testfile}.c
|
||||
+set binfile ${objdir}/${subdir}/${testfile}
|
||||
+
|
||||
+set libsrc "${srcdir}/${subdir}/${libfile}.c"
|
||||
+set libobj "${objdir}/${subdir}/${libfile}.so"
|
||||
+set execsrc "${srcdir}/${subdir}/${srcfile}"
|
||||
+
|
||||
+remote_exec build "rm -f ${binfile}"
|
||||
+
|
||||
+# Are we on a target board? No support for downloading shared libraries
|
||||
+# to a target yet.
|
||||
+if ![isnative] then {
|
||||
+ return 0
|
||||
+}
|
||||
+
|
||||
+# get the value of gcc_compiled
|
||||
+if [get_compiler_info ${binfile}] {
|
||||
+ return -1
|
||||
+}
|
||||
+
|
||||
+if { [gdb_compile_shlib $libsrc $libobj {debug}] != ""
|
||||
+ || [gdb_compile $execsrc ${binfile} executable \
|
||||
+ [list debug shlib=${libobj}]] != "" } {
|
||||
+ return -1
|
||||
+}
|
||||
+
|
||||
+gdb_exit
|
||||
+gdb_start
|
||||
+gdb_reinitialize_dir $srcdir/$subdir
|
||||
+gdb_load ${binfile}
|
||||
+
|
||||
+if ![runto_main] then {
|
||||
+ fail "Can't run to main"
|
||||
+ return 0
|
||||
+}
|
||||
+
|
||||
+
|
||||
+# DWARF3: An incomplete structure, union or class type is represented by
|
||||
+# a structure, union or class entry that does not have a byte size attribute
|
||||
+# and that has a DW_AT_declaration attribute.
|
||||
+
|
||||
+
|
||||
+proc body { struct } {
|
||||
+ global gdb_prompt
|
||||
+
|
||||
+
|
||||
+ # <1><15f>: Abbrev Number: 8 (DW_TAG_structure_type)
|
||||
+ # DW_AT_name : libtype_opaque
|
||||
+ # DW_AT_declaration : 1
|
||||
+
|
||||
+ set name "opaque $struct type resolving"
|
||||
+ gdb_test_multiple "ptype pointer_${struct}_opaque" $name \
|
||||
+ {
|
||||
+ -re "libfield_opaque.*$gdb_prompt $" {
|
||||
+ pass $name
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ # <1><9e>: Abbrev Number: 2 (DW_TAG_structure_type)
|
||||
+ # DW_AT_name : libtype_empty
|
||||
+ # DW_AT_byte_size : 0
|
||||
+ # DW_AT_decl_file : 1
|
||||
+ # DW_AT_decl_line : 25
|
||||
+
|
||||
+ set name "empty $struct type resolving"
|
||||
+ gdb_test_multiple "ptype pointer_${struct}_empty" $name \
|
||||
+ {
|
||||
+ -re "\\{\[ \t\r\n\]*<no data fields>\[ \t\r\n\]*\\}.*$gdb_prompt $" {
|
||||
+ pass $name
|
||||
+ }
|
||||
+ -re "libfield_empty.*$gdb_prompt $" {
|
||||
+ fail $name
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ # <1><b0>: Abbrev Number: 3 (DW_TAG_structure_type)
|
||||
+ # DW_AT_sibling : <e3>
|
||||
+ # DW_AT_name : libtype_filled
|
||||
+ # DW_AT_byte_size : 4
|
||||
+ # DW_AT_decl_file : 1
|
||||
+ # DW_AT_decl_line : 29
|
||||
+ # <2><c7>: Abbrev Number: 4 (DW_TAG_member)
|
||||
+ # DW_AT_name : mainfield_filled
|
||||
+ # DW_AT_decl_file : 1
|
||||
+ # DW_AT_decl_line : 30
|
||||
+ # DW_AT_type : <e3>
|
||||
+ # DW_AT_data_member_location: 2 byte block: 23 0 (DW_OP_plus_uconst: 0)
|
||||
+
|
||||
+ set name "filled $struct type resolving"
|
||||
+ gdb_test_multiple "ptype pointer_${struct}_filled" $name \
|
||||
+ {
|
||||
+ -re "mainfield_filled.*$gdb_prompt $" {
|
||||
+ pass $name
|
||||
+ }
|
||||
+ -re "libfield_filled.*$gdb_prompt $" {
|
||||
+ fail $name
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+}
|
||||
+
|
||||
+
|
||||
+body struct
|
||||
+body union
|
File diff suppressed because it is too large
Load Diff
@ -1,151 +0,0 @@
|
||||
Failing on _FORTIFY_SOURCE=2 for `gdb.base/corefile.exp'.
|
||||
|
||||
|
||||
--- gdb-6.6/gdb/linux-nat.c-orig 2007-04-08 21:12:38.000000000 +0200
|
||||
+++ gdb-6.6/gdb/linux-nat.c 2007-04-09 20:05:43.000000000 +0200
|
||||
@@ -2838,7 +2838,9 @@ linux_nat_make_corefile_notes (bfd *obfd
|
||||
{
|
||||
struct linux_nat_corefile_thread_data thread_args;
|
||||
struct cleanup *old_chain;
|
||||
+ /* Length must be >= sizeof (prpsinfo_t.pr_fname). */
|
||||
char fname[16] = { '\0' };
|
||||
+ /* Length must be >= sizeof (prpsinfo_t.pr_psargs). */
|
||||
char psargs[80] = { '\0' };
|
||||
char *note_data = NULL;
|
||||
ptid_t current_ptid = inferior_ptid;
|
||||
@@ -2851,9 +2853,14 @@ linux_nat_make_corefile_notes (bfd *obfd
|
||||
strncpy (psargs, get_exec_file (0), sizeof (psargs));
|
||||
if (get_inferior_args ())
|
||||
{
|
||||
- strncat (psargs, " ", sizeof (psargs) - strlen (psargs));
|
||||
- strncat (psargs, get_inferior_args (),
|
||||
- sizeof (psargs) - strlen (psargs));
|
||||
+ /* linux_elfcore_write_prpsinfo () handles zero non-terminated
|
||||
+ strings right if they provide enough characters for its purposes.
|
||||
+ Handle to fully filled (=> zero non-terminated) strings here. */
|
||||
+ if (memchr (psargs, 0, sizeof (psargs)) != NULL)
|
||||
+ strncat (psargs, " ", sizeof (psargs) - strlen (psargs) - 1);
|
||||
+ if (memchr (psargs, 0, sizeof (psargs)) != NULL)
|
||||
+ strncat (psargs, get_inferior_args (),
|
||||
+ sizeof (psargs) - strlen (psargs) - 1);
|
||||
}
|
||||
note_data = (char *) linux_elfcore_write_prpsinfo (obfd, note_data,
|
||||
note_size, fname,
|
||||
|
||||
|
||||
2007-04-28 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* gdb.base/gcore-buffer-overflow.c, gdb.base/gcore-buffer-overflow.exp:
|
||||
New files.
|
||||
|
||||
Index: ./gdb/testsuite/gdb.base/gcore-buffer-overflow.c
|
||||
===================================================================
|
||||
RCS file: gdb/testsuite/gdb.base/gcore-buffer-overflow.c
|
||||
diff -N gdb/testsuite/gdb.base/gcore-buffer-overflow.c
|
||||
--- /dev/null 1 Jan 1970 00:00:00 -0000
|
||||
+++ ./gdb/testsuite/gdb.base/gcore-buffer-overflow.c 28 Apr 2007 18:48:15 -0000
|
||||
@@ -0,0 +1,27 @@
|
||||
+/* Copyright 2007 Free Software Foundation, Inc.
|
||||
+
|
||||
+ This file is part of GDB.
|
||||
+
|
||||
+ This program is free software; you can redistribute it and/or modify
|
||||
+ it under the terms of the GNU General Public License as published by
|
||||
+ the Free Software Foundation; either version 2 of the License, or (at
|
||||
+ your option) any later version.
|
||||
+
|
||||
+ This program is distributed in the hope that it will be useful, but
|
||||
+ WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU General Public License
|
||||
+ along with this program; if not, write to the Free Software
|
||||
+ Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
+ Boston, MA 02111-1307, USA. */
|
||||
+
|
||||
+/*
|
||||
+ * Test GDB's internal buffers safety for the GCORE command.
|
||||
+ */
|
||||
+
|
||||
+int main (void)
|
||||
+{
|
||||
+ return 0;
|
||||
+}
|
||||
Index: ./gdb/testsuite/gdb.base/gcore-buffer-overflow.exp
|
||||
===================================================================
|
||||
RCS file: gdb/testsuite/gdb.base/gcore-buffer-overflow.exp
|
||||
diff -N gdb/testsuite/gdb.base/gcore-buffer-overflow.exp
|
||||
--- /dev/null 1 Jan 1970 00:00:00 -0000
|
||||
+++ ./gdb/testsuite/gdb.base/gcore-buffer-overflow.exp 28 Apr 2007 18:48:15 -0000
|
||||
@@ -0,0 +1,70 @@
|
||||
+# Copyright 2007 Free Software Foundation, Inc.
|
||||
+
|
||||
+# This program is free software; you can redistribute it and/or modify
|
||||
+# it under the terms of the GNU General Public License as published by
|
||||
+# the Free Software Foundation; either version 2 of the License, or
|
||||
+# (at your option) any later version.
|
||||
+#
|
||||
+# This program is distributed in the hope that it will be useful,
|
||||
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+# GNU General Public License for more details.
|
||||
+#
|
||||
+# You should have received a copy of the GNU General Public License
|
||||
+# along with this program; if not, write to the Free Software
|
||||
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
+
|
||||
+# Please email any bugs, comments, and/or additions to this file to:
|
||||
+# bug-gdb@prep.ai.mit.edu
|
||||
+
|
||||
+# Test GDB's internal buffers safety for the GCORE command.
|
||||
+
|
||||
+if $tracelevel then {
|
||||
+ strace $tracelevel
|
||||
+}
|
||||
+
|
||||
+set prms_id 0
|
||||
+set bug_id 0
|
||||
+
|
||||
+set testfile "gcore-buffer-overflow"
|
||||
+set srcfile ${testfile}.c
|
||||
+# The ${binfile} basename needs to exceed 80 characters (`sizeof (psargs)')
|
||||
+# plus some additional data to overwrite the stack frame.
|
||||
+set pattern 01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
|
||||
+set binfile ${objdir}/${subdir}/${testfile}-${pattern}
|
||||
+
|
||||
+if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
|
||||
+ untested gcore.exp
|
||||
+ return -1
|
||||
+}
|
||||
+
|
||||
+# Start with a fresh gdb.
|
||||
+
|
||||
+gdb_exit
|
||||
+gdb_start
|
||||
+gdb_reinitialize_dir $srcdir/$subdir
|
||||
+gdb_load ${binfile}
|
||||
+
|
||||
+gdb_test "set args ${pattern}" \
|
||||
+ "" \
|
||||
+ "Set buffer exceeding arguments"
|
||||
+
|
||||
+if { ! [ runto_main ] } then {
|
||||
+ untested gcore-buffer-overflow.exp
|
||||
+ return -1
|
||||
+}
|
||||
+
|
||||
+set escapedfilename [string_to_regexp ${objdir}/${subdir}/gcore-buffer-overflow.test]
|
||||
+
|
||||
+set test "save a corefile"
|
||||
+gdb_test_multiple "gcore ${objdir}/${subdir}/gcore-buffer-overflow.test" $test {
|
||||
+ -re "Saved corefile ${escapedfilename}\[\r\n\]+$gdb_prompt $" {
|
||||
+ pass $test
|
||||
+ }
|
||||
+ -re "Can't create a corefile\[\r\n\]+$gdb_prompt $" {
|
||||
+ unsupported $test
|
||||
+ }
|
||||
+ eof {
|
||||
+ fail $test
|
||||
+ }
|
||||
+}
|
@ -1,35 +0,0 @@
|
||||
2007-08-08 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* bfd/opncls.c (bfd_openr_iovec): Fix OPEN parameter macro expansion.
|
||||
|
||||
--- ./bfd/opncls.c 24 Jul 2007 19:58:06 -0000 1.48
|
||||
+++ ./bfd/opncls.c 8 Aug 2007 19:12:15 -0000
|
||||
@@ -545,7 +545,8 @@ bfd_openr_iovec (const char *filename, c
|
||||
nbfd->filename = filename;
|
||||
nbfd->direction = read_direction;
|
||||
|
||||
- stream = open (nbfd, open_closure);
|
||||
+ /* `open (...)' would get expanded by an the open(2) syscall macro. */
|
||||
+ stream = (*open) (nbfd, open_closure);
|
||||
if (stream == NULL)
|
||||
{
|
||||
_bfd_delete_bfd (nbfd);
|
||||
|
||||
|
||||
|
||||
2007-08-08 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* serial.c (serial_open): Fix OPEN parameter macro expansion.
|
||||
|
||||
--- ./gdb/serial.c 8 Apr 2007 15:20:07 -0000 1.29
|
||||
+++ ./gdb/serial.c 8 Aug 2007 20:32:10 -0000
|
||||
@@ -213,7 +213,8 @@ serial_open (const char *name)
|
||||
scb->bufp = scb->buf;
|
||||
scb->error_fd = -1;
|
||||
|
||||
- if (scb->ops->open (scb, open_name))
|
||||
+ /* `...->open (...)' would get expanded by an the open(2) syscall macro. */
|
||||
+ if ((*scb->ops->open) (scb, open_name))
|
||||
{
|
||||
xfree (scb);
|
||||
return NULL;
|
@ -1,13 +0,0 @@
|
||||
--- gdb-6.6-orig/gdb/libunwind-frame.c 2007-04-08 20:49:09.000000000 +0200
|
||||
+++ gdb-6.6/gdb/libunwind-frame.c 2007-04-10 23:45:22.000000000 +0200
|
||||
@@ -74,7 +74,9 @@
|
||||
#define STRINGIFY(name) STRINGIFY2(name)
|
||||
|
||||
#ifndef LIBUNWIND_SO
|
||||
-#define LIBUNWIND_SO "libunwind-" STRINGIFY(UNW_TARGET) ".so"
|
||||
+/* Use the stable ABI major version number. `libunwind-ia64.so' is a link time
|
||||
+ only library, not a runtime one. */
|
||||
+#define LIBUNWIND_SO "libunwind-" STRINGIFY(UNW_TARGET) ".so.7"
|
||||
#endif
|
||||
|
||||
static char *get_reg_name = STRINGIFY(UNW_OBJ(get_reg));
|
@ -1,234 +1,12 @@
|
||||
diff -u -rup gdb-6.6-orig/configure gdb-6.6/configure
|
||||
--- gdb-6.6-orig/configure 2006-11-15 00:26:39.000000000 +0100
|
||||
+++ gdb-6.6/configure 2007-07-04 21:04:45.000000000 +0200
|
||||
@@ -895,14 +895,14 @@ build_tools="build-texinfo build-byacc b
|
||||
|
||||
# these libraries are used by various programs built for the host environment
|
||||
#
|
||||
-host_libs="intl mmalloc libiberty opcodes bfd readline tcl tk itcl libgui zlib libcpp libdecnumber"
|
||||
+host_libs="intl mmalloc libiberty opcodes bfd tcl tk itcl libgui zlib libcpp libdecnumber"
|
||||
|
||||
# these tools are built for the host environment
|
||||
# Note, the powerpc-eabi build depends on sim occurring before gdb in order to
|
||||
# know that we are building the simulator.
|
||||
# binutils, gas and ld appear in that order because it makes sense to run
|
||||
# "make check" in that particular order.
|
||||
-host_tools="texinfo byacc flex bison binutils gas ld fixincludes gcc sid sim gdb make patch prms send-pr gprof etc expect dejagnu ash bash bzip2 m4 autoconf automake libtool diff rcs fileutils shellutils time textutils wdiff find uudecode hello tar gzip indent recode release sed utils guile perl gawk findutils gettext zip fastjar gnattools"
|
||||
+host_tools="byacc flex bison binutils gas ld fixincludes gcc sid sim gdb make patch prms send-pr gprof etc expect dejagnu ash bash bzip2 m4 autoconf automake libtool diff rcs fileutils shellutils time textutils wdiff find uudecode hello tar gzip indent recode release sed utils guile perl gawk findutils gettext zip fastjar gnattools"
|
||||
|
||||
# libgcj represents the runtime libraries only used by gcj.
|
||||
libgcj="target-libffi \
|
||||
@@ -1110,7 +1110,7 @@ case "${host}" in
|
||||
noconfigdirs="$noconfigdirs patch diff make tk tcl expect dejagnu autoconf automake texinfo bison send-pr gprof rcs guile perl itcl gnuserv"
|
||||
;;
|
||||
powerpc-*-beos*)
|
||||
- noconfigdirs="$noconfigdirs tk itcl libgui gdb dejagnu readline"
|
||||
+ noconfigdirs="$noconfigdirs tk itcl libgui gdb dejagnu"
|
||||
;;
|
||||
esac
|
||||
|
||||
@@ -1290,7 +1290,7 @@ case "${target}" in
|
||||
noconfigdirs="$noconfigdirs target-newlib"
|
||||
case "${host}" in
|
||||
*-*-cygwin*) ;; # keep gdb and readline
|
||||
- *) noconfigdirs="$noconfigdirs gdb readline"
|
||||
+ *) noconfigdirs="$noconfigdirs gdb"
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
@@ -1408,11 +1408,11 @@ case "${target}" in
|
||||
;;
|
||||
ia64*-*-elf*)
|
||||
# No gdb support yet.
|
||||
- noconfigdirs="$noconfigdirs readline mmalloc libgui itcl gdb"
|
||||
+ noconfigdirs="$noconfigdirs mmalloc libgui itcl gdb"
|
||||
;;
|
||||
ia64*-**-hpux*)
|
||||
# No gdb or ld support yet.
|
||||
- noconfigdirs="$noconfigdirs ${libgcj} readline mmalloc libgui itcl gdb ld"
|
||||
+ noconfigdirs="$noconfigdirs ${libgcj} mmalloc libgui itcl gdb ld"
|
||||
;;
|
||||
i370-*-opened*)
|
||||
;;
|
||||
diff -u -rup gdb-6.6-orig/configure.in gdb-6.6/configure.in
|
||||
--- gdb-6.6-orig/configure.in 2006-12-18 08:22:58.000000000 +0100
|
||||
+++ gdb-6.6/configure.in 2007-07-04 21:04:43.000000000 +0200
|
||||
@@ -123,7 +123,7 @@ build_tools="build-texinfo build-byacc b
|
||||
|
||||
# these libraries are used by various programs built for the host environment
|
||||
#
|
||||
-host_libs="intl mmalloc libiberty opcodes bfd readline tcl tk itcl libgui zlib libcpp libdecnumber"
|
||||
+host_libs="intl mmalloc libiberty opcodes bfd tcl tk itcl libgui zlib libcpp libdecnumber"
|
||||
|
||||
# these tools are built for the host environment
|
||||
# Note, the powerpc-eabi build depends on sim occurring before gdb in order to
|
||||
@@ -294,7 +294,7 @@ case "${host}" in
|
||||
noconfigdirs="$noconfigdirs patch diff make tk tcl expect dejagnu autoconf automake texinfo bison send-pr gprof rcs guile perl itcl gnuserv"
|
||||
;;
|
||||
powerpc-*-beos*)
|
||||
- noconfigdirs="$noconfigdirs tk itcl libgui gdb dejagnu readline"
|
||||
+ noconfigdirs="$noconfigdirs tk itcl libgui gdb dejagnu"
|
||||
;;
|
||||
esac
|
||||
|
||||
@@ -466,7 +466,7 @@ case "${target}" in
|
||||
noconfigdirs="$noconfigdirs target-newlib"
|
||||
case "${host}" in
|
||||
*-*-cygwin*) ;; # keep gdb and readline
|
||||
- *) noconfigdirs="$noconfigdirs gdb readline"
|
||||
+ *) noconfigdirs="$noconfigdirs gdb"
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
@@ -584,11 +584,11 @@ case "${target}" in
|
||||
;;
|
||||
ia64*-*-elf*)
|
||||
# No gdb support yet.
|
||||
- noconfigdirs="$noconfigdirs readline mmalloc libgui itcl gdb"
|
||||
+ noconfigdirs="$noconfigdirs mmalloc libgui itcl gdb"
|
||||
;;
|
||||
ia64*-**-hpux*)
|
||||
# No gdb or ld support yet.
|
||||
- noconfigdirs="$noconfigdirs ${libgcj} readline mmalloc libgui itcl gdb ld"
|
||||
+ noconfigdirs="$noconfigdirs ${libgcj} mmalloc libgui itcl gdb ld"
|
||||
;;
|
||||
i370-*-opened*)
|
||||
;;
|
||||
diff -u -rup gdb-6.6-orig/gdb/Makefile.in gdb-6.6/gdb/Makefile.in
|
||||
--- gdb-6.6-orig/gdb/Makefile.in 2007-07-04 20:50:06.000000000 +0200
|
||||
+++ gdb-6.6/gdb/Makefile.in 2007-07-04 20:58:56.000000000 +0200
|
||||
@@ -123,10 +123,10 @@ BFD_SRC = $(srcdir)/$(BFD_DIR)
|
||||
BFD_CFLAGS = -I$(BFD_DIR) -I$(BFD_SRC)
|
||||
|
||||
# Where is the READLINE library? Typically in ../readline.
|
||||
-READLINE_DIR = ../readline
|
||||
-READLINE = $(READLINE_DIR)/libreadline.a
|
||||
-READLINE_SRC = $(srcdir)/$(READLINE_DIR)
|
||||
-READLINE_CFLAGS = -I$(READLINE_SRC)/..
|
||||
+# `readline' is required on the host.
|
||||
+READLINE = -lreadline
|
||||
+# Workaround a bug linking `bfd/elf-bfd.h' without `-I../bfd/..'.
|
||||
+READLINE_CFLAGS = -I$(srcdir)/..
|
||||
|
||||
# Where is expat? This will be empty if expat was not available.
|
||||
LIBEXPAT = @LIBEXPAT@
|
||||
@@ -595,9 +594,9 @@ remote_sim_h = $(INCLUDE_DIR)/gdb/remote
|
||||
demangle_h = $(INCLUDE_DIR)/demangle.h
|
||||
obstack_h = $(INCLUDE_DIR)/obstack.h
|
||||
opcode_m68hc11_h = $(INCLUDE_DIR)/opcode/m68hc11.h
|
||||
-readline_h = $(READLINE_SRC)/readline.h
|
||||
-readline_tilde_h = $(READLINE_SRC)/tilde.h
|
||||
-readline_history_h = $(READLINE_SRC)/history.h
|
||||
+readline_h =
|
||||
+readline_tilde_h =
|
||||
+readline_history_h =
|
||||
frv_desc_h = $(OPCODES_SRC)/frv-desc.h
|
||||
sh_opc_h = $(OPCODES_SRC)/sh-opc.h
|
||||
gdb_callback_h = $(INCLUDE_DIR)/gdb/callback.h
|
||||
diff -u -rup gdb-6.6-orig/gdb/configure gdb-6.6/gdb/configure
|
||||
--- gdb-6.6-orig/gdb/configure 2007-07-04 20:50:06.000000000 +0200
|
||||
+++ gdb-6.6/gdb/configure 2007-07-04 21:03:52.000000000 +0200
|
||||
@@ -5697,6 +5697,61 @@ echo "$as_me: error: no termcap library
|
||||
{ (exit 1); exit 1; }; }
|
||||
fi
|
||||
|
||||
+# `-lreadline' is provided specifically by `Makefile.in'.
|
||||
+saved_LIBS="$LIBS"
|
||||
+LIBS="-lreadline $LIBS"
|
||||
+cat >conftest.$ac_ext <<_ACEOF
|
||||
+/* confdefs.h. */
|
||||
+_ACEOF
|
||||
+cat confdefs.h >>conftest.$ac_ext
|
||||
+cat >>conftest.$ac_ext <<_ACEOF
|
||||
+/* end confdefs.h. */
|
||||
+
|
||||
+int
|
||||
+main ()
|
||||
+{
|
||||
+ main()
|
||||
+ ;
|
||||
+ return 0;
|
||||
+}
|
||||
+_ACEOF
|
||||
+rm -f conftest.$ac_objext conftest$ac_exeext
|
||||
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
||||
+ (eval $ac_link) 2>conftest.er1
|
||||
+ ac_status=$?
|
||||
+ grep -v '^ *+' conftest.er1 >conftest.err
|
||||
+ rm -f conftest.er1
|
||||
+ cat conftest.err >&5
|
||||
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
+ (exit $ac_status); } &&
|
||||
+ { ac_try='test -z "$ac_c_werror_flag"
|
||||
+ || test ! -s conftest.err'
|
||||
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||
+ (eval $ac_try) 2>&5
|
||||
+ ac_status=$?
|
||||
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
+ (exit $ac_status); }; } &&
|
||||
+ { ac_try='test -s conftest$ac_exeext'
|
||||
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||
+ (eval $ac_try) 2>&5
|
||||
+ ac_status=$?
|
||||
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
+ (exit $ac_status); }; }; then
|
||||
+ :
|
||||
+else
|
||||
+ echo "$as_me: failed program was:" >&5
|
||||
+sed 's/^/| /' conftest.$ac_ext >&5
|
||||
+
|
||||
+
|
||||
+ { { echo "$as_me:$LINENO: error: no readline library found" >&5
|
||||
+echo "$as_me: error: no readline library found" >&2;}
|
||||
+ { (exit 1); exit 1; }; }
|
||||
+
|
||||
+fi
|
||||
+rm -f conftest.err conftest.$ac_objext \
|
||||
+ conftest$ac_exeext conftest.$ac_ext
|
||||
+LIBS="$saved_LIBS"
|
||||
+
|
||||
|
||||
if test "X$prefix" = "XNONE"; then
|
||||
acl_final_prefix="$ac_default_prefix"
|
||||
diff -u -rup gdb-6.6-orig/gdb/configure.ac gdb-6.6/gdb/configure.ac
|
||||
--- gdb-6.6-orig/gdb/configure.ac 2007-07-04 20:50:06.000000000 +0200
|
||||
+++ gdb-6.6/gdb/configure.ac 2007-07-04 21:02:41.000000000 +0200
|
||||
@@ -321,6 +321,14 @@ if test "$ac_cv_search_tgetent" = no; th
|
||||
AC_MSG_ERROR([no termcap library found])
|
||||
fi
|
||||
|
||||
+# `-lreadline' is provided specifically by `Makefile.in'.
|
||||
+saved_LIBS="$LIBS"
|
||||
+LIBS="-lreadline $LIBS"
|
||||
+AC_TRY_LINK(,[ main() ],,[
|
||||
+ AC_MSG_ERROR([no readline library found])
|
||||
+])
|
||||
+LIBS="$saved_LIBS"
|
||||
+
|
||||
AC_LIB_HAVE_LINKFLAGS([expat], [], [#include "expat.h"],
|
||||
[XML_Parser p = XML_ParserCreate (0);])
|
||||
if test "$HAVE_LIBEXPAT" != yes; then
|
||||
diff -u -ru gdb-6.6-orig/gdb/doc/Makefile.in gdb-6.6/gdb/doc/Makefile.in
|
||||
--- gdb-6.6-orig/gdb/doc/Makefile.in 2006-05-05 20:26:11.000000000 +0200
|
||||
+++ gdb-6.6/gdb/doc/Makefile.in 2007-07-05 11:58:30.000000000 +0200
|
||||
@@ -58,13 +58,14 @@
|
||||
|
||||
# Where is the source dir for the READLINE library doc?
|
||||
# Traditionally readline is in .. or .
|
||||
-READLINE_DIR = ${gdbdir}/../readline/doc
|
||||
+# `readline' is required on the host.
|
||||
+#READLINE_DIR = ${gdbdir}/../readline/doc
|
||||
|
||||
# The GDB/MI docs come from a sibling directory ../mi
|
||||
GDBMI_DIR = ${gdbdir}/mi
|
||||
|
||||
SET_TEXINPUTS = \
|
||||
- TEXINPUTS=${TEXIDIR}:.:$(srcdir):$(READLINE_DIR):$(GDBMI_DIR):$$TEXINPUTS
|
||||
+ TEXINPUTS=${TEXIDIR}:.:$(srcdir):$(GDBMI_DIR):$$TEXINPUTS
|
||||
|
||||
# Files which should be generated via 'info' and installed by 'install-info'
|
||||
INFO_DEPS = gdb.info gdbint.info stabs.info annotate.info
|
||||
@@ -100,9 +101,7 @@
|
||||
2007-10-16 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
Port to GDB-6.7.
|
||||
|
||||
Index: gdb-6.7/gdb/doc/Makefile.in
|
||||
===================================================================
|
||||
--- gdb-6.7.orig/gdb/doc/Makefile.in 2007-07-26 12:34:00.000000000 +0200
|
||||
+++ gdb-6.7/gdb/doc/Makefile.in 2007-10-16 16:31:08.000000000 +0200
|
||||
@@ -109,9 +109,7 @@ DVIPS = dvips
|
||||
GDB_DOC_SOURCE_INCLUDES = \
|
||||
$(srcdir)/fdl.texi \
|
||||
$(srcdir)/gpl.texi \
|
||||
@ -239,39 +17,22 @@ diff -u -ru gdb-6.6-orig/gdb/doc/Makefile.in gdb-6.6/gdb/doc/Makefile.in
|
||||
GDB_DOC_BUILD_INCLUDES = \
|
||||
gdb-cfg.texi \
|
||||
GDBvn.texi
|
||||
@@ -299,7 +298,7 @@
|
||||
Index: gdb-6.7/gdb/doc/gdb.texinfo
|
||||
===================================================================
|
||||
--- gdb-6.7.orig/gdb/doc/gdb.texinfo 2007-10-16 16:19:19.000000000 +0200
|
||||
+++ gdb-6.7/gdb/doc/gdb.texinfo 2007-10-16 16:32:10.000000000 +0200
|
||||
@@ -158,8 +158,8 @@ software in general. We will miss him.
|
||||
|
||||
# GDB MANUAL: info file
|
||||
gdb.info: ${GDB_DOC_FILES}
|
||||
- $(MAKEINFO) -I ${READLINE_DIR} -I ${GDBMI_DIR} -I $(srcdir) \
|
||||
+ $(MAKEINFO) -I ${GDBMI_DIR} -I $(srcdir) \
|
||||
-o gdb.info $(srcdir)/gdb.texinfo
|
||||
|
||||
# GDB MANUAL: roff translations
|
||||
@@ -375,7 +374,7 @@
|
||||
# GDB MANUAL: HTML file
|
||||
|
||||
gdb_toc.html: ${GDB_DOC_FILES}
|
||||
- $(MAKEHTML) $(MAKEHTMLFLAGS) -I ${READLINE_DIR} -I ${GDBMI_DIR} -I $(srcdir) $(srcdir)/gdb.texinfo
|
||||
+ $(MAKEHTML) $(MAKEHTMLFLAGS) -I ${GDBMI_DIR} -I $(srcdir) $(srcdir)/gdb.texinfo
|
||||
|
||||
# Clean these up before each run. Avoids a catch 22 with not being
|
||||
# able to re-generate these files (to fix a corruption) because these
|
||||
diff -u -ru gdb-6.6-orig/gdb/doc/gdb.texinfo gdb-6.6/gdb/doc/gdb.texinfo
|
||||
--- gdb-6.6-orig/gdb/doc/gdb.texinfo 2007-07-04 20:50:06.000000000 +0200
|
||||
+++ gdb-6.6/gdb/doc/gdb.texinfo 2007-07-05 13:07:55.000000000 +0200
|
||||
@@ -153,8 +153,8 @@
|
||||
* GDB Bugs:: Reporting bugs in @value{GDBN}
|
||||
* Formatting Documentation:: How to format and print @value{GDBN} documentation
|
||||
|
||||
-* Command Line Editing:: Command Line Editing
|
||||
-* Using History Interactively:: Using History Interactively
|
||||
+* Command Line Editing: (rluserman). Command Line Editing
|
||||
+* Using History Interactively: (history). Using History Interactively
|
||||
* Formatting Documentation:: How to format and print @value{GDBN} documentation
|
||||
* Installing GDB:: Installing GDB
|
||||
* Maintenance Commands:: Maintenance Commands
|
||||
* Remote Protocol:: GDB Remote Serial Protocol
|
||||
@@ -15728,7 +15728,7 @@
|
||||
@@ -15533,7 +15533,7 @@ Disable command line editing.
|
||||
Show whether command line editing is enabled.
|
||||
@end table
|
||||
|
||||
@ -280,7 +41,7 @@ diff -u -ru gdb-6.6-orig/gdb/doc/gdb.texinfo gdb-6.6/gdb/doc/gdb.texinfo
|
||||
interface. Users unfamiliar with @sc{gnu} Emacs or @code{vi} are
|
||||
encouraged to read that chapter.
|
||||
|
||||
@@ -15743,7 +15743,8 @@
|
||||
@@ -15548,7 +15548,8 @@ history facility.
|
||||
|
||||
@value{GDBN} uses the @sc{gnu} History library, a part of the Readline
|
||||
package, to provide the history facility. @xref{Using History
|
||||
@ -289,8 +50,8 @@ diff -u -ru gdb-6.6-orig/gdb/doc/gdb.texinfo gdb-6.6/gdb/doc/gdb.texinfo
|
||||
+of the History library.
|
||||
|
||||
To issue a command to @value{GDBN} without affecting certain aspects of
|
||||
the state which is seen by users, prefix it with @samp{server }. This
|
||||
@@ -15794,7 +15795,7 @@
|
||||
the state which is seen by users, prefix it with @samp{server }
|
||||
@@ -15600,7 +15601,7 @@ This defaults to the value of the enviro
|
||||
@end table
|
||||
|
||||
History expansion assigns special meaning to the character @kbd{!}.
|
||||
@ -299,16 +60,17 @@ diff -u -ru gdb-6.6-orig/gdb/doc/gdb.texinfo gdb-6.6/gdb/doc/gdb.texinfo
|
||||
|
||||
@cindex history expansion, turn on/off
|
||||
Since @kbd{!} is also the logical not operator in C, history expansion
|
||||
@@ -16867,7 +16868,7 @@
|
||||
@@ -16660,7 +16661,8 @@ Indicates the current program counter ad
|
||||
@cindex TUI key bindings
|
||||
|
||||
The TUI installs several key bindings in the readline keymaps
|
||||
-(@pxref{Command Line Editing}).
|
||||
-(@pxref{Command Line Editing}). The following key bindings
|
||||
+(@pxref{Command Line Editing, , , rluserman, GNU Readline Library}).
|
||||
They allow to leave or enter in the TUI mode or they operate
|
||||
directly on the TUI layout and windows. The TUI also provides
|
||||
a @emph{SingleKey} keymap which binds several keys directly to
|
||||
@@ -21934,15 +21935,6 @@
|
||||
+The following key bindings
|
||||
are installed for both TUI mode and the @value{GDBN} standard mode.
|
||||
|
||||
@table @kbd
|
||||
@@ -21937,15 +21939,6 @@ Such guesses are usually wrong. Even we
|
||||
things without first using the debugger to find the facts.
|
||||
@end itemize
|
||||
|
||||
@ -324,7 +86,7 @@ diff -u -ru gdb-6.6-orig/gdb/doc/gdb.texinfo gdb-6.6/gdb/doc/gdb.texinfo
|
||||
|
||||
@node Formatting Documentation
|
||||
@appendix Formatting Documentation
|
||||
@@ -22111,9 +22103,6 @@
|
||||
@@ -22115,9 +22108,6 @@ source for the @samp{-liberty} free soft
|
||||
@item gdb-@value{GDBVN}/opcodes
|
||||
source for the library of opcode tables and disassemblers
|
||||
|
||||
@ -334,7 +96,7 @@ diff -u -ru gdb-6.6-orig/gdb/doc/gdb.texinfo gdb-6.6/gdb/doc/gdb.texinfo
|
||||
@item gdb-@value{GDBVN}/glob
|
||||
source for the @sc{gnu} filename pattern-matching subroutine
|
||||
|
||||
@@ -22145,7 +22134,7 @@
|
||||
@@ -22149,7 +22139,7 @@ where @var{host} is an identifier such a
|
||||
correct value by examining your system.)
|
||||
|
||||
Running @samp{configure @var{host}} and then running @code{make} builds the
|
||||
@ -343,9 +105,9 @@ diff -u -ru gdb-6.6-orig/gdb/doc/gdb.texinfo gdb-6.6/gdb/doc/gdb.texinfo
|
||||
libraries, then @code{gdb} itself. The configured source files, and the
|
||||
binaries, are left in the corresponding source directories.
|
||||
|
||||
@@ -22170,7 +22159,7 @@
|
||||
@@ -22175,7 +22165,7 @@ source tree, the @file{gdb-@var{version-
|
||||
that subdirectory. That is usually not what you want. In particular,
|
||||
if you run the first @code{configure} from the @file{gdb} subdirectory
|
||||
if you run the first @file{configure} from the @file{gdb} subdirectory
|
||||
of the @file{gdb-@var{version-number}} directory, you will omit the
|
||||
-configuration of @file{bfd}, @file{readline}, and other sibling
|
||||
+configuration of @file{bfd}, and other sibling
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,12 +1,18 @@
|
||||
Fix i386-on-x86_64 debugging giving the warning:
|
||||
warning: Lowest section in system-supplied DSO at 0xffffe000 is .hash at ffffe0b4
|
||||
|
||||
[ Backport for RH GDB-6.6. ]
|
||||
[base]
|
||||
|
||||
--- gdb-6.6/gdb/symfile.c 2007-10-08 19:52:06.000000000 +0200
|
||||
+++ gdb-6.6/gdb/symfile.c 2007-10-08 19:49:27.000000000 +0200
|
||||
@@ -597,6 +597,37 @@ default_symfile_offsets (struct objfile
|
||||
init_objfile_sect_indices (objfile);
|
||||
2007-10-16 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
Port to GDB-6.7.
|
||||
|
||||
Index: gdb-6.7/gdb/symfile.c
|
||||
===================================================================
|
||||
--- gdb-6.7.orig/gdb/symfile.c 2007-10-16 16:46:30.000000000 +0200
|
||||
+++ gdb-6.7/gdb/symfile.c 2007-10-16 20:08:42.000000000 +0200
|
||||
@@ -717,6 +717,38 @@ default_symfile_segments (bfd *abfd)
|
||||
return data;
|
||||
}
|
||||
|
||||
+/* Find lowest loadable section to be used as starting point for continguous
|
||||
@ -40,10 +46,11 @@ Fix i386-on-x86_64 debugging giving the warning:
|
||||
+ else
|
||||
+ return 0;
|
||||
+}
|
||||
|
||||
+
|
||||
/* Process a symbol file, as either the main file or as a dynamically
|
||||
loaded file.
|
||||
@@ -696,32 +727,11 @@ syms_from_objfile (struct objfile *objfi
|
||||
|
||||
@@ -815,32 +847,11 @@ syms_from_objfile (struct objfile *objfi
|
||||
happens for the PA64 port. */
|
||||
if (/*!mainline &&*/ addrs && addrs->other[0].name)
|
||||
{
|
||||
@ -78,30 +85,38 @@ Fix i386-on-x86_64 debugging giving the warning:
|
||||
/* Calculate offsets for the loadable sections.
|
||||
FIXME! Sections must be in order of increasing loadable section
|
||||
so that contiguous sections can use the lower-offset!!!
|
||||
@@ -743,6 +753,7 @@ syms_from_objfile (struct objfile *objfi
|
||||
@@ -862,6 +873,7 @@ syms_from_objfile (struct objfile *objfi
|
||||
addrs->other[i].addr
|
||||
-= bfd_section_vma (objfile->obfd, sect);
|
||||
lower_offset = addrs->other[i].addr;
|
||||
+ lower_offset_set = 1;
|
||||
+ lower_offset_set = 1;
|
||||
/* This is the index used by BFD. */
|
||||
addrs->other[i].sectindex = sect->index ;
|
||||
}
|
||||
@@ -755,7 +766,17 @@ syms_from_objfile (struct objfile *objfi
|
||||
@@ -874,7 +886,17 @@ syms_from_objfile (struct objfile *objfi
|
||||
}
|
||||
}
|
||||
else
|
||||
- addrs->other[i].addr = lower_offset;
|
||||
+ {
|
||||
+ /* Delay finding LOWER_OFFSET only if it is needed. Otherwise
|
||||
+ we would print a warning to detect a values never used. */
|
||||
+ if (!lower_offset_set)
|
||||
+ {
|
||||
+ lower_offset = find_lower_offset (objfile);
|
||||
+ lower_offset_set = 1;
|
||||
+ }
|
||||
+ {
|
||||
+ /* Delay finding LOWER_OFFSET only if it is needed. Otherwise
|
||||
+ we would print a warning to detect a values never used. */
|
||||
+ if (!lower_offset_set)
|
||||
+ {
|
||||
+ lower_offset = find_lower_offset (objfile);
|
||||
+ lower_offset_set = 1;
|
||||
+ }
|
||||
+
|
||||
+ addrs->other[i].addr = lower_offset;
|
||||
+ }
|
||||
+ addrs->other[i].addr = lower_offset;
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1174,7 +1196,6 @@ symbol_file_add_from_bfd (bfd *abfd, int
|
||||
mainline, flags);
|
||||
}
|
||||
|
||||
-
|
||||
/* Process a symbol file, as either the main file or as a dynamically
|
||||
loaded file. See symbol_file_add_with_addrs_or_offsets's comments
|
||||
for details. */
|
||||
|
125
gdb-6.7-charsign-test.patch
Normal file
125
gdb-6.7-charsign-test.patch
Normal file
@ -0,0 +1,125 @@
|
||||
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=224128
|
||||
|
||||
2007-01-25 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* gdb.base/charsign.exp, gdb.base/charsign.c: New files.
|
||||
[ stripped ]
|
||||
|
||||
2007-10-19 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
Port to GDB-6.7 - only the testcase left, patch has been reverted,
|
||||
char-vectors restricted.
|
||||
|
||||
--- /dev/null 1 Jan 1970 00:00:00 -0000
|
||||
+++ ./gdb/testsuite/gdb.base/charsign.c 26 Jan 2007 10:32:00 -0000
|
||||
@@ -0,0 +1,37 @@
|
||||
+/* This testcase is part of GDB, the GNU debugger.
|
||||
+
|
||||
+ Copyright 2007 Free Software Foundation, Inc.
|
||||
+
|
||||
+ This program is free software; you can redistribute it and/or modify
|
||||
+ it under the terms of the GNU General Public License as published by
|
||||
+ the Free Software Foundation; either version 2 of the License, or
|
||||
+ (at your option) any later version.
|
||||
+
|
||||
+ This program is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+ GNU General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU General Public License
|
||||
+ along with this program; if not, write to the Free Software
|
||||
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
+
|
||||
+ Please email any bugs, comments, and/or additions to this file to:
|
||||
+ bug-gdb@prep.ai.mit.edu */
|
||||
+
|
||||
+int main()
|
||||
+{
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+char n[]="A";
|
||||
+signed char s[]="A";
|
||||
+unsigned char u[]="A";
|
||||
+
|
||||
+typedef char char_n;
|
||||
+typedef signed char char_s;
|
||||
+typedef unsigned char char_u;
|
||||
+
|
||||
+char_n n_typed[]="A";
|
||||
+char_s s_typed[]="A";
|
||||
+char_u u_typed[]="A";
|
||||
--- /dev/null 1 Jan 1970 00:00:00 -0000
|
||||
+++ ./gdb/testsuite/gdb.base/charsign.exp 26 Jan 2007 10:32:00 -0000
|
||||
@@ -0,0 +1,70 @@
|
||||
+# Copyright 2007 Free Software Foundation, Inc.
|
||||
+
|
||||
+# This program is free software; you can redistribute it and/or modify
|
||||
+# it under the terms of the GNU General Public License as published by
|
||||
+# the Free Software Foundation; either version 2 of the License, or
|
||||
+# (at your option) any later version.
|
||||
+#
|
||||
+# This program is distributed in the hope that it will be useful,
|
||||
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+# GNU General Public License for more details.
|
||||
+#
|
||||
+# You should have received a copy of the GNU General Public License
|
||||
+# along with this program; if not, write to the Free Software
|
||||
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
+
|
||||
+if $tracelevel then {
|
||||
+ strace $tracelevel
|
||||
+}
|
||||
+
|
||||
+set prms_id 0
|
||||
+set bug_id 0
|
||||
+
|
||||
+set testfile charsign
|
||||
+set srcfile ${testfile}.c
|
||||
+set binfile ${objdir}/${subdir}/${testfile}
|
||||
+
|
||||
+proc do_test { cflags } {
|
||||
+ global srcdir
|
||||
+ global binfile
|
||||
+ global subdir
|
||||
+ global srcfile
|
||||
+ global gdb_prompt
|
||||
+
|
||||
+ if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug additional_flags=$cflags]] != "" } {
|
||||
+ untested "Couldn't compile test program"
|
||||
+ return -1
|
||||
+ }
|
||||
+
|
||||
+ # Get things started.
|
||||
+
|
||||
+ gdb_exit
|
||||
+ gdb_start
|
||||
+ gdb_reinitialize_dir $srcdir/$subdir
|
||||
+ gdb_load ${binfile}
|
||||
+
|
||||
+ # For C programs, "start" should stop in main().
|
||||
+
|
||||
+ gdb_test "p n" \
|
||||
+ "= \"A\""
|
||||
+ gdb_test "p s" \
|
||||
+ "= \\{65 'A', 0 '\\\\0'\\}"
|
||||
+ gdb_test "p u" \
|
||||
+ "= \\{65 'A', 0 '\\\\0'\\}"
|
||||
+ gdb_test "p n_typed" \
|
||||
+ "= \"A\""
|
||||
+ gdb_test "p s_typed" \
|
||||
+ "= \\{65 'A', 0 '\\\\0'\\}"
|
||||
+ gdb_test "p u_typed" \
|
||||
+ "= \\{65 'A', 0 '\\\\0'\\}"
|
||||
+}
|
||||
+
|
||||
+# The string identification works despite the compiler flags below due to
|
||||
+# gdbtypes.c:
|
||||
+# if (name && strcmp (name, "char") == 0)
|
||||
+# TYPE_FLAGS (type) |= TYPE_FLAG_NOSIGN;
|
||||
+
|
||||
+do_test {}
|
||||
+do_test {-fsigned-char}
|
||||
+do_test {-funsigned-char}
|
54
gdb-6.7-reread-exec_bfd.patch
Normal file
54
gdb-6.7-reread-exec_bfd.patch
Normal file
@ -0,0 +1,54 @@
|
||||
2007-10-29 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* symfile.c (reread_symbols): Reread also EXEC_BFD if changed.
|
||||
|
||||
Testcase: Regressed by the gdb-6.7 version of `gdb-6.3-pie-20050110.patch':
|
||||
Running ../../../gdb/testsuite/gdb.base/reread.exp ...
|
||||
PASS: gdb.base/reread.exp: breakpoint foo in first file (PRMS 13484)
|
||||
PASS: gdb.base/reread.exp: run to foo() (PRMS 13484)
|
||||
-PASS: gdb.base/reread.exp: run to foo() second time
|
||||
+FAIL: gdb.base/reread.exp: run to foo() second time
|
||||
PASS: gdb.base/reread.exp: second pass: breakpoint foo in first file
|
||||
-PASS: gdb.base/reread.exp: second pass: run to foo()
|
||||
-PASS: gdb.base/reread.exp: second pass: continue to completion
|
||||
-PASS: gdb.base/reread.exp: second pass: run to foo() second time
|
||||
+FAIL: gdb.base/reread.exp: second pass: run to foo()
|
||||
+FAIL: gdb.base/reread.exp: second pass: continue to completion
|
||||
+FAIL: gdb.base/reread.exp: second pass: run to foo() second time
|
||||
|
||||
--- gdb-6.7-orig/gdb/symfile.c 2007-10-29 01:04:35.000000000 +0100
|
||||
+++ gdb-6.7-patched/gdb/symfile.c 2007-10-29 01:03:13.000000000 +0100
|
||||
@@ -2810,6 +2810,33 @@ reread_symbols (void)
|
||||
/* We need to do this whenever any symbols go away. */
|
||||
make_cleanup (clear_symtab_users_cleanup, 0 /*ignore*/);
|
||||
|
||||
+ if (exec_bfd != NULL && strcmp (bfd_get_filename (objfile->obfd),
|
||||
+ bfd_get_filename (exec_bfd)) == 0)
|
||||
+ {
|
||||
+ char *exec_filename = bfd_get_filename (exec_bfd);
|
||||
+ bfd *exec_bfd_new;
|
||||
+
|
||||
+ /* We have to leak the memory here as there are stale
|
||||
+ references to EXEC_BFD, at least by
|
||||
+ `(struct section_table *)->bfd'. So far we need to update
|
||||
+ only START_ADDRESS there. */
|
||||
+#if 0
|
||||
+ if (!bfd_close (exec_bfd))
|
||||
+ error (_("Can't close BFD for %s: %s"), exec_filename,
|
||||
+ bfd_errmsg (bfd_get_error ()));
|
||||
+#endif
|
||||
+ exec_bfd_new = bfd_openr (exec_filename, gnutarget);
|
||||
+ if (exec_bfd_new == NULL)
|
||||
+ error (_("Can't open %s as a new main executable."),
|
||||
+ exec_filename);
|
||||
+ /* bfd_openr sets cacheable to true, which is what we want. */
|
||||
+ if (!bfd_check_format (exec_bfd_new, bfd_object))
|
||||
+ error (_("Can't reopen the main executable %s: %s."),
|
||||
+ exec_filename, bfd_errmsg (bfd_get_error ()));
|
||||
+ /* FIXME: The non-freeing hack. */
|
||||
+ memcpy (exec_bfd, exec_bfd_new, sizeof (*exec_bfd));
|
||||
+ }
|
||||
+
|
||||
/* Clean up any state BFD has sitting around. We don't need
|
||||
to close the descriptor but BFD lacks a way of closing the
|
||||
BFD without closing the descriptor. */
|
98
gdb-6.7-upstream.patch
Normal file
98
gdb-6.7-upstream.patch
Normal file
@ -0,0 +1,98 @@
|
||||
2007-09-15 Alan Modra <amodra@bigpond.net.au>
|
||||
|
||||
* configure.ac: Correct makeinfo version check.
|
||||
* configure: Regenerate.
|
||||
|
||||
#--- ./configure.ac 14 Sep 2007 14:51:36 -0000 1.25
|
||||
#+++ ./configure.ac 14 Sep 2007 15:47:01 -0000 1.26
|
||||
#@@ -2462,7 +2462,7 @@ changequote(,)
|
||||
# # For an installed makeinfo, we require it to be from texinfo 4.4 or
|
||||
# # higher, else we use the "missing" dummy.
|
||||
# if ${MAKEINFO} --version \
|
||||
#- | egrep 'texinfo[^0-9]*([1-3][0-9]|4\.[4-9]|[5-9])' >/dev/null 2>&1; then
|
||||
#+ | egrep 'texinfo[^0-9]*(4\.([4-9]|[1-9][0-9])|[5-9]|[1-9][0-9])' >/dev/null 2>&1; then
|
||||
# :
|
||||
# else
|
||||
# MAKEINFO="$MISSING makeinfo"
|
||||
--- ./configure 14 Sep 2007 14:51:36 -0000 1.277
|
||||
+++ ./configure 14 Sep 2007 15:47:01 -0000 1.278
|
||||
@@ -6192,7 +6192,7 @@ case " $build_configdirs " in
|
||||
# For an installed makeinfo, we require it to be from texinfo 4.4 or
|
||||
# higher, else we use the "missing" dummy.
|
||||
if ${MAKEINFO} --version \
|
||||
- | egrep 'texinfo[^0-9]*([1-3][0-9]|4\.[4-9]|[5-9])' >/dev/null 2>&1; then
|
||||
+ | egrep 'texinfo[^0-9]*(4\.([4-9]|[1-9][0-9])|[5-9]|[1-9][0-9])' >/dev/null 2>&1; then
|
||||
:
|
||||
else
|
||||
MAKEINFO="$MISSING makeinfo"
|
||||
|
||||
|
||||
|
||||
Fix:
|
||||
FAIL: gdb.arch/powerpc-power6.exp: Power6 disassembly dsub
|
||||
FAIL: gdb.arch/powerpc-power6.exp: Power6 disassembly dmul
|
||||
FAIL: gdb.arch/powerpc-power6.exp: Power6 disassembly ddiv
|
||||
FAIL: gdb.arch/powerpc-power6.exp: Power6 disassembly dcmpu
|
||||
|
||||
2007-10-15 Peter Bergner <bergner@vnet.ibm.com>
|
||||
|
||||
* ppc-opc.c (powerpc_opcodes): Fix the first two operands of
|
||||
dquaiq. to use the TE and FRT macros.
|
||||
|
||||
--- ./opcodes/ppc-opc.c 16 Oct 2007 02:26:30 -0000 1.100
|
||||
+++ ./opcodes/ppc-opc.c 16 Oct 2007 02:55:30 -0000 1.101
|
||||
@@ -4680,7 +4680,7 @@ const struct powerpc_opcode powerpc_opco
|
||||
{ "dscliq.", ZRC(63,66,1), Z_MASK, POWER6, { FRT, FRA, SH16 } },
|
||||
|
||||
{ "dquaiq", ZRC(63,67,0), Z2_MASK, POWER6, { TE, FRT, FRB, RMC } },
|
||||
-{ "dquaiq.", ZRC(63,67,1), Z2_MASK, POWER6, { FRT, FRA, FRB, RMC } },
|
||||
+{ "dquaiq.", ZRC(63,67,1), Z2_MASK, POWER6, { TE, FRT, FRB, RMC } },
|
||||
|
||||
{ "mtfsb0", XRC(63,70,0), XRARB_MASK, COM, { BT } },
|
||||
{ "mtfsb0.", XRC(63,70,1), XRARB_MASK, COM, { BT } },
|
||||
|
||||
2007-10-15 Peter Bergner <bergner@vnet.ibm.com>
|
||||
|
||||
* ppc-opc.c (TE): Correct signedness.
|
||||
(powerpc_opcodes): Sort psq_st and psq_stu according to major
|
||||
opcode number.
|
||||
|
||||
--- ./opcodes/ppc-opc.c 24 Aug 2007 00:56:30 -0000 1.99
|
||||
+++ ./opcodes/ppc-opc.c 16 Oct 2007 02:26:30 -0000 1.100
|
||||
@@ -492,13 +492,13 @@ const struct powerpc_operand powerpc_ope
|
||||
#define VS VD
|
||||
{ 0x1f, 21, NULL, NULL, PPC_OPERAND_VR },
|
||||
|
||||
- /* The SIMM field in a VX form instruction. */
|
||||
+ /* The SIMM field in a VX form instruction, and TE in Z form. */
|
||||
#define SIMM VD + 1
|
||||
+#define TE SIMM
|
||||
{ 0x1f, 16, NULL, NULL, PPC_OPERAND_SIGNED},
|
||||
|
||||
- /* The UIMM field in a VX form instruction, and TE in Z form. */
|
||||
+ /* The UIMM field in a VX form instruction. */
|
||||
#define UIMM SIMM + 1
|
||||
-#define TE UIMM
|
||||
{ 0x1f, 16, NULL, NULL, 0 },
|
||||
|
||||
/* The SHB field in a VA form instruction. */
|
||||
@@ -4495,9 +4495,6 @@ const struct powerpc_opcode powerpc_opco
|
||||
{ "fnmadds", A(59,31,0), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
|
||||
{ "fnmadds.",A(59,31,1), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
|
||||
|
||||
-{ "psq_st", OP(60), OP_MASK, PPCPS, { FRS, PSD, RA, PSW, PSQ } },
|
||||
-{ "psq_stu", OP(61), OP_MASK, PPCPS, { FRS, PSD, RA, PSW, PSQ } },
|
||||
-
|
||||
{ "dmul", XRC(59,34,0), X_MASK, POWER6, { FRT, FRA, FRB } },
|
||||
{ "dmul.", XRC(59,34,1), X_MASK, POWER6, { FRT, FRA, FRB } },
|
||||
|
||||
@@ -4561,6 +4558,9 @@ const struct powerpc_opcode powerpc_opco
|
||||
|
||||
{ "stfq", OP(60), OP_MASK, POWER2, { FRS, D, RA } },
|
||||
|
||||
+{ "psq_st", OP(60), OP_MASK, PPCPS, { FRS, PSD, RA, PSW, PSQ } },
|
||||
+{ "psq_stu", OP(61), OP_MASK, PPCPS, { FRS, PSD, RA, PSW, PSQ } },
|
||||
+
|
||||
{ "stfqu", OP(61), OP_MASK, POWER2, { FRS, D, RA } },
|
||||
|
||||
{ "stfdp", OP(61), OP_MASK, POWER6, { FRT, D, RA0 } },
|
93
gdb.spec
93
gdb.spec
@ -8,19 +8,19 @@ Name: gdb
|
||||
# Set version to contents of gdb/version.in.
|
||||
# NOTE: the FSF gdb versions are numbered N.M for official releases, like 6.3
|
||||
# and, since January 2005, X.Y.Z.date for daily snapshots, like 6.3.50.20050112 # (daily snapshot from mailine), or 6.3.0.20040112 (head of the release branch).
|
||||
Version: 6.6
|
||||
Version: 6.7
|
||||
|
||||
# The release always contains a leading reserved number, start it at 1.
|
||||
Release: 37%{?dist}
|
||||
Release: 1%{?dist}
|
||||
|
||||
License: GPL
|
||||
Group: Development/Debuggers
|
||||
Source: ftp://ftp.gnu.org/gnu/gdb/gdb-6.6.tar.bz2
|
||||
Source: ftp://ftp.gnu.org/gnu/gdb/gdb-6.7.tar.bz2
|
||||
Buildroot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
|
||||
URL: http://gnu.org/software/gdb/
|
||||
|
||||
# For our convenience
|
||||
%define gdb_src gdb-6.6
|
||||
%define gdb_src gdb-%{version}
|
||||
%define gdb_build build-%{_target_platform}
|
||||
|
||||
# Make sure we get rid of the old package gdb64, now that we have unified
|
||||
@ -149,9 +149,6 @@ Patch147: gdb-6.3-warnings-20050317.patch
|
||||
# Fix printing of inherited members
|
||||
Patch148: gdb-6.3-inheritance-20050324.patch
|
||||
|
||||
# Add vsyscall page support for ia64.
|
||||
Patch149: gdb-6.3-ia64-vsyscall-20050330.patch
|
||||
|
||||
# Print a warning when the separate debug info's CRC doesn't match.
|
||||
Patch150: gdb-6.3-test-sepcrc-20050402.patch
|
||||
Patch151: gdb-6.3-sepcrc-20050402.patch
|
||||
@ -225,9 +222,6 @@ Patch188: gdb-6.5-bz203661-emit-relocs.patch
|
||||
# CVE-2006-4146
|
||||
Patch190: gdb-6.5-dwarf-stack-overflow.patch
|
||||
|
||||
# Fix gdb printf command argument using "%p" (BZ 205551).
|
||||
Patch191: gdb-6.5-bz205551-printf-p.patch
|
||||
|
||||
# Support TLS symbols (+`errno' suggestion if no pthread is found) (BZ 185337).
|
||||
# FIXME: Still to be updated.
|
||||
Patch194: gdb-6.5-bz185337-resolve-tls-without-debuginfo-v2.patch
|
||||
@ -252,12 +246,6 @@ Patch201: gdb-6.5-gcore-i386-on-amd64.patch
|
||||
# Testcase for deadlocking on last address space byte; for corrupted backtraces.
|
||||
Patch211: gdb-6.5-last-address-space-byte-test.patch
|
||||
|
||||
# Fix "??" resolving of symbols from (non-prelinked) debuginfo packages.
|
||||
Patch206: gdb-6.5-relativedebug.patch
|
||||
|
||||
# Fix "??" resolving of symbols from overlapping functions (nanosleep(3)).
|
||||
Patch207: gdb-6.5-symbols-overlap.patch
|
||||
|
||||
# Improved testsuite results by the testsuite provided by the courtesy of BEA.
|
||||
Patch208: gdb-6.5-BEA-testsuite.patch
|
||||
|
||||
@ -265,10 +253,6 @@ Patch208: gdb-6.5-BEA-testsuite.patch
|
||||
Patch209: gdb-6.5-readline-long-line-crash.patch
|
||||
Patch213: gdb-6.5-readline-long-line-crash-test.patch
|
||||
|
||||
# Fix readline history for input mode commands like `command' (BZ 215816).
|
||||
Patch212: gdb-6.5-bz215816-readline-from-callback.patch
|
||||
Patch219: gdb-6.5-bz215816-readline-from-callback-test.patch
|
||||
|
||||
# Fix bogus 0x0 unwind of the thread's topmost function clone(3) (BZ 216711).
|
||||
Patch214: gdb-6.5-bz216711-clone-is-outermost.patch
|
||||
|
||||
@ -279,26 +263,17 @@ Patch216: gdb-6.5-bz218379-ppc-solib-trampoline-test.patch
|
||||
# Fix lockup on trampoline vs. its function lookup; unreproducible (BZ 218379).
|
||||
Patch217: gdb-6.5-bz218379-solib-trampoline-lookup-lock-fix.patch
|
||||
|
||||
# Fix unwinding crash on older gcj(1) code (extended CFI support) (BZ 165025).
|
||||
Patch221: gdb-6.5-bz165025-DW_CFA_GNU_negative_offset_extended-fix.patch
|
||||
Patch222: gdb-6.5-bz165025-DW_CFA_GNU_negative_offset_extended-test.patch
|
||||
|
||||
# Find symbols properly at their original (included) file (BZ 109921).
|
||||
Patch224: gdb-6.5-bz109921-DW_AT_decl_file-fix.patch
|
||||
Patch225: gdb-6.5-bz109921-DW_AT_decl_file-test.patch
|
||||
|
||||
# Update PPC unwinding patches to their upstream variants (BZ 140532).
|
||||
Patch226: gdb-6.3-bz140532-ppc-unwinding-fix.patch
|
||||
Patch229: gdb-6.3-bz140532-ppc-unwinding-test.patch
|
||||
|
||||
# Fix missing testsuite .log output of testcases using get_compiler_info().
|
||||
Patch230: gdb-6.5-testsuite-log.patch
|
||||
|
||||
# Testcase for exec() from threaded program (BZ 202689).
|
||||
Patch231: gdb-6.3-bz202689-exec-from-pthread-test.patch
|
||||
|
||||
# Backported post gdb-6.6 release fixups.
|
||||
Patch232: gdb-6.6-upstream.patch
|
||||
# Backported post gdb-6.7 release fixups.
|
||||
Patch232: gdb-6.7-upstream.patch
|
||||
|
||||
# Testcase for PPC Power6/DFP instructions disassembly (BZ 230000).
|
||||
Patch234: gdb-6.6-bz230000-power6-disassembly-test.patch
|
||||
@ -309,21 +284,12 @@ Patch235: gdb-6.3-bz231832-obstack-2gb.patch
|
||||
# Suggest SELinux permissions problem; no assertion failure anymore (BZ 232371).
|
||||
Patch236: gdb-6.6-bz232371-selinux-thread-error.patch
|
||||
|
||||
# Use definition of an empty structure as it is not an opaque type (BZ 233716).
|
||||
Patch238: gdb-6.6-bz233716-empty-structure-override.patch
|
||||
|
||||
# Fix prelink(8) testcase for non-root $PATH missing `/usr/sbin' (BZ 225783).
|
||||
Patch240: gdb-6.6-bz225783-prelink-path.patch
|
||||
|
||||
# Fix debugging GDB itself - the compiled in source files paths (BZ 225783).
|
||||
Patch241: gdb-6.6-bz225783-gdb-debuginfo-paths.patch
|
||||
|
||||
# Fix harmless GCORE stack buffer overflow, by _FORTIFY_SOURCE=2 (BZ 238285).
|
||||
Patch243: gdb-6.6-bz238285-gcore-strings-overflow.patch
|
||||
|
||||
# Use the runtime variant of `libunwind-ARCH.so.7' rather than the `.so' one.
|
||||
Patch244: gdb-6.6-libunwind-major-version.patch
|
||||
|
||||
# Allow running `/usr/bin/gcore' with provided but inaccessible tty (BZ 229517).
|
||||
Patch245: gdb-6.6-bz229517-gcore-without-terminal.patch
|
||||
|
||||
@ -333,9 +299,6 @@ Patch246: gdb-6.6-bz237096-watchthreads-testcasefix.patch
|
||||
# Notify user of a child forked process being detached (BZ 235197).
|
||||
Patch247: gdb-6.6-bz234468-fork-detach-info.patch
|
||||
|
||||
# Fix `gcore' command for 32bit PPC inferiors on 64bit PPC hosts (BZ 232015).
|
||||
Patch248: gdb-6.6-bz232015-gcore-ppc-on-ppc64.patch
|
||||
|
||||
# New testcase for gcore of 32bit inferiors on 64bit hosts.
|
||||
Patch249: gdb-6.6-gcore32-test.patch
|
||||
|
||||
@ -350,7 +313,6 @@ Patch254: gdb-6.6-testsuite-timeouts.patch
|
||||
Patch256: gdb-6.6-bz233852-attach-signalled.patch
|
||||
|
||||
# Support for stepping over PPC atomic instruction sequences (BZ 237572).
|
||||
Patch257: gdb-6.6-bz237572-ppc-atomic-sequence-upstream.patch
|
||||
Patch258: gdb-6.6-bz237572-ppc-atomic-sequence-test.patch
|
||||
|
||||
# Link with libreadline provided by the operating system.
|
||||
@ -363,15 +325,7 @@ Patch263: gdb-6.3-attach-see-vdso-test.patch
|
||||
Patch265: gdb-6.6-bz247354-leader-exit-fix.patch
|
||||
Patch266: gdb-6.6-bz247354-leader-exit-test.patch
|
||||
|
||||
# Fixed compatibility with Rawhide kernel fs.binfmt_elf.core_dump_elf_headers=1.
|
||||
Patch269: gdb-6.6-bfd-core-dump_elf_headers.patch
|
||||
|
||||
# Fixed compatibility with the Rawhide glibc open(2) syscall sanity checking.
|
||||
Patch272: gdb-6.6-glibc-open-fcntl2-compat.patch
|
||||
|
||||
# New fast verification whether the .debug file matches its peer (build-id).
|
||||
# New locating of the matching binaries from the pure core file (build-id).
|
||||
Patch273: gdb-6.6-buildid-verify.patch
|
||||
Patch274: gdb-6.6-buildid-locate.patch
|
||||
|
||||
# Fixed the kernel 8KB VDSO loading (producing `no loadable sections found').
|
||||
@ -386,6 +340,12 @@ Patch278: gdb-6.6-cu-ranges.patch
|
||||
# Fix hardware watchpoints after inferior forks-off some process.
|
||||
Patch280: gdb-6.6-multifork-debugreg-for-i386-and-x86_64.patch
|
||||
|
||||
# Fix displaying of numeric char arrays as strings (BZ 224128).
|
||||
Patch282: gdb-6.7-charsign-test.patch
|
||||
|
||||
# Fix rereading of the main executable on its change.
|
||||
Patch283: gdb-6.7-reread-exec_bfd.patch
|
||||
|
||||
BuildRequires: ncurses-devel glibc-devel gcc make gzip texinfo dejagnu gettext
|
||||
BuildRequires: flex bison sharutils expat-devel
|
||||
Requires: readline
|
||||
@ -461,7 +421,6 @@ rm -f gdb/jv-exp.c gdb/m2-exp.c gdb/objc-exp.c gdb/p-exp.c
|
||||
%patch145 -p1
|
||||
%patch147 -p1
|
||||
%patch148 -p1
|
||||
%patch149 -p1
|
||||
%patch150 -p1
|
||||
%patch151 -p1
|
||||
%patch153 -p1
|
||||
@ -486,65 +445,49 @@ rm -f gdb/jv-exp.c gdb/m2-exp.c gdb/objc-exp.c gdb/p-exp.c
|
||||
%patch187 -p1
|
||||
%patch188 -p1
|
||||
%patch190 -p1
|
||||
%patch191 -p1
|
||||
%patch194 -p1
|
||||
%patch195 -p1
|
||||
%patch196 -p1
|
||||
%patch199 -p1
|
||||
%patch200 -p1
|
||||
%patch201 -p1
|
||||
%patch206 -p1
|
||||
%patch207 -p1
|
||||
%patch208 -p1
|
||||
%patch209 -p1
|
||||
%patch211 -p1
|
||||
%patch212 -p1
|
||||
%patch213 -p1
|
||||
%patch214 -p1
|
||||
%patch215 -p1
|
||||
%patch216 -p1
|
||||
%patch217 -p1
|
||||
%patch219 -p1
|
||||
%patch221 -p1
|
||||
%patch222 -p1
|
||||
%patch224 -p1
|
||||
%patch225 -p1
|
||||
%patch226 -p1
|
||||
%patch229 -p1
|
||||
%patch230 -p1
|
||||
%patch231 -p1
|
||||
%patch232 -p1
|
||||
%patch234 -p1
|
||||
%patch235 -p1
|
||||
%patch236 -p1
|
||||
%patch238 -p1
|
||||
%patch240 -p1
|
||||
%patch241 -p1
|
||||
%patch243 -p1
|
||||
%patch244 -p1
|
||||
%patch245 -p1
|
||||
%patch246 -p1
|
||||
%patch247 -p1
|
||||
%patch248 -p1
|
||||
%patch249 -p1
|
||||
%patch251 -p1
|
||||
%patch254 -p1
|
||||
%patch256 -p1
|
||||
%patch257 -p1
|
||||
%patch258 -p1
|
||||
%patch260 -p1
|
||||
%patch261 -p1
|
||||
%patch263 -p1
|
||||
%patch265 -p1
|
||||
%patch266 -p1
|
||||
%patch269 -p1
|
||||
%patch272 -p1
|
||||
%patch273 -p1
|
||||
%patch274 -p1
|
||||
%patch276 -p1
|
||||
%patch277 -p1
|
||||
%patch278 -p1
|
||||
%patch280 -p1
|
||||
%patch282 -p1
|
||||
%patch283 -p1
|
||||
|
||||
# Change the version that gets printed at GDB startup, so it is RedHat
|
||||
# specific.
|
||||
@ -559,9 +502,6 @@ rm -f bfd/doc/*.info-*
|
||||
rm -f gdb/doc/*.info
|
||||
rm -f gdb/doc/*.info-*
|
||||
|
||||
# Force the use of system readline includes as we link with the system readline.
|
||||
rm -rf readline
|
||||
|
||||
%build
|
||||
|
||||
# Identify the build directory with the version of gdb as well as the
|
||||
@ -595,6 +535,7 @@ enable_build_warnings="$enable_build_warnings,-Werror"
|
||||
$enable_build_warnings \
|
||||
--with-separate-debug-dir=/usr/lib/debug \
|
||||
--disable-rpath \
|
||||
--with-system-readline \
|
||||
%ifarch ia64
|
||||
--with-libunwind \
|
||||
%else
|
||||
@ -701,6 +642,10 @@ fi
|
||||
# don't include the files in include, they are part of binutils
|
||||
|
||||
%changelog
|
||||
* Thu Nov 1 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.7-1
|
||||
- Upgrade to GDB 6.7. Drop redundant patches, forward-port remaining ones.
|
||||
- Fix rereading of the main executable on its change.
|
||||
|
||||
* Fri Oct 19 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.6-37
|
||||
- Fix hiding unexpected breakpoints on intentional step/next commands.
|
||||
- Fix s390 compilation warning/failure due to a wrongly sized type-cast.
|
||||
|
Loading…
Reference in New Issue
Block a user