From 432ba9d89a0dfdeedc96a39cb302d9517ab6f559 Mon Sep 17 00:00:00 2001 From: Chris Bieneman Date: Wed, 17 Aug 2016 21:46:04 +0000 Subject: [PATCH] [macho2yaml] Don't write empty linkedit data Since I stopped writing empty export tries it causes LinkEdit to potentially be completely empty which results in invalid yaml being generated. To prevent this we skip linkedit data if it is empty. llvm-svn: 278985 --- llvm/include/llvm/ObjectYAML/MachOYAML.h | 2 ++ llvm/lib/ObjectYAML/MachOYAML.cpp | 7 ++++++- llvm/test/ObjectYAML/MachO/bogus_load_command.yaml | 1 + 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/llvm/include/llvm/ObjectYAML/MachOYAML.h b/llvm/include/llvm/ObjectYAML/MachOYAML.h index 5a106efd05af..2fbd71f0bcd6 100644 --- a/llvm/include/llvm/ObjectYAML/MachOYAML.h +++ b/llvm/include/llvm/ObjectYAML/MachOYAML.h @@ -100,6 +100,8 @@ struct LinkEditData { MachOYAML::ExportEntry ExportTrie; std::vector NameList; std::vector StringTable; + + bool isEmpty() const; }; struct Object { diff --git a/llvm/lib/ObjectYAML/MachOYAML.cpp b/llvm/lib/ObjectYAML/MachOYAML.cpp index 5825d0042eba..984ca0b9d01f 100644 --- a/llvm/lib/ObjectYAML/MachOYAML.cpp +++ b/llvm/lib/ObjectYAML/MachOYAML.cpp @@ -22,6 +22,10 @@ namespace llvm { MachOYAML::LoadCommand::~LoadCommand() {} +bool MachOYAML::LinkEditData::isEmpty() const { + return 0 == RebaseOpcodes.size() + BindOpcodes.size() + WeakBindOpcodes.size() + LazyBindOpcodes.size() + ExportTrie.Children.size() + NameList.size() + StringTable.size(); +} + namespace yaml { void ScalarTraits::output(const char_16 &Val, void *, @@ -95,7 +99,8 @@ void MappingTraits::mapping(IO &IO, IO.mapTag("!mach-o", true); IO.mapRequired("FileHeader", Object.Header); IO.mapOptional("LoadCommands", Object.LoadCommands); - IO.mapOptional("LinkEditData", Object.LinkEdit); + if(!Object.LinkEdit.isEmpty() || !IO.outputting()) + IO.mapOptional("LinkEditData", Object.LinkEdit); if (IO.getContext() == &Object) IO.setContext(nullptr); diff --git a/llvm/test/ObjectYAML/MachO/bogus_load_command.yaml b/llvm/test/ObjectYAML/MachO/bogus_load_command.yaml index 69c57d055cbd..f37f733b34cf 100644 --- a/llvm/test/ObjectYAML/MachO/bogus_load_command.yaml +++ b/llvm/test/ObjectYAML/MachO/bogus_load_command.yaml @@ -49,3 +49,4 @@ LoadCommands: #CHECK: - 0x0A #CHECK: - 0x0B #CHECK: - 0x0C +#CHECK-NOT: LinkEditData: