[Lldb-commits] [PATCH] D40434: Fix floating point register write on new x86 linux kernels

Pavel Labath via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Fri Nov 24 06:04:43 PST 2017


labath created this revision.

New linux kernels (on systems that support the XSAVES instruction) will
not update the inferior registers unless the corresponding flag in the
XSAVE header is set. Normally this flag will be set in our image of the
XSAVE area (since we obtained it from the kernel), but if the inferior
has never used the corresponding register set, the respective flag can
be clear.

This fixes the issue by making sure we explicitly set the flags
corresponding to the registers we modify. I don't try to precisely match
the flags to set on each write, as the rules could get quite complicated

- I use a simpler over-approximation instead.

This was already caught by test_fp_register_write, but that was only
because the code that ran before main() did not use some of the register
sets. Since nothing in this test relies on being stopped in main(), I
modify the test to stop at the entry point instead, so we can be sure
the inferior did not have a chance to access these registers. If you
think that stopping in main brings something useful to the test, I can
make an extra test that stops at entry point instead.


https://reviews.llvm.org/D40434

Files:
  packages/Python/lldbsuite/test/functionalities/register/register_command/TestRegisters.py
  source/Plugins/Process/Linux/NativeRegisterContextLinux_x86_64.cpp
  source/Plugins/Process/Linux/NativeRegisterContextLinux_x86_64.h
  source/Plugins/Process/Utility/RegisterContextPOSIX_x86.h
  source/Plugins/Process/Utility/RegisterContext_x86.h

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D40434.124188.patch
Type: text/x-patch
Size: 6107 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20171124/718ab745/attachment-0001.bin>


More information about the lldb-commits mailing list