Add support for --disassembler-options=force-thumb
[deliverable/binutils-gdb.git] / bfd / versados.c
index 9e5bea437a8e77bbaddc8be38f55954a110d8c4f..27f4f882088a4cc982dbe46da8cf9cc16045bf8d 100644 (file)
@@ -1,10 +1,9 @@
 /* BFD back-end for VERSAdos-E objects.
+   Copyright 1995, 96, 97, 98, 1999 Free Software Foundation, Inc.
+   Written by Steve Chamberlain of Cygnus Support <sac@cygnus.com>.
 
    Versados is a Motorola trademark.
 
-   Copyright 1995 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.
 
    This program is free software; you can redistribute it and/or modify
@@ -551,6 +550,9 @@ versados_scan (abfd)
 
   VDATA (abfd)->strings = bfd_alloc (abfd, VDATA (abfd)->stringlen);
 
+  if ((VDATA (abfd)->symbols == NULL && abfd->symcount > 0)
+      || (VDATA (abfd)->strings == NULL && VDATA (abfd)->stringlen > 0))
+    return false;
 
   /* Actually fill in the section symbols,
      we stick them at the end of the table */
@@ -593,20 +595,34 @@ versados_object_p (abfd)
   struct ext_vheader ext;
   unsigned char len;
 
-  if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET))
+  if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0)
     return NULL;
 
+  if (bfd_read (&len, 1, 1, abfd) != 1)
+    {
+      if (bfd_get_error () != bfd_error_system_call)
+       bfd_set_error (bfd_error_wrong_format);
+      return NULL;
+    }
 
-  bfd_read (&len, 1, 1, abfd);
-  if (bfd_read (&ext.type, 1, len, abfd) != len
-      || ext.type != '1')
+  if (bfd_read (&ext.type, 1, len, abfd) != len)
+    {
+      if (bfd_get_error () != bfd_error_system_call)
+       bfd_set_error (bfd_error_wrong_format);
+      return NULL;
+    }
+
+  /* We guess that the language field will never be larger than 10.
+     In sample files, it is always either 0 or 1.  Checking for this
+     prevents confusion with Intel Hex files.  */
+  if (ext.type != VHEADER
+      || ext.lang > 10)
     {
       bfd_set_error (bfd_error_wrong_format);
       return NULL;
     }
 
-  /* ok, looks like a record, build the tdata and read 
-     in.. */
+  /* OK, looks like a record, build the tdata and read in.  */
 
   if (!versados_mkobject (abfd)
       || !versados_scan (abfd))
@@ -674,11 +690,11 @@ versados_get_section_contents (abfd, section, location, offset, count)
 
 static boolean
 versados_set_section_contents (abfd, section, location, offset, bytes_to_do)
-     bfd *abfd;
-     sec_ptr section;
-     PTR location;
-     file_ptr offset;
-     bfd_size_type bytes_to_do;
+     bfd *abfd ATTRIBUTE_UNUSED;
+     sec_ptr section ATTRIBUTE_UNUSED;
+     PTR location ATTRIBUTE_UNUSED;
+     file_ptr offset ATTRIBUTE_UNUSED;
+     bfd_size_type bytes_to_do ATTRIBUTE_UNUSED;
 {
   return false;
 }
@@ -687,8 +703,8 @@ versados_set_section_contents (abfd, section, location, offset, bytes_to_do)
 /*ARGSUSED */
 static int
 versados_sizeof_headers (abfd, exec)
-     bfd *abfd;
-     boolean exec;
+     bfd *abfd ATTRIBUTE_UNUSED;
+     boolean exec ATTRIBUTE_UNUSED;
 {
   return 0;
 }
@@ -740,7 +756,7 @@ versados_get_symtab (abfd, alocation)
 /*ARGSUSED */
 void
 versados_get_symbol_info (ignore_abfd, symbol, ret)
-     bfd *ignore_abfd;
+     bfd *ignore_abfd ATTRIBUTE_UNUSED;
      asymbol *symbol;
      symbol_info *ret;
 {
@@ -750,7 +766,7 @@ versados_get_symbol_info (ignore_abfd, symbol, ret)
 /*ARGSUSED */
 void
 versados_print_symbol (ignore_abfd, afile, symbol, how)
-     bfd *ignore_abfd;
+     bfd *ignore_abfd ATTRIBUTE_UNUSED;
      PTR afile;
      asymbol *symbol;
      bfd_print_symbol_type how;
@@ -772,7 +788,7 @@ versados_print_symbol (ignore_abfd, afile, symbol, how)
 
 long
 versados_get_reloc_upper_bound (abfd, asect)
-     bfd *abfd;
+     bfd *abfd ATTRIBUTE_UNUSED;
      sec_ptr asect;
 {
   return (asect->reloc_count + 1) * sizeof (arelent *);
@@ -833,7 +849,7 @@ versados_canonicalize_reloc (abfd, section, relptr, symbols)
 #define versados_bfd_free_cached_info _bfd_generic_bfd_free_cached_info
 #define versados_new_section_hook _bfd_generic_new_section_hook
 
-#define versados_bfd_is_local_label bfd_generic_is_local_label
+#define versados_bfd_is_local_label_name bfd_generic_is_local_label_name
 #define versados_get_lineno _bfd_nosymbols_get_lineno
 #define versados_find_nearest_line _bfd_nosymbols_find_nearest_line
 #define versados_bfd_make_debug_symbol _bfd_nosymbols_bfd_make_debug_symbol
@@ -847,6 +863,7 @@ versados_canonicalize_reloc (abfd, section, relptr, symbols)
 #define versados_bfd_get_relocated_section_contents \
   bfd_generic_get_relocated_section_contents
 #define versados_bfd_relax_section bfd_generic_relax_section
+#define versados_bfd_gc_sections bfd_generic_gc_sections
 #define versados_bfd_link_hash_table_create _bfd_generic_link_hash_table_create
 #define versados_bfd_link_add_symbols _bfd_generic_link_add_symbols
 #define versados_bfd_final_link _bfd_generic_final_link
@@ -856,8 +873,8 @@ const bfd_target versados_vec =
 {
   "versados",                  /* name */
   bfd_target_versados_flavour,
-  true,                                /* target byte order */
-  true,                                /* target headers byte order */
+  BFD_ENDIAN_BIG,              /* target byte order */
+  BFD_ENDIAN_BIG,              /* target headers byte order */
   (HAS_RELOC | EXEC_P |                /* object flags */
    HAS_LINENO | HAS_DEBUG |
    HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED),
@@ -902,5 +919,7 @@ const bfd_target versados_vec =
   BFD_JUMP_TABLE_LINK (versados),
   BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
 
+  NULL,
+  
   (PTR) 0
 };
This page took 0.025491 seconds and 4 git commands to generate.