906  if (data == 
nullptr || size == 0)
 
  915  addr_t current_func_text_offset = 0;
 
  916  int current_sp_bytes_offset_from_fa = 0;
 
  917  bool is_aligned = 
false;
 
  944  std::vector<bool> saved_registers(32, 
false);
 
  951  std::optional<UnwindPlan::Row>
 
  952      prologue_completed_row; 
 
  953  int prologue_completed_sp_bytes_offset_from_cfa = 0; 
 
  955  bool prologue_completed_is_aligned = 
false;
 
  956  std::vector<bool> prologue_completed_saved_registers;
 
  958  while (current_func_text_offset < size) {
 
  959    int stack_offset, insn_len;
 
  964    bool in_epilogue = 
false; 
 
  965    bool row_updated = 
false; 
 
  966    bool current_sp_offset_updated =
 
  979    auto fa_value_ptr = is_aligned ? &afa_value : &cfa_value;
 
  983        fa_value_ptr->SetIsRegisterPlusOffset(
 
  991        fa_value_ptr->SetIsRegisterPlusOffset(
 
  998      current_sp_bytes_offset_from_fa = 0;
 
  999      afa_value.SetIsRegisterPlusOffset(
 
 1001      fa_value_ptr = &afa_value;
 
 1010        fa_value_ptr = &cfa_value;
 
 1011        afa_value.SetUnspecified();
 
 1015        current_sp_bytes_offset_from_fa = fa_value_ptr->GetOffset();
 
 1016        current_sp_offset_updated = 
true;
 
 1024        fa_value_ptr = &cfa_value;
 
 1025        afa_value.SetUnspecified();
 
 1029        current_sp_bytes_offset_from_fa = fa_value_ptr->GetOffset();
 
 1030        current_sp_offset_updated = 
true;
 
 1043      current_sp_bytes_offset_from_fa += 
m_wordsize;
 
 1044      current_sp_offset_updated = 
true;
 
 1049        fa_value_ptr->SetOffset(current_sp_bytes_offset_from_fa);
 
 1056          !saved_registers[machine_regno]) {
 
 1063        saved_registers[machine_regno] = 
true;
 
 1069      current_sp_bytes_offset_from_fa -= 
m_wordsize;
 
 1070      current_sp_offset_updated = 
true;
 
 1074          saved_registers[machine_regno]) {
 
 1075        saved_registers[machine_regno] = 
false;
 
 1078        if (lldb_regno == fa_value_ptr->GetRegisterNumber()) {
 
 1079          fa_value_ptr->SetIsRegisterPlusOffset(
 
 1090        fa_value_ptr->SetIsRegisterPlusOffset(
 
 1097      current_sp_bytes_offset_from_fa -= 
m_wordsize;
 
 1098      current_sp_offset_updated = 
true;
 
 1100        fa_value_ptr->SetIsRegisterPlusOffset(
 
 1120        fa_value_ptr = &cfa_value;
 
 1121        afa_value.SetUnspecified();
 
 1127        fa_value_ptr->SetIsRegisterPlusOffset(
 
 1130        current_sp_bytes_offset_from_fa = fa_value_ptr->GetOffset();
 
 1133      current_sp_bytes_offset_from_fa -= 
m_wordsize;
 
 1134      current_sp_offset_updated = 
true;
 
 1137        fa_value_ptr->SetIsRegisterPlusOffset(
 
 1148             !saved_registers[machine_regno]) {
 
 1149      saved_registers[machine_regno] = 
true;
 
 1169      current_sp_bytes_offset_from_fa += stack_offset;
 
 1170      current_sp_offset_updated = 
true;
 
 1172        fa_value_ptr->SetOffset(current_sp_bytes_offset_from_fa);
 
 1178      current_sp_bytes_offset_from_fa -= stack_offset;
 
 1179      current_sp_offset_updated = 
true;
 
 1181        fa_value_ptr->SetOffset(current_sp_bytes_offset_from_fa);
 
 1189      current_sp_bytes_offset_from_fa += 
m_wordsize;
 
 1190      current_sp_offset_updated = 
true;
 
 1192        fa_value_ptr->SetOffset(current_sp_bytes_offset_from_fa);
 
 1198      current_sp_bytes_offset_from_fa -= stack_offset;
 
 1199      current_sp_offset_updated = 
true;
 
 1201        fa_value_ptr->SetOffset(current_sp_bytes_offset_from_fa);
 
 1204      if (stack_offset > 0)
 
 1212        fa_value_ptr = &cfa_value;
 
 1213        afa_value.SetUnspecified();
 
 1217        current_sp_bytes_offset_from_fa =
 
 1218          fa_value_ptr->GetOffset() - stack_offset;
 
 1219        current_sp_offset_updated = 
true;
 
 1227        fa_value_ptr = &cfa_value;
 
 1228        afa_value.SetUnspecified();
 
 1232        current_sp_bytes_offset_from_fa = fa_value_ptr->GetOffset() - stack_offset;
 
 1233        current_sp_offset_updated = 
true;
 
 1237    else if (prologue_completed_row &&
 
 1257            (
sp.IsCFAPlusOffset() && 
sp.GetOffset() == 0 &&
 
 1262          row = *prologue_completed_row;
 
 1263          current_sp_bytes_offset_from_fa =
 
 1264              prologue_completed_sp_bytes_offset_from_cfa;
 
 1265          current_sp_offset_updated = 
true;
 
 1266          is_aligned = prologue_completed_is_aligned;
 
 1268          saved_registers = prologue_completed_saved_registers;
 
 1281      current_sp_bytes_offset_from_fa += 
m_wordsize;
 
 1282      current_sp_offset_updated = 
true;
 
 1284        fa_value_ptr->SetOffset(current_sp_bytes_offset_from_fa);
 
 1290      if (current_func_text_offset + insn_len < size) {
 
 1291        row.
SetOffset(current_func_text_offset + insn_len);
 
 1296    if (!in_epilogue && row_updated) {
 
 1298      prologue_completed_row = row;
 
 1299      prologue_completed_saved_registers = saved_registers;
 
 1304    if (!in_epilogue && current_sp_offset_updated) {
 
 1305      prologue_completed_sp_bytes_offset_from_cfa =
 
 1306          current_sp_bytes_offset_from_fa;
 
 1307      prologue_completed_is_aligned = is_aligned;
 
 1311    current_func_text_offset += insn_len;