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/binutils-2_26-branch] ld: Fix LTO for MinGW targets


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

commit 412d26bde8585eca3ec6b8bed70197205288cbdf
Author: Kwok Cheung Yeung <kcy@codesourcery.com>
Date:   Thu Dec 10 16:11:07 2015 +0000

    ld: Fix LTO for MinGW targets
    
    When creating a dummy BFD for an IR file, the output BFD is used as
    a template for the new BFD, when it needs to be the input BFD passed
    into the function when not dealing with a BFD plugin.
    
    On most targets this is not an issue as the input and output formats
    are the same anyway, but on MinGW targets, there are two variant
    formats used (pe-i386/pe-x86-64 and pei-i386/pei-x86-64) which are
    similar but not interchangeable here.
    
    	PR ld/18199
    	* plugin.c (plugin_get_ir_dummy_bfd): Use srctemplate as the
    	template when calling bfd_create if it does not use the BFD
    	plugin target vector.
    
    (Cherry-picked from commit 4a07dc81356ed8728e204e9aabeb256703c59aef)

Diff:
---
 ld/ChangeLog | 7 +++++++
 ld/plugin.c  | 6 ++++--
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/ld/ChangeLog b/ld/ChangeLog
index 63ae72a..cc7474d 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,10 @@
+2016-01-11  Kwok Cheung Yeung  <kcy@codesourcery.com>
+
+	PR ld/18199
+	* plugin.c (plugin_get_ir_dummy_bfd): Use srctemplate as the
+	template when calling bfd_create if it does not use the BFD
+	plugin target vector.
+
 2015-12-10  Alan Modra  <amodra@gmail.com>
 
 	Apply from master.
diff --git a/ld/plugin.c b/ld/plugin.c
index 8e53255..b0e2a5f 100644
--- a/ld/plugin.c
+++ b/ld/plugin.c
@@ -295,16 +295,18 @@ static bfd *
 plugin_get_ir_dummy_bfd (const char *name, bfd *srctemplate)
 {
   bfd *abfd;
+  bfd_boolean bfd_plugin_target;
 
   bfd_use_reserved_id = 1;
+  bfd_plugin_target = bfd_plugin_target_p (srctemplate->xvec);
   abfd = bfd_create (concat (name, IRONLY_SUFFIX, (const char *) NULL),
-		     link_info.output_bfd);
+		     bfd_plugin_target ? link_info.output_bfd : srctemplate);
   if (abfd != NULL)
     {
       abfd->flags |= BFD_LINKER_CREATED | BFD_PLUGIN;
       if (!bfd_make_writable (abfd))
 	goto report_error;
-      if (! bfd_plugin_target_p (srctemplate->xvec))
+      if (!bfd_plugin_target)
 	{
 	  bfd_set_arch_info (abfd, bfd_get_arch_info (srctemplate));
 	  bfd_set_gp_size (abfd, bfd_get_gp_size (srctemplate));


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