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

Alexander Shaposhnikov via llvm-commits llvm-commits at lists.llvm.org
Fri Oct 25 11:43:35 PDT 2019


Author: Alexander Shaposhnikov
Date: 2019-10-25T11:42:29-07:00
New Revision: 074af2daf5f33b884088dc0200b1acb038bfcaec

URL: https://github.com/llvm/llvm-project/commit/074af2daf5f33b884088dc0200b1acb038bfcaec
DIFF: https://github.com/llvm/llvm-project/commit/074af2daf5f33b884088dc0200b1acb038bfcaec.diff

LOG: [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

Added: 
    llvm/test/tools/llvm-objcopy/MachO/Inputs/min_iphoneos_version_lc.yaml
    llvm/test/tools/llvm-objcopy/MachO/Inputs/min_macos_version_lc.yaml
    llvm/test/tools/llvm-objcopy/MachO/Inputs/min_tvos_version_lc.yaml
    llvm/test/tools/llvm-objcopy/MachO/Inputs/min_watchos_version_lc.yaml
    llvm/test/tools/llvm-objcopy/MachO/min-version-load-commands.test

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

Removed: 
    


################################################################################
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 000000000000..2ed4ebaa3be3
--- /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 000000000000..7787d54c2609
--- /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 000000000000..64eb77bc8c54
--- /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 000000000000..27f1c78d85b8
--- /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 000000000000..42dce2e192c1
--- /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 f621f3aa09cf..006eb8ce7c49 100644
--- a/llvm/tools/llvm-objcopy/MachO/MachOLayoutBuilder.cpp
+++ b/llvm/tools/llvm-objcopy/MachO/MachOLayoutBuilder.cpp
@@ -318,6 +318,9 @@ Error MachOLayoutBuilder::layoutTail(uint64_t Offset) {
     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:


        


More information about the llvm-commits mailing list