- Upgrade to GDB 6.6. Drop redundant patches, forward-port remaining ones.
- Backported post gdb-6.6 release ia64 unwinding fixups. - Testcase for exec() from threaded program (BZ 202689). - Resolves: rhbz#221125 - Related: rhbz#202689
This commit is contained in:
parent
376c4280d4
commit
aefb0e1e23
@ -1 +1 @@
|
||||
gdb-6.5.tar.bz2
|
||||
gdb-6.6.tar.bz2
|
||||
|
98
gdb-6.3-bz202689-exec-from-pthread-test.patch
Normal file
98
gdb-6.3-bz202689-exec-from-pthread-test.patch
Normal file
@ -0,0 +1,98 @@
|
||||
2007-01-17 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* gdb.threads/threaded-exec.exp, gdb.threads/threaded-exec.c: New files.
|
||||
|
||||
|
||||
--- /dev/null 1 Jan 1970 00:00:00 -0000
|
||||
+++ ./gdb/testsuite/gdb.threads/threaded-exec.c 17 Jan 2007 23:10:22 -0000
|
||||
@@ -0,0 +1,46 @@
|
||||
+/* 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. */
|
||||
+
|
||||
+#include <stddef.h>
|
||||
+#include <pthread.h>
|
||||
+#include <assert.h>
|
||||
+#include <stdlib.h>
|
||||
+#include <unistd.h>
|
||||
+
|
||||
+
|
||||
+static void *
|
||||
+threader (void *arg)
|
||||
+{
|
||||
+ return NULL;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main (void)
|
||||
+{
|
||||
+ pthread_t t1;
|
||||
+ int i;
|
||||
+
|
||||
+ i = pthread_create (&t1, NULL, threader, (void *) NULL);
|
||||
+ assert (i == 0);
|
||||
+ i = pthread_join (t1, NULL);
|
||||
+ assert (i == 0);
|
||||
+
|
||||
+ execl ("/bin/true", "/bin/true", NULL);
|
||||
+ abort ();
|
||||
+}
|
||||
--- /dev/null 1 Jan 1970 00:00:00 -0000
|
||||
+++ ./gdb/testsuite/gdb.threads/threaded-exec.exp 17 Jan 2007 23:10:22 -0000
|
||||
@@ -0,0 +1,41 @@
|
||||
+# threaded-exec.exp -- Check reset of the tracked threads on exec*(2)
|
||||
+# Copyright (C) 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
|
||||
+
|
||||
+set testfile threaded-exec
|
||||
+set srcfile ${testfile}.c
|
||||
+set binfile ${objdir}/${subdir}/${testfile}
|
||||
+
|
||||
+if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable []] != "" } {
|
||||
+ return -1
|
||||
+}
|
||||
+
|
||||
+gdb_exit
|
||||
+gdb_start
|
||||
+gdb_reinitialize_dir $srcdir/$subdir
|
||||
+
|
||||
+gdb_load ${binfile}
|
||||
+
|
||||
+gdb_run_cmd
|
||||
+
|
||||
+gdb_test_multiple {} "Program exited" {
|
||||
+ -re "\r\nProgram exited normally.\r\n$gdb_prompt $" {
|
||||
+ pass "Program exited"
|
||||
+ }
|
||||
+}
|
@ -1,19 +1,19 @@
|
||||
Index: gdb-6.5/gdb/gcore.c
|
||||
Index: gdb-6.6/gdb/gcore.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/gcore.c 2005-12-17 20:33:59.000000000 -0200
|
||||
+++ gdb-6.5/gdb/gcore.c 2006-07-07 02:41:33.000000000 -0300
|
||||
@@ -462,8 +462,13 @@ gcore_copy_callback (bfd *obfd, asection
|
||||
error (_("Not enough memory to create corefile."));
|
||||
old_chain = make_cleanup (xfree, memhunk);
|
||||
--- gdb-6.6.orig/gdb/gcore.c
|
||||
+++ gdb-6.6/gdb/gcore.c
|
||||
@@ -475,8 +475,13 @@ gcore_copy_callback (bfd *obfd, asection
|
||||
if (size > total_size)
|
||||
size = total_size;
|
||||
|
||||
+ /* Warn if read error occurs except if we were trying to read the
|
||||
+ first page for ia64. The first page is marked readable, but it cannot
|
||||
+ be read. */
|
||||
if (target_read_memory (bfd_section_vma (obfd, osec),
|
||||
if (target_read_memory (bfd_section_vma (obfd, osec) + offset,
|
||||
- memhunk, size) != 0)
|
||||
+ memhunk, size) != 0
|
||||
+ && (strcmp (TARGET_ARCHITECTURE->arch_name, "ia64")
|
||||
+ || bfd_section_vma (obfd, osec) != 0))
|
||||
{
|
||||
warning (_("Memory read failed for corefile section, %s bytes at 0x%s."),
|
||||
paddr_d (size), paddr (bfd_section_vma (obfd, osec)));
|
||||
if (!bfd_set_section_contents (obfd, osec, memhunk, 0, size))
|
||||
|
@ -12,10 +12,10 @@ gdb/testsuite:
|
||||
* gdb.arch/ia64-sigill.c: New test.
|
||||
* gdb.arch/ia64-sigill.exp: Ditto.
|
||||
|
||||
Index: gdb-6.5/gdb/testsuite/gdb.arch/ia64-sigill.exp
|
||||
Index: gdb-6.6/gdb/testsuite/gdb.arch/ia64-sigill.exp
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gdb-6.5/gdb/testsuite/gdb.arch/ia64-sigill.exp 2006-07-07 03:16:54.000000000 -0300
|
||||
--- /dev/null
|
||||
+++ gdb-6.6/gdb/testsuite/gdb.arch/ia64-sigill.exp
|
||||
@@ -0,0 +1,59 @@
|
||||
+# Copyright 2005 Free Software Foundation, Inc.
|
||||
+
|
||||
@ -76,10 +76,10 @@ Index: gdb-6.5/gdb/testsuite/gdb.arch/ia64-sigill.exp
|
||||
+gdb_test "handle SIGILL nostop noprint" "SIGILL.*No.*No.*Yes.*" "handle sigill"
|
||||
+gdb_test "run" "Starting program.*ia64-sigill.*\[New thread.*\].*hello world.*Program exited normally." "run to exit"
|
||||
+
|
||||
Index: gdb-6.5/gdb/testsuite/gdb.arch/ia64-sigill.c
|
||||
Index: gdb-6.6/gdb/testsuite/gdb.arch/ia64-sigill.c
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gdb-6.5/gdb/testsuite/gdb.arch/ia64-sigill.c 2006-07-07 03:16:54.000000000 -0300
|
||||
--- /dev/null
|
||||
+++ gdb-6.6/gdb/testsuite/gdb.arch/ia64-sigill.c
|
||||
@@ -0,0 +1,8 @@
|
||||
+#include <stdio.h>
|
||||
+
|
||||
@ -89,25 +89,11 @@ Index: gdb-6.5/gdb/testsuite/gdb.arch/ia64-sigill.c
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
Index: gdb-6.5/gdb/linux-thread-db.c
|
||||
Index: gdb-6.6/gdb/linux-nat.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/linux-thread-db.c 2006-07-07 01:06:36.000000000 -0300
|
||||
+++ gdb-6.5/gdb/linux-thread-db.c 2006-07-07 03:16:54.000000000 -0300
|
||||
@@ -926,7 +926,8 @@ thread_db_wait (ptid_t ptid, struct targ
|
||||
post-processing and bail out early. */
|
||||
return ptid;
|
||||
|
||||
- if (ourstatus->kind == TARGET_WAITKIND_EXITED)
|
||||
+ if (ourstatus->kind == TARGET_WAITKIND_EXITED
|
||||
+ || ourstatus->kind == TARGET_WAITKIND_SIGNALLED)
|
||||
return pid_to_ptid (-1);
|
||||
|
||||
if (ourstatus->kind == TARGET_WAITKIND_STOPPED
|
||||
Index: gdb-6.5/gdb/linux-nat.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/linux-nat.c 2006-07-07 03:03:55.000000000 -0300
|
||||
+++ gdb-6.5/gdb/linux-nat.c 2006-07-07 03:16:54.000000000 -0300
|
||||
@@ -2209,7 +2209,8 @@ retry:
|
||||
--- gdb-6.6.orig/gdb/linux-nat.c
|
||||
+++ gdb-6.6/gdb/linux-nat.c
|
||||
@@ -2241,7 +2241,8 @@ retry:
|
||||
threads can be a bit time-consuming so if we want decent
|
||||
performance with heavily multi-threaded programs, especially when
|
||||
they're using a high frequency timer, we'd better avoid it if we
|
||||
@ -117,7 +103,7 @@ Index: gdb-6.5/gdb/linux-nat.c
|
||||
|
||||
if (WIFSTOPPED (status))
|
||||
{
|
||||
@@ -2220,7 +2221,9 @@ retry:
|
||||
@@ -2252,7 +2253,9 @@ retry:
|
||||
if (!lp->step
|
||||
&& signal_stop_state (signo) == 0
|
||||
&& signal_print_state (signo) == 0
|
||||
|
@ -21,10 +21,10 @@
|
||||
* remote.h: Ditto.
|
||||
* dcache.h: Ditto.
|
||||
|
||||
Index: gdb-6.5/gdb/symfile-mem.c
|
||||
Index: gdb-6.6/gdb/symfile-mem.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/symfile-mem.c 2006-07-11 02:35:34.000000000 -0300
|
||||
+++ gdb-6.5/gdb/symfile-mem.c 2006-07-11 02:35:49.000000000 -0300
|
||||
--- 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 @@
|
||||
#include "elf/common.h"
|
||||
|
||||
@ -49,131 +49,56 @@ Index: gdb-6.5/gdb/symfile-mem.c
|
||||
if (nbfd == NULL)
|
||||
error (_("Failed to read a valid object file image from memory."));
|
||||
|
||||
Index: gdb-6.5/gdb/target.c
|
||||
Index: gdb-6.6/gdb/target.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/target.c 2006-07-11 02:35:49.000000000 -0300
|
||||
+++ gdb-6.5/gdb/target.c 2006-07-11 02:35:49.000000000 -0300
|
||||
@@ -83,8 +83,8 @@ static LONGEST default_xfer_partial (str
|
||||
partial transfers, try either target_read_memory_partial or
|
||||
target_write_memory_partial). */
|
||||
--- 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 *
|
||||
|
||||
-static int target_xfer_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len,
|
||||
- int write);
|
||||
+static int target_xfer_memory (CORE_ADDR memaddr, gdb_byte *myaddr,
|
||||
+ LONGEST len, int write);
|
||||
static void tcomplain (void) ATTR_NORETURN;
|
||||
|
||||
static void init_dummy_target (void);
|
||||
-static int nomemory (CORE_ADDR, char *, int, int, struct target_ops *);
|
||||
+static LONGEST nomemory (CORE_ADDR, char *, int, int, struct target_ops *);
|
||||
|
||||
@@ -511,8 +511,8 @@ update_current_target (void)
|
||||
de_fault (to_prepare_to_store,
|
||||
static int return_zero (void);
|
||||
|
||||
@@ -284,7 +284,7 @@ target_mourn_inferior (void)
|
||||
observer_notify_mourn_inferior (¤t_target);
|
||||
}
|
||||
|
||||
-static int
|
||||
+static LONGEST
|
||||
nomemory (CORE_ADDR memaddr, char *myaddr, int len, int write,
|
||||
struct target_ops *t)
|
||||
{
|
||||
@@ -517,7 +517,7 @@ update_current_target (void)
|
||||
(void (*) (void))
|
||||
noprocess);
|
||||
- de_fault (deprecated_xfer_memory,
|
||||
de_fault (deprecated_xfer_memory,
|
||||
- (int (*) (CORE_ADDR, gdb_byte *, int, int, struct mem_attrib *, struct target_ops *))
|
||||
+ de_fault (deprecated_xfer_memory,
|
||||
+ (LONGEST (*) (CORE_ADDR, gdb_byte *, LONGEST, int, struct mem_attrib *, struct target_ops *))
|
||||
nomemory);
|
||||
de_fault (to_files_info,
|
||||
(void (*) (struct target_ops *))
|
||||
@@ -940,7 +940,7 @@ target_xfer_partial (struct target_ops *
|
||||
implementing another singluar mechanism (for instance, a generic
|
||||
object:annex onto inferior:object:annex say). */
|
||||
|
||||
-static LONGEST
|
||||
+static int
|
||||
xfer_using_stratum (enum target_object object, const char *annex,
|
||||
ULONGEST offset, LONGEST len, void *readbuf,
|
||||
const void *writebuf)
|
||||
@@ -1005,7 +1005,7 @@ xfer_using_stratum (enum target_object o
|
||||
deal with partial reads should call target_read_memory_partial. */
|
||||
@@ -1178,7 +1178,7 @@ target_xfer_partial (struct target_ops *
|
||||
it makes no progress, and then return how much was transferred). */
|
||||
|
||||
int
|
||||
-target_read_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len)
|
||||
+target_read_memory (CORE_ADDR memaddr, gdb_byte *myaddr, LONGEST len)
|
||||
{
|
||||
if (target_xfer_partial_p ())
|
||||
return xfer_using_stratum (TARGET_OBJECT_MEMORY, NULL,
|
||||
@@ -1015,7 +1015,7 @@ target_read_memory (CORE_ADDR memaddr, g
|
||||
if (target_read (¤t_target, TARGET_OBJECT_MEMORY, NULL,
|
||||
myaddr, memaddr, len) == len)
|
||||
@@ -1188,7 +1188,7 @@ target_read_memory (CORE_ADDR memaddr, g
|
||||
}
|
||||
|
||||
int
|
||||
-target_write_memory (CORE_ADDR memaddr, const gdb_byte *myaddr, int len)
|
||||
+target_write_memory (CORE_ADDR memaddr, const gdb_byte *myaddr, LONGEST len)
|
||||
{
|
||||
gdb_byte *bytes = alloca (len);
|
||||
memcpy (bytes, myaddr, len);
|
||||
@@ -1056,11 +1056,11 @@ Mode for reading from readonly sections
|
||||
|
||||
Result is -1 on error, or the number of bytes transfered. */
|
||||
|
||||
-int
|
||||
-do_xfer_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len, int write,
|
||||
+LONGEST
|
||||
+do_xfer_memory (CORE_ADDR memaddr, gdb_byte *myaddr, LONGEST len, int write,
|
||||
struct mem_attrib *attrib)
|
||||
{
|
||||
- int res;
|
||||
+ LONGEST res;
|
||||
int done = 0;
|
||||
struct target_ops *t;
|
||||
|
||||
@@ -1118,10 +1118,11 @@ do_xfer_memory (CORE_ADDR memaddr, gdb_b
|
||||
Result is 0 or errno value. */
|
||||
|
||||
static int
|
||||
-target_xfer_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len, int write)
|
||||
+target_xfer_memory (CORE_ADDR memaddr, gdb_byte *myaddr,
|
||||
+ LONGEST len, int write)
|
||||
{
|
||||
- int res;
|
||||
- int reg_len;
|
||||
+ LONGEST res;
|
||||
+ LONGEST reg_len;
|
||||
struct mem_region *region;
|
||||
|
||||
/* Zero length requests are ok and require no work. */
|
||||
@@ -1192,12 +1193,12 @@ target_xfer_memory (CORE_ADDR memaddr, g
|
||||
If we succeed, set *ERR to zero and return the number of bytes transferred.
|
||||
If we fail, set *ERR to a non-zero errno value, and return -1. */
|
||||
|
||||
-static int
|
||||
-target_xfer_memory_partial (CORE_ADDR memaddr, gdb_byte *myaddr, int len,
|
||||
+static LONGEST
|
||||
+target_xfer_memory_partial (CORE_ADDR memaddr, gdb_byte *myaddr, LONGEST len,
|
||||
int write_p, int *err)
|
||||
{
|
||||
- int res;
|
||||
- int reg_len;
|
||||
+ LONGEST res;
|
||||
+ LONGEST reg_len;
|
||||
struct mem_region *region;
|
||||
|
||||
/* Zero length requests are ok and require no work. */
|
||||
@@ -1256,9 +1257,9 @@ target_xfer_memory_partial (CORE_ADDR me
|
||||
return res;
|
||||
}
|
||||
|
||||
-int
|
||||
+LONGEST
|
||||
target_read_memory_partial (CORE_ADDR memaddr, gdb_byte *buf,
|
||||
- int len, int *err)
|
||||
+ LONGEST len, int *err)
|
||||
{
|
||||
if (target_xfer_partial_p ())
|
||||
{
|
||||
@@ -1285,9 +1286,9 @@ target_read_memory_partial (CORE_ADDR me
|
||||
return target_xfer_memory_partial (memaddr, buf, len, 0, err);
|
||||
}
|
||||
|
||||
-int
|
||||
+LONGEST
|
||||
target_write_memory_partial (CORE_ADDR memaddr, gdb_byte *buf,
|
||||
- int len, int *err)
|
||||
+ LONGEST len, int *err)
|
||||
{
|
||||
if (target_xfer_partial_p ())
|
||||
{
|
||||
@@ -2044,8 +2045,8 @@ debug_to_prepare_to_store (void)
|
||||
if (target_write (¤t_target, TARGET_OBJECT_MEMORY, NULL,
|
||||
myaddr, memaddr, len) == len)
|
||||
@@ -2186,8 +2186,8 @@ debug_to_prepare_to_store (void)
|
||||
fprintf_unfiltered (gdb_stdlog, "target_prepare_to_store ()\n");
|
||||
}
|
||||
|
||||
@ -184,7 +109,7 @@ Index: gdb-6.5/gdb/target.c
|
||||
int write, struct mem_attrib *attrib,
|
||||
struct target_ops *target)
|
||||
{
|
||||
@@ -2055,9 +2056,9 @@ deprecated_debug_xfer_memory (CORE_ADDR
|
||||
@@ -2197,9 +2197,9 @@ deprecated_debug_xfer_memory (CORE_ADDR
|
||||
attrib, target);
|
||||
|
||||
fprintf_unfiltered (gdb_stdlog,
|
||||
@ -196,11 +121,11 @@ Index: gdb-6.5/gdb/target.c
|
||||
|
||||
if (retval > 0)
|
||||
{
|
||||
Index: gdb-6.5/gdb/target.h
|
||||
Index: gdb-6.6/gdb/target.h
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/target.h 2006-07-11 02:35:48.000000000 -0300
|
||||
+++ gdb-6.5/gdb/target.h 2006-07-11 02:35:49.000000000 -0300
|
||||
@@ -332,10 +332,10 @@ struct target_ops
|
||||
--- 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
|
||||
NOTE: cagney/2004-10-01: This has been entirely superseeded by
|
||||
to_xfer_partial and inferior inheritance. */
|
||||
|
||||
@ -215,15 +140,7 @@ Index: gdb-6.5/gdb/target.h
|
||||
|
||||
void (*to_files_info) (struct target_ops *);
|
||||
int (*to_insert_breakpoint) (struct bp_target_info *);
|
||||
@@ -535,21 +535,23 @@ extern void target_disconnect (char *, i
|
||||
|
||||
extern DCACHE *target_dcache;
|
||||
|
||||
-extern int do_xfer_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len,
|
||||
- int write, struct mem_attrib *attrib);
|
||||
+extern LONGEST do_xfer_memory (CORE_ADDR memaddr, gdb_byte *myaddr,
|
||||
+ LONGEST len, int write,
|
||||
+ struct mem_attrib *attrib);
|
||||
@@ -605,16 +605,17 @@ extern DCACHE *target_dcache;
|
||||
|
||||
extern int target_read_string (CORE_ADDR, char **, int, int *);
|
||||
|
||||
@ -245,29 +162,13 @@ Index: gdb-6.5/gdb/target.h
|
||||
+extern LONGEST child_xfer_memory (CORE_ADDR, gdb_byte *, LONGEST, int,
|
||||
+ struct mem_attrib *, struct target_ops *);
|
||||
|
||||
/* Make a single attempt at transfering LEN bytes. On a successful
|
||||
transfer, the number of bytes actually transfered is returned and
|
||||
@@ -557,11 +559,11 @@ extern int child_xfer_memory (CORE_ADDR,
|
||||
of bytes actually transfered is not defined) and ERR is set to a
|
||||
non-zero error indication. */
|
||||
|
||||
-extern int target_read_memory_partial (CORE_ADDR addr, gdb_byte *buf,
|
||||
- int len, int *err);
|
||||
+extern LONGEST target_read_memory_partial (CORE_ADDR addr, gdb_byte *buf,
|
||||
+ LONGEST len, int *err);
|
||||
|
||||
-extern int target_write_memory_partial (CORE_ADDR addr, gdb_byte *buf,
|
||||
- int len, int *err);
|
||||
+extern LONGEST target_write_memory_partial (CORE_ADDR addr, gdb_byte *buf,
|
||||
+ LONGEST len, int *err);
|
||||
|
||||
extern char *child_pid_to_exec_file (int);
|
||||
|
||||
Index: gdb-6.5/gdb/infptrace.c
|
||||
/* 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
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/infptrace.c 2006-07-11 02:35:49.000000000 -0300
|
||||
+++ gdb-6.5/gdb/infptrace.c 2006-07-11 02:35:49.000000000 -0300
|
||||
@@ -368,17 +368,17 @@ store_inferior_registers (int regnum)
|
||||
--- 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. */
|
||||
|
||||
@ -291,11 +192,11 @@ Index: gdb-6.5/gdb/infptrace.c
|
||||
PTRACE_TYPE_RET *buffer;
|
||||
struct cleanup *old_chain = NULL;
|
||||
|
||||
Index: gdb-6.5/gdb/dcache.c
|
||||
Index: gdb-6.6/gdb/dcache.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/dcache.c 2006-07-11 02:35:34.000000000 -0300
|
||||
+++ gdb-6.5/gdb/dcache.c 2006-07-11 02:35:49.000000000 -0300
|
||||
@@ -527,9 +527,9 @@ dcache_free (DCACHE *dcache)
|
||||
--- 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)
|
||||
|
||||
This routine is indended to be called by remote_xfer_ functions. */
|
||||
|
||||
@ -307,10 +208,10 @@ Index: gdb-6.5/gdb/dcache.c
|
||||
{
|
||||
int i;
|
||||
int (*xfunc) (DCACHE *dcache, CORE_ADDR addr, gdb_byte *ptr);
|
||||
Index: gdb-6.5/gdb/dcache.h
|
||||
Index: gdb-6.6/gdb/dcache.h
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/dcache.h 2006-07-11 02:35:34.000000000 -0300
|
||||
+++ gdb-6.5/gdb/dcache.h 2006-07-11 02:35:49.000000000 -0300
|
||||
--- 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 *);
|
||||
|
||||
/* Simple to call from <remote>_xfer_memory */
|
||||
@ -321,11 +222,11 @@ Index: gdb-6.5/gdb/dcache.h
|
||||
+ LONGEST len, int should_write);
|
||||
|
||||
#endif /* DCACHE_H */
|
||||
Index: gdb-6.5/gdb/exec.c
|
||||
Index: gdb-6.6/gdb/exec.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/exec.c 2006-07-11 02:35:34.000000000 -0300
|
||||
+++ gdb-6.5/gdb/exec.c 2006-07-11 02:35:49.000000000 -0300
|
||||
@@ -447,8 +447,8 @@ map_vmap (bfd *abfd, bfd *arch)
|
||||
--- 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)
|
||||
The same routine is used to handle both core and exec files;
|
||||
we just tail-call it with more arguments to select between them. */
|
||||
|
||||
@ -336,11 +237,11 @@ Index: gdb-6.5/gdb/exec.c
|
||||
struct mem_attrib *attrib, struct target_ops *target)
|
||||
{
|
||||
int res;
|
||||
Index: gdb-6.5/gdb/linux-nat.c
|
||||
Index: gdb-6.6/gdb/linux-nat.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/linux-nat.c 2006-07-11 02:35:49.000000000 -0300
|
||||
+++ gdb-6.5/gdb/linux-nat.c 2006-07-11 02:36:39.000000000 -0300
|
||||
@@ -3264,7 +3264,7 @@ linux_xfer_partial (struct target_ops *o
|
||||
--- 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
|
||||
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. */
|
||||
@ -349,10 +250,10 @@ Index: gdb-6.5/gdb/linux-nat.c
|
||||
|
||||
/* Re-read register stack area. */
|
||||
xxfer = super_xfer_partial (ops, object, annex,
|
||||
Index: gdb-6.5/gdb/remote.c
|
||||
Index: gdb-6.6/gdb/remote.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/remote.c 2006-07-11 02:35:48.000000000 -0300
|
||||
+++ gdb-6.5/gdb/remote.c 2006-07-11 02:37:02.000000000 -0300
|
||||
--- 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 @@
|
||||
#include "gdb_string.h"
|
||||
#include <ctype.h>
|
||||
@ -361,7 +262,7 @@ Index: gdb-6.5/gdb/remote.c
|
||||
#include "inferior.h"
|
||||
#include "bfd.h"
|
||||
#include "symfile.h"
|
||||
@@ -3701,19 +3702,27 @@ remote_read_bytes (CORE_ADDR memaddr, gd
|
||||
@@ -4185,19 +4186,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. */
|
||||
|
||||
@ -372,8 +273,6 @@ Index: gdb-6.5/gdb/remote.c
|
||||
int should_write, struct mem_attrib *attrib,
|
||||
struct target_ops *target)
|
||||
{
|
||||
CORE_ADDR targ_addr;
|
||||
int targ_len;
|
||||
int res;
|
||||
+ int len;
|
||||
+
|
||||
@ -384,28 +283,21 @@ Index: gdb-6.5/gdb/remote.c
|
||||
+
|
||||
+ len = (int)mem_len;
|
||||
|
||||
/* Should this be the selected frame? */
|
||||
gdbarch_remote_translate_xfer_address (current_gdbarch,
|
||||
current_regcache,
|
||||
- mem_addr, mem_len,
|
||||
+ mem_addr, len,
|
||||
&targ_addr, &targ_len);
|
||||
if (targ_len <= 0)
|
||||
return 0;
|
||||
@@ -3723,7 +3732,7 @@ remote_xfer_memory (CORE_ADDR mem_addr,
|
||||
if (should_write)
|
||||
res = remote_write_bytes (mem_addr, buffer, mem_len);
|
||||
else
|
||||
res = remote_read_bytes (targ_addr, buffer, targ_len);
|
||||
res = remote_read_bytes (mem_addr, buffer, mem_len);
|
||||
|
||||
- return res;
|
||||
+ return (LONGEST)res;
|
||||
}
|
||||
|
||||
static void
|
||||
Index: gdb-6.5/gdb/remote-sim.c
|
||||
/* Sends a packet with content determined by the printf format string
|
||||
Index: gdb-6.6/gdb/remote-sim.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/remote-sim.c 2006-07-11 02:35:34.000000000 -0300
|
||||
+++ gdb-6.5/gdb/remote-sim.c 2006-07-11 02:35:49.000000000 -0300
|
||||
@@ -742,11 +742,14 @@ gdbsim_prepare_to_store (void)
|
||||
--- 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)
|
||||
|
||||
Returns the number of bytes transferred. */
|
||||
|
||||
@ -419,10 +311,10 @@ Index: gdb-6.5/gdb/remote-sim.c
|
||||
+ /* Convert to len type that sim_read and sim_write can handle. */
|
||||
+ int xfer_len = (int)len;
|
||||
+
|
||||
if (!program_loaded)
|
||||
error (_("No program loaded."));
|
||||
|
||||
@@ -756,22 +759,22 @@ gdbsim_xfer_inferior_memory (CORE_ADDR m
|
||||
/* 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
|
||||
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",
|
||||
|
@ -1,7 +1,7 @@
|
||||
Index: gdb-6.5/gdb/doc/observer.texi
|
||||
Index: gdb-6.6/gdb/doc/observer.texi
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/doc/observer.texi 2006-07-07 04:08:37.000000000 -0300
|
||||
+++ gdb-6.5/gdb/doc/observer.texi 2006-07-07 04:19:00.000000000 -0300
|
||||
--- gdb-6.6.orig/gdb/doc/observer.texi
|
||||
+++ gdb-6.6/gdb/doc/observer.texi
|
||||
@@ -119,6 +119,10 @@ when @value{GDBN} calls this observer, t
|
||||
haven't been loaded yet.
|
||||
@end deftypefun
|
||||
@ -13,11 +13,11 @@ Index: gdb-6.5/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.5/gdb/linux-nat.c
|
||||
Index: gdb-6.6/gdb/linux-nat.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/linux-nat.c 2006-07-07 04:00:05.000000000 -0300
|
||||
+++ gdb-6.5/gdb/linux-nat.c 2006-07-07 04:20:40.000000000 -0300
|
||||
@@ -802,11 +802,23 @@ iterate_over_lwps (int (*callback) (stru
|
||||
--- gdb-6.6.orig/gdb/linux-nat.c
|
||||
+++ gdb-6.6/gdb/linux-nat.c
|
||||
@@ -803,11 +803,23 @@ iterate_over_lwps (int (*callback) (stru
|
||||
{
|
||||
struct lwp_info *lp, *lpnext;
|
||||
|
||||
@ -72,19 +72,19 @@ Index: gdb-6.5/gdb/linux-nat.c
|
||||
/* Save the original signal mask. */
|
||||
sigprocmask (SIG_SETMASK, NULL, &normal_mask);
|
||||
|
||||
Index: gdb-6.5/gdb/target.c
|
||||
Index: gdb-6.6/gdb/target.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/target.c 2006-07-07 03:52:38.000000000 -0300
|
||||
+++ gdb-6.5/gdb/target.c 2006-07-07 04:19:00.000000000 -0300
|
||||
@@ -39,6 +39,7 @@
|
||||
#include "regcache.h"
|
||||
--- gdb-6.6.orig/gdb/target.c
|
||||
+++ gdb-6.6/gdb/target.c
|
||||
@@ -40,6 +40,7 @@
|
||||
#include "gdb_assert.h"
|
||||
#include "gdbcore.h"
|
||||
#include "exceptions.h"
|
||||
+#include "observer.h"
|
||||
|
||||
static void target_info (char *, int);
|
||||
|
||||
@@ -267,6 +268,13 @@ target_load (char *arg, int from_tty)
|
||||
@@ -276,6 +277,13 @@ target_load (char *arg, int from_tty)
|
||||
(*current_target.to_load) (arg, from_tty);
|
||||
}
|
||||
|
||||
@ -98,11 +98,11 @@ Index: gdb-6.5/gdb/target.c
|
||||
static int
|
||||
nomemory (CORE_ADDR memaddr, char *myaddr, int len, int write,
|
||||
struct target_ops *t)
|
||||
Index: gdb-6.5/gdb/target.h
|
||||
Index: gdb-6.6/gdb/target.h
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/target.h 2006-07-07 03:52:40.000000000 -0300
|
||||
+++ gdb-6.5/gdb/target.h 2006-07-07 04:19:00.000000000 -0300
|
||||
@@ -783,8 +783,7 @@ int target_follow_fork (int follow_child
|
||||
--- gdb-6.6.orig/gdb/target.h
|
||||
+++ gdb-6.6/gdb/target.h
|
||||
@@ -891,8 +891,7 @@ int target_follow_fork (int follow_child
|
||||
|
||||
/* The inferior process has died. Do what is right. */
|
||||
|
||||
|
@ -1,8 +1,8 @@
|
||||
Index: gdb-6.5/gdb/dwarf2read.c
|
||||
Index: gdb-6.6/gdb/dwarf2read.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/dwarf2read.c 2006-07-11 02:47:11.000000000 -0300
|
||||
+++ gdb-6.5/gdb/dwarf2read.c 2006-07-11 02:56:58.000000000 -0300
|
||||
@@ -1208,7 +1208,7 @@ dwarf2_build_psymtabs (struct objfile *o
|
||||
--- gdb-6.6.orig/gdb/dwarf2read.c
|
||||
+++ gdb-6.6/gdb/dwarf2read.c
|
||||
@@ -1219,7 +1219,7 @@ dwarf2_build_psymtabs (struct objfile *o
|
||||
else
|
||||
dwarf2_per_objfile->loc_buffer = NULL;
|
||||
|
||||
@ -11,11 +11,11 @@ Index: gdb-6.5/gdb/dwarf2read.c
|
||||
|| (objfile->global_psymbols.size == 0
|
||||
&& objfile->static_psymbols.size == 0))
|
||||
{
|
||||
Index: gdb-6.5/gdb/auxv.c
|
||||
Index: gdb-6.6/gdb/auxv.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/auxv.c 2006-07-11 02:47:06.000000000 -0300
|
||||
+++ gdb-6.5/gdb/auxv.c 2006-07-11 02:47:11.000000000 -0300
|
||||
@@ -119,7 +119,7 @@ target_auxv_read (struct target_ops *ops
|
||||
--- gdb-6.6.orig/gdb/auxv.c
|
||||
+++ gdb-6.6/gdb/auxv.c
|
||||
@@ -82,7 +82,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.5/gdb/auxv.c
|
||||
{
|
||||
const int sizeof_auxv_field = TYPE_LENGTH (builtin_type_void_data_ptr);
|
||||
gdb_byte *ptr = *readptr;
|
||||
@@ -144,9 +144,10 @@ target_auxv_parse (struct target_ops *op
|
||||
@@ -107,9 +107,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
|
||||
@ -35,9 +35,9 @@ Index: gdb-6.5/gdb/auxv.c
|
||||
+ CORE_ADDR val;
|
||||
+ ULONGEST at_type;
|
||||
gdb_byte *data;
|
||||
int n = target_auxv_read (ops, &data);
|
||||
LONGEST n = target_read_alloc (ops, TARGET_OBJECT_AUXV, NULL, &data);
|
||||
gdb_byte *ptr = data;
|
||||
@@ -156,10 +157,10 @@ target_auxv_search (struct target_ops *o
|
||||
@@ -119,10 +120,10 @@ target_auxv_search (struct target_ops *o
|
||||
return n;
|
||||
|
||||
while (1)
|
||||
@ -50,7 +50,7 @@ Index: gdb-6.5/gdb/auxv.c
|
||||
{
|
||||
xfree (data);
|
||||
*valp = val;
|
||||
@@ -182,7 +183,8 @@ target_auxv_search (struct target_ops *o
|
||||
@@ -145,7 +146,8 @@ target_auxv_search (struct target_ops *o
|
||||
int
|
||||
fprint_target_auxv (struct ui_file *file, struct target_ops *ops)
|
||||
{
|
||||
@ -58,9 +58,9 @@ Index: gdb-6.5/gdb/auxv.c
|
||||
+ CORE_ADDR val;
|
||||
+ ULONGEST at_type;
|
||||
gdb_byte *data;
|
||||
int len = target_auxv_read (ops, &data);
|
||||
gdb_byte *ptr = data;
|
||||
@@ -191,14 +193,14 @@ fprint_target_auxv (struct ui_file *file
|
||||
LONGEST len = target_read_alloc (ops, TARGET_OBJECT_AUXV, NULL,
|
||||
&data);
|
||||
@@ -155,14 +157,14 @@ fprint_target_auxv (struct ui_file *file
|
||||
if (len <= 0)
|
||||
return len;
|
||||
|
||||
@ -77,7 +77,7 @@ Index: gdb-6.5/gdb/auxv.c
|
||||
{
|
||||
#define TAG(tag, text, kind) \
|
||||
case tag: name = #tag; description = text; flavor = kind; break
|
||||
@@ -249,7 +251,7 @@ fprint_target_auxv (struct ui_file *file
|
||||
@@ -213,7 +215,7 @@ fprint_target_auxv (struct ui_file *file
|
||||
}
|
||||
|
||||
fprintf_filtered (file, "%-4s %-20s %-30s ",
|
||||
@ -86,11 +86,11 @@ Index: gdb-6.5/gdb/auxv.c
|
||||
switch (flavor)
|
||||
{
|
||||
case dec:
|
||||
Index: gdb-6.5/gdb/auxv.h
|
||||
Index: gdb-6.6/gdb/auxv.h
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/auxv.h 2006-07-11 02:47:06.000000000 -0300
|
||||
+++ gdb-6.5/gdb/auxv.h 2006-07-11 02:47:11.000000000 -0300
|
||||
@@ -43,14 +43,14 @@ extern LONGEST target_auxv_read (struct
|
||||
--- gdb-6.6.orig/gdb/auxv.h
|
||||
+++ gdb-6.6/gdb/auxv.h
|
||||
@@ -37,14 +37,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,10 +107,10 @@ Index: gdb-6.5/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.5/gdb/breakpoint.h
|
||||
Index: gdb-6.6/gdb/breakpoint.h
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/breakpoint.h 2006-07-11 02:47:06.000000000 -0300
|
||||
+++ gdb-6.5/gdb/breakpoint.h 2006-07-11 02:47:11.000000000 -0300
|
||||
--- gdb-6.6.orig/gdb/breakpoint.h
|
||||
+++ gdb-6.6/gdb/breakpoint.h
|
||||
@@ -159,6 +159,7 @@ enum enable_state
|
||||
automatically enabled and reset when the call
|
||||
"lands" (either completes, or stops at another
|
||||
@ -132,10 +132,10 @@ Index: gdb-6.5/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.5/gdb/symfile-mem.c
|
||||
Index: gdb-6.6/gdb/symfile-mem.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/symfile-mem.c 2006-07-11 02:47:06.000000000 -0300
|
||||
+++ gdb-6.5/gdb/symfile-mem.c 2006-07-11 02:56:55.000000000 -0300
|
||||
--- 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
|
||||
}
|
||||
|
||||
@ -145,11 +145,11 @@ Index: gdb-6.5/gdb/symfile-mem.c
|
||||
|
||||
/* This might change our ideas about frames already looked at. */
|
||||
reinit_frame_cache ();
|
||||
Index: gdb-6.5/gdb/infrun.c
|
||||
Index: gdb-6.6/gdb/infrun.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/infrun.c 2006-07-11 02:47:06.000000000 -0300
|
||||
+++ gdb-6.5/gdb/infrun.c 2006-07-11 02:56:58.000000000 -0300
|
||||
@@ -2230,6 +2230,11 @@ process_event_stop_test:
|
||||
--- gdb-6.6.orig/gdb/infrun.c
|
||||
+++ gdb-6.6/gdb/infrun.c
|
||||
@@ -2249,6 +2249,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.5/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.5/gdb/objfiles.c
|
||||
Index: gdb-6.6/gdb/objfiles.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/objfiles.c 2006-07-11 02:47:06.000000000 -0300
|
||||
+++ gdb-6.5/gdb/objfiles.c 2006-07-11 02:47:11.000000000 -0300
|
||||
@@ -47,6 +47,9 @@
|
||||
--- gdb-6.6.orig/gdb/objfiles.c
|
||||
+++ gdb-6.6/gdb/objfiles.c
|
||||
@@ -50,6 +50,9 @@
|
||||
#include "dictionary.h"
|
||||
#include "source.h"
|
||||
|
||||
@ -175,7 +175,7 @@ Index: gdb-6.5/gdb/objfiles.c
|
||||
/* Prototypes for local functions */
|
||||
|
||||
static void objfile_alloc_data (struct objfile *objfile);
|
||||
@@ -258,7 +261,19 @@ init_entry_point_info (struct objfile *o
|
||||
@@ -261,7 +264,19 @@ init_entry_point_info (struct objfile *o
|
||||
CORE_ADDR
|
||||
entry_point_address (void)
|
||||
{
|
||||
@ -196,10 +196,10 @@ Index: gdb-6.5/gdb/objfiles.c
|
||||
}
|
||||
|
||||
/* Create the terminating entry of OBJFILE's minimal symbol table.
|
||||
Index: gdb-6.5/gdb/solib-svr4.c
|
||||
Index: gdb-6.6/gdb/solib-svr4.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/solib-svr4.c 2006-07-11 02:47:06.000000000 -0300
|
||||
+++ gdb-6.5/gdb/solib-svr4.c 2006-07-11 02:47:11.000000000 -0300
|
||||
--- gdb-6.6.orig/gdb/solib-svr4.c
|
||||
+++ gdb-6.6/gdb/solib-svr4.c
|
||||
@@ -34,6 +34,8 @@
|
||||
#include "gdbcore.h"
|
||||
#include "target.h"
|
||||
@ -209,7 +209,7 @@ Index: gdb-6.5/gdb/solib-svr4.c
|
||||
|
||||
#include "gdb_assert.h"
|
||||
|
||||
@@ -254,7 +256,9 @@ static CORE_ADDR breakpoint_addr; /* Add
|
||||
@@ -267,7 +269,9 @@ static char *debug_loader_name;
|
||||
|
||||
/* Local function prototypes */
|
||||
|
||||
@ -219,7 +219,7 @@ Index: gdb-6.5/gdb/solib-svr4.c
|
||||
|
||||
static CORE_ADDR bfd_lookup_symbol (bfd *, char *, flagword);
|
||||
|
||||
@@ -376,22 +380,79 @@ elf_locate_base (void)
|
||||
@@ -389,22 +393,79 @@ elf_locate_base (void)
|
||||
{
|
||||
struct bfd_section *dyninfo_sect;
|
||||
int dyninfo_sect_size;
|
||||
@ -303,7 +303,7 @@ Index: gdb-6.5/gdb/solib-svr4.c
|
||||
|
||||
/* Find the DT_DEBUG entry in the the .dynamic section.
|
||||
For mips elf we look for DT_MIPS_RLD_MAP, mips elf apparently has
|
||||
@@ -418,6 +479,10 @@ elf_locate_base (void)
|
||||
@@ -431,6 +492,10 @@ elf_locate_base (void)
|
||||
{
|
||||
dyn_ptr = bfd_h_get_32 (exec_bfd,
|
||||
(bfd_byte *) x_dynp->d_un.d_ptr);
|
||||
@ -314,7 +314,7 @@ Index: gdb-6.5/gdb/solib-svr4.c
|
||||
return dyn_ptr;
|
||||
}
|
||||
else if (dyn_tag == DT_MIPS_RLD_MAP)
|
||||
@@ -543,6 +608,10 @@ solib_svr4_r_map (void)
|
||||
@@ -556,6 +621,10 @@ solib_svr4_r_map (void)
|
||||
{
|
||||
struct link_map_offsets *lmo = svr4_fetch_link_map_offsets ();
|
||||
|
||||
@ -325,7 +325,7 @@ Index: gdb-6.5/gdb/solib-svr4.c
|
||||
return read_memory_typed_address (debug_base + lmo->r_map_offset,
|
||||
builtin_type_void_data_ptr);
|
||||
}
|
||||
@@ -669,6 +738,11 @@ svr4_current_sos (void)
|
||||
@@ -713,6 +782,11 @@ svr4_current_sos (void)
|
||||
struct so_list **link_ptr = &head;
|
||||
CORE_ADDR ldsomap = 0;
|
||||
|
||||
@ -337,17 +337,17 @@ Index: gdb-6.5/gdb/solib-svr4.c
|
||||
/* Make sure we've looked up the inferior's dynamic linker's base
|
||||
structure. */
|
||||
if (! debug_base)
|
||||
@@ -678,11 +752,21 @@ svr4_current_sos (void)
|
||||
@@ -722,11 +796,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)
|
||||
- return 0;
|
||||
- return svr4_default_sos ();
|
||||
+ {
|
||||
+ if (debug_solib)
|
||||
+ fprintf_unfiltered (gdb_stdlog,
|
||||
+ "svr4_current_sos: no DT_DEBUG found in %s -- return now\n",
|
||||
+ exec_bfd->filename);
|
||||
+ return 0;
|
||||
+ return svr4_default_sos ();
|
||||
+ }
|
||||
}
|
||||
|
||||
@ -358,9 +358,9 @@ Index: gdb-6.5/gdb/solib-svr4.c
|
||||
+ "svr4_current_sos: walk link map in %s\n",
|
||||
+ exec_bfd->filename);
|
||||
lm = solib_svr4_r_map ();
|
||||
|
||||
while (lm)
|
||||
{
|
||||
@@ -697,23 +781,103 @@ svr4_current_sos (void)
|
||||
@@ -742,23 +826,103 @@ svr4_current_sos (void)
|
||||
new->lm_info->lm = xzalloc (lmo->link_map_size);
|
||||
make_cleanup (xfree, new->lm_info->lm);
|
||||
|
||||
@ -465,7 +465,7 @@ Index: gdb-6.5/gdb/solib-svr4.c
|
||||
target_read_string (LM_NAME (new), &buffer,
|
||||
SO_NAME_MAX_PATH_SIZE - 1, &errcode);
|
||||
if (errcode != 0)
|
||||
@@ -721,22 +885,37 @@ svr4_current_sos (void)
|
||||
@@ -766,22 +930,37 @@ svr4_current_sos (void)
|
||||
safe_strerror (errcode));
|
||||
else
|
||||
{
|
||||
@ -519,9 +519,9 @@ Index: gdb-6.5/gdb/solib-svr4.c
|
||||
}
|
||||
}
|
||||
|
||||
@@ -750,6 +929,11 @@ svr4_current_sos (void)
|
||||
discard_cleanups (old_chain);
|
||||
}
|
||||
@@ -798,6 +977,11 @@ svr4_current_sos (void)
|
||||
if (head == NULL)
|
||||
return svr4_default_sos ();
|
||||
|
||||
+ if (debug_solib)
|
||||
+ fprintf_unfiltered (gdb_stdlog,
|
||||
@ -531,7 +531,7 @@ Index: gdb-6.5/gdb/solib-svr4.c
|
||||
return head;
|
||||
}
|
||||
|
||||
@@ -826,7 +1010,7 @@ svr4_fetch_objfile_link_map (struct objf
|
||||
@@ -874,7 +1058,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 +540,7 @@ Index: gdb-6.5/gdb/solib-svr4.c
|
||||
static int
|
||||
match_main (char *soname)
|
||||
{
|
||||
@@ -840,6 +1024,7 @@ match_main (char *soname)
|
||||
@@ -888,6 +1072,7 @@ match_main (char *soname)
|
||||
|
||||
return (0);
|
||||
}
|
||||
@ -548,7 +548,7 @@ Index: gdb-6.5/gdb/solib-svr4.c
|
||||
|
||||
/* Return 1 if PC lies in the dynamic symbol resolution code of the
|
||||
SVR4 run time loader. */
|
||||
@@ -939,6 +1124,11 @@ enable_break (void)
|
||||
@@ -987,6 +1172,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 +560,7 @@ Index: gdb-6.5/gdb/solib-svr4.c
|
||||
if (interp_sect)
|
||||
{
|
||||
unsigned int interp_sect_size;
|
||||
@@ -972,6 +1162,9 @@ enable_break (void)
|
||||
@@ -1025,6 +1215,9 @@ enable_break (void)
|
||||
if (tmp_fd >= 0)
|
||||
tmp_bfd = bfd_fopen (tmp_pathname, gnutarget, FOPEN_RB, tmp_fd);
|
||||
|
||||
@ -570,7 +570,7 @@ Index: gdb-6.5/gdb/solib-svr4.c
|
||||
if (tmp_bfd == NULL)
|
||||
goto bkpt_at_symbol;
|
||||
|
||||
@@ -1052,6 +1245,9 @@ enable_break (void)
|
||||
@@ -1111,6 +1304,9 @@ enable_break (void)
|
||||
if (sym_addr != 0)
|
||||
{
|
||||
create_solib_event_breakpoint (load_addr + sym_addr);
|
||||
@ -580,7 +580,7 @@ Index: gdb-6.5/gdb/solib-svr4.c
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -1311,6 +1507,8 @@ svr4_solib_create_inferior_hook (void)
|
||||
@@ -1372,6 +1568,8 @@ svr4_solib_create_inferior_hook (void)
|
||||
while (stop_signal != TARGET_SIGNAL_TRAP);
|
||||
stop_soon = NO_STOP_QUIETLY;
|
||||
#endif /* defined(_SCO_DS) */
|
||||
@ -589,7 +589,7 @@ Index: gdb-6.5/gdb/solib-svr4.c
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -1493,6 +1691,75 @@ svr4_lp64_fetch_link_map_offsets (void)
|
||||
@@ -1558,6 +1756,75 @@ svr4_lp64_fetch_link_map_offsets (void)
|
||||
|
||||
return lmp;
|
||||
}
|
||||
@ -665,7 +665,7 @@ Index: gdb-6.5/gdb/solib-svr4.c
|
||||
|
||||
|
||||
static struct target_so_ops svr4_so_ops;
|
||||
@@ -1515,4 +1782,8 @@ _initialize_svr4_solib (void)
|
||||
@@ -1580,4 +1847,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,10 +674,10 @@ Index: gdb-6.5/gdb/solib-svr4.c
|
||||
+ "Display the inferior's linkmap.");
|
||||
+
|
||||
}
|
||||
Index: gdb-6.5/gdb/varobj.c
|
||||
Index: gdb-6.6/gdb/varobj.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/varobj.c 2006-07-11 02:47:06.000000000 -0300
|
||||
+++ gdb-6.5/gdb/varobj.c 2006-07-11 02:56:57.000000000 -0300
|
||||
--- gdb-6.6.orig/gdb/varobj.c
|
||||
+++ gdb-6.6/gdb/varobj.c
|
||||
@@ -870,6 +870,62 @@ varobj_list (struct varobj ***varlist)
|
||||
return rootcount;
|
||||
}
|
||||
@ -741,10 +741,10 @@ Index: gdb-6.5/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.5/gdb/solist.h
|
||||
Index: gdb-6.6/gdb/solist.h
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/solist.h 2006-07-11 02:47:06.000000000 -0300
|
||||
+++ gdb-6.5/gdb/solist.h 2006-07-11 02:47:11.000000000 -0300
|
||||
--- gdb-6.6.orig/gdb/solist.h
|
||||
+++ gdb-6.6/gdb/solist.h
|
||||
@@ -62,6 +62,8 @@ struct so_list
|
||||
bfd *abfd;
|
||||
char symbols_loaded; /* flag: symbols read in yet? */
|
||||
@ -777,10 +777,10 @@ Index: gdb-6.5/gdb/solist.h
|
||||
+/* Controls the printing of debugging output. */
|
||||
+extern int debug_solib;
|
||||
#endif
|
||||
Index: gdb-6.5/gdb/varobj.h
|
||||
Index: gdb-6.6/gdb/varobj.h
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/varobj.h 2006-07-11 02:47:06.000000000 -0300
|
||||
+++ gdb-6.5/gdb/varobj.h 2006-07-11 02:47:11.000000000 -0300
|
||||
--- gdb-6.6.orig/gdb/varobj.h
|
||||
+++ gdb-6.6/gdb/varobj.h
|
||||
@@ -99,4 +99,6 @@ extern int varobj_list (struct varobj **
|
||||
|
||||
extern int varobj_update (struct varobj **varp, struct varobj ***changelist);
|
||||
@ -788,10 +788,10 @@ Index: gdb-6.5/gdb/varobj.h
|
||||
+extern void varobj_refresh(void);
|
||||
+
|
||||
#endif /* VAROBJ_H */
|
||||
Index: gdb-6.5/gdb/symfile.c
|
||||
Index: gdb-6.6/gdb/symfile.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/symfile.c 2006-07-11 02:47:06.000000000 -0300
|
||||
+++ gdb-6.5/gdb/symfile.c 2006-07-11 02:56:57.000000000 -0300
|
||||
--- gdb-6.6.orig/gdb/symfile.c
|
||||
+++ gdb-6.6/gdb/symfile.c
|
||||
@@ -49,6 +49,7 @@
|
||||
#include "readline/readline.h"
|
||||
#include "gdb_assert.h"
|
||||
@ -799,8 +799,8 @@ Index: gdb-6.5/gdb/symfile.c
|
||||
+#include "varobj.h"
|
||||
#include "observer.h"
|
||||
#include "exec.h"
|
||||
|
||||
@@ -658,7 +659,7 @@ syms_from_objfile (struct objfile *objfi
|
||||
#include "parser-defs.h"
|
||||
@@ -659,7 +660,7 @@ syms_from_objfile (struct objfile *objfi
|
||||
|
||||
/* Now either addrs or offsets is non-zero. */
|
||||
|
||||
@ -809,7 +809,7 @@ Index: gdb-6.5/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. */
|
||||
@@ -686,7 +687,7 @@ syms_from_objfile (struct objfile *objfi
|
||||
@@ -687,7 +688,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 +818,7 @@ Index: gdb-6.5/gdb/symfile.c
|
||||
{
|
||||
asection *lower_sect;
|
||||
asection *sect;
|
||||
@@ -855,17 +856,21 @@ new_symfile_objfile (struct objfile *obj
|
||||
@@ -856,17 +857,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 +842,7 @@ Index: gdb-6.5/gdb/symfile.c
|
||||
|
||||
/* We're done reading the symbol file; finish off complaints. */
|
||||
clear_complaints (&symfile_complaints, 0, verbo);
|
||||
@@ -908,7 +913,7 @@ symbol_file_add_with_addrs_or_offsets (b
|
||||
@@ -909,7 +914,7 @@ symbol_file_add_with_addrs_or_offsets (b
|
||||
interactively wiping out any existing symbols. */
|
||||
|
||||
if ((have_full_symbols () || have_partial_symbols ())
|
||||
@ -851,7 +851,7 @@ Index: gdb-6.5/gdb/symfile.c
|
||||
&& from_tty
|
||||
&& !query ("Load new symbol table from \"%s\"? ", name))
|
||||
error (_("Not confirmed."));
|
||||
@@ -1089,6 +1094,10 @@ symbol_file_clear (int from_tty)
|
||||
@@ -1090,6 +1095,10 @@ symbol_file_clear (int from_tty)
|
||||
symfile_objfile->name)
|
||||
: !query (_("Discard symbol table? "))))
|
||||
error (_("Not confirmed."));
|
||||
@ -862,7 +862,7 @@ Index: gdb-6.5/gdb/symfile.c
|
||||
free_all_objfiles ();
|
||||
|
||||
/* solib descriptors may have handles to objfiles. Since their
|
||||
@@ -2154,6 +2163,8 @@ reread_symbols (void)
|
||||
@@ -2204,6 +2213,8 @@ reread_symbols (void)
|
||||
/* Discard cleanups as symbol reading was successful. */
|
||||
discard_cleanups (old_cleanups);
|
||||
|
||||
@ -871,19 +871,19 @@ Index: gdb-6.5/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. */
|
||||
@@ -2529,6 +2540,7 @@ clear_symtab_users (void)
|
||||
@@ -2579,6 +2590,7 @@ clear_symtab_users (void)
|
||||
clear_pc_function_cache ();
|
||||
if (deprecated_target_new_objfile_hook)
|
||||
deprecated_target_new_objfile_hook (NULL);
|
||||
+ varobj_refresh ();
|
||||
}
|
||||
|
||||
static void
|
||||
Index: gdb-6.5/gdb/breakpoint.c
|
||||
/* 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
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/breakpoint.c 2006-07-11 02:47:11.000000000 -0300
|
||||
+++ gdb-6.5/gdb/breakpoint.c 2006-07-11 02:56:59.000000000 -0300
|
||||
@@ -782,15 +782,15 @@ insert_watchpoints_for_new_thread (ptid_
|
||||
--- gdb-6.6.orig/gdb/breakpoint.c
|
||||
+++ gdb-6.6/gdb/breakpoint.c
|
||||
@@ -781,15 +781,15 @@ insert_watchpoints_for_new_thread (ptid_
|
||||
struct value *v = b->owner->val_chain;
|
||||
|
||||
/* Look at each value on the value chain. */
|
||||
@ -902,7 +902,7 @@ Index: gdb-6.5/gdb/breakpoint.c
|
||||
|
||||
/* We only watch structs and arrays if user asked
|
||||
for it explicitly, never if they just happen to
|
||||
@@ -802,8 +802,8 @@ insert_watchpoints_for_new_thread (ptid_
|
||||
@@ -801,8 +801,8 @@ insert_watchpoints_for_new_thread (ptid_
|
||||
CORE_ADDR addr;
|
||||
int len, type;
|
||||
|
||||
@ -913,7 +913,7 @@ Index: gdb-6.5/gdb/breakpoint.c
|
||||
type = hw_write;
|
||||
if (b->owner->type == bp_read_watchpoint)
|
||||
type = hw_read;
|
||||
@@ -2680,12 +2680,12 @@ mark_triggered_watchpoints (CORE_ADDR st
|
||||
@@ -2682,12 +2682,12 @@ mark_triggered_watchpoints (CORE_ADDR st
|
||||
|| b->type == bp_read_watchpoint
|
||||
|| b->type == bp_access_watchpoint)
|
||||
{
|
||||
@ -929,7 +929,7 @@ Index: gdb-6.5/gdb/breakpoint.c
|
||||
|
||||
if (v == b->val_chain
|
||||
|| (TYPE_CODE (vtype) != TYPE_CODE_STRUCT
|
||||
@@ -2693,11 +2693,11 @@ mark_triggered_watchpoints (CORE_ADDR st
|
||||
@@ -2695,11 +2695,11 @@ mark_triggered_watchpoints (CORE_ADDR st
|
||||
{
|
||||
CORE_ADDR vaddr;
|
||||
|
||||
@ -943,7 +943,7 @@ Index: gdb-6.5/gdb/breakpoint.c
|
||||
b->watchpoint_triggered = 1;
|
||||
}
|
||||
}
|
||||
@@ -2867,12 +2867,12 @@ bpstat_stop_status (CORE_ADDR bp_addr, p
|
||||
@@ -2869,12 +2869,12 @@ bpstat_stop_status (CORE_ADDR bp_addr, p
|
||||
bs->stop = 0;
|
||||
continue;
|
||||
}
|
||||
@ -959,7 +959,7 @@ Index: gdb-6.5/gdb/breakpoint.c
|
||||
|
||||
if (v == b->val_chain
|
||||
|| (TYPE_CODE (vtype) != TYPE_CODE_STRUCT
|
||||
@@ -2880,11 +2880,11 @@ bpstat_stop_status (CORE_ADDR bp_addr, p
|
||||
@@ -2882,11 +2882,11 @@ bpstat_stop_status (CORE_ADDR bp_addr, p
|
||||
{
|
||||
CORE_ADDR vaddr;
|
||||
|
||||
@ -973,15 +973,15 @@ Index: gdb-6.5/gdb/breakpoint.c
|
||||
must_check_value = 1;
|
||||
}
|
||||
}
|
||||
@@ -3931,6 +3931,7 @@ describe_other_breakpoints (CORE_ADDR pc
|
||||
b->number,
|
||||
@@ -3937,6 +3937,7 @@ describe_other_breakpoints (CORE_ADDR pc
|
||||
printf_filtered ("%s%s ",
|
||||
((b->enable_state == bp_disabled ||
|
||||
b->enable_state == bp_shlib_disabled ||
|
||||
+ b->enable_state == bp_startup_disabled ||
|
||||
b->enable_state == bp_call_disabled)
|
||||
? " (disabled)"
|
||||
: b->enable_state == bp_permanent
|
||||
@@ -4609,6 +4610,62 @@ re_enable_breakpoints_in_shlibs (void)
|
||||
@@ -4615,6 +4616,62 @@ re_enable_breakpoints_in_shlibs (void)
|
||||
}
|
||||
}
|
||||
|
||||
@ -1044,7 +1044,7 @@ Index: gdb-6.5/gdb/breakpoint.c
|
||||
static void
|
||||
solib_load_unload_1 (char *hookname, int tempflag, char *dll_pathname,
|
||||
char *cond_string, enum bptype bp_kind)
|
||||
@@ -6955,6 +7012,7 @@ delete_breakpoint (struct breakpoint *bp
|
||||
@@ -6961,6 +7018,7 @@ delete_breakpoint (struct breakpoint *bp
|
||||
&& !b->loc->duplicate
|
||||
&& b->enable_state != bp_disabled
|
||||
&& b->enable_state != bp_shlib_disabled
|
||||
@ -1052,7 +1052,7 @@ Index: gdb-6.5/gdb/breakpoint.c
|
||||
&& !b->pending
|
||||
&& b->enable_state != bp_call_disabled)
|
||||
{
|
||||
@@ -7170,7 +7228,8 @@ breakpoint_re_set_one (void *bint)
|
||||
@@ -7176,7 +7234,8 @@ breakpoint_re_set_one (void *bint)
|
||||
break;
|
||||
|
||||
save_enable = b->enable_state;
|
||||
@ -1062,10 +1062,10 @@ Index: gdb-6.5/gdb/breakpoint.c
|
||||
b->enable_state = bp_disabled;
|
||||
else
|
||||
/* If resetting a shlib-disabled breakpoint, we don't want to
|
||||
Index: gdb-6.5/gdb/solib.c
|
||||
Index: gdb-6.6/gdb/solib.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/solib.c 2006-07-11 02:47:06.000000000 -0300
|
||||
+++ gdb-6.5/gdb/solib.c 2006-07-11 02:47:11.000000000 -0300
|
||||
--- gdb-6.6.orig/gdb/solib.c
|
||||
+++ gdb-6.6/gdb/solib.c
|
||||
@@ -72,6 +72,8 @@ solib_ops (struct gdbarch *gdbarch)
|
||||
|
||||
/* external data declarations */
|
||||
@ -1084,7 +1084,7 @@ Index: gdb-6.5/gdb/solib.c
|
||||
/*
|
||||
|
||||
GLOBAL FUNCTION
|
||||
@@ -372,7 +376,6 @@ free_so (struct so_list *so)
|
||||
@@ -376,7 +380,6 @@ free_so (struct so_list *so)
|
||||
xfree (so);
|
||||
}
|
||||
|
||||
@ -1092,7 +1092,7 @@ Index: gdb-6.5/gdb/solib.c
|
||||
/* Return address of first so_list entry in master shared object list. */
|
||||
struct so_list *
|
||||
master_so_list (void)
|
||||
@@ -380,7 +383,6 @@ master_so_list (void)
|
||||
@@ -384,7 +387,6 @@ master_so_list (void)
|
||||
return so_list_head;
|
||||
}
|
||||
|
||||
@ -1100,7 +1100,7 @@ Index: gdb-6.5/gdb/solib.c
|
||||
/* A small stub to get us past the arg-passing pinhole of catch_errors. */
|
||||
|
||||
static int
|
||||
@@ -392,15 +394,40 @@ symbol_add_stub (void *arg)
|
||||
@@ -396,15 +398,40 @@ symbol_add_stub (void *arg)
|
||||
/* Have we already loaded this shared object? */
|
||||
ALL_OBJFILES (so->objfile)
|
||||
{
|
||||
@ -1144,7 +1144,7 @@ Index: gdb-6.5/gdb/solib.c
|
||||
free_section_addr_info (sap);
|
||||
|
||||
return (1);
|
||||
@@ -523,6 +550,10 @@ update_solib_list (int from_tty, struct
|
||||
@@ -532,6 +559,10 @@ update_solib_list (int from_tty, struct
|
||||
the inferior's current list. */
|
||||
while (i)
|
||||
{
|
||||
@ -1155,7 +1155,7 @@ Index: gdb-6.5/gdb/solib.c
|
||||
if (! strcmp (gdb->so_original_name, i->so_original_name))
|
||||
break;
|
||||
|
||||
@@ -576,28 +607,7 @@ update_solib_list (int from_tty, struct
|
||||
@@ -585,28 +616,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 +1185,7 @@ Index: gdb-6.5/gdb/solib.c
|
||||
|
||||
/* Notify any observer that the shared object has been
|
||||
loaded now that we've added it to GDB's tables. */
|
||||
@@ -606,6 +616,41 @@ update_solib_list (int from_tty, struct
|
||||
@@ -702,6 +712,41 @@ solib_add (char *pattern, int from_tty,
|
||||
}
|
||||
}
|
||||
|
||||
@ -1225,9 +1225,9 @@ Index: gdb-6.5/gdb/solib.c
|
||||
+ }
|
||||
+}
|
||||
|
||||
/* GLOBAL FUNCTION
|
||||
/*
|
||||
|
||||
@@ -978,4 +1023,12 @@ This takes precedence over the environme
|
||||
@@ -1006,4 +1051,12 @@ This takes precedence over the environme
|
||||
reload_shared_libraries,
|
||||
show_solib_search_path,
|
||||
&setlist, &showlist);
|
||||
@ -1240,10 +1240,10 @@ Index: gdb-6.5/gdb/solib.c
|
||||
+ NULL, NULL,
|
||||
+ &setdebuglist, &showdebuglist);
|
||||
}
|
||||
Index: gdb-6.5/gdb/elfread.c
|
||||
Index: gdb-6.6/gdb/elfread.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/elfread.c 2006-07-11 02:47:06.000000000 -0300
|
||||
+++ gdb-6.5/gdb/elfread.c 2006-07-11 02:47:11.000000000 -0300
|
||||
--- gdb-6.6.orig/gdb/elfread.c
|
||||
+++ gdb-6.6/gdb/elfread.c
|
||||
@@ -556,7 +556,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
|
||||
|
@ -16,10 +16,10 @@
|
||||
(source_command): Update documentation. Check permissions if
|
||||
FROM_TTY is -1.
|
||||
|
||||
Index: gdb-6.5/gdb/cli/cli-cmds.c
|
||||
Index: gdb-6.6/gdb/cli/cli-cmds.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/cli/cli-cmds.c 2006-07-11 03:22:45.000000000 -0300
|
||||
+++ gdb-6.5/gdb/cli/cli-cmds.c 2006-07-11 03:26:36.000000000 -0300
|
||||
--- gdb-6.6.orig/gdb/cli/cli-cmds.c
|
||||
+++ gdb-6.6/gdb/cli/cli-cmds.c
|
||||
@@ -38,6 +38,7 @@
|
||||
#include "objfiles.h"
|
||||
#include "source.h"
|
||||
@ -28,7 +28,7 @@ Index: gdb-6.5/gdb/cli/cli-cmds.c
|
||||
|
||||
#include "ui-out.h"
|
||||
|
||||
@@ -453,12 +454,31 @@ source_command (char *args, int from_tty
|
||||
@@ -461,12 +462,31 @@ source_script (char *file, int from_tty)
|
||||
|
||||
if (fd == -1)
|
||||
{
|
||||
@ -61,10 +61,10 @@ Index: gdb-6.5/gdb/cli/cli-cmds.c
|
||||
stream = fdopen (fd, FOPEN_RT);
|
||||
script_from_file (stream, file);
|
||||
|
||||
Index: gdb-6.5/gdb/testsuite/gdb.base/gdbinit.exp
|
||||
Index: gdb-6.6/gdb/testsuite/gdb.base/gdbinit.exp
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gdb-6.5/gdb/testsuite/gdb.base/gdbinit.exp 2006-07-11 03:22:48.000000000 -0300
|
||||
--- /dev/null
|
||||
+++ gdb-6.6/gdb/testsuite/gdb.base/gdbinit.exp
|
||||
@@ -0,0 +1,98 @@
|
||||
+# Copyright 2005
|
||||
+# Free Software Foundation, Inc.
|
||||
@ -164,39 +164,39 @@ Index: gdb-6.5/gdb/testsuite/gdb.base/gdbinit.exp
|
||||
+}
|
||||
+
|
||||
+remote_exec build "rm .gdbinit"
|
||||
Index: gdb-6.5/gdb/testsuite/gdb.base/gdbinit.sample
|
||||
Index: gdb-6.6/gdb/testsuite/gdb.base/gdbinit.sample
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gdb-6.5/gdb/testsuite/gdb.base/gdbinit.sample 2006-07-11 03:22:48.000000000 -0300
|
||||
--- /dev/null
|
||||
+++ gdb-6.6/gdb/testsuite/gdb.base/gdbinit.sample
|
||||
@@ -0,0 +1 @@
|
||||
+echo "\nin gdbinit"
|
||||
Index: gdb-6.5/gdb/main.c
|
||||
Index: gdb-6.6/gdb/main.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/main.c 2006-07-11 03:22:45.000000000 -0300
|
||||
+++ gdb-6.5/gdb/main.c 2006-07-11 03:27:03.000000000 -0300
|
||||
@@ -643,7 +643,7 @@ extern int gdbtk_test (char *);
|
||||
--- gdb-6.6.orig/gdb/main.c
|
||||
+++ gdb-6.6/gdb/main.c
|
||||
@@ -644,7 +644,7 @@ extern int gdbtk_test (char *);
|
||||
|
||||
if (!inhibit_gdbinit)
|
||||
{
|
||||
- catch_command_errors (source_command, homeinit, 0, RETURN_MASK_ALL);
|
||||
+ catch_command_errors (source_command, homeinit, -1, RETURN_MASK_ALL);
|
||||
- catch_command_errors (source_script, homeinit, 0, RETURN_MASK_ALL);
|
||||
+ catch_command_errors (source_script, homeinit, -1, RETURN_MASK_ALL);
|
||||
}
|
||||
|
||||
/* Do stats; no need to do them elsewhere since we'll only
|
||||
@@ -730,7 +730,7 @@ extern int gdbtk_test (char *);
|
||||
@@ -722,7 +722,7 @@ extern int gdbtk_test (char *);
|
||||
|| memcmp ((char *) &homebuf, (char *) &cwdbuf, sizeof (struct stat)))
|
||||
if (!inhibit_gdbinit)
|
||||
{
|
||||
- catch_command_errors (source_command, gdbinit, 0, RETURN_MASK_ALL);
|
||||
+ catch_command_errors (source_command, gdbinit, -1, RETURN_MASK_ALL);
|
||||
- catch_command_errors (source_script, gdbinit, 0, RETURN_MASK_ALL);
|
||||
+ catch_command_errors (source_script, gdbinit, -1, RETURN_MASK_ALL);
|
||||
}
|
||||
|
||||
for (i = 0; i < ncmd; i++)
|
||||
Index: gdb-6.5/gdb/Makefile.in
|
||||
Index: gdb-6.6/gdb/Makefile.in
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/Makefile.in 2006-07-11 03:22:45.000000000 -0300
|
||||
+++ gdb-6.5/gdb/Makefile.in 2006-07-11 03:22:48.000000000 -0300
|
||||
@@ -2859,7 +2859,7 @@ cli-cmds.o: $(srcdir)/cli/cli-cmds.c $(d
|
||||
--- gdb-6.6.orig/gdb/Makefile.in
|
||||
+++ gdb-6.6/gdb/Makefile.in
|
||||
@@ -2927,7 +2927,7 @@ cli-cmds.o: $(srcdir)/cli/cli-cmds.c $(d
|
||||
$(expression_h) $(frame_h) $(value_h) $(language_h) $(filenames_h) \
|
||||
$(objfiles_h) $(source_h) $(disasm_h) $(ui_out_h) $(top_h) \
|
||||
$(cli_decode_h) $(cli_script_h) $(cli_setshow_h) $(cli_cmds_h) \
|
||||
|
@ -1,13 +1,8 @@
|
||||
Index: ./gdb/testsuite/ChangeLog
|
||||
2005-04-02 Andrew Cagney <cagney@gnu.org>
|
||||
|
||||
* gdb.base/sepdebug.exp: Check that things fail when the debug
|
||||
info is corrupt.
|
||||
* gdb.base/sepdebug2.c (main): New file.
|
||||
|
||||
--- ../gdb-6.3/./gdb/testsuite/gdb.base/sepdebug.exp 2004-01-14 10:09:37.000000000 -0500
|
||||
+++ ./gdb/testsuite/gdb.base/sepdebug.exp 2005-04-02 15:57:17.000000000 -0500
|
||||
@@ -985,3 +985,35 @@
|
||||
Index: gdb-6.6/gdb/testsuite/gdb.base/sepdebug.exp
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/testsuite/gdb.base/sepdebug.exp 2006-10-17 22:17:45.000000000 +0200
|
||||
+++ gdb-6.6/gdb/testsuite/gdb.base/sepdebug.exp 2007-01-20 18:39:26.000000000 +0100
|
||||
@@ -953,3 +953,40 @@ if [istarget "*-*-vxworks*"] {
|
||||
send_gdb "set args main\n"
|
||||
gdb_expect -re ".*$gdb_prompt $" {}
|
||||
}
|
||||
@ -33,6 +28,11 @@ Index: ./gdb/testsuite/ChangeLog
|
||||
+}
|
||||
+remote_exec build "cp $corrupt_debug_file ${existing_binfile}.debug"
|
||||
+
|
||||
+gdb_exit
|
||||
+gdb_start
|
||||
+gdb_reinitialize_dir $srcdir/$subdir
|
||||
+gdb_load ${binfile}
|
||||
+
|
||||
+set test "A corrupt debug file gets a warning"
|
||||
+gdb_test_multiple "file $existing_binfile" "$test" {
|
||||
+ -re "warning:.*mismatch.*" {
|
||||
@ -43,8 +43,10 @@ Index: ./gdb/testsuite/ChangeLog
|
||||
+ exp_continue
|
||||
+ }
|
||||
+}
|
||||
--- /dev/null 2005-04-02 11:30:32.604931736 -0500
|
||||
+++ ./gdb/testsuite/gdb.base/sepdebug2.c 2005-04-02 13:09:31.000000000 -0500
|
||||
Index: gdb-6.6/gdb/testsuite/gdb.base/sepdebug2.c
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gdb-6.6/gdb/testsuite/gdb.base/sepdebug2.c 2007-01-20 18:41:35.000000000 +0100
|
||||
@@ -0,0 +1,5 @@
|
||||
+int
|
||||
+main (int argc, char *argv[], char *envp[])
|
||||
|
@ -1,8 +1,8 @@
|
||||
Index: gdb-6.5/gdb/configure
|
||||
Index: gdb-6.6/gdb/configure
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/configure 2006-07-11 15:00:08.000000000 -0300
|
||||
+++ gdb-6.5/gdb/configure 2006-07-11 15:01:23.000000000 -0300
|
||||
@@ -20125,7 +20125,8 @@ fi
|
||||
--- gdb-6.6.orig/gdb/configure
|
||||
+++ gdb-6.6/gdb/configure
|
||||
@@ -20991,7 +20991,8 @@ fi
|
||||
# gdb/doc/gdbint.texinfo.
|
||||
build_warnings="-Wimplicit -Wreturn-type -Wcomment -Wtrigraphs \
|
||||
-Wformat -Wparentheses -Wpointer-arith -Wformat-nonliteral \
|
||||
@ -12,10 +12,10 @@ Index: gdb-6.5/gdb/configure
|
||||
|
||||
# GCC supports -Wuninitialized only with -O or -On, n != 0.
|
||||
if test x${CFLAGS+set} = xset; then
|
||||
Index: gdb-6.5/gdb/mi/mi-cmd-env.c
|
||||
Index: gdb-6.6/gdb/mi/mi-cmd-env.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/mi/mi-cmd-env.c 2006-07-11 15:00:08.000000000 -0300
|
||||
+++ gdb-6.5/gdb/mi/mi-cmd-env.c 2006-07-11 15:01:23.000000000 -0300
|
||||
--- 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[] =
|
||||
{
|
||||
@ -34,10 +34,10 @@ Index: gdb-6.5/gdb/mi/mi-cmd-env.c
|
||||
};
|
||||
|
||||
dont_repeat ();
|
||||
Index: gdb-6.5/gdb/mi/mi-getopt.c
|
||||
Index: gdb-6.6/gdb/mi/mi-getopt.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/mi/mi-getopt.c 2006-07-11 15:00:08.000000000 -0300
|
||||
+++ gdb-6.5/gdb/mi/mi-getopt.c 2006-07-11 15:01:23.000000000 -0300
|
||||
--- 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[] =
|
||||
@ -47,10 +47,10 @@ Index: gdb-6.5/gdb/mi/mi-getopt.c
|
||||
};
|
||||
|
||||
if (mi_getopt (prefix, argc, argv, opts, &optind, &optarg) == -1)
|
||||
Index: gdb-6.5/gdb/mi/mi-cmd-break.c
|
||||
Index: gdb-6.6/gdb/mi/mi-cmd-break.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/mi/mi-cmd-break.c 2006-07-11 15:00:08.000000000 -0300
|
||||
+++ gdb-6.5/gdb/mi/mi-cmd-break.c 2006-07-11 15:01:23.000000000 -0300
|
||||
--- 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},
|
||||
@ -69,10 +69,10 @@ Index: gdb-6.5/gdb/mi/mi-cmd-break.c
|
||||
};
|
||||
|
||||
/* Parse arguments. */
|
||||
Index: gdb-6.5/gdb/mi/mi-cmd-disas.c
|
||||
Index: gdb-6.6/gdb/mi/mi-cmd-disas.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/mi/mi-cmd-disas.c 2006-07-11 15:01:22.000000000 -0300
|
||||
+++ gdb-6.5/gdb/mi/mi-cmd-disas.c 2006-07-11 15:01:23.000000000 -0300
|
||||
--- 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},
|
||||
@ -82,10 +82,10 @@ Index: gdb-6.5/gdb/mi/mi-cmd-disas.c
|
||||
};
|
||||
|
||||
/* Get the options with their arguments. Keep track of what we
|
||||
Index: gdb-6.5/gdb/mi/mi-main.c
|
||||
Index: gdb-6.6/gdb/mi/mi-main.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/mi/mi-main.c 2006-07-11 15:00:08.000000000 -0300
|
||||
+++ gdb-6.5/gdb/mi/mi-main.c 2006-07-11 15:01:23.000000000 -0300
|
||||
--- 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[] =
|
||||
{
|
||||
@ -95,7 +95,7 @@ Index: gdb-6.5/gdb/mi/mi-main.c
|
||||
};
|
||||
|
||||
while (1)
|
||||
@@ -975,7 +975,7 @@ mi_cmd_data_write_memory (char *command,
|
||||
@@ -973,7 +973,7 @@ mi_cmd_data_write_memory (char *command,
|
||||
static struct mi_opt opts[] =
|
||||
{
|
||||
{"o", OFFSET_OPT, 1},
|
||||
@ -104,10 +104,10 @@ Index: gdb-6.5/gdb/mi/mi-main.c
|
||||
};
|
||||
|
||||
while (1)
|
||||
Index: gdb-6.5/gdb/p-valprint.c
|
||||
Index: gdb-6.6/gdb/p-valprint.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/p-valprint.c 2006-07-11 15:00:08.000000000 -0300
|
||||
+++ gdb-6.5/gdb/p-valprint.c 2006-07-11 15:01:23.000000000 -0300
|
||||
--- 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)
|
||||
{
|
||||
@ -126,10 +126,10 @@ Index: gdb-6.5/gdb/p-valprint.c
|
||||
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.5/gdb/cp-valprint.c
|
||||
Index: gdb-6.6/gdb/cp-valprint.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/cp-valprint.c 2006-07-11 15:00:08.000000000 -0300
|
||||
+++ gdb-6.5/gdb/cp-valprint.c 2006-07-11 15:01:23.000000000 -0300
|
||||
--- 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)
|
||||
{
|
||||
@ -148,10 +148,10 @@ Index: gdb-6.5/gdb/cp-valprint.c
|
||||
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.5/gdb/tui/tui-layout.c
|
||||
Index: gdb-6.6/gdb/tui/tui-layout.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/tui/tui-layout.c 2006-07-11 15:01:22.000000000 -0300
|
||||
+++ gdb-6.5/gdb/tui/tui-layout.c 2006-07-11 15:01:23.000000000 -0300
|
||||
--- 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)
|
||||
{
|
||||
@ -188,20 +188,20 @@ Index: gdb-6.5/gdb/tui/tui-layout.c
|
||||
LOCATOR_WIN,
|
||||
2 /* 1 */ ,
|
||||
tui_term_width (),
|
||||
Index: gdb-6.5/gdb/testsuite/gdb.base/move-dir.h
|
||||
Index: gdb-6.6/gdb/testsuite/gdb.base/move-dir.h
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/testsuite/gdb.base/move-dir.h 2006-07-11 15:01:23.000000000 -0300
|
||||
+++ gdb-6.5/gdb/testsuite/gdb.base/move-dir.h 2006-07-11 15:01:23.000000000 -0300
|
||||
--- gdb-6.6.orig/gdb/testsuite/gdb.base/move-dir.h
|
||||
+++ gdb-6.6/gdb/testsuite/gdb.base/move-dir.h
|
||||
@@ -1,4 +1,4 @@
|
||||
-#include <stdlib.h>
|
||||
+#include <stdio.h>
|
||||
|
||||
void other() {
|
||||
const char* ostring = "other";
|
||||
Index: gdb-6.5/gdb/testsuite/gdb.base/sigrepeat.c
|
||||
Index: gdb-6.6/gdb/testsuite/gdb.base/sigrepeat.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/testsuite/gdb.base/sigrepeat.c 2006-07-11 15:00:08.000000000 -0300
|
||||
+++ gdb-6.5/gdb/testsuite/gdb.base/sigrepeat.c 2006-07-11 15:01:23.000000000 -0300
|
||||
--- gdb-6.6.orig/gdb/testsuite/gdb.base/sigrepeat.c
|
||||
+++ gdb-6.6/gdb/testsuite/gdb.base/sigrepeat.c
|
||||
@@ -22,6 +22,7 @@
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
@ -210,10 +210,10 @@ Index: gdb-6.5/gdb/testsuite/gdb.base/sigrepeat.c
|
||||
#include <sys/time.h>
|
||||
|
||||
static volatile int done[2];
|
||||
Index: gdb-6.5/gdb/s390-tdep.c
|
||||
Index: gdb-6.6/gdb/s390-tdep.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/s390-tdep.c 2006-07-11 15:00:08.000000000 -0300
|
||||
+++ gdb-6.5/gdb/s390-tdep.c 2006-07-11 15:02:37.000000000 -0300
|
||||
--- 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
|
||||
case RETURN_VALUE_STRUCT_CONVENTION:
|
||||
error (_("Cannot set function return value."));
|
||||
@ -234,11 +234,11 @@ Index: gdb-6.5/gdb/s390-tdep.c
|
||||
}
|
||||
}
|
||||
|
||||
Index: gdb-6.5/gdb/remote.c
|
||||
Index: gdb-6.6/gdb/remote.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/remote.c 2006-07-11 15:00:08.000000000 -0300
|
||||
+++ gdb-6.5/gdb/remote.c 2006-07-11 15:02:32.000000000 -0300
|
||||
@@ -2523,10 +2523,10 @@ cleanup_sigint_signal_handler (void *dum
|
||||
--- 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)
|
||||
@ -251,10 +251,10 @@ Index: gdb-6.5/gdb/remote.c
|
||||
&sigint_remote_token);
|
||||
}
|
||||
|
||||
Index: gdb-6.5/gdb/f-exp.y
|
||||
Index: gdb-6.6/gdb/f-exp.y
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/f-exp.y 2006-07-11 15:00:08.000000000 -0300
|
||||
+++ gdb-6.5/gdb/f-exp.y 2006-07-11 15:01:23.000000000 -0300
|
||||
--- gdb-6.6.orig/gdb/f-exp.y
|
||||
+++ gdb-6.6/gdb/f-exp.y
|
||||
@@ -567,6 +567,8 @@ ptype : typebase
|
||||
case tp_function:
|
||||
follow_type = lookup_function_type (follow_type);
|
||||
@ -264,11 +264,11 @@ Index: gdb-6.5/gdb/f-exp.y
|
||||
}
|
||||
$$ = follow_type;
|
||||
}
|
||||
Index: gdb-6.5/gdb/remote-fileio.c
|
||||
Index: gdb-6.6/gdb/remote-fileio.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/remote-fileio.c 2006-07-11 15:00:08.000000000 -0300
|
||||
+++ gdb-6.5/gdb/remote-fileio.c 2006-07-11 15:01:23.000000000 -0300
|
||||
@@ -1317,19 +1317,19 @@ static struct {
|
||||
--- 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[] = {
|
||||
@ -301,11 +301,11 @@ Index: gdb-6.5/gdb/remote-fileio.c
|
||||
};
|
||||
|
||||
static int
|
||||
Index: gdb-6.5/gdb/source.c
|
||||
Index: gdb-6.6/gdb/source.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/source.c 2006-07-11 15:00:08.000000000 -0300
|
||||
+++ gdb-6.5/gdb/source.c 2006-07-11 15:01:23.000000000 -0300
|
||||
@@ -160,7 +160,7 @@ get_current_source_symtab_and_line (void
|
||||
--- gdb-6.6.orig/gdb/source.c
|
||||
+++ gdb-6.6/gdb/source.c
|
||||
@@ -172,7 +172,7 @@ get_current_source_symtab_and_line (void
|
||||
void
|
||||
set_default_source_symtab_and_line (void)
|
||||
{
|
||||
@ -314,7 +314,7 @@ Index: gdb-6.5/gdb/source.c
|
||||
|
||||
if (!have_full_symbols () && !have_partial_symbols ())
|
||||
error (_("No symbol table is loaded. Use the \"file\" command."));
|
||||
@@ -1314,7 +1314,7 @@ static void
|
||||
@@ -1428,7 +1428,7 @@ static void
|
||||
line_info (char *arg, int from_tty)
|
||||
{
|
||||
struct symtabs_and_lines sals;
|
||||
@ -323,11 +323,11 @@ Index: gdb-6.5/gdb/source.c
|
||||
CORE_ADDR start_pc, end_pc;
|
||||
int i;
|
||||
|
||||
Index: gdb-6.5/gdb/symfile.c
|
||||
Index: gdb-6.6/gdb/symfile.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/symfile.c 2006-07-11 15:01:22.000000000 -0300
|
||||
+++ gdb-6.5/gdb/symfile.c 2006-07-11 15:02:34.000000000 -0300
|
||||
@@ -2877,6 +2877,8 @@ add_psymbol_with_dem_name_to_list (char
|
||||
--- 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. */
|
||||
@ -336,10 +336,10 @@ Index: gdb-6.5/gdb/symfile.c
|
||||
}
|
||||
|
||||
/* val and coreaddr are mutually exclusive, one of them *will* be zero */
|
||||
Index: gdb-6.5/gdb/linespec.c
|
||||
Index: gdb-6.6/gdb/linespec.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/linespec.c 2006-07-11 15:01:23.000000000 -0300
|
||||
+++ gdb-6.5/gdb/linespec.c 2006-07-11 15:01:23.000000000 -0300
|
||||
--- gdb-6.6.orig/gdb/linespec.c
|
||||
+++ gdb-6.6/gdb/linespec.c
|
||||
@@ -1631,7 +1631,7 @@ static struct symtabs_and_lines
|
||||
find_method (int funfirstline, char ***canonical, char *saved_arg,
|
||||
char *copy, struct type *t, struct symbol *sym_class)
|
||||
@ -349,10 +349,10 @@ Index: gdb-6.5/gdb/linespec.c
|
||||
struct symbol *sym = 0;
|
||||
int i1; /* Counter for the symbol array. */
|
||||
struct symbol **sym_arr = alloca (total_number_of_methods (t)
|
||||
Index: gdb-6.5/gdb/macroscope.c
|
||||
Index: gdb-6.6/gdb/macroscope.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/macroscope.c 2006-07-11 15:00:08.000000000 -0300
|
||||
+++ gdb-6.5/gdb/macroscope.c 2006-07-11 15:01:23.000000000 -0300
|
||||
--- 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)
|
||||
@ -390,23 +390,13 @@ Index: gdb-6.5/gdb/macroscope.c
|
||||
struct macro_scope *ms;
|
||||
|
||||
/* If there's a selected frame, use its PC. */
|
||||
Index: gdb-6.5/gdb/target.c
|
||||
Index: gdb-6.6/gdb/target.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/target.c 2006-07-11 15:01:22.000000000 -0300
|
||||
+++ gdb-6.5/gdb/target.c 2006-07-11 15:02:33.000000000 -0300
|
||||
@@ -1142,6 +1142,9 @@ target_xfer_memory (CORE_ADDR memaddr, g
|
||||
if (!write)
|
||||
return EIO;
|
||||
break;
|
||||
+
|
||||
+ default:
|
||||
+ break;
|
||||
}
|
||||
|
||||
while (reg_len > 0)
|
||||
@@ -1220,6 +1223,9 @@ target_xfer_memory_partial (CORE_ADDR me
|
||||
return -1;
|
||||
}
|
||||
--- 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:
|
||||
@ -414,10 +404,10 @@ Index: gdb-6.5/gdb/target.c
|
||||
}
|
||||
|
||||
if (region->attrib.cache)
|
||||
Index: gdb-6.5/gdb/gdb-events.c
|
||||
Index: gdb-6.6/gdb/gdb-events.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/gdb-events.c 2006-07-11 15:00:08.000000000 -0300
|
||||
+++ gdb-6.5/gdb/gdb-events.c 2006-07-11 15:01:23.000000000 -0300
|
||||
--- 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
|
||||
case architecture_changed:
|
||||
vector->architecture_changed ();
|
||||
@ -427,11 +417,11 @@ Index: gdb-6.5/gdb/gdb-events.c
|
||||
}
|
||||
delivering_events = event->next;
|
||||
xfree (event);
|
||||
Index: gdb-6.5/gdb/dwarf2read.c
|
||||
Index: gdb-6.6/gdb/dwarf2read.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/dwarf2read.c 2006-07-11 15:01:23.000000000 -0300
|
||||
+++ gdb-6.5/gdb/dwarf2read.c 2006-07-11 15:02:33.000000000 -0300
|
||||
@@ -9179,6 +9179,7 @@ dwarf_decode_macros (struct line_header
|
||||
--- gdb-6.6.orig/gdb/dwarf2read.c
|
||||
+++ gdb-6.6/gdb/dwarf2read.c
|
||||
@@ -9307,6 +9307,7 @@ dwarf_decode_macros (struct line_header
|
||||
for (;;)
|
||||
{
|
||||
enum dwarf_macinfo_record_type macinfo_type;
|
||||
@ -439,7 +429,7 @@ Index: gdb-6.5/gdb/dwarf2read.c
|
||||
|
||||
/* Do we at least have room for a macinfo type byte? */
|
||||
if (mac_ptr >= mac_end)
|
||||
@@ -9190,13 +9191,16 @@ dwarf_decode_macros (struct line_header
|
||||
@@ -9318,13 +9319,16 @@ dwarf_decode_macros (struct line_header
|
||||
macinfo_type = read_1_byte (abfd, mac_ptr);
|
||||
mac_ptr++;
|
||||
|
||||
@ -461,10 +451,10 @@ Index: gdb-6.5/gdb/dwarf2read.c
|
||||
case DW_MACINFO_define:
|
||||
case DW_MACINFO_undef:
|
||||
{
|
||||
Index: gdb-6.5/gdb/stabsread.c
|
||||
Index: gdb-6.6/gdb/stabsread.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/stabsread.c 2006-07-11 15:00:08.000000000 -0300
|
||||
+++ gdb-6.5/gdb/stabsread.c 2006-07-11 15:01:23.000000000 -0300
|
||||
--- gdb-6.6.orig/gdb/stabsread.c
|
||||
+++ gdb-6.6/gdb/stabsread.c
|
||||
@@ -1794,7 +1794,8 @@ again:
|
||||
struct type *domain = read_type (pp, objfile);
|
||||
struct type *return_type;
|
||||
@ -475,10 +465,10 @@ Index: gdb-6.5/gdb/stabsread.c
|
||||
|
||||
if (**pp != ',')
|
||||
/* Invalid member type data format. */
|
||||
Index: gdb-6.5/gdb/dwarf2expr.c
|
||||
Index: gdb-6.6/gdb/dwarf2expr.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/dwarf2expr.c 2006-07-11 15:00:08.000000000 -0300
|
||||
+++ gdb-6.5/gdb/dwarf2expr.c 2006-07-11 15:01:23.000000000 -0300
|
||||
--- gdb-6.6.orig/gdb/dwarf2expr.c
|
||||
+++ gdb-6.6/gdb/dwarf2expr.c
|
||||
@@ -559,6 +559,8 @@ execute_stack_op (struct dwarf_expr_cont
|
||||
op_ptr = read_uleb128 (op_ptr, op_end, ®);
|
||||
result += reg;
|
||||
@ -488,10 +478,10 @@ Index: gdb-6.5/gdb/dwarf2expr.c
|
||||
}
|
||||
break;
|
||||
|
||||
Index: gdb-6.5/gdb/varobj.c
|
||||
Index: gdb-6.6/gdb/varobj.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/varobj.c 2006-07-11 15:01:22.000000000 -0300
|
||||
+++ gdb-6.5/gdb/varobj.c 2006-07-11 15:01:23.000000000 -0300
|
||||
--- 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. */
|
||||
@ -544,11 +534,11 @@ Index: gdb-6.5/gdb/varobj.c
|
||||
|
||||
/* Set ourselves as our root */
|
||||
var->root->rootvar = var;
|
||||
Index: gdb-6.5/gdb/configure.ac
|
||||
Index: gdb-6.6/gdb/configure.ac
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/configure.ac 2006-07-11 15:00:08.000000000 -0300
|
||||
+++ gdb-6.5/gdb/configure.ac 2006-07-11 15:01:23.000000000 -0300
|
||||
@@ -1133,7 +1133,8 @@ fi
|
||||
--- gdb-6.6.orig/gdb/configure.ac
|
||||
+++ gdb-6.6/gdb/configure.ac
|
||||
@@ -1112,7 +1112,8 @@ fi
|
||||
# gdb/doc/gdbint.texinfo.
|
||||
build_warnings="-Wimplicit -Wreturn-type -Wcomment -Wtrigraphs \
|
||||
-Wformat -Wparentheses -Wpointer-arith -Wformat-nonliteral \
|
||||
@ -558,10 +548,10 @@ Index: gdb-6.5/gdb/configure.ac
|
||||
|
||||
# GCC supports -Wuninitialized only with -O or -On, n != 0.
|
||||
if test x${CFLAGS+set} = xset; then
|
||||
Index: gdb-6.5/gdb/doublest.c
|
||||
Index: gdb-6.6/gdb/doublest.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/doublest.c 2006-07-11 15:00:08.000000000 -0300
|
||||
+++ gdb-6.5/gdb/doublest.c 2006-07-11 15:01:23.000000000 -0300
|
||||
--- 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
|
||||
{
|
||||
result |= (unsigned long)*(data + cur_byte) << cur_bitshift;
|
||||
|
@ -21,9 +21,11 @@ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=109921
|
||||
(SYMBOL_FILE_INDEX, SYMBOL_FILE_SYMTAB): New macros.
|
||||
|
||||
|
||||
--- ./gdb/buildsym.c 2005-12-17 22:33:59.000000000 +0000
|
||||
+++ ./gdb/buildsym.c 2007-01-09 08:30:38.000000000 +0000
|
||||
@@ -535,7 +535,7 @@ make_blockvector (struct objfile *objfil
|
||||
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
|
||||
@ -32,7 +34,7 @@ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=109921
|
||||
{
|
||||
struct subfile *subfile;
|
||||
|
||||
@@ -547,6 +547,17 @@ start_subfile (char *name, char *dirname
|
||||
@@ -552,6 +552,17 @@ start_subfile (char *name, char *dirname
|
||||
if (FILENAME_CMP (subfile->name, name) == 0)
|
||||
{
|
||||
current_subfile = subfile;
|
||||
@ -50,7 +52,7 @@ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=109921
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -562,6 +573,7 @@ start_subfile (char *name, char *dirname
|
||||
@@ -567,6 +578,7 @@ start_subfile (char *name, char *dirname
|
||||
current_subfile = subfile;
|
||||
|
||||
/* Save its name and compilation directory name */
|
||||
@ -58,7 +60,7 @@ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=109921
|
||||
subfile->name = (name == NULL) ? NULL : savestring (name, strlen (name));
|
||||
subfile->dirname =
|
||||
(dirname == NULL) ? NULL : savestring (dirname, strlen (dirname));
|
||||
@@ -617,6 +629,13 @@ start_subfile (char *name, char *dirname
|
||||
@@ -622,6 +634,13 @@ start_subfile (char *name, char *dirname
|
||||
}
|
||||
}
|
||||
|
||||
@ -72,7 +74,7 @@ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=109921
|
||||
/* 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
|
||||
@@ -816,9 +835,12 @@ end_symtab (CORE_ADDR end_addr, struct o
|
||||
@@ -821,9 +840,12 @@ end_symtab (CORE_ADDR end_addr, struct o
|
||||
{
|
||||
struct symtab *symtab = NULL;
|
||||
struct blockvector *blockvector;
|
||||
@ -86,7 +88,7 @@ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=109921
|
||||
|
||||
/* Finish the lexical context of the last function in the file; pop
|
||||
the context stack. */
|
||||
@@ -916,6 +938,18 @@ end_symtab (CORE_ADDR end_addr, struct o
|
||||
@@ -921,6 +943,18 @@ end_symtab (CORE_ADDR end_addr, struct o
|
||||
#endif
|
||||
PROCESS_LINENUMBER_HOOK (); /* Needed for xcoff. */
|
||||
|
||||
@ -105,7 +107,7 @@ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=109921
|
||||
/* Now create the symtab objects proper, one for each subfile. */
|
||||
/* (The main file is the last one on the chain.) */
|
||||
|
||||
@@ -976,6 +1010,16 @@ end_symtab (CORE_ADDR end_addr, struct o
|
||||
@@ -981,6 +1015,16 @@ end_symtab (CORE_ADDR end_addr, struct o
|
||||
strlen (subfile->dirname) + 1);
|
||||
strcpy (symtab->dirname, subfile->dirname);
|
||||
}
|
||||
@ -122,7 +124,7 @@ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=109921
|
||||
else
|
||||
{
|
||||
symtab->dirname = NULL;
|
||||
@@ -1004,6 +1048,13 @@ end_symtab (CORE_ADDR end_addr, struct o
|
||||
@@ -1009,6 +1053,13 @@ end_symtab (CORE_ADDR end_addr, struct o
|
||||
but the main file. */
|
||||
|
||||
symtab->primary = 0;
|
||||
@ -136,7 +138,7 @@ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=109921
|
||||
}
|
||||
if (subfile->name != NULL)
|
||||
{
|
||||
@@ -1032,9 +1083,40 @@ end_symtab (CORE_ADDR end_addr, struct o
|
||||
@@ -1037,9 +1088,40 @@ end_symtab (CORE_ADDR end_addr, struct o
|
||||
symtab->primary = 1;
|
||||
}
|
||||
|
||||
@ -177,8 +179,10 @@ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=109921
|
||||
|
||||
return symtab;
|
||||
}
|
||||
--- ./gdb/buildsym.h 2005-12-17 22:33:59.000000000 +0000
|
||||
+++ ./gdb/buildsym.h 2007-01-09 08:17:17.000000000 +0000
|
||||
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
|
||||
{
|
||||
@ -197,9 +201,11 @@ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=109921
|
||||
extern void start_subfile (char *name, char *dirname);
|
||||
|
||||
extern void patch_subfile_names (struct subfile *subfile, char *name);
|
||||
--- ./gdb/dwarf2read.c 2007-01-08 22:28:24.000000000 +0000
|
||||
+++ ./gdb/dwarf2read.c 2007-01-09 08:58:41.000000000 +0000
|
||||
@@ -847,7 +847,7 @@ static struct line_header *(dwarf_decode
|
||||
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 *);
|
||||
|
||||
@ -208,7 +214,7 @@ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=109921
|
||||
|
||||
static struct symbol *new_symbol (struct die_info *, struct type *,
|
||||
struct dwarf2_cu *);
|
||||
@@ -6321,6 +6321,7 @@ add_file_name (struct line_header *lh,
|
||||
@@ -6428,6 +6428,7 @@ add_file_name (struct line_header *lh,
|
||||
unsigned int length)
|
||||
{
|
||||
struct file_entry *fe;
|
||||
@ -216,7 +222,7 @@ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=109921
|
||||
|
||||
/* Grow the array if necessary. */
|
||||
if (lh->file_names_size == 0)
|
||||
@@ -6343,6 +6344,10 @@ add_file_name (struct line_header *lh,
|
||||
@@ -6450,6 +6451,10 @@ add_file_name (struct line_header *lh,
|
||||
fe->mod_time = mod_time;
|
||||
fe->length = length;
|
||||
fe->included_p = 0;
|
||||
@ -227,7 +233,7 @@ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=109921
|
||||
}
|
||||
|
||||
|
||||
@@ -6560,7 +6565,7 @@ dwarf_decode_lines (struct line_header *
|
||||
@@ -6668,7 +6673,7 @@ dwarf_decode_lines (struct line_header *
|
||||
if (fe->dir_index)
|
||||
dir = lh->include_dirs[fe->dir_index - 1];
|
||||
|
||||
@ -236,16 +242,16 @@ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=109921
|
||||
}
|
||||
|
||||
/* Decode the table. */
|
||||
@@ -6661,7 +6666,7 @@ dwarf_decode_lines (struct line_header *
|
||||
dir = lh->include_dirs[fe->dir_index - 1];
|
||||
|
||||
@@ -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;
|
||||
case DW_LNS_set_column:
|
||||
@@ -6764,7 +6769,8 @@ dwarf_decode_lines (struct line_header *
|
||||
@@ -6889,7 +6894,8 @@ dwarf_decode_lines (struct line_header *
|
||||
subfile's name. */
|
||||
|
||||
static void
|
||||
@ -255,7 +261,7 @@ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=109921
|
||||
{
|
||||
char *fullname;
|
||||
|
||||
@@ -6783,7 +6789,7 @@ dwarf2_start_subfile (char *filename, ch
|
||||
@@ -6908,7 +6914,7 @@ dwarf2_start_subfile (char *filename, ch
|
||||
else
|
||||
fullname = filename;
|
||||
|
||||
@ -264,7 +270,7 @@ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=109921
|
||||
|
||||
if (fullname != filename)
|
||||
xfree (fullname);
|
||||
@@ -6892,6 +6898,13 @@ new_symbol (struct die_info *die, struct
|
||||
@@ -7017,6 +7023,13 @@ new_symbol (struct die_info *die, struct
|
||||
{
|
||||
SYMBOL_LINE (sym) = DW_UNSND (attr);
|
||||
}
|
||||
@ -278,8 +284,10 @@ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=109921
|
||||
switch (die->tag)
|
||||
{
|
||||
case DW_TAG_label:
|
||||
--- ./gdb/symtab.c 2007-01-08 22:28:25.000000000 +0000
|
||||
+++ ./gdb/symtab.c 2007-01-09 08:19:05.000000000 +0000
|
||||
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);
|
||||
@ -309,8 +317,10 @@ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=109921
|
||||
psr->symbol = sym;
|
||||
psr->msymbol = NULL;
|
||||
psr->next = NULL;
|
||||
--- ./gdb/symtab.h 2007-01-08 22:28:25.000000000 +0000
|
||||
+++ ./gdb/symtab.h 2007-01-09 08:44:02.000000000 +0000
|
||||
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;
|
||||
|
@ -4,10 +4,7 @@ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=185337
|
||||
currently for trivia nonthreaded helloworld with no debug info up to -ggdb2 you
|
||||
will get:
|
||||
(gdb) p errno
|
||||
Cannot access memory at address 0x8
|
||||
|
||||
* with -ggdb3 "errno" gets resolved as _macro_ and the resulting
|
||||
"(*__errno_location ())" expression is always fine.
|
||||
[some error]
|
||||
|
||||
* with -ggdb2 and less "errno" in fact does not exist anywhere as it was
|
||||
compiled to "(*__errno_location ())" and the macro definition is not present.
|
||||
@ -16,554 +13,25 @@ will get:
|
||||
(%gs on i386) is not setup and it will result in:
|
||||
Cannot access memory at address 0x8
|
||||
|
||||
IMO the right way is to ignore TLS symbols for inferiors without activated
|
||||
threading. Patch attached.
|
||||
|
||||
Also attached suggestion patch how to deal with the most common "errno" symbol
|
||||
Attached suggestion patch how to deal with the most common "errno" symbol
|
||||
for the most common under-ggdb3 compiled programs.
|
||||
|
||||
|
||||
2006-08-25 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* dwarf2loc.c (dwarf_expr_tls_address): Code moved out to
|
||||
`target_translate_tls_address'.
|
||||
* target.c (target_translate_tls_address): Moved here.
|
||||
Provided warnings for TLS `errno' on non-TLS targets.
|
||||
* target.h (target_translate_tls_address): Moved here.
|
||||
* eval.c (evaluate_subexp_standard): New `UNOP_MEMVAL_TLS'.
|
||||
* expprint.c (print_subexp_standard): New `UNOP_MEMVAL_TLS'.
|
||||
(op_name_standard): New `UNOP_MEMVAL_TLS'.
|
||||
(dump_subexp_body_standard): New `UNOP_MEMVAL_TLS'.
|
||||
* expression.h (enum exp_opcode): New `UNOP_MEMVAL_TLS'.
|
||||
(union exp_element): New `objfile' type.
|
||||
* parse.c (write_exp_elt_objfile): New `objfile' setter.
|
||||
(write_exp_msymbol): Support new `UNOP_MEMVAL_TLS'.
|
||||
(msym_text_tls_symbol_type, msym_data_tls_symbol_type,
|
||||
msym_unknown_tls_symbol_type, build_parse): New TLS types.
|
||||
(operator_length_standard): New `UNOP_MEMVAL_TLS'.
|
||||
* parser-defs.h (write_exp_elt_objfile): New `objfile' setter.
|
||||
* valops.c (value_at_lazy): Pass control to `value_at_lazy_tls'.
|
||||
(value_at_lazy_tls): Provide TLS `struct objfile *' storage.
|
||||
(value_fetch_lazy): Resolve TLS `struct objfile *' storage.
|
||||
(value_assign): Resolve TLS `struct objfile *' storage.
|
||||
* value.c (struct value, allocate_value, value_tls_objfile,
|
||||
set_value_tls_objfile): Provide TLS `struct objfile *' storage.
|
||||
* value.h (value_tls_objfile, set_value_tls_objfile,
|
||||
value_at_lazy_tls): Provide TLS `struct objfile *' storage.
|
||||
* Makefile.in: Updated dependencies.
|
||||
|
||||
2006-08-25 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* gdb.threads/tls-nodebug.c: New file, test TLS symbols on gcc -s.
|
||||
* gdb.threads/tls-nodebug.exp: New file, test TLS symbols on gcc -s.
|
||||
* target.c (target_translate_tls_address): Provided warnings for TLS
|
||||
`errno' on non-TLS targets.
|
||||
|
||||
|
||||
Index: gdb-6.5/gdb/Makefile.in
|
||||
Index: gdb-6.6/gdb/target.c
|
||||
===================================================================
|
||||
RCS file: /cvs/src/src/gdb/Makefile.in,v
|
||||
retrieving revision 1.840
|
||||
diff -u -p -r1.840 gdb-6.5/gdb/Makefile.in
|
||||
--- gdb-6.5.org/gdb/Makefile.in 22 Aug 2006 19:08:31 -0000 1.840
|
||||
+++ gdb-6.5/gdb/Makefile.in 25 Aug 2006 19:55:35 -0000
|
||||
@@ -1977,7 +1977,7 @@ exec.o: exec.c $(defs_h) $(frame_h) $(in
|
||||
$(xcoffsolib_h) $(observer_h)
|
||||
expprint.o: expprint.c $(defs_h) $(symtab_h) $(gdbtypes_h) $(expression_h) \
|
||||
$(value_h) $(language_h) $(parser_defs_h) $(user_regs_h) $(target_h) \
|
||||
- $(gdb_string_h) $(block_h)
|
||||
+ $(gdb_string_h) $(block_h) $(objfiles_h)
|
||||
fbsd-nat.o: fbsd-nat.c $(defs_h) $(gdbcore_h) $(inferior_h) $(regcache_h) \
|
||||
$(regset_h) $(gdb_assert_h) $(gdb_string_h) $(elf_bfd_h) \
|
||||
$(fbsd_nat_h)
|
||||
@@ -2422,7 +2422,7 @@ osabi.o: osabi.c $(defs_h) $(gdb_assert_
|
||||
parse.o: parse.c $(defs_h) $(gdb_string_h) $(symtab_h) $(gdbtypes_h) \
|
||||
$(frame_h) $(expression_h) $(value_h) $(command_h) $(language_h) \
|
||||
$(f_lang_h) $(parser_defs_h) $(gdbcmd_h) $(symfile_h) $(inferior_h) \
|
||||
- $(doublest_h) $(gdb_assert_h) $(block_h) $(source_h)
|
||||
+ $(doublest_h) $(gdb_assert_h) $(block_h) $(source_h) $(objfiles_h)
|
||||
p-exp.o: p-exp.c $(defs_h) $(gdb_string_h) $(expression_h) $(value_h) \
|
||||
$(parser_defs_h) $(language_h) $(p_lang_h) $(bfd_h) $(symfile_h) \
|
||||
$(objfiles_h) $(block_h)
|
||||
@@ -2750,7 +2750,8 @@ symtab.o: symtab.c $(defs_h) $(symtab_h)
|
||||
$(gdb_stat_h) $(cp_abi_h) $(observer_h)
|
||||
target.o: target.c $(defs_h) $(gdb_string_h) $(target_h) $(gdbcmd_h) \
|
||||
$(symtab_h) $(inferior_h) $(bfd_h) $(symfile_h) $(objfiles_h) \
|
||||
- $(gdb_wait_h) $(dcache_h) $(regcache_h) $(gdb_assert_h) $(gdbcore_h)
|
||||
+ $(gdb_wait_h) $(dcache_h) $(regcache_h) $(gdb_assert_h) $(gdbcore_h) \
|
||||
+ $(exceptions_h)
|
||||
thread.o: thread.c $(defs_h) $(symtab_h) $(frame_h) $(inferior_h) \
|
||||
$(environ_h) $(value_h) $(target_h) $(gdbthread_h) $(exceptions_h) \
|
||||
$(command_h) $(gdbcmd_h) $(regcache_h) $(gdb_h) $(gdb_string_h) \
|
||||
Index: gdb-6.5/gdb/dwarf2loc.c
|
||||
===================================================================
|
||||
RCS file: /cvs/src/src/gdb/dwarf2loc.c,v
|
||||
retrieving revision 1.33
|
||||
diff -u -p -r1.33 gdb-6.5/gdb/dwarf2loc.c
|
||||
--- gdb-6.5.org/gdb/dwarf2loc.c 17 Dec 2005 22:33:59 -0000 1.33
|
||||
+++ gdb-6.5/gdb/dwarf2loc.c 25 Aug 2006 19:55:36 -0000
|
||||
@@ -189,86 +189,8 @@ static CORE_ADDR
|
||||
dwarf_expr_tls_address (void *baton, CORE_ADDR offset)
|
||||
{
|
||||
struct dwarf_expr_baton *debaton = (struct dwarf_expr_baton *) baton;
|
||||
- volatile CORE_ADDR addr = 0;
|
||||
|
||||
- if (target_get_thread_local_address_p ()
|
||||
- && gdbarch_fetch_tls_load_module_address_p (current_gdbarch))
|
||||
- {
|
||||
- ptid_t ptid = inferior_ptid;
|
||||
- struct objfile *objfile = debaton->objfile;
|
||||
- volatile struct gdb_exception ex;
|
||||
-
|
||||
- TRY_CATCH (ex, RETURN_MASK_ALL)
|
||||
- {
|
||||
- CORE_ADDR lm_addr;
|
||||
-
|
||||
- /* Fetch the load module address for this objfile. */
|
||||
- lm_addr = gdbarch_fetch_tls_load_module_address (current_gdbarch,
|
||||
- objfile);
|
||||
- /* If it's 0, throw the appropriate exception. */
|
||||
- if (lm_addr == 0)
|
||||
- throw_error (TLS_LOAD_MODULE_NOT_FOUND_ERROR,
|
||||
- _("TLS load module not found"));
|
||||
-
|
||||
- addr = target_get_thread_local_address (ptid, lm_addr, offset);
|
||||
- }
|
||||
- /* If an error occurred, print TLS related messages here. Otherwise,
|
||||
- throw the error to some higher catcher. */
|
||||
- if (ex.reason < 0)
|
||||
- {
|
||||
- int objfile_is_library = (objfile->flags & OBJF_SHARED);
|
||||
-
|
||||
- switch (ex.error)
|
||||
- {
|
||||
- case TLS_NO_LIBRARY_SUPPORT_ERROR:
|
||||
- error (_("Cannot find thread-local variables in this thread library."));
|
||||
- break;
|
||||
- case TLS_LOAD_MODULE_NOT_FOUND_ERROR:
|
||||
- if (objfile_is_library)
|
||||
- error (_("Cannot find shared library `%s' in dynamic"
|
||||
- " linker's load module list"), objfile->name);
|
||||
- else
|
||||
- error (_("Cannot find executable file `%s' in dynamic"
|
||||
- " linker's load module list"), objfile->name);
|
||||
- break;
|
||||
- case TLS_NOT_ALLOCATED_YET_ERROR:
|
||||
- if (objfile_is_library)
|
||||
- error (_("The inferior has not yet allocated storage for"
|
||||
- " thread-local variables in\n"
|
||||
- "the shared library `%s'\n"
|
||||
- "for %s"),
|
||||
- objfile->name, target_pid_to_str (ptid));
|
||||
- else
|
||||
- error (_("The inferior has not yet allocated storage for"
|
||||
- " thread-local variables in\n"
|
||||
- "the executable `%s'\n"
|
||||
- "for %s"),
|
||||
- objfile->name, target_pid_to_str (ptid));
|
||||
- break;
|
||||
- case TLS_GENERIC_ERROR:
|
||||
- if (objfile_is_library)
|
||||
- error (_("Cannot find thread-local storage for %s, "
|
||||
- "shared library %s:\n%s"),
|
||||
- target_pid_to_str (ptid),
|
||||
- objfile->name, ex.message);
|
||||
- else
|
||||
- error (_("Cannot find thread-local storage for %s, "
|
||||
- "executable file %s:\n%s"),
|
||||
- target_pid_to_str (ptid),
|
||||
- objfile->name, ex.message);
|
||||
- break;
|
||||
- default:
|
||||
- throw_exception (ex);
|
||||
- break;
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
- /* It wouldn't be wrong here to try a gdbarch method, too; finding
|
||||
- TLS is an ABI-specific thing. But we don't do that yet. */
|
||||
- else
|
||||
--- gdb-6.6.orig/gdb/target.c 2007-01-17 01:25:31.000000000 +0100
|
||||
+++ gdb-6.6/gdb/target.c 2007-01-20 06:31:36.000000000 +0100
|
||||
@@ -898,7 +898,18 @@
|
||||
/* It wouldn't be wrong here to try a gdbarch method, too; finding
|
||||
TLS is an ABI-specific thing. But we don't do that yet. */
|
||||
else
|
||||
- error (_("Cannot find thread-local variables on this target"));
|
||||
-
|
||||
- return addr;
|
||||
+ return target_translate_tls_address (debaton->objfile, offset);
|
||||
}
|
||||
|
||||
/* Evaluate a location description, starting at DATA and with length
|
||||
Index: gdb-6.5/gdb/eval.c
|
||||
===================================================================
|
||||
RCS file: /cvs/src/src/gdb/eval.c,v
|
||||
retrieving revision 1.63
|
||||
diff -u -p -r1.63 gdb-6.5/gdb/eval.c
|
||||
--- gdb-6.5.org/gdb/eval.c 25 Jul 2006 04:24:50 -0000 1.63
|
||||
+++ gdb-6.5/gdb/eval.c 25 Aug 2006 19:55:38 -0000
|
||||
@@ -2019,6 +2019,18 @@ evaluate_subexp_standard (struct type *e
|
||||
return value_at_lazy (exp->elts[pc + 1].type,
|
||||
value_as_address (arg1));
|
||||
|
||||
+ case UNOP_MEMVAL_TLS:
|
||||
+ (*pos) += 3;
|
||||
+ arg1 = evaluate_subexp (expect_type, exp, pos, noside);
|
||||
+ if (noside == EVAL_SKIP)
|
||||
+ goto nosideret;
|
||||
+ if (noside == EVAL_AVOID_SIDE_EFFECTS)
|
||||
+ return value_zero (exp->elts[pc + 2].type, lval_memory);
|
||||
+ else
|
||||
+ return value_at_lazy_tls (exp->elts[pc + 2].type,
|
||||
+ value_as_address (arg1),
|
||||
+ exp->elts[pc + 1].objfile);
|
||||
+
|
||||
case UNOP_PREINCREMENT:
|
||||
arg1 = evaluate_subexp (expect_type, exp, pos, noside);
|
||||
if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
|
||||
Index: gdb-6.5/gdb/expprint.c
|
||||
===================================================================
|
||||
RCS file: /cvs/src/src/gdb/expprint.c,v
|
||||
retrieving revision 1.24
|
||||
diff -u -p -r1.24 gdb-6.5/gdb/expprint.c
|
||||
--- gdb-6.5.org/gdb/expprint.c 7 Aug 2006 03:30:54 -0000 1.24
|
||||
+++ gdb-6.5/gdb/expprint.c 25 Aug 2006 19:55:39 -0000
|
||||
@@ -31,6 +31,7 @@
|
||||
#include "target.h"
|
||||
#include "gdb_string.h"
|
||||
#include "block.h"
|
||||
+#include "objfiles.h"
|
||||
|
||||
#ifdef HAVE_CTYPE_H
|
||||
#include <ctype.h>
|
||||
@@ -414,6 +415,33 @@ print_subexp_standard (struct expression
|
||||
fputs_filtered (")", stream);
|
||||
return;
|
||||
|
||||
+ case UNOP_MEMVAL_TLS:
|
||||
+ (*pos) += 3;
|
||||
+ if ((int) prec > (int) PREC_PREFIX)
|
||||
+ fputs_filtered ("(", stream);
|
||||
+ if (TYPE_CODE (exp->elts[pc + 2].type) == TYPE_CODE_FUNC &&
|
||||
+ exp->elts[pc + 4].opcode == OP_LONG)
|
||||
+ {
|
||||
+ /* We have a minimal symbol fn, probably. It's encoded
|
||||
+ as a UNOP_MEMVAL (function-type) of an OP_LONG (int, address).
|
||||
+ Swallow the OP_LONG (including both its opcodes); ignore
|
||||
+ its type; print the value in the type of the MEMVAL. */
|
||||
+ (*pos) += 4;
|
||||
+ val = value_at_lazy (exp->elts[pc + 2].type,
|
||||
+ (CORE_ADDR) exp->elts[pc + 6].longconst);
|
||||
+ value_print (val, stream, 0, Val_no_prettyprint);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ fputs_filtered ("{", stream);
|
||||
+ type_print (exp->elts[pc + 2].type, "", stream, 0);
|
||||
+ fputs_filtered ("} ", stream);
|
||||
+ print_subexp (exp, pos, stream, PREC_PREFIX);
|
||||
+ }
|
||||
+ if ((int) prec > (int) PREC_PREFIX)
|
||||
+ fputs_filtered (")", stream);
|
||||
+ return;
|
||||
+
|
||||
case BINOP_ASSIGN_MODIFY:
|
||||
opcode = exp->elts[pc + 1].opcode;
|
||||
(*pos) += 2;
|
||||
@@ -694,6 +722,8 @@ op_name_standard (enum exp_opcode opcode
|
||||
return "UNOP_CAST";
|
||||
case UNOP_MEMVAL:
|
||||
return "UNOP_MEMVAL";
|
||||
+ case UNOP_MEMVAL_TLS:
|
||||
+ return "UNOP_MEMVAL_TLS";
|
||||
case UNOP_NEG:
|
||||
return "UNOP_NEG";
|
||||
case UNOP_LOGICAL_NOT:
|
||||
@@ -999,6 +1029,16 @@ dump_subexp_body_standard (struct expres
|
||||
fprintf_filtered (stream, ")");
|
||||
elt = dump_subexp (exp, stream, elt + 2);
|
||||
break;
|
||||
+ case UNOP_MEMVAL_TLS:
|
||||
+ fprintf_filtered (stream, "TLS type @");
|
||||
+ gdb_print_host_address (exp->elts[elt + 1].type, stream);
|
||||
+ fprintf_filtered (stream, " (__thread /* \"%s\" */ ",
|
||||
+ (exp->elts[elt].objfile == NULL ? "(null)"
|
||||
+ : exp->elts[elt].objfile->name));
|
||||
+ type_print (exp->elts[elt + 1].type, NULL, stream, 0);
|
||||
+ fprintf_filtered (stream, ")");
|
||||
+ elt = dump_subexp (exp, stream, elt + 3);
|
||||
+ break;
|
||||
case OP_TYPE:
|
||||
fprintf_filtered (stream, "Type @");
|
||||
gdb_print_host_address (exp->elts[elt].type, stream);
|
||||
Index: gdb-6.5/gdb/expression.h
|
||||
===================================================================
|
||||
RCS file: /cvs/src/src/gdb/expression.h,v
|
||||
retrieving revision 1.18
|
||||
diff -u -p -r1.18 gdb-6.5/gdb/expression.h
|
||||
--- gdb-6.5.org/gdb/expression.h 17 Dec 2005 22:33:59 -0000 1.18
|
||||
+++ gdb-6.5/gdb/expression.h 25 Aug 2006 19:55:40 -0000
|
||||
@@ -234,6 +234,13 @@ enum exp_opcode
|
||||
following subexpression. */
|
||||
UNOP_MEMVAL,
|
||||
|
||||
+ /* UNOP_MEMVAL_TLS is followed by a `struct objfile' pointer in the next
|
||||
+ exp_element and a type pointer in the following exp_element.
|
||||
+ With another UNOP_MEMVAL_TLS at the end, this makes four exp_elements.
|
||||
+ It casts the contents of the word offsetted by the value of the
|
||||
+ following subexpression from the TLS specified by `struct objfile'. */
|
||||
+ UNOP_MEMVAL_TLS,
|
||||
+
|
||||
/* UNOP_... operate on one value from a following subexpression
|
||||
and replace it with a result. They take no immediate arguments. */
|
||||
|
||||
@@ -360,6 +367,7 @@ union exp_element
|
||||
struct type *type;
|
||||
struct internalvar *internalvar;
|
||||
struct block *block;
|
||||
+ struct objfile *objfile;
|
||||
};
|
||||
|
||||
struct expression
|
||||
Index: gdb-6.5/gdb/parse.c
|
||||
===================================================================
|
||||
RCS file: /cvs/src/src/gdb/parse.c,v
|
||||
retrieving revision 1.53
|
||||
diff -u -p -r1.53 gdb-6.5/gdb/parse.c
|
||||
--- gdb-6.5.org/gdb/parse.c 6 Jul 2006 14:00:48 -0000 1.53
|
||||
+++ gdb-6.5/gdb/parse.c 25 Aug 2006 19:55:41 -0000
|
||||
@@ -53,6 +53,7 @@
|
||||
#include "gdb_assert.h"
|
||||
#include "block.h"
|
||||
#include "source.h"
|
||||
+#include "objfiles.h"
|
||||
|
||||
/* Standard set of definitions for printing, dumping, prefixifying,
|
||||
* and evaluating expressions. */
|
||||
@@ -219,6 +220,15 @@ write_exp_elt_block (struct block *b)
|
||||
}
|
||||
|
||||
void
|
||||
+write_exp_elt_objfile (struct objfile *objfile)
|
||||
+{
|
||||
+ union exp_element tmp;
|
||||
+ memset (&tmp, 0, sizeof (union exp_element));
|
||||
+ tmp.objfile = objfile;
|
||||
+ write_exp_elt (tmp);
|
||||
+}
|
||||
+
|
||||
+void
|
||||
write_exp_elt_longcst (LONGEST expelt)
|
||||
{
|
||||
union exp_element tmp;
|
||||
@@ -378,6 +388,9 @@ write_exp_bitstring (struct stoken str)
|
||||
static struct type *msym_text_symbol_type;
|
||||
static struct type *msym_data_symbol_type;
|
||||
static struct type *msym_unknown_symbol_type;
|
||||
+static struct type *msym_text_tls_symbol_type;
|
||||
+static struct type *msym_data_tls_symbol_type;
|
||||
+static struct type *msym_unknown_tls_symbol_type;
|
||||
|
||||
void
|
||||
write_exp_msymbol (struct minimal_symbol *msymbol,
|
||||
@@ -385,6 +398,8 @@ write_exp_msymbol (struct minimal_symbol
|
||||
struct type *data_symbol_type)
|
||||
{
|
||||
CORE_ADDR addr;
|
||||
+ int tls = SYMBOL_BFD_SECTION (msymbol)->flags & SEC_THREAD_LOCAL;
|
||||
+ enum exp_opcode opcode = tls ? UNOP_MEMVAL_TLS : UNOP_MEMVAL;
|
||||
|
||||
write_exp_elt_opcode (OP_LONG);
|
||||
/* Let's make the type big enough to hold a 64-bit address. */
|
||||
@@ -397,27 +412,49 @@ write_exp_msymbol (struct minimal_symbol
|
||||
|
||||
write_exp_elt_opcode (OP_LONG);
|
||||
|
||||
- write_exp_elt_opcode (UNOP_MEMVAL);
|
||||
+ write_exp_elt_opcode (opcode);
|
||||
+
|
||||
+ if (opcode == UNOP_MEMVAL_TLS)
|
||||
+ {
|
||||
+ bfd *bfd = SYMBOL_BFD_SECTION (msymbol)->owner;
|
||||
+ struct objfile *ofp;
|
||||
+
|
||||
+ ALL_OBJFILES (ofp)
|
||||
+ if (ofp->obfd == bfd)
|
||||
+ break;
|
||||
+ write_exp_elt_objfile (ofp);
|
||||
+ }
|
||||
+
|
||||
switch (msymbol->type)
|
||||
{
|
||||
case mst_text:
|
||||
case mst_file_text:
|
||||
case mst_solib_trampoline:
|
||||
- write_exp_elt_type (msym_text_symbol_type);
|
||||
+ if (tls)
|
||||
+ write_exp_elt_type (msym_text_tls_symbol_type);
|
||||
+ else
|
||||
+ write_exp_elt_type (msym_text_symbol_type);
|
||||
break;
|
||||
|
||||
case mst_data:
|
||||
case mst_file_data:
|
||||
case mst_bss:
|
||||
case mst_file_bss:
|
||||
- write_exp_elt_type (msym_data_symbol_type);
|
||||
+ if (tls)
|
||||
+ write_exp_elt_type (msym_data_tls_symbol_type);
|
||||
+ else
|
||||
+ write_exp_elt_type (msym_data_symbol_type);
|
||||
break;
|
||||
|
||||
default:
|
||||
- write_exp_elt_type (msym_unknown_symbol_type);
|
||||
+ if (tls)
|
||||
+ write_exp_elt_type (msym_unknown_tls_symbol_type);
|
||||
+ else
|
||||
+ write_exp_elt_type (msym_unknown_symbol_type);
|
||||
break;
|
||||
}
|
||||
- write_exp_elt_opcode (UNOP_MEMVAL);
|
||||
+
|
||||
+ write_exp_elt_opcode (opcode);
|
||||
}
|
||||
|
||||
/* Recognize tokens that start with '$'. These include:
|
||||
@@ -904,6 +941,11 @@ operator_length_standard (struct express
|
||||
args = 1;
|
||||
break;
|
||||
|
||||
+ case UNOP_MEMVAL_TLS:
|
||||
+ oplen = 4;
|
||||
+ args = 1;
|
||||
+ break;
|
||||
+
|
||||
case UNOP_ABS:
|
||||
case UNOP_CAP:
|
||||
case UNOP_CHR:
|
||||
@@ -1341,6 +1383,17 @@ build_parse (void)
|
||||
init_type (TYPE_CODE_INT, 1, 0,
|
||||
"<variable (not text or data), no debug info>",
|
||||
NULL);
|
||||
+
|
||||
+ msym_text_tls_symbol_type =
|
||||
+ init_type (TYPE_CODE_FUNC, 1, 0, "<TLS-based text variable, no debug info>", NULL);
|
||||
+ TYPE_TARGET_TYPE (msym_text_tls_symbol_type) = builtin_type_int;
|
||||
+ msym_data_tls_symbol_type =
|
||||
+ init_type (TYPE_CODE_INT, TARGET_INT_BIT / HOST_CHAR_BIT, 0,
|
||||
+ "<TLS-based data variable, no debug info>", NULL);
|
||||
+ msym_unknown_tls_symbol_type =
|
||||
+ init_type (TYPE_CODE_INT, 1, 0,
|
||||
+ "<TLS-based variable (not text or data), no debug info>",
|
||||
+ NULL);
|
||||
}
|
||||
|
||||
/* This function avoids direct calls to fprintf
|
||||
Index: gdb-6.5/gdb/parser-defs.h
|
||||
===================================================================
|
||||
RCS file: /cvs/src/src/gdb/parser-defs.h,v
|
||||
retrieving revision 1.20
|
||||
diff -u -p -r1.20 gdb-6.5/gdb/parser-defs.h
|
||||
--- gdb-6.5.org/gdb/parser-defs.h 17 Dec 2005 22:34:01 -0000 1.20
|
||||
+++ gdb-6.5/gdb/parser-defs.h 25 Aug 2006 19:55:41 -0000
|
||||
@@ -131,6 +131,8 @@ extern void write_exp_bitstring (struct
|
||||
|
||||
extern void write_exp_elt_block (struct block *);
|
||||
|
||||
+extern void write_exp_elt_objfile (struct objfile *objfile);
|
||||
+
|
||||
extern void write_exp_msymbol (struct minimal_symbol *,
|
||||
struct type *, struct type *);
|
||||
|
||||
--- gdb-6.5.org/gdb/target.c 16 Aug 2006 18:31:03 -0000 1.124
|
||||
+++ gdb-6.5/gdb/target.c 25 Aug 2006 19:55:43 -0000
|
||||
@@ -40,6 +40,7 @@
|
||||
#include "gdb_assert.h"
|
||||
#include "gdbcore.h"
|
||||
#include "observer.h"
|
||||
+#include "exceptions.h"
|
||||
|
||||
static void target_info (char *, int);
|
||||
|
||||
@@ -755,6 +756,103 @@ pop_target (void)
|
||||
internal_error (__FILE__, __LINE__, _("failed internal consistency check"));
|
||||
}
|
||||
|
||||
+/* Using the objfile specified in BATON, find the address for the
|
||||
+ current thread's thread-local storage with offset OFFSET. */
|
||||
+CORE_ADDR
|
||||
+target_translate_tls_address (struct objfile *objfile, CORE_ADDR offset)
|
||||
+{
|
||||
+ volatile CORE_ADDR addr = 0;
|
||||
+
|
||||
+ if (target_get_thread_local_address_p ()
|
||||
+ && gdbarch_fetch_tls_load_module_address_p (current_gdbarch))
|
||||
+ {
|
||||
+ ptid_t ptid = inferior_ptid;
|
||||
+ volatile struct gdb_exception ex;
|
||||
+
|
||||
+ TRY_CATCH (ex, RETURN_MASK_ALL)
|
||||
+ {
|
||||
+ CORE_ADDR lm_addr;
|
||||
+
|
||||
+ /* Fetch the load module address for this objfile. */
|
||||
+ lm_addr = gdbarch_fetch_tls_load_module_address (current_gdbarch,
|
||||
+ objfile);
|
||||
+ /* If it's 0, throw the appropriate exception. */
|
||||
+ if (lm_addr == 0)
|
||||
+ throw_error (TLS_LOAD_MODULE_NOT_FOUND_ERROR,
|
||||
+ _("TLS load module not found"));
|
||||
+
|
||||
+ addr = target_get_thread_local_address (ptid, lm_addr, offset);
|
||||
+ }
|
||||
+ /* If an error occurred, print TLS related messages here. Otherwise,
|
||||
+ throw the error to some higher catcher. */
|
||||
+ if (ex.reason < 0)
|
||||
+ {
|
||||
+ int objfile_is_library = (objfile->flags & OBJF_SHARED);
|
||||
+
|
||||
+ switch (ex.error)
|
||||
+ {
|
||||
+ case TLS_NO_LIBRARY_SUPPORT_ERROR:
|
||||
+ error (_("Cannot find thread-local variables in this thread library."));
|
||||
+ break;
|
||||
+ case TLS_LOAD_MODULE_NOT_FOUND_ERROR:
|
||||
+ if (objfile_is_library)
|
||||
+ error (_("Cannot find shared library `%s' in dynamic"
|
||||
+ " linker's load module list"), objfile->name);
|
||||
+ else
|
||||
+ error (_("Cannot find executable file `%s' in dynamic"
|
||||
+ " linker's load module list"), objfile->name);
|
||||
+ break;
|
||||
+ case TLS_NOT_ALLOCATED_YET_ERROR:
|
||||
+ if (objfile_is_library)
|
||||
+ error (_("The inferior has not yet allocated storage for"
|
||||
+ " thread-local variables in\n"
|
||||
+ "the shared library `%s'\n"
|
||||
+ "for %s"),
|
||||
+ objfile->name, target_pid_to_str (ptid));
|
||||
+ else
|
||||
+ error (_("The inferior has not yet allocated storage for"
|
||||
+ " thread-local variables in\n"
|
||||
+ "the executable `%s'\n"
|
||||
+ "for %s"),
|
||||
+ objfile->name, target_pid_to_str (ptid));
|
||||
+ break;
|
||||
+ case TLS_GENERIC_ERROR:
|
||||
+ if (objfile_is_library)
|
||||
+ error (_("Cannot find thread-local storage for %s, "
|
||||
+ "shared library %s:\n%s"),
|
||||
+ target_pid_to_str (ptid),
|
||||
+ objfile->name, ex.message);
|
||||
+ else
|
||||
+ error (_("Cannot find thread-local storage for %s, "
|
||||
+ "executable file %s:\n%s"),
|
||||
+ target_pid_to_str (ptid),
|
||||
+ objfile->name, ex.message);
|
||||
+ break;
|
||||
+ default:
|
||||
+ throw_exception (ex);
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ /* It wouldn't be wrong here to try a gdbarch method, too; finding
|
||||
+ TLS is an ABI-specific thing. But we don't do that yet. */
|
||||
+ else
|
||||
+ {
|
||||
+ struct minimal_symbol *msymbol;
|
||||
+
|
||||
@ -576,250 +44,6 @@ diff -u -p -r1.20 gdb-6.5/gdb/parser-defs.h
|
||||
+ " compile the program with `gcc -ggdb3' or `gcc -pthread'."));
|
||||
+ error (_("Cannot find thread-local variables on this target"));
|
||||
+ }
|
||||
+
|
||||
+ return addr;
|
||||
+}
|
||||
+
|
||||
#undef MIN
|
||||
#define MIN(A, B) (((A) <= (B)) ? (A) : (B))
|
||||
|
||||
Index: gdb-6.5/gdb/target.h
|
||||
===================================================================
|
||||
RCS file: /cvs/src/src/gdb/target.h,v
|
||||
retrieving revision 1.87
|
||||
diff -u -p -r1.87 gdb-6.5/gdb/target.h
|
||||
--- gdb-6.5.org/gdb/target.h 15 Aug 2006 18:46:25 -0000 1.87
|
||||
+++ gdb-6.5/gdb/target.h 25 Aug 2006 19:55:44 -0000
|
||||
@@ -1131,6 +1131,9 @@ extern void target_preopen (int);
|
||||
|
||||
extern void pop_target (void);
|
||||
|
||||
+extern CORE_ADDR target_translate_tls_address (struct objfile *objfile,
|
||||
+ CORE_ADDR offset);
|
||||
+
|
||||
/* Struct section_table maps address ranges to file sections. It is
|
||||
mostly used with BFD files, but can be used without (e.g. for handling
|
||||
raw disks, or files not in formats handled by BFD). */
|
||||
Index: gdb-6.5/gdb/valops.c
|
||||
===================================================================
|
||||
RCS file: /cvs/src/src/gdb/valops.c,v
|
||||
retrieving revision 1.164
|
||||
diff -u -p -r1.164 gdb-6.5/gdb/valops.c
|
||||
--- gdb-6.5.org/gdb/valops.c 13 Jul 2006 04:31:42 -0000 1.164
|
||||
+++ gdb-6.5/gdb/valops.c 25 Aug 2006 19:55:46 -0000
|
||||
@@ -501,7 +501,8 @@ value_at (struct type *type, CORE_ADDR a
|
||||
/* Return a lazy value with type TYPE located at ADDR (cf. value_at). */
|
||||
|
||||
struct value *
|
||||
-value_at_lazy (struct type *type, CORE_ADDR addr)
|
||||
+value_at_lazy_tls (struct type *type, CORE_ADDR addr,
|
||||
+ struct objfile *tls_objfile)
|
||||
{
|
||||
struct value *val;
|
||||
|
||||
@@ -512,11 +513,19 @@ value_at_lazy (struct type *type, CORE_A
|
||||
|
||||
VALUE_LVAL (val) = lval_memory;
|
||||
VALUE_ADDRESS (val) = addr;
|
||||
+ if (tls_objfile != NULL)
|
||||
+ set_value_tls_objfile (val, tls_objfile);
|
||||
set_value_lazy (val, 1);
|
||||
|
||||
return val;
|
||||
return addr;
|
||||
}
|
||||
|
||||
+struct value *
|
||||
+value_at_lazy (struct type *type, CORE_ADDR addr)
|
||||
+{
|
||||
+ return value_at_lazy_tls (type, addr, NULL);
|
||||
+}
|
||||
+
|
||||
/* Called only from the value_contents and value_contents_all()
|
||||
macros, if the current data for a variable needs to be loaded into
|
||||
value_contents(VAL). Fetches the data from the user's process, and
|
||||
@@ -538,7 +547,17 @@ value_fetch_lazy (struct value *val)
|
||||
|
||||
struct type *type = value_type (val);
|
||||
if (length)
|
||||
- read_memory (addr, value_contents_all_raw (val), length);
|
||||
+ {
|
||||
+ struct objfile *tls_objfile = value_tls_objfile (val);
|
||||
+
|
||||
+ if (tls_objfile != NULL)
|
||||
+ {
|
||||
+ /* `target_translate_tls_address' uses `inferior_ptid'. */
|
||||
+ addr = target_translate_tls_address (tls_objfile, addr);
|
||||
+ }
|
||||
+
|
||||
+ read_memory (addr, value_contents_all_raw (val), length);
|
||||
+ }
|
||||
|
||||
set_value_lazy (val, 0);
|
||||
return 0;
|
||||
@@ -596,6 +615,7 @@ value_assign (struct value *toval, struc
|
||||
CORE_ADDR changed_addr;
|
||||
int changed_len;
|
||||
gdb_byte buffer[sizeof (LONGEST)];
|
||||
+ struct objfile *tls_objfile = value_tls_objfile (toval);
|
||||
|
||||
if (value_bitsize (toval))
|
||||
{
|
||||
@@ -624,6 +644,13 @@ value_assign (struct value *toval, struc
|
||||
dest_buffer = value_contents (fromval);
|
||||
}
|
||||
|
||||
+ if (tls_objfile != NULL)
|
||||
+ {
|
||||
+ /* `target_translate_tls_address' uses `inferior_ptid'. */
|
||||
+ changed_addr = target_translate_tls_address (tls_objfile,
|
||||
+ changed_addr);
|
||||
+ }
|
||||
+
|
||||
write_memory (changed_addr, dest_buffer, changed_len);
|
||||
if (deprecated_memory_changed_hook)
|
||||
deprecated_memory_changed_hook (changed_addr, changed_len);
|
||||
Index: gdb-6.5/gdb/value.c
|
||||
===================================================================
|
||||
RCS file: /cvs/src/src/gdb/value.c,v
|
||||
retrieving revision 1.36
|
||||
diff -u -p -r1.36 gdb-6.5/gdb/value.c
|
||||
--- gdb-6.5.org/gdb/value.c 31 Mar 2006 10:36:18 -0000 1.36
|
||||
+++ gdb-6.5/gdb/value.c 25 Aug 2006 19:55:47 -0000
|
||||
@@ -158,6 +158,9 @@ struct value
|
||||
actually exist in the program. */
|
||||
char optimized_out;
|
||||
|
||||
+ /* TLS owner. */
|
||||
+ struct objfile *tls_objfile;
|
||||
+
|
||||
/* Actual contents of the value. For use of this value; setting it
|
||||
uses the stuff above. Not valid if lazy is nonzero. Target
|
||||
byte-order. We force it to be aligned properly for any possible
|
||||
@@ -230,6 +233,7 @@ allocate_value (struct type *type)
|
||||
VALUE_REGNUM (val) = -1;
|
||||
val->lazy = 0;
|
||||
val->optimized_out = 0;
|
||||
+ val->tls_objfile = NULL;
|
||||
val->embedded_offset = 0;
|
||||
val->pointed_to_offset = 0;
|
||||
val->modifiable = 1;
|
||||
@@ -344,6 +348,18 @@ set_value_lazy (struct value *value, int
|
||||
value->lazy = val;
|
||||
}
|
||||
|
||||
+struct objfile *
|
||||
+value_tls_objfile (struct value *value)
|
||||
+{
|
||||
+ return value->tls_objfile;
|
||||
+}
|
||||
+
|
||||
+void
|
||||
+set_value_tls_objfile (struct value *value, struct objfile *tls_objfile)
|
||||
+{
|
||||
+ value->tls_objfile = tls_objfile;
|
||||
+}
|
||||
+
|
||||
const gdb_byte *
|
||||
value_contents (struct value *value)
|
||||
{
|
||||
Index: gdb-6.5/gdb/value.h
|
||||
===================================================================
|
||||
RCS file: /cvs/src/src/gdb/value.h,v
|
||||
retrieving revision 1.92
|
||||
diff -u -p -r1.92 gdb-6.5/gdb/value.h
|
||||
--- gdb-6.5.org/gdb/value.h 13 Jul 2006 04:31:42 -0000 1.92
|
||||
+++ gdb-6.5/gdb/value.h 25 Aug 2006 19:55:48 -0000
|
||||
@@ -154,6 +154,10 @@ extern void set_value_embedded_offset (s
|
||||
extern int value_lazy (struct value *);
|
||||
extern void set_value_lazy (struct value *value, int val);
|
||||
|
||||
+extern struct objfile *value_tls_objfile (struct value *value);
|
||||
+extern void set_value_tls_objfile (struct value *value,
|
||||
+ struct objfile *tls_objfile);
|
||||
+
|
||||
/* value_contents() and value_contents_raw() both return the address
|
||||
of the gdb buffer used to hold a copy of the contents of the lval.
|
||||
value_contents() is used when the contents of the buffer are needed
|
||||
@@ -277,6 +281,8 @@ extern struct value *value_from_double (
|
||||
extern struct value *value_from_string (char *string);
|
||||
|
||||
extern struct value *value_at (struct type *type, CORE_ADDR addr);
|
||||
+extern struct value *value_at_lazy_tls (struct type *type, CORE_ADDR addr,
|
||||
+ struct objfile *tls_objfile);
|
||||
extern struct value *value_at_lazy (struct type *type, CORE_ADDR addr);
|
||||
|
||||
extern struct value *value_from_register (struct type *type, int regnum,
|
||||
Index: gdb-6.5/gdb/testsuite/gdb.threads/tls-nodebug.c
|
||||
===================================================================
|
||||
RCS file: gdb-6.5/gdb/testsuite/gdb.threads/tls-nodebug.c
|
||||
diff -N gdb-6.5/gdb/testsuite/gdb.threads/tls-nodebug.c
|
||||
--- /dev/null 1 Jan 1970 00:00:00 -0000
|
||||
+++ gdb-6.5/gdb/testsuite/gdb.threads/tls-nodebug.c 25 Aug 2006 19:55:48 -0000
|
||||
@@ -0,0 +1,8 @@
|
||||
+/* Test accessing TLS based variable without any debug info compiled. */
|
||||
+
|
||||
+__thread int thread_local = 42;
|
||||
+
|
||||
+int main(void)
|
||||
+{
|
||||
+ return 0;
|
||||
+}
|
||||
Index: gdb-6.5/gdb/testsuite/gdb.threads/tls-nodebug.exp
|
||||
===================================================================
|
||||
RCS file: gdb-6.5/gdb/testsuite/gdb.threads/tls-nodebug.exp
|
||||
diff -N gdb-6.5/gdb/testsuite/gdb.threads/tls-nodebug.exp
|
||||
--- /dev/null 1 Jan 1970 00:00:00 -0000
|
||||
+++ gdb-6.5/gdb/testsuite/gdb.threads/tls-nodebug.exp 25 Aug 2006 19:55:49 -0000
|
||||
@@ -0,0 +1,52 @@
|
||||
+# tls.exp -- Expect script to test thread-local storage without debuginfo
|
||||
+# Copyright (C) 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@prep.ai.mit.edu
|
||||
+
|
||||
+set testfile tls-nodebug
|
||||
+set srcfile ${testfile}.c
|
||||
+set binfile ${objdir}/${subdir}/${testfile}
|
||||
+
|
||||
+if [istarget "*-*-linux"] then {
|
||||
+ set target_cflags "-D_MIT_POSIX_THREADS"
|
||||
+} else {
|
||||
+ set target_cflags ""
|
||||
+}
|
||||
+
|
||||
+if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable $options] != "" } {
|
||||
+ 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
|
||||
+}
|
||||
+
|
||||
+# Formerly: Cannot access memory at address 0x0
|
||||
+gdb_test "p thread_local" "= 42" "thread local storage"
|
||||
+
|
||||
+# Done!
|
||||
+#
|
||||
+gdb_exit
|
||||
+
|
||||
+return 0
|
||||
|
@ -7,9 +7,11 @@ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=190810
|
||||
(remote_async_wait): Likewise.
|
||||
|
||||
|
||||
--- gdb-6.5/gdb/remote.c.orig 2006-10-01 08:01:17.000000000 -0400
|
||||
+++ gdb-6.5/gdb/remote.c 2006-10-01 08:03:18.000000000 -0400
|
||||
@@ -2789,8 +2789,13 @@
|
||||
Index: gdb-6.6/gdb/remote.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/remote.c 2007-01-20 06:43:04.000000000 +0100
|
||||
+++ gdb-6.6/gdb/remote.c 2007-01-20 06:55:50.000000000 +0100
|
||||
@@ -3111,8 +3111,13 @@ Packet: '%s'\n"),
|
||||
reg->regnum, regs);
|
||||
}
|
||||
|
||||
@ -24,7 +26,7 @@ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=190810
|
||||
buf, p);
|
||||
}
|
||||
}
|
||||
@@ -2983,8 +2988,13 @@
|
||||
@@ -3307,8 +3312,13 @@ Packet: '%s'\n"),
|
||||
regcache_raw_supply (current_regcache, reg->regnum, regs);
|
||||
}
|
||||
|
||||
|
146
gdb-6.5-bz196439-valgrind-memcheck-compat-test.patch
Normal file
146
gdb-6.5-bz196439-valgrind-memcheck-compat-test.patch
Normal file
@ -0,0 +1,146 @@
|
||||
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=196439
|
||||
|
||||
|
||||
2006-08-26 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* gdb.dwarf2/dw2-stripped.exp: New file, Handle corrupted
|
||||
or missing location list information.
|
||||
* gdb.dwarf2/dw2-stripped.c: New file, Handle corrupted
|
||||
or missing location list information.
|
||||
|
||||
|
||||
Index: gdb-6.5/gdb/testsuite/gdb.dwarf2/dw2-stripped.c
|
||||
===================================================================
|
||||
RCS file: gdb-6.5/gdb/testsuite/gdb.dwarf2/dw2-stripped.c
|
||||
diff -N gdb-6.5/gdb/testsuite/gdb.dwarf2/dw2-stripped.c
|
||||
--- /dev/null 1 Jan 1970 00:00:00 -0000
|
||||
+++ gdb-6.5/gdb/testsuite/gdb.dwarf2/dw2-stripped.c 26 Aug 2006 11:47:26 -0000
|
||||
@@ -0,0 +1,42 @@
|
||||
+/* This testcase is part of GDB, the GNU debugger.
|
||||
+
|
||||
+ Copyright 2004 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. */
|
||||
+
|
||||
+
|
||||
+/* The function `func1' traced into must have debug info on offset > 0;
|
||||
+ (DW_UNSND (attr)). This is the reason of `func0' existence. */
|
||||
+
|
||||
+void
|
||||
+func0(int a, int b)
|
||||
+{
|
||||
+}
|
||||
+
|
||||
+/* `func1' being traced into must have some arguments to dump. */
|
||||
+
|
||||
+void
|
||||
+func1(int a, int b)
|
||||
+{
|
||||
+ func0 (a,b);
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main(void)
|
||||
+{
|
||||
+ func1 (1, 2);
|
||||
+ return 0;
|
||||
+}
|
||||
Index: gdb-6.5/gdb/testsuite/gdb.dwarf2/dw2-stripped.exp
|
||||
===================================================================
|
||||
RCS file: gdb-6.5/gdb/testsuite/gdb.dwarf2/dw2-stripped.exp
|
||||
diff -N gdb-6.5/gdb/testsuite/gdb.dwarf2/dw2-stripped.exp
|
||||
--- /dev/null 1 Jan 1970 00:00:00 -0000
|
||||
+++ gdb-6.5/gdb/testsuite/gdb.dwarf2/dw2-stripped.exp 26 Aug 2006 11:47:27 -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.
|
||||
+
|
||||
+# Minimal DWARF-2 unit test
|
||||
+
|
||||
+# This test can only be run on targets which support DWARF-2.
|
||||
+# For now pick a sampling of likely targets.
|
||||
+if {![istarget *-*-linux*]
|
||||
+ && ![istarget *-*-gnu*]
|
||||
+ && ![istarget *-*-elf*]
|
||||
+ && ![istarget *-*-openbsd*]
|
||||
+ && ![istarget arm-*-eabi*]
|
||||
+ && ![istarget powerpc-*-eabi*]} {
|
||||
+ return 0
|
||||
+}
|
||||
+
|
||||
+set testfile "dw2-stripped"
|
||||
+set srcfile ${testfile}.c
|
||||
+set binfile ${objdir}/${subdir}/${testfile}.x
|
||||
+
|
||||
+remote_exec build "rm -f ${binfile}"
|
||||
+
|
||||
+# get the value of gcc_compiled
|
||||
+if [get_compiler_info ${binfile}] {
|
||||
+ return -1
|
||||
+}
|
||||
+
|
||||
+# This test can only be run on gcc as we use additional_flags=FIXME
|
||||
+if {$gcc_compiled == 0} {
|
||||
+ return 0
|
||||
+}
|
||||
+
|
||||
+if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-ggdb3}] != "" } {
|
||||
+ return -1
|
||||
+}
|
||||
+
|
||||
+remote_exec build "objcopy -R .debug_loc ${binfile}"
|
||||
+set strip_output [remote_exec build "objdump -h ${binfile}"]
|
||||
+
|
||||
+set test "stripping test file preservation"
|
||||
+if [ regexp ".debug_info " $strip_output] {
|
||||
+ pass "$test (.debug_info preserved)"
|
||||
+} else {
|
||||
+ fail "$test (.debug_info got also stripped)"
|
||||
+}
|
||||
+
|
||||
+set test "stripping test file functionality"
|
||||
+if [ regexp ".debug_loc " $strip_output] {
|
||||
+ fail "$test (.debug_loc still present)"
|
||||
+} else {
|
||||
+ pass "$test (.debug_loc stripped)"
|
||||
+}
|
||||
+
|
||||
+gdb_exit
|
||||
+gdb_start
|
||||
+gdb_reinitialize_dir $srcdir/$subdir
|
||||
+gdb_load ${binfile}
|
||||
+
|
||||
+# For C programs, "start" should stop in main().
|
||||
+
|
||||
+gdb_test "start" \
|
||||
+ ".*main \\(\\) at .*" \
|
||||
+ "start"
|
||||
+gdb_test "step" \
|
||||
+ "func.* \\(.*\\) at .*" \
|
||||
+ "step"
|
@ -1,9 +1,11 @@
|
||||
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=218379
|
||||
|
||||
|
||||
--- gdb-6.5-depatched/gdb/minsyms.c 2006-12-17 16:10:53.000000000 -0500
|
||||
+++ gdb-6.5/gdb/minsyms.c 2006-12-17 16:51:21.000000000 -0500
|
||||
@@ -505,6 +505,11 @@
|
||||
Index: gdb-6.6/gdb/minsyms.c
|
||||
===================================================================
|
||||
--- gdb-6.6.orig/gdb/minsyms.c 2007-01-20 13:53:48.000000000 +0100
|
||||
+++ gdb-6.6/gdb/minsyms.c 2007-01-20 13:58:47.000000000 +0100
|
||||
@@ -490,6 +490,11 @@ lookup_minimal_symbol_by_pc_section (COR
|
||||
don't fill the bfd_section member, so don't
|
||||
throw away symbols on those platforms. */
|
||||
&& SYMBOL_BFD_SECTION (&msymbol[hi]) != NULL
|
||||
@ -14,4 +16,4 @@ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=218379
|
||||
+ || MSYMBOL_SIZE (&msymbol[hi]))
|
||||
&& (!matching_bfd_sections
|
||||
(SYMBOL_BFD_SECTION (&msymbol[hi]), section)))
|
||||
--hi;
|
||||
{
|
||||
|
@ -16,11 +16,11 @@
|
||||
* Makefile.in: Dependencies updated.
|
||||
|
||||
|
||||
Index: gdb-6.5/gdb/Makefile.in
|
||||
Index: gdb-6.6/gdb/Makefile.in
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/Makefile.in 21 Sep 2006 14:00:53 -0000 1.844
|
||||
+++ gdb-6.5/gdb/Makefile.in 1 Oct 2006 16:22:42 -0000
|
||||
@@ -696,6 +696,7 @@ gdb_h = gdb.h
|
||||
--- 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_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 +28,7 @@ Index: gdb-6.5/gdb/Makefile.in
|
||||
gdb_ptrace_h = gdb_ptrace.h
|
||||
gdb_regex_h = gdb_regex.h $(xregex_h)
|
||||
gdb_select_h = gdb_select.h
|
||||
@@ -705,6 +706,7 @@ gdb_string_h = gdb_string.h
|
||||
@@ -714,6 +715,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,21 +36,21 @@ Index: gdb-6.5/gdb/Makefile.in
|
||||
gdb_vfork_h = gdb_vfork.h
|
||||
gdb_wait_h = gdb_wait.h
|
||||
glibc_tdep_h = glibc-tdep.h
|
||||
@@ -1743,7 +1745,8 @@ amd64fbsd-tdep.o: amd64fbsd-tdep.c $(def
|
||||
@@ -1779,7 +1781,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)
|
||||
+ $(i386_linux_tdep_h) $(amd64_nat_h) $(target_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) \
|
||||
+ $(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)
|
||||
Index: gdb-6.5/gdb/amd64-linux-nat.c
|
||||
$(solib_svr4_h) $(gdbtypes_h) $(reggroups_h) $(amd64_linux_tdep_h)
|
||||
Index: gdb-6.6/gdb/amd64-linux-nat.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/amd64-linux-nat.c 19 Aug 2006 15:15:18 -0000 1.13
|
||||
+++ gdb-6.5/gdb/amd64-linux-nat.c 1 Oct 2006 16:22:42 -0000
|
||||
@@ -52,6 +52,9 @@
|
||||
--- 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 @@
|
||||
#include "amd64-tdep.h"
|
||||
#include "i386-linux-tdep.h"
|
||||
#include "amd64-nat.h"
|
||||
@ -60,7 +60,7 @@ Index: gdb-6.5/gdb/amd64-linux-nat.c
|
||||
|
||||
/* Mapping between the general-purpose registers in GNU/Linux x86-64
|
||||
`struct user' format and GDB's register cache layout. */
|
||||
@@ -86,6 +89,35 @@ static int amd64_linux_gregset64_reg_off
|
||||
@@ -87,6 +90,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 +96,7 @@ Index: gdb-6.5/gdb/amd64-linux-nat.c
|
||||
/* From <sys/reg.h> on GNU/Linux i386. */
|
||||
static int amd64_linux_gregset32_reg_offset[] =
|
||||
{
|
||||
@@ -104,6 +136,94 @@ static int amd64_linux_gregset32_reg_off
|
||||
@@ -105,6 +137,94 @@ static int amd64_linux_gregset32_reg_off
|
||||
};
|
||||
|
||||
|
||||
@ -191,7 +191,7 @@ Index: gdb-6.5/gdb/amd64-linux-nat.c
|
||||
/* Transfering the general-purpose registers between GDB, inferiors
|
||||
and core files. */
|
||||
|
||||
@@ -406,6 +526,11 @@ _initialize_amd64_linux_nat (void)
|
||||
@@ -529,6 +649,11 @@ _initialize_amd64_linux_nat (void)
|
||||
t->to_fetch_registers = amd64_linux_fetch_inferior_registers;
|
||||
t->to_store_registers = amd64_linux_store_inferior_registers;
|
||||
|
||||
@ -202,11 +202,11 @@ Index: gdb-6.5/gdb/amd64-linux-nat.c
|
||||
+
|
||||
/* Register the target. */
|
||||
linux_nat_add_target (t);
|
||||
}
|
||||
Index: gdb-6.5/gdb/config.in
|
||||
|
||||
Index: gdb-6.6/gdb/config.in
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/config.in 8 Aug 2006 20:32:15 -0000 1.84
|
||||
+++ gdb-6.5/gdb/config.in 1 Oct 2006 16:22:42 -0000
|
||||
--- 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 @@
|
||||
/* Define to 1 if you have the <sys/poll.h> header file. */
|
||||
#undef HAVE_SYS_POLL_H
|
||||
@ -227,11 +227,11 @@ Index: gdb-6.5/gdb/config.in
|
||||
/* Define to 1 if you have the <sys/user.h> header file. */
|
||||
#undef HAVE_SYS_USER_H
|
||||
|
||||
Index: gdb-6.5/gdb/configure
|
||||
Index: gdb-6.6/gdb/configure
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/configure 2006-10-01 18:43:40.000000000 +0200
|
||||
+++ gdb-6.5/gdb/configure 2006-10-01 18:40:44.000000000 +0200
|
||||
@@ -11949,6 +11949,157 @@
|
||||
--- 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
|
||||
|
||||
|
||||
|
||||
@ -389,11 +389,11 @@ Index: gdb-6.5/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.5/gdb/configure.ac
|
||||
Index: gdb-6.6/gdb/configure.ac
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/configure.ac 8 Aug 2006 20:26:23 -0000 1.34
|
||||
+++ gdb-6.5/gdb/configure.ac 1 Oct 2006 16:22:43 -0000
|
||||
@@ -365,6 +365,7 @@ AC_CHECK_HEADERS(sys/user.h, [], [],
|
||||
--- 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, [], [],
|
||||
# include <sys/param.h>
|
||||
#endif
|
||||
])
|
||||
@ -401,11 +401,11 @@ Index: gdb-6.5/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.5/gdb/gcore.c
|
||||
Index: gdb-6.6/gdb/gcore.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/gcore.c 17 Dec 2005 22:33:59 -0000 1.18
|
||||
+++ gdb-6.5/gdb/gcore.c 1 Oct 2006 16:22:43 -0000
|
||||
@@ -314,6 +314,11 @@ gcore_create_callback (CORE_ADDR vaddr,
|
||||
--- 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,
|
||||
asection *osec;
|
||||
flagword flags = SEC_ALLOC | SEC_HAS_CONTENTS | SEC_LOAD;
|
||||
|
||||
@ -417,10 +417,10 @@ Index: gdb-6.5/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.5/gdb/gdb_procfs32.h
|
||||
Index: gdb-6.6/gdb/gdb_procfs32.h
|
||||
===================================================================
|
||||
--- /dev/null 1 Jan 1970 00:00:00 -0000
|
||||
+++ gdb-6.5/gdb/gdb_procfs32.h 1 Oct 2006 16:22:43 -0000
|
||||
--- /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
|
||||
@@ -0,0 +1,128 @@
|
||||
+#ifdef HAVE_SYS_PROCFS32_H
|
||||
+#include <sys/procfs32.h>
|
||||
@ -550,10 +550,10 @@ Index: gdb-6.5/gdb/gdb_procfs32.h
|
||||
+#endif /* _SYS_PROCFS32_H */
|
||||
+
|
||||
+#endif /* HAVE_SYS_PROCFS32_H */
|
||||
Index: gdb-6.5/gdb/gdb_user32.h
|
||||
Index: gdb-6.6/gdb/gdb_user32.h
|
||||
===================================================================
|
||||
--- /dev/null 1 Jan 1970 00:00:00 -0000
|
||||
+++ gdb-6.5/gdb/gdb_user32.h 1 Oct 2006 16:22:43 -0000
|
||||
--- /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
|
||||
@@ -0,0 +1,108 @@
|
||||
+#ifdef HAVE_SYS_USER32_H
|
||||
+#include <sys/user32.h>
|
||||
@ -663,11 +663,11 @@ Index: gdb-6.5/gdb/gdb_user32.h
|
||||
+#endif /* _SYS_USER32_H */
|
||||
+
|
||||
+#endif /* HAVE_SYS_USER32_H */
|
||||
Index: gdb-6.5/gdb/linux-nat.c
|
||||
Index: gdb-6.6/gdb/linux-nat.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/linux-nat.c 16 Sep 2006 09:48:12 -0000 1.50
|
||||
+++ gdb-6.5/gdb/linux-nat.c 1 Oct 2006 16:22:43 -0000
|
||||
@@ -99,6 +99,15 @@ static LONGEST (*super_xfer_partial) (st
|
||||
--- 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
|
||||
const gdb_byte *,
|
||||
ULONGEST, LONGEST);
|
||||
|
||||
@ -683,7 +683,7 @@ Index: gdb-6.5/gdb/linux-nat.c
|
||||
static int debug_linux_nat;
|
||||
static void
|
||||
show_debug_linux_nat (struct ui_file *file, int from_tty,
|
||||
@@ -2562,11 +2571,11 @@ linux_nat_do_thread_registers (bfd *obfd
|
||||
@@ -2715,11 +2724,11 @@ linux_nat_do_thread_registers (bfd *obfd
|
||||
else
|
||||
fill_gregset (&gregs, -1);
|
||||
|
||||
@ -700,7 +700,7 @@ Index: gdb-6.5/gdb/linux-nat.c
|
||||
|
||||
if (core_regset_p
|
||||
&& (regset = gdbarch_regset_from_core_section (gdbarch, ".reg2",
|
||||
@@ -2577,10 +2586,10 @@ linux_nat_do_thread_registers (bfd *obfd
|
||||
@@ -2730,10 +2739,10 @@ linux_nat_do_thread_registers (bfd *obfd
|
||||
else
|
||||
fill_fpregset (&fpregs, -1);
|
||||
|
||||
@ -715,7 +715,7 @@ Index: gdb-6.5/gdb/linux-nat.c
|
||||
|
||||
#ifdef FILL_FPXREGSET
|
||||
if (core_regset_p
|
||||
@@ -2675,9 +2684,9 @@ linux_nat_make_corefile_notes (bfd *obfd
|
||||
@@ -2828,9 +2837,9 @@ linux_nat_make_corefile_notes (bfd *obfd
|
||||
strncat (psargs, get_inferior_args (),
|
||||
sizeof (psargs) - strlen (psargs));
|
||||
}
|
||||
@ -728,11 +728,11 @@ Index: gdb-6.5/gdb/linux-nat.c
|
||||
}
|
||||
|
||||
/* Dump information for threads. */
|
||||
Index: gdb-6.5/gdb/linux-nat.h
|
||||
Index: gdb-6.6/gdb/linux-nat.h
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/linux-nat.h 23 Jul 2006 21:21:01 -0000 1.12
|
||||
+++ gdb-6.5/gdb/linux-nat.h 1 Oct 2006 16:22:43 -0000
|
||||
@@ -96,3 +96,12 @@ void linux_nat_add_target (struct target
|
||||
--- 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
|
||||
/* Update linux-nat internal state when changing from one fork
|
||||
to another. */
|
||||
void linux_nat_switch_fork (ptid_t new_ptid);
|
||||
|
@ -9,24 +9,14 @@
|
||||
file, provide nested (overlapping) functions for the PC resolving.
|
||||
|
||||
|
||||
--- gdb-6.5/gdb/minsyms.c-orig 2006-10-31 08:21:32.000000000 -0500
|
||||
+++ gdb-6.5/gdb/minsyms.c 2006-10-31 08:24:37.000000000 -0500
|
||||
@@ -464,6 +464,7 @@
|
||||
objfile's minimal symbol table. See if it is the best one
|
||||
overall. */
|
||||
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;
|
||||
}
|
||||
|
||||
+ while (0
|
||||
/* Skip any absolute symbols. This is apparently what adb
|
||||
and dbx do, and is needed for the CM-5. There are two
|
||||
known possible problems: (1) on ELF, apparently end, edata,
|
||||
@@ -473,8 +474,27 @@
|
||||
NeXT are absolute. If we want special handling for this
|
||||
it probably should be triggered by a special
|
||||
mst_abs_or_lib or some such. */
|
||||
- while (hi >= 0
|
||||
- && msymbol[hi].type == mst_abs)
|
||||
+ || (hi >= 0
|
||||
+ && msymbol[hi].type == mst_abs)
|
||||
+ /* 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.
|
||||
@ -39,16 +29,20 @@
|
||||
+ Limit it only for the overlapping cases as we could harm
|
||||
+ the zero-sized symbols detection logic around.
|
||||
+ */
|
||||
+ || (hi > 0
|
||||
+ 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;
|
||||
|
||||
/* If "section" specified, skip any symbol from wrong section */
|
||||
+ {
|
||||
+ 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
|
||||
@ -107,10 +101,10 @@ Index: ./gdb/testsuite/gdb.arch/i386-size-overlap.c
|
||||
+ " mov %esp, %ebp\n"
|
||||
+ " call " SYMBOL (trap) "\n"
|
||||
+ " .size " SYMBOL (main) ", .-" SYMBOL (main) "\n");
|
||||
Index: ./gdb/testsuite/gdb.arch/i386-size-overlap.exp
|
||||
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
|
||||
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 @@
|
||||
|
75
gdb.spec
75
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.5
|
||||
Version: 6.6
|
||||
|
||||
# The release always contains a leading reserved number, start it at 0.
|
||||
Release: 27%{?dist}
|
||||
# The release always contains a leading reserved number, start it at 1.
|
||||
Release: 1%{?dist}
|
||||
|
||||
License: GPL
|
||||
Group: Development/Debuggers
|
||||
Source: ftp://ftp.gnu.org/gnu/gdb/gdb-6.5.tar.bz2
|
||||
Source: ftp://ftp.gnu.org/gnu/gdb/gdb-6.6.tar.bz2
|
||||
Buildroot: %{_tmppath}/%{name}-%{version}-root
|
||||
URL: http://gnu.org/software/gdb/
|
||||
|
||||
# For our convenience
|
||||
%define gdb_src gdb-6.5
|
||||
%define gdb_src gdb-6.6
|
||||
%define gdb_build %{gdb_src}/build-%{_target_platform}
|
||||
|
||||
# Make sure we get rid of the old package gdb64, now that we have unified
|
||||
@ -29,7 +29,7 @@ URL: http://gnu.org/software/gdb/
|
||||
Obsoletes: gdb64
|
||||
%endif
|
||||
|
||||
# GDB patches have the format gdb-<version>-<desc>-<YYYYMMDD>.patch;
|
||||
# GDB patches have the format gdb-<version>-bz<red-hat-bz-#>-<desc>.patch;
|
||||
# should include the ChangeLog.RedHat change-log entry; and should be
|
||||
# created using diff -u ./gdb (not gdb-6.3/gdb).
|
||||
|
||||
@ -189,12 +189,6 @@ Patch169: gdb-6.3-ia64-sigill-20051115.patch
|
||||
# Allow option to continue backtracing past a zero pc value
|
||||
Patch170: gdb-6.3-bt-past-zero-20051201.patch
|
||||
|
||||
# Enable gdb to recognize stack frames annotated with the "S" augmentation.
|
||||
Patch173: gdb-6.3-augmS-20060303.patch
|
||||
|
||||
# Enable gdb to recognize CFA value expressions introduced in Dwarf3.
|
||||
Patch174: gdb-6.3-cfaval-20060303.patch
|
||||
|
||||
# Use bigger numbers than int.
|
||||
Patch176: gdb-6.3-large-core-20051206.patch
|
||||
|
||||
@ -209,33 +203,18 @@ Patch178: gdb-6.3-catch-debug-registers-error-20060527.patch
|
||||
# ia32el.
|
||||
Patch179: gdb-6.3-ia32el-fix-waitpid-20060615.patch
|
||||
|
||||
# Backport GNU .hash support.
|
||||
Patch180: gdb-6.5-bfd-hash-style-20060714.patch
|
||||
|
||||
# Bugfix segv on the source display by ^X 1 (fixes Patch130, BZ 200048).
|
||||
Patch181: gdb-6.5-bz200048-find_line_pc-segv.patch
|
||||
|
||||
# Fix exec() from threaded program, partial CVS backport (BZ 182116).
|
||||
Patch183: gdb-6.3-bz182116-exec-from-pthread.patch
|
||||
|
||||
# Fix occasional failure to load shared libraries (BZ 146810).
|
||||
Patch184: gdb-6.3-bz146810-solib_absolute_prefix_is_empty.patch
|
||||
|
||||
# Bugfix object names completion (fixes Patch116, BZ 193763).
|
||||
Patch185: gdb-6.3-bz193763-object-name-completion.patch
|
||||
|
||||
# Avoid crash of 'info threads' if stale threads exist (BZ 195429).
|
||||
Patch186: gdb-6.5-bz195429-stale-threads-crash.patch
|
||||
|
||||
# Handle corrupted or missing location list information (BZ 196439).
|
||||
Patch187: gdb-6.5-bz196439-valgrind-memcheck-compat.patch
|
||||
# Testcase for corrupted or missing location list information (BZ 196439).
|
||||
Patch187: gdb-6.5-bz196439-valgrind-memcheck-compat-test.patch
|
||||
|
||||
# Fix debuginfo addresses resolving for --emit-relocs Linux kernels (BZ 203661).
|
||||
Patch188: gdb-6.5-bz203661-emit-relocs.patch
|
||||
|
||||
# Add support for memory nops on x86.
|
||||
Patch189: gdb-6.5-opcodes-i386-nopmem.patch
|
||||
|
||||
# Security patch: avoid stack overflows in dwarf expression computation.
|
||||
# CVE-2006-4146
|
||||
Patch190: gdb-6.5-dwarf-stack-overflow.patch
|
||||
@ -243,9 +222,6 @@ 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
|
||||
|
||||
# Fix crash on C++ symbol failing to be demangled (BZ 206813).
|
||||
Patch192: gdb-6.5-bz206813-cplusplus-symbol-null.patch
|
||||
|
||||
# Fix attach to stopped process, supersede `gdb-6.3-attach-stop-20051011.patch'.
|
||||
# Fix attachment also to a threaded stopped process (BZ 219118).
|
||||
Patch193: gdb-6.5-attach-stop.patch
|
||||
@ -258,16 +234,12 @@ Patch194: gdb-6.5-bz185337-resolve-tls-without-debuginfo-v2.patch
|
||||
Patch195: gdb-6.5-tls-of-separate-debuginfo.patch
|
||||
|
||||
# Fix TLS symbols resolving for shared libraries with a relative pathname.
|
||||
# The testsuite needs `gdb-6.3-bz146810-solib_absolute_prefix_is_empty.patch'.
|
||||
# The testsuite needs `gdb-6.5-tls-of-separate-debuginfo.patch'.
|
||||
Patch196: gdb-6.5-sharedlibrary-path.patch
|
||||
|
||||
# Support IPv6 for gdbserver (BZ 198365).
|
||||
Patch197: gdb-6.5-bz198365-IPv6.patch
|
||||
|
||||
# No longer disassemble invalid i386 opcodes of movQ/movA (BZ 172034).
|
||||
Patch198: gdb-6.5-bz172034-disasm-i386-C6-C7.patch
|
||||
|
||||
# Suggest fixing your target architecture for gdbserver(1) (BZ 190810).
|
||||
# FIXME: It could be autodetected.
|
||||
Patch199: gdb-6.5-bz190810-gdbserver-arch-advice.patch
|
||||
@ -278,13 +250,10 @@ Patch200: gdb-6.5-bz181390-memory-address-width.patch
|
||||
# Fix `gcore' command for 32bit inferiors on 64bit hosts.
|
||||
Patch201: gdb-6.5-gcore-i386-on-amd64.patch
|
||||
|
||||
# Fix deadlock accessing last address space byte; for corrupted backtraces.
|
||||
Patch203: gdb-6.5-last-address-space-byte.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.
|
||||
# "gdb-6.5-matching_bfd_sections.patch" is a prerequisited CVS backport.
|
||||
Patch205: gdb-6.5-matching_bfd_sections.patch
|
||||
Patch206: gdb-6.5-relativedebug.patch
|
||||
|
||||
# Fix "??" resolving of symbols from overlapping functions (nanosleep(3)).
|
||||
@ -330,6 +299,13 @@ Patch229: gdb-6.5-bz140532-ppc-debug_frame-return_address-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 ia64 unwinding fixups.
|
||||
Patch232: gdb-6.6-ia64-kernel-unwind.patch
|
||||
Patch233: gdb-6.6-ia64-pc-unwind.patch
|
||||
|
||||
BuildRequires: ncurses-devel glibc-devel gcc make gzip texinfo dejagnu gettext
|
||||
BuildRequires: flex bison sharutils
|
||||
|
||||
@ -413,35 +389,24 @@ and printing their data.
|
||||
%patch166 -p1
|
||||
%patch169 -p1
|
||||
%patch170 -p1
|
||||
%patch173 -p1
|
||||
%patch174 -p1
|
||||
%patch176 -p1
|
||||
%patch177 -p1
|
||||
%patch178 -p1
|
||||
%patch179 -p1
|
||||
%patch180 -p1
|
||||
%patch181 -p1
|
||||
%patch183 -p1
|
||||
%patch184 -p1
|
||||
%patch185 -p1
|
||||
%patch186 -p1
|
||||
%patch187 -p1
|
||||
%patch188 -p1
|
||||
%patch189 -p1
|
||||
%patch190 -p1
|
||||
%patch191 -p1
|
||||
%patch192 -p1
|
||||
%patch193 -p1
|
||||
%patch194 -p1
|
||||
%patch195 -p1
|
||||
%patch196 -p1
|
||||
#%patch197 -p1
|
||||
%patch198 -p1
|
||||
%patch199 -p1
|
||||
%patch200 -p1
|
||||
%patch201 -p1
|
||||
%patch203 -p1
|
||||
%patch205 -p1
|
||||
%patch206 -p1
|
||||
%patch207 -p1
|
||||
%patch208 -p1
|
||||
@ -463,6 +428,9 @@ and printing their data.
|
||||
%patch228 -p1
|
||||
%patch229 -p1
|
||||
%patch230 -p1
|
||||
%patch231 -p1
|
||||
%patch232 -p1
|
||||
%patch233 -p1
|
||||
|
||||
# Change the version that gets printed at GDB startup, so it is RedHat
|
||||
# specific.
|
||||
@ -625,6 +593,11 @@ fi
|
||||
# don't include the files in include, they are part of binutils
|
||||
|
||||
%changelog
|
||||
* Sat Jan 20 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.6-1
|
||||
- Upgrade to GDB 6.6. Drop redundant patches, forward-port remaining ones.
|
||||
- Backported post gdb-6.6 release ia64 unwinding fixups.
|
||||
- Testcase for exec() from threaded program (BZ 202689).
|
||||
|
||||
* Mon Jan 15 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.5-27
|
||||
- Fix the testsuite results broken in 6.5-26, stop invalid testsuite runs.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user