mgorny updated this revision to Diff 339719.
mgorny added a comment.

Also add FPU-specific checks to `x86-32-freebsd-addr.test`.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101086/new/

https://reviews.llvm.org/D101086

Files:
  lldb/source/Plugins/Process/elf-core/RegisterUtilities.h
  lldb/test/Shell/Register/Core/x86-32-freebsd-addr.test
  lldb/test/Shell/Register/Core/x86-32-freebsd-fp.test


Index: lldb/test/Shell/Register/Core/x86-32-freebsd-fp.test
===================================================================
--- /dev/null
+++ lldb/test/Shell/Register/Core/x86-32-freebsd-fp.test
@@ -0,0 +1,3 @@
+# RUN: %lldb -b -s %s -c %p/Inputs/x86-32-freebsd.core | FileCheck 
%p/Inputs/x86-fp.check
+
+register read --all
Index: lldb/test/Shell/Register/Core/x86-32-freebsd-addr.test
===================================================================
--- lldb/test/Shell/Register/Core/x86-32-freebsd-addr.test
+++ lldb/test/Shell/Register/Core/x86-32-freebsd-addr.test
@@ -10,4 +10,7 @@
 # CHECK-DAG: ds = 0x0000003b
 # CHECK-DAG: es = 0x0000003b
 
-# TODO: fix reading fp registers
+# CHECK-DAG: fiseg = 0x00000000
+# CHECK-DAG: fioff = 0x00401c52
+# CHECK-DAG: foseg = 0x00000000
+# CHECK-DAG: fooff = 0xffffd8b8
Index: lldb/source/Plugins/Process/elf-core/RegisterUtilities.h
===================================================================
--- lldb/source/Plugins/Process/elf-core/RegisterUtilities.h
+++ lldb/source/Plugins/Process/elf-core/RegisterUtilities.h
@@ -96,6 +96,9 @@
                         llvm::ArrayRef<RegsetDesc> RegsetDescs);
 
 constexpr RegsetDesc FPR_Desc[] = {
+    // FreeBSD/i386 core NT_FPREGSET is x87 FSAVE result but the XSAVE dump
+    // starts with FXSAVE struct, so use that instead if available.
+    {llvm::Triple::FreeBSD, llvm::Triple::x86, llvm::ELF::NT_X86_XSTATE},
     {llvm::Triple::FreeBSD, llvm::Triple::UnknownArch, llvm::ELF::NT_FPREGSET},
     // In a i386 core file NT_FPREGSET is present, but it's not the result
     // of the FXSAVE instruction like in 64 bit files.


Index: lldb/test/Shell/Register/Core/x86-32-freebsd-fp.test
===================================================================
--- /dev/null
+++ lldb/test/Shell/Register/Core/x86-32-freebsd-fp.test
@@ -0,0 +1,3 @@
+# RUN: %lldb -b -s %s -c %p/Inputs/x86-32-freebsd.core | FileCheck %p/Inputs/x86-fp.check
+
+register read --all
Index: lldb/test/Shell/Register/Core/x86-32-freebsd-addr.test
===================================================================
--- lldb/test/Shell/Register/Core/x86-32-freebsd-addr.test
+++ lldb/test/Shell/Register/Core/x86-32-freebsd-addr.test
@@ -10,4 +10,7 @@
 # CHECK-DAG: ds = 0x0000003b
 # CHECK-DAG: es = 0x0000003b
 
-# TODO: fix reading fp registers
+# CHECK-DAG: fiseg = 0x00000000
+# CHECK-DAG: fioff = 0x00401c52
+# CHECK-DAG: foseg = 0x00000000
+# CHECK-DAG: fooff = 0xffffd8b8
Index: lldb/source/Plugins/Process/elf-core/RegisterUtilities.h
===================================================================
--- lldb/source/Plugins/Process/elf-core/RegisterUtilities.h
+++ lldb/source/Plugins/Process/elf-core/RegisterUtilities.h
@@ -96,6 +96,9 @@
                         llvm::ArrayRef<RegsetDesc> RegsetDescs);
 
 constexpr RegsetDesc FPR_Desc[] = {
+    // FreeBSD/i386 core NT_FPREGSET is x87 FSAVE result but the XSAVE dump
+    // starts with FXSAVE struct, so use that instead if available.
+    {llvm::Triple::FreeBSD, llvm::Triple::x86, llvm::ELF::NT_X86_XSTATE},
     {llvm::Triple::FreeBSD, llvm::Triple::UnknownArch, llvm::ELF::NT_FPREGSET},
     // In a i386 core file NT_FPREGSET is present, but it's not the result
     // of the FXSAVE instruction like in 64 bit files.
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to