forked from OSchip/llvm-project
lld: add basic static library search
This is a very basic static library search addition. This is the pre-Xcode4 behaviour of searching all paths for the shared version before searching for the static version of the library. This behaviour is supposed to be inverted with `-search_paths_first` being the default. This adds the library search with the intention of providing the setup to merge the paths into one path and making it controllable by `OPT_search_paths_first`.
This commit is contained in:
parent
291dabefde
commit
116e38fd8b
|
@ -80,7 +80,15 @@ static Optional<std::string> findDylib(StringRef name) {
|
|||
if (fs::exists(path))
|
||||
return path;
|
||||
}
|
||||
error("library not found for -l" + name);
|
||||
return None;
|
||||
}
|
||||
|
||||
static Optional<std::string> findArchive(StringRef name) {
|
||||
for (StringRef dir : config->searchPaths) {
|
||||
std::string path = (dir + "/lib" + name + ".a").str();
|
||||
if (fs::exists(path))
|
||||
return path;
|
||||
}
|
||||
return None;
|
||||
}
|
||||
|
||||
|
@ -286,10 +294,16 @@ bool macho::link(llvm::ArrayRef<const char *> argsArr, bool canExitEarly,
|
|||
case OPT_INPUT:
|
||||
addFile(arg->getValue());
|
||||
break;
|
||||
case OPT_l:
|
||||
if (Optional<std::string> path = findDylib(arg->getValue()))
|
||||
case OPT_l: {
|
||||
StringRef name = arg->getValue();
|
||||
if (Optional<std::string> path = findDylib(name))
|
||||
addFile(*path);
|
||||
else if (Optional<std::string> path = findArchive(name))
|
||||
addFile(*path);
|
||||
else
|
||||
error("library not found for -l" + name);
|
||||
break;
|
||||
}
|
||||
case OPT_platform_version: {
|
||||
handlePlatformVersion(it, end); // Can advance "it".
|
||||
break;
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
# REQUIRES: x86
|
||||
|
||||
# RUN: mkdir -p %t
|
||||
#
|
||||
# RUN: llvm-mc -filetype obj -triple x86_64-apple-darwin %p/Inputs/libgoodbye.s -o %t/goodbye.o
|
||||
# RUN: llvm-ar --format=darwin crs %t/libgoodbye.a %t/goodbye.o
|
||||
#
|
||||
# RUN: llvm-mc -filetype obj -triple x86_64-apple-darwin %s -o %t/test.o
|
||||
# RUN: lld -flavor darwinnew -o %t/test -Z -L%t -lgoodbye %t/test.o
|
||||
#
|
||||
# RUN: llvm-objdump --syms -d -r %t/test | FileCheck %s
|
||||
|
||||
# CHECK: SYMBOL TABLE:
|
||||
# CHECK: {{0+}}[[ADDR:[0-9a-f]+]] g O __TEXT,__cstring _goodbye_world
|
||||
|
||||
# CHECK: Disassembly of section __TEXT,__text
|
||||
# CHECK-LABEL: <_main>:
|
||||
# CHECK: leaq {{.*}}(%rip), %rsi # [[ADDR]] <_goodbye_world>
|
||||
|
||||
.section __TEXT,__text
|
||||
.global _main
|
||||
|
||||
_main:
|
||||
movl $0x2000004, %eax # write()
|
||||
mov $1, %rdi # stdout
|
||||
leaq _goodbye_world(%rip), %rsi
|
||||
mov $15, %rdx # length
|
||||
syscall
|
||||
mov $0, %rax
|
||||
ret
|
Loading…
Reference in New Issue