2000-05-04 Michael Snyder <msnyder@seadog.cygnus.com>
authorMichael Snyder <msnyder@vmware.com>
Fri, 5 May 2000 18:12:53 +0000 (18:12 +0000)
committerMichael Snyder <msnyder@vmware.com>
Fri, 5 May 2000 18:12:53 +0000 (18:12 +0000)
        * elf.c (bfd_elf_get_arch_size): New function, return 32 | 64 | -1.
        * bfd-in.h: Prototype bfd_elf_get_arch_size.
        * bfd-in2.h: Prototype bfd_elf_get_arch_size.

bfd/ChangeLog
bfd/bfd-in.h
bfd/bfd-in2.h
bfd/elf.c

index 4eb0feee9cfbda460e164aeda3a18021f70b8e3d..a5b3fc6f6bfe2a33b3731f7ad717a6ae9f911e4a 100644 (file)
@@ -1,3 +1,9 @@
+2000-05-04  Michael Snyder  <msnyder@seadog.cygnus.com>
+
+       * elf.c (bfd_elf_get_arch_size): New function, return 32 | 64 | -1.
+       * bfd-in.h: Prototype bfd_elf_get_arch_size.
+       * bfd-in2.h: Prototype bfd_elf_get_arch_size.
+
 2000-05-04  Alan Modra  <alan@linuxcare.com.au>
 
        * libhppa.h (HPPA_R_CONSTANT): Cast argument to bfd_signed_vma.
index 127d96136f86192675be8b607c6318bb608cc31f..dc172bf7dacdf6ad74bf8e251d3b88efc0a57675 100644 (file)
@@ -640,6 +640,9 @@ extern long bfd_get_elf_phdr_upper_bound PARAMS ((bfd *abfd));
    error occurs; bfd_get_error will return an appropriate code.  */
 extern int bfd_get_elf_phdrs PARAMS ((bfd *abfd, void *phdrs));
 
+/* Return the arch_size field of an elf bfd, or -1 if not elf.  */
+extern int bfd_elf_get_arch_size PARAMS ((bfd *));
+
 /* SunOS shared library support routines for the linker.  */
 
 extern struct bfd_link_needed_list *bfd_sunos_get_needed_list
index 8d89199bdf843b00bacf1762f4ada59c0922232a..01d735f250570f1f0076e07b34634d7a1823ab31 100644 (file)
@@ -640,6 +640,9 @@ extern long bfd_get_elf_phdr_upper_bound PARAMS ((bfd *abfd));
    error occurs; bfd_get_error will return an appropriate code.  */
 extern int bfd_get_elf_phdrs PARAMS ((bfd *abfd, void *phdrs));
 
+/* Return the arch_size field of an elf bfd, or -1 if not elf.  */
+extern int bfd_elf_get_arch_size PARAMS ((bfd *));
+
 /* SunOS shared library support routines for the linker.  */
 
 extern struct bfd_link_needed_list *bfd_sunos_get_needed_list
index 3f500d67543fb7e2cae72790357cbad031dcb8c2..4c8846385282916068a7201c381851ced0a06dde 100644 (file)
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -1752,6 +1752,22 @@ elf_fake_sections (abfd, asect, failedptrarg)
     *failedptr = true;
 }
 
+/* Get elf arch size (32 / 64).
+   Returns -1 if not elf.  */
+
+int
+bfd_elf_get_arch_size (abfd)
+     bfd *abfd;
+{
+  if (abfd->xvec->flavour != bfd_target_elf_flavour)
+    {
+      bfd_set_error (bfd_error_wrong_format);
+      return -1;
+    }
+
+  return (get_elf_backend_data (abfd))->s->arch_size;
+}
+
 /* Assign all ELF section numbers.  The dummy first section is handled here
    too.  The link/info pointers for the standard section types are filled
    in here too, while we're at it.  */
@@ -1764,7 +1780,6 @@ assign_section_numbers (abfd)
   asection *sec;
   unsigned int section_number;
   Elf_Internal_Shdr **i_shdrp;
-  struct elf_backend_data *bed = get_elf_backend_data (abfd);
 
   section_number = 1;
 
@@ -1899,7 +1914,7 @@ assign_section_numbers (abfd)
 
                  /* This is a .stab section.  */
                  elf_section_data (s)->this_hdr.sh_entsize =
-                   4 + 2 * (bed->s->arch_size / 8);
+                   4 + 2 * bfd_elf_get_arch_size (abfd) / 8;
                }
            }
          break;
@@ -3226,7 +3241,7 @@ prep_headers (abfd)
       i_ehdrp->e_machine = EM_NONE;
       break;
     case bfd_arch_sparc:
-      if (bed->s->arch_size == 64)
+      if (bfd_elf_get_arch_size (abfd) == 64)
        i_ehdrp->e_machine = EM_SPARCV9;
       else
        i_ehdrp->e_machine = EM_SPARC;