[llvm] 47bb456 - [llvm-obcopy][MachO] Add error for MH_PRELOAD

Keith Smiley via llvm-commits llvm-commits at lists.llvm.org
Fri Nov 12 19:20:36 PST 2021


Author: Keith Smiley
Date: 2021-11-12T19:18:34-08:00
New Revision: 47bb456b2ffd774990a6aca45f6b90183e2075c3

URL: https://github.com/llvm/llvm-project/commit/47bb456b2ffd774990a6aca45f6b90183e2075c3
DIFF: https://github.com/llvm/llvm-project/commit/47bb456b2ffd774990a6aca45f6b90183e2075c3.diff

LOG: [llvm-obcopy][MachO] Add error for MH_PRELOAD

Previously this would crash. Fixes https://bugs.llvm.org/show_bug.cgi?id=51877

Differential Revision: https://reviews.llvm.org/D113819

Added: 
    llvm/test/tools/llvm-objcopy/MachO/mh-preload-unsupported.yaml

Modified: 
    llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/test/tools/llvm-objcopy/MachO/mh-preload-unsupported.yaml b/llvm/test/tools/llvm-objcopy/MachO/mh-preload-unsupported.yaml
new file mode 100644
index 0000000000000..9b195f3d57d5c
--- /dev/null
+++ b/llvm/test/tools/llvm-objcopy/MachO/mh-preload-unsupported.yaml
@@ -0,0 +1,16 @@
+--- !mach-o
+FileHeader:
+  magic:           0xFEEDFACF
+  cputype:         0x100000C
+  cpusubtype:      0x0
+  filetype:        0x5
+  ncmds:           0
+  sizeofcmds:      0
+  flags:           0x1
+  reserved:        0x0
+...
+
+# RUN: yaml2obj %s > %t
+# RUN: not llvm-objcopy %t 2>&1 | FileCheck %s -DFILE=%t
+#
+# CHECK: error: [[FILE]]: MH_PRELOAD files are not supported

diff  --git a/llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp b/llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp
index ee15a230727eb..9e7b91d730579 100644
--- a/llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp
+++ b/llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp
@@ -389,6 +389,11 @@ Error objcopy::macho::executeObjcopyOnBinary(const CommonConfig &Config,
   if (!O)
     return createFileError(Config.InputFilename, O.takeError());
 
+  if (O->get()->Header.FileType == MachO::HeaderFileType::MH_PRELOAD)
+    return createStringError(std::errc::not_supported,
+                             "%s: MH_PRELOAD files are not supported",
+                             Config.InputFilename.str().c_str());
+
   if (Error E = handleArgs(Config, MachOConfig, **O))
     return createFileError(Config.InputFilename, std::move(E));
 


        


More information about the llvm-commits mailing list