bug-binutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Bug ld/12942] New: Plugin not handling correctly resolution of COMDATs.


From: hubicka at gcc dot gnu.org
Subject: [Bug ld/12942] New: Plugin not handling correctly resolution of COMDATs.
Date: Mon, 27 Jun 2011 18:08:25 +0000

http://sourceware.org/bugzilla/show_bug.cgi?id=12942

           Summary: Plugin not handling correctly resolution of COMDATs.
           Product: binutils
           Version: unspecified
            Status: NEW
          Severity: normal
          Priority: P2
         Component: ld
        AssignedTo: address@hidden
        ReportedBy: address@hidden


Hi,
you need the following fix to GCC to output symbol table correctly. I will
commit it after testing.
Index: ipa.c
===================================================================
--- ipa.c       (revision 175350)
+++ ipa.c       (working copy)
@@ -542,13 +542,13 @@
 {
   int i;
   struct ipa_ref *ref;
-  for (i = 0; ipa_ref_list_reference_iterate (&node->ref_list, i, ref); i++)
+  for (i = 0; ipa_ref_list_refering_iterate (&node->ref_list, i, ref); i++)
     if (ref->use == IPA_REF_ADDR)
       {
        struct varpool_node *node;
-       if (ref->refered_type == IPA_REF_CGRAPH)
+       if (ref->refering_type == IPA_REF_CGRAPH)
          return true;
-       node = ipa_ref_varpool_node (ref);
+       node = ipa_ref_refering_varpool_node (ref);
        if (!DECL_VIRTUAL_P (node->decl))
          return true;
       }

With fixed GCC the following testcase fails with GNU LD but not with Gold:
evans:/abuild/jh/dealIIb/:[0]# cat a.h
inline int test (void)
{
}

typedef int (*test_t) (void);
evans:/abuild/jh/dealIIb/:[0]# cat a.cc

#include "a.h"
extern "C" void abort ();

test_t b(void);

int
main(void)
{
  if (test != b ())
    abort ();
}
evans:/abuild/jh/dealIIb/:[0]# cat b.cc
#include <stdio.h>
#include "a.h"

test_t b(void)
{
  return test;
}
evans:/abuild/jh/dealIIb/:[0]# /abuild/jh/trunk-install/bin/g++ a.cc -flto -c
-O2
evans:/abuild/jh/dealIIb/:[0]# /abuild/jh/trunk-install/bin/g++ b.cc  -c -O2
evans:/abuild/jh/dealIIb/:[0]# /abuild/jh/trunk-install/bin/g++ a.o b.o 
-save-temps -O2 -flto -fuse-linker-plugin          
[Leaving LTRANS /tmp/cc7tSz5y.args]
[Leaving LTRANS /tmp/ccAl4bQf.ltrans.out]
[Leaving LTRANS /tmp/cc0AoaEb.args]
[Leaving LTRANS /tmp/ccAl4bQf.ltrans0.o]
evans:/abuild/jh/dealIIb/:[0]# ./a.out
Aborted (core dumped)
evans:/abuild/jh/dealIIb/:[134]# /abuild/jh/trunk-install/bin/g++ a.o b.o 
-save-temps -O2                           
evans:/abuild/jh/dealIIb/:[0]# ./a.out
evans:/abuild/jh/dealIIb/:[0]# more ./-lm.res 
1
a.o 3
164 623d5db5 PREVAILING_DEF_IRONLY _Z4testv
170 623d5db5 PREVAILING_DEF main
181 623d5db5 RESOLVED_EXEC _Z1bv

I.e. with LTO compilation the _Z4testv is not merged. Golds variant of -lm.res
is:

1
a.o 3
164 623d5db5 PREVAILING_DEF _Z4testv
170 623d5db5 PREVAILING_DEF main
181 623d5db5 RESOLVED_EXEC _Z1bv

-- 
Configure bugmail: http://sourceware.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]