[Bug lto/45375] [meta-bug] Issues with building Mozilla with LTO

hubicka at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Wed Jan 9 15:17:00 GMT 2013


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45375

--- Comment #165 from Jan Hubicka <hubicka at gcc dot gnu.org> 2013-01-09 15:16:26 UTC ---
OK, I tracked down the undefined reference to
error: /tmp/cc0oq4BG.ltrans1.ltrans.o: requires dynamic R_X86_64_PC32 reloc
against '_ZN12SkAnnotationC1ER23SkFlattenableReadBuffer' which may overflow at
runtime; recompile with -fPIC

it is caused by bug in Mozilla - it includes file defininig virtual function
that use  '_ZN12SkAnnotationC1ER23SkFlattenableReadBuffer' (in SkPaint) but it
never links with implementation.
Normally the function is optimized out.  It is not due to fact that we never
optimize out virtual functions prior inlining for devirtualization and in WPA
path we forget to remove these when done.

Fixed by the following patch
Index: ipa-inline.c
===================================================================
--- ipa-inline.c        (revision 194916)
+++ ipa-inline.c        (working copy)
@@ -1793,7 +1793,7 @@
     }

   inline_small_functions ();
-  symtab_remove_unreachable_nodes (true, dump_file);
+  symtab_remove_unreachable_nodes (false, dump_file);
   free (order);

   /* Inline functions with a property that after inlining into all callers the
Index: lto/lto.c
===================================================================
--- lto/lto.c   (revision 194916)
+++ lto/lto.c   (working copy)
@@ -3215,6 +3215,7 @@
   cgraph_state = CGRAPH_STATE_IPA_SSA;

   execute_ipa_pass_list (all_regular_ipa_passes);
+  symtab_remove_unreachable_nodes (false, dump_file);

   if (cgraph_dump_file)
     {
Index: cgraphclones.c
===================================================================
--- cgraphclones.c      (revision 194916)
+++ cgraphclones.c      (working copy)
@@ -184,6 +184,7 @@
   new_node->symbol.decl = decl;
   symtab_register_node ((symtab_node)new_node);
   new_node->origin = n->origin;
+  new_node->symbol.lto_file_data = n->symbol.lto_file_data;
   if (new_node->origin)
     {
       new_node->next_nested = new_node->origin->nested;



More information about the Gcc-bugs mailing list