uintptr_t FIRCLSDwarfUnwindGetRegisterValue()

in Crashlytics/Crashlytics/Unwind/FIRCLSUnwind_x86.c [146:210]


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

  FIRCLSSDKLog("Error: Unrecognized get register number %llu\n", num);

  return 0;
}