mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-18 19:06:44 +00:00
[lld/COFF] Support thin archives in /reproduce: files (#121512)
This already worked without /wholearchive; now it works with it too. (Only for thin archives containing relative file names, matching the ELF and Mach-O ports.)
This commit is contained in:
parent
119fc720a1
commit
6cd171dc33
@ -149,11 +149,19 @@ std::vector<MemoryBufferRef>
|
||||
lld::coff::getArchiveMembers(COFFLinkerContext &ctx, Archive *file) {
|
||||
std::vector<MemoryBufferRef> v;
|
||||
Error err = Error::success();
|
||||
|
||||
// Thin archives refer to .o files, so --reproduces needs the .o files too.
|
||||
bool addToTar = file->isThin() && ctx.driver.tar;
|
||||
|
||||
for (const Archive::Child &c : file->children(err)) {
|
||||
MemoryBufferRef mbref =
|
||||
CHECK(c.getMemoryBufferRef(),
|
||||
file->getFileName() +
|
||||
": could not get the buffer for a child of the archive");
|
||||
if (addToTar) {
|
||||
ctx.driver.tar->append(relativeToRoot(check(c.getFullName())),
|
||||
mbref.getBuffer());
|
||||
}
|
||||
v.push_back(mbref);
|
||||
}
|
||||
if (err)
|
||||
|
23
lld/test/COFF/linkrepro-thin-archives.s
Normal file
23
lld/test/COFF/linkrepro-thin-archives.s
Normal file
@ -0,0 +1,23 @@
|
||||
# REQUIRES: x86
|
||||
|
||||
# RUN: rm -rf %t.dir; split-file %s %t.dir
|
||||
|
||||
# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-windows %t.dir/foo.s -o %t.dir/foo.obj
|
||||
# RUN: cd %t.dir
|
||||
# RUN: llvm-ar rcsT foo.lib foo.obj
|
||||
|
||||
# RUN: lld-link foo.lib /out:/dev/null /reproduce:repro.tar \
|
||||
# RUN: /subsystem:console /machine:x64
|
||||
# RUN: tar tf repro.tar | FileCheck -DPATH='repro/%:t.dir' %s
|
||||
|
||||
# RUN: lld-link /wholearchive foo.lib /out:/dev/null /reproduce:repro2.tar \
|
||||
# RUN: /subsystem:console /machine:x64
|
||||
# RUN: tar tf repro2.tar | FileCheck -DPATH='repro2/%:t.dir' %s
|
||||
|
||||
# CHECK-DAG: [[PATH]]/foo.lib
|
||||
# CHECK-DAG: [[PATH]]/foo.obj
|
||||
|
||||
#--- foo.s
|
||||
.globl mainCRTStartup
|
||||
mainCRTStartup:
|
||||
nop
|
Loading…
x
Reference in New Issue
Block a user