status_t ArchitectureX8664::Init() { fAssemblyLanguage = new(std::nothrow) X86AssemblyLanguage; if (fAssemblyLanguage == NULL) return B_NO_MEMORY; try { _AddIntegerRegister(X86_64_REGISTER_RIP, "rip", B_UINT64_TYPE, REGISTER_TYPE_INSTRUCTION_POINTER, false); _AddIntegerRegister(X86_64_REGISTER_RSP, "rsp", B_UINT64_TYPE, REGISTER_TYPE_STACK_POINTER, true); _AddIntegerRegister(X86_64_REGISTER_RBP, "rbp", B_UINT64_TYPE, REGISTER_TYPE_GENERAL_PURPOSE, true); _AddIntegerRegister(X86_64_REGISTER_RAX, "rax", B_UINT64_TYPE, REGISTER_TYPE_GENERAL_PURPOSE, false); _AddIntegerRegister(X86_64_REGISTER_RBX, "rbx", B_UINT64_TYPE, REGISTER_TYPE_GENERAL_PURPOSE, true); _AddIntegerRegister(X86_64_REGISTER_RCX, "rcx", B_UINT64_TYPE, REGISTER_TYPE_GENERAL_PURPOSE, false); _AddIntegerRegister(X86_64_REGISTER_RDX, "rdx", B_UINT64_TYPE, REGISTER_TYPE_GENERAL_PURPOSE, false); _AddIntegerRegister(X86_64_REGISTER_RSI, "rsi", B_UINT64_TYPE, REGISTER_TYPE_GENERAL_PURPOSE, false); _AddIntegerRegister(X86_64_REGISTER_RDI, "rdi", B_UINT64_TYPE, REGISTER_TYPE_GENERAL_PURPOSE, false); _AddIntegerRegister(X86_64_REGISTER_R8, "r8", B_UINT64_TYPE, REGISTER_TYPE_GENERAL_PURPOSE, false); _AddIntegerRegister(X86_64_REGISTER_R9, "r9", B_UINT64_TYPE, REGISTER_TYPE_GENERAL_PURPOSE, false); _AddIntegerRegister(X86_64_REGISTER_R10, "r10", B_UINT64_TYPE, REGISTER_TYPE_GENERAL_PURPOSE, false); _AddIntegerRegister(X86_64_REGISTER_R11, "r11", B_UINT64_TYPE, REGISTER_TYPE_GENERAL_PURPOSE, false); _AddIntegerRegister(X86_64_REGISTER_R12, "r12", B_UINT64_TYPE, REGISTER_TYPE_GENERAL_PURPOSE, true); _AddIntegerRegister(X86_64_REGISTER_R13, "r13", B_UINT64_TYPE, REGISTER_TYPE_GENERAL_PURPOSE, true); _AddIntegerRegister(X86_64_REGISTER_R14, "r14", B_UINT64_TYPE, REGISTER_TYPE_GENERAL_PURPOSE, true); _AddIntegerRegister(X86_64_REGISTER_R15, "r15", B_UINT64_TYPE, REGISTER_TYPE_GENERAL_PURPOSE, true); _AddIntegerRegister(X86_64_REGISTER_CS, "cs", B_UINT16_TYPE, REGISTER_TYPE_SPECIAL_PURPOSE, true); _AddIntegerRegister(X86_64_REGISTER_DS, "ds", B_UINT16_TYPE, REGISTER_TYPE_SPECIAL_PURPOSE, true); _AddIntegerRegister(X86_64_REGISTER_ES, "es", B_UINT16_TYPE, REGISTER_TYPE_SPECIAL_PURPOSE, true); _AddIntegerRegister(X86_64_REGISTER_FS, "fs", B_UINT16_TYPE, REGISTER_TYPE_SPECIAL_PURPOSE, true); _AddIntegerRegister(X86_64_REGISTER_GS, "gs", B_UINT16_TYPE, REGISTER_TYPE_SPECIAL_PURPOSE, true); _AddIntegerRegister(X86_64_REGISTER_SS, "ss", B_UINT16_TYPE, REGISTER_TYPE_SPECIAL_PURPOSE, true); } catch (std::bad_alloc) { return B_NO_MEMORY; } fToDwarfRegisterMap = new(std::nothrow) ToDwarfRegisterMap; fFromDwarfRegisterMap = new(std::nothrow) FromDwarfRegisterMap; if (fToDwarfRegisterMap == NULL || fFromDwarfRegisterMap == NULL) return B_NO_MEMORY; return B_OK; }
status_t ArchitectureX8664::Init() { fAssemblyLanguage = new(std::nothrow) X86AssemblyLanguage; if (fAssemblyLanguage == NULL) return B_NO_MEMORY; try { _AddIntegerRegister(X86_64_REGISTER_RIP, "rip", B_UINT64_TYPE, REGISTER_TYPE_INSTRUCTION_POINTER, false); _AddIntegerRegister(X86_64_REGISTER_RSP, "rsp", B_UINT64_TYPE, REGISTER_TYPE_STACK_POINTER, true); _AddIntegerRegister(X86_64_REGISTER_RBP, "rbp", B_UINT64_TYPE, REGISTER_TYPE_GENERAL_PURPOSE, true); _AddIntegerRegister(X86_64_REGISTER_RAX, "rax", B_UINT64_TYPE, REGISTER_TYPE_GENERAL_PURPOSE, false); _AddIntegerRegister(X86_64_REGISTER_RBX, "rbx", B_UINT64_TYPE, REGISTER_TYPE_GENERAL_PURPOSE, true); _AddIntegerRegister(X86_64_REGISTER_RCX, "rcx", B_UINT64_TYPE, REGISTER_TYPE_GENERAL_PURPOSE, false); _AddIntegerRegister(X86_64_REGISTER_RDX, "rdx", B_UINT64_TYPE, REGISTER_TYPE_GENERAL_PURPOSE, false); _AddIntegerRegister(X86_64_REGISTER_RSI, "rsi", B_UINT64_TYPE, REGISTER_TYPE_GENERAL_PURPOSE, false); _AddIntegerRegister(X86_64_REGISTER_RDI, "rdi", B_UINT64_TYPE, REGISTER_TYPE_GENERAL_PURPOSE, false); _AddIntegerRegister(X86_64_REGISTER_R8, "r8", B_UINT64_TYPE, REGISTER_TYPE_GENERAL_PURPOSE, false); _AddIntegerRegister(X86_64_REGISTER_R9, "r9", B_UINT64_TYPE, REGISTER_TYPE_GENERAL_PURPOSE, false); _AddIntegerRegister(X86_64_REGISTER_R10, "r10", B_UINT64_TYPE, REGISTER_TYPE_GENERAL_PURPOSE, false); _AddIntegerRegister(X86_64_REGISTER_R11, "r11", B_UINT64_TYPE, REGISTER_TYPE_GENERAL_PURPOSE, false); _AddIntegerRegister(X86_64_REGISTER_R12, "r12", B_UINT64_TYPE, REGISTER_TYPE_GENERAL_PURPOSE, true); _AddIntegerRegister(X86_64_REGISTER_R13, "r13", B_UINT64_TYPE, REGISTER_TYPE_GENERAL_PURPOSE, true); _AddIntegerRegister(X86_64_REGISTER_R14, "r14", B_UINT64_TYPE, REGISTER_TYPE_GENERAL_PURPOSE, true); _AddIntegerRegister(X86_64_REGISTER_R15, "r15", B_UINT64_TYPE, REGISTER_TYPE_GENERAL_PURPOSE, true); _AddIntegerRegister(X86_64_REGISTER_CS, "cs", B_UINT16_TYPE, REGISTER_TYPE_SPECIAL_PURPOSE, true); _AddIntegerRegister(X86_64_REGISTER_DS, "ds", B_UINT16_TYPE, REGISTER_TYPE_SPECIAL_PURPOSE, true); _AddIntegerRegister(X86_64_REGISTER_ES, "es", B_UINT16_TYPE, REGISTER_TYPE_SPECIAL_PURPOSE, true); _AddIntegerRegister(X86_64_REGISTER_FS, "fs", B_UINT16_TYPE, REGISTER_TYPE_SPECIAL_PURPOSE, true); _AddIntegerRegister(X86_64_REGISTER_GS, "gs", B_UINT16_TYPE, REGISTER_TYPE_SPECIAL_PURPOSE, true); _AddIntegerRegister(X86_64_REGISTER_SS, "ss", B_UINT16_TYPE, REGISTER_TYPE_SPECIAL_PURPOSE, true); _AddFPRegister(X86_64_REGISTER_ST0, "st0"); _AddFPRegister(X86_64_REGISTER_ST1, "st1"); _AddFPRegister(X86_64_REGISTER_ST2, "st2"); _AddFPRegister(X86_64_REGISTER_ST3, "st3"); _AddFPRegister(X86_64_REGISTER_ST4, "st4"); _AddFPRegister(X86_64_REGISTER_ST5, "st5"); _AddFPRegister(X86_64_REGISTER_ST6, "st6"); _AddFPRegister(X86_64_REGISTER_ST7, "st7"); _AddSIMDRegister(X86_64_REGISTER_MM0, "mm0", sizeof(uint64)); _AddSIMDRegister(X86_64_REGISTER_MM1, "mm1", sizeof(uint64)); _AddSIMDRegister(X86_64_REGISTER_MM2, "mm2", sizeof(uint64)); _AddSIMDRegister(X86_64_REGISTER_MM3, "mm3", sizeof(uint64)); _AddSIMDRegister(X86_64_REGISTER_MM4, "mm4", sizeof(uint64)); _AddSIMDRegister(X86_64_REGISTER_MM5, "mm5", sizeof(uint64)); _AddSIMDRegister(X86_64_REGISTER_MM6, "mm6", sizeof(uint64)); _AddSIMDRegister(X86_64_REGISTER_MM7, "mm7", sizeof(uint64)); _AddSIMDRegister(X86_64_REGISTER_XMM0, "xmm0", sizeof(x86_64_xmm_register)); _AddSIMDRegister(X86_64_REGISTER_XMM1, "xmm1", sizeof(x86_64_xmm_register)); _AddSIMDRegister(X86_64_REGISTER_XMM2, "xmm2", sizeof(x86_64_xmm_register)); _AddSIMDRegister(X86_64_REGISTER_XMM3, "xmm3", sizeof(x86_64_xmm_register)); _AddSIMDRegister(X86_64_REGISTER_XMM4, "xmm4", sizeof(x86_64_xmm_register)); _AddSIMDRegister(X86_64_REGISTER_XMM5, "xmm5", sizeof(x86_64_xmm_register)); _AddSIMDRegister(X86_64_REGISTER_XMM6, "xmm6", sizeof(x86_64_xmm_register)); _AddSIMDRegister(X86_64_REGISTER_XMM7, "xmm7", sizeof(x86_64_xmm_register)); _AddSIMDRegister(X86_64_REGISTER_XMM8, "xmm8", sizeof(x86_64_xmm_register)); _AddSIMDRegister(X86_64_REGISTER_XMM9, "xmm9", sizeof(x86_64_xmm_register)); _AddSIMDRegister(X86_64_REGISTER_XMM10, "xmm10", sizeof(x86_64_xmm_register)); _AddSIMDRegister(X86_64_REGISTER_XMM11, "xmm11", sizeof(x86_64_xmm_register)); _AddSIMDRegister(X86_64_REGISTER_XMM12, "xmm12", sizeof(x86_64_xmm_register)); _AddSIMDRegister(X86_64_REGISTER_XMM13, "xmm13", sizeof(x86_64_xmm_register)); _AddSIMDRegister(X86_64_REGISTER_XMM14, "xmm14", sizeof(x86_64_xmm_register)); _AddSIMDRegister(X86_64_REGISTER_XMM15, "xmm15", sizeof(x86_64_xmm_register)); } catch (std::bad_alloc) { return B_NO_MEMORY; } fToDwarfRegisterMap = new(std::nothrow) ToDwarfRegisterMap; fFromDwarfRegisterMap = new(std::nothrow) FromDwarfRegisterMap; if (fToDwarfRegisterMap == NULL || fFromDwarfRegisterMap == NULL) return B_NO_MEMORY; return B_OK; }