From: Alexandre Oliva Date: Fri, 24 Aug 2001 13:55:55 +0000 (+0000) Subject: * bfd.c (bfd_alt_mach_code): New function. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=8c98ec7dcccbe45bed00b04e04c3d7cac8f7b744;p=binutils-gdb.git * bfd.c (bfd_alt_mach_code): New function. * bfd-in2.h: Rebuilt. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 5160843debe..7e92107068d 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2001-08-24 Alexandre Oliva + + * bfd.c (bfd_alt_mach_code): New function. + * bfd-in2.h: Rebuilt. + 2001-08-24 Alexandre Oliva * elf-m10300.c (mn10300_elf_relocate_section): Test the right diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h index 4b6f44e40e1..64c995c5acd 100644 --- a/bfd/bfd-in2.h +++ b/bfd/bfd-in2.h @@ -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)); diff --git a/bfd/bfd.c b/bfd/bfd.c index 2f5e260934d..aa3dd2a6256 100644 --- 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; +}