collect2.c (add_lto_object): Compile for OBJECT_COFF.
authorDavid Edelsohn <dje.gcc@gmail.com>
Mon, 6 Nov 2017 17:24:57 +0000 (17:24 +0000)
committerDavid Edelsohn <dje@gcc.gnu.org>
Mon, 6 Nov 2017 17:24:57 +0000 (12:24 -0500)
* collect2.c (add_lto_object): Compile for OBJECT_COFF.
(scan_prog_file): Don't skip PASS_LTOINFO. Scan for LTO objects.

From-SVN: r254460

gcc/ChangeLog
gcc/collect2.c

index 9c3961a9f19f3cddfcbc47326094fff70ae98f3f..798cc3744fb200eb33d060481bc00eb8110f2401 100644 (file)
@@ -1,3 +1,8 @@
+2017-11-06  David Edelsohn  <dje.gcc@gmail.com>
+
+       * collect2.c (add_lto_object): Compile for OBJECT_COFF.
+       (scan_prog_file): Don't skip PASS_LTOINFO. Scan for LTO objects.
+
 2017-11-06  David Malcolm  <dmalcolm@redhat.com>
 
        PR jit/82826
index ddbd2be8bf8945d026341ef1d660d591cced36eb..7fccf12cf093d707dc26d4b2d7cc61159a59a0d2 100644 (file)
@@ -614,7 +614,7 @@ static const char *const target_machine = TARGET_MACHINE;
 
    Return 0 if not found, otherwise return its name, allocated with malloc.  */
 
-#ifdef OBJECT_FORMAT_NONE
+#if defined (OBJECT_FORMAT_NONE) || defined (OBJECT_FORMAT_COFF)
 
 /* Add an entry for the object file NAME to object file list LIST.
    New entries are added at the end of the list. The original pointer
@@ -634,7 +634,7 @@ add_lto_object (struct lto_object_list *list, const char *name)
 
   list->last = n;
 }
-#endif /* OBJECT_FORMAT_NONE */
+#endif
 
 
 /* Perform a link-time recompilation and relink if any of the object
@@ -2750,8 +2750,10 @@ scan_prog_file (const char *prog_name, scanpass which_pass,
   LDFILE *ldptr = NULL;
   int sym_index, sym_count;
   int is_shared = 0;
+  int found_lto = 0;
 
-  if (which_pass != PASS_FIRST && which_pass != PASS_OBJ)
+  if (which_pass != PASS_FIRST && which_pass != PASS_OBJ
+      && which_pass != PASS_LTOINFO)
     return;
 
 #ifdef COLLECT_EXPORT_LIST
@@ -2764,6 +2766,7 @@ scan_prog_file (const char *prog_name, scanpass which_pass,
      eliminate scan_libraries() function.  */
   do
     {
+      found_lto = 0;
 #endif
       /* Some platforms (e.g. OSF4) declare ldopen as taking a
         non-const char * filename parameter, even though it will not
@@ -2806,6 +2809,19 @@ scan_prog_file (const char *prog_name, scanpass which_pass,
                        ++name;
 #endif
 
+                      if (which_pass == PASS_LTOINFO)
+                        {
+                         if (found_lto)
+                           continue;
+                         if (strncmp (name, "__gnu_lto_v1", 12) == 0)
+                           {
+                             add_lto_object (&lto_objects, prog_name);
+                             found_lto = 1;
+                             break;
+                           }
+                         continue;
+                       }
+
                      switch (is_ctor_dtor (name))
                        {
 #if TARGET_AIX_VERSION