* mh-apollo68: remove unused HDEFINES setting.
[deliverable/binutils-gdb.git] / bfd / coff-stgo32.c
index f1d38ba801a8d6f660be0aaf799b50dd7f2c9a10..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.
 #define TARGET_NAME            "coff-go32-exe"
 #define TARGET_UNDERSCORE      '_'
 #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"
 
@@ -101,59 +114,7 @@ static boolean
 
 /* 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' */
@@ -188,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 */
-  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_...
@@ -351,7 +312,8 @@ create_go32_stub (abfd)
       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");
@@ -393,7 +355,7 @@ create_go32_stub (abfd)
          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;
@@ -409,7 +371,8 @@ create_go32_stub (abfd)
          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);
@@ -429,7 +392,8 @@ stub_end:
      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;
This page took 0.025334 seconds and 4 git commands to generate.