Index: source/Plugins/UnwindAssembly/x86/UnwindAssembly-x86.cpp =================================================================== --- source/Plugins/UnwindAssembly/x86/UnwindAssembly-x86.cpp (revision 216406) +++ source/Plugins/UnwindAssembly/x86/UnwindAssembly-x86.cpp (working copy) @@ -876,6 +876,7 @@ m_cur_insn = func.GetBaseAddress(); uint64_t offset = 0; int row_id = 1; + bool unwind_plan_updated = false; UnwindPlan::RowSP row(new UnwindPlan::Row(*first_row)); while (func.ContainsFileAddress (m_cur_insn)) { @@ -935,6 +936,7 @@ UnwindPlan::RowSP new_row(new UnwindPlan::Row(*row)); unwind_plan.InsertRow (new_row); + unwind_plan_updated = true; continue; } @@ -946,6 +948,7 @@ UnwindPlan::RowSP new_row(new UnwindPlan::Row(*row)); unwind_plan.InsertRow (new_row); + unwind_plan_updated = true; continue; } if (pop_reg_p (regno)) { @@ -959,6 +962,7 @@ UnwindPlan::RowSP new_row(new UnwindPlan::Row(*row)); unwind_plan.InsertRow (new_row); + unwind_plan_updated = true; continue; } @@ -968,6 +972,7 @@ row->SetCFAOffset (m_wordsize + row->GetCFAOffset()); UnwindPlan::RowSP new_row(new UnwindPlan::Row(*row)); unwind_plan.InsertRow (new_row); + unwind_plan_updated = true; continue; } @@ -979,6 +984,7 @@ UnwindPlan::RowSP new_row(new UnwindPlan::Row(*row)); unwind_plan.InsertRow (new_row); + unwind_plan_updated = true; continue; } if (sub_rsp_pattern_p (amount)) { @@ -987,6 +993,7 @@ UnwindPlan::RowSP new_row(new UnwindPlan::Row(*row)); unwind_plan.InsertRow (new_row); + unwind_plan_updated = true; continue; } } @@ -1009,6 +1016,7 @@ UnwindPlan::RowSP new_row(new UnwindPlan::Row(*row)); unwind_plan.InsertRow (new_row); + unwind_plan_updated = true; continue; } } @@ -1024,6 +1032,13 @@ } unwind_plan.SetPlanValidAddressRange (func); + if (unwind_plan_updated) + { + std::string unwind_plan_source (unwind_plan.GetSourceName().AsCString()); + unwind_plan_source += " plus augmentation from assembly parsing"; + unwind_plan.SetSourceName (unwind_plan_source.c_str()); + unwind_plan.SetSourcedFromCompiler (eLazyBoolNo); + } return true; } Index: source/Symbol/FuncUnwinders.cpp =================================================================== --- source/Symbol/FuncUnwinders.cpp (revision 216406) +++ source/Symbol/FuncUnwinders.cpp (working copy) @@ -115,7 +115,8 @@ if (assembly_profiler_sp) { if (target.GetArchitecture().GetCore() == ArchSpec::eCore_x86_32_i386 - || target.GetArchitecture().GetCore() == ArchSpec::eCore_x86_64_x86_64) + || target.GetArchitecture().GetCore() == ArchSpec::eCore_x86_64_x86_64 + || target.GetArchitecture().GetCore() == ArchSpec::eCore_x86_64_x86_64h) { // For 0th frame on i386 & x86_64, we fetch eh_frame and try using assembly profiler // to augment it into asynchronous unwind table.