[binutils-gdb] lto: Don't check format of IR dummy file
"H.J. Lu via Binutils-cvs" <[email protected]>
| Newsgroups | gmane.comp.gnu.binutils.cvs |
|---|---|
| Message-ID | <[email protected]> |
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=d658ddcc389085970ac025414cae7ad908f40726 commit d658ddcc389085970ac025414cae7ad908f40726 Author: H.J. Lu <[email protected]> Date: Fri Aug 28 09:08:39 2026 +0800 lto: Don't check format of IR dummy file 1. Don't check format of IR dummy file in lang_check. 2. Allow empty DESTLIST in lang_list_remove_tail. PR ld/34572 * ldlang.c (lang_check): Don't check format of IR dummy file. (debug_file_chain): New. (debug_input_files): Use debug_file_chain. (lang_list_remove_tail): Also check empty DESTLIST. * testsuite/ld-plugin/dummy.s: Add .note.GNU-stack section. * testsuite/ld-plugin/lto.exp: Add PR ld/34572 tests. * testsuite/ld-plugin/pr34572.rd: New file. * testsuite/ld-plugin/pr34572a.c: Likewise. * testsuite/ld-plugin/pr34572b.c: Likewise. Signed-off-by: H.J. Lu <[email protected]> Diff: --- ld/ldlang.c | 19 ++++++++++--- ld/testsuite/ld-plugin/dummy.s | 2 +- ld/testsuite/ld-plugin/lto.exp | 57 +++++++++++++++++++++++++++++++++++++++ ld/testsuite/ld-plugin/pr34572.rd | 6 +++++ ld/testsuite/ld-plugin/pr34572a.c | 8 ++++++ ld/testsuite/ld-plugin/pr34572b.c | 4 +++ 6 files changed, 91 insertions(+), 5 deletions(-) diff --git a/ld/ldlang.c b/ld/ldlang.c index 65494acca00..2e4f9fffbee 100644 --- a/ld/ldlang.c +++ b/ld/ldlang.c @@ -7617,6 +7617,9 @@ lang_check (void) if (file->flags.claimed) continue; input_bfd = file->the_bfd; + /* Don't check format of IR dummy file. */ + if ((input_bfd->flags & BFD_PLUGIN) != 0) + continue; compatible = bfd_arch_get_compatible (input_bfd, link_info.output_bfd, command_line.accept_unknown_input_arch); @@ -7926,11 +7929,11 @@ lang_set_flags (lang_memory_region_type *ptr, const char *flags, int invert) } static void -debug_input_files (void) +debug_file_chain (lang_statement_list_type *chain) { lang_input_statement_type *f; - for (f = &input_file_chain.head->input_statement; + for (f = &chain->head->input_statement; f != NULL; f = f->next_real_file) if (f->the_bfd) @@ -7939,6 +7942,12 @@ debug_input_files (void) fprintf (stderr, "input: %s\n", f->filename); } +static void +debug_input_files (void) +{ + debug_file_chain (&input_file_chain); +} + /* Call a function on each real input file. This function will be called on an archive, but not on the elements. */ @@ -8392,8 +8401,10 @@ lang_list_remove_tail (lang_statement_list_type *destlist, lang_statement_list_type *origlist) { union lang_statement_union **savetail; - /* Check that ORIGLIST really is an earlier state of DESTLIST. */ - ASSERT (origlist->head == destlist->head); + /* Check that ORIGLIST really is an earlier state of DESTLIST or an + empty list. */ + ASSERT ((origlist->head == NULL && origlist->tail == &destlist->head) + || origlist->head == destlist->head); savetail = origlist->tail; origlist->head = *(savetail); origlist->tail = destlist->tail; diff --git a/ld/testsuite/ld-plugin/dummy.s b/ld/testsuite/ld-plugin/dummy.s index 8b137891791..0f5ab47ca42 100644 --- a/ld/testsuite/ld-plugin/dummy.s +++ b/ld/testsuite/ld-plugin/dummy.s @@ -1 +1 @@ - + .section .note.GNU-stack,"",%progbits diff --git a/ld/testsuite/ld-plugin/lto.exp b/ld/testsuite/ld-plugin/lto.exp index 4504fd4be01..1e3fe182e14 100644 --- a/ld/testsuite/ld-plugin/lto.exp +++ b/ld/testsuite/ld-plugin/lto.exp @@ -1385,4 +1385,61 @@ if { [check_lto_fat_available] } { } } +# Skip native x32 and i?86 targets since system LLVMgold.so may not be +# compatible with native x32 and i?86 targets binutils. +if { ![istarget "x86_64-*-linux*-gnux32"] + && ![istarget "i?86-*-*"] + && [info exists CLANG_FOR_TARGET] + && ![string match "" $llvm_plug_opt] } { + set CC_FOR_TARGET_saved "$CC_FOR_TARGET" + set CC_FOR_TARGET "$CLANG_FOR_TARGET" + run_cc_link_tests [list \ + [list \ + "Build pr34572a.o" \ + "" \ + "-flto" \ + {pr34572a.c} \ + ] \ + [list \ + "Build pr34572b.o" \ + "" \ + "-flto" \ + {pr34572b.c} \ + ] \ + [list \ + "Build pr34572a.exe" \ + "-flto -Wl,--start-lib tmpdir/pr34572a.o -Wl,--end-lib" \ + "" \ + {dummy.s} \ + {} \ + "pr34572a.exe" + ] \ + ] + + if { [isnative] } { + if {[file exists tmpdir/pr34572a.exe]} { + set exec_output [run_host_cmd "tmpdir/pr34572a.exe" ""] + if [string match "PASS\n" $exec_output] then { + pass "Run pr34572a.exe" + } else { + fail "Run pr34572a.exe" + } + } + } + + run_ld_link_tests [list \ + [list \ + "Build pr34572b.exe" \ + "$llvm_plug_opt --start-lib tmpdir/pr34572b.o --end-lib" \ + "" \ + "" \ + {dummy.s} \ + {{readelf {-sW} pr34572.rd}} \ + "pr34572b.exe" \ + ] \ + ] + + set CC_FOR_TARGET "$CC_FOR_TARGET_saved" +} + restore_notify diff --git a/ld/testsuite/ld-plugin/pr34572.rd b/ld/testsuite/ld-plugin/pr34572.rd new file mode 100644 index 00000000000..dcf0d108a83 --- /dev/null +++ b/ld/testsuite/ld-plugin/pr34572.rd @@ -0,0 +1,6 @@ +#... +Symbol table '\.symtab' contains [0-9]+ entries: + +Num: +Value +Size Type +Bind +Vis +Ndx Name +#... + +[0-9]+: +[0-9a-f]+ +[0-9]+ +FUNC +GLOBAL +DEFAULT .*[0-9]+ _start +#pass diff --git a/ld/testsuite/ld-plugin/pr34572a.c b/ld/testsuite/ld-plugin/pr34572a.c new file mode 100644 index 00000000000..4e63772629e --- /dev/null +++ b/ld/testsuite/ld-plugin/pr34572a.c @@ -0,0 +1,8 @@ +#include <stdio.h> + +int +main (void) +{ + printf ("PASS\n"); + return 0; +} diff --git a/ld/testsuite/ld-plugin/pr34572b.c b/ld/testsuite/ld-plugin/pr34572b.c new file mode 100644 index 00000000000..ca92bf15a24 --- /dev/null +++ b/ld/testsuite/ld-plugin/pr34572b.c @@ -0,0 +1,4 @@ +void +_start (void) +{ +}