[Lldb-commits] [lldb] ce7c828 - [lldb][AArch64] Do not crash if NT_ARM_TLS is missing (#106478)
via lldb-commits
lldb-commits at lists.llvm.org
Fri Aug 30 01:00:38 PDT 2024
Author: Igor Kudrin
Date: 2024-08-30T09:00:35+01:00
New Revision: ce7c828e085563f29451ec5fac9626c76ebf70ee
URL: https://github.com/llvm/llvm-project/commit/ce7c828e085563f29451ec5fac9626c76ebf70ee
DIFF: https://github.com/llvm/llvm-project/commit/ce7c828e085563f29451ec5fac9626c76ebf70ee.diff
LOG: [lldb][AArch64] Do not crash if NT_ARM_TLS is missing (#106478)
[D156118](https://reviews.llvm.org/D156118) states that this note is
always present, but it is better to check it explicitly, as otherwise
`lldb` may crash when trying to read registers.
Added:
lldb/test/Shell/Process/elf-core/aarch64-no-NT_ARM_TLS.yaml
lldb/test/Shell/Process/elf-core/lit.local.cfg
Modified:
lldb/source/Plugins/Process/Utility/RegisterInfoPOSIX_arm64.cpp
Removed:
################################################################################
diff --git a/lldb/source/Plugins/Process/Utility/RegisterInfoPOSIX_arm64.cpp b/lldb/source/Plugins/Process/Utility/RegisterInfoPOSIX_arm64.cpp
index 054b7d9b2ec575..9f5872e5de7e9f 100644
--- a/lldb/source/Plugins/Process/Utility/RegisterInfoPOSIX_arm64.cpp
+++ b/lldb/source/Plugins/Process/Utility/RegisterInfoPOSIX_arm64.cpp
@@ -254,9 +254,11 @@ RegisterInfoPOSIX_arm64::RegisterInfoPOSIX_arm64(
if (m_opt_regsets.AllSet(eRegsetMaskMTE))
AddRegSetMTE();
- // The TLS set always contains tpidr but only has tpidr2 when SME is
- // present.
- AddRegSetTLS(m_opt_regsets.AllSet(eRegsetMaskSSVE));
+ if (m_opt_regsets.AllSet(eRegsetMaskTLS)) {
+ // The TLS set always contains tpidr but only has tpidr2 when SME is
+ // present.
+ AddRegSetTLS(m_opt_regsets.AllSet(eRegsetMaskSSVE));
+ }
if (m_opt_regsets.AnySet(eRegsetMaskSSVE))
AddRegSetSME(m_opt_regsets.AnySet(eRegsetMaskZT));
diff --git a/lldb/test/Shell/Process/elf-core/aarch64-no-NT_ARM_TLS.yaml b/lldb/test/Shell/Process/elf-core/aarch64-no-NT_ARM_TLS.yaml
new file mode 100644
index 00000000000000..3d02eb95f38a1a
--- /dev/null
+++ b/lldb/test/Shell/Process/elf-core/aarch64-no-NT_ARM_TLS.yaml
@@ -0,0 +1,32 @@
+## Check that lldb does not crash if a core file does not contain an NT_ARM_TLS
+## note while there are notes for other dynamic register sets.
+
+# RUN: yaml2obj %s -o %t
+# RUN: %lldb -c %t -o "re r -a" | FileCheck %s
+
+# CHECK: Pointer Authentication Registers:
+# CHECK-NEXT: data_mask =
+# CHECK-NEXT: code_mask =
+# CHECK-NOT: Thread Local Storage Registers:
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_CORE
+ Machine: EM_AARCH64
+ProgramHeaders:
+ - Type: PT_NOTE
+ FirstSec: .note
+ LastSec: .note
+Sections:
+ - Name: .note
+ Type: SHT_NOTE
+ Notes:
+ - Name: CORE
+ Desc: 0b00000000000000000000000b00000000000000000000000000000000000000389300001b930000389300001b930000000000000000000000000000000000000000000000000000e02e0000000000000000000000000000119100000000000000000000000000005ee100000000000000000000000000002f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400162e2ffff00005801400000000000200162e2ffff0000240140000000000000000000000000000100000000000000
+ Type: NT_PRSTATUS
+ - Name: LINUX
+ Desc: 0000000000007f000000000000007f00
+ Type: NT_ARM_PAC_MASK
+...
diff --git a/lldb/test/Shell/Process/elf-core/lit.local.cfg b/lldb/test/Shell/Process/elf-core/lit.local.cfg
new file mode 100644
index 00000000000000..8169b9f95e118c
--- /dev/null
+++ b/lldb/test/Shell/Process/elf-core/lit.local.cfg
@@ -0,0 +1 @@
+config.suffixes = ['.yaml']
More information about the lldb-commits
mailing list