From 6da58e7e0fac1e421d6a5a6e48ed8836c67ac543 Mon Sep 17 00:00:00 2001 From: Steven Wu Date: Wed, 6 Nov 2019 11:25:50 -0800 Subject: [PATCH] [Object][MachO] Rewrite macho-invalid-fat-arch-size into YAML Summary: Rewrite one of the invalid macho test input file with YAML file. The original invalid macho is breaking our internal test infrastusture because it is too broken to be copy around. Need to relax an assertion in the YAML/MachoEmitter to allow yaml2obj to write an invalid object like this. rdar://problem/56879982 Reviewers: beanz, mtrent Reviewed By: beanz Subscribers: hiraditya, jkorous, dexonsmith, ributzka, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D69856 --- llvm/lib/ObjectYAML/MachOEmitter.cpp | 3 ++- llvm/test/Object/Inputs/macho-invalid-fat-arch-size | Bin 56 -> 0 bytes llvm/test/Object/Inputs/macho-invalid-fat-arch-size.yaml | 12 ++++++++++++ llvm/test/Object/macho-invalid.test | 4 ++-- 4 files changed, 16 insertions(+), 3 deletions(-) delete mode 100644 llvm/test/Object/Inputs/macho-invalid-fat-arch-size create mode 100644 llvm/test/Object/Inputs/macho-invalid-fat-arch-size.yaml diff --git a/llvm/lib/ObjectYAML/MachOEmitter.cpp b/llvm/lib/ObjectYAML/MachOEmitter.cpp index b56f811..e0885e0 100644 --- a/llvm/lib/ObjectYAML/MachOEmitter.cpp +++ b/llvm/lib/ObjectYAML/MachOEmitter.cpp @@ -494,7 +494,8 @@ void UniversalWriter::writeMachO(raw_ostream &OS) { writeFatArchs(OS); auto &FatFile = *ObjectFile.FatMachO; - assert(FatFile.FatArchs.size() == FatFile.Slices.size()); + assert(FatFile.FatArchs.size() > FatFile.Slices.size() && + "Cannot write Slices if not decribed in FatArches"); for (size_t i = 0; i < FatFile.Slices.size(); i++) { ZeroToOffset(OS, FatFile.FatArchs[i].offset); MachOWriter Writer(FatFile.Slices[i]); diff --git a/llvm/test/Object/Inputs/macho-invalid-fat-arch-size b/llvm/test/Object/Inputs/macho-invalid-fat-arch-size deleted file mode 100644 index dfd154c88e3884e3df4612a95668de9ee0747f8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56 ncmX^0Z`VEs1_nkTW(Q(sAeI4Q1t4ZR_v`IHm>?5S02u%P9&1 | FileCheck -check-prefix INVALID-FAT-HEADER %s INVALID-FAT-HEADER: macho-invalid-fat-header': truncated or malformed fat file (contains zero architecture types) -RUN: not llvm-objdump --macho --universal-headers %p/Inputs/macho-invalid-fat-arch-size 2>&1 | FileCheck -check-prefix INVALID-FAT-ARCH-SIZE %s -INVALID-FAT-ARCH-SIZE: macho-invalid-fat-arch-size': truncated or malformed fat file (offset plus size of cputype (7) cpusubtype (3) extends past the end of the file) +RUN: yaml2obj %p/Inputs/macho-invalid-fat-arch-size.yaml -o - | not llvm-objdump --macho --universal-headers - 2>&1 | FileCheck -check-prefix INVALID-FAT-ARCH-SIZE %s +INVALID-FAT-ARCH-SIZE: '-': truncated or malformed fat file (offset plus size of cputype (7) cpusubtype (3) extends past the end of the file) RUN: not llvm-objdump --macho --universal-headers %p/Inputs/macho-invalid-fat-arch-bigalign 2>&1 | FileCheck -check-prefix INVALID-FAT-ARCH-BIGALIGN %s INVALID-FAT-ARCH-BIGALIGN: macho-invalid-fat-arch-bigalign': truncated or malformed fat file (align (2^212) too large for cputype (7) cpusubtype (3) (maximum 2^15)) -- 2.7.4