bool FIRCLSDwarfUnwindSetRegisterValue()

in Crashlytics/Crashlytics/Unwind/FIRCLSUnwind_x86.c [212:304]


bool FIRCLSDwarfUnwindSetRegisterValue(FIRCLSThreadContext* registers,
                                       uint64_t num,
                                       uintptr_t value) {
  switch (num) {
#if CLS_CPU_X86_64
    case CLS_DWARF_X86_64_RAX:
      registers->__ss.__rax = value;
      return true;
    case CLS_DWARF_X86_64_RDX:
      registers->__ss.__rdx = value;
      return true;
    case CLS_DWARF_X86_64_RCX:
      registers->__ss.__rcx = value;
      return true;
    case CLS_DWARF_X86_64_RBX:
      registers->__ss.__rbx = value;
      return true;
    case CLS_DWARF_X86_64_RSI:
      registers->__ss.__rsi = value;
      return true;
    case CLS_DWARF_X86_64_RDI:
      registers->__ss.__rdi = value;
      return true;
    case CLS_DWARF_X86_64_RBP:
      registers->__ss.__rbp = value;
      return true;
    case CLS_DWARF_X86_64_RSP:
      registers->__ss.__rsp = value;
      return true;
    case CLS_DWARF_X86_64_R8:
      registers->__ss.__r8 = value;
      return true;
    case CLS_DWARF_X86_64_R9:
      registers->__ss.__r9 = value;
      return true;
    case CLS_DWARF_X86_64_R10:
      registers->__ss.__r10 = value;
      return true;
    case CLS_DWARF_X86_64_R11:
      registers->__ss.__r11 = value;
      return true;
    case CLS_DWARF_X86_64_R12:
      registers->__ss.__r12 = value;
      return true;
    case CLS_DWARF_X86_64_R13:
      registers->__ss.__r13 = value;
      return true;
    case CLS_DWARF_X86_64_R14:
      registers->__ss.__r14 = value;
      return true;
    case CLS_DWARF_X86_64_R15:
      registers->__ss.__r15 = value;
      return true;
    case CLS_DWARF_X86_64_RET_ADDR:
      registers->__ss.__rip = value;
      return true;
#elif CLS_CPU_I386
    case CLS_DWARF_X86_EAX:
      registers->__ss.__eax = value;
      return true;
    case CLS_DWARF_X86_ECX:
      registers->__ss.__ecx = value;
      return true;
    case CLS_DWARF_X86_EDX:
      registers->__ss.__edx = value;
      return true;
    case CLS_DWARF_X86_EBX:
      registers->__ss.__ebx = value;
      return true;
    case CLS_DWARF_X86_EBP:
      registers->__ss.__ebp = value;
      return true;
    case CLS_DWARF_X86_ESP:
      registers->__ss.__esp = value;
      return true;
    case CLS_DWARF_X86_ESI:
      registers->__ss.__esi = value;
      return true;
    case CLS_DWARF_X86_EDI:
      registers->__ss.__edi = value;
      return true;
    case CLS_DWARF_X86_RET_ADDR:
      registers->__ss.__eip = value;
      return true;
#endif
    default:
      break;
  }

  FIRCLSSDKLog("Unrecognized set register number %llu\n", num);

  return false;
}