diff options
Diffstat (limited to 'bfd/elf32-rx.c')
-rw-r--r-- | bfd/elf32-rx.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/bfd/elf32-rx.c b/bfd/elf32-rx.c index c21c7b1..0ceed85 100644 --- a/bfd/elf32-rx.c +++ b/bfd/elf32-rx.c @@ -32,6 +32,7 @@ endian-swap we would otherwise get. We check for this in rx_elf_object_p(). */ const bfd_target bfd_elf32_rx_be_ns_vec; +const bfd_target bfd_elf32_rx_be_vec; #ifdef DEBUG char * rx_get_reloc (long); @@ -3028,6 +3029,7 @@ rx_elf_object_p (bfd * abfd) Elf_Internal_Phdr *phdr = elf_tdata (abfd)->phdr; int nphdrs = elf_elfheader (abfd)->e_phnum; sec_ptr bsec; + static int saw_be = FALSE; /* We never want to automatically choose the non-swapping big-endian target. The user can only get that explicitly, such as with -I @@ -3036,6 +3038,15 @@ rx_elf_object_p (bfd * abfd) && abfd->target_defaulted) return FALSE; + /* BFD->target_defaulted is not set to TRUE when a target is chosen + as a fallback, so we check for "scanning" to know when to stop + using the non-swapping target. */ + if (abfd->xvec == &bfd_elf32_rx_be_ns_vec + && saw_be) + return FALSE; + if (abfd->xvec == &bfd_elf32_rx_be_vec) + saw_be = TRUE; + bfd_default_set_arch_mach (abfd, bfd_arch_rx, elf32_rx_machine (abfd)); |