aboutsummaryrefslogtreecommitdiff
path: root/gdb/symfile.c
diff options
context:
space:
mode:
authorJason Molenda <jmolenda@apple.com>1998-04-23 19:31:51 +0000
committerJason Molenda <jmolenda@apple.com>1998-04-23 19:31:51 +0000
commit74d6ac44dec6ac521772bc13c5c789c3d97ec19f (patch)
tree9ce223b134adb81b0fca1380d8f098128e2ba976 /gdb/symfile.c
parentcc33746dfc057f72ffc55bf5a06929fe01935b04 (diff)
downloadgdb-74d6ac44dec6ac521772bc13c5c789c3d97ec19f.zip
gdb-74d6ac44dec6ac521772bc13c5c789c3d97ec19f.tar.gz
gdb-74d6ac44dec6ac521772bc13c5c789c3d97ec19f.tar.bz2
Thu Apr 23 12:27:43 1998 Philippe De Muyter <phdm@macqel.be>
* symfile.c (simple_overlay_update_1): Do not prefix array address by `&'. * bcache.h (BCACHE_DATA_ALIGNMENT): Ditto. * tracepoint.c (encode_actions): Ditto. * language.c, complaints.c, utils.c (varargs.h): Do not include that file here, it is already included indirectly by defs.h. * dbxread.c (dbx_symfile_init, process_one_symbol): Cast xmalloc return value to the appropriate pointer type. * utils.c (floatformat_from_doublest): Ditto. * tracepoint.c (read_actions, _initialize_tracepoint): Ditto. (add_memrange): Likewise with xrealloc return value. * stabsread.c (ref_add): Ditto. * coffread.c (coff_symfile_init): Likewise for xmmalloc return value. * elfread.c (elf_symfile_read): Ditto. * os9kread.c (os9k_symfile_init): Ditto.
Diffstat (limited to 'gdb/symfile.c')
-rw-r--r--gdb/symfile.c97
1 files changed, 65 insertions, 32 deletions
diff --git a/gdb/symfile.c b/gdb/symfile.c
index 936ffc9..6f3d307 100644
--- a/gdb/symfile.c
+++ b/gdb/symfile.c
@@ -53,6 +53,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#endif
int (*ui_load_progress_hook) PARAMS ((char *, unsigned long));
+void (*pre_add_symbol_hook) PARAMS ((char *));
+void (*post_add_symbol_hook) PARAMS ((void));
/* Global variables owned by this file */
int readnow_symbol_files; /* Read full symbols immediately */
@@ -656,9 +658,14 @@ symbol_file_add (name, from_tty, addr, mainline, mapped, readnow)
performed, or need to read an unmapped symbol table. */
if (from_tty || info_verbose)
{
- printf_filtered ("Reading symbols from %s...", name);
- wrap_here ("");
- gdb_flush (gdb_stdout);
+ if (pre_add_symbol_hook)
+ pre_add_symbol_hook (name);
+ else
+ {
+ printf_filtered ("Reading symbols from %s...", name);
+ wrap_here ("");
+ gdb_flush (gdb_stdout);
+ }
}
syms_from_objfile (objfile, addr, mainline, from_tty);
}
@@ -687,8 +694,13 @@ symbol_file_add (name, from_tty, addr, mainline, mapped, readnow)
if (from_tty || info_verbose)
{
- printf_filtered ("done.\n");
- gdb_flush (gdb_stdout);
+ if (post_add_symbol_hook)
+ post_add_symbol_hook ();
+ else
+ {
+ printf_filtered ("done.\n");
+ gdb_flush (gdb_stdout);
+ }
}
new_symfile_objfile (objfile, mainline, from_tty);
@@ -957,6 +969,8 @@ load_command (arg, from_tty)
to worry about finding it, and (b) On VMS, fork() is very slow and so
we don't want to run a subprocess. On the other hand, I'm not sure how
performance compares. */
+#define GENERIC_LOAD_CHUNK 256
+#define VALIDATE_DOWNLOAD 0
void
generic_load (filename, from_tty)
char *filename;
@@ -969,7 +983,10 @@ generic_load (filename, from_tty)
unsigned long data_count = 0; /* Number of bytes transferred to memory */
int n;
unsigned long load_offset = 0; /* offset to add to vma for each section */
- char buf[128];
+ char buf[GENERIC_LOAD_CHUNK+8];
+#if VALIDATE_DOWNLOAD
+ char verify_buffer[GENERIC_LOAD_CHUNK+8] ;
+#endif
/* enable user to specify address for downloading as 2nd arg to load */
n = sscanf(filename, "%s 0x%lx", buf, &load_offset);
@@ -1009,14 +1026,13 @@ generic_load (filename, from_tty)
char *buffer;
struct cleanup *old_chain;
bfd_vma lma;
- unsigned long l = size / 100;
+ unsigned long l = size ;
int err;
char *sect;
unsigned long sent;
unsigned long len;
- l = l > 100 ? l : 100;
- data_count += size;
+ l = l > GENERIC_LOAD_CHUNK ? GENERIC_LOAD_CHUNK : l ;
buffer = xmalloc (size);
old_chain = make_cleanup (free, buffer);
@@ -1034,8 +1050,8 @@ generic_load (filename, from_tty)
bfd_get_section_contents (loadfile_bfd, s, buffer, 0, size);
- sect = bfd_get_section_name (loadfile_bfd, s);
- sent = 0;
+ sect = (char *) bfd_get_section_name (loadfile_bfd, s);
+ sent = 0;
do
{
len = (size - sent) < l ? (size - sent) : l;
@@ -1044,9 +1060,24 @@ generic_load (filename, from_tty)
if (ui_load_progress_hook)
if (ui_load_progress_hook (sect, sent))
error ("Canceled the download");
+#if VALIDATE_DOWNLOAD
+ /* Broken memories and broken monitors manifest themselves
+ here when bring new computers to life.
+ This doubles already slow downloads.
+ */
+ if (err) break ;
+ {
+ target_read_memory(lma,verify_buffer,len) ;
+ if (0 != bcmp(buffer,verify_buffer,len))
+ error("Download verify failed at %08x",
+ (unsigned long)lma) ;
+ }
+
+#endif
+ data_count += len ;
lma += len;
buffer += len;
- }
+ } /* od */
while (err == 0 && sent < size);
if (err != 0)
@@ -1059,12 +1090,14 @@ generic_load (filename, from_tty)
}
end_time = time (NULL);
-
- printf_filtered ("Start address 0x%lx\n", loadfile_bfd->start_address);
-
- /* We were doing this in remote-mips.c, I suspect it is right
- for other targets too. */
- write_pc (loadfile_bfd->start_address);
+ {
+ unsigned long entry ;
+ entry = bfd_get_start_address(loadfile_bfd) ;
+ printf_filtered ("Start address 0x%lx , load size %d\n", entry,data_count);
+ /* We were doing this in remote-mips.c, I suspect it is right
+ for other targets too. */
+ write_pc (entry);
+ }
/* FIXME: are we supposed to call symbol_file_add or not? According to
a comment from remote-mips.c (where a call to symbol_file_add was
@@ -2401,7 +2434,7 @@ static CORE_ADDR cache_ovly_table_base = 0;
static CORE_ADDR cache_ovly_region_table_base = 0;
#endif
enum ovly_index { VMA, SIZE, LMA, MAPPED};
-#define TARGET_INT_BYTES (TARGET_INT_BIT / TARGET_CHAR_BIT)
+#define TARGET_LONG_BYTES (TARGET_LONG_BIT / TARGET_CHAR_BIT)
/* Throw away the cached copy of _ovly_table */
static void
@@ -2430,18 +2463,18 @@ simple_free_overlay_region_table ()
/* Read an array of ints from the target into a local buffer.
Convert to host order. int LEN is number of ints */
static void
-read_target_int_array (memaddr, myaddr, len)
+read_target_long_array (memaddr, myaddr, len)
CORE_ADDR memaddr;
unsigned int *myaddr;
int len;
{
- char *buf = alloca (len * TARGET_INT_BYTES);
+ char *buf = alloca (len * TARGET_LONG_BYTES);
int i;
- read_memory (memaddr, buf, len * TARGET_INT_BYTES);
+ read_memory (memaddr, buf, len * TARGET_LONG_BYTES);
for (i = 0; i < len; i++)
- myaddr[i] = extract_unsigned_integer (TARGET_INT_BYTES * i + buf,
- TARGET_INT_BYTES);
+ myaddr[i] = extract_unsigned_integer (TARGET_LONG_BYTES * i + buf,
+ TARGET_LONG_BYTES);
}
/* Find and grab a copy of the target _ovly_table
@@ -2464,9 +2497,9 @@ simple_read_overlay_table ()
if (msym != NULL)
{
cache_ovly_table_base = SYMBOL_VALUE_ADDRESS (msym);
- read_target_int_array (cache_ovly_table_base,
- (int *) cache_ovly_table,
- cache_novlys * 4);
+ read_target_long_array (cache_ovly_table_base,
+ (int *) cache_ovly_table,
+ cache_novlys * 4);
}
else
return 0; /* failure */
@@ -2497,9 +2530,9 @@ simple_read_overlay_region_table ()
if (msym != NULL)
{
cache_ovly_region_table_base = SYMBOL_VALUE_ADDRESS (msym);
- read_target_int_array (cache_ovly_region_table_base,
- (int *) cache_ovly_region_table,
- cache_novly_regions * 3);
+ read_target_long_array (cache_ovly_region_table_base,
+ (int *) cache_ovly_region_table,
+ cache_novly_regions * 3);
}
else
return 0; /* failure */
@@ -2530,8 +2563,8 @@ simple_overlay_update_1 (osect)
cache_ovly_table[i][LMA] == osect->the_bfd_section->lma /* &&
cache_ovly_table[i][SIZE] == size */)
{
- read_target_int_array (cache_ovly_table_base + i * TARGET_INT_BYTES,
- (int *) &cache_ovly_table[i], 4);
+ read_target_long_array (cache_ovly_table_base + i * TARGET_LONG_BYTES,
+ (int *) cache_ovly_table[i], 4);
if (cache_ovly_table[i][VMA] == osect->the_bfd_section->vma &&
cache_ovly_table[i][LMA] == osect->the_bfd_section->lma /* &&
cache_ovly_table[i][SIZE] == size */)