- Upgrade to GDB 6.5. Drop redundant patches, forward-port remaining ones.
This commit is contained in:
parent
8f1d1491a9
commit
9231e41bc3
28 changed files with 1369 additions and 10789 deletions
|
|
@ -1,6 +1,8 @@
|
|||
--- gdb-6.3/gdb/dwarf2read.c.fix Mon Jan 10 14:36:22 2005
|
||||
+++ gdb-6.3/gdb/dwarf2read.c Mon Jan 10 14:39:34 2005
|
||||
@@ -1201,7 +1201,7 @@ dwarf2_build_psymtabs (struct objfile *o
|
||||
Index: gdb-6.5/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
|
||||
else
|
||||
dwarf2_per_objfile->loc_buffer = NULL;
|
||||
|
||||
|
|
@ -9,17 +11,19 @@
|
|||
|| (objfile->global_psymbols.size == 0
|
||||
&& objfile->static_psymbols.size == 0))
|
||||
{
|
||||
--- gdb-6.3/gdb/auxv.c.fix Mon Jan 10 14:36:34 2005
|
||||
+++ gdb-6.3/gdb/auxv.c Mon Jan 10 14:39:34 2005
|
||||
Index: gdb-6.5/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
|
||||
Return 1 if an entry was read into *TYPEP and *VALP. */
|
||||
int
|
||||
target_auxv_parse (struct target_ops *ops, char **readptr, char *endptr,
|
||||
- CORE_ADDR *typep, CORE_ADDR *valp)
|
||||
+ ULONGEST *typep, CORE_ADDR *valp)
|
||||
target_auxv_parse (struct target_ops *ops, gdb_byte **readptr,
|
||||
- gdb_byte *endptr, CORE_ADDR *typep, CORE_ADDR *valp)
|
||||
+ gdb_byte *endptr, ULONGEST *typep, CORE_ADDR *valp)
|
||||
{
|
||||
const int sizeof_auxv_field = TYPE_LENGTH (builtin_type_void_data_ptr);
|
||||
char *ptr = *readptr;
|
||||
gdb_byte *ptr = *readptr;
|
||||
@@ -144,9 +144,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. */
|
||||
|
|
@ -30,9 +34,9 @@
|
|||
- CORE_ADDR type, val;
|
||||
+ CORE_ADDR val;
|
||||
+ ULONGEST at_type;
|
||||
char *data;
|
||||
gdb_byte *data;
|
||||
int n = target_auxv_read (ops, &data);
|
||||
char *ptr = data;
|
||||
gdb_byte *ptr = data;
|
||||
@@ -156,10 +157,10 @@ target_auxv_search (struct target_ops *o
|
||||
return n;
|
||||
|
||||
|
|
@ -53,9 +57,9 @@
|
|||
- CORE_ADDR type, val;
|
||||
+ CORE_ADDR val;
|
||||
+ ULONGEST at_type;
|
||||
char *data;
|
||||
gdb_byte *data;
|
||||
int len = target_auxv_read (ops, &data);
|
||||
char *ptr = data;
|
||||
gdb_byte *ptr = data;
|
||||
@@ -191,14 +193,14 @@ fprint_target_auxv (struct ui_file *file
|
||||
if (len <= 0)
|
||||
return len;
|
||||
|
|
@ -82,12 +86,14 @@
|
|||
switch (flavor)
|
||||
{
|
||||
case dec:
|
||||
--- gdb-6.3/gdb/auxv.h.fix Mon Jan 10 14:36:39 2005
|
||||
+++ gdb-6.3/gdb/auxv.h Mon Jan 10 14:39:34 2005
|
||||
Index: gdb-6.5/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
|
||||
Return 1 if an entry was read into *TYPEP and *VALP. */
|
||||
extern int target_auxv_parse (struct target_ops *ops,
|
||||
char **readptr, char *endptr,
|
||||
gdb_byte **readptr, gdb_byte *endptr,
|
||||
- CORE_ADDR *typep, CORE_ADDR *valp);
|
||||
+ ULONGEST *typep, CORE_ADDR *valp);
|
||||
|
||||
|
|
@ -101,8 +107,10 @@
|
|||
|
||||
/* 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);
|
||||
--- gdb-6.3/gdb/breakpoint.h.fix Mon Jan 10 14:36:45 2005
|
||||
+++ gdb-6.3/gdb/breakpoint.h Mon Jan 10 14:39:34 2005
|
||||
Index: gdb-6.5/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
|
||||
@@ -159,6 +159,7 @@ enum enable_state
|
||||
automatically enabled and reset when the call
|
||||
"lands" (either completes, or stops at another
|
||||
|
|
@ -111,7 +119,7 @@
|
|||
bp_permanent /* There is a breakpoint instruction hard-wired into
|
||||
the target's code. Don't try to write another
|
||||
breakpoint instruction on top of it, or restore
|
||||
@@ -778,8 +779,12 @@ extern void remove_thread_event_breakpoi
|
||||
@@ -807,8 +808,12 @@ extern void remove_thread_event_breakpoi
|
||||
|
||||
extern void disable_breakpoints_in_shlibs (int silent);
|
||||
|
||||
|
|
@ -124,9 +132,11 @@
|
|||
extern void create_solib_load_event_breakpoint (char *, int, char *, char *);
|
||||
|
||||
extern void create_solib_unload_event_breakpoint (char *, int,
|
||||
--- gdb-6.3/gdb/symfile-mem.c.fix Mon Jan 10 14:36:15 2005
|
||||
+++ gdb-6.3/gdb/symfile-mem.c Mon Jan 10 14:39:34 2005
|
||||
@@ -103,7 +103,7 @@ symbol_file_add_from_memory (struct bfd
|
||||
Index: gdb-6.5/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
|
||||
@@ -110,7 +110,7 @@ symbol_file_add_from_memory (struct bfd
|
||||
}
|
||||
|
||||
objf = symbol_file_add_from_bfd (nbfd, from_tty,
|
||||
|
|
@ -135,9 +145,11 @@
|
|||
|
||||
/* This might change our ideas about frames already looked at. */
|
||||
reinit_frame_cache ();
|
||||
--- gdb-6.3/gdb/infrun.c.fix Mon Jan 10 14:36:50 2005
|
||||
+++ gdb-6.3/gdb/infrun.c Mon Jan 10 14:39:34 2005
|
||||
@@ -2203,6 +2203,11 @@ process_event_stop_test:
|
||||
Index: gdb-6.5/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:
|
||||
code segments in shared libraries might be mapped in now. */
|
||||
re_enable_breakpoints_in_shlibs ();
|
||||
|
||||
|
|
@ -149,18 +161,21 @@
|
|||
/* 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
|
||||
--- gdb-6.3/gdb/objfiles.c.fix Mon Jan 10 14:37:04 2005
|
||||
+++ gdb-6.3/gdb/objfiles.c Mon Jan 10 14:39:34 2005
|
||||
@@ -46,6 +46,8 @@
|
||||
#include "block.h"
|
||||
Index: gdb-6.5/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 @@
|
||||
#include "dictionary.h"
|
||||
#include "source.h"
|
||||
|
||||
+#include "auxv.h"
|
||||
+#include "elf/common.h"
|
||||
+
|
||||
/* Prototypes for local functions */
|
||||
|
||||
static void objfile_alloc_data (struct objfile *objfile);
|
||||
@@ -257,7 +259,19 @@ init_entry_point_info (struct objfile *o
|
||||
@@ -258,7 +261,19 @@ init_entry_point_info (struct objfile *o
|
||||
CORE_ADDR
|
||||
entry_point_address (void)
|
||||
{
|
||||
|
|
@ -181,17 +196,20 @@
|
|||
}
|
||||
|
||||
/* Create the terminating entry of OBJFILE's minimal symbol table.
|
||||
--- gdb-6.3/gdb/solib-svr4.c.fix Mon Jan 10 14:37:15 2005
|
||||
+++ gdb-6.3/gdb/solib-svr4.c Mon Jan 10 14:39:34 2005
|
||||
@@ -34,6 +34,7 @@
|
||||
Index: gdb-6.5/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
|
||||
@@ -34,6 +34,8 @@
|
||||
#include "gdbcore.h"
|
||||
#include "target.h"
|
||||
#include "inferior.h"
|
||||
+#include "auxv.h"
|
||||
+#include "command.h"
|
||||
|
||||
#include "solist.h"
|
||||
#include "solib-svr4.h"
|
||||
@@ -168,7 +169,9 @@ static CORE_ADDR breakpoint_addr; /* Add
|
||||
#include "gdb_assert.h"
|
||||
|
||||
@@ -254,7 +256,9 @@ static CORE_ADDR breakpoint_addr; /* Add
|
||||
|
||||
/* Local function prototypes */
|
||||
|
||||
|
|
@ -201,14 +219,14 @@
|
|||
|
||||
static CORE_ADDR bfd_lookup_symbol (bfd *, char *, flagword);
|
||||
|
||||
@@ -290,22 +293,79 @@ elf_locate_base (void)
|
||||
@@ -376,22 +380,79 @@ elf_locate_base (void)
|
||||
{
|
||||
struct bfd_section *dyninfo_sect;
|
||||
int dyninfo_sect_size;
|
||||
- CORE_ADDR dyninfo_addr;
|
||||
+ CORE_ADDR dyninfo_addr, relocated_dyninfo_addr, entry_addr;
|
||||
char *buf;
|
||||
char *bufend;
|
||||
gdb_byte *buf;
|
||||
gdb_byte *bufend;
|
||||
int arch_size;
|
||||
+ int ret;
|
||||
+
|
||||
|
|
@ -285,7 +303,7 @@
|
|||
|
||||
/* Find the DT_DEBUG entry in the the .dynamic section.
|
||||
For mips elf we look for DT_MIPS_RLD_MAP, mips elf apparently has
|
||||
@@ -332,6 +392,10 @@ elf_locate_base (void)
|
||||
@@ -418,6 +479,10 @@ elf_locate_base (void)
|
||||
{
|
||||
dyn_ptr = bfd_h_get_32 (exec_bfd,
|
||||
(bfd_byte *) x_dynp->d_un.d_ptr);
|
||||
|
|
@ -296,29 +314,30 @@
|
|||
return dyn_ptr;
|
||||
}
|
||||
else if (dyn_tag == DT_MIPS_RLD_MAP)
|
||||
@@ -470,6 +534,10 @@ first_link_map_member (void)
|
||||
char *r_map_buf = xmalloc (lmo->r_map_size);
|
||||
struct cleanup *cleanups = make_cleanup (xfree, r_map_buf);
|
||||
@@ -543,6 +608,10 @@ solib_svr4_r_map (void)
|
||||
{
|
||||
struct link_map_offsets *lmo = svr4_fetch_link_map_offsets ();
|
||||
|
||||
+ if (debug_solib)
|
||||
+ fprintf_unfiltered (gdb_stdlog,
|
||||
+ "first_link_map_member: read at 0x%s\n",
|
||||
+ "solib_svr4_r_map: read at 0x%s\n",
|
||||
+ paddr_nz (debug_base + lmo->r_map_offset));
|
||||
read_memory (debug_base + lmo->r_map_offset, r_map_buf, lmo->r_map_size);
|
||||
|
||||
/* Assume that the address is unsigned. */
|
||||
@@ -583,6 +651,10 @@ svr4_current_sos (void)
|
||||
CORE_ADDR lm;
|
||||
struct so_list *head = 0;
|
||||
return read_memory_typed_address (debug_base + lmo->r_map_offset,
|
||||
builtin_type_void_data_ptr);
|
||||
}
|
||||
@@ -669,6 +738,11 @@ svr4_current_sos (void)
|
||||
struct so_list **link_ptr = &head;
|
||||
CORE_ADDR ldsomap = 0;
|
||||
|
||||
+ if (debug_solib)
|
||||
+ fprintf_unfiltered (gdb_stdlog,
|
||||
+ "svr4_current_sos: exec_bfd %s\n",
|
||||
+ exec_bfd->filename);
|
||||
|
||||
+
|
||||
/* Make sure we've looked up the inferior's dynamic linker's base
|
||||
structure. */
|
||||
@@ -593,12 +665,22 @@ svr4_current_sos (void)
|
||||
if (! debug_base)
|
||||
@@ -678,11 +752,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)
|
||||
|
|
@ -334,18 +353,16 @@
|
|||
|
||||
/* Walk the inferior's link map list, and build our list of
|
||||
`struct so_list' nodes. */
|
||||
- lm = first_link_map_member ();
|
||||
+ if (debug_solib)
|
||||
+ fprintf_unfiltered (gdb_stdlog,
|
||||
+ "svr4_current_sos: walk link map in %s\n",
|
||||
+ exec_bfd->filename);
|
||||
+ lm = first_link_map_member ();
|
||||
lm = solib_svr4_r_map ();
|
||||
while (lm)
|
||||
{
|
||||
struct link_map_offsets *lmo = SVR4_FETCH_LINK_MAP_OFFSETS ();
|
||||
@@ -615,54 +697,156 @@ svr4_current_sos (void)
|
||||
@@ -697,23 +781,103 @@ svr4_current_sos (void)
|
||||
new->lm_info->lm = xzalloc (lmo->link_map_size);
|
||||
make_cleanup (xfree, new->lm_info->lm);
|
||||
memset (new->lm_info->lm, 0, lmo->link_map_size);
|
||||
|
||||
+ if (debug_solib)
|
||||
+ fprintf_unfiltered (gdb_stdlog,
|
||||
|
|
@ -364,7 +381,7 @@
|
|||
SVR4, it has no name. For others (Solaris 2.3 for example), it
|
||||
does have a name, so we can no longer use a missing name to
|
||||
decide when to ignore it. */
|
||||
if (IGNORE_FIRST_LINK_MAP_ENTRY (new))
|
||||
if (IGNORE_FIRST_LINK_MAP_ENTRY (new) && ldsomap == 0)
|
||||
- free_so (new);
|
||||
+ {
|
||||
+ /* It is the first link map entry, i.e. it is the main executable. */
|
||||
|
|
@ -448,46 +465,16 @@
|
|||
target_read_string (LM_NAME (new), &buffer,
|
||||
SO_NAME_MAX_PATH_SIZE - 1, &errcode);
|
||||
if (errcode != 0)
|
||||
{
|
||||
- warning ("current_sos: Can't read pathname for load map: %s\n",
|
||||
+ warning ("svr4_current_sos: Can't read pathname for load map: %s\n",
|
||||
safe_strerror (errcode));
|
||||
}
|
||||
@@ -721,22 +885,37 @@ svr4_current_sos (void)
|
||||
safe_strerror (errcode));
|
||||
else
|
||||
{
|
||||
+ if (debug_solib)
|
||||
+ fprintf_unfiltered (gdb_stdlog,
|
||||
+ "svr4_current_sos: LM_NAME is <%s>\n",
|
||||
+ buffer);
|
||||
+ /* The name could be empty, in which case it is the
|
||||
+ system supplied DSO. */
|
||||
+ if (strcmp (buffer, "") == 0)
|
||||
+ {
|
||||
+ xfree (buffer);
|
||||
+ free_so (new);
|
||||
+ }
|
||||
+
|
||||
+ else
|
||||
+ {
|
||||
strncpy (new->so_name, buffer, SO_NAME_MAX_PATH_SIZE - 1);
|
||||
new->so_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0';
|
||||
xfree (buffer);
|
||||
strcpy (new->so_original_name, new->so_name);
|
||||
- strncpy (new->so_name, buffer, SO_NAME_MAX_PATH_SIZE - 1);
|
||||
- new->so_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0';
|
||||
- xfree (buffer);
|
||||
- strcpy (new->so_original_name, new->so_name);
|
||||
- }
|
||||
+ if (debug_solib)
|
||||
+ {
|
||||
+ fprintf_unfiltered (gdb_stdlog,
|
||||
+ "svr4_current_sos: Processing DSO: %s\n",
|
||||
+ new->so_name);
|
||||
+ fprintf_unfiltered (gdb_stdlog,
|
||||
+ "svr4_current_sos: first link entry %d\n",
|
||||
+ IGNORE_FIRST_LINK_MAP_ENTRY (new));
|
||||
+ }
|
||||
+
|
||||
+ new->next = 0;
|
||||
+ *link_ptr = new;
|
||||
+ link_ptr = &new->next;
|
||||
|
||||
-
|
||||
- /* If this entry has no name, or its name matches the name
|
||||
- for the main executable, don't include it in the list. */
|
||||
- if (! new->so_name[0]
|
||||
|
|
@ -498,11 +485,41 @@
|
|||
- new->next = 0;
|
||||
- *link_ptr = new;
|
||||
- link_ptr = &new->next;
|
||||
- }
|
||||
+ }
|
||||
+ }
|
||||
+ if (debug_solib)
|
||||
+ fprintf_unfiltered (gdb_stdlog,
|
||||
+ "svr4_current_sos: LM_NAME is <%s>\n",
|
||||
+ buffer);
|
||||
+ /* The name could be empty, in which case it is the
|
||||
+ system supplied DSO. */
|
||||
+ if (strcmp (buffer, "") == 0)
|
||||
+ {
|
||||
+ xfree (buffer);
|
||||
+ free_so (new);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ strncpy (new->so_name, buffer, SO_NAME_MAX_PATH_SIZE - 1);
|
||||
+ new->so_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0';
|
||||
+ xfree (buffer);
|
||||
+ strcpy (new->so_original_name, new->so_name);
|
||||
+ if (debug_solib)
|
||||
+ {
|
||||
+ fprintf_unfiltered (gdb_stdlog,
|
||||
+ "svr4_current_sos: Processing DSO: %s\n",
|
||||
+ new->so_name);
|
||||
+ fprintf_unfiltered (gdb_stdlog,
|
||||
+ "svr4_current_sos: first link entry %d\n",
|
||||
+ IGNORE_FIRST_LINK_MAP_ENTRY (new));
|
||||
+ }
|
||||
+
|
||||
+ new->next = 0;
|
||||
+ *link_ptr = new;
|
||||
+ link_ptr = &new->next;
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -750,6 +929,11 @@ svr4_current_sos (void)
|
||||
discard_cleanups (old_chain);
|
||||
}
|
||||
|
||||
|
|
@ -514,16 +531,7 @@
|
|||
return head;
|
||||
}
|
||||
|
||||
@@ -681,7 +865,7 @@ svr4_fetch_objfile_link_map (struct objf
|
||||
return 0; /* failed somehow... */
|
||||
|
||||
/* Position ourselves on the first link map. */
|
||||
- lm = first_link_map_member ();
|
||||
+ lm = first_link_map_member ();
|
||||
while (lm)
|
||||
{
|
||||
/* Get info on the layout of the r_debug and link_map structures. */
|
||||
@@ -742,7 +926,7 @@ svr4_fetch_objfile_link_map (struct objf
|
||||
@@ -826,7 +1010,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. */
|
||||
|
|
@ -532,7 +540,7 @@
|
|||
static int
|
||||
match_main (char *soname)
|
||||
{
|
||||
@@ -756,6 +940,7 @@ match_main (char *soname)
|
||||
@@ -840,6 +1024,7 @@ match_main (char *soname)
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
|
@ -540,7 +548,7 @@
|
|||
|
||||
/* Return 1 if PC lies in the dynamic symbol resolution code of the
|
||||
SVR4 run time loader. */
|
||||
@@ -855,6 +1040,11 @@ enable_break (void)
|
||||
@@ -939,6 +1124,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");
|
||||
|
|
@ -552,9 +560,9 @@
|
|||
if (interp_sect)
|
||||
{
|
||||
unsigned int interp_sect_size;
|
||||
@@ -888,6 +1078,9 @@ enable_break (void)
|
||||
@@ -972,6 +1162,9 @@ enable_break (void)
|
||||
if (tmp_fd >= 0)
|
||||
tmp_bfd = bfd_fdopenr (tmp_pathname, gnutarget, tmp_fd);
|
||||
tmp_bfd = bfd_fopen (tmp_pathname, gnutarget, FOPEN_RB, tmp_fd);
|
||||
|
||||
+ if (debug_solib)
|
||||
+ fprintf_unfiltered (gdb_stdlog,
|
||||
|
|
@ -562,7 +570,7 @@
|
|||
if (tmp_bfd == NULL)
|
||||
goto bkpt_at_symbol;
|
||||
|
||||
@@ -968,6 +1161,9 @@ enable_break (void)
|
||||
@@ -1052,6 +1245,9 @@ enable_break (void)
|
||||
if (sym_addr != 0)
|
||||
{
|
||||
create_solib_event_breakpoint (load_addr + sym_addr);
|
||||
|
|
@ -572,7 +580,7 @@
|
|||
return 1;
|
||||
}
|
||||
|
||||
@@ -1227,6 +1423,8 @@ svr4_solib_create_inferior_hook (void)
|
||||
@@ -1311,6 +1507,8 @@ svr4_solib_create_inferior_hook (void)
|
||||
while (stop_signal != TARGET_SIGNAL_TRAP);
|
||||
stop_soon = NO_STOP_QUIETLY;
|
||||
#endif /* defined(_SCO_DS) */
|
||||
|
|
@ -581,7 +589,7 @@
|
|||
}
|
||||
|
||||
static void
|
||||
@@ -1430,6 +1628,75 @@ svr4_lp64_fetch_link_map_offsets (void)
|
||||
@@ -1493,6 +1691,75 @@ svr4_lp64_fetch_link_map_offsets (void)
|
||||
|
||||
return lmp;
|
||||
}
|
||||
|
|
@ -610,36 +618,36 @@
|
|||
+
|
||||
+ /* Walk the inferior's link map list, and print the info. */
|
||||
+
|
||||
+ lm = first_link_map_member ();
|
||||
+ lm = solib_svr4_r_map ();
|
||||
+ while (lm)
|
||||
+ {
|
||||
+ int errcode;
|
||||
+ char *buffer;
|
||||
+ CORE_ADDR load_addr;
|
||||
+
|
||||
+ struct link_map_offsets *lmo = SVR4_FETCH_LINK_MAP_OFFSETS ();
|
||||
+ struct link_map_offsets *lmo = svr4_fetch_link_map_offsets ();
|
||||
+ struct so_list *new
|
||||
+ = (struct so_list *) xmalloc (sizeof (struct so_list));
|
||||
+ struct cleanup *old_chain = make_cleanup (xfree, new);
|
||||
+
|
||||
+
|
||||
+ memset (new, 0, sizeof (*new));
|
||||
+
|
||||
+ new->lm_info = xmalloc (sizeof (struct lm_info));
|
||||
+ make_cleanup (xfree, new->lm_info);
|
||||
+
|
||||
+
|
||||
+ new->lm_info->lm = xmalloc (lmo->link_map_size);
|
||||
+ make_cleanup (xfree, new->lm_info->lm);
|
||||
+ memset (new->lm_info->lm, 0, lmo->link_map_size);
|
||||
+
|
||||
+
|
||||
+ if (debug_solib)
|
||||
+ fprintf_unfiltered (gdb_stdlog,
|
||||
+ "svr4_print_linkmap: read lm at 0x%s\n", paddr_nz(lm));
|
||||
+ read_memory (lm, new->lm_info->lm, lmo->link_map_size);
|
||||
+
|
||||
+
|
||||
+ lm = LM_NEXT (new);
|
||||
+
|
||||
+
|
||||
+ /* Load address. */
|
||||
+ load_addr = LM_ADDR (new);
|
||||
+ load_addr = LM_ADDR_CHECK (new, NULL);
|
||||
+ /* Shared object's name. */
|
||||
+ target_read_string (LM_NAME (new), &buffer,
|
||||
+ SO_NAME_MAX_PATH_SIZE - 1, &errcode);
|
||||
|
|
@ -657,7 +665,7 @@
|
|||
|
||||
|
||||
static struct target_so_ops svr4_so_ops;
|
||||
@@ -1453,4 +1720,8 @@ _initialize_svr4_solib (void)
|
||||
@@ -1515,4 +1782,8 @@ _initialize_svr4_solib (void)
|
||||
|
||||
/* FIXME: Don't do this here. *_gdbarch_init() should set so_ops. */
|
||||
current_target_so_ops = &svr4_so_ops;
|
||||
|
|
@ -666,9 +674,11 @@
|
|||
+ "Display the inferior's linkmap.");
|
||||
+
|
||||
}
|
||||
--- gdb-6.3/gdb/varobj.c.fix Mon Jan 10 14:38:00 2005
|
||||
+++ gdb-6.3/gdb/varobj.c Mon Jan 10 14:39:35 2005
|
||||
@@ -854,6 +854,62 @@ varobj_list (struct varobj ***varlist)
|
||||
Index: gdb-6.5/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
|
||||
@@ -870,6 +870,62 @@ varobj_list (struct varobj ***varlist)
|
||||
return rootcount;
|
||||
}
|
||||
|
||||
|
|
@ -679,17 +689,17 @@
|
|||
+ struct varobj_root *croot;
|
||||
+ int mycount = rootcount;
|
||||
+ char * name;
|
||||
+
|
||||
+
|
||||
+ croot = rootlist;
|
||||
+ while ((croot != NULL) && (mycount > 0))
|
||||
+ {
|
||||
+ var = croot->rootvar;
|
||||
+
|
||||
+
|
||||
+ /* Get rid of the memory for the old expression. This also
|
||||
+ leaves var->root->exp == NULL, which is ok for the parsing
|
||||
+ below. */
|
||||
+ free_current_contents ((char **) &var->root->exp);
|
||||
+
|
||||
+ free_current_contents (&var->root->exp);
|
||||
+
|
||||
+ value_free (var->value);
|
||||
+ var->type = NULL;
|
||||
+
|
||||
|
|
@ -701,7 +711,7 @@
|
|||
+ {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ /* We definitively need to catch errors here.
|
||||
+ If evaluate_expression succeeds we got the value we wanted.
|
||||
+ But if it fails, we still go on with a call to evaluate_type() */
|
||||
|
|
@ -709,30 +719,32 @@
|
|||
+ {
|
||||
+ /* no error */
|
||||
+ release_value (var->value);
|
||||
+ if (VALUE_LAZY (var->value))
|
||||
+ if (value_lazy (var->value))
|
||||
+ gdb_value_fetch_lazy (var->value);
|
||||
+ }
|
||||
+ else
|
||||
+ var->value = evaluate_type (var->root->exp);
|
||||
+
|
||||
+ var->type = VALUE_TYPE (var->value);
|
||||
+
|
||||
+
|
||||
+ var->type = value_type (var->value);
|
||||
+
|
||||
+ mycount--;
|
||||
+ croot = croot->next;
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ if (mycount || (croot != NULL))
|
||||
+ warning
|
||||
+ ("varobj_refresh: assertion failed - wrong tally of root vars (%d:%d)",
|
||||
+ rootcount, mycount);
|
||||
+}
|
||||
+
|
||||
+
|
||||
+
|
||||
/* 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
|
||||
--- gdb-6.3/gdb/solist.h.fix Mon Jan 10 14:37:45 2005
|
||||
+++ gdb-6.3/gdb/solist.h Mon Jan 10 14:39:35 2005
|
||||
Index: gdb-6.5/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
|
||||
@@ -62,6 +62,8 @@ struct so_list
|
||||
bfd *abfd;
|
||||
char symbols_loaded; /* flag: symbols read in yet? */
|
||||
|
|
@ -758,33 +770,37 @@
|
|||
/* FIXME: gdbarch needs to control this variable */
|
||||
extern struct target_so_ops *current_target_so_ops;
|
||||
|
||||
@@ -135,4 +143,6 @@ extern struct target_so_ops *current_tar
|
||||
#define TARGET_SO_FIND_AND_OPEN_SOLIB \
|
||||
(current_target_so_ops->find_and_open_solib)
|
||||
@@ -126,4 +134,6 @@ extern struct target_so_ops *current_tar
|
||||
#define TARGET_SO_IN_DYNSYM_RESOLVE_CODE \
|
||||
(current_target_so_ops->in_dynsym_resolve_code)
|
||||
|
||||
+/* Controls the printing of debugging output. */
|
||||
+extern int debug_solib;
|
||||
#endif
|
||||
--- gdb-6.3/gdb/varobj.h.fix Mon Jan 10 14:38:06 2005
|
||||
+++ gdb-6.3/gdb/varobj.h Mon Jan 10 14:39:35 2005
|
||||
@@ -97,4 +97,6 @@ extern int varobj_list (struct varobj **
|
||||
Index: gdb-6.5/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
|
||||
@@ -99,4 +99,6 @@ extern int varobj_list (struct varobj **
|
||||
|
||||
extern int varobj_update (struct varobj **varp, struct varobj ***changelist);
|
||||
|
||||
+extern void varobj_refresh(void);
|
||||
+
|
||||
#endif /* VAROBJ_H */
|
||||
--- gdb-6.3/gdb/symfile.c.fix Mon Jan 10 14:38:16 2005
|
||||
+++ gdb-6.3/gdb/symfile.c Mon Jan 10 14:39:35 2005
|
||||
@@ -48,6 +48,7 @@
|
||||
Index: gdb-6.5/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
|
||||
@@ -49,6 +49,7 @@
|
||||
#include "readline/readline.h"
|
||||
#include "gdb_assert.h"
|
||||
#include "block.h"
|
||||
+#include "varobj.h"
|
||||
#include "observer.h"
|
||||
#include "exec.h"
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <fcntl.h>
|
||||
@@ -558,7 +559,7 @@ syms_from_objfile (struct objfile *objfi
|
||||
@@ -658,7 +659,7 @@ syms_from_objfile (struct objfile *objfi
|
||||
|
||||
/* Now either addrs or offsets is non-zero. */
|
||||
|
||||
|
|
@ -793,7 +809,7 @@
|
|||
{
|
||||
/* We will modify the main symbol table, make sure that all its users
|
||||
will be cleaned up if an error occurs during symbol reading. */
|
||||
@@ -586,7 +587,7 @@ syms_from_objfile (struct objfile *objfi
|
||||
@@ -686,7 +687,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. */
|
||||
|
|
@ -802,7 +818,7 @@
|
|||
{
|
||||
asection *lower_sect;
|
||||
asection *sect;
|
||||
@@ -755,17 +756,21 @@ new_symfile_objfile (struct objfile *obj
|
||||
@@ -855,17 +856,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. */
|
||||
|
|
@ -826,7 +842,7 @@
|
|||
|
||||
/* We're done reading the symbol file; finish off complaints. */
|
||||
clear_complaints (&symfile_complaints, 0, verbo);
|
||||
@@ -808,7 +813,7 @@ symbol_file_add_with_addrs_or_offsets (b
|
||||
@@ -908,7 +913,7 @@ symbol_file_add_with_addrs_or_offsets (b
|
||||
interactively wiping out any existing symbols. */
|
||||
|
||||
if ((have_full_symbols () || have_partial_symbols ())
|
||||
|
|
@ -834,11 +850,11 @@
|
|||
+ && (mainline == 1)
|
||||
&& from_tty
|
||||
&& !query ("Load new symbol table from \"%s\"? ", name))
|
||||
error ("Not confirmed.");
|
||||
@@ -987,6 +992,10 @@ symbol_file_clear (int from_tty)
|
||||
&& !query ("Discard symbol table from `%s'? ",
|
||||
symfile_objfile->name))
|
||||
error ("Not confirmed.");
|
||||
error (_("Not confirmed."));
|
||||
@@ -1089,6 +1094,10 @@ symbol_file_clear (int from_tty)
|
||||
symfile_objfile->name)
|
||||
: !query (_("Discard symbol table? "))))
|
||||
error (_("Not confirmed."));
|
||||
+#ifdef CLEAR_SOLIB
|
||||
+ CLEAR_SOLIB ();
|
||||
+#endif
|
||||
|
|
@ -846,7 +862,7 @@
|
|||
free_all_objfiles ();
|
||||
|
||||
/* solib descriptors may have handles to objfiles. Since their
|
||||
@@ -1979,6 +1988,8 @@ reread_symbols (void)
|
||||
@@ -2154,6 +2163,8 @@ reread_symbols (void)
|
||||
/* Discard cleanups as symbol reading was successful. */
|
||||
discard_cleanups (old_cleanups);
|
||||
|
||||
|
|
@ -855,7 +871,7 @@
|
|||
/* 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. */
|
||||
@@ -2338,6 +2349,7 @@ clear_symtab_users (void)
|
||||
@@ -2529,6 +2540,7 @@ clear_symtab_users (void)
|
||||
clear_pc_function_cache ();
|
||||
if (deprecated_target_new_objfile_hook)
|
||||
deprecated_target_new_objfile_hook (NULL);
|
||||
|
|
@ -863,9 +879,101 @@
|
|||
}
|
||||
|
||||
static void
|
||||
--- gdb-6.3/gdb/breakpoint.c.fix Mon Jan 10 14:38:20 2005
|
||||
+++ gdb-6.3/gdb/breakpoint.c Mon Jan 10 14:39:35 2005
|
||||
@@ -3900,6 +3900,7 @@ describe_other_breakpoints (CORE_ADDR pc
|
||||
Index: gdb-6.5/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_
|
||||
struct value *v = b->owner->val_chain;
|
||||
|
||||
/* Look at each value on the value chain. */
|
||||
- for (; v; v = v->next)
|
||||
+ for (; v; v = value_next (v))
|
||||
{
|
||||
/* If it's a memory location, and GDB actually needed
|
||||
its contents to evaluate the expression, then we
|
||||
must watch it. */
|
||||
if (VALUE_LVAL (v) == lval_memory
|
||||
- && ! VALUE_LAZY (v))
|
||||
+ && ! value_lazy (v))
|
||||
{
|
||||
- struct type *vtype = check_typedef (VALUE_TYPE (v));
|
||||
+ struct type *vtype = check_typedef (value_type (v));
|
||||
|
||||
/* 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_
|
||||
CORE_ADDR addr;
|
||||
int len, type;
|
||||
|
||||
- addr = VALUE_ADDRESS (v) + VALUE_OFFSET (v);
|
||||
- len = TYPE_LENGTH (VALUE_TYPE (v));
|
||||
+ addr = VALUE_ADDRESS (v) + value_offset (v);
|
||||
+ len = TYPE_LENGTH (value_type (v));
|
||||
type = hw_write;
|
||||
if (b->owner->type == bp_read_watchpoint)
|
||||
type = hw_read;
|
||||
@@ -2680,12 +2680,12 @@ mark_triggered_watchpoints (CORE_ADDR st
|
||||
|| b->type == bp_read_watchpoint
|
||||
|| b->type == bp_access_watchpoint)
|
||||
{
|
||||
- for (v = b->val_chain; v; v = v->next)
|
||||
+ for (v = b->val_chain; v; v = value_next (v))
|
||||
{
|
||||
if (VALUE_LVAL (v) == lval_memory
|
||||
- && ! VALUE_LAZY (v))
|
||||
+ && ! value_lazy (v))
|
||||
{
|
||||
- struct type *vtype = check_typedef (VALUE_TYPE (v));
|
||||
+ struct type *vtype = check_typedef (value_type (v));
|
||||
|
||||
if (v == b->val_chain
|
||||
|| (TYPE_CODE (vtype) != TYPE_CODE_STRUCT
|
||||
@@ -2693,11 +2693,11 @@ mark_triggered_watchpoints (CORE_ADDR st
|
||||
{
|
||||
CORE_ADDR vaddr;
|
||||
|
||||
- vaddr = VALUE_ADDRESS (v) + VALUE_OFFSET (v);
|
||||
+ vaddr = VALUE_ADDRESS (v) + value_offset (v);
|
||||
/* Exact match not required. Within range is
|
||||
sufficient. */
|
||||
if (addr >= vaddr &&
|
||||
- addr < vaddr + TYPE_LENGTH (VALUE_TYPE (v)))
|
||||
+ addr < vaddr + TYPE_LENGTH (value_type (v)))
|
||||
b->watchpoint_triggered = 1;
|
||||
}
|
||||
}
|
||||
@@ -2867,12 +2867,12 @@ bpstat_stop_status (CORE_ADDR bp_addr, p
|
||||
bs->stop = 0;
|
||||
continue;
|
||||
}
|
||||
- for (v = b->val_chain; v; v = v->next)
|
||||
+ for (v = b->val_chain; v; v = value_next (v))
|
||||
{
|
||||
if (VALUE_LVAL (v) == lval_memory
|
||||
- && ! VALUE_LAZY (v))
|
||||
+ && ! value_lazy (v))
|
||||
{
|
||||
- struct type *vtype = check_typedef (VALUE_TYPE (v));
|
||||
+ struct type *vtype = check_typedef (value_type (v));
|
||||
|
||||
if (v == b->val_chain
|
||||
|| (TYPE_CODE (vtype) != TYPE_CODE_STRUCT
|
||||
@@ -2880,11 +2880,11 @@ bpstat_stop_status (CORE_ADDR bp_addr, p
|
||||
{
|
||||
CORE_ADDR vaddr;
|
||||
|
||||
- vaddr = VALUE_ADDRESS (v) + VALUE_OFFSET (v);
|
||||
+ vaddr = VALUE_ADDRESS (v) + value_offset (v);
|
||||
/* Exact match not required. Within range is
|
||||
sufficient. */
|
||||
if (addr >= vaddr &&
|
||||
- addr < vaddr + TYPE_LENGTH (VALUE_TYPE (v)))
|
||||
+ addr < vaddr + TYPE_LENGTH (value_type (v)))
|
||||
must_check_value = 1;
|
||||
}
|
||||
}
|
||||
@@ -3931,6 +3931,7 @@ describe_other_breakpoints (CORE_ADDR pc
|
||||
b->number,
|
||||
((b->enable_state == bp_disabled ||
|
||||
b->enable_state == bp_shlib_disabled ||
|
||||
|
|
@ -873,9 +981,9 @@
|
|||
b->enable_state == bp_call_disabled)
|
||||
? " (disabled)"
|
||||
: b->enable_state == bp_permanent
|
||||
@@ -4575,6 +4576,62 @@ re_enable_breakpoints_in_shlibs (void)
|
||||
|
||||
#endif
|
||||
@@ -4609,6 +4610,62 @@ re_enable_breakpoints_in_shlibs (void)
|
||||
}
|
||||
}
|
||||
|
||||
+void
|
||||
+disable_breakpoints_at_startup (int silent)
|
||||
|
|
@ -936,7 +1044,7 @@
|
|||
static void
|
||||
solib_load_unload_1 (char *hookname, int tempflag, char *dll_pathname,
|
||||
char *cond_string, enum bptype bp_kind)
|
||||
@@ -6915,6 +6972,7 @@ delete_breakpoint (struct breakpoint *bp
|
||||
@@ -6955,6 +7012,7 @@ delete_breakpoint (struct breakpoint *bp
|
||||
&& !b->loc->duplicate
|
||||
&& b->enable_state != bp_disabled
|
||||
&& b->enable_state != bp_shlib_disabled
|
||||
|
|
@ -944,7 +1052,7 @@
|
|||
&& !b->pending
|
||||
&& b->enable_state != bp_call_disabled)
|
||||
{
|
||||
@@ -7128,7 +7186,8 @@ breakpoint_re_set_one (void *bint)
|
||||
@@ -7170,7 +7228,8 @@ breakpoint_re_set_one (void *bint)
|
||||
break;
|
||||
|
||||
save_enable = b->enable_state;
|
||||
|
|
@ -954,9 +1062,11 @@
|
|||
b->enable_state = bp_disabled;
|
||||
else
|
||||
/* If resetting a shlib-disabled breakpoint, we don't want to
|
||||
--- gdb-6.3/gdb/solib.c.fix Mon Jan 10 14:38:26 2005
|
||||
+++ gdb-6.3/gdb/solib.c Mon Jan 10 15:04:59 2005
|
||||
@@ -47,6 +47,8 @@
|
||||
Index: gdb-6.5/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
|
||||
@@ -72,6 +72,8 @@ solib_ops (struct gdbarch *gdbarch)
|
||||
|
||||
/* external data declarations */
|
||||
|
||||
|
|
@ -965,16 +1075,16 @@
|
|||
/* FIXME: gdbarch needs to control this variable */
|
||||
struct target_so_ops *current_target_so_ops;
|
||||
|
||||
@@ -69,6 +71,8 @@ static char *solib_absolute_prefix = NUL
|
||||
and LD_LIBRARY_PATH. */
|
||||
static char *solib_search_path = NULL;
|
||||
@@ -102,6 +104,8 @@ The search path for loading non-absolute
|
||||
value);
|
||||
}
|
||||
|
||||
+void add_to_target_sections (int, struct target_ops *, struct so_list *);
|
||||
+
|
||||
/*
|
||||
|
||||
GLOBAL FUNCTION
|
||||
@@ -335,7 +339,6 @@ free_so (struct so_list *so)
|
||||
@@ -372,7 +376,6 @@ free_so (struct so_list *so)
|
||||
xfree (so);
|
||||
}
|
||||
|
||||
|
|
@ -982,7 +1092,7 @@
|
|||
/* Return address of first so_list entry in master shared object list. */
|
||||
struct so_list *
|
||||
master_so_list (void)
|
||||
@@ -343,7 +346,6 @@ master_so_list (void)
|
||||
@@ -380,7 +383,6 @@ master_so_list (void)
|
||||
return so_list_head;
|
||||
}
|
||||
|
||||
|
|
@ -990,7 +1100,7 @@
|
|||
/* A small stub to get us past the arg-passing pinhole of catch_errors. */
|
||||
|
||||
static int
|
||||
@@ -355,15 +357,40 @@ symbol_add_stub (void *arg)
|
||||
@@ -392,15 +394,40 @@ symbol_add_stub (void *arg)
|
||||
/* Have we already loaded this shared object? */
|
||||
ALL_OBJFILES (so->objfile)
|
||||
{
|
||||
|
|
@ -1034,7 +1144,7 @@
|
|||
free_section_addr_info (sap);
|
||||
|
||||
return (1);
|
||||
@@ -458,6 +485,10 @@ update_solib_list (int from_tty, struct
|
||||
@@ -523,6 +550,10 @@ update_solib_list (int from_tty, struct
|
||||
the inferior's current list. */
|
||||
while (i)
|
||||
{
|
||||
|
|
@ -1045,7 +1155,7 @@
|
|||
if (! strcmp (gdb->so_original_name, i->so_original_name))
|
||||
break;
|
||||
|
||||
@@ -511,32 +542,46 @@ update_solib_list (int from_tty, struct
|
||||
@@ -576,28 +607,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)
|
||||
{
|
||||
|
|
@ -1072,7 +1182,10 @@
|
|||
- }
|
||||
- }
|
||||
+ add_to_target_sections (from_tty, target, i);
|
||||
}
|
||||
|
||||
/* 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
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1114,20 +1227,24 @@
|
|||
|
||||
/* GLOBAL FUNCTION
|
||||
|
||||
@@ -917,4 +962,10 @@ This takes precedence over the environme
|
||||
deprecated_add_show_from_set (c, &showlist);
|
||||
set_cmd_cfunc (c, reload_shared_libraries);
|
||||
set_cmd_completer (c, filename_completer);
|
||||
@@ -978,4 +1023,12 @@ This takes precedence over the environme
|
||||
reload_shared_libraries,
|
||||
show_solib_search_path,
|
||||
&setlist, &showlist);
|
||||
+
|
||||
+ c = add_set_cmd ("solib", no_class, var_zinteger,
|
||||
+ (char *) &debug_solib,
|
||||
+ "Set debugging of GNU/Linux shlib module.\n\
|
||||
+Enables printf debugging output.\n", &setdebuglist);
|
||||
+ deprecated_add_show_from_set (c, &showdebuglist);
|
||||
+ add_setshow_boolean_cmd ("solib", no_class, &debug_solib,
|
||||
+ _("\
|
||||
+Set debugging of GNU/Linux shlib module.\n"), _("\
|
||||
+Show debugging status of GNU/Linux shlib module.\n"), _("\
|
||||
+Enables printf debugging output of GNU/Linux shlib module.\n"),
|
||||
+ NULL, NULL,
|
||||
+ &setdebuglist, &showdebuglist);
|
||||
}
|
||||
--- gdb-6.3/gdb/elfread.c.fix Mon Jan 10 14:38:32 2005
|
||||
+++ gdb-6.3/gdb/elfread.c Mon Jan 10 14:39:35 2005
|
||||
@@ -528,7 +528,7 @@ elf_symfile_read (struct objfile *objfil
|
||||
Index: gdb-6.5/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
|
||||
@@ -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
|
||||
functions do not all also re-initialize the psymbol table. */
|
||||
|
|
|
|||
Loading…
Reference in a new issue