* Bringing over SKY PKE disassembler feature from sky branch.
[deliverable/binutils-gdb.git] / gdb / symfile.c
index 936ffc9dd51d04f939a4f60101964b5ffb468272..5d4c85856d9c549fbaa7df27d27643c2ea2d3699 100644 (file)
@@ -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 */
@@ -654,11 +656,13 @@ symbol_file_add (name, from_tty, addr, mainline, mapped, readnow)
       /* We either created a new mapped symbol table, mapped an existing
         symbol table file which has not had initial symbol reading
         performed, or need to read an unmapped symbol table. */
+      if (pre_add_symbol_hook)
+        pre_add_symbol_hook (name);
       if (from_tty || info_verbose)
        {
-         printf_filtered ("Reading symbols from %s...", name);
-         wrap_here ("");
-         gdb_flush (gdb_stdout);
+      printf_filtered ("Reading symbols from %s...", name);
+      wrap_here ("");
+      gdb_flush (gdb_stdout);
        }
       syms_from_objfile (objfile, addr, mainline, from_tty);
     }      
@@ -685,6 +689,8 @@ symbol_file_add (name, from_tty, addr, mainline, mapped, readnow)
        }
     }
 
+  if (post_add_symbol_hook)
+    post_add_symbol_hook ();
   if (from_tty || info_verbose)
     {
       printf_filtered ("done.\n");
@@ -957,6 +963,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 +977,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 +1020,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 +1044,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 +1054,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 +1084,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
@@ -1404,8 +1431,10 @@ deduce_language_from_filename (filename)
   else if (STREQ (c, ".cc") || STREQ (c, ".C") || STREQ (c, ".cxx")
           || STREQ (c, ".cpp") || STREQ (c, ".cp") || STREQ (c, ".c++"))
     return language_cplus;
-  else if (STREQ (c, ".java"))
+  /* start-sanitize-java */
+  else if (STREQ (c, ".java") || STREQ (c, ".class"))
     return language_java;
+  /* end-sanitize-java */
   else if (STREQ (c, ".ch") || STREQ (c, ".c186") || STREQ (c, ".c286"))
     return language_chill;
   else if (STREQ (c, ".f") || STREQ (c, ".F"))
@@ -2297,6 +2326,8 @@ unmap_overlay_command (args, from_tty)
 
 static void
 overlay_auto_command (args, from_tty)
+     char *args;
+     int   from_tty;
 {
   overlay_debugging = -1;
   if (info_verbose)
@@ -2309,6 +2340,8 @@ overlay_auto_command (args, from_tty)
 
 static void
 overlay_manual_command (args, from_tty)
+     char *args;
+     int   from_tty;
 {
   overlay_debugging = 1;
   if (info_verbose)
@@ -2321,6 +2354,8 @@ overlay_manual_command (args, from_tty)
 
 static void
 overlay_off_command (args, from_tty)
+     char *args;
+     int   from_tty;
 {
   overlay_debugging = 0;
   if (info_verbose)
@@ -2329,6 +2364,8 @@ overlay_off_command (args, from_tty)
 
 static void
 overlay_load_command (args, from_tty)
+     char *args;
+     int   from_tty;
 {
   if (target_overlay_update)
     (*target_overlay_update) (NULL);
@@ -2401,7 +2438,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 +2467,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 +2501,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 +2534,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 +2567,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 */)
This page took 0.027416 seconds and 4 git commands to generate.