From: Alan Modra Date: Tue, 31 Jan 2023 11:18:58 +0000 (+1030) Subject: Re: Another fix for EFI generation with LTO enabled X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=081609f5ff3e7d469b9ea7621d924504c4e3c3b2;p=binutils-gdb.git Re: Another fix for EFI generation with LTO enabled Revert 1c66b8a03989 and instead fix the broken list pointer. PR 29998 * pe-dll.c (build_filler_bfd): Revert last change. * ldlang.c (lang_process): When rescanning archives for lto, fix file_chain.tail pointer if the insert point happens to be at the end of the list. --- diff --git a/ld/ldlang.c b/ld/ldlang.c index b66d8c6bc1d..84a2914fc26 100644 --- a/ld/ldlang.c +++ b/ld/ldlang.c @@ -8017,6 +8017,8 @@ lang_process (void) *insert = &files.head->input_statement; files.head = (lang_statement_union_type *) *iter; *iter = temp; + if (file_chain.tail == (lang_statement_union_type **) insert) + file_chain.tail = (lang_statement_union_type **) iter; if (my_arch != NULL) { lang_input_statement_type *parent = bfd_usrdata (my_arch); diff --git a/ld/pe-dll.c b/ld/pe-dll.c index 49544babf11..2956eef1ca9 100644 --- a/ld/pe-dll.c +++ b/ld/pe-dll.c @@ -1082,22 +1082,6 @@ build_filler_bfd (bool include_edata) bfd_set_section_size (reloc_s, 0); - /* FIXME: I am not sure if this is the right way to solve PR 29998. - It might be better to change ldlang.c:lang_statement_append() so that it - checks to see if *(list->tail) is non-NULL and if so, set element->next - to its contents. - - The issue is that this function is called after lang_process(). - lang_process () will have gone through any input archives, and if the - last input file is an archive then it will have left file_chain.tail - pointing to the last used element of that archive. Calling - ldlang_add_file() here then blows aaway the link to that archive element, - effectively deleting it from the input. In order to prevent this, the - assignment below fills in the next field of the statement that is about - to appended to the file chain. */ - if (file_chain.tail != NULL) - filler_file->next = & (* file_chain.tail)->input_statement; - ldlang_add_file (filler_file); }