Skip to content

Commit c2dd612

Browse files
authored
[llvm-lib] Add /llvmlibindex:no to disable writing an index (#120596)
This can be used with /llvmlibthin to create thin archives without an index, which is a prerequisite for porting https://reviews.llvm.org/D117284 to lld-link. Creating files like this is already possible with `llvm-ar rcS`, so this doesn't add additional problems.
1 parent 4044886 commit c2dd612

File tree

3 files changed

+26
-2
lines changed

3 files changed

+26
-2
lines changed

lld/test/COFF/thin-archive.s

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,22 @@
55
# RUN: llvm-mc -filetype=obj -triple=x86_64-windows-msvc -o %t.lib.obj \
66
# RUN: %S/Inputs/mangled-symbol.s
77
# RUN: lld-link /lib /out:%t.lib %t.lib.obj
8-
# RUN: lld-link /lib /llvmlibthin /out:%t_thin.lib %t.lib.obj
8+
# RUN: lld-link /lib /llvmlibindex:no /out:%t_noindex.lib %t.lib.obj
9+
# RUN: lld-link /lib /llvmlibthin /llvmlibindex /out:%t_thin.lib %t.lib.obj
10+
# RUN: lld-link /lib /llvmlibthin /llvmlibindex:no \
11+
# RUN: /out:%t_thin_noindex.lib %t.lib.obj
12+
13+
# RUN: llvm-nm --print-armap %t.lib \
14+
# RUN: | FileCheck %s --check-prefix=SYMTAB
15+
# RUN: llvm-nm --print-armap %t_noindex.lib \
16+
# RUN: | FileCheck %s --check-prefix=NO-SYMTAB
17+
# RUN: llvm-nm --print-armap %t_thin.lib \
18+
# RUN: | FileCheck %s --check-prefix=SYMTAB
19+
# RUN: llvm-nm --print-armap %t_thin_noindex.lib \
20+
# RUN: | FileCheck %s --check-prefix=NO-SYMTAB
21+
22+
# SYMTAB: ?f@@YAHXZ in
23+
# NO-SYMTAB-NOT: ?f@@YAHXZ in
924

1025
# RUN: lld-link /entry:main %t.main.obj %t.lib /out:%t.exe 2>&1 | \
1126
# RUN: FileCheck --allow-empty %s

llvm/lib/ToolDrivers/llvm-lib/LibDriver.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -516,8 +516,14 @@ int llvm::libDriverMain(ArrayRef<const char *> ArgsArr) {
516516
std::reverse(Members.begin(), Members.end());
517517

518518
bool Thin = Args.hasArg(OPT_llvmlibthin);
519+
520+
auto Symtab = Args.hasFlag(OPT_llvmlibindex, OPT_llvmlibindex_no,
521+
/*default=*/true)
522+
? SymtabWritingMode::NormalSymtab
523+
: SymtabWritingMode::NoSymtab;
524+
519525
if (Error E = writeArchive(
520-
OutputPath, Members, SymtabWritingMode::NormalSymtab,
526+
OutputPath, Members, Symtab,
521527
Thin ? object::Archive::K_GNU : object::Archive::K_COFF,
522528
/*Deterministic=*/true, Thin, nullptr, COFF::isArm64EC(LibMachine))) {
523529
handleAllErrors(std::move(E), [&](const ErrorInfoBase &EI) {

llvm/lib/ToolDrivers/llvm-lib/Options.td

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ def nativedeffile : P<"defArm64Native", "def file to use to generate native ARM6
2828
def llvmlibthin : F<"llvmlibthin">,
2929
HelpText<"Make .lib point to .obj files instead of copying their contents">;
3030

31+
defm llvmlibindex : B<"llvmlibindex", "Write an index to the output (default)",
32+
"Do not write an index to the output">;
33+
3134
def llvmlibempty : F<"llvmlibempty">,
3235
HelpText<"When given no contents, produce an empty .lib file">;
3336

0 commit comments

Comments
 (0)