diff --git a/llvm/lib/ObjectYAML/MachOEmitter.cpp b/llvm/lib/ObjectYAML/MachOEmitter.cpp --- a/llvm/lib/ObjectYAML/MachOEmitter.cpp +++ b/llvm/lib/ObjectYAML/MachOEmitter.cpp @@ -435,24 +435,24 @@ void MachOWriter::dumpExportEntry(raw_ostream &OS, MachOYAML::ExportEntry &Entry) { - encodeSLEB128(Entry.TerminalSize, OS); + encodeULEB128(Entry.TerminalSize, OS); if (Entry.TerminalSize > 0) { - encodeSLEB128(Entry.Flags, OS); + encodeULEB128(Entry.Flags, OS); if (Entry.Flags & MachO::EXPORT_SYMBOL_FLAGS_REEXPORT) { - encodeSLEB128(Entry.Other, OS); + encodeULEB128(Entry.Other, OS); OS << Entry.ImportName; OS.write('\0'); } else { - encodeSLEB128(Entry.Address, OS); + encodeULEB128(Entry.Address, OS); if (Entry.Flags & MachO::EXPORT_SYMBOL_FLAGS_STUB_AND_RESOLVER) - encodeSLEB128(Entry.Other, OS); + encodeULEB128(Entry.Other, OS); } } OS.write(static_cast(Entry.Children.size())); for (auto EE : Entry.Children) { OS << EE.Name; OS.write('\0'); - encodeSLEB128(EE.NodeOffset, OS); + encodeULEB128(EE.NodeOffset, OS); } for (auto EE : Entry.Children) dumpExportEntry(OS, EE); diff --git a/llvm/test/ObjectYAML/MachO/export_trie.yaml b/llvm/test/ObjectYAML/MachO/export_trie.yaml --- a/llvm/test/ObjectYAML/MachO/export_trie.yaml +++ b/llvm/test/ObjectYAML/MachO/export_trie.yaml @@ -1,4 +1,6 @@ -# RUN: yaml2obj %s | obj2yaml | FileCheck %s +# RUN: yaml2obj %s -o=%t +# RUN: obj2yaml %t | FileCheck %s +# RUN: llvm-objdump --macho --exports-trie %t | FileCheck %s --check-prefix=OBJDUMP-VERIFY --- !mach-o FileHeader: @@ -167,7 +169,7 @@ NodeOffset: 37 Name: main Flags: 0x0000000000000000 - Address: 0x0000000000001160 + Address: 0x0000000000003FA0 Other: 0x0000000000000000 ImportName: '' ... @@ -188,4 +190,8 @@ #CHECK: - TerminalSize: 3 #CHECK: NodeOffset: 37 #CHECK: Name: main -#CHECK: Address: 0x1160 +#CHECK: Address: 0x3FA0 + +# OBJDUMP-VERIFY: Exports trie: +# OBJDUMP-VERIFY: 0x100000000 __mh_execute_header +# OBJDUMP-VERIFY: 0x100003FA0 _main