x86: Add i386 PE big-object support
[binutils-gdb.git] / bfd / ihex.c
index 101e0a76155fc48f95312c08307739cf9c1ee5eb..ca36043fe2daf48d8e7c68249f1df2311cdb9f37 100644 (file)
@@ -1,5 +1,5 @@
 /* BFD back-end for Intel Hex objects.
-   Copyright (C) 1995-2019 Free Software Foundation, Inc.
+   Copyright (C) 1995-2020 Free Software Foundation, Inc.
    Written by Ian Lance Taylor of Cygnus Support <ian@cygnus.com>.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -357,7 +357,7 @@ ihex_scan (bfd *abfd)
                {
                  char secbuf[20];
                  char *secname;
-                 bfd_size_type amt;
+                 size_t amt;
                  flagword flags;
 
                  sprintf (secbuf, ".sec%d", bfd_count_sections (abfd) + 1);
@@ -487,7 +487,7 @@ ihex_scan (bfd *abfd)
 
 /* Try to recognize an Intel Hex file.  */
 
-static const bfd_target *
+static bfd_cleanup
 ihex_object_p (bfd *abfd)
 {
   void * tdata_save;
@@ -538,7 +538,7 @@ ihex_object_p (bfd *abfd)
       return NULL;
     }
 
-  return abfd->xvec;
+  return _bfd_no_cleanup;
 }
 
 /* Read the contents of a section in an Intel Hex file.  */
@@ -811,16 +811,15 @@ ihex_write_object_contents (bfd *abfd)
          if (count > CHUNK)
            now = CHUNK;
 
-         if (where > segbase + extbase + 0xffff)
+         if (where < extbase
+             || where - extbase < segbase
+             || where - extbase - segbase > 0xffff)
            {
              bfd_byte addr[2];
 
              /* We need a new base address.  */
-             if (where <= 0xfffff)
+             if (extbase == 0 && where <= 0xfffff)
                {
-                 /* The addresses should be sorted.  */
-                 BFD_ASSERT (extbase == 0);
-
                  segbase = where & 0xf0000;
                  addr[0] = (bfd_byte)(segbase >> 12) & 0xff;
                  addr[1] = (bfd_byte)(segbase >> 4) & 0xff;
@@ -962,6 +961,7 @@ ihex_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED,
 #define ihex_bfd_lookup_section_flags            bfd_generic_lookup_section_flags
 #define ihex_bfd_merge_sections                          bfd_generic_merge_sections
 #define ihex_bfd_is_group_section                bfd_generic_is_group_section
+#define ihex_bfd_group_name                      bfd_generic_group_name
 #define ihex_bfd_discard_group                   bfd_generic_discard_group
 #define ihex_section_already_linked              _bfd_generic_section_already_linked
 #define ihex_bfd_define_common_symbol            bfd_generic_define_common_symbol