diff options
author | Alan Modra <amodra@gmail.com> | 2023-01-31 21:48:58 +1030 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2023-01-31 21:51:09 +1030 |
commit | 081609f5ff3e7d469b9ea7621d924504c4e3c3b2 (patch) | |
tree | 8737b76b0de37aa19bb401cd009cc5261de0c8a6 | |
parent | 0fcf99b8ab5ccbde30fa7d36742e670cd4df48ef (diff) | |
download | gdb-081609f5ff3e7d469b9ea7621d924504c4e3c3b2.zip gdb-081609f5ff3e7d469b9ea7621d924504c4e3c3b2.tar.gz gdb-081609f5ff3e7d469b9ea7621d924504c4e3c3b2.tar.bz2 |
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.
-rw-r--r-- | ld/ldlang.c | 2 | ||||
-rw-r--r-- | ld/pe-dll.c | 16 |
2 files changed, 2 insertions, 16 deletions
diff --git a/ld/ldlang.c b/ld/ldlang.c index b66d8c6..84a2914 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 49544ba..2956eef 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); } |