[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
This commit is contained in:
Alexander Shaposhnikov 2019-10-24 17:35:10 -07:00
parent d4303b3861
commit 074af2daf5
6 changed files with 83 additions and 0 deletions

View File

@ -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
...

View File

@ -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
...

View File

@ -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
...

View File

@ -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
...

View File

@ -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

View File

@ -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: