summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Bieneman <beanz@apple.com>2016-08-17 21:46:04 +0000
committerChris Bieneman <beanz@apple.com>2016-08-17 21:46:04 +0000
commit432ba9d89a0dfdeedc96a39cb302d9517ab6f559 (patch)
tree31781d9a7c81d0e83eaa0c5d8210c04272a59cba
parent269762dad347a916e342360f0330869ca0938e60 (diff)
downloadbcm5719-llvm-432ba9d89a0dfdeedc96a39cb302d9517ab6f559.tar.gz
bcm5719-llvm-432ba9d89a0dfdeedc96a39cb302d9517ab6f559.zip
[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
-rw-r--r--llvm/include/llvm/ObjectYAML/MachOYAML.h2
-rw-r--r--llvm/lib/ObjectYAML/MachOYAML.cpp7
-rw-r--r--llvm/test/ObjectYAML/MachO/bogus_load_command.yaml1
3 files changed, 9 insertions, 1 deletions
diff --git a/llvm/include/llvm/ObjectYAML/MachOYAML.h b/llvm/include/llvm/ObjectYAML/MachOYAML.h
index 5a106efd05a..2fbd71f0bcd 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<NListEntry> NameList;
std::vector<StringRef> StringTable;
+
+ bool isEmpty() const;
};
struct Object {
diff --git a/llvm/lib/ObjectYAML/MachOYAML.cpp b/llvm/lib/ObjectYAML/MachOYAML.cpp
index 5825d0042eb..984ca0b9d01 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<char_16>::output(const char_16 &Val, void *,
@@ -95,7 +99,8 @@ void MappingTraits<MachOYAML::Object>::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 69c57d055cb..f37f733b34c 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:
OpenPOWER on IntegriCloud