https://github.com/lawn123 updated https://github.com/llvm/llvm-project/pull/112296
>From ba485de763a08f6ff3c7468c1a1bfbbfb25ac48f Mon Sep 17 00:00:00 2001 From: Liu An <li...@loongson.cn> Date: Tue, 15 Oct 2024 10:31:35 +0800 Subject: [PATCH 1/3] [LoongArch64]: Add support for LoongArch64 in elf-core for lldb --- .../Plugins/Process/elf-core/CMakeLists.txt | 1 + .../RegisterContextPOSIXCore_loongarch64.cpp | 87 +++++++++++++++++++ .../RegisterContextPOSIXCore_loongarch64.h | 62 +++++++++++++ .../Process/elf-core/ThreadElfCore.cpp | 6 ++ 4 files changed, 156 insertions(+) create mode 100644 lldb/source/Plugins/Process/elf-core/RegisterContextPOSIXCore_loongarch64.cpp create mode 100644 lldb/source/Plugins/Process/elf-core/RegisterContextPOSIXCore_loongarch64.h diff --git a/lldb/source/Plugins/Process/elf-core/CMakeLists.txt b/lldb/source/Plugins/Process/elf-core/CMakeLists.txt index 72925c835b5c89..7473fa8d41ccb3 100644 --- a/lldb/source/Plugins/Process/elf-core/CMakeLists.txt +++ b/lldb/source/Plugins/Process/elf-core/CMakeLists.txt @@ -10,6 +10,7 @@ add_lldb_library(lldbPluginProcessElfCore PLUGIN RegisterContextPOSIXCore_s390x.cpp RegisterContextPOSIXCore_x86_64.cpp RegisterContextPOSIXCore_riscv64.cpp + RegisterContextPOSIXCore_loongarch64.cpp RegisterUtilities.cpp LINK_LIBS diff --git a/lldb/source/Plugins/Process/elf-core/RegisterContextPOSIXCore_loongarch64.cpp b/lldb/source/Plugins/Process/elf-core/RegisterContextPOSIXCore_loongarch64.cpp new file mode 100644 index 00000000000000..af192ecbe01e1b --- /dev/null +++ b/lldb/source/Plugins/Process/elf-core/RegisterContextPOSIXCore_loongarch64.cpp @@ -0,0 +1,87 @@ +//===-- RegisterContextPOSIXCore_loongarch64.cpp +//------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "RegisterContextPOSIXCore_loongarch64.h" + +#include "lldb/Utility/DataBufferHeap.h" + +using namespace lldb_private; + +std::unique_ptr<RegisterContextCorePOSIX_loongarch64> +RegisterContextCorePOSIX_loongarch64::Create(Thread &thread, + const ArchSpec &arch, + const DataExtractor &gpregset, + llvm::ArrayRef<CoreNote> notes) { + return std::unique_ptr<RegisterContextCorePOSIX_loongarch64>( + new RegisterContextCorePOSIX_loongarch64( + thread, + std::make_unique<RegisterInfoPOSIX_loongarch64>(arch, Flags()), + gpregset, notes)); +} + +RegisterContextCorePOSIX_loongarch64::RegisterContextCorePOSIX_loongarch64( + Thread &thread, + std::unique_ptr<RegisterInfoPOSIX_loongarch64> register_info, + const DataExtractor &gpregset, llvm::ArrayRef<CoreNote> notes) + : RegisterContextPOSIX_loongarch64(thread, std::move(register_info)) { + + m_gpr_buffer = std::make_shared<DataBufferHeap>(gpregset.GetDataStart(), + gpregset.GetByteSize()); + m_gpr.SetData(m_gpr_buffer); + m_gpr.SetByteOrder(gpregset.GetByteOrder()); + + ArchSpec arch = m_register_info_up->GetTargetArchitecture(); + DataExtractor fpregset = getRegset(notes, arch.GetTriple(), FPR_Desc); + m_fpr_buffer = std::make_shared<DataBufferHeap>(fpregset.GetDataStart(), + fpregset.GetByteSize()); + m_fpr.SetData(m_fpr_buffer); + m_fpr.SetByteOrder(fpregset.GetByteOrder()); +} + +RegisterContextCorePOSIX_loongarch64::~RegisterContextCorePOSIX_loongarch64() = + default; + +bool RegisterContextCorePOSIX_loongarch64::ReadGPR() { return true; } + +bool RegisterContextCorePOSIX_loongarch64::ReadFPR() { return true; } + +bool RegisterContextCorePOSIX_loongarch64::WriteGPR() { + assert(false && "Writing registers is not allowed for core dumps"); + return false; +} + +bool RegisterContextCorePOSIX_loongarch64::WriteFPR() { + assert(false && "Writing registers is not allowed for core dumps"); + return false; +} + +bool RegisterContextCorePOSIX_loongarch64::ReadRegister( + const RegisterInfo *reg_info, RegisterValue &value) { + const uint8_t *src = nullptr; + lldb::offset_t offset = reg_info->byte_offset; + + if (IsGPR(reg_info->kinds[lldb::eRegisterKindLLDB])) { + src = m_gpr.GetDataStart(); + } else if (IsFPR(reg_info->kinds[lldb::eRegisterKindLLDB])) { + src = m_fpr.GetDataStart(); + offset -= GetGPRSize(); + } else { + return false; + } + + Status error; + value.SetFromMemoryData(*reg_info, src + offset, reg_info->byte_size, + lldb::eByteOrderLittle, error); + return error.Success(); +} + +bool RegisterContextCorePOSIX_loongarch64::WriteRegister( + const RegisterInfo *reg_info, const RegisterValue &value) { + return false; +} diff --git a/lldb/source/Plugins/Process/elf-core/RegisterContextPOSIXCore_loongarch64.h b/lldb/source/Plugins/Process/elf-core/RegisterContextPOSIXCore_loongarch64.h new file mode 100644 index 00000000000000..44ee44badc5961 --- /dev/null +++ b/lldb/source/Plugins/Process/elf-core/RegisterContextPOSIXCore_loongarch64.h @@ -0,0 +1,62 @@ +//===-- RegisterContextPOSIXCore_loongarch64.h ----------------------*- C++ +//-*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef LLDB_SOURCE_PLUGINS_PROCESS_ELF_CORE_REGISTERCONTEXTPOSIXCORE_LOONGARCH64_H +#define LLDB_SOURCE_PLUGINS_PROCESS_ELF_CORE_REGISTERCONTEXTPOSIXCORE_LOONGARCH64_H + +#include "Plugins/Process/Utility/RegisterContextPOSIX_loongarch64.h" +#include "Plugins/Process/Utility/RegisterInfoPOSIX_loongarch64.h" + +#include "Plugins/Process/elf-core/RegisterUtilities.h" +#include "lldb/Target/Thread.h" +#include "lldb/Utility/DataExtractor.h" +#include "lldb/Utility/RegisterValue.h" + +#include <memory> + +class RegisterContextCorePOSIX_loongarch64 + : public RegisterContextPOSIX_loongarch64 { +public: + static std::unique_ptr<RegisterContextCorePOSIX_loongarch64> + Create(lldb_private::Thread &thread, const lldb_private::ArchSpec &arch, + const lldb_private::DataExtractor &gpregset, + llvm::ArrayRef<lldb_private::CoreNote> notes); + + ~RegisterContextCorePOSIX_loongarch64() override; + + bool ReadRegister(const lldb_private::RegisterInfo *reg_info, + lldb_private::RegisterValue &value) override; + + bool WriteRegister(const lldb_private::RegisterInfo *reg_info, + const lldb_private::RegisterValue &value) override; + +protected: + RegisterContextCorePOSIX_loongarch64( + lldb_private::Thread &thread, + std::unique_ptr<RegisterInfoPOSIX_loongarch64> register_info, + const lldb_private::DataExtractor &gpregset, + llvm::ArrayRef<lldb_private::CoreNote> notes); + + bool ReadGPR() override; + + bool ReadFPR() override; + + bool WriteGPR() override; + + bool WriteFPR() override; + +private: + lldb::DataBufferSP m_gpr_buffer; + lldb::DataBufferSP m_fpr_buffer; + + lldb_private::DataExtractor m_gpr; + lldb_private::DataExtractor m_fpr; +}; + +#endif // LLDB_SOURCE_PLUGINS_PROCESS_ELF_CORE_REGISTERCONTEXTPOSIXCORE_LOONGARCH64_H diff --git a/lldb/source/Plugins/Process/elf-core/ThreadElfCore.cpp b/lldb/source/Plugins/Process/elf-core/ThreadElfCore.cpp index 52b96052bdbeca..f2838087298efb 100644 --- a/lldb/source/Plugins/Process/elf-core/ThreadElfCore.cpp +++ b/lldb/source/Plugins/Process/elf-core/ThreadElfCore.cpp @@ -33,6 +33,7 @@ #include "RegisterContextLinuxCore_x86_64.h" #include "RegisterContextPOSIXCore_arm.h" #include "RegisterContextPOSIXCore_arm64.h" +#include "RegisterContextPOSIXCore_loongarch64.h" #include "RegisterContextPOSIXCore_mips64.h" #include "RegisterContextPOSIXCore_powerpc.h" #include "RegisterContextPOSIXCore_ppc64le.h" @@ -171,6 +172,7 @@ ThreadElfCore::CreateRegisterContextForFrame(StackFrame *frame) { if (!reg_interface && arch.GetMachine() != llvm::Triple::aarch64 && arch.GetMachine() != llvm::Triple::arm && + arch.GetMachine() != llvm::Triple::loongarch64 && arch.GetMachine() != llvm::Triple::riscv64) { LLDB_LOGF(log, "elf-core::%s:: Architecture(%d) or OS(%d) not supported", __FUNCTION__, arch.GetMachine(), arch.GetTriple().getOS()); @@ -187,6 +189,10 @@ ThreadElfCore::CreateRegisterContextForFrame(StackFrame *frame) { *this, std::make_unique<RegisterInfoPOSIX_arm>(arch), m_gpregset_data, m_notes); break; + case llvm::Triple::loongarch64: + m_thread_reg_ctx_sp = RegisterContextCorePOSIX_loongarch64::Create( + *this, arch, m_gpregset_data, m_notes); + break; case llvm::Triple::riscv64: m_thread_reg_ctx_sp = RegisterContextCorePOSIX_riscv64::Create( *this, arch, m_gpregset_data, m_notes); >From 355442e1f39adc07da234ecdbc1d0164793a97ad Mon Sep 17 00:00:00 2001 From: Liu An <li...@loongson.cn> Date: Thu, 17 Oct 2024 16:25:40 +0800 Subject: [PATCH 2/3] Fix formatting and add two testcases in TestLinuxCore.py --- .../RegisterContextPOSIX_loongarch64.cpp | 2 +- .../RegisterContextPOSIXCore_loongarch64.cpp | 13 +- .../RegisterContextPOSIXCore_loongarch64.h | 9 +- .../postmortem/elf-core/TestLinuxCore.py | 113 ++++++++++++++++++ .../elf-core/linux-loongarch64.core | Bin 0 -> 114688 bytes .../postmortem/elf-core/linux-loongarch64.out | Bin 0 -> 2944 bytes 6 files changed, 121 insertions(+), 16 deletions(-) create mode 100644 lldb/test/API/functionalities/postmortem/elf-core/linux-loongarch64.core create mode 100755 lldb/test/API/functionalities/postmortem/elf-core/linux-loongarch64.out diff --git a/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_loongarch64.cpp b/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_loongarch64.cpp index a48a58f28f7aad..49f371fb949b7b 100644 --- a/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_loongarch64.cpp +++ b/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_loongarch64.cpp @@ -58,7 +58,7 @@ RegisterContextPOSIX_loongarch64::GetRegisterInfoAtIndex(size_t reg) { } size_t RegisterContextPOSIX_loongarch64::GetRegisterSetCount() { - return m_register_info_up->GetRegisterCount(); + return m_register_info_up->GetRegisterSetCount(); } const lldb_private::RegisterSet * diff --git a/lldb/source/Plugins/Process/elf-core/RegisterContextPOSIXCore_loongarch64.cpp b/lldb/source/Plugins/Process/elf-core/RegisterContextPOSIXCore_loongarch64.cpp index af192ecbe01e1b..795ca2d9c7cdcd 100644 --- a/lldb/source/Plugins/Process/elf-core/RegisterContextPOSIXCore_loongarch64.cpp +++ b/lldb/source/Plugins/Process/elf-core/RegisterContextPOSIXCore_loongarch64.cpp @@ -1,5 +1,4 @@ -//===-- RegisterContextPOSIXCore_loongarch64.cpp -//------------------------------===// +//===-- RegisterContextPOSIXCore_loongarch64.cpp ------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. @@ -31,16 +30,14 @@ RegisterContextCorePOSIX_loongarch64::RegisterContextCorePOSIX_loongarch64( const DataExtractor &gpregset, llvm::ArrayRef<CoreNote> notes) : RegisterContextPOSIX_loongarch64(thread, std::move(register_info)) { - m_gpr_buffer = std::make_shared<DataBufferHeap>(gpregset.GetDataStart(), - gpregset.GetByteSize()); - m_gpr.SetData(m_gpr_buffer); + m_gpr.SetData(std::make_shared<DataBufferHeap>(gpregset.GetDataStart(), + gpregset.GetByteSize())); m_gpr.SetByteOrder(gpregset.GetByteOrder()); ArchSpec arch = m_register_info_up->GetTargetArchitecture(); DataExtractor fpregset = getRegset(notes, arch.GetTriple(), FPR_Desc); - m_fpr_buffer = std::make_shared<DataBufferHeap>(fpregset.GetDataStart(), - fpregset.GetByteSize()); - m_fpr.SetData(m_fpr_buffer); + m_fpr.SetData(std::make_shared<DataBufferHeap>(fpregset.GetDataStart(), + fpregset.GetByteSize())); m_fpr.SetByteOrder(fpregset.GetByteOrder()); } diff --git a/lldb/source/Plugins/Process/elf-core/RegisterContextPOSIXCore_loongarch64.h b/lldb/source/Plugins/Process/elf-core/RegisterContextPOSIXCore_loongarch64.h index 44ee44badc5961..80d9218e80c832 100644 --- a/lldb/source/Plugins/Process/elf-core/RegisterContextPOSIXCore_loongarch64.h +++ b/lldb/source/Plugins/Process/elf-core/RegisterContextPOSIXCore_loongarch64.h @@ -1,5 +1,4 @@ -//===-- RegisterContextPOSIXCore_loongarch64.h ----------------------*- C++ -//-*-===// +//===-- RegisterContextPOSIXCore_loongarch64.h ----------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. @@ -20,8 +19,7 @@ #include <memory> -class RegisterContextCorePOSIX_loongarch64 - : public RegisterContextPOSIX_loongarch64 { +class RegisterContextCorePOSIX_loongarch64 : public RegisterContextPOSIX_loongarch64 { public: static std::unique_ptr<RegisterContextCorePOSIX_loongarch64> Create(lldb_private::Thread &thread, const lldb_private::ArchSpec &arch, @@ -52,9 +50,6 @@ class RegisterContextCorePOSIX_loongarch64 bool WriteFPR() override; private: - lldb::DataBufferSP m_gpr_buffer; - lldb::DataBufferSP m_fpr_buffer; - lldb_private::DataExtractor m_gpr; lldb_private::DataExtractor m_fpr; }; diff --git a/lldb/test/API/functionalities/postmortem/elf-core/TestLinuxCore.py b/lldb/test/API/functionalities/postmortem/elf-core/TestLinuxCore.py index 7e8531c88bf34c..0d0dbee7deafa1 100644 --- a/lldb/test/API/functionalities/postmortem/elf-core/TestLinuxCore.py +++ b/lldb/test/API/functionalities/postmortem/elf-core/TestLinuxCore.py @@ -23,6 +23,7 @@ class LinuxCoreTestCase(TestBase): _ppc64le_pid = 28147 _riscv64_gpr_fpr_pid = 1089 _riscv64_gpr_only_pid = 97 + _loongarch64_pid = 456735 _aarch64_regions = 4 _i386_regions = 4 @@ -30,6 +31,7 @@ class LinuxCoreTestCase(TestBase): _s390x_regions = 2 _ppc64le_regions = 2 _riscv64_regions = 4 + _loongarch64_regions = 4 @skipIfLLVMTargetMissing("AArch64") def test_aarch64(self): @@ -82,6 +84,16 @@ def test_riscv64_gpr_only(self): "a.out", ) + @skipIfLLVMTargetMissing("LoongArch") + def test_loongarch64(self): + """Test that lldb can read the process information from an loongarch64 linux core file.""" + self.do_test( + "linux-loongarch64", + self._loongarch64_pid, + self._loongarch64_regions, + "a.out", + ) + @skipIfLLVMTargetMissing("X86") def test_same_pid_running(self): """Test that we read the information from the core correctly even if we have a running @@ -833,6 +845,107 @@ def test_riscv64_regs_gpr_only(self): substrs=["registers were unavailable"], ) + @skipIfLLVMTargetMissing("LoongArch") + def test_loongarch64_regs(self): + # check registers using 64 bit LoongArch64 core file containing GP-registers only + target = self.dbg.CreateTarget(None) + self.assertTrue(target, VALID_TARGET) + process = target.LoadCore("linux-loongarch64.core") + + values = {} + values["r0"] = "0x0" + values["r1"] = "0x000000012000016c" + values["r2"] = "0x0" + values["r3"] = "0x00007ffffb8249e0" + values["r4"] = "0x0" + values["r5"] = "0x000000012000010c" + values["r6"] = "0x0" + values["r7"] = "0x0" + values["r8"] = "0x0" + values["r9"] = "0x0" + values["r10"] = "0x0" + values["r11"] = "0x00000000000000dd" + values["r12"] = "0x0" + values["r13"] = "0x000000000000002f" + values["r14"] = "0x0" + values["r15"] = "0x0" + values["r16"] = "0x0" + values["r17"] = "0x0" + values["r18"] = "0x0" + values["r19"] = "0x0" + values["r20"] = "0x0" + values["r21"] = "0x0" + values["r22"] = "0x00007ffffb824a10" + values["r23"] = "0x0" + values["r24"] = "0x0" + values["r25"] = "0x0" + values["r26"] = "0x0" + values["r27"] = "0x0" + values["r28"] = "0x0" + values["r29"] = "0x0" + values["r30"] = "0x0" + values["r31"] = "0x0" + values["orig_a0"] = "0x0000555556b62d50" + values["pc"] = "0x000000012000012c" + + fpr_values = {} + fpr_values["f0"] = "0x00000000ffffff05" + fpr_values["f1"] = "0x2525252525252525" + fpr_values["f2"] = "0x2525252525560005" + fpr_values["f3"] = "0x000000000000ffff" + fpr_values["f4"] = "0x0" + fpr_values["f5"] = "0x0000000000000008" + fpr_values["f6"] = "0x0f0e0d0c0b0a0908" + fpr_values["f7"] = "0xffffffffffffffff" + fpr_values["f8"] = "0x6261747563657845" + fpr_values["f9"] = "0x766173206562206c" + fpr_values["f10"] = "0xffffffffffffffff" + fpr_values["f11"] = "0xffffffffffffffff" + fpr_values["f12"] = "0xffffffffffffffff" + fpr_values["f13"] = "0xffffffffffffffff" + fpr_values["f14"] = "0xffffffffffffffff" + fpr_values["f15"] = "0xffffffffffffffff" + fpr_values["f16"] = "0xffffffffffffffff" + fpr_values["f17"] = "0xffffffffffffffff" + fpr_values["f18"] = "0xffffffffffffffff" + fpr_values["f19"] = "0xffffffffffffffff" + fpr_values["f20"] = "0xffffffffffffffff" + fpr_values["f21"] = "0xffffffffffffffff" + fpr_values["f22"] = "0xffffffffffffffff" + fpr_values["f23"] = "0xffffffffffffffff" + fpr_values["f24"] = "0xffffffffffffffff" + fpr_values["f25"] = "0xffffffffffffffff" + fpr_values["f26"] = "0xffffffffffffffff" + fpr_values["f27"] = "0xffffffffffffffff" + fpr_values["f28"] = "0xffffffffffffffff" + fpr_values["f29"] = "0xffffffffffffffff" + fpr_values["f30"] = "0xffffffffffffffff" + fpr_values["f31"] = "0xffffffffffffffff" + fpr_values["fcc0"] = "0x01" + fpr_values["fcc1"] = "0x0" + fpr_values["fcc2"] = "0x01" + fpr_values["fcc3"] = "0x01" + fpr_values["fcc4"] = "0x01" + fpr_values["fcc5"] = "0x01" + fpr_values["fcc6"] = "0x0" + fpr_values["fcc7"] = "0x01" + fpr_values["fcsr"] = "0x0" + + for regname, value in values.items(): + self.expect( + "register read {}".format(regname), + substrs=["{} = {}".format(regname, value)], + ) + + for regname, value in fpr_values.items(): + self.expect( + "register read {}".format(regname), + substrs=["{} = {}".format(regname, value)], + ) + + self.expect("register read --all") + + def test_get_core_file_api(self): """ Test SBProcess::GetCoreFile() API can successfully get the core file. diff --git a/lldb/test/API/functionalities/postmortem/elf-core/linux-loongarch64.core b/lldb/test/API/functionalities/postmortem/elf-core/linux-loongarch64.core new file mode 100644 index 0000000000000000000000000000000000000000..8adbd53f3cea00c0cff085f17d57e49bff9f4fe6 GIT binary patch literal 114688 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 N00ck)1U?o5{|)2mqtgHY literal 0 HcmV?d00001 diff --git a/lldb/test/API/functionalities/postmortem/elf-core/linux-loongarch64.out b/lldb/test/API/functionalities/postmortem/elf-core/linux-loongarch64.out new file mode 100755 index 0000000000000000000000000000000000000000..ea3c61ac5bae7cc26b3afa886831d723036e021a GIT binary patch literal 2944 zcmbtWO>7%Q6n?WC$9DXaq-m%_C~-tk9Yod%vO+0xYZ}uKDS}e*Q=v-EuDyvDyt`q& zj?yX;4i~r}kxN0Ssz9iR0tYTgJ)kN`aLa)c962E>aX?7idNA+J>^SMh0VGD6c{AVp zzBfCwZ)W$M=a(-ijDai)h*6tCme7)P#6)L-W2ZqyPa0A{oQUKI%XQf0wx9@5S{bkp zVXF6pn=I!`I~Cy45|_%$zxuU)(fv>DP{1PnajYuV#TQ?NlQ)0KR6e`+<K9c1;h!^a z{r1-@U*4^jI?BeUyVD!HyUO=QXFB=*wz7Bk-1MH&$)&z+D<3eJ#vM_SldB>p3$RQY zoiy!z-4Ewc`*EN>-^pRD+%|({(jqs9+<ko;^(&|?@fb>SOXzOh?~L`qD0DvWyv}ti zs4JnaE#{T$V%IJK+hlA!rNSe)whY$Oold8K7Ru?_@^w~DJ_IX2l~Zb#d{~#!UqVa% z7q;1Tg&4K(%93*hU3KIT7dhE3=ZfGgE-akM=E|mF=}va8pgpC{&J?DD9z2O6@zO=g zB!f))ilX%>zatg_#>st29GoOl6l*VK#6|~8^|ynl{22+lahci+Fi2L}aiO2}``C@H zx-PJ2suW6ScH<Tiu|o6&@9tbyD3ha8-;iVHA_j}gU@CQD<cJd&)Gx3ZFmw+XOUdWt zdyY7}!NW2c76WlTJr%G5sIfDX?AgRKlLJd5N(SeOfSMLiLLllOBqn1^BX~xJ+2iSv zggP-kG0cudhfd&TY3$q>3KAG1acYd<Qf6z6A-jJH5{a`3HI2*A7|zp!6B}ixI5{2x znqlBD@!A-!;uEY9h`|%IBF65g@vvi|5eFt1y(5K9D1+j4;|LWD;)>jmk;s6`;zPh9 z3A8b^3~dsas&bUP8AKz8yvGrh+K@Mn$Cxq0b#0)=^yoZi7v`Q05->Ys>xNZqtj`x} z)c30OVnd%VY|Lr1I9^?E73T}sX<Bxz*l2EIw`#jJvr%+h&(<3__FIlwTr(Zhv#Qyd zHK;Uw-SeSZ$M<dPmZMc6U&pEQ4XdR)`E}2I)2#aWMq|UC*&o!5yl*!B{BswV@~bVU z>RYa(H!R;WoB4IO>D#X7n|9u8tj<(j&*a<pkBy2uFYm{LL>1FmZux__3U`9Ee-M|q z=|Pn4M#}%gMTOosuF6koFTObWVUG&&FvQ0y3>?BK&-&ocPS`<_@f+1$uRL>faS$Fp z=A(!oL%bcjFX;XpqOU<oe0Olj3*Di;@W+n8Wj@eVKsQaLVl<mUzEsSb?(0x7of?4F zylVTpf!6ngt;?R{`lhz#v^1k-HEJ_f4K&}}^g%Q0l~qr-P0*^YZJQ24HPdLVRdi2x z*370HTF$B~`?_Ix=7t<KEC<y>gwx3`!T6A#So8mB$5G7hfgp&?Pqe&D1y-7H=4t4l zcP%qa<}q4c!e5QBp58xE<rO6J9W5_g!gSkkW}Zb4QD?gh(UJcvkB0CdEZ2~05v#-w zQZEG$6pkC_zIKHE-9Z1x!Js|3Mh}c6Z_|$smfON~+wlDB=m}#)emL0Zn_Z>ogt@f8 zgoW36C(vI#LNDXIcZ7Z}xQgER7d^$1@BSe5!$ALaFcIAk_*KO3nJD<#<%MpfV5<T| em=Yy5mYgu%Rz9}`hOyI2Uk~&jNn&8b`o96r%}N;n literal 0 HcmV?d00001 >From 2cce5e77082965f6ef2ab71cfd3aea7d45e953b7 Mon Sep 17 00:00:00 2001 From: Liu An <li...@loongson.cn> Date: Thu, 17 Oct 2024 17:49:05 +0800 Subject: [PATCH 3/3] Fix format --- .../RegisterContextPOSIXCore_loongarch64.cpp | 2 +- .../postmortem/elf-core/TestLinuxCore.py | 60 +++++++++---------- 2 files changed, 31 insertions(+), 31 deletions(-) diff --git a/lldb/source/Plugins/Process/elf-core/RegisterContextPOSIXCore_loongarch64.cpp b/lldb/source/Plugins/Process/elf-core/RegisterContextPOSIXCore_loongarch64.cpp index 795ca2d9c7cdcd..b6057b66255c17 100644 --- a/lldb/source/Plugins/Process/elf-core/RegisterContextPOSIXCore_loongarch64.cpp +++ b/lldb/source/Plugins/Process/elf-core/RegisterContextPOSIXCore_loongarch64.cpp @@ -1,4 +1,4 @@ -//===-- RegisterContextPOSIXCore_loongarch64.cpp ------------------------------===// +//===-- RegisterContextPOSIXCore_loongarch64.cpp --------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. diff --git a/lldb/test/API/functionalities/postmortem/elf-core/TestLinuxCore.py b/lldb/test/API/functionalities/postmortem/elf-core/TestLinuxCore.py index 0d0dbee7deafa1..12ff01bad1bdac 100644 --- a/lldb/test/API/functionalities/postmortem/elf-core/TestLinuxCore.py +++ b/lldb/test/API/functionalities/postmortem/elf-core/TestLinuxCore.py @@ -853,38 +853,38 @@ def test_loongarch64_regs(self): process = target.LoadCore("linux-loongarch64.core") values = {} - values["r0"] = "0x0" + values["r0"] = "0x0000000000000000" values["r1"] = "0x000000012000016c" - values["r2"] = "0x0" + values["r2"] = "0x0000000000000000" values["r3"] = "0x00007ffffb8249e0" - values["r4"] = "0x0" + values["r4"] = "0x0000000000000000" values["r5"] = "0x000000012000010c" - values["r6"] = "0x0" - values["r7"] = "0x0" - values["r8"] = "0x0" - values["r9"] = "0x0" - values["r10"] = "0x0" + values["r6"] = "0x0000000000000000" + values["r7"] = "0x0000000000000000" + values["r8"] = "0x0000000000000000" + values["r9"] = "0x0000000000000000" + values["r10"] = "0x0000000000000000" values["r11"] = "0x00000000000000dd" - values["r12"] = "0x0" + values["r12"] = "0x0000000000000000" values["r13"] = "0x000000000000002f" - values["r14"] = "0x0" - values["r15"] = "0x0" - values["r16"] = "0x0" - values["r17"] = "0x0" - values["r18"] = "0x0" - values["r19"] = "0x0" - values["r20"] = "0x0" - values["r21"] = "0x0" + values["r14"] = "0x0000000000000000" + values["r15"] = "0x0000000000000000" + values["r16"] = "0x0000000000000000" + values["r17"] = "0x0000000000000000" + values["r18"] = "0x0000000000000000" + values["r19"] = "0x0000000000000000" + values["r20"] = "0x0000000000000000" + values["r21"] = "0x0000000000000000" values["r22"] = "0x00007ffffb824a10" - values["r23"] = "0x0" - values["r24"] = "0x0" - values["r25"] = "0x0" - values["r26"] = "0x0" - values["r27"] = "0x0" - values["r28"] = "0x0" - values["r29"] = "0x0" - values["r30"] = "0x0" - values["r31"] = "0x0" + values["r23"] = "0x0000000000000000" + values["r24"] = "0x0000000000000000" + values["r25"] = "0x0000000000000000" + values["r26"] = "0x0000000000000000" + values["r27"] = "0x0000000000000000" + values["r28"] = "0x0000000000000000" + values["r29"] = "0x0000000000000000" + values["r30"] = "0x0000000000000000" + values["r31"] = "0x0000000000000000" values["orig_a0"] = "0x0000555556b62d50" values["pc"] = "0x000000012000012c" @@ -893,7 +893,7 @@ def test_loongarch64_regs(self): fpr_values["f1"] = "0x2525252525252525" fpr_values["f2"] = "0x2525252525560005" fpr_values["f3"] = "0x000000000000ffff" - fpr_values["f4"] = "0x0" + fpr_values["f4"] = "0x0000000000000000" fpr_values["f5"] = "0x0000000000000008" fpr_values["f6"] = "0x0f0e0d0c0b0a0908" fpr_values["f7"] = "0xffffffffffffffff" @@ -922,14 +922,14 @@ def test_loongarch64_regs(self): fpr_values["f30"] = "0xffffffffffffffff" fpr_values["f31"] = "0xffffffffffffffff" fpr_values["fcc0"] = "0x01" - fpr_values["fcc1"] = "0x0" + fpr_values["fcc1"] = "0x00" fpr_values["fcc2"] = "0x01" fpr_values["fcc3"] = "0x01" fpr_values["fcc4"] = "0x01" fpr_values["fcc5"] = "0x01" - fpr_values["fcc6"] = "0x0" + fpr_values["fcc6"] = "0x00" fpr_values["fcc7"] = "0x01" - fpr_values["fcsr"] = "0x0" + fpr_values["fcsr"] = "0x00" for regname, value in values.items(): self.expect( _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits