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;
}
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;
--- /dev/null
+# 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