Index: ELF/LinkerScript.h =================================================================== --- ELF/LinkerScript.h +++ ELF/LinkerScript.h @@ -146,7 +146,9 @@ // Also it may be surrounded with SORT() command, so contains sorting rules. struct SectionPattern { SectionPattern(StringMatcher &&Pat1, StringMatcher &&Pat2) - : ExcludedFilePat(Pat1), SectionPat(Pat2) {} + : ExcludedFilePat(Pat1), SectionPat(Pat2), + SortOuter(SortSectionPolicy::Default), + SortInner(SortSectionPolicy::Default) {} StringMatcher ExcludedFilePat; StringMatcher SectionPat; Index: ELF/ScriptParser.cpp =================================================================== --- ELF/ScriptParser.cpp +++ ELF/ScriptParser.cpp @@ -854,7 +854,12 @@ } else if (peek() == "(") { Cmd->SectionCommands.push_back(readInputSectionDescription(Tok)); } else { - setError("unknown command " + Tok); + // We have a file name and no input sections description. It is not a + // commonly used syntax, but still acceptable. In that case, all sections + // from the file will be included. + InputSectionDescription *ISD = make(Tok); + ISD->SectionPatterns.push_back({{}, StringMatcher({"*"})}); + Cmd->SectionCommands.push_back(ISD); } } Index: test/ELF/linkerscript/no-filename-spec.s =================================================================== --- test/ELF/linkerscript/no-filename-spec.s +++ test/ELF/linkerscript/no-filename-spec.s @@ -0,0 +1,17 @@ +# REQUIRES: x86 +# RUN: echo '.section .bar, "a"; .quad 1;' | \ +# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux - -o %tfile1.o +# RUN: echo '.section .zed, "a"; .quad 2;' | \ +# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux - -o %tfile2.o + +## We have a file name and no input sections description. In that case, all +## sections from the file specified should be included. Check that. +# RUN: ld.lld -o %t --script %s %tfile1.o %tfile2.o +# RUN: llvm-objdump -s %t | FileCheck %s + +# CHECK: Contents of section .foo: +# CHECK-NEXT: 01000000 00000000 02000000 00000000 + +SECTIONS { + .foo : { *file1.o *file2.o } +}