* bfd.c (bfd_alt_mach_code): New function.
authorAlexandre Oliva <aoliva@redhat.com>
Fri, 24 Aug 2001 13:55:55 +0000 (13:55 +0000)
committerAlexandre Oliva <aoliva@redhat.com>
Fri, 24 Aug 2001 13:55:55 +0000 (13:55 +0000)
* bfd-in2.h: Rebuilt.

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

index 5160843debe685b6e41991e7d4939342c3960491..7e92107068d6a22720096c72e67ed74524da329f 100644 (file)
@@ -1,3 +1,8 @@
+2001-08-24  Alexandre Oliva  <aoliva@redhat.com>
+
+       * bfd.c (bfd_alt_mach_code): New function.
+       * bfd-in2.h: Rebuilt.
+
 2001-08-24  Alexandre Oliva  <aoliva@redhat.com>
 
        * elf-m10300.c (mn10300_elf_relocate_section): Test the right
index 4b6f44e40e183f57f6fa4e4e650e0a50f0d914ef..64c995c5acde7c414c8e599b690575ca365475be 100644 (file)
@@ -3296,6 +3296,9 @@ extern bfd_byte *bfd_get_relocated_section_contents
                  struct bfd_link_order *, bfd_byte *,
                  boolean, asymbol **));
 
+boolean
+bfd_alt_mach_code PARAMS ((bfd *abfd, int index));
+
 symindex
 bfd_get_next_mapent PARAMS ((bfd *abfd, symindex previous, carsym **sym));
 
index 2f5e260934d17e1ad60363e16ab3c00c663122ef..aa3dd2a6256d616c0ccfcf68f0e1a030e73f83e9 100644 (file)
--- a/bfd/bfd.c
+++ b/bfd/bfd.c
@@ -1288,3 +1288,58 @@ bfd_fprintf_vma (abfd, stream, value)
   else
     fprintf_vma ((FILE *) stream, value);
 }
+
+/*
+FUNCTION
+       bfd_alt_mach_code
+
+SYNOPSIS
+       boolean bfd_alt_mach_code(bfd *abfd, int index);
+
+DESCRIPTION
+
+       When more than one machine code number is available for the
+       same machine type, this function can be used to switch between
+       the preferred one (index == 0) and any others.  Currently,
+       only ELF supports this feature, with up to two alternate
+       machine codes.
+*/
+
+boolean
+bfd_alt_mach_code (abfd, index)
+     bfd *abfd;
+     int index;
+{
+  if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
+    {
+      int code;
+
+      switch (index)
+       {
+       case 0:
+         code = get_elf_backend_data (abfd)->elf_machine_code;
+         break;
+
+       case 1:
+         code = get_elf_backend_data (abfd)->elf_machine_alt1;
+         if (code == 0)
+           return false;
+         break;
+
+       case 2:
+         code = get_elf_backend_data (abfd)->elf_machine_alt2;
+         if (code == 0)
+           return false;
+         break;
+
+       default:
+         return false;
+       }
+
+      elf_elfheader (abfd)->e_machine = code;
+
+      return true;
+    }
+
+  return false;
+}