Don't complain about -fPIC for undefined symbol
[deliverable/binutils-gdb.git] / gdb / dsrec.c
index 39d3f3c862dd23b0f7e01d16c604184e901d5642..82cc9682bc16659b04b287e9bc2443a68143a34c 100644 (file)
@@ -1,6 +1,5 @@
 /* S-record download support for GDB, the GNU debugger.
-   Copyright (C) 1995, 1996, 1997, 1999, 2000, 2001, 2003, 2004, 2007, 2008,
-   2009, 2010 Free Software Foundation, Inc.
+   Copyright (C) 1995-2015 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
 #include "defs.h"
 #include "serial.h"
 #include "srec.h"
+#include <sys/time.h>
 #include <time.h>
-#include "gdb_assert.h"
-#include "gdb_string.h"
-
-extern void report_transfer_performance (unsigned long, time_t, time_t);
+#include "gdb_bfd.h"
 
 extern int remote_debug;
 
@@ -54,25 +51,28 @@ load_srec (struct serial *desc, const char *file, bfd_vma load_offset,
   char *srec;
   int i;
   int reclen;
-  time_t start_time, end_time;
+  struct timeval start_time, end_time;
   unsigned long data_count = 0;
+  struct cleanup *cleanup;
 
   srec = (char *) alloca (maxrecsize + 1);
 
-  abfd = bfd_openr (file, 0);
+  abfd = gdb_bfd_open (file, NULL, -1);
   if (!abfd)
     {
       printf_filtered (_("Unable to open file %s\n"), file);
       return;
     }
 
+  cleanup = make_cleanup_bfd_unref (abfd);
   if (bfd_check_format (abfd, bfd_object) == 0)
     {
       printf_filtered (_("File is not an object file\n"));
+      do_cleanups (cleanup);
       return;
     }
 
-  start_time = time (NULL);
+  gettimeofday (&start_time, NULL);
 
   /* Write a type 0 header record. no data for a type 0, and there
      is no data, so len is 0.  */
@@ -97,11 +97,11 @@ load_srec (struct serial *desc, const char *file, bfd_vma load_offset,
        /* Both GDB and BFD have mechanisms for printing addresses.
            In the below, GDB's is used so that the address is
            consistent with the rest of GDB.  BFD's printf_vma() could
-           have also been used. cagney 1999-09-01 */
+           have also been used.  cagney 1999-09-01 */
        printf_filtered ("%s\t: %s .. %s  ",
                         section_name,
-                        paddress (target_gdbarch, addr),
-                        paddress (target_gdbarch, addr + size));
+                        paddress (target_gdbarch (), addr),
+                        paddress (target_gdbarch (), addr + size));
        gdb_flush (gdb_stdout);
 
        data_count += size;
@@ -135,7 +135,7 @@ load_srec (struct serial *desc, const char *file, bfd_vma load_offset,
                putchar_unfiltered ('#');
                gdb_flush (gdb_stdout);
              }
-         }                     /* Per-packet (or S-record) loop */
+         }                     /* Per-packet (or S-record) loop */
 
        if (deprecated_ui_load_progress_hook)
          if (deprecated_ui_load_progress_hook (section_name,
@@ -147,7 +147,7 @@ load_srec (struct serial *desc, const char *file, bfd_vma load_offset,
   if (hashmark)
     putchar_unfiltered ('\n');
 
-  end_time = time (NULL);
+  gettimeofday (&end_time, NULL);
 
   /* Write a terminator record.  */
 
@@ -169,11 +169,13 @@ load_srec (struct serial *desc, const char *file, bfd_vma load_offset,
 
   serial_flush_input (desc);
 
-  report_transfer_performance (data_count, start_time, end_time);
+  print_transfer_performance (gdb_stdout, data_count, 0,
+                             &start_time, &end_time);
+  do_cleanups (cleanup);
 }
 
 /*
- * make_srec -- make an srecord. This writes each line, one at a
+ * make_srec -- make an srecord.  This writes each line, one at a
  *      time, each with it's own header and trailer line.
  *      An srecord looks like this:
  *
@@ -190,9 +192,9 @@ load_srec (struct serial *desc, const char *file, bfd_vma load_offset,
  *
  *      Where
  *      - length
- *        is the number of bytes following upto the checksum. Note that
- *        this is not the number of chars following, since it takes two
- *        chars to represent a byte.
+ *        is the number of bytes following upto the checksum.  Note
+ *        that this is not the number of chars following, since it
+ *        takes two chars to represent a byte.
  *      - type
  *        is one of:
  *        0) header record
@@ -222,10 +224,10 @@ make_srec (char *srec, CORE_ADDR targ_addr, bfd *abfd, asection *sect,
 {
   unsigned char checksum;
   int tmp;
-  const static char hextab[] = "0123456789ABCDEF";
-  const static char data_code_table[] = "123";
-  const static char term_code_table[] = "987";
-  const static char header_code_table[] = "000";
+  static const char hextab[] = "0123456789ABCDEF";
+  static const char data_code_table[] = "123";
+  static const char term_code_table[] = "987";
+  static const char header_code_table[] = "000";
   char const *code_table;
   int addr_size;
   int payload_size;
@@ -254,7 +256,7 @@ make_srec (char *srec, CORE_ADDR targ_addr, bfd *abfd, asection *sect,
   else
     internal_error (__FILE__, __LINE__,
                    _("make_srec:  Bad address (%s), or bad flags (0x%x)."),
-                   paddress (target_gdbarch, targ_addr), flags);
+                   paddress (target_gdbarch (), targ_addr), flags);
 
   /* Now that we know the address size, we can figure out how much
      data this record can hold.  */
@@ -267,7 +269,7 @@ make_srec (char *srec, CORE_ADDR targ_addr, bfd *abfd, asection *sect,
       bfd_get_section_contents (abfd, sect, binbuf, sectoff, payload_size);
     }
   else
-    payload_size = 0;          /* Term or header packets have no payload */
+    payload_size = 0;          /* Term or header packets have no payload */
 
   /* Output the header.  */
   snprintf (srec, (*maxrecsize) + 1, "S%c%02X%0*X",
@@ -282,7 +284,7 @@ make_srec (char *srec, CORE_ADDR targ_addr, bfd *abfd, asection *sect,
   checksum = 0;
 
   checksum += (payload_size + addr_size + 1    /* Packet length */
-              + (targ_addr & 0xff)     /* Address... */
+              + (targ_addr & 0xff)             /* Address...  */
               + ((targ_addr >> 8) & 0xff)
               + ((targ_addr >> 16) & 0xff)
               + ((targ_addr >> 24) & 0xff));
This page took 0.02704 seconds and 4 git commands to generate.