[PATCH] D76562: [llvm-objcopy] Support llvm-strip-11 as argv[0]

Fangrui Song via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Sat Mar 21 23:58:15 PDT 2020


MaskRay created this revision.
MaskRay added reviewers: grimar, jhenderson, nathanchance.
Herald added a reviewer: alexshap.
Herald added a reviewer: rupprecht.
Herald added subscribers: llvm-commits, abrachet.
Herald added a project: LLVM.
MaskRay added a reviewer: compnerd.

Debian and some other distributions install llvm-strip as llvm-strip-$major .

D54193 <https://reviews.llvm.org/D54193> made it work with llvm-strip-$major but did not add a test.
The behavior was regressed by D69146 <https://reviews.llvm.org/D69146>.

Fixes https://github.com/ClangBuiltLinux/linux/issues/940


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D76562

Files:
  llvm/test/tools/llvm-objcopy/tool-name.test
  llvm/tools/llvm-objcopy/llvm-objcopy.cpp


Index: llvm/tools/llvm-objcopy/llvm-objcopy.cpp
===================================================================
--- llvm/tools/llvm-objcopy/llvm-objcopy.cpp
+++ llvm/tools/llvm-objcopy/llvm-objcopy.cpp
@@ -327,11 +327,19 @@
 int main(int argc, char **argv) {
   InitLLVM X(argc, argv);
   ToolName = argv[0];
-  ToolType Tool = StringSwitch<ToolType>(sys::path::stem(ToolName))
-                      .EndsWith("strip", ToolType::Strip)
-                      .EndsWith("install-name-tool", ToolType::InstallNameTool)
-                      .EndsWith("install_name_tool", ToolType::InstallNameTool)
-                      .Default(ToolType::Objcopy);
+
+  StringRef Stem = sys::path::stem(ToolName);
+  auto Is = [&](StringRef Tool) {
+    auto I = Stem.rfind_lower(Tool);
+    return I != StringRef::npos &&
+           (I + Tool.size() == Stem.size() || !isAlnum(Stem[I + Tool.size()]));
+  };
+  ToolType Tool = ToolType::Objcopy;
+  if (Is("strip"))
+    Tool = ToolType::Strip;
+  else if (Is("install-name-tool") || Is("install_name_tool"))
+    Tool = ToolType::InstallNameTool;
+
   // Expand response files.
   // TODO: Move these lines, which are copied from lib/Support/CommandLine.cpp,
   // into a separate function in the CommandLine library and call that function
Index: llvm/test/tools/llvm-objcopy/tool-name.test
===================================================================
--- /dev/null
+++ llvm/test/tools/llvm-objcopy/tool-name.test
@@ -0,0 +1,32 @@
+## Don't make symlinks on Windows.
+# UNSUPPORTED: system-windows
+
+# RUN: rm -rf %t
+# RUN: mkdir %t
+# RUN: ln -s llvm-strip %t/llvm-strip-11
+# RUN: ln -s llvm-strip %t/strip.exe
+
+# RUN: llvm-strip --help | FileCheck --check-prefix=STRIP %s
+# RUN: %t/llvm-strip-11 --help | FileCheck --check-prefix=STRIP %s
+# RUN: %t/strip.exe --help | FileCheck --check-prefix=STRIP %s
+
+# STRIP: OVERVIEW: llvm-strip tool
+
+# RUN: ln -s llvm-objcopy %t/llvm-objcopy-11
+# RUN: ln -s llvm-objcopy %t/objcopy.exe
+
+# RUN: llvm-objcopy --help | FileCheck --check-prefix=OBJCOPY %s
+# RUN: %t/llvm-objcopy-11 --help | FileCheck --check-prefix=OBJCOPY %s
+# RUN: %t/objcopy.exe --help | FileCheck --check-prefix=OBJCOPY %s
+
+# OBJCOPY: OVERVIEW: llvm-objcopy tool
+
+## This driver emulates install_name_tool on macOS.
+# RUN: ln -s llvm-install-name-tool %t/llvm-install-name-tool-11
+# RUN: ln -s llvm-install-name-tool %t/install_name_tool
+
+# RUN: llvm-install-name-tool --help | FileCheck --check-prefix=INSTALL %s
+# RUN: %t/llvm-install-name-tool-11 --help | FileCheck --check-prefix=INSTALL %s
+# RUN: %t/install_name_tool --help | FileCheck --check-prefix=INSTALL %s
+
+# INSTALL: OVERVIEW: llvm-install-name-tool tool


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D76562.251877.patch
Type: text/x-patch
Size: 2704 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200322/01f602c8/attachment.bin>


More information about the llvm-commits mailing list