Do not insert non-BookE32 instructions into the hash table if the target cpu
[deliverable/binutils-gdb.git] / bfd / coff-stgo32.c
index 7a0630d744be9948e6581834161fea69054d67eb..5d867ea40b923e7fb7552934278fcd34126e215c 100644 (file)
@@ -1,5 +1,5 @@
-/* BFD back-end for Intel 386 COFF files (go32 variant with a stub).
-   Copyright 1997 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 TARGET_NAME            "coff-go32-exe"
 #define TARGET_UNDERSCORE      '_'
 #define COFF_GO32_EXE
 #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"
 
 
 #include "bfd.h"
 
@@ -101,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' */
@@ -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 */
   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_...
@@ -223,9 +184,9 @@ adjust_filehdr_out_pre  (abfd, in, out)
 
 static void
 adjust_filehdr_out_post  (abfd, in, out)
 
 static void
 adjust_filehdr_out_post  (abfd, in, out)
-     bfd *abfd;
+     bfd *abfd ATTRIBUTE_UNUSED;
      PTR in;
      PTR in;
-     PTR out;
+     PTR out ATTRIBUTE_UNUSED;
 {
   struct internal_filehdr *filehdr_in = (struct internal_filehdr *) in;
   /* undo the above change */
 {
   struct internal_filehdr *filehdr_in = (struct internal_filehdr *) in;
   /* undo the above change */
@@ -234,8 +195,8 @@ adjust_filehdr_out_post  (abfd, in, out)
 
 static void
 adjust_scnhdr_in_post  (abfd, ext, in)
 
 static void
 adjust_scnhdr_in_post  (abfd, ext, in)
-     bfd *abfd;
-     PTR ext;
+     bfd *abfd ATTRIBUTE_UNUSED;
+     PTR ext ATTRIBUTE_UNUSED;
      PTR in;
 {
   struct internal_scnhdr *scnhdr_int = (struct internal_scnhdr *) in;
      PTR in;
 {
   struct internal_scnhdr *scnhdr_int = (struct internal_scnhdr *) in;
@@ -247,9 +208,9 @@ adjust_scnhdr_in_post  (abfd, ext, in)
 
 static void
 adjust_scnhdr_out_pre  (abfd, in, out)
 
 static void
 adjust_scnhdr_out_pre  (abfd, in, out)
-     bfd *abfd;
+     bfd *abfd ATTRIBUTE_UNUSED;
      PTR in;
      PTR in;
-     PTR out;
+     PTR out ATTRIBUTE_UNUSED;
 {
   struct internal_scnhdr *scnhdr_int = (struct internal_scnhdr *) in;
 
 {
   struct internal_scnhdr *scnhdr_int = (struct internal_scnhdr *) in;
 
@@ -260,9 +221,9 @@ adjust_scnhdr_out_pre  (abfd, in, out)
 
 static void
 adjust_scnhdr_out_post (abfd, in, out)
 
 static void
 adjust_scnhdr_out_post (abfd, in, out)
-     bfd *abfd;
+     bfd *abfd ATTRIBUTE_UNUSED;
      PTR in;
      PTR in;
-     PTR out;
+     PTR out ATTRIBUTE_UNUSED;
 {
   struct internal_scnhdr *scnhdr_int = (struct internal_scnhdr *) in;
 
 {
   struct internal_scnhdr *scnhdr_int = (struct internal_scnhdr *) in;
 
@@ -273,12 +234,12 @@ adjust_scnhdr_out_post (abfd, in, out)
 
 static void
 adjust_aux_in_post  (abfd, ext1, type, class, indx, numaux, in1)
 
 static void
 adjust_aux_in_post  (abfd, ext1, type, class, indx, numaux, in1)
-     bfd *abfd;
-     PTR ext1;
+     bfd *abfd ATTRIBUTE_UNUSED;
+     PTR ext1 ATTRIBUTE_UNUSED;
      int type;
      int class;
      int type;
      int class;
-     int indx;
-     int numaux;
+     int indx ATTRIBUTE_UNUSED;
+     int numaux ATTRIBUTE_UNUSED;
      PTR in1;
 {
   union internal_auxent *in = (union internal_auxent *) in1;
      PTR in1;
 {
   union internal_auxent *in = (union internal_auxent *) in1;
@@ -291,13 +252,13 @@ adjust_aux_in_post  (abfd, ext1, type, class, indx, numaux, in1)
 
 static void
 adjust_aux_out_pre  (abfd, inp, type, class, indx, numaux, extp)
 
 static void
 adjust_aux_out_pre  (abfd, inp, type, class, indx, numaux, extp)
-     bfd *abfd;
+     bfd *abfd ATTRIBUTE_UNUSED;
      PTR inp;
      int type;
      int class;
      PTR inp;
      int type;
      int class;
-     int indx;
-     int numaux;
-     PTR extp;
+     int indx ATTRIBUTE_UNUSED;
+     int numaux ATTRIBUTE_UNUSED;
+     PTR extp ATTRIBUTE_UNUSED;
 {
   union internal_auxent *in = (union internal_auxent *) inp;
 
 {
   union internal_auxent *in = (union internal_auxent *) inp;
 
@@ -309,13 +270,13 @@ adjust_aux_out_pre  (abfd, inp, type, class, indx, numaux, extp)
 
 static void
 adjust_aux_out_post (abfd, inp, type, class, indx, numaux, extp)
 
 static void
 adjust_aux_out_post (abfd, inp, type, class, indx, numaux, extp)
-     bfd *abfd;
+     bfd *abfd ATTRIBUTE_UNUSED;
      PTR inp;
      int type;
      int class;
      PTR inp;
      int type;
      int class;
-     int indx;
-     int numaux;
-     PTR extp;
+     int indx ATTRIBUTE_UNUSED;
+     int numaux ATTRIBUTE_UNUSED;
+     PTR extp ATTRIBUTE_UNUSED;
 {
   union internal_auxent *in = (union internal_auxent *) inp;
 
 {
   union internal_auxent *in = (union internal_auxent *) inp;
 
@@ -351,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");
@@ -393,7 +355,7 @@ create_go32_stub (abfd)
          goto stub_end;
        }
       exe_start = _H (4) * 16;
          goto stub_end;
        }
       exe_start = _H (4) * 16;
-      if (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;
@@ -409,14 +371,16 @@ 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);
          return;
        }
       lseek (f, 0L, SEEK_SET);
       if (bfd_coff_go32stub (abfd) == NULL)
        {
          close (f);
          return;
        }
       lseek (f, 0L, SEEK_SET);
-      if (read (f, bfd_coff_go32stub (abfd), coff_start) != coff_start)
+      if ((unsigned long) read (f, bfd_coff_go32stub (abfd), coff_start)
+         != coff_start)
        {
          bfd_release (abfd, bfd_coff_go32stub (abfd));
          bfd_coff_go32stub (abfd) = NULL;
        {
          bfd_release (abfd, bfd_coff_go32stub (abfd));
          bfd_coff_go32stub (abfd) = NULL;
@@ -428,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.031028 seconds and 4 git commands to generate.