https://github.com/mchoo7 created 
https://github.com/llvm/llvm-project/pull/222330

Register-related code has cluttered up the `Process/Utility` and the naming 
`RegisterContext/RegisterInfo` is also inconsistent across different files. 
Create a new lldb library `lldbRegisterSupport` to isolate classes derived from 
`RegisterInfoInterface`. The classes named `RegisterContext*` that are derived 
from `RegisterInfoInterface` will be renamed to `RegisterInfo*` in following 
commits.

Move some x86 register descriptions from `RegisterContextPOSIX_x86` to 
`RegisterContext_x86` since they are independent from the POSIX interface.

>From 2cb0d5b95c0b46036b837a2c805c52b9f1c054f2 Mon Sep 17 00:00:00 2001
From: Minsoo Choo <[email protected]>
Date: Sun, 6 Sep 2026 00:42:12 -0400
Subject: [PATCH] [lldb] Split register descriptions from ProcessUtility

---
 .../Plugins/Process/Utility/CMakeLists.txt    |  60 ++++--
 .../Utility/RegisterContextFreeBSD_i386.cpp   |   4 +-
 .../Utility/RegisterContextFreeBSD_x86_64.cpp |   4 +-
 .../Utility/RegisterContextLinux_i386.cpp     |   4 +-
 .../Utility/RegisterContextLinux_x86_64.cpp   |   4 +-
 .../Utility/RegisterContextNetBSD_i386.cpp    |   4 +-
 .../Utility/RegisterContextNetBSD_x86_64.cpp  |   4 +-
 .../Utility/RegisterContextOpenBSD_i386.cpp   |   4 +-
 .../Utility/RegisterContextOpenBSD_x86_64.cpp |   4 +-
 .../Utility/RegisterContextPOSIX_x86.cpp      | 197 -----------------
 .../Utility/RegisterContextPOSIX_x86.h        |  93 --------
 .../Process/Utility/RegisterContext_x86.cpp   | 200 ++++++++++++++++++
 .../Process/Utility/RegisterContext_x86.h     |  96 +++++++++
 .../Process/Utility/RegisterInfos_i386.h      |  16 +-
 .../Process/Utility/RegisterInfos_x86_64.h    |  24 +--
 lldb/unittests/Instruction/CMakeLists.txt     |   1 +
 lldb/unittests/Process/Utility/CMakeLists.txt |  11 +-
 .../unittests/Process/minidump/CMakeLists.txt |   1 +
 .../source/Plugins/Process/Utility/BUILD.gn   |  62 ++++--
 19 files changed, 427 insertions(+), 366 deletions(-)

diff --git a/lldb/source/Plugins/Process/Utility/CMakeLists.txt 
b/lldb/source/Plugins/Process/Utility/CMakeLists.txt
index 90cf4d20bbc07..33367fbb498b7 100644
--- a/lldb/source/Plugins/Process/Utility/CMakeLists.txt
+++ b/lldb/source/Plugins/Process/Utility/CMakeLists.txt
@@ -1,7 +1,43 @@
 # TODO: Clean up this directory and its dependencies
 set_property(DIRECTORY PROPERTY LLDB_PLUGIN_KIND ProcessUtility)
 
+add_lldb_library(lldbRegisterSupport NO_PLUGIN_DEPENDENCIES
+  PARTIAL_SOURCES_INTENDED
+  RegisterContext_x86.cpp
+  RegisterContextFreeBSD_i386.cpp
+  RegisterContextFreeBSD_powerpc.cpp
+  RegisterContextFreeBSD_x86_64.cpp
+  RegisterContextLinux_i386.cpp
+  RegisterContextLinux_x86_64.cpp
+  RegisterContextLinux_s390x.cpp
+  RegisterContextNetBSD_i386.cpp
+  RegisterContextNetBSD_x86_64.cpp
+  RegisterContextOpenBSD_i386.cpp
+  RegisterContextOpenBSD_x86_64.cpp
+  RegisterContextWindows_i386.cpp
+  RegisterContextWindows_x86_64.cpp
+  RegisterTypeDetector_arm64.cpp
+  RegisterInfos_x86_64_with_base_shared.cpp
+  RegisterInfoPOSIX_arm.cpp
+  RegisterInfoPOSIX_arm64.cpp
+  RegisterInfoPOSIX_loongarch64.cpp
+  RegisterInfoPOSIX_ppc64le.cpp
+  RegisterInfoPOSIX_ppc64.cpp
+  RegisterInfoPOSIX_riscv32.cpp
+  RegisterInfoPOSIX_riscv64.cpp
+  RegisterInfoPOSIXDynamic_riscv32.cpp
+
+  LINK_COMPONENTS
+    Support
+    TargetParser
+  LINK_LIBS
+    lldbUtility
+  ALLOWED_INTERNAL_DEPENDENCIES
+    lldbUtility
+  )
+
 add_lldb_library(lldbPluginProcessUtility
+  PARTIAL_SOURCES_INTENDED
   AuxVector.cpp
   FreeBSDSignals.cpp
   GDBRemoteSignals.cpp
@@ -20,26 +56,15 @@ add_lldb_library(lldbPluginProcessUtility
   NativeRegisterContextRegisterInfo.cpp
   NetBSDSignals.cpp
   OpenBSDSignals.cpp
-  RegisterContext_x86.cpp
   RegisterContextDarwin_arm.cpp
   RegisterContextDarwin_arm64.cpp
   RegisterContextDarwin_riscv32.cpp
   RegisterContextDarwin_x86_64.cpp
   RegisterContextDummy.cpp
-  RegisterContextFreeBSD_i386.cpp
-  RegisterContextFreeBSD_powerpc.cpp
-  RegisterContextFreeBSD_x86_64.cpp
   RegisterContextHistory.cpp
-  RegisterContextLinux_i386.cpp
-  RegisterContextLinux_x86_64.cpp
-  RegisterContextLinux_s390x.cpp
   RegisterContextMach_arm.cpp
   RegisterContextMach_x86_64.cpp
   RegisterContextMemory.cpp
-  RegisterContextNetBSD_i386.cpp
-  RegisterContextNetBSD_x86_64.cpp
-  RegisterContextOpenBSD_i386.cpp
-  RegisterContextOpenBSD_x86_64.cpp
   RegisterContextPOSIX_arm.cpp
   RegisterContextPOSIX_arm64.cpp
   RegisterContextPOSIX_loongarch64.cpp
@@ -50,18 +75,6 @@ add_lldb_library(lldbPluginProcessUtility
   RegisterContextPOSIX_s390x.cpp
   RegisterContextPOSIX_x86.cpp
   RegisterContextThreadMemory.cpp
-  RegisterContextWindows_i386.cpp
-  RegisterContextWindows_x86_64.cpp
-  RegisterTypeDetector_arm64.cpp
-  RegisterInfos_x86_64_with_base_shared.cpp
-  RegisterInfoPOSIX_arm.cpp
-  RegisterInfoPOSIX_arm64.cpp
-  RegisterInfoPOSIX_loongarch64.cpp
-  RegisterInfoPOSIX_ppc64le.cpp
-  RegisterInfoPOSIX_ppc64.cpp
-  RegisterInfoPOSIX_riscv32.cpp
-  RegisterInfoPOSIX_riscv64.cpp
-  RegisterInfoPOSIXDynamic_riscv32.cpp
   StopInfoMachException.cpp
   ThreadMemory.cpp
 
@@ -69,6 +82,7 @@ add_lldb_library(lldbPluginProcessUtility
     Support
     TargetParser
   LINK_LIBS
+    lldbRegisterSupport
     lldbBreakpoint
     lldbCore
     lldbDataFormatters
diff --git 
a/lldb/source/Plugins/Process/Utility/RegisterContextFreeBSD_i386.cpp 
b/lldb/source/Plugins/Process/Utility/RegisterContextFreeBSD_i386.cpp
index 841ae170466b5..86ce13461426f 100644
--- a/lldb/source/Plugins/Process/Utility/RegisterContextFreeBSD_i386.cpp
+++ b/lldb/source/Plugins/Process/Utility/RegisterContextFreeBSD_i386.cpp
@@ -7,7 +7,9 @@
 //===---------------------------------------------------------------------===//
 
 #include "RegisterContextFreeBSD_i386.h"
-#include "RegisterContextPOSIX_x86.h"
+#include "RegisterContext_x86.h"
+#include "lldb-x86-register-enums.h"
+#include "lldb/lldb-defines.h"
 
 using namespace lldb_private;
 using namespace lldb;
diff --git 
a/lldb/source/Plugins/Process/Utility/RegisterContextFreeBSD_x86_64.cpp 
b/lldb/source/Plugins/Process/Utility/RegisterContextFreeBSD_x86_64.cpp
index 2a382175acfb3..895f827b6c626 100644
--- a/lldb/source/Plugins/Process/Utility/RegisterContextFreeBSD_x86_64.cpp
+++ b/lldb/source/Plugins/Process/Utility/RegisterContextFreeBSD_x86_64.cpp
@@ -8,7 +8,9 @@
 
 #include "RegisterContextFreeBSD_x86_64.h"
 #include "RegisterContextFreeBSD_i386.h"
-#include "RegisterContextPOSIX_x86.h"
+#include "RegisterContext_x86.h"
+#include "lldb-x86-register-enums.h"
+#include "lldb/lldb-defines.h"
 #include "llvm/Support/Threading.h"
 #include <vector>
 
diff --git a/lldb/source/Plugins/Process/Utility/RegisterContextLinux_i386.cpp 
b/lldb/source/Plugins/Process/Utility/RegisterContextLinux_i386.cpp
index 9e022baa297bb..a491e4536b873 100644
--- a/lldb/source/Plugins/Process/Utility/RegisterContextLinux_i386.cpp
+++ b/lldb/source/Plugins/Process/Utility/RegisterContextLinux_i386.cpp
@@ -7,7 +7,9 @@
 //===---------------------------------------------------------------------===//
 
 #include "RegisterContextLinux_i386.h"
-#include "RegisterContextPOSIX_x86.h"
+#include "RegisterContext_x86.h"
+#include "lldb-x86-register-enums.h"
+#include "lldb/lldb-defines.h"
 
 using namespace lldb_private;
 using namespace lldb;
diff --git 
a/lldb/source/Plugins/Process/Utility/RegisterContextLinux_x86_64.cpp 
b/lldb/source/Plugins/Process/Utility/RegisterContextLinux_x86_64.cpp
index 63c034a858d7d..ae10504397125 100644
--- a/lldb/source/Plugins/Process/Utility/RegisterContextLinux_x86_64.cpp
+++ b/lldb/source/Plugins/Process/Utility/RegisterContextLinux_x86_64.cpp
@@ -8,7 +8,9 @@
 
 #include "RegisterContextLinux_x86_64.h"
 #include "RegisterContextLinux_i386.h"
-#include "RegisterContextPOSIX_x86.h"
+#include "RegisterContext_x86.h"
+#include "lldb-x86-register-enums.h"
+#include "lldb/lldb-defines.h"
 #include <vector>
 
 using namespace lldb_private;
diff --git a/lldb/source/Plugins/Process/Utility/RegisterContextNetBSD_i386.cpp 
b/lldb/source/Plugins/Process/Utility/RegisterContextNetBSD_i386.cpp
index a160c87db6cf9..b1c4b773f3637 100644
--- a/lldb/source/Plugins/Process/Utility/RegisterContextNetBSD_i386.cpp
+++ b/lldb/source/Plugins/Process/Utility/RegisterContextNetBSD_i386.cpp
@@ -7,7 +7,9 @@
 
//===----------------------------------------------------------------------===//
 
 #include "RegisterContextNetBSD_i386.h"
-#include "RegisterContextPOSIX_x86.h"
+#include "RegisterContext_x86.h"
+#include "lldb-x86-register-enums.h"
+#include "lldb/lldb-defines.h"
 
 using namespace lldb_private;
 using namespace lldb;
diff --git 
a/lldb/source/Plugins/Process/Utility/RegisterContextNetBSD_x86_64.cpp 
b/lldb/source/Plugins/Process/Utility/RegisterContextNetBSD_x86_64.cpp
index 32bb7952820d8..d3e7466654e78 100644
--- a/lldb/source/Plugins/Process/Utility/RegisterContextNetBSD_x86_64.cpp
+++ b/lldb/source/Plugins/Process/Utility/RegisterContextNetBSD_x86_64.cpp
@@ -8,7 +8,9 @@
 
 #include "RegisterContextNetBSD_x86_64.h"
 #include "RegisterContextNetBSD_i386.h"
-#include "RegisterContextPOSIX_x86.h"
+#include "RegisterContext_x86.h"
+#include "lldb-x86-register-enums.h"
+#include "lldb/lldb-defines.h"
 #include "llvm/Support/Compiler.h"
 #include "llvm/TargetParser/Triple.h"
 #include <cassert>
diff --git 
a/lldb/source/Plugins/Process/Utility/RegisterContextOpenBSD_i386.cpp 
b/lldb/source/Plugins/Process/Utility/RegisterContextOpenBSD_i386.cpp
index ddf6cc5c3c65b..b868f3aed848a 100644
--- a/lldb/source/Plugins/Process/Utility/RegisterContextOpenBSD_i386.cpp
+++ b/lldb/source/Plugins/Process/Utility/RegisterContextOpenBSD_i386.cpp
@@ -7,7 +7,9 @@
 //===---------------------------------------------------------------------===//
 
 #include "RegisterContextOpenBSD_i386.h"
-#include "RegisterContextPOSIX_x86.h"
+#include "RegisterContext_x86.h"
+#include "lldb-x86-register-enums.h"
+#include "lldb/lldb-defines.h"
 
 using namespace lldb_private;
 using namespace lldb;
diff --git 
a/lldb/source/Plugins/Process/Utility/RegisterContextOpenBSD_x86_64.cpp 
b/lldb/source/Plugins/Process/Utility/RegisterContextOpenBSD_x86_64.cpp
index 05c1f83efded7..4d7b8970affcb 100644
--- a/lldb/source/Plugins/Process/Utility/RegisterContextOpenBSD_x86_64.cpp
+++ b/lldb/source/Plugins/Process/Utility/RegisterContextOpenBSD_x86_64.cpp
@@ -7,7 +7,9 @@
 //===---------------------------------------------------------------------===//
 
 #include "RegisterContextOpenBSD_x86_64.h"
-#include "RegisterContextPOSIX_x86.h"
+#include "RegisterContext_x86.h"
+#include "lldb-x86-register-enums.h"
+#include "lldb/lldb-defines.h"
 #include <vector>
 
 using namespace lldb_private;
diff --git a/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_x86.cpp 
b/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_x86.cpp
index c14eb135c7b10..53b033a83c242 100644
--- a/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_x86.cpp
+++ b/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_x86.cpp
@@ -156,203 +156,6 @@ static_assert((sizeof(g_avx_regnums_x86_64) / 
sizeof(g_avx_regnums_x86_64[0])) -
                   k_num_avx_registers_x86_64,
               "g_avx_regnums_x86_64 has wrong number of register infos");
 
-uint32_t RegisterContextPOSIX_x86::g_contained_eax[] = {lldb_eax_i386,
-                                                        LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_contained_ebx[] = {lldb_ebx_i386,
-                                                        LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_contained_ecx[] = {lldb_ecx_i386,
-                                                        LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_contained_edx[] = {lldb_edx_i386,
-                                                        LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_contained_edi[] = {lldb_edi_i386,
-                                                        LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_contained_esi[] = {lldb_esi_i386,
-                                                        LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_contained_ebp[] = {lldb_ebp_i386,
-                                                        LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_contained_esp[] = {lldb_esp_i386,
-                                                        LLDB_INVALID_REGNUM};
-
-uint32_t RegisterContextPOSIX_x86::g_invalidate_eax[] = {
-    lldb_eax_i386, lldb_ax_i386, lldb_ah_i386, lldb_al_i386,
-    LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_invalidate_ebx[] = {
-    lldb_ebx_i386, lldb_bx_i386, lldb_bh_i386, lldb_bl_i386,
-    LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_invalidate_ecx[] = {
-    lldb_ecx_i386, lldb_cx_i386, lldb_ch_i386, lldb_cl_i386,
-    LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_invalidate_edx[] = {
-    lldb_edx_i386, lldb_dx_i386, lldb_dh_i386, lldb_dl_i386,
-    LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_invalidate_edi[] = {
-    lldb_edi_i386, lldb_di_i386, LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_invalidate_esi[] = {
-    lldb_esi_i386, lldb_si_i386, LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_invalidate_ebp[] = {
-    lldb_ebp_i386, lldb_bp_i386, LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_invalidate_esp[] = {
-    lldb_esp_i386, lldb_sp_i386, LLDB_INVALID_REGNUM};
-
-uint32_t RegisterContextPOSIX_x86::g_contained_rax[] = {lldb_rax_x86_64,
-                                                        LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_contained_rbx[] = {lldb_rbx_x86_64,
-                                                        LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_contained_rcx[] = {lldb_rcx_x86_64,
-                                                        LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_contained_rdx[] = {lldb_rdx_x86_64,
-                                                        LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_contained_rdi[] = {lldb_rdi_x86_64,
-                                                        LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_contained_rsi[] = {lldb_rsi_x86_64,
-                                                        LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_contained_rbp[] = {lldb_rbp_x86_64,
-                                                        LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_contained_rsp[] = {lldb_rsp_x86_64,
-                                                        LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_contained_r8[] = {lldb_r8_x86_64,
-                                                       LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_contained_r9[] = {lldb_r9_x86_64,
-                                                       LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_contained_r10[] = {lldb_r10_x86_64,
-                                                        LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_contained_r11[] = {lldb_r11_x86_64,
-                                                        LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_contained_r12[] = {lldb_r12_x86_64,
-                                                        LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_contained_r13[] = {lldb_r13_x86_64,
-                                                        LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_contained_r14[] = {lldb_r14_x86_64,
-                                                        LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_contained_r15[] = {lldb_r15_x86_64,
-                                                        LLDB_INVALID_REGNUM};
-
-uint32_t RegisterContextPOSIX_x86::g_invalidate_rax[] = {
-    lldb_rax_x86_64, lldb_eax_x86_64, lldb_ax_x86_64,
-    lldb_ah_x86_64,  lldb_al_x86_64,  LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_invalidate_rbx[] = {
-    lldb_rbx_x86_64, lldb_ebx_x86_64, lldb_bx_x86_64,
-    lldb_bh_x86_64,  lldb_bl_x86_64,  LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_invalidate_rcx[] = {
-    lldb_rcx_x86_64, lldb_ecx_x86_64, lldb_cx_x86_64,
-    lldb_ch_x86_64,  lldb_cl_x86_64,  LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_invalidate_rdx[] = {
-    lldb_rdx_x86_64, lldb_edx_x86_64, lldb_dx_x86_64,
-    lldb_dh_x86_64,  lldb_dl_x86_64,  LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_invalidate_rdi[] = {
-    lldb_rdi_x86_64, lldb_edi_x86_64, lldb_di_x86_64, lldb_dil_x86_64,
-    LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_invalidate_rsi[] = {
-    lldb_rsi_x86_64, lldb_esi_x86_64, lldb_si_x86_64, lldb_sil_x86_64,
-    LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_invalidate_rbp[] = {
-    lldb_rbp_x86_64, lldb_ebp_x86_64, lldb_bp_x86_64, lldb_bpl_x86_64,
-    LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_invalidate_rsp[] = {
-    lldb_rsp_x86_64, lldb_esp_x86_64, lldb_sp_x86_64, lldb_spl_x86_64,
-    LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_invalidate_r8[] = {
-    lldb_r8_x86_64, lldb_r8d_x86_64, lldb_r8w_x86_64, lldb_r8l_x86_64,
-    LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_invalidate_r9[] = {
-    lldb_r9_x86_64, lldb_r9d_x86_64, lldb_r9w_x86_64, lldb_r9l_x86_64,
-    LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_invalidate_r10[] = {
-    lldb_r10_x86_64, lldb_r10d_x86_64, lldb_r10w_x86_64, lldb_r10l_x86_64,
-    LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_invalidate_r11[] = {
-    lldb_r11_x86_64, lldb_r11d_x86_64, lldb_r11w_x86_64, lldb_r11l_x86_64,
-    LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_invalidate_r12[] = {
-    lldb_r12_x86_64, lldb_r12d_x86_64, lldb_r12w_x86_64, lldb_r12l_x86_64,
-    LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_invalidate_r13[] = {
-    lldb_r13_x86_64, lldb_r13d_x86_64, lldb_r13w_x86_64, lldb_r13l_x86_64,
-    LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_invalidate_r14[] = {
-    lldb_r14_x86_64, lldb_r14d_x86_64, lldb_r14w_x86_64, lldb_r14l_x86_64,
-    LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_invalidate_r15[] = {
-    lldb_r15_x86_64, lldb_r15d_x86_64, lldb_r15w_x86_64, lldb_r15l_x86_64,
-    LLDB_INVALID_REGNUM};
-
-uint32_t RegisterContextPOSIX_x86::g_contained_fip[] = {lldb_fip_x86_64,
-                                                        LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_contained_fdp[] = {lldb_fdp_x86_64,
-                                                        LLDB_INVALID_REGNUM};
-
-uint32_t RegisterContextPOSIX_x86::g_invalidate_fip[] = {
-    lldb_fip_x86_64, lldb_fioff_x86_64, lldb_fiseg_x86_64, 
LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_invalidate_fdp[] = {
-    lldb_fdp_x86_64, lldb_fooff_x86_64, lldb_foseg_x86_64, 
LLDB_INVALID_REGNUM};
-
-uint32_t RegisterContextPOSIX_x86::g_contained_st0_32[] = {lldb_st0_i386,
-                                                           
LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_contained_st1_32[] = {lldb_st1_i386,
-                                                           
LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_contained_st2_32[] = {lldb_st2_i386,
-                                                           
LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_contained_st3_32[] = {lldb_st3_i386,
-                                                           
LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_contained_st4_32[] = {lldb_st4_i386,
-                                                           
LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_contained_st5_32[] = {lldb_st5_i386,
-                                                           
LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_contained_st6_32[] = {lldb_st6_i386,
-                                                           
LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_contained_st7_32[] = {lldb_st7_i386,
-                                                           
LLDB_INVALID_REGNUM};
-
-uint32_t RegisterContextPOSIX_x86::g_invalidate_st0_32[] = {
-    lldb_st0_i386, lldb_mm0_i386, LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_invalidate_st1_32[] = {
-    lldb_st1_i386, lldb_mm1_i386, LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_invalidate_st2_32[] = {
-    lldb_st2_i386, lldb_mm2_i386, LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_invalidate_st3_32[] = {
-    lldb_st3_i386, lldb_mm3_i386, LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_invalidate_st4_32[] = {
-    lldb_st4_i386, lldb_mm4_i386, LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_invalidate_st5_32[] = {
-    lldb_st5_i386, lldb_mm5_i386, LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_invalidate_st6_32[] = {
-    lldb_st6_i386, lldb_mm6_i386, LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_invalidate_st7_32[] = {
-    lldb_st7_i386, lldb_mm7_i386, LLDB_INVALID_REGNUM};
-
-uint32_t RegisterContextPOSIX_x86::g_contained_st0_64[] = {lldb_st0_x86_64,
-                                                           
LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_contained_st1_64[] = {lldb_st1_x86_64,
-                                                           
LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_contained_st2_64[] = {lldb_st2_x86_64,
-                                                           
LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_contained_st3_64[] = {lldb_st3_x86_64,
-                                                           
LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_contained_st4_64[] = {lldb_st4_x86_64,
-                                                           
LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_contained_st5_64[] = {lldb_st5_x86_64,
-                                                           
LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_contained_st6_64[] = {lldb_st6_x86_64,
-                                                           
LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_contained_st7_64[] = {lldb_st7_x86_64,
-                                                           
LLDB_INVALID_REGNUM};
-
-uint32_t RegisterContextPOSIX_x86::g_invalidate_st0_64[] = {
-    lldb_st0_x86_64, lldb_mm0_x86_64, LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_invalidate_st1_64[] = {
-    lldb_st1_x86_64, lldb_mm1_x86_64, LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_invalidate_st2_64[] = {
-    lldb_st2_x86_64, lldb_mm2_x86_64, LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_invalidate_st3_64[] = {
-    lldb_st3_x86_64, lldb_mm3_x86_64, LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_invalidate_st4_64[] = {
-    lldb_st4_x86_64, lldb_mm4_x86_64, LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_invalidate_st5_64[] = {
-    lldb_st5_x86_64, lldb_mm5_x86_64, LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_invalidate_st6_64[] = {
-    lldb_st6_x86_64, lldb_mm6_x86_64, LLDB_INVALID_REGNUM};
-uint32_t RegisterContextPOSIX_x86::g_invalidate_st7_64[] = {
-    lldb_st7_x86_64, lldb_mm7_x86_64, LLDB_INVALID_REGNUM};
 
 // Number of register sets provided by this context.
 enum { k_num_extended_register_sets = 1, k_num_register_sets = 3 };
diff --git a/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_x86.h 
b/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_x86.h
index 9284f5cc07d91..dc47684fd91ba 100644
--- a/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_x86.h
+++ b/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_x86.h
@@ -55,99 +55,6 @@ class RegisterContextPOSIX_x86 : public 
lldb_private::RegisterContext {
     eXSAVE
   };
 
-  static uint32_t g_contained_eax[];
-  static uint32_t g_contained_ebx[];
-  static uint32_t g_contained_ecx[];
-  static uint32_t g_contained_edx[];
-  static uint32_t g_contained_edi[];
-  static uint32_t g_contained_esi[];
-  static uint32_t g_contained_ebp[];
-  static uint32_t g_contained_esp[];
-
-  static uint32_t g_invalidate_eax[];
-  static uint32_t g_invalidate_ebx[];
-  static uint32_t g_invalidate_ecx[];
-  static uint32_t g_invalidate_edx[];
-  static uint32_t g_invalidate_edi[];
-  static uint32_t g_invalidate_esi[];
-  static uint32_t g_invalidate_ebp[];
-  static uint32_t g_invalidate_esp[];
-
-  static uint32_t g_contained_rax[];
-  static uint32_t g_contained_rbx[];
-  static uint32_t g_contained_rcx[];
-  static uint32_t g_contained_rdx[];
-  static uint32_t g_contained_rdi[];
-  static uint32_t g_contained_rsi[];
-  static uint32_t g_contained_rbp[];
-  static uint32_t g_contained_rsp[];
-  static uint32_t g_contained_r8[];
-  static uint32_t g_contained_r9[];
-  static uint32_t g_contained_r10[];
-  static uint32_t g_contained_r11[];
-  static uint32_t g_contained_r12[];
-  static uint32_t g_contained_r13[];
-  static uint32_t g_contained_r14[];
-  static uint32_t g_contained_r15[];
-
-  static uint32_t g_invalidate_rax[];
-  static uint32_t g_invalidate_rbx[];
-  static uint32_t g_invalidate_rcx[];
-  static uint32_t g_invalidate_rdx[];
-  static uint32_t g_invalidate_rdi[];
-  static uint32_t g_invalidate_rsi[];
-  static uint32_t g_invalidate_rbp[];
-  static uint32_t g_invalidate_rsp[];
-  static uint32_t g_invalidate_r8[];
-  static uint32_t g_invalidate_r9[];
-  static uint32_t g_invalidate_r10[];
-  static uint32_t g_invalidate_r11[];
-  static uint32_t g_invalidate_r12[];
-  static uint32_t g_invalidate_r13[];
-  static uint32_t g_invalidate_r14[];
-  static uint32_t g_invalidate_r15[];
-
-  static uint32_t g_contained_fip[];
-  static uint32_t g_contained_fdp[];
-
-  static uint32_t g_invalidate_fip[];
-  static uint32_t g_invalidate_fdp[];
-
-  static uint32_t g_contained_st0_32[];
-  static uint32_t g_contained_st1_32[];
-  static uint32_t g_contained_st2_32[];
-  static uint32_t g_contained_st3_32[];
-  static uint32_t g_contained_st4_32[];
-  static uint32_t g_contained_st5_32[];
-  static uint32_t g_contained_st6_32[];
-  static uint32_t g_contained_st7_32[];
-
-  static uint32_t g_invalidate_st0_32[];
-  static uint32_t g_invalidate_st1_32[];
-  static uint32_t g_invalidate_st2_32[];
-  static uint32_t g_invalidate_st3_32[];
-  static uint32_t g_invalidate_st4_32[];
-  static uint32_t g_invalidate_st5_32[];
-  static uint32_t g_invalidate_st6_32[];
-  static uint32_t g_invalidate_st7_32[];
-
-  static uint32_t g_contained_st0_64[];
-  static uint32_t g_contained_st1_64[];
-  static uint32_t g_contained_st2_64[];
-  static uint32_t g_contained_st3_64[];
-  static uint32_t g_contained_st4_64[];
-  static uint32_t g_contained_st5_64[];
-  static uint32_t g_contained_st6_64[];
-  static uint32_t g_contained_st7_64[];
-
-  static uint32_t g_invalidate_st0_64[];
-  static uint32_t g_invalidate_st1_64[];
-  static uint32_t g_invalidate_st2_64[];
-  static uint32_t g_invalidate_st3_64[];
-  static uint32_t g_invalidate_st4_64[];
-  static uint32_t g_invalidate_st5_64[];
-  static uint32_t g_invalidate_st6_64[];
-  static uint32_t g_invalidate_st7_64[];
 
 protected:
   FPRType
diff --git a/lldb/source/Plugins/Process/Utility/RegisterContext_x86.cpp 
b/lldb/source/Plugins/Process/Utility/RegisterContext_x86.cpp
index b21c72bd96214..17d66b0a4fbf3 100644
--- a/lldb/source/Plugins/Process/Utility/RegisterContext_x86.cpp
+++ b/lldb/source/Plugins/Process/Utility/RegisterContext_x86.cpp
@@ -7,9 +7,209 @@
 
//===----------------------------------------------------------------------===//
 
 #include "RegisterContext_x86.h"
+#include "lldb-x86-register-enums.h"
+#include "lldb/lldb-defines.h"
 
 using namespace lldb_private;
 
+uint32_t x86_register_info::g_contained_eax[] = {lldb_eax_i386,
+                                                        LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_contained_ebx[] = {lldb_ebx_i386,
+                                                        LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_contained_ecx[] = {lldb_ecx_i386,
+                                                        LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_contained_edx[] = {lldb_edx_i386,
+                                                        LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_contained_edi[] = {lldb_edi_i386,
+                                                        LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_contained_esi[] = {lldb_esi_i386,
+                                                        LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_contained_ebp[] = {lldb_ebp_i386,
+                                                        LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_contained_esp[] = {lldb_esp_i386,
+                                                        LLDB_INVALID_REGNUM};
+
+uint32_t x86_register_info::g_invalidate_eax[] = {
+    lldb_eax_i386, lldb_ax_i386, lldb_ah_i386, lldb_al_i386,
+    LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_invalidate_ebx[] = {
+    lldb_ebx_i386, lldb_bx_i386, lldb_bh_i386, lldb_bl_i386,
+    LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_invalidate_ecx[] = {
+    lldb_ecx_i386, lldb_cx_i386, lldb_ch_i386, lldb_cl_i386,
+    LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_invalidate_edx[] = {
+    lldb_edx_i386, lldb_dx_i386, lldb_dh_i386, lldb_dl_i386,
+    LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_invalidate_edi[] = {
+    lldb_edi_i386, lldb_di_i386, LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_invalidate_esi[] = {
+    lldb_esi_i386, lldb_si_i386, LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_invalidate_ebp[] = {
+    lldb_ebp_i386, lldb_bp_i386, LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_invalidate_esp[] = {
+    lldb_esp_i386, lldb_sp_i386, LLDB_INVALID_REGNUM};
+
+uint32_t x86_register_info::g_contained_rax[] = {lldb_rax_x86_64,
+                                                        LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_contained_rbx[] = {lldb_rbx_x86_64,
+                                                        LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_contained_rcx[] = {lldb_rcx_x86_64,
+                                                        LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_contained_rdx[] = {lldb_rdx_x86_64,
+                                                        LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_contained_rdi[] = {lldb_rdi_x86_64,
+                                                        LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_contained_rsi[] = {lldb_rsi_x86_64,
+                                                        LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_contained_rbp[] = {lldb_rbp_x86_64,
+                                                        LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_contained_rsp[] = {lldb_rsp_x86_64,
+                                                        LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_contained_r8[] = {lldb_r8_x86_64,
+                                                       LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_contained_r9[] = {lldb_r9_x86_64,
+                                                       LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_contained_r10[] = {lldb_r10_x86_64,
+                                                        LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_contained_r11[] = {lldb_r11_x86_64,
+                                                        LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_contained_r12[] = {lldb_r12_x86_64,
+                                                        LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_contained_r13[] = {lldb_r13_x86_64,
+                                                        LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_contained_r14[] = {lldb_r14_x86_64,
+                                                        LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_contained_r15[] = {lldb_r15_x86_64,
+                                                        LLDB_INVALID_REGNUM};
+
+uint32_t x86_register_info::g_invalidate_rax[] = {
+    lldb_rax_x86_64, lldb_eax_x86_64, lldb_ax_x86_64,
+    lldb_ah_x86_64,  lldb_al_x86_64,  LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_invalidate_rbx[] = {
+    lldb_rbx_x86_64, lldb_ebx_x86_64, lldb_bx_x86_64,
+    lldb_bh_x86_64,  lldb_bl_x86_64,  LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_invalidate_rcx[] = {
+    lldb_rcx_x86_64, lldb_ecx_x86_64, lldb_cx_x86_64,
+    lldb_ch_x86_64,  lldb_cl_x86_64,  LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_invalidate_rdx[] = {
+    lldb_rdx_x86_64, lldb_edx_x86_64, lldb_dx_x86_64,
+    lldb_dh_x86_64,  lldb_dl_x86_64,  LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_invalidate_rdi[] = {
+    lldb_rdi_x86_64, lldb_edi_x86_64, lldb_di_x86_64, lldb_dil_x86_64,
+    LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_invalidate_rsi[] = {
+    lldb_rsi_x86_64, lldb_esi_x86_64, lldb_si_x86_64, lldb_sil_x86_64,
+    LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_invalidate_rbp[] = {
+    lldb_rbp_x86_64, lldb_ebp_x86_64, lldb_bp_x86_64, lldb_bpl_x86_64,
+    LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_invalidate_rsp[] = {
+    lldb_rsp_x86_64, lldb_esp_x86_64, lldb_sp_x86_64, lldb_spl_x86_64,
+    LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_invalidate_r8[] = {
+    lldb_r8_x86_64, lldb_r8d_x86_64, lldb_r8w_x86_64, lldb_r8l_x86_64,
+    LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_invalidate_r9[] = {
+    lldb_r9_x86_64, lldb_r9d_x86_64, lldb_r9w_x86_64, lldb_r9l_x86_64,
+    LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_invalidate_r10[] = {
+    lldb_r10_x86_64, lldb_r10d_x86_64, lldb_r10w_x86_64, lldb_r10l_x86_64,
+    LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_invalidate_r11[] = {
+    lldb_r11_x86_64, lldb_r11d_x86_64, lldb_r11w_x86_64, lldb_r11l_x86_64,
+    LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_invalidate_r12[] = {
+    lldb_r12_x86_64, lldb_r12d_x86_64, lldb_r12w_x86_64, lldb_r12l_x86_64,
+    LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_invalidate_r13[] = {
+    lldb_r13_x86_64, lldb_r13d_x86_64, lldb_r13w_x86_64, lldb_r13l_x86_64,
+    LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_invalidate_r14[] = {
+    lldb_r14_x86_64, lldb_r14d_x86_64, lldb_r14w_x86_64, lldb_r14l_x86_64,
+    LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_invalidate_r15[] = {
+    lldb_r15_x86_64, lldb_r15d_x86_64, lldb_r15w_x86_64, lldb_r15l_x86_64,
+    LLDB_INVALID_REGNUM};
+
+uint32_t x86_register_info::g_contained_fip[] = {lldb_fip_x86_64,
+                                                        LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_contained_fdp[] = {lldb_fdp_x86_64,
+                                                        LLDB_INVALID_REGNUM};
+
+uint32_t x86_register_info::g_invalidate_fip[] = {
+    lldb_fip_x86_64, lldb_fioff_x86_64, lldb_fiseg_x86_64, 
LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_invalidate_fdp[] = {
+    lldb_fdp_x86_64, lldb_fooff_x86_64, lldb_foseg_x86_64, 
LLDB_INVALID_REGNUM};
+
+uint32_t x86_register_info::g_contained_st0_32[] = {lldb_st0_i386,
+                                                           
LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_contained_st1_32[] = {lldb_st1_i386,
+                                                           
LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_contained_st2_32[] = {lldb_st2_i386,
+                                                           
LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_contained_st3_32[] = {lldb_st3_i386,
+                                                           
LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_contained_st4_32[] = {lldb_st4_i386,
+                                                           
LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_contained_st5_32[] = {lldb_st5_i386,
+                                                           
LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_contained_st6_32[] = {lldb_st6_i386,
+                                                           
LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_contained_st7_32[] = {lldb_st7_i386,
+                                                           
LLDB_INVALID_REGNUM};
+
+uint32_t x86_register_info::g_invalidate_st0_32[] = {
+    lldb_st0_i386, lldb_mm0_i386, LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_invalidate_st1_32[] = {
+    lldb_st1_i386, lldb_mm1_i386, LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_invalidate_st2_32[] = {
+    lldb_st2_i386, lldb_mm2_i386, LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_invalidate_st3_32[] = {
+    lldb_st3_i386, lldb_mm3_i386, LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_invalidate_st4_32[] = {
+    lldb_st4_i386, lldb_mm4_i386, LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_invalidate_st5_32[] = {
+    lldb_st5_i386, lldb_mm5_i386, LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_invalidate_st6_32[] = {
+    lldb_st6_i386, lldb_mm6_i386, LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_invalidate_st7_32[] = {
+    lldb_st7_i386, lldb_mm7_i386, LLDB_INVALID_REGNUM};
+
+uint32_t x86_register_info::g_contained_st0_64[] = {lldb_st0_x86_64,
+                                                           
LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_contained_st1_64[] = {lldb_st1_x86_64,
+                                                           
LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_contained_st2_64[] = {lldb_st2_x86_64,
+                                                           
LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_contained_st3_64[] = {lldb_st3_x86_64,
+                                                           
LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_contained_st4_64[] = {lldb_st4_x86_64,
+                                                           
LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_contained_st5_64[] = {lldb_st5_x86_64,
+                                                           
LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_contained_st6_64[] = {lldb_st6_x86_64,
+                                                           
LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_contained_st7_64[] = {lldb_st7_x86_64,
+                                                           
LLDB_INVALID_REGNUM};
+
+uint32_t x86_register_info::g_invalidate_st0_64[] = {
+    lldb_st0_x86_64, lldb_mm0_x86_64, LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_invalidate_st1_64[] = {
+    lldb_st1_x86_64, lldb_mm1_x86_64, LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_invalidate_st2_64[] = {
+    lldb_st2_x86_64, lldb_mm2_x86_64, LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_invalidate_st3_64[] = {
+    lldb_st3_x86_64, lldb_mm3_x86_64, LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_invalidate_st4_64[] = {
+    lldb_st4_x86_64, lldb_mm4_x86_64, LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_invalidate_st5_64[] = {
+    lldb_st5_x86_64, lldb_mm5_x86_64, LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_invalidate_st6_64[] = {
+    lldb_st6_x86_64, lldb_mm6_x86_64, LLDB_INVALID_REGNUM};
+uint32_t x86_register_info::g_invalidate_st7_64[] = {
+    lldb_st7_x86_64, lldb_mm7_x86_64, LLDB_INVALID_REGNUM};
+
 // Convert the 8-bit abridged FPU Tag Word (as found in FXSAVE) to the full
 // 16-bit FPU Tag Word (as found in FSAVE, and used by gdb protocol).  This
 // requires knowing the values of the ST(i) registers and the FPU Status Word.
diff --git a/lldb/source/Plugins/Process/Utility/RegisterContext_x86.h 
b/lldb/source/Plugins/Process/Utility/RegisterContext_x86.h
index e24da37b72610..d1d7e94f31776 100644
--- a/lldb/source/Plugins/Process/Utility/RegisterContext_x86.h
+++ b/lldb/source/Plugins/Process/Utility/RegisterContext_x86.h
@@ -390,6 +390,102 @@ uint16_t AbridgedToFullTagWord(uint8_t abridged_tw, 
uint16_t sw,
                                llvm::ArrayRef<MMSReg> st_regs);
 uint8_t FullToAbridgedTagWord(uint16_t tw);
 
+namespace x86_register_info {
+extern uint32_t g_contained_eax[];
+extern uint32_t g_contained_ebx[];
+extern uint32_t g_contained_ecx[];
+extern uint32_t g_contained_edx[];
+extern uint32_t g_contained_edi[];
+extern uint32_t g_contained_esi[];
+extern uint32_t g_contained_ebp[];
+extern uint32_t g_contained_esp[];
+
+extern uint32_t g_invalidate_eax[];
+extern uint32_t g_invalidate_ebx[];
+extern uint32_t g_invalidate_ecx[];
+extern uint32_t g_invalidate_edx[];
+extern uint32_t g_invalidate_edi[];
+extern uint32_t g_invalidate_esi[];
+extern uint32_t g_invalidate_ebp[];
+extern uint32_t g_invalidate_esp[];
+
+extern uint32_t g_contained_rax[];
+extern uint32_t g_contained_rbx[];
+extern uint32_t g_contained_rcx[];
+extern uint32_t g_contained_rdx[];
+extern uint32_t g_contained_rdi[];
+extern uint32_t g_contained_rsi[];
+extern uint32_t g_contained_rbp[];
+extern uint32_t g_contained_rsp[];
+extern uint32_t g_contained_r8[];
+extern uint32_t g_contained_r9[];
+extern uint32_t g_contained_r10[];
+extern uint32_t g_contained_r11[];
+extern uint32_t g_contained_r12[];
+extern uint32_t g_contained_r13[];
+extern uint32_t g_contained_r14[];
+extern uint32_t g_contained_r15[];
+
+extern uint32_t g_invalidate_rax[];
+extern uint32_t g_invalidate_rbx[];
+extern uint32_t g_invalidate_rcx[];
+extern uint32_t g_invalidate_rdx[];
+extern uint32_t g_invalidate_rdi[];
+extern uint32_t g_invalidate_rsi[];
+extern uint32_t g_invalidate_rbp[];
+extern uint32_t g_invalidate_rsp[];
+extern uint32_t g_invalidate_r8[];
+extern uint32_t g_invalidate_r9[];
+extern uint32_t g_invalidate_r10[];
+extern uint32_t g_invalidate_r11[];
+extern uint32_t g_invalidate_r12[];
+extern uint32_t g_invalidate_r13[];
+extern uint32_t g_invalidate_r14[];
+extern uint32_t g_invalidate_r15[];
+
+extern uint32_t g_contained_fip[];
+extern uint32_t g_contained_fdp[];
+
+extern uint32_t g_invalidate_fip[];
+extern uint32_t g_invalidate_fdp[];
+
+extern uint32_t g_contained_st0_32[];
+extern uint32_t g_contained_st1_32[];
+extern uint32_t g_contained_st2_32[];
+extern uint32_t g_contained_st3_32[];
+extern uint32_t g_contained_st4_32[];
+extern uint32_t g_contained_st5_32[];
+extern uint32_t g_contained_st6_32[];
+extern uint32_t g_contained_st7_32[];
+
+extern uint32_t g_invalidate_st0_32[];
+extern uint32_t g_invalidate_st1_32[];
+extern uint32_t g_invalidate_st2_32[];
+extern uint32_t g_invalidate_st3_32[];
+extern uint32_t g_invalidate_st4_32[];
+extern uint32_t g_invalidate_st5_32[];
+extern uint32_t g_invalidate_st6_32[];
+extern uint32_t g_invalidate_st7_32[];
+
+extern uint32_t g_contained_st0_64[];
+extern uint32_t g_contained_st1_64[];
+extern uint32_t g_contained_st2_64[];
+extern uint32_t g_contained_st3_64[];
+extern uint32_t g_contained_st4_64[];
+extern uint32_t g_contained_st5_64[];
+extern uint32_t g_contained_st6_64[];
+extern uint32_t g_contained_st7_64[];
+
+extern uint32_t g_invalidate_st0_64[];
+extern uint32_t g_invalidate_st1_64[];
+extern uint32_t g_invalidate_st2_64[];
+extern uint32_t g_invalidate_st3_64[];
+extern uint32_t g_invalidate_st4_64[];
+extern uint32_t g_invalidate_st5_64[];
+extern uint32_t g_invalidate_st6_64[];
+extern uint32_t g_invalidate_st7_64[];
+} // namespace x86_register_info
+
 } // namespace lldb_private
 
 #endif
diff --git a/lldb/source/Plugins/Process/Utility/RegisterInfos_i386.h 
b/lldb/source/Plugins/Process/Utility/RegisterInfos_i386.h
index e9f8065bffd8c..ccd5479c61ed2 100644
--- a/lldb/source/Plugins/Process/Utility/RegisterInfos_i386.h
+++ b/lldb/source/Plugins/Process/Utility/RegisterInfos_i386.h
@@ -93,8 +93,8 @@
     eEncodingUint, eFormatHex,                                                 
\
     {dwarf_mm##i##_i386, dwarf_mm##i##_i386, LLDB_INVALID_REGNUM,              
\
      LLDB_INVALID_REGNUM, lldb_mm##i##_i386 },                                 
\
-    RegisterContextPOSIX_x86::g_contained_##streg##_32,                        
\
-    RegisterContextPOSIX_x86::g_invalidate_##streg##_32,                       
\
+    x86_register_info::g_contained_##streg##_32,                        \
+    x86_register_info::g_invalidate_##streg##_32,                       \
     nullptr,                                                                   
\
   }
 
@@ -156,8 +156,8 @@
                    {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,                  
\
                     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,                  
\
                     lldb_##reg16##_i386 },                                     
\
-                    RegisterContextPOSIX_x86::g_contained_##reg32,             
\
-                    RegisterContextPOSIX_x86::g_invalidate_##reg32,            
\
+                    x86_register_info::g_contained_##reg32,             \
+                    x86_register_info::g_invalidate_##reg32,            \
                     nullptr,                                                   
\
   }
 
@@ -168,8 +168,8 @@
                    {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,                  
\
                     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,                  
\
                     lldb_##reg8##_i386 },                                      
\
-                    RegisterContextPOSIX_x86::g_contained_##reg32,             
\
-                    RegisterContextPOSIX_x86::g_invalidate_##reg32,            
\
+                    x86_register_info::g_contained_##reg32,             \
+                    x86_register_info::g_invalidate_##reg32,            \
                     nullptr,                                                   
\
   }
 
@@ -180,8 +180,8 @@
                    {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,                  
\
                     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,                  
\
                     lldb_##reg8##_i386 },                                      
\
-                    RegisterContextPOSIX_x86::g_contained_##reg32,             
\
-                    RegisterContextPOSIX_x86::g_invalidate_##reg32,            
\
+                    x86_register_info::g_contained_##reg32,             \
+                    x86_register_info::g_invalidate_##reg32,            \
                     nullptr,                                                   
\
   }
 
diff --git a/lldb/source/Plugins/Process/Utility/RegisterInfos_x86_64.h 
b/lldb/source/Plugins/Process/Utility/RegisterInfos_x86_64.h
index 1634381581550..d61b71904bc62 100644
--- a/lldb/source/Plugins/Process/Utility/RegisterInfos_x86_64.h
+++ b/lldb/source/Plugins/Process/Utility/RegisterInfos_x86_64.h
@@ -94,8 +94,8 @@
     eEncodingUint, eFormatHex,                                                 
\
     {dwarf_mm##i##_x86_64, dwarf_mm##i##_x86_64, LLDB_INVALID_REGNUM,          
\
      LLDB_INVALID_REGNUM, lldb_mm##i##_x86_64 },                               
\
-    RegisterContextPOSIX_x86::g_contained_##streg##_64,                        
\
-    RegisterContextPOSIX_x86::g_invalidate_##streg##_64,                       
\
+    x86_register_info::g_contained_##streg##_64,                        \
+    x86_register_info::g_invalidate_##streg##_64,                       \
     nullptr,                                                                   
\
   }
 
@@ -158,8 +158,8 @@
                    {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,                  
\
                     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,                  
\
                     lldb_##reg32##_x86_64 },                                   
\
-                    RegisterContextPOSIX_x86::g_contained_##reg64,             
\
-                    RegisterContextPOSIX_x86::g_invalidate_##reg64,            
\
+                    x86_register_info::g_contained_##reg64,             \
+                    x86_register_info::g_invalidate_##reg64,            \
                     nullptr,                                                   
\
   }
 
@@ -170,8 +170,8 @@
                    {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,                  
\
                     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,                  
\
                     lldb_##reg16##_x86_64 },                                   
\
-                    RegisterContextPOSIX_x86::g_contained_##reg64,             
\
-                    RegisterContextPOSIX_x86::g_invalidate_##reg64,            
\
+                    x86_register_info::g_contained_##reg64,             \
+                    x86_register_info::g_invalidate_##reg64,            \
                     nullptr,                                                   
\
   }
 
@@ -182,8 +182,8 @@
                    {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,                  
\
                     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,                  
\
                     lldb_##reg8##_x86_64 },                                    
\
-                    RegisterContextPOSIX_x86::g_contained_##reg64,             
\
-                    RegisterContextPOSIX_x86::g_invalidate_##reg64,            
\
+                    x86_register_info::g_contained_##reg64,             \
+                    x86_register_info::g_invalidate_##reg64,            \
                     nullptr,                                                   
\
   }
 
@@ -194,8 +194,8 @@
                    {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,                  
\
                     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,                  
\
                     lldb_##reg8##_x86_64 },                                    
\
-                    RegisterContextPOSIX_x86::g_contained_##reg64,             
\
-                    RegisterContextPOSIX_x86::g_invalidate_##reg64,            
\
+                    x86_register_info::g_contained_##reg64,             \
+                    x86_register_info::g_invalidate_##reg64,            \
                     nullptr                                                    
\
   }
 
@@ -203,8 +203,8 @@
   {                                                                            
\
     #name, nullptr, FPR_SIZE(reg), FPR_OFFSET(reg), eEncodingUint, eFormatHex, 
\
     {kind1, kind2, kind3, kind4, lldb_##name##_x86_64 },                       
\
-    RegisterContextPOSIX_x86::g_contained_##reg64,                             
\
-    RegisterContextPOSIX_x86::g_invalidate_##reg64,                            
\
+    x86_register_info::g_contained_##reg64,                             \
+    x86_register_info::g_invalidate_##reg64,                            \
     nullptr,                                                                   
\
   }
 
diff --git a/lldb/unittests/Instruction/CMakeLists.txt 
b/lldb/unittests/Instruction/CMakeLists.txt
index 2345298ee3802..f4e6e0ed9464a 100644
--- a/lldb/unittests/Instruction/CMakeLists.txt
+++ b/lldb/unittests/Instruction/CMakeLists.txt
@@ -7,6 +7,7 @@ add_lldb_unittest(EmulatorTests
   LINK_COMPONENTS
     Support
   LINK_LIBS
+    lldbRegisterSupport
     lldbCore
     lldbSymbol
     lldbTarget
diff --git a/lldb/unittests/Process/Utility/CMakeLists.txt 
b/lldb/unittests/Process/Utility/CMakeLists.txt
index ec0ff95d073b9..d0e8a99a05832 100644
--- a/lldb/unittests/Process/Utility/CMakeLists.txt
+++ b/lldb/unittests/Process/Utility/CMakeLists.txt
@@ -15,12 +15,19 @@ set(LLVM_OPTIONAL_SOURCES
   ${NETBSD_SOURCES})
 
 add_lldb_unittest(ProcessUtilityTests
+  PARTIAL_SOURCES_INTENDED
   LinuxProcMapsTest.cpp
   MemoryTagManagerAArch64MTETest.cpp
-  RegisterContextTest.cpp
   CoreFileMemoryRangesTest.cpp
-  ${PLATFORM_SOURCES}
 
   LINK_LIBS
     lldbPluginProcessUtility
     LLVMTestingSupport)
+
+add_lldb_unittest(RegisterSupportTests
+  PARTIAL_SOURCES_INTENDED
+  RegisterContextTest.cpp
+  ${PLATFORM_SOURCES}
+
+  LINK_LIBS
+    lldbRegisterSupport)
diff --git a/lldb/unittests/Process/minidump/CMakeLists.txt 
b/lldb/unittests/Process/minidump/CMakeLists.txt
index 07ea9c5a45507..d2dae08c88e2b 100644
--- a/lldb/unittests/Process/minidump/CMakeLists.txt
+++ b/lldb/unittests/Process/minidump/CMakeLists.txt
@@ -6,6 +6,7 @@ add_lldb_unittest(LLDBMinidumpTests
     ObjectYAML
     Support
   LINK_LIBS
+    lldbRegisterSupport
     lldbCore
     lldbHost
     lldbTarget
diff --git 
a/llvm/utils/gn/secondary/lldb/source/Plugins/Process/Utility/BUILD.gn 
b/llvm/utils/gn/secondary/lldb/source/Plugins/Process/Utility/BUILD.gn
index 09c0b85686053..bdde7b3bff752 100644
--- a/llvm/utils/gn/secondary/lldb/source/Plugins/Process/Utility/BUILD.gn
+++ b/llvm/utils/gn/secondary/lldb/source/Plugins/Process/Utility/BUILD.gn
@@ -1,7 +1,46 @@
+static_library("RegisterSupport") {
+  output_name = "lldbRegisterSupport"
+  configs += [ "//llvm/utils/gn/build:lldb_code" ]
+  deps = [
+    "//lldb/source/Utility",
+    "//llvm/lib/Support",
+    "//llvm/lib/TargetParser",
+  ]
+
+  # Uses source-relative includes for own headers.
+  include_dirs = [ "//lldb/source" ]
+  sources = [
+    "RegisterContextFreeBSD_i386.cpp",
+    "RegisterContextFreeBSD_powerpc.cpp",
+    "RegisterContextFreeBSD_x86_64.cpp",
+    "RegisterContextLinux_i386.cpp",
+    "RegisterContextLinux_s390x.cpp",
+    "RegisterContextLinux_x86_64.cpp",
+    "RegisterContextNetBSD_i386.cpp",
+    "RegisterContextNetBSD_x86_64.cpp",
+    "RegisterContextOpenBSD_i386.cpp",
+    "RegisterContextOpenBSD_x86_64.cpp",
+    "RegisterContextWindows_i386.cpp",
+    "RegisterContextWindows_x86_64.cpp",
+    "RegisterContext_x86.cpp",
+    "RegisterInfoPOSIXDynamic_riscv32.cpp",
+    "RegisterInfoPOSIX_arm.cpp",
+    "RegisterInfoPOSIX_arm64.cpp",
+    "RegisterInfoPOSIX_loongarch64.cpp",
+    "RegisterInfoPOSIX_ppc64.cpp",
+    "RegisterInfoPOSIX_ppc64le.cpp",
+    "RegisterInfoPOSIX_riscv32.cpp",
+    "RegisterInfoPOSIX_riscv64.cpp",
+    "RegisterInfos_x86_64_with_base_shared.cpp",
+    "RegisterTypeDetector_arm64.cpp",
+  ]
+}
+
 static_library("Utility") {
   output_name = "lldbPluginProcessUtility"
   configs += [ "//llvm/utils/gn/build:lldb_code" ]
   deps = [
+    ":RegisterSupport",
     #"//lldb/source/Breakpoint", # 3-hop dependency cycle.
     "//lldb/source/Core",
     "//lldb/source/DataFormatters",
@@ -42,20 +81,10 @@ static_library("Utility") {
     "RegisterContextDarwin_riscv32.cpp",
     "RegisterContextDarwin_x86_64.cpp",
     "RegisterContextDummy.cpp",
-    "RegisterContextFreeBSD_i386.cpp",
-    "RegisterContextFreeBSD_powerpc.cpp",
-    "RegisterContextFreeBSD_x86_64.cpp",
     "RegisterContextHistory.cpp",
-    "RegisterContextLinux_i386.cpp",
-    "RegisterContextLinux_s390x.cpp",
-    "RegisterContextLinux_x86_64.cpp",
     "RegisterContextMach_arm.cpp",
     "RegisterContextMach_x86_64.cpp",
     "RegisterContextMemory.cpp",
-    "RegisterContextNetBSD_i386.cpp",
-    "RegisterContextNetBSD_x86_64.cpp",
-    "RegisterContextOpenBSD_i386.cpp",
-    "RegisterContextOpenBSD_x86_64.cpp",
     "RegisterContextPOSIX_arm.cpp",
     "RegisterContextPOSIX_arm64.cpp",
     "RegisterContextPOSIX_loongarch64.cpp",
@@ -66,19 +95,6 @@ static_library("Utility") {
     "RegisterContextPOSIX_s390x.cpp",
     "RegisterContextPOSIX_x86.cpp",
     "RegisterContextThreadMemory.cpp",
-    "RegisterContextWindows_i386.cpp",
-    "RegisterContextWindows_x86_64.cpp",
-    "RegisterContext_x86.cpp",
-    "RegisterInfoPOSIXDynamic_riscv32.cpp",
-    "RegisterInfoPOSIX_arm.cpp",
-    "RegisterInfoPOSIX_arm64.cpp",
-    "RegisterInfoPOSIX_loongarch64.cpp",
-    "RegisterInfoPOSIX_ppc64.cpp",
-    "RegisterInfoPOSIX_ppc64le.cpp",
-    "RegisterInfoPOSIX_riscv32.cpp",
-    "RegisterInfoPOSIX_riscv64.cpp",
-    "RegisterInfos_x86_64_with_base_shared.cpp",
-    "RegisterTypeDetector_arm64.cpp",
     "StopInfoMachException.cpp",
     "ThreadMemory.cpp",
   ]

_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to