projects
/
deliverable
/
binutils-gdb.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
gdb/
[deliverable/binutils-gdb.git]
/
gdb
/
symfile.c
diff --git
a/gdb/symfile.c
b/gdb/symfile.c
index 20ae85f2390ff469a350c8a26b38815d18bc9ab6..75cb0f8e999b6b1c38c263dd4cbbbf52db305a49 100644
(file)
--- a/
gdb/symfile.c
+++ b/
gdb/symfile.c
@@
-129,7
+129,8
@@
static void overlay_command (char *, int);
static void simple_free_overlay_table (void);
static void simple_free_overlay_table (void);
-static void read_target_long_array (CORE_ADDR, unsigned int *, int, int);
+static void read_target_long_array (CORE_ADDR, unsigned int *, int, int,
+ enum bfd_endian);
static int simple_read_overlay_table (void);
static int simple_read_overlay_table (void);
@@
-170,13
+171,6
@@
Dynamic symbol table reloading multiple times in one run is %s.\n"),
value);
}
value);
}
-/* If non-zero, gdb will notify the user when it is loading symbols
- from a file. This is almost always what users will want to have happen;
- but for programs with lots of dynamically linked libraries, the output
- can be more noise than signal. */
-
-int print_symbol_loading = 1;
-
/* If non-zero, shared library symbols will be added automatically
when the inferior is created, new libraries are loaded, or when
attaching to the inferior. This is almost always what users will
/* If non-zero, shared library symbols will be added automatically
when the inferior is created, new libraries are loaded, or when
attaching to the inferior. This is almost always what users will
@@
-792,7
+786,7
@@
syms_from_objfile (struct objfile *objfile,
if (symfile_objfile != NULL)
{
free_objfile (symfile_objfile);
if (symfile_objfile != NULL)
{
free_objfile (symfile_objfile);
-
symfile_objfile = NULL
;
+
gdb_assert (symfile_objfile == NULL)
;
}
/* Currently we keep symbols from the add-symbol-file command.
}
/* Currently we keep symbols from the add-symbol-file command.
@@
-988,12
+982,9
@@
symbol_file_add_with_addrs_or_offsets (bfd *abfd,
deprecated_pre_add_symbol_hook (name);
else
{
deprecated_pre_add_symbol_hook (name);
else
{
- if (print_symbol_loading)
- {
- printf_unfiltered (_("Reading symbols from %s..."), name);
- wrap_here ("");
- gdb_flush (gdb_stdout);
- }
+ printf_unfiltered (_("Reading symbols from %s..."), name);
+ wrap_here ("");
+ gdb_flush (gdb_stdout);
}
}
syms_from_objfile (objfile, addrs, offsets, num_offsets,
}
}
syms_from_objfile (objfile, addrs, offsets, num_offsets,
@@
-1006,7
+997,7
@@
symbol_file_add_with_addrs_or_offsets (bfd *abfd,
if ((flags & OBJF_READNOW) || readnow_symbol_files)
{
if ((flags & OBJF_READNOW) || readnow_symbol_files)
{
- if (
(from_tty || info_verbose) && print_symbol_loading
)
+ if (
from_tty || info_verbose
)
{
printf_unfiltered (_("expanding to full symbols..."));
wrap_here ("");
{
printf_unfiltered (_("expanding to full symbols..."));
wrap_here ("");
@@
-1048,15
+1039,11
@@
symbol_file_add_with_addrs_or_offsets (bfd *abfd,
xfree (debugfile);
}
xfree (debugfile);
}
- if (
!have_partial_symbols () && !have_full_symbols (
)
- &&
print_symbol_loading
)
+ if (
(from_tty || info_verbose
)
+ &&
!objfile_has_symbols (objfile)
)
{
wrap_here ("");
{
wrap_here ("");
- printf_unfiltered (_("(no debugging symbols found)"));
- if (from_tty || info_verbose)
- printf_unfiltered ("...");
- else
- printf_unfiltered ("\n");
+ printf_unfiltered (_("(no debugging symbols found)..."));
wrap_here ("");
}
wrap_here ("");
}
@@
-1065,10
+1052,7
@@
symbol_file_add_with_addrs_or_offsets (bfd *abfd,
if (deprecated_post_add_symbol_hook)
deprecated_post_add_symbol_hook ();
else
if (deprecated_post_add_symbol_hook)
deprecated_post_add_symbol_hook ();
else
- {
- if (print_symbol_loading)
- printf_unfiltered (_("done.\n"));
- }
+ printf_unfiltered (_("done.\n"));
}
/* We print some messages regardless of whether 'from_tty ||
}
/* We print some messages regardless of whether 'from_tty ||
@@
-1079,7
+1063,10
@@
symbol_file_add_with_addrs_or_offsets (bfd *abfd,
do_cleanups (my_cleanups);
if (objfile->sf == NULL)
do_cleanups (my_cleanups);
if (objfile->sf == NULL)
- return objfile; /* No symbols. */
+ {
+ observer_notify_new_objfile (objfile);
+ return objfile; /* No symbols. */
+ }
new_symfile_objfile (objfile, add_flags);
new_symfile_objfile (objfile, add_flags);
@@
-1162,7
+1149,7
@@
symbol_file_clear (int from_tty)
descriptors as well. */
no_shared_libraries (NULL, from_tty);
descriptors as well. */
no_shared_libraries (NULL, from_tty);
-
symfile_objfile = NULL
;
+
gdb_assert (symfile_objfile == NULL)
;
if (from_tty)
printf_unfiltered (_("No symbol file now.\n"));
}
if (from_tty)
printf_unfiltered (_("No symbol file now.\n"));
}
@@
-1296,7
+1283,8
@@
get_debug_link_info (struct objfile *objfile, unsigned long *crc32_out)
}
static int
}
static int
-separate_debug_file_exists (const char *name, unsigned long crc)
+separate_debug_file_exists (const char *name, unsigned long crc,
+ const char *parent_name)
{
unsigned long file_crc = 0;
bfd *abfd;
{
unsigned long file_crc = 0;
bfd *abfd;
@@
-1316,7
+1304,15
@@
separate_debug_file_exists (const char *name, unsigned long crc)
bfd_close (abfd);
bfd_close (abfd);
- return crc == file_crc;
+ if (crc != file_crc)
+ {
+ warning (_("the debug information found in \"%s\""
+ " does not match \"%s\" (CRC mismatch).\n"),
+ name, parent_name);
+ return 0;
+ }
+
+ return 1;
}
char *debug_file_directory = NULL;
}
char *debug_file_directory = NULL;
@@
-1368,6
+1364,8
@@
find_separate_debug_file (struct objfile *objfile)
basename = get_debug_link_info (objfile, &crc32);
if (basename == NULL)
basename = get_debug_link_info (objfile, &crc32);
if (basename == NULL)
+ /* There's no separate debug info, hence there's no way we could
+ load it => no warning. */
return NULL;
dir = xstrdup (objfile->name);
return NULL;
dir = xstrdup (objfile->name);
@@
-1384,8
+1382,14
@@
find_separate_debug_file (struct objfile *objfile)
gdb_assert (i >= 0 && IS_DIR_SEPARATOR (dir[i]));
dir[i+1] = '\0';
gdb_assert (i >= 0 && IS_DIR_SEPARATOR (dir[i]));
dir[i+1] = '\0';
+ /* Set I to max (strlen (canon_name), strlen (dir)). */
+ canon_name = lrealpath (dir);
+ i = strlen (dir);
+ if (canon_name && strlen (canon_name) > i)
+ i = strlen (canon_name);
+
debugfile = alloca (strlen (debug_file_directory) + 1
debugfile = alloca (strlen (debug_file_directory) + 1
- +
strlen (dir)
+ +
i
+ strlen (DEBUG_SUBDIRECTORY)
+ strlen ("/")
+ strlen (basename)
+ strlen (DEBUG_SUBDIRECTORY)
+ strlen ("/")
+ strlen (basename)
@@
-1395,10
+1399,11
@@
find_separate_debug_file (struct objfile *objfile)
strcpy (debugfile, dir);
strcat (debugfile, basename);
strcpy (debugfile, dir);
strcat (debugfile, basename);
- if (separate_debug_file_exists (debugfile, crc32))
+ if (separate_debug_file_exists (debugfile, crc32
, objfile->name
))
{
xfree (basename);
xfree (dir);
{
xfree (basename);
xfree (dir);
+ xfree (canon_name);
return xstrdup (debugfile);
}
return xstrdup (debugfile);
}
@@
-1408,10
+1413,11
@@
find_separate_debug_file (struct objfile *objfile)
strcat (debugfile, "/");
strcat (debugfile, basename);
strcat (debugfile, "/");
strcat (debugfile, basename);
- if (separate_debug_file_exists (debugfile, crc32))
+ if (separate_debug_file_exists (debugfile, crc32
, objfile->name
))
{
xfree (basename);
xfree (dir);
{
xfree (basename);
xfree (dir);
+ xfree (canon_name);
return xstrdup (debugfile);
}
return xstrdup (debugfile);
}
@@
-1421,16
+1427,16
@@
find_separate_debug_file (struct objfile *objfile)
strcat (debugfile, dir);
strcat (debugfile, basename);
strcat (debugfile, dir);
strcat (debugfile, basename);
- if (separate_debug_file_exists (debugfile, crc32))
+ if (separate_debug_file_exists (debugfile, crc32
, objfile->name
))
{
xfree (basename);
xfree (dir);
{
xfree (basename);
xfree (dir);
+ xfree (canon_name);
return xstrdup (debugfile);
}
/* If the file is in the sysroot, try using its base path in the
global debugfile directory. */
return xstrdup (debugfile);
}
/* If the file is in the sysroot, try using its base path in the
global debugfile directory. */
- canon_name = lrealpath (dir);
if (canon_name
&& strncmp (canon_name, gdb_sysroot, strlen (gdb_sysroot)) == 0
&& IS_DIR_SEPARATOR (canon_name[strlen (gdb_sysroot)]))
if (canon_name
&& strncmp (canon_name, gdb_sysroot, strlen (gdb_sysroot)) == 0
&& IS_DIR_SEPARATOR (canon_name[strlen (gdb_sysroot)]))
@@
-1440,7
+1446,7
@@
find_separate_debug_file (struct objfile *objfile)
strcat (debugfile, "/");
strcat (debugfile, basename);
strcat (debugfile, "/");
strcat (debugfile, basename);
- if (separate_debug_file_exists (debugfile, crc32))
+ if (separate_debug_file_exists (debugfile, crc32
, objfile->name
))
{
xfree (canon_name);
xfree (basename);
{
xfree (canon_name);
xfree (basename);
@@
-1625,6
+1631,9
@@
symfile_bfd_open (char *name)
bfd_errmsg (bfd_get_error ()));
}
bfd_errmsg (bfd_get_error ()));
}
+ /* bfd_usrdata exists for applications and libbfd must not touch it. */
+ gdb_assert (bfd_usrdata (sym_bfd) == NULL);
+
return sym_bfd;
}
return sym_bfd;
}
@@
-2318,6
+2327,8
@@
reread_symbols (void)
objfile->obfd = bfd_openr (obfd_filename, gnutarget);
if (objfile->obfd == NULL)
error (_("Can't open %s to read symbols."), objfile->name);
objfile->obfd = bfd_openr (obfd_filename, gnutarget);
if (objfile->obfd == NULL)
error (_("Can't open %s to read symbols."), objfile->name);
+ else
+ objfile->obfd = gdb_bfd_ref (objfile->obfd);
/* bfd_openr sets cacheable to true, which is what we want. */
if (!bfd_check_format (objfile->obfd, bfd_object))
error (_("Can't read symbols from %s: %s."), objfile->name,
/* bfd_openr sets cacheable to true, which is what we want. */
if (!bfd_check_format (objfile->obfd, bfd_object))
error (_("Can't read symbols from %s: %s."), objfile->name,
@@
-2421,7
+2432,7
@@
reread_symbols (void)
zero is OK since dbxread.c also does what it needs to do if
objfile->global_psymbols.size is 0. */
(*objfile->sf->sym_read) (objfile, 0);
zero is OK since dbxread.c also does what it needs to do if
objfile->global_psymbols.size is 0. */
(*objfile->sf->sym_read) (objfile, 0);
- if (!
have_partial_symbols () && !have_full_symbols (
))
+ if (!
objfile_has_symbols (objfile
))
{
wrap_here ("");
printf_unfiltered (_("(no debugging symbols found)\n"));
{
wrap_here ("");
printf_unfiltered (_("(no debugging symbols found)\n"));
@@
-2452,12
+2463,14
@@
reread_symbols (void)
if (reread_one)
{
if (reread_one)
{
+ /* Notify objfiles that we've modified objfile sections. */
+ objfiles_changed ();
+
clear_symtab_users ();
/* At least one objfile has changed, so we can consider that
the executable we're debugging has changed too. */
observer_notify_executable_changed ();
}
clear_symtab_users ();
/* At least one objfile has changed, so we can consider that
the executable we're debugging has changed too. */
observer_notify_executable_changed ();
}
-
}
}
@@
-2805,7
+2818,7
@@
clear_symtab_users (void)
clear_displays ();
breakpoint_re_set ();
clear_displays ();
breakpoint_re_set ();
- set_default_breakpoint (0, 0, 0, 0);
+ set_default_breakpoint (0,
NULL,
0, 0, 0);
clear_pc_function_cache ();
observer_notify_new_objfile (NULL);
clear_pc_function_cache ();
observer_notify_new_objfile (NULL);
@@
-3750,7
+3763,7
@@
simple_free_overlay_region_table (void)
Convert to host order. int LEN is number of ints */
static void
read_target_long_array (CORE_ADDR memaddr, unsigned int *myaddr,
Convert to host order. int LEN is number of ints */
static void
read_target_long_array (CORE_ADDR memaddr, unsigned int *myaddr,
- int len, int size)
+ int len, int size
, enum bfd_endian byte_order
)
{
/* FIXME (alloca): Not safe if array is very large. */
gdb_byte *buf = alloca (len * size);
{
/* FIXME (alloca): Not safe if array is very large. */
gdb_byte *buf = alloca (len * size);
@@
-3758,7
+3771,7
@@
read_target_long_array (CORE_ADDR memaddr, unsigned int *myaddr,
read_memory (memaddr, buf, len * size);
for (i = 0; i < len; i++)
read_memory (memaddr, buf, len * size);
for (i = 0; i < len; i++)
- myaddr[i] = extract_unsigned_integer (size * i + buf, size);
+ myaddr[i] = extract_unsigned_integer (size * i + buf, size
, byte_order
);
}
/* Find and grab a copy of the target _ovly_table
}
/* Find and grab a copy of the target _ovly_table
@@
-3769,6
+3782,7
@@
simple_read_overlay_table (void)
struct minimal_symbol *novlys_msym, *ovly_table_msym;
struct gdbarch *gdbarch;
int word_size;
struct minimal_symbol *novlys_msym, *ovly_table_msym;
struct gdbarch *gdbarch;
int word_size;
+ enum bfd_endian byte_order;
simple_free_overlay_table ();
novlys_msym = lookup_minimal_symbol ("_novlys", NULL, NULL);
simple_free_overlay_table ();
novlys_msym = lookup_minimal_symbol ("_novlys", NULL, NULL);
@@
-3791,14
+3805,16
@@
simple_read_overlay_table (void)
gdbarch = get_objfile_arch (msymbol_objfile (ovly_table_msym));
word_size = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT;
gdbarch = get_objfile_arch (msymbol_objfile (ovly_table_msym));
word_size = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT;
+ byte_order = gdbarch_byte_order (gdbarch);
- cache_novlys = read_memory_integer (SYMBOL_VALUE_ADDRESS (novlys_msym), 4);
+ cache_novlys = read_memory_integer (SYMBOL_VALUE_ADDRESS (novlys_msym),
+ 4, byte_order);
cache_ovly_table
= (void *) xmalloc (cache_novlys * sizeof (*cache_ovly_table));
cache_ovly_table_base = SYMBOL_VALUE_ADDRESS (ovly_table_msym);
read_target_long_array (cache_ovly_table_base,
(unsigned int *) cache_ovly_table,
cache_ovly_table
= (void *) xmalloc (cache_novlys * sizeof (*cache_ovly_table));
cache_ovly_table_base = SYMBOL_VALUE_ADDRESS (ovly_table_msym);
read_target_long_array (cache_ovly_table_base,
(unsigned int *) cache_ovly_table,
- cache_novlys * 4, word_size);
+ cache_novlys * 4, word_size
, byte_order
);
return 1; /* SUCCESS */
}
return 1; /* SUCCESS */
}
@@
-3810,25
+3826,33
@@
static int
simple_read_overlay_region_table (void)
{
struct minimal_symbol *msym;
simple_read_overlay_region_table (void)
{
struct minimal_symbol *msym;
+ struct gdbarch *gdbarch;
+ int word_size;
+ enum bfd_endian byte_order;
simple_free_overlay_region_table ();
msym = lookup_minimal_symbol ("_novly_regions", NULL, NULL);
simple_free_overlay_region_table ();
msym = lookup_minimal_symbol ("_novly_regions", NULL, NULL);
- if (msym != NULL)
- cache_novly_regions = read_memory_integer (SYMBOL_VALUE_ADDRESS (msym), 4);
- else
+ if (msym == NULL)
return 0; /* failure */
return 0; /* failure */
+
+ gdbarch = get_objfile_arch (msymbol_objfile (msym));
+ word_size = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT;
+ byte_order = gdbarch_byte_order (gdbarch);
+
+ cache_novly_regions = read_memory_integer (SYMBOL_VALUE_ADDRESS (msym),
+ 4, byte_order);
+
cache_ovly_region_table = (void *) xmalloc (cache_novly_regions * 12);
if (cache_ovly_region_table != NULL)
{
msym = lookup_minimal_symbol ("_ovly_region_table", NULL, NULL);
if (msym != NULL)
{
cache_ovly_region_table = (void *) xmalloc (cache_novly_regions * 12);
if (cache_ovly_region_table != NULL)
{
msym = lookup_minimal_symbol ("_ovly_region_table", NULL, NULL);
if (msym != NULL)
{
- struct gdbarch *gdbarch = get_objfile_arch (msymbol_objfile (msym));
- int word_size = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT;
cache_ovly_region_table_base = SYMBOL_VALUE_ADDRESS (msym);
read_target_long_array (cache_ovly_region_table_base,
(unsigned int *) cache_ovly_region_table,
cache_ovly_region_table_base = SYMBOL_VALUE_ADDRESS (msym);
read_target_long_array (cache_ovly_region_table_base,
(unsigned int *) cache_ovly_region_table,
- cache_novly_regions * 3, word_size);
+ cache_novly_regions * 3,
+ word_size, byte_order);
}
else
return 0; /* failure */
}
else
return 0; /* failure */
@@
-3855,6
+3879,7
@@
simple_overlay_update_1 (struct obj_section *osect)
asection *bsect = osect->the_bfd_section;
struct gdbarch *gdbarch = get_objfile_arch (osect->objfile);
int word_size = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT;
asection *bsect = osect->the_bfd_section;
struct gdbarch *gdbarch = get_objfile_arch (osect->objfile);
int word_size = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT;
+ enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
size = bfd_get_section_size (osect->the_bfd_section);
for (i = 0; i < cache_novlys; i++)
size = bfd_get_section_size (osect->the_bfd_section);
for (i = 0; i < cache_novlys; i++)
@@
-3864,7
+3889,7
@@
simple_overlay_update_1 (struct obj_section *osect)
{
read_target_long_array (cache_ovly_table_base + i * word_size,
(unsigned int *) cache_ovly_table[i],
{
read_target_long_array (cache_ovly_table_base + i * word_size,
(unsigned int *) cache_ovly_table[i],
- 4, word_size);
+ 4, word_size
, byte_order
);
if (cache_ovly_table[i][VMA] == bfd_section_vma (obfd, bsect)
&& cache_ovly_table[i][LMA] == bfd_section_lma (obfd, bsect)
/* && cache_ovly_table[i][SIZE] == size */ )
if (cache_ovly_table[i][VMA] == bfd_section_vma (obfd, bsect)
&& cache_ovly_table[i][LMA] == bfd_section_lma (obfd, bsect)
/* && cache_ovly_table[i][SIZE] == size */ )
@@
-4176,12
+4201,4
@@
the global debug-file directory prepended."),
NULL,
show_debug_file_directory,
&setlist, &showlist);
NULL,
show_debug_file_directory,
&setlist, &showlist);
-
- add_setshow_boolean_cmd ("symbol-loading", no_class,
- &print_symbol_loading, _("\
-Set printing of symbol loading messages."), _("\
-Show printing of symbol loading messages."), NULL,
- NULL,
- NULL,
- &setprintlist, &showprintlist);
}
}
This page took
0.029199 seconds
and
4
git commands to generate.