Index: ELF/Driver.cpp =================================================================== --- ELF/Driver.cpp +++ ELF/Driver.cpp @@ -1303,8 +1303,11 @@ Symtab->scanVersionScript(); // Create wrapped symbols for -wrap option. - for (auto *Arg : Args.filtered(OPT_wrap)) - Symtab->addSymbolWrap(Arg->getValue()); + std::vector Wraps = Args.getAllArgValues(OPT_wrap); + llvm::sort(Wraps.begin(), Wraps.end()); + Wraps.erase(std::unique(Wraps.begin(), Wraps.end()), Wraps.end()); + for (StringRef Name : Wraps) + Symtab->addSymbolWrap(Name); // Do link-time optimization if given files are LLVM bitcode files. // This compiles bitcode files into real object files. Index: test/ELF/wrap.s =================================================================== --- test/ELF/wrap.s +++ test/ELF/wrap.s @@ -6,6 +6,8 @@ // RUN: llvm-objdump -d -print-imm-hex %t3 | FileCheck %s // RUN: ld.lld -o %t3 %t %t2 --wrap foo -wrap=nosuchsym // RUN: llvm-objdump -d -print-imm-hex %t3 | FileCheck %s +// RUN: ld.lld -o %t3 %t %t2 --wrap foo --wrap foo -wrap=nosuchsym +// RUN: llvm-objdump -d -print-imm-hex %t3 | FileCheck %s // CHECK: _start: // CHECK-NEXT: movl $0x11010, %edx