[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