PR24981, Hit assertion failure in ld/ldlang.c:7504
authorAlan Modra <amodra@gmail.com>
Thu, 12 Sep 2019 07:55:46 +0000 (17:25 +0930)
committerAlan Modra <amodra@gmail.com>
Thu, 12 Sep 2019 12:15:25 +0000 (21:45 +0930)
This fixes a problem with commit 128bf1fe608, a patch I made
2019-08-06.   Apparently it is possible to trigger the assertion I
added during an LTO bootstrap, something I haven't reproduced.
However, I did find a case triggered by an odd linker script feature
that allows a file to be loaded from the script without specifying
that file on the command line.  Regarding input sections:
  "When you use a file name which is not an archive:file specifier
   and does not contain any wild card characters, the linker will
   first see if you also specified the file name on the linker command
   line or in an INPUT command.  If you did not, the linker will
   attempt to open the file as an input file, as though it appeared on
   the command line."

So putting
  .foo : { foo.a(*) }
into a script supposedly extracts foo.a into .foo.  Except it doesn't,
since this feature is meant for object files only.  Well anyway,
assuming --whole-archive was given on the command line, foo.a contains
a -flto object and no other objects involved were -flto then we'll hit
the assert due to files added like foo.a here *not* having their input
statement put on the general statement list.  Why these are not put on
the statement list isn't obvious but it has been that way since commit
193c5f93a17 in 1994.

PR 24981
* ldlang.c (lang_process): Remove assertion.  Comment.

ld/ChangeLog
ld/ldlang.c

index ca12975e948e3949ef5b41947147203d77ce0e0f..b3207cc6c6e5317a9a2014ed98c19c091dae1b76 100644 (file)
@@ -1,3 +1,8 @@
+2019-09-12  Alan Modra  <amodra@gmail.com>
+
+       PR 24981
+       * ldlang.c (lang_process): Remove assertion.  Comment.
+
 2019-09-11  Alan Modra  <amodra@gmail.com>
 
        * emultempl/elf32.em: Remove "misnamed" comment.  Rename to..
index d5a2b497e1d6321e59ac3422f48807ab13e46080..5a34e5cc230674fe640181f934741f9187969fba 100644 (file)
@@ -7502,8 +7502,9 @@ lang_process (void)
              prev = find_next_input_statement (prev);
              if (*prev != (void *) plugin_insert->next_real_file)
                {
-                 /* Huh?  We didn't find the expected input statement.  */
-                 ASSERT (0);
+                 /* We didn't find the expected input statement.
+                    This can happen due to lookup_name creating input
+                    statements not linked into the statement list.  */
                  prev = &plugin_insert->header.next;
                }
            }
This page took 0.029804 seconds and 4 git commands to generate.