Index: lldb/trunk/unittests/Core/CMakeLists.txt =================================================================== --- lldb/trunk/unittests/Core/CMakeLists.txt +++ lldb/trunk/unittests/Core/CMakeLists.txt @@ -15,8 +15,3 @@ LINK_COMPONENTS Support ) - -set(test_inputs - mangled-function-names.yaml - ) -add_unittest_inputs(LLDBCoreTests "${test_inputs}") Index: lldb/trunk/unittests/Core/Inputs/mangled-function-names.yaml =================================================================== --- lldb/trunk/unittests/Core/Inputs/mangled-function-names.yaml +++ lldb/trunk/unittests/Core/Inputs/mangled-function-names.yaml @@ -1,129 +0,0 @@ ---- !ELF -FileHeader: - Class: ELFCLASS64 - Data: ELFDATA2LSB - Type: ET_EXEC - Machine: EM_X86_64 -Sections: - - Name: .text - Type: SHT_PROGBITS - Flags: [ SHF_ALLOC, SHF_EXECINSTR ] - AddressAlign: 0x0000000000000010 - Content: 554889E58B0425A80000005DC30F1F00 - - Name: .anothertext - Type: SHT_PROGBITS - Flags: [ SHF_ALLOC, SHF_EXECINSTR ] - Address: 0x0000000000000010 - AddressAlign: 0x0000000000000010 - Content: 554889E54883EC20488D0425A8000000C745FC00000000488945F0488B45F08B08894DECE8C7FFFFFF8B4DEC01C189C84883C4205D746573742073747200C3 - - Name: .eh_frame - Type: SHT_PROGBITS - Flags: [ SHF_ALLOC ] - Address: 0x0000000000000050 - AddressAlign: 0x0000000000000008 - Content: 1400000000000000017A5200017810011B0C0708900100001C0000001C00000090FFFFFF0D00000000410E108602430D06000000000000001C0000003C00000080FFFFFF3F00000000410E108602430D0600000000000000 - - Name: .data - Type: SHT_PROGBITS - Flags: [ SHF_WRITE, SHF_ALLOC ] - Address: 0x00000000000000A8 - AddressAlign: 0x0000000000000004 - Content: '01000000' - - Name: .comment - Type: SHT_PROGBITS - Flags: [ SHF_MERGE, SHF_STRINGS ] - AddressAlign: 0x0000000000000001 - Content: 5562756E747520636C616E672076657273696F6E20332E352D317562756E74753120287472756E6B2920286261736564206F6E204C4C564D20332E352900 -Symbols: - - Type: STT_SECTION - Section: .text - - Type: STT_SECTION - Section: .anothertext - Value: 0x0000000000000010 - - Type: STT_SECTION - Section: .eh_frame - Value: 0x0000000000000050 - - Type: STT_SECTION - Section: .data - Value: 0x00000000000000A8 - - Type: STT_SECTION - Section: .comment - - Name: /tmp/a.c - Type: STT_FILE - - Type: STT_FILE - - Name: somedata - Type: STT_OBJECT - Section: .anothertext - Value: 0x0000000000000045 - Binding: STB_GLOBAL - - Name: main - Type: STT_FUNC - Section: .anothertext - Value: 0x0000000000000010 - Size: 0x000000000000003F - Binding: STB_GLOBAL - - Name: _Z3foov - Type: STT_FUNC - Section: .text - Size: 0x000000000000000D - Binding: STB_GLOBAL - - Name: puts@GLIBC_2.5 - Type: STT_FUNC - Section: .text - Size: 0x000000000000000D - Binding: STB_GLOBAL - - Name: puts@GLIBC_2.6 - Type: STT_FUNC - Section: .text - Size: 0x000000000000000D - Binding: STB_GLOBAL - - Name: _Z5annotv@VERSION3 - Type: STT_FUNC - Section: .text - Size: 0x000000000000000D - Binding: STB_GLOBAL - - Name: _ZN1AC2Ev - Type: STT_FUNC - Section: .text - Size: 0x000000000000000D - Binding: STB_GLOBAL - - Name: _ZN1AD2Ev - Type: STT_FUNC - Section: .text - Size: 0x000000000000000D - Binding: STB_GLOBAL - - Name: _ZN1A3barEv - Type: STT_FUNC - Section: .text - Size: 0x000000000000000D - Binding: STB_GLOBAL - - Name: _ZGVZN4llvm4dbgsEvE7thestrm - Type: STT_FUNC - Section: .text - Size: 0x000000000000000D - Binding: STB_GLOBAL - - Name: _ZZN4llvm4dbgsEvE7thestrm - Type: STT_FUNC - Section: .text - Size: 0x000000000000000D - Binding: STB_GLOBAL - - Name: _ZTVN5clang4DeclE - Type: STT_FUNC - Section: .text - Size: 0x000000000000000D - Binding: STB_GLOBAL - - Name: -[ObjCfoo] - Type: STT_FUNC - Section: .text - Size: 0x000000000000000D - Binding: STB_GLOBAL - - Name: +[B ObjCbar(WithCategory)] - Type: STT_FUNC - Section: .text - Size: 0x000000000000000D - Binding: STB_GLOBAL - - Name: _Z12undemangableEvx42 - Type: STT_FUNC - Section: .text - Size: 0x000000000000000D - Binding: STB_GLOBAL -... Index: lldb/trunk/unittests/Core/MangledTest.cpp =================================================================== --- lldb/trunk/unittests/Core/MangledTest.cpp +++ lldb/trunk/unittests/Core/MangledTest.cpp @@ -56,15 +56,113 @@ ObjectFileELF::Initialize(); SymbolFileSymtab::Initialize(); - llvm::SmallString<128> Obj; - ASSERT_NO_ERROR(llvm::sys::fs::createTemporaryFile( - "mangled-function-names-%%%%%%", "obj", Obj)); - llvm::FileRemover Deleter(Obj); - ASSERT_THAT_ERROR(ReadYAMLObjectFile("mangled-function-names.yaml", Obj), - llvm::Succeeded()); + auto ExpectedFile = TestFile::fromYaml(R"( +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_EXEC + Machine: EM_X86_64 +Sections: + - Name: .text + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC, SHF_EXECINSTR ] + AddressAlign: 0x0000000000000010 + Size: 0x20 + - Name: .anothertext + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC, SHF_EXECINSTR ] + Address: 0x0000000000000010 + AddressAlign: 0x0000000000000010 + Size: 0x40 + - Name: .data + Type: SHT_PROGBITS + Flags: [ SHF_WRITE, SHF_ALLOC ] + Address: 0x00000000000000A8 + AddressAlign: 0x0000000000000004 + Content: '01000000' +Symbols: + - Name: somedata + Type: STT_OBJECT + Section: .anothertext + Value: 0x0000000000000045 + Binding: STB_GLOBAL + - Name: main + Type: STT_FUNC + Section: .anothertext + Value: 0x0000000000000010 + Size: 0x000000000000003F + Binding: STB_GLOBAL + - Name: _Z3foov + Type: STT_FUNC + Section: .text + Size: 0x000000000000000D + Binding: STB_GLOBAL + - Name: puts@GLIBC_2.5 + Type: STT_FUNC + Section: .text + Size: 0x000000000000000D + Binding: STB_GLOBAL + - Name: puts@GLIBC_2.6 + Type: STT_FUNC + Section: .text + Size: 0x000000000000000D + Binding: STB_GLOBAL + - Name: _Z5annotv@VERSION3 + Type: STT_FUNC + Section: .text + Size: 0x000000000000000D + Binding: STB_GLOBAL + - Name: _ZN1AC2Ev + Type: STT_FUNC + Section: .text + Size: 0x000000000000000D + Binding: STB_GLOBAL + - Name: _ZN1AD2Ev + Type: STT_FUNC + Section: .text + Size: 0x000000000000000D + Binding: STB_GLOBAL + - Name: _ZN1A3barEv + Type: STT_FUNC + Section: .text + Size: 0x000000000000000D + Binding: STB_GLOBAL + - Name: _ZGVZN4llvm4dbgsEvE7thestrm + Type: STT_FUNC + Section: .text + Size: 0x000000000000000D + Binding: STB_GLOBAL + - Name: _ZZN4llvm4dbgsEvE7thestrm + Type: STT_FUNC + Section: .text + Size: 0x000000000000000D + Binding: STB_GLOBAL + - Name: _ZTVN5clang4DeclE + Type: STT_FUNC + Section: .text + Size: 0x000000000000000D + Binding: STB_GLOBAL + - Name: -[ObjCfoo] + Type: STT_FUNC + Section: .text + Size: 0x000000000000000D + Binding: STB_GLOBAL + - Name: +[B ObjCbar(WithCategory)] + Type: STT_FUNC + Section: .text + Size: 0x000000000000000D + Binding: STB_GLOBAL + - Name: _Z12undemangableEvx42 + Type: STT_FUNC + Section: .text + Size: 0x000000000000000D + Binding: STB_GLOBAL +... +)"); + ASSERT_THAT_EXPECTED(ExpectedFile, llvm::Succeeded()); - ModuleSpec Spec{FileSpec(Obj)}; - Spec.GetSymbolFileSpec().SetFile(Obj, FileSpec::Style::native); + ModuleSpec Spec{FileSpec(ExpectedFile->name())}; auto M = std::make_shared(Spec); auto Count = [M](const char *Name, FunctionNameType Type) -> int { Index: lldb/trunk/unittests/ObjectFile/ELF/CMakeLists.txt =================================================================== --- lldb/trunk/unittests/ObjectFile/ELF/CMakeLists.txt +++ lldb/trunk/unittests/ObjectFile/ELF/CMakeLists.txt @@ -11,6 +11,5 @@ set(test_inputs early-section-headers.so - sections-resolve-consistently.yaml ) add_unittest_inputs(ObjectFileELFTests "${test_inputs}") Index: lldb/trunk/unittests/ObjectFile/ELF/Inputs/sections-resolve-consistently.yaml =================================================================== --- lldb/trunk/unittests/ObjectFile/ELF/Inputs/sections-resolve-consistently.yaml +++ lldb/trunk/unittests/ObjectFile/ELF/Inputs/sections-resolve-consistently.yaml @@ -1,52 +0,0 @@ ---- !ELF -FileHeader: - Class: ELFCLASS64 - Data: ELFDATA2LSB - Type: ET_EXEC - Machine: EM_X86_64 - Entry: 0x0000000000400180 -Sections: - - Name: .note.gnu.build-id - Type: SHT_NOTE - Flags: [ SHF_ALLOC ] - Address: 0x0000000000400158 - AddressAlign: 0x0000000000000004 - Content: 040000001400000003000000474E55003F3EC29E3FD83E49D18C4D49CD8A730CC13117B6 - - Name: .text - Type: SHT_PROGBITS - Flags: [ SHF_ALLOC, SHF_EXECINSTR ] - Address: 0x0000000000400180 - AddressAlign: 0x0000000000000010 - Content: 554889E58B042500106000890425041060005DC3 - - Name: .data - Type: SHT_PROGBITS - Flags: [ SHF_WRITE, SHF_ALLOC ] - Address: 0x0000000000601000 - AddressAlign: 0x0000000000000004 - Content: 2F000000 - - Name: .bss - Type: SHT_NOBITS - Flags: [ SHF_WRITE, SHF_ALLOC ] - Address: 0x0000000000601004 - AddressAlign: 0x0000000000000004 - Size: 0x0000000000000004 -Symbols: - - Name: Y - Type: STT_OBJECT - Section: .data - Value: 0x0000000000601000 - Size: 0x0000000000000004 - Binding: STB_GLOBAL - - Name: _start - Type: STT_FUNC - Section: .text - Value: 0x0000000000400180 - Size: 0x0000000000000014 - Binding: STB_GLOBAL - - Name: X - Type: STT_OBJECT - Section: .bss - Value: 0x0000000000601004 - Size: 0x0000000000000004 - Binding: STB_GLOBAL -... Index: lldb/trunk/unittests/ObjectFile/ELF/TestObjectFileELF.cpp =================================================================== --- lldb/trunk/unittests/ObjectFile/ELF/TestObjectFileELF.cpp +++ lldb/trunk/unittests/ObjectFile/ELF/TestObjectFileELF.cpp @@ -48,16 +48,65 @@ }; TEST_F(ObjectFileELFTest, SectionsResolveConsistently) { - llvm::SmallString<128> obj; - ASSERT_NO_ERROR(llvm::sys::fs::createTemporaryFile( - "sections-resolve-consistently-%%%%%%", "obj", obj)); - llvm::FileRemover remover(obj); - ASSERT_THAT_ERROR( - ReadYAMLObjectFile("sections-resolve-consistently.yaml", obj), - llvm::Succeeded()); + auto ExpectedFile = TestFile::fromYaml(R"( +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_EXEC + Machine: EM_X86_64 + Entry: 0x0000000000400180 +Sections: + - Name: .note.gnu.build-id + Type: SHT_NOTE + Flags: [ SHF_ALLOC ] + Address: 0x0000000000400158 + AddressAlign: 0x0000000000000004 + Content: 040000001400000003000000474E55003F3EC29E3FD83E49D18C4D49CD8A730CC13117B6 + - Name: .text + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC, SHF_EXECINSTR ] + Address: 0x0000000000400180 + AddressAlign: 0x0000000000000010 + Content: 554889E58B042500106000890425041060005DC3 + - Name: .data + Type: SHT_PROGBITS + Flags: [ SHF_WRITE, SHF_ALLOC ] + Address: 0x0000000000601000 + AddressAlign: 0x0000000000000004 + Content: 2F000000 + - Name: .bss + Type: SHT_NOBITS + Flags: [ SHF_WRITE, SHF_ALLOC ] + Address: 0x0000000000601004 + AddressAlign: 0x0000000000000004 + Size: 0x0000000000000004 +Symbols: + - Name: Y + Type: STT_OBJECT + Section: .data + Value: 0x0000000000601000 + Size: 0x0000000000000004 + Binding: STB_GLOBAL + - Name: _start + Type: STT_FUNC + Section: .text + Value: 0x0000000000400180 + Size: 0x0000000000000014 + Binding: STB_GLOBAL + - Name: X + Type: STT_OBJECT + Section: .bss + Value: 0x0000000000601004 + Size: 0x0000000000000004 + Binding: STB_GLOBAL +... +)"); + ASSERT_THAT_EXPECTED(ExpectedFile, llvm::Succeeded()); - ModuleSpec spec{FileSpec(obj)}; - spec.GetSymbolFileSpec().SetFile(obj, FileSpec::Style::native); + ModuleSpec spec{FileSpec(ExpectedFile->name())}; + spec.GetSymbolFileSpec().SetFile(ExpectedFile->name(), + FileSpec::Style::native); auto module_sp = std::make_shared(spec); SectionList *list = module_sp->GetSectionList(); ASSERT_NE(nullptr, list); Index: lldb/trunk/unittests/Symbol/CMakeLists.txt =================================================================== --- lldb/trunk/unittests/Symbol/CMakeLists.txt +++ lldb/trunk/unittests/Symbol/CMakeLists.txt @@ -18,7 +18,6 @@ ) set(test_inputs - basic-call-frame-info.yaml inlined-functions.yaml ) add_unittest_inputs(SymbolTests "${test_inputs}") Index: lldb/trunk/unittests/Symbol/Inputs/basic-call-frame-info.yaml =================================================================== --- lldb/trunk/unittests/Symbol/Inputs/basic-call-frame-info.yaml +++ lldb/trunk/unittests/Symbol/Inputs/basic-call-frame-info.yaml @@ -1,140 +0,0 @@ ---- !ELF -FileHeader: - Class: ELFCLASS64 - Data: ELFDATA2LSB - Type: ET_DYN - Machine: EM_X86_64 - Entry: 0x0000000000000260 -Sections: - - Name: .text - Type: SHT_PROGBITS - Flags: [ SHF_ALLOC, SHF_EXECINSTR ] - Address: 0x0000000000000260 - AddressAlign: 0x0000000000000010 - Content: 554889E5897DFC8B45FC5DC30F1F4000554889E5897DFC8B45FC5DC30F1F4000554889E5897DFC8B45FC5DC3 -#0000000000000260 : -# 260: 55 push %rbp -# 261: 48 89 e5 mov %rsp,%rbp -# 264: 89 7d fc mov %edi,-0x4(%rbp) -# 267: 8b 45 fc mov -0x4(%rbp),%eax -# 26a: 5d pop %rbp -# 26b: c3 retq -# 26c: 0f 1f 40 00 nopl 0x0(%rax) -# -#0000000000000270 : -# 270: 55 push %rbp -# 271: 48 89 e5 mov %rsp,%rbp -# 274: 89 7d fc mov %edi,-0x4(%rbp) -# 277: 8b 45 fc mov -0x4(%rbp),%eax -# 27a: 5d pop %rbp -# 27b: c3 retq -# 27c: 0f 1f 40 00 nopl 0x0(%rax) -# -#0000000000000280 : -# 280: 55 push %rbp -# 281: 48 89 e5 mov %rsp,%rbp -# 284: 89 7d fc mov %edi,-0x4(%rbp) -# 287: 8b 45 fc mov -0x4(%rbp),%eax -# 28a: 5d pop %rbp -# 28b: c3 retq - - Name: .eh_frame - Type: SHT_X86_64_UNWIND - Flags: [ SHF_ALLOC ] - Address: 0x0000000000000290 - AddressAlign: 0x0000000000000008 - Content: 1400000000000000017A5200017810011B0C0708900100001C0000001C000000B0FFFFFF0C00000000410E108602430D0600000000000000 -#00000000 0000000000000014 00000000 CIE -# Version: 1 -# Augmentation: "zR" -# Code alignment factor: 1 -# Data alignment factor: -8 -# Return address column: 16 -# Augmentation data: 1b -# -# DW_CFA_def_cfa: r7 (rsp) ofs 8 -# DW_CFA_offset: r16 (rip) at cfa-8 -# DW_CFA_nop -# DW_CFA_nop -# -#00000018 000000000000001c 0000001c FDE cie=00000000 pc=ffffffffffffffd0..ffffffffffffffdc -# DW_CFA_advance_loc: 1 to ffffffffffffffd1 -# DW_CFA_def_cfa_offset: 16 -# DW_CFA_offset: r6 (rbp) at cfa-16 -# DW_CFA_advance_loc: 3 to ffffffffffffffd4 -# DW_CFA_def_cfa_register: r6 (rbp) -# DW_CFA_nop -# DW_CFA_nop -# DW_CFA_nop -# DW_CFA_nop -# DW_CFA_nop -# DW_CFA_nop -# DW_CFA_nop - - Name: .debug_frame - Type: SHT_PROGBITS - AddressAlign: 0x0000000000000008 - Content: 14000000FFFFFFFF03000178100C070890010000000000001C0000000000000070020000000000000C00000000000000410E108602430D0614000000FFFFFFFF040008000178100C07089001000000001C0000003800000080020000000000000C00000000000000410E108602430D06 -#00000000 0000000000000014 ffffffff CIE -# Version: 3 -# Augmentation: "" -# Code alignment factor: 1 -# Data alignment factor: -8 -# Return address column: 16 -# -# DW_CFA_def_cfa: r7 (rsp) ofs 8 -# DW_CFA_offset: r16 (rip) at cfa-8 -# DW_CFA_nop -# DW_CFA_nop -# DW_CFA_nop -# DW_CFA_nop -# DW_CFA_nop -# DW_CFA_nop -# -#00000018 000000000000001c 00000000 FDE cie=00000000 pc=0000000000000270..000000000000027c -# DW_CFA_advance_loc: 1 to 0000000000000271 -# DW_CFA_def_cfa_offset: 16 -# DW_CFA_offset: r6 (rbp) at cfa-16 -# DW_CFA_advance_loc: 3 to 0000000000000274 -# DW_CFA_def_cfa_register: r6 (rbp) -# -#00000038 0000000000000014 ffffffff CIE -# Version: 4 -# Augmentation: "" -# Pointer Size: 8 -# Segment Size: 0 -# Code alignment factor: 1 -# Data alignment factor: -8 -# Return address column: 16 -# -# DW_CFA_def_cfa: r7 (rsp) ofs 8 -# DW_CFA_offset: r16 (rip) at cfa-8 -# DW_CFA_nop -# DW_CFA_nop -# DW_CFA_nop -# DW_CFA_nop -# -#00000050 000000000000001c 00000038 FDE cie=00000038 pc=0000000000000280..000000000000028c -# DW_CFA_advance_loc: 1 to 0000000000000281 -# DW_CFA_def_cfa_offset: 16 -# DW_CFA_offset: r6 (rbp) at cfa-16 -# DW_CFA_advance_loc: 3 to 0000000000000284 -# DW_CFA_def_cfa_register: r6 (rbp) -Symbols: - - Name: eh_frame - Type: STT_FUNC - Section: .text - Value: 0x0000000000000260 - Size: 0x000000000000000C - Binding: STB_GLOBAL - - Name: debug_frame3 - Type: STT_FUNC - Section: .text - Value: 0x0000000000000270 - Size: 0x000000000000000C - Binding: STB_GLOBAL - - Name: debug_frame4 - Type: STT_FUNC - Section: .text - Value: 0x0000000000000280 - Size: 0x000000000000000C - Binding: STB_GLOBAL -... Index: lldb/trunk/unittests/Symbol/TestDWARFCallFrameInfo.cpp =================================================================== --- lldb/trunk/unittests/Symbol/TestDWARFCallFrameInfo.cpp +++ lldb/trunk/unittests/Symbol/TestDWARFCallFrameInfo.cpp @@ -87,14 +87,152 @@ void DWARFCallFrameInfoTest::TestBasic(DWARFCallFrameInfo::Type type, llvm::StringRef symbol) { - llvm::SmallString<128> obj; - ASSERT_NO_ERROR(llvm::sys::fs::createTemporaryFile( - "basic-call-frame-info-%%%%%%", "obj", obj)); - llvm::FileRemover obj_remover(obj); - ASSERT_THAT_ERROR(ReadYAMLObjectFile("basic-call-frame-info.yaml", obj), - llvm::Succeeded()); + auto ExpectedFile = TestFile::fromYaml(R"( +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_DYN + Machine: EM_X86_64 + Entry: 0x0000000000000260 +Sections: + - Name: .text + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC, SHF_EXECINSTR ] + Address: 0x0000000000000260 + AddressAlign: 0x0000000000000010 + Content: 554889E5897DFC8B45FC5DC30F1F4000554889E5897DFC8B45FC5DC30F1F4000554889E5897DFC8B45FC5DC3 +#0000000000000260 : +# 260: 55 push %rbp +# 261: 48 89 e5 mov %rsp,%rbp +# 264: 89 7d fc mov %edi,-0x4(%rbp) +# 267: 8b 45 fc mov -0x4(%rbp),%eax +# 26a: 5d pop %rbp +# 26b: c3 retq +# 26c: 0f 1f 40 00 nopl 0x0(%rax) +# +#0000000000000270 : +# 270: 55 push %rbp +# 271: 48 89 e5 mov %rsp,%rbp +# 274: 89 7d fc mov %edi,-0x4(%rbp) +# 277: 8b 45 fc mov -0x4(%rbp),%eax +# 27a: 5d pop %rbp +# 27b: c3 retq +# 27c: 0f 1f 40 00 nopl 0x0(%rax) +# +#0000000000000280 : +# 280: 55 push %rbp +# 281: 48 89 e5 mov %rsp,%rbp +# 284: 89 7d fc mov %edi,-0x4(%rbp) +# 287: 8b 45 fc mov -0x4(%rbp),%eax +# 28a: 5d pop %rbp +# 28b: c3 retq + - Name: .eh_frame + Type: SHT_X86_64_UNWIND + Flags: [ SHF_ALLOC ] + Address: 0x0000000000000290 + AddressAlign: 0x0000000000000008 + Content: 1400000000000000017A5200017810011B0C0708900100001C0000001C000000B0FFFFFF0C00000000410E108602430D0600000000000000 +#00000000 0000000000000014 00000000 CIE +# Version: 1 +# Augmentation: "zR" +# Code alignment factor: 1 +# Data alignment factor: -8 +# Return address column: 16 +# Augmentation data: 1b +# +# DW_CFA_def_cfa: r7 (rsp) ofs 8 +# DW_CFA_offset: r16 (rip) at cfa-8 +# DW_CFA_nop +# DW_CFA_nop +# +#00000018 000000000000001c 0000001c FDE cie=00000000 pc=ffffffffffffffd0..ffffffffffffffdc +# DW_CFA_advance_loc: 1 to ffffffffffffffd1 +# DW_CFA_def_cfa_offset: 16 +# DW_CFA_offset: r6 (rbp) at cfa-16 +# DW_CFA_advance_loc: 3 to ffffffffffffffd4 +# DW_CFA_def_cfa_register: r6 (rbp) +# DW_CFA_nop +# DW_CFA_nop +# DW_CFA_nop +# DW_CFA_nop +# DW_CFA_nop +# DW_CFA_nop +# DW_CFA_nop + - Name: .debug_frame + Type: SHT_PROGBITS + AddressAlign: 0x0000000000000008 + Content: 14000000FFFFFFFF03000178100C070890010000000000001C0000000000000070020000000000000C00000000000000410E108602430D0614000000FFFFFFFF040008000178100C07089001000000001C0000003800000080020000000000000C00000000000000410E108602430D06 +#00000000 0000000000000014 ffffffff CIE +# Version: 3 +# Augmentation: "" +# Code alignment factor: 1 +# Data alignment factor: -8 +# Return address column: 16 +# +# DW_CFA_def_cfa: r7 (rsp) ofs 8 +# DW_CFA_offset: r16 (rip) at cfa-8 +# DW_CFA_nop +# DW_CFA_nop +# DW_CFA_nop +# DW_CFA_nop +# DW_CFA_nop +# DW_CFA_nop +# +#00000018 000000000000001c 00000000 FDE cie=00000000 pc=0000000000000270..000000000000027c +# DW_CFA_advance_loc: 1 to 0000000000000271 +# DW_CFA_def_cfa_offset: 16 +# DW_CFA_offset: r6 (rbp) at cfa-16 +# DW_CFA_advance_loc: 3 to 0000000000000274 +# DW_CFA_def_cfa_register: r6 (rbp) +# +#00000038 0000000000000014 ffffffff CIE +# Version: 4 +# Augmentation: "" +# Pointer Size: 8 +# Segment Size: 0 +# Code alignment factor: 1 +# Data alignment factor: -8 +# Return address column: 16 +# +# DW_CFA_def_cfa: r7 (rsp) ofs 8 +# DW_CFA_offset: r16 (rip) at cfa-8 +# DW_CFA_nop +# DW_CFA_nop +# DW_CFA_nop +# DW_CFA_nop +# +#00000050 000000000000001c 00000038 FDE cie=00000038 pc=0000000000000280..000000000000028c +# DW_CFA_advance_loc: 1 to 0000000000000281 +# DW_CFA_def_cfa_offset: 16 +# DW_CFA_offset: r6 (rbp) at cfa-16 +# DW_CFA_advance_loc: 3 to 0000000000000284 +# DW_CFA_def_cfa_register: r6 (rbp) +Symbols: + - Name: eh_frame + Type: STT_FUNC + Section: .text + Value: 0x0000000000000260 + Size: 0x000000000000000C + Binding: STB_GLOBAL + - Name: debug_frame3 + Type: STT_FUNC + Section: .text + Value: 0x0000000000000270 + Size: 0x000000000000000C + Binding: STB_GLOBAL + - Name: debug_frame4 + Type: STT_FUNC + Section: .text + Value: 0x0000000000000280 + Size: 0x000000000000000C + Binding: STB_GLOBAL +... +)"); + ASSERT_THAT_EXPECTED(ExpectedFile, llvm::Succeeded()); - auto module_sp = std::make_shared(ModuleSpec(FileSpec(obj))); + auto module_sp = + std::make_shared(ModuleSpec(FileSpec(ExpectedFile->name()))); SectionList *list = module_sp->GetSectionList(); ASSERT_NE(nullptr, list); Index: lldb/trunk/unittests/Symbol/TestLineEntry.cpp =================================================================== --- lldb/trunk/unittests/Symbol/TestLineEntry.cpp +++ lldb/trunk/unittests/Symbol/TestLineEntry.cpp @@ -33,13 +33,7 @@ class LineEntryTest : public testing::Test { public: - void SetUp() override { - FileSystem::Initialize(); - HostInfo::Initialize(); - ObjectFileMachO::Initialize(); - SymbolFileDWARF::Initialize(); - ClangASTContext::Initialize(); - } + void SetUp() override; void TearDown() override { ClangASTContext::Terminate(); @@ -50,44 +44,32 @@ } protected: - llvm::Expected GetModule(); llvm::Expected GetLineEntryForLine(uint32_t line); + llvm::Optional m_file; ModuleSP m_module_sp; }; -llvm::Expected LineEntryTest::GetModule() { - if (m_module_sp) - return m_module_sp; - - llvm::SmallString<128> obj; - if (auto ec = llvm::sys::fs::createTemporaryFile("source-%%%%%%", "obj", obj)) - return llvm::errorCodeToError(ec); - llvm::FileRemover obj_remover(obj); - if (auto error = ReadYAMLObjectFile("inlined-functions.yaml", obj)) - return llvm::Error(std::move(error)); - - m_module_sp = std::make_shared(ModuleSpec(FileSpec(obj))); - // Preload because the temporary file will be gone once we exit this function. - m_module_sp->PreloadSymbols(); - return m_module_sp; +void LineEntryTest::SetUp() { + FileSystem::Initialize(); + HostInfo::Initialize(); + ObjectFileMachO::Initialize(); + SymbolFileDWARF::Initialize(); + ClangASTContext::Initialize(); + auto ExpectedFile = TestFile::fromYamlFile("inlined-functions.yaml"); + ASSERT_THAT_EXPECTED(ExpectedFile, llvm::Succeeded()); + m_file.emplace(std::move(*ExpectedFile)); + m_module_sp = std::make_shared(ModuleSpec(FileSpec(m_file->name()))); } llvm::Expected LineEntryTest::GetLineEntryForLine(uint32_t line) { - auto expected_module_so = GetModule(); - - if (!expected_module_so) - return llvm::createStringError(llvm::inconvertibleErrorCode(), - "Not able to get module for test object."); - - auto module = expected_module_so->get(); bool check_inlines = true; bool exact = true; SymbolContextList sc_comp_units; SymbolContextList sc_line_entries; FileSpec file_spec("inlined-functions.cpp"); - module->ResolveSymbolContextsForFileSpec(file_spec, line, check_inlines, - lldb::eSymbolContextCompUnit, - sc_comp_units); + m_module_sp->ResolveSymbolContextsForFileSpec(file_spec, line, check_inlines, + lldb::eSymbolContextCompUnit, + sc_comp_units); if (sc_comp_units.GetSize() == 0) return llvm::createStringError(llvm::inconvertibleErrorCode(), "No comp unit found on the test object."); Index: lldb/trunk/unittests/TestingSupport/CMakeLists.txt =================================================================== --- lldb/trunk/unittests/TestingSupport/CMakeLists.txt +++ lldb/trunk/unittests/TestingSupport/CMakeLists.txt @@ -8,7 +8,5 @@ LINK_COMPONENTS Support + ObjectYAML ) - -add_dependencies(lldbUtilityHelpers yaml2obj) -add_definitions(-DYAML2OBJ="$") \ No newline at end of file Index: lldb/trunk/unittests/TestingSupport/TestUtilities.h =================================================================== --- lldb/trunk/unittests/TestingSupport/TestUtilities.h +++ lldb/trunk/unittests/TestingSupport/TestUtilities.h @@ -12,6 +12,7 @@ #include "llvm/ADT/SmallString.h" #include "llvm/ADT/Twine.h" #include "llvm/Support/Error.h" +#include "llvm/Support/FileUtilities.h" #include #define ASSERT_NO_ERROR(x) \ @@ -27,8 +28,28 @@ namespace lldb_private { std::string GetInputFilePath(const llvm::Twine &name); -llvm::Error ReadYAMLObjectFile(const llvm::Twine &yaml_name, - llvm::SmallString<128> &obj); + +class TestFile { +public: + static llvm::Expected fromYaml(llvm::StringRef Yaml); + static llvm::Expected fromYamlFile(const llvm::Twine &Name); + + TestFile(TestFile &&RHS) : Name(std::move(RHS.Name)) { + RHS.Name = llvm::None; + } + + ~TestFile(); + + llvm::StringRef name() { return *Name; } + +private: + TestFile(llvm::StringRef Name, llvm::FileRemover &&Remover) : Name(Name) { + Remover.releaseFile(); + } + void operator=(const TestFile &) = delete; + + llvm::Optional Name; +}; } #endif Index: lldb/trunk/unittests/TestingSupport/TestUtilities.cpp =================================================================== --- lldb/trunk/unittests/TestingSupport/TestUtilities.cpp +++ lldb/trunk/unittests/TestingSupport/TestUtilities.cpp @@ -8,9 +8,14 @@ #include "TestUtilities.h" #include "llvm/ADT/SmallString.h" +#include "llvm/ObjectYAML/yaml2obj.h" #include "llvm/Support/FileSystem.h" #include "llvm/Support/Path.h" #include "llvm/Support/Program.h" +#include "llvm/Support/YAMLTraits.h" +#include "gtest/gtest.h" + +using namespace lldb_private; extern const char *TestMainArgv0; @@ -21,23 +26,39 @@ return result.str(); } -llvm::Error -lldb_private::ReadYAMLObjectFile(const llvm::Twine &yaml_name, - llvm::SmallString<128> &object_file) { - std::string yaml = GetInputFilePath(yaml_name); - llvm::StringRef args[] = {YAML2OBJ, yaml}; - llvm::StringRef obj_ref = object_file; - const llvm::Optional redirects[] = {llvm::None, obj_ref, - llvm::None}; - if (llvm::sys::ExecuteAndWait(YAML2OBJ, args, llvm::None, redirects) != 0) - return llvm::createStringError(llvm::inconvertibleErrorCode(), - "Error running yaml2obj %s.", yaml.c_str()); - uint64_t size; - if (auto ec = llvm::sys::fs::file_size(object_file, size)) - return llvm::errorCodeToError(ec); - if (size == 0) - return llvm::createStringError( - llvm::inconvertibleErrorCode(), - "Empty object file created from yaml2obj %s.", yaml.c_str()); - return llvm::Error::success(); +llvm::Expected TestFile::fromYaml(llvm::StringRef Yaml) { + const auto *Info = testing::UnitTest::GetInstance()->current_test_info(); + assert(Info); + llvm::SmallString<128> Name; + int FD; + if (std::error_code EC = llvm::sys::fs::createTemporaryFile( + llvm::Twine(Info->test_case_name()) + "-" + Info->name(), "test", FD, + Name)) + return llvm::errorCodeToError(EC); + llvm::FileRemover Remover(Name); + { + llvm::raw_fd_ostream OS(FD, /*shouldClose*/ true); + llvm::yaml::Input YIn(Yaml); + if (llvm::Error E = llvm::yaml::convertYAML(YIn, OS)) + return std::move(E); + } + return TestFile(Name, std::move(Remover)); +} + +llvm::Expected TestFile::fromYamlFile(const llvm::Twine &Name) { + auto BufferOrError = + llvm::MemoryBuffer::getFile(GetInputFilePath(Name), /*FileSize*/ -1, + /*RequiresNullTerminator*/ false); + if (!BufferOrError) + return llvm::errorCodeToError(BufferOrError.getError()); + return fromYaml(BufferOrError.get()->getBuffer()); +} + +TestFile::~TestFile() { + if (!Name) + return; + if (std::error_code EC = + llvm::sys::fs::remove(*Name, /*IgnoreNonExisting*/ false)) + GTEST_LOG_(WARNING) << "Failed to delete `" << Name->c_str() + << "`: " << EC.message(); }