Warn if GOT16 overflows.
[deliverable/binutils-gdb.git] / bfd / i386lynx.c
index fde6ad37dfea79be74a5e4eafa841c1f02fe50f8..7ed7c7e3b7e5ad5e0255f57a979d3f06c8993727 100644 (file)
@@ -50,22 +50,32 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
                           obj_reloc_entry_size (abfd));                      \
        NAME(aout,swap_exec_header_out) (abfd, execp, &exec_bytes);           \
                                                                              \
-       bfd_seek (abfd, (file_ptr) 0, SEEK_SET);                              \
-       bfd_write ((PTR) &exec_bytes, 1, EXEC_BYTES_SIZE, abfd);              \
+       if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0) return false;       \
+       if (bfd_write ((PTR) &exec_bytes, 1, EXEC_BYTES_SIZE, abfd)           \
+           != EXEC_BYTES_SIZE)                                               \
+         return false;                                                       \
        /* Now write out reloc info, followed by syms and strings */          \
                                                                              \
        if (bfd_get_symcount (abfd) != 0)                                     \
            {                                                                 \
-             bfd_seek (abfd, (file_ptr)(N_SYMOFF(*execp)), SEEK_SET);        \
+             if (bfd_seek (abfd, (file_ptr)(N_SYMOFF(*execp)), SEEK_SET)     \
+                 != 0)                                                       \
+               return false;                                                 \
                                                                              \
              if (! NAME(aout,write_syms)(abfd)) return false;                \
                                                                              \
-             bfd_seek (abfd, (file_ptr)(N_TRELOFF(*execp)), SEEK_SET);       \
+             if (bfd_seek (abfd, (file_ptr)(N_TRELOFF(*execp)), SEEK_SET)    \
+                 != 0)                                                       \
+               return false;                                                 \
                                                                              \
-             if (!NAME(lynx,squirt_out_relocs) (abfd, obj_textsec (abfd))) return false; \
-             bfd_seek (abfd, (file_ptr)(N_DRELOFF(*execp)), SEEK_SET);       \
+             if (!NAME(lynx,squirt_out_relocs) (abfd, obj_textsec (abfd)))   \
+               return false;                                                 \
+             if (bfd_seek (abfd, (file_ptr)(N_DRELOFF(*execp)), SEEK_SET)    \
+                 != 0)                                                       \
+               return 0;                                                     \
                                                                              \
-             if (!NAME(lynx,squirt_out_relocs)(abfd, obj_datasec (abfd))) return false; \
+             if (!NAME(lynx,squirt_out_relocs)(abfd, obj_datasec (abfd)))    \
+               return false;                                                 \
            }                                                                 \
       }
 #endif
@@ -78,7 +88,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 char *lynx_core_file_failing_command ();
 int lynx_core_file_failing_signal ();
 boolean lynx_core_file_matches_executable_p ();
-bfd_target *lynx_core_file_p ();
+const bfd_target *lynx_core_file_p ();
 
 #define        MY_core_file_failing_command lynx_core_file_failing_command
 #define        MY_core_file_failing_signal lynx_core_file_failing_signal
@@ -97,7 +107,7 @@ extern reloc_howto_type aout_32_std_howto_table[];
 /* Output standard relocation information to a file in target byte order. */
 
 void
-NAME (lynx, swap_std_reloc_out) (abfd, g, natptr)
+NAME(lynx,swap_std_reloc_out) (abfd, g, natptr)
      bfd *abfd;
      arelent *g;
      struct reloc_std_external *natptr;
@@ -193,7 +203,7 @@ NAME (lynx, swap_std_reloc_out) (abfd, g, natptr)
 /* Output extended relocation information to a file in target byte order. */
 
 void
-NAME (lynx, swap_ext_reloc_out) (abfd, g, natptr)
+NAME(lynx,swap_ext_reloc_out) (abfd, g, natptr)
      bfd *abfd;
      arelent *g;
      register struct reloc_ext_external *natptr;
@@ -311,7 +321,7 @@ NAME (lynx, swap_ext_reloc_out) (abfd, g, natptr)
   }                                                                    \
 
 void
-NAME (lynx, swap_ext_reloc_in) (abfd, bytes, cache_ptr, symbols)
+NAME(lynx,swap_ext_reloc_in) (abfd, bytes, cache_ptr, symbols)
      bfd *abfd;
      struct reloc_ext_external *bytes;
      arelent *cache_ptr;
@@ -334,7 +344,7 @@ NAME (lynx, swap_ext_reloc_in) (abfd, bytes, cache_ptr, symbols)
 }
 
 void
-NAME (lynx, swap_std_reloc_in) (abfd, bytes, cache_ptr, symbols)
+NAME(lynx,swap_std_reloc_in) (abfd, bytes, cache_ptr, symbols)
      bfd *abfd;
      struct reloc_std_external *bytes;
      arelent *cache_ptr;
@@ -367,7 +377,7 @@ NAME (lynx, swap_std_reloc_in) (abfd, bytes, cache_ptr, symbols)
 /* Reloc hackery */
 
 boolean
-NAME (lynx, slurp_reloc_table) (abfd, asect, symbols)
+NAME(lynx,slurp_reloc_table) (abfd, asect, symbols)
      bfd *abfd;
      sec_ptr asect;
      asymbol **symbols;
@@ -400,32 +410,33 @@ NAME (lynx, slurp_reloc_table) (abfd, asect, symbols)
   return false;
 
 doit:
-  bfd_seek (abfd, asect->rel_filepos, SEEK_SET);
+  if (bfd_seek (abfd, asect->rel_filepos, SEEK_SET) != 0)
+    return false;
   each_size = obj_reloc_entry_size (abfd);
 
   count = reloc_size / each_size;
 
 
-  reloc_cache = (arelent *) bfd_zalloc (abfd, (size_t) (count * sizeof
-                                                       (arelent)));
-  if (!reloc_cache)
+  reloc_cache = (arelent *) malloc (count * sizeof (arelent));
+  if (!reloc_cache && count != 0)
     {
     nomem:
       bfd_set_error (bfd_error_no_memory);
       return false;
     }
+  memset (reloc_cache, 0, count * sizeof (arelent));
 
   relocs = (PTR) bfd_alloc (abfd, reloc_size);
-  if (!relocs)
+  if (!relocs && reloc_size != 0)
     {
-      bfd_release (abfd, reloc_cache);
+      free (reloc_cache);
       goto nomem;
     }
 
   if (bfd_read (relocs, 1, reloc_size, abfd) != reloc_size)
     {
       bfd_release (abfd, relocs);
-      bfd_release (abfd, reloc_cache);
+      free (reloc_cache);
       return false;
     }
 
@@ -437,7 +448,7 @@ doit:
 
       for (; counter < count; counter++, rptr++, cache_ptr++)
        {
-         NAME (lynx, swap_ext_reloc_in) (abfd, rptr, cache_ptr, symbols);
+         NAME(lynx,swap_ext_reloc_in) (abfd, rptr, cache_ptr, symbols);
        }
     }
   else
@@ -448,7 +459,7 @@ doit:
 
       for (; counter < count; counter++, rptr++, cache_ptr++)
        {
-         NAME (lynx, swap_std_reloc_in) (abfd, rptr, cache_ptr, symbols);
+         NAME(lynx,swap_std_reloc_in) (abfd, rptr, cache_ptr, symbols);
        }
 
     }
@@ -464,7 +475,7 @@ doit:
 /* Write out a relocation section into an object file.  */
 
 boolean
-NAME (lynx, squirt_out_relocs) (abfd, section)
+NAME(lynx,squirt_out_relocs) (abfd, section)
      bfd *abfd;
      asection *section;
 {
@@ -494,14 +505,14 @@ NAME (lynx, squirt_out_relocs) (abfd, section)
       for (natptr = native;
           count != 0;
           --count, natptr += each_size, ++generic)
-       NAME (lynx, swap_ext_reloc_out) (abfd, *generic, (struct reloc_ext_external *) natptr);
+       NAME(lynx,swap_ext_reloc_out) (abfd, *generic, (struct reloc_ext_external *) natptr);
     }
   else
     {
       for (natptr = native;
           count != 0;
           --count, natptr += each_size, ++generic)
-       NAME (lynx, swap_std_reloc_out) (abfd, *generic, (struct reloc_std_external *) natptr);
+       NAME(lynx,swap_std_reloc_out) (abfd, *generic, (struct reloc_std_external *) natptr);
     }
 
   if (bfd_write ((PTR) native, 1, natsize, abfd) != natsize)
@@ -525,7 +536,7 @@ NAME(lynx,canonicalize_reloc) (abfd, section, relptr, symbols)
   arelent *tblptr = section->relocation;
   unsigned int count;
 
-  if (!(tblptr || NAME (lynx, slurp_reloc_table) (abfd, section, symbols)))
+  if (!(tblptr || NAME(lynx,slurp_reloc_table) (abfd, section, symbols)))
     return -1;
 
   if (section->flags & SEC_CONSTRUCTOR)
@@ -540,8 +551,6 @@ NAME(lynx,canonicalize_reloc) (abfd, section, relptr, symbols)
   else
     {
       tblptr = section->relocation;
-      if (!tblptr)
-       return -1;
 
       for (count = 0; count++ < section->reloc_count;)
        {
This page took 0.027432 seconds and 4 git commands to generate.