Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
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;
}