Implement a new BFD API function: bfd_is_target_special_symbol. Use this in nm
[deliverable/binutils-gdb.git] / bfd / tekhex.c
index 565568a27b4bd3c54a1ffaea34b7796ca7f41fc5..df1dab5f125faf80e14d7a2786e77d5ac832d079 100644 (file)
@@ -1,6 +1,6 @@
 /* BFD backend for Extended Tektronix Hex Format  objects.
-   Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002
-   Free Software Foundation, Inc.
+   Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002,
+   2003, 2004 Free Software Foundation, Inc.
    Written by Steve Chamberlain of Cygnus Support <sac@cygnus.com>.
 
 This file is part of BFD, the Binary File Descriptor library.
@@ -29,7 +29,7 @@ DESCRIPTION
        relocations. Their main application is communication with
        devices like PROM programmers and ICE equipment.
 
-       It seems that the sections are descibed as being really big,
+       It seems that the sections are described as being really big,
         the example I have says that the text section is 0..ffffffff.
        BFD would barf with this, many apps would try to alloc 4GB to
        read in the file.
@@ -104,23 +104,23 @@ static void tekhex_print_symbol
  PARAMS ((bfd *, PTR, asymbol *, bfd_print_symbol_type));
 static void tekhex_get_symbol_info PARAMS ((bfd *, asymbol *, symbol_info *));
 static asymbol *tekhex_make_empty_symbol PARAMS ((bfd *));
-static int tekhex_sizeof_headers PARAMS ((bfd *, boolean));
-static boolean tekhex_write_object_contents PARAMS ((bfd *));
+static int tekhex_sizeof_headers PARAMS ((bfd *, bfd_boolean));
+static bfd_boolean tekhex_write_object_contents PARAMS ((bfd *));
 static void out PARAMS ((bfd *, int, char *, char *));
 static void writesym PARAMS ((char **, const char *));
 static void writevalue PARAMS ((char **, bfd_vma));
-static boolean tekhex_set_section_contents
- PARAMS ((bfd*, sec_ptr, PTR, file_ptr, bfd_size_type));
-static boolean tekhex_set_arch_mach
+static bfd_boolean tekhex_set_section_contents
+ PARAMS ((bfd*, sec_ptr, const PTR, file_ptr, bfd_size_type));
+static bfd_boolean tekhex_set_arch_mach
  PARAMS ((bfd *, enum bfd_architecture, unsigned long));
-static boolean tekhex_get_section_contents
+static bfd_boolean tekhex_get_section_contents
  PARAMS ((bfd *, asection *, PTR, file_ptr, bfd_size_type));
 static void move_section_contents
- PARAMS ((bfd *, asection *, PTR, file_ptr, bfd_size_type, boolean));
+ PARAMS ((bfd *, asection *, const PTR, file_ptr, bfd_size_type, bfd_boolean));
 static const bfd_target *tekhex_object_p PARAMS ((bfd *));
-static boolean tekhex_mkobject PARAMS ((bfd *));
+static bfd_boolean tekhex_mkobject PARAMS ((bfd *));
 static long tekhex_get_symtab_upper_bound PARAMS ((bfd *));
-static long tekhex_get_symtab PARAMS ((bfd *, asymbol **));
+static long tekhex_canonicalize_symtab PARAMS ((bfd *, asymbol **));
 static void pass_over PARAMS ((bfd *, void (*) (bfd*, int, char *)));
 static void first_phase PARAMS ((bfd *, int, char *));
 static void insert_byte PARAMS ((bfd *, int, bfd_vma));
@@ -239,12 +239,12 @@ static void
 tekhex_init ()
 {
   unsigned int i;
-  static boolean inited = false;
+  static bfd_boolean inited = FALSE;
   int val;
 
-  if (inited == false)
+  if (! inited)
     {
-      inited = true;
+      inited = TRUE;
       hex_init ();
       val = 0;
       for (i = 0; i < 10; i++)
@@ -354,17 +354,13 @@ find_chunk (abfd, vma)
     }
   if (!d)
     {
-      char *sname = bfd_alloc (abfd, (bfd_size_type) 12);
-
       /* No chunk for this address, so make one up */
       d = ((struct data_struct *)
-          bfd_alloc (abfd, (bfd_size_type) sizeof (struct data_struct)));
+          bfd_zalloc (abfd, (bfd_size_type) sizeof (struct data_struct)));
 
-      if (!sname || !d)
+      if (!d)
        return NULL;
 
-      memset (d->chunk_init, 0, CHUNK_MASK + 1);
-      memset (d->chunk_data, 0, CHUNK_MASK + 1);
       d->next = abfd->tdata.tekhex_data->data;
       d->vma = vma;
       abfd->tdata.tekhex_data->data = d;
@@ -433,7 +429,7 @@ first_phase (abfd, type, src)
            case '1':           /* section range */
              src++;
              section->vma = getvalue (&src);
-             section->_raw_size = getvalue (&src) - section->vma;
+             section->size = getvalue (&src) - section->vma;
              section->flags = SEC_HAS_CONTENTS | SEC_LOAD | SEC_ALLOC;
              break;
            case '0':
@@ -475,7 +471,7 @@ first_phase (abfd, type, src)
     }
 }
 
-/* Pass over an tekhex, calling one of the above functions on each
+/* Pass over a tekhex, calling one of the above functions on each
    record.  */
 
 static void
@@ -484,22 +480,22 @@ pass_over (abfd, func)
      void (*func) PARAMS ((bfd *, int, char *));
 {
   unsigned int chars_on_line;
-  boolean eof = false;
+  bfd_boolean eof = FALSE;
 
   /* To the front of the file */
   if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0)
     abort ();
-  while (eof == false)
+  while (! eof)
     {
       char buffer[MAXCHUNK];
       char *src = buffer;
       char type;
 
       /* Find first '%' */
-      eof = (boolean) (bfd_bread (src, (bfd_size_type) 1, abfd) != 1);
+      eof = (bfd_boolean) (bfd_bread (src, (bfd_size_type) 1, abfd) != 1);
       while (*src != '%' && !eof)
        {
-         eof = (boolean) (bfd_bread (src, (bfd_size_type) 1, abfd) != 1);
+         eof = (bfd_boolean) (bfd_bread (src, (bfd_size_type) 1, abfd) != 1);
        }
       if (eof)
        break;
@@ -526,7 +522,7 @@ pass_over (abfd, func)
 }
 
 static long
-tekhex_get_symtab (abfd, table)
+tekhex_canonicalize_symtab (abfd, table)
      bfd *abfd;
      asymbol **table;
 {
@@ -551,7 +547,7 @@ tekhex_get_symtab_upper_bound (abfd)
 
 }
 
-static boolean
+static bfd_boolean
 tekhex_mkobject (abfd)
      bfd *abfd;
 {
@@ -559,17 +555,17 @@ tekhex_mkobject (abfd)
 
   tdata = (tdata_type *) bfd_alloc (abfd, (bfd_size_type) sizeof (tdata_type));
   if (!tdata)
-    return false;
+    return FALSE;
   abfd->tdata.tekhex_data = tdata;
   tdata->type = 1;
   tdata->head = (tekhex_data_list_type *) NULL;
   tdata->symbols = (struct tekhex_symbol_struct *) NULL;
   tdata->data = (struct data_struct *) NULL;
-  return true;
+  return TRUE;
 }
 
 /*
-  Return true if the file looks like it's in TekHex format. Just look
+  Return TRUE if the file looks like it's in TekHex format. Just look
   for a percent sign and some hex digits */
 
 static const bfd_target *
@@ -597,10 +593,10 @@ static void
 move_section_contents (abfd, section, locationp, offset, count, get)
      bfd *abfd;
      asection *section;
-     PTR locationp;
+     const PTR locationp;
      file_ptr offset;
      bfd_size_type count;
-     boolean get;
+     bfd_boolean get;
 {
   bfd_vma addr;
   char *location = (char *) locationp;
@@ -643,7 +639,7 @@ move_section_contents (abfd, section, locationp, offset, count, get)
 
 }
 
-static boolean
+static bfd_boolean
 tekhex_get_section_contents (abfd, section, locationp, offset, count)
      bfd *abfd;
      asection *section;
@@ -653,14 +649,14 @@ tekhex_get_section_contents (abfd, section, locationp, offset, count)
 {
   if (section->flags & (SEC_LOAD | SEC_ALLOC))
     {
-      move_section_contents (abfd, section, locationp, offset, count, true);
-      return true;
+      move_section_contents (abfd, section, locationp, offset, count, TRUE);
+      return TRUE;
     }
   else
-    return false;
+    return FALSE;
 }
 
-static boolean
+static bfd_boolean
 tekhex_set_arch_mach (abfd, arch, machine)
      bfd *abfd;
      enum bfd_architecture arch;
@@ -672,16 +668,16 @@ tekhex_set_arch_mach (abfd, arch, machine)
 /* we have to save up all the Tekhexords for a splurge before output,
     */
 
-static boolean
+static bfd_boolean
 tekhex_set_section_contents (abfd, section, locationp, offset, bytes_to_do)
      bfd *abfd;
      sec_ptr section;
-     PTR locationp;
+     const PTR locationp;
      file_ptr offset;
      bfd_size_type bytes_to_do;
 {
 
-  if (abfd->output_has_begun == false)
+  if (! abfd->output_has_begun)
     {
       /* The first time around, allocate enough sections to hold all the chunks */
       asection *s = abfd->sections;
@@ -692,7 +688,7 @@ tekhex_set_section_contents (abfd, section, locationp, offset, bytes_to_do)
          if (s->flags & SEC_LOAD)
            {
              for (vma = s->vma & ~(bfd_vma) CHUNK_MASK;
-                  vma < s->vma + s->_raw_size;
+                  vma < s->vma + s->size;
                   vma += CHUNK_MASK)
                find_chunk (abfd, vma);
            }
@@ -702,11 +698,11 @@ tekhex_set_section_contents (abfd, section, locationp, offset, bytes_to_do)
   if (section->flags & (SEC_LOAD | SEC_ALLOC))
     {
       move_section_contents (abfd, section, locationp, offset, bytes_to_do,
-                            false);
-      return true;
+                            FALSE);
+      return TRUE;
     }
   else
-    return false;
+    return FALSE;
 
 }
 
@@ -808,7 +804,7 @@ out (abfd, type, start, end)
     abort ();
 }
 
-static boolean
+static bfd_boolean
 tekhex_write_object_contents (abfd)
      bfd *abfd;
 {
@@ -866,7 +862,7 @@ tekhex_write_object_contents (abfd)
       writesym (&dst, s->name);
       *dst++ = '1';
       writevalue (&dst, s->vma);
-      writevalue (&dst, s->vma + s->_raw_size);
+      writevalue (&dst, s->vma + s->size);
       out (abfd, '3', buffer, dst);
     }
 
@@ -911,7 +907,7 @@ tekhex_write_object_contents (abfd)
                case 'C':
                case 'U':
                  bfd_set_error (bfd_error_wrong_format);
-                 return false;
+                 return FALSE;
                }
 
              writesym (&dst, sym->name);
@@ -924,13 +920,13 @@ tekhex_write_object_contents (abfd)
   /* And the terminator */
   if (bfd_bwrite ("%0781010\n", (bfd_size_type) 9, abfd) != 9)
     abort ();
-  return true;
+  return TRUE;
 }
 
 static int
 tekhex_sizeof_headers (abfd, exec)
      bfd *abfd ATTRIBUTE_UNUSED;
-     boolean exec ATTRIBUTE_UNUSED;
+     bfd_boolean exec ATTRIBUTE_UNUSED;
 
 {
   return 0;
@@ -993,6 +989,7 @@ tekhex_print_symbol (abfd, filep, symbol, how)
 #define tekhex_bfd_free_cached_info _bfd_generic_bfd_free_cached_info
 #define tekhex_new_section_hook _bfd_generic_new_section_hook
 
+#define tekhex_bfd_is_target_special_symbol ((bfd_boolean (*) (bfd *, asymbol *)) bfd_false)
 #define tekhex_bfd_is_local_label_name bfd_generic_is_local_label_name
 #define tekhex_get_lineno _bfd_nosymbols_get_lineno
 #define tekhex_find_nearest_line _bfd_nosymbols_find_nearest_line
@@ -1005,9 +1002,14 @@ tekhex_print_symbol (abfd, filep, symbol, how)
 #define tekhex_bfd_relax_section bfd_generic_relax_section
 #define tekhex_bfd_gc_sections bfd_generic_gc_sections
 #define tekhex_bfd_merge_sections bfd_generic_merge_sections
+#define tekhex_bfd_is_group_section bfd_generic_is_group_section
+#define tekhex_bfd_discard_group bfd_generic_discard_group
+#define tekhex_section_already_linked \
+  _bfd_generic_section_already_linked
 #define tekhex_bfd_link_hash_table_create _bfd_generic_link_hash_table_create
 #define tekhex_bfd_link_hash_table_free _bfd_generic_link_hash_table_free
 #define tekhex_bfd_link_add_symbols _bfd_generic_link_add_symbols
+#define tekhex_bfd_link_just_syms _bfd_generic_link_just_syms
 #define tekhex_bfd_final_link _bfd_generic_final_link
 #define tekhex_bfd_link_split_section _bfd_generic_link_split_section
 
This page took 0.030165 seconds and 4 git commands to generate.