* symtab.c (symbol_search_name): Minor reformatting.
[deliverable/binutils-gdb.git] / gdb / dsrec.c
index 5f2c2d703ceea69cf5d6ca1ccab00914e0bf584f..2ca91fe5e2119fa902fbf4392b82ec39ebf09a20 100644 (file)
@@ -1,5 +1,5 @@
 /* S-record download support for GDB, the GNU debugger.
-   Copyright 1995, 1996, 1997, 1999, 2000, 2001
+   Copyright 1995, 1996, 1997, 1999, 2000, 2001, 2003, 2004
    Free Software Foundation, Inc.
 
    This file is part of GDB.
@@ -23,6 +23,8 @@
 #include "serial.h"
 #include "srec.h"
 #include <time.h>
+#include "gdb_assert.h"
+#include "gdb_string.h"
 
 extern void report_transfer_performance (unsigned long, time_t, time_t);
 
@@ -91,7 +93,7 @@ load_srec (struct serial *desc, const char *file, bfd_vma load_offset,
       {
        int numbytes;
        bfd_vma addr = bfd_get_section_vma (abfd, s) + load_offset;
-       bfd_size_type size = bfd_get_section_size_before_reloc (s);
+       bfd_size_type size = bfd_get_section_size (s);
        char *section_name = (char *) bfd_get_section_name (abfd, s);
        /* Both GDB and BFD have mechanisms for printing addresses.
            In the below, GDB's is used so that the address is
@@ -122,8 +124,9 @@ load_srec (struct serial *desc, const char *file, bfd_vma load_offset,
            do
              {
                serial_write (desc, srec, reclen);
-               if (ui_load_progress_hook)
-                 if (ui_load_progress_hook (section_name, (unsigned long) i))
+               if (deprecated_ui_load_progress_hook)
+                 if (deprecated_ui_load_progress_hook (section_name,
+                                                       (unsigned long) i))
                    error ("Canceled the download");
              }
            while (waitack != NULL && !waitack ());
@@ -135,8 +138,9 @@ load_srec (struct serial *desc, const char *file, bfd_vma load_offset,
              }
          }                     /* Per-packet (or S-record) loop */
 
-       if (ui_load_progress_hook)
-         if (ui_load_progress_hook (section_name, (unsigned long) i))
+       if (deprecated_ui_load_progress_hook)
+         if (deprecated_ui_load_progress_hook (section_name,
+                                               (unsigned long) i))
            error ("Canceled the download");
        putchar_unfiltered ('\n');
       }
@@ -223,10 +227,6 @@ make_srec (char *srec, CORE_ADDR targ_addr, bfd *abfd, asection *sect,
   const static char data_code_table[] = "123";
   const static char term_code_table[] = "987";
   const static char header_code_table[] = "000";
-  const static char *formats[] =
-  {"S%c%02X%04X",
-   "S%c%02X%06X",
-   "S%c%02X%08X"};
   char const *code_table;
   int addr_size;
   int payload_size;
@@ -263,7 +263,7 @@ make_srec (char *srec, CORE_ADDR targ_addr, bfd *abfd, asection *sect,
   if (sect && abfd)
     {
       payload_size = (*maxrecsize - (1 + 1 + 2 + addr_size * 2 + 2)) / 2;
-      payload_size = min (payload_size, sect->_raw_size - sectoff);
+      payload_size = min (payload_size, bfd_get_section_size (sect) - sectoff);
 
       bfd_get_section_contents (abfd, sect, binbuf, sectoff, payload_size);
     }
@@ -271,9 +271,10 @@ make_srec (char *srec, CORE_ADDR targ_addr, bfd *abfd, asection *sect,
     payload_size = 0;          /* Term or header packets have no payload */
 
   /* Output the header.  */
-
-  sprintf (srec, formats[addr_size - 2], code_table[addr_size - 2],
-          addr_size + payload_size + 1, (int) targ_addr);
+  snprintf (srec, (*maxrecsize) + 1, "S%c%02X%0*X",
+           code_table[addr_size - 2],
+           addr_size + payload_size + 1,
+           addr_size * 2, (int) targ_addr);
 
   /* Note that the checksum is calculated on the raw data, not the
      hexified data.  It includes the length, address and the data
@@ -287,6 +288,9 @@ make_srec (char *srec, CORE_ADDR targ_addr, bfd *abfd, asection *sect,
               + ((targ_addr >> 16) & 0xff)
               + ((targ_addr >> 24) & 0xff));
 
+  /* NOTE: cagney/2003-08-10: The equation is old.  Check that the
+     recent snprintf changes match that equation.  */
+  gdb_assert (strlen (srec) == 1 + 1 + 2 + addr_size * 2);
   p = srec + 1 + 1 + 2 + addr_size * 2;
 
   /* Build the Srecord.  */
This page took 0.024478 seconds and 4 git commands to generate.