ljmf00 added a comment.
In D117928#3263319 <https://reviews.llvm.org/D117928#3263319>, @mgorny wrote:
> Ok, so to summarize: there's some CPU families where setting `xmm2..xmm9` via
> ptrace doesn't work for some reason? That's quite weird. Could it be an
> `xsave` bug perhaps?
Exactly. `ptrace` with `NT_FPREGSET` doesn't work properly but `NT_X86_XSTATE`
does. It makes sense to me that the presence of AVX triggers this, since, from
my inspection of the LLDB code, there is a fallback system on `ReadRegisterSet`
that tries to use `ptrace` with `NT_X86_XSTATE` and fallbacks to `NT_FPREGSET`
if it fails. The call made with `NT_X86_XSTATE` gives me different output on
`strace`:
ptrace(PTRACE_SETREGSET, 213817, NT_X86_XSTATE, {iov_base=0x555597dcd4a0,
iov_len=1088}) = 0
ptrace(PTRACE_GETREGSET, 213817, NT_X86_XSTATE, {iov_base=0x555597dcd4a0,
iov_len=1088}) = 0
> FWICS the corresponding read test passes, so apparently setting them directly
> within the program works.
Yes, I can confirm that. Writing directly to registers is fine and reading them
only triggers `PTRACE_GETREGSET` so, it is reading fine. The problem is when
`ptrace` is called with `PTRACE_SETREGSET`.
Inspecting the kernel source code I see that `NT_FPREGSET` is triggered by
`xfpregs_set`
https://github.com/torvalds/linux/blob/master/arch/x86/kernel/fpu/regset.c#L89
. That `memset` seems very suspicious here. Blaming the source code, seems to
be before Linux v5.16 .
This makes sense to me since I use Arch with the latest kernel, and a lot of
people use LTS versions or outdated versions due to Ubuntu/Debian (according to
Wikipedia, unstable Debian uses Linux 5.10.46). I will downgrade the kernel and
try to reproduce this. Ultimately, I can try to recompile the kernel without
that `memset` and see what happens. I can't find a logical reason in my brain
other than wrong offsets? If I didn't calculate it wrongly, the range of bytes
is the same size. Would be cool if anyone have any knowledge of the kernel and
explain this to me.
> Could you tell us what CPU exactly is this? Ideally paste `/proc/cpuinfo`.
> I'm pretty sure this test passed successfully on my old Athlon64 that
> definitely didn't have AVX (or SSE3). Unfortunately, I can't retest it
> anymore since it died almost 2 years ago.
Is `lscpu` enough? See https://termbin.com/c2pt .
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D117928/new/
https://reviews.llvm.org/D117928
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits