[llvm-objcopy][MachO] Add support for min os version load commands

Add support for min os version load commands.

Test plan: make check-all

Differential revision: https://reviews.llvm.org/D69419
diff --git a/llvm/test/tools/llvm-objcopy/MachO/Inputs/min_iphoneos_version_lc.yaml b/llvm/test/tools/llvm-objcopy/MachO/Inputs/min_iphoneos_version_lc.yaml
new file mode 100644
index 0000000..2ed4eba
--- /dev/null
+++ b/llvm/test/tools/llvm-objcopy/MachO/Inputs/min_iphoneos_version_lc.yaml
@@ -0,0 +1,15 @@
+--- !mach-o
+FileHeader:
+  magic:           0xFEEDFACE
+  cputype:         0x0000000C
+  cpusubtype:      0x00000009
+  filetype:        0x00000001
+  ncmds:           1
+  sizeofcmds:      16
+  flags:           0x00002000
+LoadCommands:
+  - cmd:             LC_VERSION_MIN_IPHONEOS
+    cmdsize:         16
+    version:         327680
+    sdk:             0
+...
diff --git a/llvm/test/tools/llvm-objcopy/MachO/Inputs/min_macos_version_lc.yaml b/llvm/test/tools/llvm-objcopy/MachO/Inputs/min_macos_version_lc.yaml
new file mode 100644
index 0000000..7787d54
--- /dev/null
+++ b/llvm/test/tools/llvm-objcopy/MachO/Inputs/min_macos_version_lc.yaml
@@ -0,0 +1,15 @@
+--- !mach-o
+FileHeader:
+  magic:           0xFEEDFACE
+  cputype:         0x0000000C
+  cpusubtype:      0x00000009
+  filetype:        0x00000001
+  ncmds:           1
+  sizeofcmds:      16
+  flags:           0x00002000
+LoadCommands:
+  - cmd:             LC_VERSION_MIN_MACOSX
+    cmdsize:         16
+    version:         327680
+    sdk:             0
+...
diff --git a/llvm/test/tools/llvm-objcopy/MachO/Inputs/min_tvos_version_lc.yaml b/llvm/test/tools/llvm-objcopy/MachO/Inputs/min_tvos_version_lc.yaml
new file mode 100644
index 0000000..64eb77b
--- /dev/null
+++ b/llvm/test/tools/llvm-objcopy/MachO/Inputs/min_tvos_version_lc.yaml
@@ -0,0 +1,15 @@
+--- !mach-o
+FileHeader:
+  magic:           0xFEEDFACE
+  cputype:         0x0000000C
+  cpusubtype:      0x00000009
+  filetype:        0x00000001
+  ncmds:           1
+  sizeofcmds:      16
+  flags:           0x00002000
+LoadCommands:
+  - cmd:             LC_VERSION_MIN_TVOS
+    cmdsize:         16
+    version:         327680
+    sdk:             0
+...
diff --git a/llvm/test/tools/llvm-objcopy/MachO/Inputs/min_watchos_version_lc.yaml b/llvm/test/tools/llvm-objcopy/MachO/Inputs/min_watchos_version_lc.yaml
new file mode 100644
index 0000000..27f1c78
--- /dev/null
+++ b/llvm/test/tools/llvm-objcopy/MachO/Inputs/min_watchos_version_lc.yaml
@@ -0,0 +1,15 @@
+--- !mach-o
+FileHeader:
+  magic:           0xFEEDFACE
+  cputype:         0x0000000C
+  cpusubtype:      0x00000009
+  filetype:        0x00000001
+  ncmds:           1
+  sizeofcmds:      16
+  flags:           0x00002000
+LoadCommands:
+  - cmd:             LC_VERSION_MIN_WATCHOS
+    cmdsize:         16
+    version:         327680
+    sdk:             0
+...
diff --git a/llvm/test/tools/llvm-objcopy/MachO/min-version-load-commands.test b/llvm/test/tools/llvm-objcopy/MachO/min-version-load-commands.test
new file mode 100644
index 0000000..42dce2e
--- /dev/null
+++ b/llvm/test/tools/llvm-objcopy/MachO/min-version-load-commands.test
@@ -0,0 +1,20 @@
+## This test verifies that llvm-objcopy correctly handles min os version load commands.
+## We use separate input files since one binary is not allowed to contain more than one
+## load command of this type (LC_VERSION_MIN_IPHONEOS, LC_VERSION_MIN_MACOSX,
+## LC_VERSION_MIN_TVOS, LC_VERSION_MIN_WATCHOS).
+
+# RUN: yaml2obj %p/Inputs/min_iphoneos_version_lc.yaml > %t.iphoneos
+# RUN: llvm-objcopy %t.iphoneos %t.iphoneos.copy
+# RUN: cmp %t.iphoneos %t.iphoneos.copy
+
+# RUN: yaml2obj %p/Inputs/min_macos_version_lc.yaml > %t.macos
+# RUN: llvm-objcopy %t.macos %t.macos.copy
+# RUN: cmp %t.macos %t.macos.copy
+
+# RUN: yaml2obj %p/Inputs/min_tvos_version_lc.yaml > %t.tvos
+# RUN: llvm-objcopy %t.tvos %t.tvos.copy
+# RUN: cmp %t.tvos %t.tvos.copy
+
+# RUN: yaml2obj %p/Inputs/min_watchos_version_lc.yaml > %t.watchos
+# RUN: llvm-objcopy %t.watchos %t.watchos.copy
+# RUN: cmp %t.watchos %t.watchos.copy
diff --git a/llvm/tools/llvm-objcopy/MachO/MachOLayoutBuilder.cpp b/llvm/tools/llvm-objcopy/MachO/MachOLayoutBuilder.cpp
index f621f3a..006eb8c 100644
--- a/llvm/tools/llvm-objcopy/MachO/MachOLayoutBuilder.cpp
+++ b/llvm/tools/llvm-objcopy/MachO/MachOLayoutBuilder.cpp
@@ -318,6 +318,9 @@
     case MachO::LC_SEGMENT:
     case MachO::LC_SEGMENT_64:
     case MachO::LC_VERSION_MIN_MACOSX:
+    case MachO::LC_VERSION_MIN_IPHONEOS:
+    case MachO::LC_VERSION_MIN_TVOS:
+    case MachO::LC_VERSION_MIN_WATCHOS:
     case MachO::LC_BUILD_VERSION:
     case MachO::LC_ID_DYLIB:
     case MachO::LC_LOAD_DYLIB: