summaryrefslogtreecommitdiff
path: root/bfd/elf32-rx.c
diff options
context:
space:
mode:
authorDJ Delorie <dj@delorie.com>2011-11-22 19:50:35 +0000
committerDJ Delorie <dj@delorie.com>2011-11-22 19:50:35 +0000
commitcda9618a16fd08afd59870f65e4f3bfbda6049cd (patch)
treebc7eecd71b7a31ff53c09f6873108b28ced7bf8c /bfd/elf32-rx.c
parent5ae86fd63ba866caea3e62300bd2c11745d0c7e0 (diff)
downloadbinutils-redhat-cda9618a16fd08afd59870f65e4f3bfbda6049cd.tar.gz
* elf32-rx.c (rx_elf_object_p): Add more checks for "scanning" to
avoid using the special non-swapping target when not explicitly requested.
Diffstat (limited to 'bfd/elf32-rx.c')
-rw-r--r--bfd/elf32-rx.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/bfd/elf32-rx.c b/bfd/elf32-rx.c
index c21c7b1a39..0ceed858a4 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));