diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp index 281510b7ac6ea..7ffd3f2219757 100644 --- a/lld/COFF/Driver.cpp +++ b/lld/COFF/Driver.cpp @@ -2557,14 +2557,14 @@ void LinkerDriver::linkerMain(ArrayRef argsArr) { // it. if (symtab.findUnderscore("_load_config_used")) symtab.addGCRoot(symtab.mangle("_load_config_used")); - }); - if (args.hasArg(OPT_include_optional)) { - // Handle /includeoptional - for (auto *arg : args.filtered(OPT_include_optional)) - if (isa_and_nonnull(ctx.symtab.find(arg->getValue()))) - ctx.symtab.addGCRoot(arg->getValue()); - } + if (args.hasArg(OPT_include_optional)) { + // Handle /includeoptional + for (auto *arg : args.filtered(OPT_include_optional)) + if (isa_and_nonnull(symtab.find(arg->getValue()))) + symtab.addGCRoot(arg->getValue()); + } + }); } while (run()); } diff --git a/lld/test/COFF/arm64x-includeoptional.s b/lld/test/COFF/arm64x-includeoptional.s new file mode 100644 index 0000000000000..40e885bd1c453 --- /dev/null +++ b/lld/test/COFF/arm64x-includeoptional.s @@ -0,0 +1,17 @@ +// REQUIRE: aarch64 + +// RUN: llvm-mc -filetype=obj -triple=aarch64-windows %s -o %t.arm64.obj +// RUN: llvm-mc -filetype=obj -triple=arm64ec-windows %s -o %t.arm64ec.obj +// RUN: llvm-mc -filetype=obj -triple=arm64ec-windows %S/Inputs/loadconfig-arm64ec.s -o %t-loadconfig-arm64ec.obj +// RUN: llvm-mc -filetype=obj -triple=aarch64-windows %S/Inputs/loadconfig-arm64.s -o %t-loadconfig-arm64.obj + +// RUN: llvm-lib -machine:arm64x -out:%t-test.lib %t.arm64.obj %t.arm64ec.obj %t-loadconfig-arm64ec.obj %t-loadconfig-arm64.obj +// RUN: lld-link -machine:arm64x -dll -noentry -out:%t.dll %t-test.lib -includeoptional:sym + +// RUN: llvm-readobj --hex-dump=.test %t.dll | FileCheck %s +// CHECK: 0x180004000 01000000 01000000 + + .globl sym + .section .test,"dr" +sym: + .word 1