From patchwork Tue Jan 3 18:43:39 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Baldwin X-Patchwork-Id: 18773 Received: (qmail 56312 invoked by alias); 3 Jan 2017 18:45:39 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 43805 invoked by uid 89); 3 Jan 2017 18:45:33 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.1 required=5.0 tests=AWL, BAYES_00, SPF_HELO_PASS, SPF_SOFTFAIL autolearn=no version=3.3.2 spammy=bfd_boolean, printable, sk:bfd_def, sk:bfd_mac X-Spam-User: qpsmtpd, 2 recipients X-HELO: mail.baldwin.cx Received: from bigwig.baldwin.cx (HELO mail.baldwin.cx) (96.47.65.170) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 03 Jan 2017 18:45:23 +0000 Received: from ralph.com (c-73-231-226-104.hsd1.ca.comcast.net [73.231.226.104]) by mail.baldwin.cx (Postfix) with ESMTPSA id C65F910B515; Tue, 3 Jan 2017 13:45:07 -0500 (EST) From: John Baldwin To: gdb-patches@sourceware.org, binutils@sourceware.org Subject: [PATCH v3 1/3] Use bfd_mach_mips4000 as the default machine type for 64-bit MIPS ABIs. Date: Tue, 3 Jan 2017 10:43:39 -0800 Message-Id: <20170103184341.58346-2-jhb@FreeBSD.org> In-Reply-To: <20170103184341.58346-1-jhb@FreeBSD.org> References: <20170103184341.58346-1-jhb@FreeBSD.org> X-IsSubscribed: yes If the flags word of an ELF header is empty, _bfd_elf_mips_mach always returned bfd_mach_mips3000 which is a 32-bit MIPS ABI. This change uses bfd_mach_mips4000 if the ELF class identifies a 64-bit binary. bfd/ChangeLog: * elf32-mips.c: Pass "abfd" to "_bfd_elf_mips_mach". * elf64-mips.c: Likewise. * elfn32-mips.c: Likewise. * elfxx-mips.c (_bfd_elf_mips_mach): Read "flags" from ELF header in "abfd". Use "bfd_mach_mips4000" as default machine for 64-bit ABIs. * elfxx-mips.h (_bfd_elf_mips_mach): Change argument from "flags" to "abfd". --- bfd/ChangeLog | 11 +++++++++++ bfd/elf32-mips.c | 2 +- bfd/elf64-mips.c | 2 +- bfd/elfn32-mips.c | 2 +- bfd/elfxx-mips.c | 11 +++++++---- bfd/elfxx-mips.h | 2 +- 6 files changed, 22 insertions(+), 8 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 41d511948a..b3ce1e5321 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,14 @@ +2017-01-03 John Baldwin + + * elf32-mips.c: Pass "abfd" to "_bfd_elf_mips_mach". + * elf64-mips.c: Likewise. + * elfn32-mips.c: Likewise. + * elfxx-mips.c (_bfd_elf_mips_mach): Read "flags" from ELF header + in "abfd". Use "bfd_mach_mips4000" as default machine for 64-bit + ABIs. + * elfxx-mips.h (_bfd_elf_mips_mach): Change argument from "flags" + to "abfd". + 2017-01-03 Rich Felker PR ld/21017 diff --git a/bfd/elf32-mips.c b/bfd/elf32-mips.c index 8c1a68eba0..6586272dab 100644 --- a/bfd/elf32-mips.c +++ b/bfd/elf32-mips.c @@ -2295,7 +2295,7 @@ mips_elf32_object_p (bfd *abfd) if (SGI_COMPAT (abfd)) elf_bad_symtab (abfd) = TRUE; - mach = _bfd_elf_mips_mach (elf_elfheader (abfd)->e_flags); + mach = _bfd_elf_mips_mach (abfd); bfd_default_set_arch_mach (abfd, bfd_arch_mips, mach); return TRUE; } diff --git a/bfd/elf64-mips.c b/bfd/elf64-mips.c index 5edbd4a5d3..613d782534 100644 --- a/bfd/elf64-mips.c +++ b/bfd/elf64-mips.c @@ -4251,7 +4251,7 @@ mips_elf64_object_p (bfd *abfd) if (elf64_mips_irix_compat (abfd) != ict_none) elf_bad_symtab (abfd) = TRUE; - mach = _bfd_elf_mips_mach (elf_elfheader (abfd)->e_flags); + mach = _bfd_elf_mips_mach (abfd); bfd_default_set_arch_mach (abfd, bfd_arch_mips, mach); return TRUE; } diff --git a/bfd/elfn32-mips.c b/bfd/elfn32-mips.c index c09713ad53..d35af3ac54 100644 --- a/bfd/elfn32-mips.c +++ b/bfd/elfn32-mips.c @@ -3513,7 +3513,7 @@ mips_elf_n32_object_p (bfd *abfd) if (SGI_COMPAT (abfd)) elf_bad_symtab (abfd) = TRUE; - mach = _bfd_elf_mips_mach (elf_elfheader (abfd)->e_flags); + mach = _bfd_elf_mips_mach (abfd); bfd_default_set_arch_mach (abfd, bfd_arch_mips, mach); return TRUE; } diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c index ce58c436e9..17f5f99ec3 100644 --- a/bfd/elfxx-mips.c +++ b/bfd/elfxx-mips.c @@ -6719,8 +6719,10 @@ mips_elf_create_dynamic_relocation (bfd *output_bfd, /* Return the MACH for a MIPS e_flags value. */ unsigned long -_bfd_elf_mips_mach (flagword flags) +_bfd_elf_mips_mach (bfd *abfd) { + flagword flags = elf_elfheader (abfd)->e_flags; + switch (flags & EF_MIPS_MACH) { case E_MIPS_MACH_3900: @@ -6782,7 +6784,10 @@ _bfd_elf_mips_mach (flagword flags) { default: case E_MIPS_ARCH_1: - return bfd_mach_mips3000; + if (ABI_64_P (abfd)) + return bfd_mach_mips4000; + else + return bfd_mach_mips3000; case E_MIPS_ARCH_2: return bfd_mach_mips6000; @@ -6815,8 +6820,6 @@ _bfd_elf_mips_mach (flagword flags) return bfd_mach_mipsisa64r6; } } - - return 0; } /* Return printable name for ABI. */ diff --git a/bfd/elfxx-mips.h b/bfd/elfxx-mips.h index 8f16cc9c53..c64f788f8b 100644 --- a/bfd/elfxx-mips.h +++ b/bfd/elfxx-mips.h @@ -138,7 +138,7 @@ extern bfd_reloc_status_type _bfd_mips_elf_lo16_reloc extern bfd_reloc_status_type _bfd_mips_elf_generic_reloc (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **); extern unsigned long _bfd_elf_mips_mach - (flagword); + (bfd *); extern bfd_boolean _bfd_mips_relax_section (bfd *, asection *, struct bfd_link_info *, bfd_boolean *); extern bfd_vma _bfd_mips_elf_sign_extend