* elf-bfd.h (struct elf_backend_data): Add rela_normal.
[deliverable/binutils-gdb.git] / bfd / coff-stgo32.c
index 1868f673c56e55177137f0a44c2015b3e6bbee39..5d867ea40b923e7fb7552934278fcd34126e215c 100644 (file)
@@ -1,5 +1,5 @@
-/* BFD back-end for Intel 386 COFF files (go32 variant with a stub).
-   Copyright 1997, 1998, 1999 Free Software Foundation, Inc.
+/* BFD back-end for Intel 386 COFF files (DJGPP variant with a stub).
+   Copyright 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
    Written by Robert Hoehne.
 
    This file is part of BFD, the Binary File Descriptor library.
    Written by Robert Hoehne.
 
    This file is part of BFD, the Binary File Descriptor library.
 #define COFF_GO32_EXE
 #define COFF_LONG_SECTION_NAMES
 #define COFF_SUPPORT_GNU_LINKONCE
 #define COFF_GO32_EXE
 #define COFF_LONG_SECTION_NAMES
 #define COFF_SUPPORT_GNU_LINKONCE
+#define COFF_LONG_FILENAMES
+
+#define COFF_SECTION_ALIGNMENT_ENTRIES \
+{ COFF_SECTION_NAME_EXACT_MATCH (".data"), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 4 }, \
+{ COFF_SECTION_NAME_EXACT_MATCH (".text"), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 4 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".debug"), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".gnu.linkonce.wi"), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }
 
 #include "bfd.h"
 
 
 #include "bfd.h"
 
@@ -103,59 +114,7 @@ static boolean
 
 /* This macro is used, because I cannot assume the endianess of the
    host system */
 
 /* This macro is used, because I cannot assume the endianess of the
    host system */
-#define _H(index) (bfd_h_get_16(abfd, (bfd_byte *)(header+index*2)))
-
-/* This function checks if the bfd is a stubbed coff image */
-static const bfd_target *
-go32_stubbed_coff_object_p (abfd)
-     bfd *abfd;
-{
-  unsigned char header[10];
-  char magic[8];
-  unsigned long coff_start, exe_start;
-
-  if (bfd_read (&header, 1, sizeof (header), abfd) != sizeof (header))
-    {
-      if (bfd_get_error () != bfd_error_system_call)
-       bfd_set_error (bfd_error_wrong_format);
-      return 0;
-    }
-  if (_H (0) != 0x5a4d)                /* it is not an exe file. maybe a coff-image */
-    {
-      if (bfd_get_error () != bfd_error_system_call)
-       bfd_set_error (bfd_error_wrong_format);
-      return 0;
-    }
-  coff_start = (long) _H (2) * 512L;
-  if (_H (1))
-    coff_start += (long) _H (1) - 512L;
-
-  /* We can handle only a stub with a length of STUBSIZE */
-  if (coff_start != STUBSIZE)
-    {
-      bfd_set_error (bfd_error_wrong_format);
-      return 0;
-    }
-  exe_start = _H (4) * 16;
-  if (bfd_seek (abfd, exe_start, SEEK_SET) != 0)
-    return 0;
-  if (bfd_read (&magic, 1, 8, abfd) != 8)
-    {
-      if (bfd_get_error () != bfd_error_system_call)
-       bfd_set_error (bfd_error_wrong_format);
-      return 0;
-    }
-  if (memcmp (magic, "go32stub", 8) != 0)
-    {
-      bfd_set_error (bfd_error_wrong_format);
-      return 0;
-    }
-  if (bfd_seek (abfd, 0, SEEK_SET) != 0)
-    return 0;
-
-  /* Call the normal COFF detection routine */
-  return coff_object_p (abfd);
-}
+#define _H(index) (H_GET_16 (abfd, (header+index*2)))
 
 /* These bytes are a 2048-byte DOS executable, which loads the COFF
    image into memory and then runs it. It is called 'stub' */
 
 /* These bytes are a 2048-byte DOS executable, which loads the COFF
    image into memory and then runs it. It is called 'stub' */
@@ -190,7 +149,7 @@ adjust_filehdr_in_post  (abfd, src, dst)
   ADJUST_VAL (filehdr_dst->f_symptr, STUBSIZE);
 
   /* Save now the stub to be used later */
   ADJUST_VAL (filehdr_dst->f_symptr, STUBSIZE);
 
   /* Save now the stub to be used later */
-  bfd_coff_go32stub (abfd) = (PTR) bfd_alloc (abfd, STUBSIZE);
+  bfd_coff_go32stub (abfd) = (PTR) bfd_alloc (abfd, (bfd_size_type) STUBSIZE);
 
   /* Since this function returns no status, I do not set here
      any bfd_error_...
 
   /* Since this function returns no status, I do not set here
      any bfd_error_...
@@ -353,7 +312,8 @@ create_go32_stub (abfd)
       int f;
       unsigned char header[10];
       char magic[8];
       int f;
       unsigned char header[10];
       char magic[8];
-      unsigned long coff_start, exe_start;
+      unsigned long coff_start;
+      long exe_start;
 
       /* Check at first the environment variable $(GO32STUB) */
       stub = getenv ("GO32STUB");
 
       /* Check at first the environment variable $(GO32STUB) */
       stub = getenv ("GO32STUB");
@@ -395,7 +355,7 @@ create_go32_stub (abfd)
          goto stub_end;
        }
       exe_start = _H (4) * 16;
          goto stub_end;
        }
       exe_start = _H (4) * 16;
-      if ((unsigned long) lseek (f, exe_start, SEEK_SET) != exe_start)
+      if ((long) lseek (f, exe_start, SEEK_SET) != exe_start)
        {
          close (f);
          goto stub_end;
        {
          close (f);
          goto stub_end;
@@ -411,7 +371,8 @@ create_go32_stub (abfd)
          goto stub_end;
        }
       /* Now we found a correct stub (hopefully) */
          goto stub_end;
        }
       /* Now we found a correct stub (hopefully) */
-      bfd_coff_go32stub (abfd) = (PTR) bfd_alloc (abfd, coff_start);
+      bfd_coff_go32stub (abfd)
+       = (PTR) bfd_alloc (abfd, (bfd_size_type) coff_start);
       if (bfd_coff_go32stub (abfd) == NULL)
        {
          close (f);
       if (bfd_coff_go32stub (abfd) == NULL)
        {
          close (f);
@@ -431,7 +392,8 @@ stub_end:
      stub */
   if (bfd_coff_go32stub (abfd) == NULL)
     {
      stub */
   if (bfd_coff_go32stub (abfd) == NULL)
     {
-      bfd_coff_go32stub (abfd) = (PTR) bfd_alloc (abfd, STUBSIZE);
+      bfd_coff_go32stub (abfd)
+       = (PTR) bfd_alloc (abfd, (bfd_size_type) STUBSIZE);
       if (bfd_coff_go32stub (abfd) == NULL)
        {
          return;
       if (bfd_coff_go32stub (abfd) == NULL)
        {
          return;
This page took 0.024861 seconds and 4 git commands to generate.