[Lldb-commits] [lldb] e520487 - [lldb] [Process/FreeBSDRemote] Access FPR via RegisterInfo offsets
Michał Górny via lldb-commits
lldb-commits at lists.llvm.org
Mon Nov 16 04:03:12 PST 2020
Author: Michał Górny
Date: 2020-11-16T13:03:01+01:00
New Revision: e520487bf4bf1efc83e1f8175c6fd8356495bb5d
URL: https://github.com/llvm/llvm-project/commit/e520487bf4bf1efc83e1f8175c6fd8356495bb5d
DIFF: https://github.com/llvm/llvm-project/commit/e520487bf4bf1efc83e1f8175c6fd8356495bb5d.diff
LOG: [lldb] [Process/FreeBSDRemote] Access FPR via RegisterInfo offsets
Use offset-based method to access base x87 FPU registers, using offsets
relative to the position of 'struct FPR', as determined by the location
of first register in it (fctrl). Change m_fpr to use a fixed-size array
matching FXSAVE size (512 bytes). Add unit tests for verifying
RegisterInfo offsets and sizes against the FXSAVE layout.
Differential Revision: https://reviews.llvm.org/D91248
Added:
Modified:
lldb/source/Plugins/Process/FreeBSDRemote/NativeRegisterContextFreeBSD_x86_64.cpp
lldb/source/Plugins/Process/FreeBSDRemote/NativeRegisterContextFreeBSD_x86_64.h
lldb/unittests/Process/Utility/RegisterContextFreeBSDTest.cpp
Removed:
################################################################################
diff --git a/lldb/source/Plugins/Process/FreeBSDRemote/NativeRegisterContextFreeBSD_x86_64.cpp b/lldb/source/Plugins/Process/FreeBSDRemote/NativeRegisterContextFreeBSD_x86_64.cpp
index 135306d3020e..02dd24b52934 100644
--- a/lldb/source/Plugins/Process/FreeBSDRemote/NativeRegisterContextFreeBSD_x86_64.cpp
+++ b/lldb/source/Plugins/Process/FreeBSDRemote/NativeRegisterContextFreeBSD_x86_64.cpp
@@ -248,7 +248,7 @@ NativeRegisterContextFreeBSD_x86_64::NativeRegisterContextFreeBSD_x86_64(
const ArchSpec &target_arch, NativeThreadProtocol &native_thread)
: NativeRegisterContextRegisterInfo(
native_thread, CreateRegisterInfoInterface(target_arch)),
- m_fpr(), m_dbr() {
+ m_dbr() {
assert(m_gpr.size() == GetRegisterInfoInterface().GetGPRSize());
}
@@ -278,53 +278,6 @@ NativeRegisterContextFreeBSD_x86_64::GetRegisterSet(uint32_t set_index) const {
static constexpr int RegNumX86ToX86_64(int regnum) {
switch (regnum) {
- case lldb_fctrl_i386:
- return lldb_fctrl_x86_64;
- case lldb_fstat_i386:
- return lldb_fstat_x86_64;
- case lldb_ftag_i386:
- return lldb_ftag_x86_64;
- case lldb_fop_i386:
- return lldb_fop_x86_64;
- case lldb_fiseg_i386:
- return lldb_fiseg_x86_64;
- case lldb_fioff_i386:
- return lldb_fioff_x86_64;
- case lldb_foseg_i386:
- return lldb_foseg_x86_64;
- case lldb_fooff_i386:
- return lldb_fooff_x86_64;
- case lldb_mxcsr_i386:
- return lldb_mxcsr_x86_64;
- case lldb_mxcsrmask_i386:
- return lldb_mxcsrmask_x86_64;
- case lldb_st0_i386:
- case lldb_st1_i386:
- case lldb_st2_i386:
- case lldb_st3_i386:
- case lldb_st4_i386:
- case lldb_st5_i386:
- case lldb_st6_i386:
- case lldb_st7_i386:
- return lldb_st0_x86_64 + regnum - lldb_st0_i386;
- case lldb_mm0_i386:
- case lldb_mm1_i386:
- case lldb_mm2_i386:
- case lldb_mm3_i386:
- case lldb_mm4_i386:
- case lldb_mm5_i386:
- case lldb_mm6_i386:
- case lldb_mm7_i386:
- return lldb_mm0_x86_64 + regnum - lldb_mm0_i386;
- case lldb_xmm0_i386:
- case lldb_xmm1_i386:
- case lldb_xmm2_i386:
- case lldb_xmm3_i386:
- case lldb_xmm4_i386:
- case lldb_xmm5_i386:
- case lldb_xmm6_i386:
- case lldb_xmm7_i386:
- return lldb_xmm0_x86_64 + regnum - lldb_xmm0_i386;
case lldb_ymm0_i386:
case lldb_ymm1_i386:
case lldb_ymm2_i386:
@@ -403,10 +356,10 @@ Status NativeRegisterContextFreeBSD_x86_64::ReadRegisterSet(uint32_t set) {
case FPRegSet:
#if defined(__x86_64__)
return NativeProcessFreeBSD::PtraceWrapper(PT_GETFPREGS, m_thread.GetID(),
- &m_fpr);
+ m_fpr.data());
#else
return NativeProcessFreeBSD::PtraceWrapper(PT_GETXMMREGS, m_thread.GetID(),
- &m_fpr);
+ m_fpr.data());
#endif
case DBRegSet:
return NativeProcessFreeBSD::PtraceWrapper(PT_GETDBREGS, m_thread.GetID(),
@@ -444,10 +397,10 @@ Status NativeRegisterContextFreeBSD_x86_64::WriteRegisterSet(uint32_t set) {
case FPRegSet:
#if defined(__x86_64__)
return NativeProcessFreeBSD::PtraceWrapper(PT_SETFPREGS, m_thread.GetID(),
- &m_fpr);
+ m_fpr.data());
#else
return NativeProcessFreeBSD::PtraceWrapper(PT_SETXMMREGS, m_thread.GetID(),
- &m_fpr);
+ m_fpr.data());
#endif
case DBRegSet:
return NativeProcessFreeBSD::PtraceWrapper(PT_SETDBREGS, m_thread.GetID(),
@@ -501,6 +454,9 @@ NativeRegisterContextFreeBSD_x86_64::ReadRegister(const RegisterInfo *reg_info,
reg_info->byte_size, endian::InlHostByteOrder());
return error;
case FPRegSet:
+ reg_value.SetBytes(m_fpr.data() + reg_info->byte_offset - GetFPROffset(),
+ reg_info->byte_size, endian::InlHostByteOrder());
+ return error;
case XSaveRegSet:
case DBRegSet:
// legacy logic
@@ -518,99 +474,6 @@ NativeRegisterContextFreeBSD_x86_64::ReadRegister(const RegisterInfo *reg_info,
}
switch (reg) {
-#if defined(__x86_64__)
-// the 32-bit field carries more detail, so we don't have to reinvent
-// the wheel
-#define FPR_ENV(x) ((struct envxmm32 *)m_fpr.fpr_env)->x
-#else
-#define FPR_ENV(x) ((struct envxmm *)m_fpr.xmm_env)->x
-#endif
- case lldb_fctrl_x86_64:
- reg_value = (uint16_t)FPR_ENV(en_cw);
- break;
- case lldb_fstat_x86_64:
- reg_value = (uint16_t)FPR_ENV(en_sw);
- break;
- case lldb_ftag_x86_64:
- reg_value = (uint16_t)FPR_ENV(en_tw);
- break;
- case lldb_fop_x86_64:
- reg_value = (uint16_t)FPR_ENV(en_opcode);
- break;
- case lldb_fiseg_x86_64:
- reg_value = (uint32_t)FPR_ENV(en_fcs);
- break;
- case lldb_fioff_x86_64:
- reg_value = (uint32_t)FPR_ENV(en_fip);
- break;
- case lldb_foseg_x86_64:
- reg_value = (uint32_t)FPR_ENV(en_fos);
- break;
- case lldb_fooff_x86_64:
- reg_value = (uint32_t)FPR_ENV(en_foo);
- break;
- case lldb_mxcsr_x86_64:
- reg_value = (uint32_t)FPR_ENV(en_mxcsr);
- break;
- case lldb_mxcsrmask_x86_64:
- reg_value = (uint32_t)FPR_ENV(en_mxcsr_mask);
- break;
- case lldb_st0_x86_64:
- case lldb_st1_x86_64:
- case lldb_st2_x86_64:
- case lldb_st3_x86_64:
- case lldb_st4_x86_64:
- case lldb_st5_x86_64:
- case lldb_st6_x86_64:
- case lldb_st7_x86_64:
-#if defined(__x86_64__)
- reg_value.SetBytes(&m_fpr.fpr_acc[reg - lldb_st0_x86_64],
- reg_info->byte_size, endian::InlHostByteOrder());
-#else
- reg_value.SetBytes(&m_fpr.xmm_acc[reg - lldb_st0_x86_64],
- reg_info->byte_size, endian::InlHostByteOrder());
-#endif
- break;
- case lldb_mm0_x86_64:
- case lldb_mm1_x86_64:
- case lldb_mm2_x86_64:
- case lldb_mm3_x86_64:
- case lldb_mm4_x86_64:
- case lldb_mm5_x86_64:
- case lldb_mm6_x86_64:
- case lldb_mm7_x86_64:
-#if defined(__x86_64__)
- reg_value.SetBytes(&m_fpr.fpr_acc[reg - lldb_mm0_x86_64],
- reg_info->byte_size, endian::InlHostByteOrder());
-#else
- reg_value.SetBytes(&m_fpr.xmm_acc[reg - lldb_mm0_x86_64],
- reg_info->byte_size, endian::InlHostByteOrder());
-#endif
- break;
- case lldb_xmm0_x86_64:
- case lldb_xmm1_x86_64:
- case lldb_xmm2_x86_64:
- case lldb_xmm3_x86_64:
- case lldb_xmm4_x86_64:
- case lldb_xmm5_x86_64:
- case lldb_xmm6_x86_64:
- case lldb_xmm7_x86_64:
- case lldb_xmm8_x86_64:
- case lldb_xmm9_x86_64:
- case lldb_xmm10_x86_64:
- case lldb_xmm11_x86_64:
- case lldb_xmm12_x86_64:
- case lldb_xmm13_x86_64:
- case lldb_xmm14_x86_64:
- case lldb_xmm15_x86_64:
-#if defined(__x86_64__)
- reg_value.SetBytes(&m_fpr.fpr_xacc[reg - lldb_xmm0_x86_64],
- reg_info->byte_size, endian::InlHostByteOrder());
-#else
- reg_value.SetBytes(&m_fpr.xmm_reg[reg - lldb_xmm0_x86_64],
- reg_info->byte_size, endian::InlHostByteOrder());
-#endif
- break;
case lldb_ymm0_x86_64:
case lldb_ymm1_x86_64:
case lldb_ymm2_x86_64:
@@ -701,6 +564,9 @@ Status NativeRegisterContextFreeBSD_x86_64::WriteRegister(
reg_value.GetByteSize());
return WriteRegisterSet(set);
case FPRegSet:
+ ::memcpy(m_fpr.data() + reg_info->byte_offset - GetFPROffset(),
+ reg_value.GetBytes(), reg_value.GetByteSize());
+ return WriteRegisterSet(set);
case XSaveRegSet:
case DBRegSet:
// legacy logic
@@ -718,92 +584,6 @@ Status NativeRegisterContextFreeBSD_x86_64::WriteRegister(
}
switch (reg) {
- case lldb_fctrl_x86_64:
- FPR_ENV(en_cw) = reg_value.GetAsUInt16();
- break;
- case lldb_fstat_x86_64:
- FPR_ENV(en_sw) = reg_value.GetAsUInt16();
- break;
- case lldb_ftag_x86_64:
- FPR_ENV(en_tw) = reg_value.GetAsUInt16();
- break;
- case lldb_fop_x86_64:
- FPR_ENV(en_opcode) = reg_value.GetAsUInt16();
- break;
- case lldb_fiseg_x86_64:
- FPR_ENV(en_fcs) = reg_value.GetAsUInt32();
- break;
- case lldb_fioff_x86_64:
- FPR_ENV(en_fip) = reg_value.GetAsUInt32();
- break;
- case lldb_foseg_x86_64:
- FPR_ENV(en_fos) = reg_value.GetAsUInt32();
- break;
- case lldb_fooff_x86_64:
- FPR_ENV(en_foo) = reg_value.GetAsUInt32();
- break;
- case lldb_mxcsr_x86_64:
- FPR_ENV(en_mxcsr) = reg_value.GetAsUInt32();
- break;
- case lldb_mxcsrmask_x86_64:
- FPR_ENV(en_mxcsr_mask) = reg_value.GetAsUInt32();
- break;
- case lldb_st0_x86_64:
- case lldb_st1_x86_64:
- case lldb_st2_x86_64:
- case lldb_st3_x86_64:
- case lldb_st4_x86_64:
- case lldb_st5_x86_64:
- case lldb_st6_x86_64:
- case lldb_st7_x86_64:
-#if defined(__x86_64__)
- ::memcpy(&m_fpr.fpr_acc[reg - lldb_st0_x86_64], reg_value.GetBytes(),
- reg_value.GetByteSize());
-#else
- ::memcpy(&m_fpr.xmm_acc[reg - lldb_st0_x86_64], reg_value.GetBytes(),
- reg_value.GetByteSize());
-#endif
- break;
- case lldb_mm0_x86_64:
- case lldb_mm1_x86_64:
- case lldb_mm2_x86_64:
- case lldb_mm3_x86_64:
- case lldb_mm4_x86_64:
- case lldb_mm5_x86_64:
- case lldb_mm6_x86_64:
- case lldb_mm7_x86_64:
-#if defined(__x86_64__)
- ::memcpy(&m_fpr.fpr_acc[reg - lldb_mm0_x86_64], reg_value.GetBytes(),
- reg_value.GetByteSize());
-#else
- ::memcpy(&m_fpr.xmm_acc[reg - lldb_mm0_x86_64], reg_value.GetBytes(),
- reg_value.GetByteSize());
-#endif
- break;
- case lldb_xmm0_x86_64:
- case lldb_xmm1_x86_64:
- case lldb_xmm2_x86_64:
- case lldb_xmm3_x86_64:
- case lldb_xmm4_x86_64:
- case lldb_xmm5_x86_64:
- case lldb_xmm6_x86_64:
- case lldb_xmm7_x86_64:
- case lldb_xmm8_x86_64:
- case lldb_xmm9_x86_64:
- case lldb_xmm10_x86_64:
- case lldb_xmm11_x86_64:
- case lldb_xmm12_x86_64:
- case lldb_xmm13_x86_64:
- case lldb_xmm14_x86_64:
- case lldb_xmm15_x86_64:
-#if defined(__x86_64__)
- ::memcpy(&m_fpr.fpr_xacc[reg - lldb_xmm0_x86_64], reg_value.GetBytes(),
- reg_value.GetByteSize());
-#else
- ::memcpy(&m_fpr.xmm_reg[reg - lldb_xmm0_x86_64], reg_value.GetBytes(),
- reg_value.GetByteSize());
-#endif
- break;
case lldb_ymm0_x86_64:
case lldb_ymm1_x86_64:
case lldb_ymm2_x86_64:
@@ -933,4 +713,20 @@ llvm::Error NativeRegisterContextFreeBSD_x86_64::CopyHardwareWatchpointsFrom(
return res.ToError();
}
+size_t NativeRegisterContextFreeBSD_x86_64::GetFPROffset() const {
+ uint32_t regno;
+ switch (GetRegisterInfoInterface().GetTargetArchitecture().GetMachine()) {
+ case llvm::Triple::x86:
+ regno = lldb_fctrl_i386;
+ break;
+ case llvm::Triple::x86_64:
+ regno = lldb_fctrl_x86_64;
+ break;
+ default:
+ llvm_unreachable("Unhandled target architecture.");
+ }
+
+ return GetRegisterInfoInterface().GetRegisterInfo()[regno].byte_offset;
+}
+
#endif // defined(__x86_64__)
diff --git a/lldb/source/Plugins/Process/FreeBSDRemote/NativeRegisterContextFreeBSD_x86_64.h b/lldb/source/Plugins/Process/FreeBSDRemote/NativeRegisterContextFreeBSD_x86_64.h
index 683c0e7525e4..24a698eec0fe 100644
--- a/lldb/source/Plugins/Process/FreeBSDRemote/NativeRegisterContextFreeBSD_x86_64.h
+++ b/lldb/source/Plugins/Process/FreeBSDRemote/NativeRegisterContextFreeBSD_x86_64.h
@@ -70,11 +70,7 @@ class NativeRegisterContextFreeBSD_x86_64
// Private member variables.
std::array<uint8_t, sizeof(struct reg)> m_gpr;
-#if defined(__x86_64__)
- struct fpreg m_fpr;
-#else
- struct xmmreg m_fpr;
-#endif
+ std::array<uint8_t, 512> m_fpr; // FXSAVE
struct dbreg m_dbr;
std::vector<uint8_t> m_xsave;
std::array<uint32_t, MaxXSaveSet + 1> m_xsave_offsets;
@@ -84,6 +80,8 @@ class NativeRegisterContextFreeBSD_x86_64
Status ReadRegisterSet(uint32_t set);
Status WriteRegisterSet(uint32_t set);
+
+ size_t GetFPROffset() const;
};
} // namespace process_freebsd
diff --git a/lldb/unittests/Process/Utility/RegisterContextFreeBSDTest.cpp b/lldb/unittests/Process/Utility/RegisterContextFreeBSDTest.cpp
index 1f7ec8634606..ba4348e7de4a 100644
--- a/lldb/unittests/Process/Utility/RegisterContextFreeBSDTest.cpp
+++ b/lldb/unittests/Process/Utility/RegisterContextFreeBSDTest.cpp
@@ -29,6 +29,10 @@ std::pair<size_t, size_t> GetRegParams(RegisterInfoInterface &ctx,
return {info.byte_offset, info.byte_size};
}
+#define EXPECT_OFF(regname, offset, size) \
+ EXPECT_THAT(GetRegParams(reg_ctx, lldb_##regname), \
+ ::testing::Pair(offset + base_offset, size))
+
#if defined(__x86_64__)
#define EXPECT_GPR_X86_64(regname) \
@@ -64,6 +68,57 @@ TEST(RegisterContextFreeBSDTest, x86_64) {
EXPECT_GPR_X86_64(rflags);
EXPECT_GPR_X86_64(rsp);
EXPECT_GPR_X86_64(ss);
+
+ // fctrl is the first FPR field, it is used to determine offset of the whole
+ // FPR struct
+ size_t base_offset = reg_ctx.GetRegisterInfo()[lldb_fctrl_x86_64].byte_offset;
+
+ // assert against FXSAVE struct
+ EXPECT_OFF(fctrl_x86_64, 0x00, 2);
+ EXPECT_OFF(fstat_x86_64, 0x02, 2);
+ // TODO: This is a known bug, abridged ftag should is 8 bits in length.
+ EXPECT_OFF(ftag_x86_64, 0x04, 2);
+ EXPECT_OFF(fop_x86_64, 0x06, 2);
+ // NB: Technically fiseg/foseg are 16-bit long and the higher 16 bits
+ // are reserved. However, we use them to access/recombine 64-bit FIP/FDP.
+ EXPECT_OFF(fioff_x86_64, 0x08, 4);
+ EXPECT_OFF(fiseg_x86_64, 0x0C, 4);
+ EXPECT_OFF(fooff_x86_64, 0x10, 4);
+ EXPECT_OFF(foseg_x86_64, 0x14, 4);
+ EXPECT_OFF(mxcsr_x86_64, 0x18, 4);
+ EXPECT_OFF(mxcsrmask_x86_64, 0x1C, 4);
+ EXPECT_OFF(st0_x86_64, 0x20, 10);
+ EXPECT_OFF(st1_x86_64, 0x30, 10);
+ EXPECT_OFF(st2_x86_64, 0x40, 10);
+ EXPECT_OFF(st3_x86_64, 0x50, 10);
+ EXPECT_OFF(st4_x86_64, 0x60, 10);
+ EXPECT_OFF(st5_x86_64, 0x70, 10);
+ EXPECT_OFF(st6_x86_64, 0x80, 10);
+ EXPECT_OFF(st7_x86_64, 0x90, 10);
+ EXPECT_OFF(mm0_x86_64, 0x20, 8);
+ EXPECT_OFF(mm1_x86_64, 0x30, 8);
+ EXPECT_OFF(mm2_x86_64, 0x40, 8);
+ EXPECT_OFF(mm3_x86_64, 0x50, 8);
+ EXPECT_OFF(mm4_x86_64, 0x60, 8);
+ EXPECT_OFF(mm5_x86_64, 0x70, 8);
+ EXPECT_OFF(mm6_x86_64, 0x80, 8);
+ EXPECT_OFF(mm7_x86_64, 0x90, 8);
+ EXPECT_OFF(xmm0_x86_64, 0xA0, 16);
+ EXPECT_OFF(xmm1_x86_64, 0xB0, 16);
+ EXPECT_OFF(xmm2_x86_64, 0xC0, 16);
+ EXPECT_OFF(xmm3_x86_64, 0xD0, 16);
+ EXPECT_OFF(xmm4_x86_64, 0xE0, 16);
+ EXPECT_OFF(xmm5_x86_64, 0xF0, 16);
+ EXPECT_OFF(xmm6_x86_64, 0x100, 16);
+ EXPECT_OFF(xmm7_x86_64, 0x110, 16);
+ EXPECT_OFF(xmm8_x86_64, 0x120, 16);
+ EXPECT_OFF(xmm9_x86_64, 0x130, 16);
+ EXPECT_OFF(xmm10_x86_64, 0x140, 16);
+ EXPECT_OFF(xmm11_x86_64, 0x150, 16);
+ EXPECT_OFF(xmm12_x86_64, 0x160, 16);
+ EXPECT_OFF(xmm13_x86_64, 0x170, 16);
+ EXPECT_OFF(xmm14_x86_64, 0x180, 16);
+ EXPECT_OFF(xmm15_x86_64, 0x190, 16);
}
#endif // defined(__x86_64__)
@@ -101,6 +156,49 @@ TEST(RegisterContextFreeBSDTest, i386) {
EXPECT_GPR_I386(esp);
EXPECT_GPR_I386(ss);
EXPECT_GPR_I386(gs);
+
+ // fctrl is the first FPR field, it is used to determine offset of the whole
+ // FPR struct
+ size_t base_offset = reg_ctx.GetRegisterInfo()[lldb_fctrl_i386].byte_offset;
+
+ // assert against FXSAVE struct
+ EXPECT_OFF(fctrl_i386, 0x00, 2);
+ EXPECT_OFF(fstat_i386, 0x02, 2);
+ // TODO: This is a known bug, abridged ftag should is 8 bits in length.
+ EXPECT_OFF(ftag_i386, 0x04, 2);
+ EXPECT_OFF(fop_i386, 0x06, 2);
+ // NB: Technically fiseg/foseg are 16-bit long and the higher 16 bits
+ // are reserved. However, we use them to access/recombine 64-bit FIP/FDP.
+ EXPECT_OFF(fioff_i386, 0x08, 4);
+ EXPECT_OFF(fiseg_i386, 0x0C, 4);
+ EXPECT_OFF(fooff_i386, 0x10, 4);
+ EXPECT_OFF(foseg_i386, 0x14, 4);
+ EXPECT_OFF(mxcsr_i386, 0x18, 4);
+ EXPECT_OFF(mxcsrmask_i386, 0x1C, 4);
+ EXPECT_OFF(st0_i386, 0x20, 10);
+ EXPECT_OFF(st1_i386, 0x30, 10);
+ EXPECT_OFF(st2_i386, 0x40, 10);
+ EXPECT_OFF(st3_i386, 0x50, 10);
+ EXPECT_OFF(st4_i386, 0x60, 10);
+ EXPECT_OFF(st5_i386, 0x70, 10);
+ EXPECT_OFF(st6_i386, 0x80, 10);
+ EXPECT_OFF(st7_i386, 0x90, 10);
+ EXPECT_OFF(mm0_i386, 0x20, 8);
+ EXPECT_OFF(mm1_i386, 0x30, 8);
+ EXPECT_OFF(mm2_i386, 0x40, 8);
+ EXPECT_OFF(mm3_i386, 0x50, 8);
+ EXPECT_OFF(mm4_i386, 0x60, 8);
+ EXPECT_OFF(mm5_i386, 0x70, 8);
+ EXPECT_OFF(mm6_i386, 0x80, 8);
+ EXPECT_OFF(mm7_i386, 0x90, 8);
+ EXPECT_OFF(xmm0_i386, 0xA0, 16);
+ EXPECT_OFF(xmm1_i386, 0xB0, 16);
+ EXPECT_OFF(xmm2_i386, 0xC0, 16);
+ EXPECT_OFF(xmm3_i386, 0xD0, 16);
+ EXPECT_OFF(xmm4_i386, 0xE0, 16);
+ EXPECT_OFF(xmm5_i386, 0xF0, 16);
+ EXPECT_OFF(xmm6_i386, 0x100, 16);
+ EXPECT_OFF(xmm7_i386, 0x110, 16);
}
#endif // defined(__i386__) || defined(__x86_64__)
More information about the lldb-commits
mailing list