forked from OSchip/llvm-project
[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
This commit is contained in:
parent
269762dad3
commit
432ba9d89a
|
@ -100,6 +100,8 @@ struct LinkEditData {
|
|||
MachOYAML::ExportEntry ExportTrie;
|
||||
std::vector<NListEntry> NameList;
|
||||
std::vector<StringRef> StringTable;
|
||||
|
||||
bool isEmpty() const;
|
||||
};
|
||||
|
||||
struct Object {
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -49,3 +49,4 @@ LoadCommands:
|
|||
#CHECK: - 0x0A
|
||||
#CHECK: - 0x0B
|
||||
#CHECK: - 0x0C
|
||||
#CHECK-NOT: LinkEditData:
|
||||
|
|
Loading…
Reference in New Issue