Index: test/wasm/shared-needed.ll =================================================================== --- /dev/null +++ test/wasm/shared-needed.ll @@ -0,0 +1,21 @@ +; RUN: llc -O0 -filetype=obj %s -o %t.o +; RUN: wasm-ld -shared -o %t.so %t.o +; RUN: obj2yaml %t.so | FileCheck %s + +target triple = "wasm32-unknown-unknown" + +@data = global i32 2, align 4 + +define default void @foo() { +entry: + ret void +} + +; CHECK: Sections: +; CHECK-NEXT: - Type: CUSTOM +; CHECK-NEXT: Name: dylink +; CHECK-NEXT: MemorySize: 4 +; CHECK-NEXT: MemoryAlignment: 2 +; CHECK-NEXT: TableSize: 0 +; CHECK-NEXT: TableAlignment: 0 +; CHECK-NEXT: Needed: [] Index: wasm/InputFiles.h =================================================================== --- wasm/InputFiles.h +++ wasm/InputFiles.h @@ -33,6 +33,7 @@ public: enum Kind { ObjectKind, + SharedKind, ArchiveKind, BitcodeKind, }; @@ -129,6 +130,16 @@ std::unique_ptr WasmObj; }; +// .so file. +class SharedFile : public InputFile { +public: + explicit SharedFile(MemoryBufferRef M) : InputFile(SharedKind, M) {} + static bool classof(const InputFile *F) { return F->kind() == SharedKind; } + + void parse() override {} +}; + +// .bc file class BitcodeFile : public InputFile { public: explicit BitcodeFile(MemoryBufferRef M) : InputFile(BitcodeKind, M) {} Index: wasm/InputFiles.cpp =================================================================== --- wasm/InputFiles.cpp +++ wasm/InputFiles.cpp @@ -44,8 +44,14 @@ InputFile *lld::wasm::createObjectFile(MemoryBufferRef MB) { file_magic Magic = identify_magic(MB.getBuffer()); - if (Magic == file_magic::wasm_object) + if (Magic == file_magic::wasm_object) { + std::unique_ptr Bin = check(createBinary(MB)); + auto *Obj = dyn_cast(Bin.get()); + assert(Obj); + if (Obj->isSharedObject()) + return make(MB); return make(MB); + } if (Magic == file_magic::bitcode) return make(MB); Index: wasm/SymbolTable.h =================================================================== --- wasm/SymbolTable.h +++ wasm/SymbolTable.h @@ -39,6 +39,7 @@ void addCombinedLTOObject(); std::vector ObjectFiles; + std::vector SharedFiles; std::vector BitcodeFiles; std::vector SyntheticFunctions; std::vector SyntheticGlobals;