"propogate" -> "propagate"
[binutils-gdb.git] / bfd / aoutf1.h
index dfac4eb7f9fd0e6d3b3b4136041fa440d81060e2..d78de7f6cca4186dcda654417fea9d26855c5ba2 100644 (file)
@@ -63,8 +63,13 @@ The name put into the target vector.
 /*SUPPRESS558*/
 /*SUPPRESS529*/
 
-void
-  NAME (sunos, set_arch_mach) (abfd, machtype)
+static void
+#if ARCH_SIZE == 64
+sunos_64_set_arch_mach
+#else
+sunos_32_set_arch_mach
+#endif
+  (abfd, machtype)
      bfd *abfd;
      int machtype;
 {
@@ -148,7 +153,12 @@ choose_reloc_size (abfd)
   file header, symbols, and relocation.  */
 
 static boolean
-  NAME (aout, sunos4_write_object_contents) (abfd)
+#if ARCH_SIZE == 64
+aout_64_sunos4_write_object_contents
+#else
+aout_32_sunos4_write_object_contents
+#endif
+  (abfd)
      bfd *abfd;
 {
   struct external_exec exec_bytes;
@@ -160,6 +170,9 @@ static boolean
     case bfd_arch_m68k:
       switch (bfd_get_mach (abfd))
        {
+       case 68000:
+         N_SET_MACHTYPE (*execp, M_UNKNOWN);
+         break;
        case 68010:
          N_SET_MACHTYPE (*execp, M_68010);
          break;
@@ -184,85 +197,10 @@ static boolean
 
   choose_reloc_size (abfd);
 
-#if 0
-  /* Some tools want this to be 0, some tools want this to be one.
-     Today, it seems that 0 is the most important setting (PR1927) */
-  N_SET_FLAGS (*execp, 0x0);
-#else
-
-  /* Fri Jun 11 14:23:31 PDT 1993
-     FIXME
-     Today's optimal setting is 1.  This is a pain, since it
-     reopens 1927.  This should be readdressed by creating a new
-     target for each each supported, giving perhaps sun3/m68k
-     and sun4/sparc a.out formats.
-     */
-  N_SET_FLAGS (*execp, 1);
-#endif
+  N_SET_FLAGS (*execp, aout_backend_info (abfd)->exec_hdr_flags);
 
   N_SET_DYNAMIC (*execp, bfd_get_file_flags (abfd) & DYNAMIC);
 
-  /* At least for SunOS, the dynamic symbols and relocs are embedded
-     in the .text section, and we do not want to write them out with
-     the symbol table.  FIXME: This may be right if there is any other
-     form of a.out shared libraries.  */
-  if ((bfd_get_file_flags (abfd) & DYNAMIC) != 0
-      && bfd_get_outsymbols (abfd) != (asymbol **) NULL)
-    {
-      bfd_size_type i;
-      asymbol **sym_ptr_ptr;
-      bfd_size_type count;
-      arelent **rel_ptr_ptr;
-
-      sym_ptr_ptr = bfd_get_outsymbols (abfd);
-      count = bfd_get_symcount (abfd);
-      for (i = 0; i < count; i++, sym_ptr_ptr++)
-       {
-         if (((*sym_ptr_ptr)->flags & BSF_DYNAMIC) != 0)
-           {
-             /* This assumes that all dynamic symbols follow all
-                non-dynamic symbols, which is what slurp_symbol_table
-                does.  */
-             *sym_ptr_ptr = NULL;
-             bfd_get_symcount (abfd) = i;
-             break;
-           }
-       }
-
-      if (obj_textsec (abfd)->reloc_count > 0)
-       {
-         rel_ptr_ptr = obj_textsec (abfd)->orelocation;
-         count = obj_textsec (abfd)->reloc_count;
-         for (i = 0; i < count; i++, rel_ptr_ptr++)
-           {
-             if (((*(*rel_ptr_ptr)->sym_ptr_ptr)->flags & BSF_DYNAMIC) != 0)
-               {
-                 /* This assumes that all relocs against dynamic
-                    symbols follow all relocs against other symbols,
-                    which is what slurp_reloc_table does.  */
-                 *rel_ptr_ptr = NULL;
-                 obj_textsec (abfd)->reloc_count = i;
-                 break;
-               }
-           }
-       }
-
-      if (obj_datasec (abfd)->reloc_count > 0)
-       {
-         rel_ptr_ptr = obj_datasec (abfd)->orelocation;
-         count = obj_datasec (abfd)->reloc_count;
-         for (i = 0; i < count; i++, rel_ptr_ptr++)
-           {
-             if (((*(*rel_ptr_ptr)->sym_ptr_ptr)->flags & BSF_DYNAMIC) != 0)
-               {
-                 *rel_ptr_ptr = NULL;
-                 obj_datasec (abfd)->reloc_count = i;
-                 break;
-               }
-           }
-       }
-    }
-
   WRITE_HEADERS (abfd, execp);
 
   return true;
@@ -384,7 +322,12 @@ swapcore_sun3 (abfd, ext, intcore)
   intcore->c_len = bfd_h_get_32 (abfd, (unsigned char *) &extcore->c_len);
   intcore->c_regs_pos = (long) (((struct external_sun3_core *) 0)->c_regs);
   intcore->c_regs_size = sizeof (extcore->c_regs);
-  NAME (aout, swap_exec_header_in) (abfd, &extcore->c_aouthdr, &intcore->c_aouthdr);
+#if ARCH_SIZE == 64
+  aout_64_swap_exec_header_in
+#else
+  aout_32_swap_exec_header_in
+#endif
+    (abfd, &extcore->c_aouthdr, &intcore->c_aouthdr);
   intcore->c_signo = bfd_h_get_32 (abfd, (unsigned char *) &extcore->c_signo);
   intcore->c_tsize = bfd_h_get_32 (abfd, (unsigned char *) &extcore->c_tsize);
   intcore->c_dsize = bfd_h_get_32 (abfd, (unsigned char *) &extcore->c_dsize);
@@ -415,7 +358,12 @@ swapcore_sparc (abfd, ext, intcore)
   intcore->c_len = bfd_h_get_32 (abfd, (unsigned char *) &extcore->c_len);
   intcore->c_regs_pos = (long) (((struct external_sparc_core *) 0)->c_regs);
   intcore->c_regs_size = sizeof (extcore->c_regs);
-  NAME (aout, swap_exec_header_in) (abfd, &extcore->c_aouthdr, &intcore->c_aouthdr);
+#if ARCH_SIZE == 64
+  aout_64_swap_exec_header_in
+#else
+  aout_32_swap_exec_header_in
+#endif
+    (abfd, &extcore->c_aouthdr, &intcore->c_aouthdr);
   intcore->c_signo = bfd_h_get_32 (abfd, (unsigned char *) &extcore->c_signo);
   intcore->c_tsize = bfd_h_get_32 (abfd, (unsigned char *) &extcore->c_tsize);
   intcore->c_dsize = bfd_h_get_32 (abfd, (unsigned char *) &extcore->c_dsize);
@@ -520,7 +468,6 @@ sunos4_core_file_p (abfd)
 
   if ((bfd_read ((PTR) extcore, 1, core_size, abfd)) != core_size)
     {
-      bfd_set_error (bfd_error_system_call);
       bfd_release (abfd, (char *) mergem);
       return 0;
     }
@@ -671,22 +618,45 @@ sunos4_set_sizes (abfd)
     }
 }
 
-#ifndef MY_read_dynamic_symbols
-#define MY_read_dynamic_symbols 0
+/* We default to setting the toolversion field to 1, as is required by
+   SunOS.  */
+#ifndef MY_exec_hdr_flags
+#define MY_exec_hdr_flags 1
+#endif
+
+#ifndef MY_add_dynamic_symbols
+#define MY_add_dynamic_symbols 0
+#endif
+#ifndef MY_add_one_symbol
+#define MY_add_one_symbol 0
+#endif
+#ifndef MY_link_dynamic_object
+#define MY_link_dynamic_object 0
+#endif
+#ifndef MY_write_dynamic_symbol
+#define MY_write_dynamic_symbol 0
+#endif
+#ifndef MY_check_dynamic_reloc
+#define MY_check_dynamic_reloc 0
 #endif
-#ifndef MY_read_dynamic_relocs
-#define MY_read_dynamic_relocs 0
+#ifndef MY_finish_dynamic_link
+#define MY_finish_dynamic_link 0
 #endif
 
 static CONST struct aout_backend_data sunos4_aout_backend =
 {
   0,                           /* zmagic files are not contiguous */
   1,                           /* text includes header */
+  MY_exec_hdr_flags,
   0,                           /* default text vma */
   sunos4_set_sizes,
   0,                           /* header is counted in zmagic text */
-  MY_read_dynamic_symbols,
-  MY_read_dynamic_relocs
+  MY_add_dynamic_symbols,
+  MY_add_one_symbol,
+  MY_link_dynamic_object,
+  MY_write_dynamic_symbol,
+  MY_check_dynamic_reloc,
+  MY_finish_dynamic_link
 };
 \f
 #define        MY_core_file_failing_command    sunos4_core_file_failing_command