https://github.com/OldWorldOrdr updated https://github.com/llvm/llvm-project/pull/78628
>From e73fc2d0263e9e601f2964a90cfe347e8d2bb87c Mon Sep 17 00:00:00 2001 From: OldWorldOrdr <joey.t.reinh...@gmail.com> Date: Thu, 18 Jan 2024 16:20:52 -0500 Subject: [PATCH 1/5] [lld-macho] Find objects in library search path --- lld/MachO/Driver.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/lld/MachO/Driver.cpp b/lld/MachO/Driver.cpp index 401459a054394e..f04165f5c02615 100644 --- a/lld/MachO/Driver.cpp +++ b/lld/MachO/Driver.cpp @@ -95,11 +95,16 @@ static std::optional<StringRef> findLibrary(StringRef name) { findPathCombination("lib" + name, config->librarySearchPaths, {".tbd", ".dylib", ".so"})) return path; - return findPathCombination("lib" + name, config->librarySearchPaths, - {".a"}); + else if (std::optional<StringRef> path = findPathCombination( + "lib" + name, config->librarySearchPaths, {".a"})) + return path; + return findPathCombination(name, config->librarySearchPaths, {""}); } - return findPathCombination("lib" + name, config->librarySearchPaths, - {".tbd", ".dylib", ".so", ".a"}); + if (std::optional<StringRef> path = + findPathCombination("lib" + name, config->librarySearchPaths, + {".tbd", ".dylib", ".so", ".a"})) + return path; + return findPathCombination(name, config->librarySearchPaths, {""}); }; std::optional<StringRef> path = doFind(); >From 5b29c5da6770982fb2f36edcd3a367893b18a19d Mon Sep 17 00:00:00 2001 From: OldWorldOrdr <joey.t.reinh...@gmail.com> Date: Thu, 18 Jan 2024 21:16:57 -0500 Subject: [PATCH 2/5] [lld-macho] find objects in library search path version 2 --- lld/MachO/Driver.cpp | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/lld/MachO/Driver.cpp b/lld/MachO/Driver.cpp index f04165f5c02615..f8b01da5255c6d 100644 --- a/lld/MachO/Driver.cpp +++ b/lld/MachO/Driver.cpp @@ -90,21 +90,19 @@ static std::optional<StringRef> findLibrary(StringRef name) { return entry->second; auto doFind = [&] { + // Special case for Csu support files. + if (name.ends_with(".o")) + return findPathCombination(name, config->librarySearchPaths, {""}); if (config->searchDylibsFirst) { if (std::optional<StringRef> path = findPathCombination("lib" + name, config->librarySearchPaths, {".tbd", ".dylib", ".so"})) return path; - else if (std::optional<StringRef> path = findPathCombination( - "lib" + name, config->librarySearchPaths, {".a"})) - return path; - return findPathCombination(name, config->librarySearchPaths, {""}); + return findPathCombination("lib" + name, config->librarySearchPaths, + {".a"}); } - if (std::optional<StringRef> path = - findPathCombination("lib" + name, config->librarySearchPaths, - {".tbd", ".dylib", ".so", ".a"})) - return path; - return findPathCombination(name, config->librarySearchPaths, {""}); + return findPathCombination("lib" + name, config->librarySearchPaths, + {".tbd", ".dylib", ".so", ".a"}); }; std::optional<StringRef> path = doFind(); >From 5aab87e5c580ca1dba654fb00cf9571c7e3c7999 Mon Sep 17 00:00:00 2001 From: OldWorldOrdr <joey.t.reinh...@gmail.com> Date: Fri, 19 Jan 2024 01:32:20 -0500 Subject: [PATCH 3/5] add test case --- lld/test/MachO/link-csu-obj.s | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 lld/test/MachO/link-csu-obj.s diff --git a/lld/test/MachO/link-csu-obj.s b/lld/test/MachO/link-csu-obj.s new file mode 100644 index 00000000000000..00cb26bb260743 --- /dev/null +++ b/lld/test/MachO/link-csu-obj.s @@ -0,0 +1,10 @@ +# REQUIRES: x86 +# RUN: mkdir -p %t +# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %p/Inputs/libhello.s -o %t/hello.o +# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %s -o %t/main.o +# RUN: %lld -L %t %t/main.o %t/hello.o -o %t/a.out + +.globl _main +_main: + call _print_hello + ret >From 6e8b321b1ed74665f26e5ee6dd0a04ec7b4dbb89 Mon Sep 17 00:00:00 2001 From: OldWorldOrdr <joey.t.reinh...@gmail.com> Date: Fri, 19 Jan 2024 11:38:25 -0500 Subject: [PATCH 4/5] Improve comment --- lld/MachO/Driver.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lld/MachO/Driver.cpp b/lld/MachO/Driver.cpp index f8b01da5255c6d..7ac3f51cec103f 100644 --- a/lld/MachO/Driver.cpp +++ b/lld/MachO/Driver.cpp @@ -90,7 +90,8 @@ static std::optional<StringRef> findLibrary(StringRef name) { return entry->second; auto doFind = [&] { - // Special case for Csu support files. + // Special case for Csu support files required for Mac OS X 10.7 and older + // (crt1.o) if (name.ends_with(".o")) return findPathCombination(name, config->librarySearchPaths, {""}); if (config->searchDylibsFirst) { >From 98506602d1960277908875bab7e76c3c6fbaea09 Mon Sep 17 00:00:00 2001 From: OldWorldOrdr <joey.t.reinh...@gmail.com> Date: Fri, 19 Jan 2024 12:33:40 -0500 Subject: [PATCH 5/5] improve test --- lld/test/MachO/{link-csu-obj.s => link-csu-object.s} | 4 ++++ 1 file changed, 4 insertions(+) rename lld/test/MachO/{link-csu-obj.s => link-csu-object.s} (79%) diff --git a/lld/test/MachO/link-csu-obj.s b/lld/test/MachO/link-csu-object.s similarity index 79% rename from lld/test/MachO/link-csu-obj.s rename to lld/test/MachO/link-csu-object.s index 00cb26bb260743..e6f5ff7e52e325 100644 --- a/lld/test/MachO/link-csu-obj.s +++ b/lld/test/MachO/link-csu-object.s @@ -3,6 +3,10 @@ # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %p/Inputs/libhello.s -o %t/hello.o # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %s -o %t/main.o # RUN: %lld -L %t %t/main.o %t/hello.o -o %t/a.out +# RUN: llvm-nm %t/a.out | FileCheck %s + +# CHECK: _main +# CHECK: _print_hello .globl _main _main: _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits