From 003773ac55051bb116519285546257da6a119c61 Mon Sep 17 00:00:00 2001 From: Alexandre Oliva Date: Fri, 24 Aug 2001 13:55:55 +0000 Subject: [PATCH] * bfd.c (bfd_alt_mach_code): New function. * bfd-in2.h: Rebuilt. --- bfd/ChangeLog | 5 +++++ bfd/bfd-in2.h | 3 +++ bfd/bfd.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 63 insertions(+) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 5160843de..7e9210706 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,5 +1,10 @@ 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 `type' field in the hash entry when deciding whether to follow a link. diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h index 4b6f44e40..64c995c5a 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 2f5e26093..aa3dd2a62 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; +} -- 2.11.4.GIT