bfd: Properly install library and header files
[binutils-gdb.git] / bfd / verilog.c
index a785e50a00a4a5f4cfa77c36ed760313f8a0c46c..4579f05ded3ead15dcd44030842a618b08c23d9a 100644 (file)
@@ -1,5 +1,5 @@
 /* BFD back-end for verilog hex memory dump files.
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Copyright (C) 2009-2022 Free Software Foundation, Inc.
    Written by Anthony Green <green@moxielogic.com>
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -95,19 +95,19 @@ typedef struct verilog_data_struct
 }
 tdata_type;
 
-static bfd_boolean
+static bool
 verilog_set_arch_mach (bfd *abfd, enum bfd_architecture arch, unsigned long mach)
 {
   if (arch != bfd_arch_unknown)
     return bfd_default_set_arch_mach (abfd, arch, mach);
 
   abfd->arch_info = & bfd_default_arch_struct;
-  return TRUE;
+  return true;
 }
 
 /* We have to save up all the outpu for a splurge before output.  */
 
-static bfd_boolean
+static bool
 verilog_set_section_contents (bfd *abfd,
                              sec_ptr section,
                              const void * location,
@@ -119,7 +119,7 @@ verilog_set_section_contents (bfd *abfd,
 
   entry = (verilog_data_list_type *) bfd_alloc (abfd, sizeof (* entry));
   if (entry == NULL)
-    return FALSE;
+    return false;
 
   if (bytes_to_do
       && (section->flags & SEC_ALLOC)
@@ -129,7 +129,7 @@ verilog_set_section_contents (bfd *abfd,
 
       data = (bfd_byte *) bfd_alloc (abfd, bytes_to_do);
       if (data == NULL)
-       return FALSE;
+       return false;
       memcpy ((void *) data, location, (size_t) bytes_to_do);
 
       entry->data = data;
@@ -159,18 +159,31 @@ verilog_set_section_contents (bfd *abfd,
            tdata->tail = entry;
        }
     }
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 verilog_write_address (bfd *abfd, bfd_vma address)
 {
-  char buffer[12];
+  char buffer[20];
   char *dst = buffer;
   bfd_size_type wrlen;
 
   /* Write the address.  */
   *dst++ = '@';
+#ifdef BFD64
+  if (address >= (bfd_vma)1 << 32)
+    {
+      TOHEX (dst, (address >> 56));
+      dst += 2;
+      TOHEX (dst, (address >> 48));
+      dst += 2;
+      TOHEX (dst, (address >> 40));
+      dst += 2;
+      TOHEX (dst, (address >> 32));
+      dst += 2;
+    }
+#endif
   TOHEX (dst, (address >> 24));
   dst += 2;
   TOHEX (dst, (address >> 16));
@@ -190,7 +203,7 @@ verilog_write_address (bfd *abfd, bfd_vma address)
    supplied bytes and length don't have a checksum.  That's worked
    out here.  */
 
-static bfd_boolean
+static bool
 verilog_write_record (bfd *abfd,
                      const bfd_byte *data,
                      const bfd_byte *end)
@@ -207,7 +220,7 @@ verilog_write_record (bfd *abfd,
       > (long) sizeof (buffer))
     {
       /* FIXME: Should we generate an error message ?  */
-      return FALSE;
+      return false;
     }
 
   /* Write the data.
@@ -270,7 +283,7 @@ verilog_write_record (bfd *abfd,
   return bfd_bwrite ((void *) buffer, wrlen, abfd) == wrlen;
 }
 
-static bfd_boolean
+static bool
 verilog_write_section (bfd *abfd,
                       tdata_type *tdata ATTRIBUTE_UNUSED,
                       verilog_data_list_type *list)
@@ -289,16 +302,16 @@ verilog_write_section (bfd *abfd,
       if (! verilog_write_record (abfd,
                                  location,
                                  location + octets_this_chunk))
-       return FALSE;
+       return false;
 
       octets_written += octets_this_chunk;
       location += octets_this_chunk;
     }
 
-  return TRUE;
+  return true;
 }
 
-static bfd_boolean
+static bool
 verilog_write_object_contents (bfd *abfd)
 {
   tdata_type *tdata = abfd->tdata.verilog_data;
@@ -310,10 +323,10 @@ verilog_write_object_contents (bfd *abfd)
   while (list != (verilog_data_list_type *) NULL)
     {
       if (! verilog_write_section (abfd, tdata, list))
-       return FALSE;
+       return false;
       list = list->next;
     }
-  return TRUE;
+  return true;
 }
 
 /* Initialize by filling in the hex conversion array.  */
@@ -321,18 +334,18 @@ verilog_write_object_contents (bfd *abfd)
 static void
 verilog_init (void)
 {
-  static bfd_boolean inited = FALSE;
+  static bool inited = false;
 
   if (! inited)
     {
-      inited = TRUE;
+      inited = true;
       hex_init ();
     }
 }
 
 /* Set up the verilog tdata information.  */
 
-static bfd_boolean
+static bool
 verilog_mkobject (bfd *abfd)
 {
   tdata_type *tdata;
@@ -341,13 +354,13 @@ verilog_mkobject (bfd *abfd)
 
   tdata = (tdata_type *) bfd_alloc (abfd, sizeof (tdata_type));
   if (tdata == NULL)
-    return FALSE;
+    return false;
 
   abfd->tdata.verilog_data = tdata;
   tdata->head = NULL;
   tdata->tail = NULL;
 
-  return TRUE;
+  return true;
 }
 
 #define verilog_close_and_cleanup                   _bfd_generic_close_and_cleanup
@@ -392,6 +405,7 @@ const bfd_target verilog_vec =
   ' ',                         /* AR_pad_char.  */
   16,                          /* AR_max_namelen.  */
   0,                           /* match priority.  */
+  TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols.  */
   bfd_getb64, bfd_getb_signed_64, bfd_putb64,
   bfd_getb32, bfd_getb_signed_32, bfd_putb32,
   bfd_getb16, bfd_getb_signed_16, bfd_putb16,  /* Data.  */