lldb::UnwindAssemblySP FuncUnwinders::GetUnwindAssemblyProfiler(Target &target) { UnwindAssemblySP assembly_profiler_sp; ArchSpec arch; if (m_unwind_table.GetArchitecture(arch)) { arch.MergeFrom(target.GetArchitecture()); assembly_profiler_sp = UnwindAssembly::FindPlugin(arch); } return assembly_profiler_sp; }
TEST(ArchSpecTest, MergeFrom) { { ArchSpec A; ArchSpec B("x86_64-pc-linux"); EXPECT_FALSE(A.IsValid()); ASSERT_TRUE(B.IsValid()); EXPECT_EQ(llvm::Triple::ArchType::x86_64, B.GetTriple().getArch()); EXPECT_EQ(llvm::Triple::VendorType::PC, B.GetTriple().getVendor()); EXPECT_EQ(llvm::Triple::OSType::Linux, B.GetTriple().getOS()); EXPECT_EQ(ArchSpec::eCore_x86_64_x86_64, B.GetCore()); A.MergeFrom(B); ASSERT_TRUE(A.IsValid()); EXPECT_EQ(llvm::Triple::ArchType::x86_64, A.GetTriple().getArch()); EXPECT_EQ(llvm::Triple::VendorType::PC, A.GetTriple().getVendor()); EXPECT_EQ(llvm::Triple::OSType::Linux, A.GetTriple().getOS()); EXPECT_EQ(ArchSpec::eCore_x86_64_x86_64, A.GetCore()); } { ArchSpec A("aarch64"); ArchSpec B("aarch64--linux-android"); EXPECT_TRUE(A.IsValid()); EXPECT_TRUE(B.IsValid()); EXPECT_EQ(llvm::Triple::ArchType::aarch64, B.GetTriple().getArch()); EXPECT_EQ(llvm::Triple::VendorType::UnknownVendor, B.GetTriple().getVendor()); EXPECT_EQ(llvm::Triple::OSType::Linux, B.GetTriple().getOS()); EXPECT_EQ(llvm::Triple::EnvironmentType::Android, B.GetTriple().getEnvironment()); A.MergeFrom(B); EXPECT_EQ(llvm::Triple::ArchType::aarch64, A.GetTriple().getArch()); EXPECT_EQ(llvm::Triple::VendorType::UnknownVendor, A.GetTriple().getVendor()); EXPECT_EQ(llvm::Triple::OSType::Linux, A.GetTriple().getOS()); EXPECT_EQ(llvm::Triple::EnvironmentType::Android, A.GetTriple().getEnvironment()); } }