diff options
Diffstat (limited to 'contrib/llvm-project/llvm/tools/llvm-objcopy/MachO/Object.cpp')
-rw-r--r-- | contrib/llvm-project/llvm/tools/llvm-objcopy/MachO/Object.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/contrib/llvm-project/llvm/tools/llvm-objcopy/MachO/Object.cpp b/contrib/llvm-project/llvm/tools/llvm-objcopy/MachO/Object.cpp index b4f98fa84cb5..6312adbbc9f7 100644 --- a/contrib/llvm-project/llvm/tools/llvm-objcopy/MachO/Object.cpp +++ b/contrib/llvm-project/llvm/tools/llvm-objcopy/MachO/Object.cpp @@ -29,10 +29,24 @@ void SymbolTable::removeSymbols( } void Object::updateLoadCommandIndexes() { + static constexpr char TextSegmentName[] = "__TEXT"; // Update indices of special load commands for (size_t Index = 0, Size = LoadCommands.size(); Index < Size; ++Index) { LoadCommand &LC = LoadCommands[Index]; switch (LC.MachOLoadCommand.load_command_data.cmd) { + case MachO::LC_CODE_SIGNATURE: + CodeSignatureCommandIndex = Index; + break; + case MachO::LC_SEGMENT: + if (StringRef(LC.MachOLoadCommand.segment_command_data.segname) == + TextSegmentName) + TextSegmentCommandIndex = Index; + break; + case MachO::LC_SEGMENT_64: + if (StringRef(LC.MachOLoadCommand.segment_command_64_data.segname) == + TextSegmentName) + TextSegmentCommandIndex = Index; + break; case MachO::LC_SYMTAB: SymTabCommandIndex = Index; break; @@ -52,6 +66,12 @@ void Object::updateLoadCommandIndexes() { case MachO::LC_FUNCTION_STARTS: FunctionStartsCommandIndex = Index; break; + case MachO::LC_DYLD_CHAINED_FIXUPS: + ChainedFixupsCommandIndex = Index; + break; + case MachO::LC_DYLD_EXPORTS_TRIE: + ExportsTrieCommandIndex = Index; + break; } } } |