This is the mail archive of the binutils-cvs@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] MIPS: Preset EF_MIPS_ABI2 with n32 ELF objects


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=defc8e2b3576c28fd5651763348ae23c18a94170

commit defc8e2b3576c28fd5651763348ae23c18a94170
Author: Maciej W. Rozycki <macro@imgtec.com>
Date:   Mon Oct 23 15:39:46 2017 +0100

    MIPS: Preset EF_MIPS_ABI2 with n32 ELF objects
    
    Fix a bug in MIPS n32 ELF object file generation and make such objects
    consistent with the n32 BFD requested, by presetting the EF_MIPS_ABI2
    flag in the `e_flags' member of the newly created ELF file header, as it
    is this flag that tells n32 objects apart from o32 objects.
    
    This flag will then stay set through to output file generation for
    writers such as GAS or GDB's `generate-core-file' command.  Readers will
    overwrite the whole of `e_flags' along with the rest of the ELF file
    header in `elf_swap_ehdr_in' and then verify in `mips_elf_n32_object_p'
    that the flag is still set before accepting an input file as an n32
    object.
    
    The issue was discovered with GDB's `generate-core-file' command making
    o32 core files out of n32 debuggees.
    
    	bfd/
    	* elfn32-mips.c (mips_elf_n32_mkobject): New prototype and
    	function.
    	(bfd_elf32_mkobject): Use `mips_elf_n32_mkobject' rather than
    	`_bfd_mips_elf_mkobject'.
    
    	gas/
    	* config/tc-mips.c (mips_elf_final_processing): Don't set
    	EF_MIPS_ABI2 in `e_flags'.

Diff:
---
 bfd/ChangeLog        |  7 +++++++
 bfd/elfn32-mips.c    | 19 ++++++++++++++++++-
 gas/ChangeLog        |  5 +++++
 gas/config/tc-mips.c |  4 +---
 4 files changed, 31 insertions(+), 4 deletions(-)

diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index f628a61..fde334d 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,10 @@
+2017-10-23  Maciej W. Rozycki  <macro@imgtec.com>
+
+	* elfn32-mips.c (mips_elf_n32_mkobject): New prototype and
+	function.
+	(bfd_elf32_mkobject): Use `mips_elf_n32_mkobject' rather than
+	`_bfd_mips_elf_mkobject'.
+
 2017-10-22  Hans-Peter Nilsson  <hp@axis.com>
 
 	PR gas/22304
diff --git a/bfd/elfn32-mips.c b/bfd/elfn32-mips.c
index fdae183..9ac2da3 100644
--- a/bfd/elfn32-mips.c
+++ b/bfd/elfn32-mips.c
@@ -84,6 +84,8 @@ static bfd_boolean elf_n32_mips_grok_freebsd_prstatus
   (bfd *, Elf_Internal_Note *);
 static irix_compat_t elf_n32_mips_irix_compat
   (bfd *);
+static bfd_boolean mips_elf_n32_mkobject
+  (bfd *);
 
 extern const bfd_target mips_elf32_n_be_vec;
 extern const bfd_target mips_elf32_n_le_vec;
@@ -3643,6 +3645,21 @@ elf_n32_mips_irix_compat (bfd *abfd)
     return ict_none;
 }
 
+/* Make an n32 MIPS object.  We need to set the n32 ABI flag in
+   `e_flags' to tell the object apart from an o32 object.  */
+
+static bfd_boolean
+mips_elf_n32_mkobject (bfd *abfd)
+{
+  bfd_boolean ret;
+
+  ret = _bfd_mips_elf_mkobject (abfd);
+  if (ret)
+    elf_elfheader (abfd)->e_flags |= EF_MIPS_ABI2;
+
+  return ret;
+}
+
 /* ECOFF swapping routines.  These are used when dealing with the
    .mdebug section, which is in the ECOFF debugging format.  */
 static const struct ecoff_debug_swap mips_elf32_ecoff_debug_swap = {
@@ -3775,7 +3792,7 @@ static const struct ecoff_debug_swap mips_elf32_ecoff_debug_swap = {
 #define bfd_elf32_bfd_set_private_flags	_bfd_mips_elf_set_private_flags
 #define bfd_elf32_bfd_print_private_bfd_data \
 					_bfd_mips_elf_print_private_bfd_data
-#define bfd_elf32_mkobject		_bfd_mips_elf_mkobject
+#define bfd_elf32_mkobject		mips_elf_n32_mkobject
 
 /* Support for SGI-ish mips targets using n32 ABI.  */
 
diff --git a/gas/ChangeLog b/gas/ChangeLog
index af915ff..44debdc 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,8 @@
+2017-10-23  Maciej W. Rozycki  <macro@imgtec.com>
+
+	* config/tc-mips.c (mips_elf_final_processing): Don't set
+	EF_MIPS_ABI2 in `e_flags'.
+
 2017-10-22  Hans-Peter Nilsson  <hp@axis.com>
 
 	PR gas/22304
diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c
index e4351f7..040a373 100644
--- a/gas/config/tc-mips.c
+++ b/gas/config/tc-mips.c
@@ -19140,10 +19140,8 @@ mips_elf_final_processing (void)
       else
 	elf_elfheader (stdoutput)->e_flags |= E_MIPS_ABI_EABI32;
     }
-  else if (mips_abi == N32_ABI)
-    elf_elfheader (stdoutput)->e_flags |= EF_MIPS_ABI2;
 
-  /* Nothing to do for N64_ABI.  */
+  /* Nothing to do for N32_ABI or N64_ABI.  */
 
   if (mips_32bitmode)
     elf_elfheader (stdoutput)->e_flags |= EF_MIPS_32BITMODE;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]