diff --git a/llvm/lib/ObjCopy/MachO/MachOLayoutBuilder.cpp b/llvm/lib/ObjCopy/MachO/MachOLayoutBuilder.cpp index 8ecd669e67178..93bc6631e64c8 100644 --- a/llvm/lib/ObjCopy/MachO/MachOLayoutBuilder.cpp +++ b/llvm/lib/ObjCopy/MachO/MachOLayoutBuilder.cpp @@ -116,10 +116,6 @@ uint64_t MachOLayoutBuilder::layoutSegments() { const bool IsObjectFile = O.Header.FileType == MachO::HeaderFileType::MH_OBJECT; uint64_t Offset = IsObjectFile ? (HeaderSize + O.Header.SizeOfCmds) : 0; - // If we are emitting an encryptable binary, our load commands must have a - // separate (non-encrypted) page to themselves. - bool RequiresFirstSectionOutsideFirstPage = - O.EncryptionInfoCommandIndex.has_value(); for (LoadCommand &LC : O.LoadCommands) { auto &MLC = LC.MachOLoadCommand; StringRef Segname; @@ -173,10 +169,6 @@ uint64_t MachOLayoutBuilder::layoutSegments() { if (!Sec->hasValidOffset()) { Sec->Offset = 0; } else { - if (RequiresFirstSectionOutsideFirstPage) { - SectOffset = alignToPowerOf2(SectOffset, PageSize); - RequiresFirstSectionOutsideFirstPage = false; - } Sec->Offset = SegOffset + SectOffset; Sec->Size = Sec->Content.size(); SegFileSize = std::max(SegFileSize, SectOffset + Sec->Size); diff --git a/llvm/lib/ObjCopy/MachO/MachOObject.cpp b/llvm/lib/ObjCopy/MachO/MachOObject.cpp index e0819d89d24ff..8d2c02dc37c99 100644 --- a/llvm/lib/ObjCopy/MachO/MachOObject.cpp +++ b/llvm/lib/ObjCopy/MachO/MachOObject.cpp @@ -98,10 +98,6 @@ void Object::updateLoadCommandIndexes() { case MachO::LC_DYLD_EXPORTS_TRIE: ExportsTrieCommandIndex = Index; break; - case MachO::LC_ENCRYPTION_INFO: - case MachO::LC_ENCRYPTION_INFO_64: - EncryptionInfoCommandIndex = Index; - break; } } } diff --git a/llvm/lib/ObjCopy/MachO/MachOObject.h b/llvm/lib/ObjCopy/MachO/MachOObject.h index 13ac87ed3ed06..8f9444f5fb025 100644 --- a/llvm/lib/ObjCopy/MachO/MachOObject.h +++ b/llvm/lib/ObjCopy/MachO/MachOObject.h @@ -341,9 +341,6 @@ struct Object { /// The index of the LC_SEGMENT or LC_SEGMENT_64 load command /// corresponding to the __TEXT segment. std::optional TextSegmentCommandIndex; - /// The index of the LC_ENCRYPTION_INFO or LC_ENCRYPTION_INFO_64 load command - /// if present. - std::optional EncryptionInfoCommandIndex; BumpPtrAllocator Alloc; StringSaver NewSectionsContents; diff --git a/llvm/lib/ObjCopy/MachO/MachOReader.cpp b/llvm/lib/ObjCopy/MachO/MachOReader.cpp index ef0e0262f9395..2b344f36d8e78 100644 --- a/llvm/lib/ObjCopy/MachO/MachOReader.cpp +++ b/llvm/lib/ObjCopy/MachO/MachOReader.cpp @@ -184,10 +184,6 @@ Error MachOReader::readLoadCommands(Object &O) const { case MachO::LC_DYLD_CHAINED_FIXUPS: O.ChainedFixupsCommandIndex = O.LoadCommands.size(); break; - case MachO::LC_ENCRYPTION_INFO: - case MachO::LC_ENCRYPTION_INFO_64: - O.EncryptionInfoCommandIndex = O.LoadCommands.size(); - break; } #define HANDLE_LOAD_COMMAND(LCName, LCValue, LCStruct) \ case MachO::LCName: \ diff --git a/llvm/test/tools/llvm-objcopy/MachO/strip-with-encryption-info.test b/llvm/test/tools/llvm-objcopy/MachO/strip-with-encryption-info.test index 2b2bd670613de..d6f6fe10d88c2 100644 --- a/llvm/test/tools/llvm-objcopy/MachO/strip-with-encryption-info.test +++ b/llvm/test/tools/llvm-objcopy/MachO/strip-with-encryption-info.test @@ -16,7 +16,11 @@ # CHECK: fileoff: 0 # The YAML below is the following code +# ``` +# static int foo = 12345; +# int bar = 4567; # int main(int argc, char **argv) { return 0; } +# ``` # Compiled on macOS against the macOS SDK and passing `-Wl,-encryptable` # Contents are removed, since they are not important for the test. We need a # small text segment (smaller than a page). @@ -26,8 +30,8 @@ FileHeader: cputype: 0x100000C cpusubtype: 0x0 filetype: 0x2 - ncmds: 15 - sizeofcmds: 696 + ncmds: 18 + sizeofcmds: 920 flags: 0x200085 reserved: 0x0 LoadCommands: @@ -69,7 +73,7 @@ LoadCommands: - sectname: __unwind_info segname: __TEXT addr: 0x100004020 - size: 4152 + size: 88 offset: 0x4020 align: 2 reloff: 0x0 @@ -79,37 +83,61 @@ LoadCommands: reserved2: 0x0 reserved3: 0x0 - cmd: LC_SEGMENT_64 - cmdsize: 72 - segname: __LINKEDIT + cmdsize: 152 + segname: __DATA vmaddr: 4295000064 - vmsize: 592 + vmsize: 16384 fileoff: 32768 - filesize: 592 + filesize: 16384 + maxprot: 3 + initprot: 3 + nsects: 1 + flags: 0 + Sections: + - sectname: __data + segname: __DATA + addr: 0x100008000 + size: 4 + offset: 0x8000 + align: 2 + reloff: 0x0 + nreloc: 0 + flags: 0x0 + reserved1: 0x0 + reserved2: 0x0 + reserved3: 0x0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: __LINKEDIT + vmaddr: 4295016448 + vmsize: 16384 + fileoff: 49152 + filesize: 768 maxprot: 1 initprot: 1 nsects: 0 flags: 0 - cmd: LC_DYLD_CHAINED_FIXUPS cmdsize: 16 - dataoff: 32768 - datasize: 48 + dataoff: 49152 + datasize: 56 - cmd: LC_DYLD_EXPORTS_TRIE cmdsize: 16 - dataoff: 32816 - datasize: 48 + dataoff: 49208 + datasize: 64 - cmd: LC_SYMTAB cmdsize: 24 - symoff: 32872 - nsyms: 2 - stroff: 32904 - strsize: 32 + symoff: 49280 + nsyms: 3 + stroff: 49328 + strsize: 40 - cmd: LC_DYSYMTAB cmdsize: 80 ilocalsym: 0 nlocalsym: 0 iextdefsym: 0 - nextdefsym: 2 - iundefsym: 2 + nextdefsym: 3 + iundefsym: 3 nundefsym: 0 tocoff: 0 ntoc: 0 @@ -123,12 +151,6 @@ LoadCommands: nextrel: 0 locreloff: 0 nlocrel: 0 - - cmd: LC_ENCRYPTION_INFO_64 - cmdsize: 24 - cryptoff: 16384 - cryptsize: 16384 - cryptid: 0 - pad: 0 - cmd: LC_LOAD_DYLINKER cmdsize: 32 name: 12 @@ -136,32 +158,50 @@ LoadCommands: ZeroPadBytes: 7 - cmd: LC_UUID cmdsize: 24 - uuid: 4C4C4447-5555-3144-A18A-01E9EB7E7D92 + uuid: ADDA943C-657A-3A49-9580-168E17A40FFB - cmd: LC_BUILD_VERSION cmdsize: 32 platform: 1 minos: 983040 - sdk: 983552 + sdk: 984320 ntools: 1 Tools: - - tool: 4 - version: 1310720 + - tool: 3 + version: 76481537 + - cmd: LC_SOURCE_VERSION + cmdsize: 16 + version: 0 - cmd: LC_MAIN cmdsize: 24 entryoff: 16384 stacksize: 0 + - cmd: LC_ENCRYPTION_INFO_64 + cmdsize: 24 + cryptoff: 16384 + cryptsize: 16384 + cryptid: 0 + pad: 0 + - cmd: LC_LOAD_DYLIB + cmdsize: 56 + dylib: + name: 24 + timestamp: 2 + current_version: 88539136 + compatibility_version: 65536 + Content: '/usr/lib/libSystem.B.dylib' + ZeroPadBytes: 6 - cmd: LC_FUNCTION_STARTS cmdsize: 16 - dataoff: 32864 + dataoff: 49272 datasize: 8 - cmd: LC_DATA_IN_CODE cmdsize: 16 - dataoff: 32872 + dataoff: 49280 datasize: 0 - cmd: LC_CODE_SIGNATURE cmdsize: 16 - dataoff: 32944 - datasize: 416 + dataoff: 49376 + datasize: 544 LinkEditData: ExportTrie: TerminalSize: 0 @@ -173,51 +213,67 @@ LinkEditData: ImportName: '' Children: - TerminalSize: 0 - NodeOffset: 5 + NodeOffset: 25 Name: _ Flags: 0x0 Address: 0x0 Other: 0x0 ImportName: '' Children: + - TerminalSize: 2 + NodeOffset: 9 + Name: _mh_execute_header + Flags: 0x0 + Address: 0x0 + Other: 0x0 + ImportName: '' - TerminalSize: 4 - NodeOffset: 33 - Name: main + NodeOffset: 13 + Name: bar Flags: 0x0 - Address: 0x4000 + Address: 0x8000 Other: 0x0 ImportName: '' - - TerminalSize: 2 - NodeOffset: 39 - Name: _mh_execute_header + - TerminalSize: 4 + NodeOffset: 19 + Name: main Flags: 0x0 - Address: 0x0 + Address: 0x4000 Other: 0x0 ImportName: '' NameList: - n_strx: 2 n_type: 0xF n_sect: 1 + n_desc: 16 + n_value: 4294967296 + - n_strx: 22 + n_type: 0xF + n_sect: 3 n_desc: 0 - n_value: 4294983680 - - n_strx: 8 + n_value: 4295000064 + - n_strx: 27 n_type: 0xF n_sect: 1 - n_desc: 16 - n_value: 4294967296 + n_desc: 0 + n_value: 4294983680 StringTable: - ' ' - - _main - __mh_execute_header + - _bar + - _main + - '' + - '' + - '' - '' - '' - '' - '' FunctionStarts: [ 0x4000 ] - ChainedFixups: [ 0x0, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, 0x30, 0x0, - 0x0, 0x0, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 ] + ChainedFixups: [ 0x0, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, 0x34, 0x0, + 0x0, 0x0, 0x34, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 ] ... -