https://github.com/igorkudrin created https://github.com/llvm/llvm-project/pull/139196
Motivation example: ``` > lldb -c altmain2.core ... (lldb) var F (const char *) F = 0x0804a000 "" ``` The variable `F` points to a read-only memory page not dumped to the core file, so `Process::ReadMemory()` cannot read the data. The patch switches to `Target::ReadMemory()`, which can read data both from the process memory and the application binary. >From 499f723c3f974ff53deb8f354d879e0baaa7a9e8 Mon Sep 17 00:00:00 2001 From: Igor Kudrin <ikud...@accesssoftek.com> Date: Wed, 7 May 2025 19:55:07 -0700 Subject: [PATCH] [lldb][core] Fix getting summary of a variable pointing to r/o memory Motivation example: ``` > lldb -c altmain2.core ... (lldb) var F (const char *) F = 0x0804a000 "" ``` The variable `F` points to a read-only memory page not dumped to the core file, so `Process::ReadMemory()` cannot read the data. The patch switches to `Target::ReadMemory()`, which can read data both from the process memory and the application binary. --- lldb/source/ValueObject/ValueObject.cpp | 13 ++++++++- .../postmortem/elf-core/TestLinuxCore.py | 27 ++++++++++++++++++ .../postmortem/elf-core/altmain2.core | Bin 0 -> 40960 bytes .../postmortem/elf-core/altmain2.out | Bin 0 -> 9776 bytes 4 files changed, 39 insertions(+), 1 deletion(-) create mode 100755 lldb/test/API/functionalities/postmortem/elf-core/altmain2.core create mode 100755 lldb/test/API/functionalities/postmortem/elf-core/altmain2.out diff --git a/lldb/source/ValueObject/ValueObject.cpp b/lldb/source/ValueObject/ValueObject.cpp index e1c66763ff0b8..aab78428d9103 100644 --- a/lldb/source/ValueObject/ValueObject.cpp +++ b/lldb/source/ValueObject/ValueObject.cpp @@ -735,7 +735,7 @@ size_t ValueObject::GetPointeeData(DataExtractor &data, uint32_t item_idx, case eAddressTypeLoad: { ExecutionContext exe_ctx(GetExecutionContextRef()); Process *process = exe_ctx.GetProcessPtr(); - if (process) { + if (process && process->IsLiveDebugSession()) { heap_buf_ptr->SetByteSize(bytes); size_t bytes_read = process->ReadMemory( addr + offset, heap_buf_ptr->GetBytes(), bytes, error); @@ -743,6 +743,17 @@ size_t ValueObject::GetPointeeData(DataExtractor &data, uint32_t item_idx, data.SetData(data_sp); return bytes_read; } + } else if (Target *target = exe_ctx.GetTargetPtr()) { + Address target_addr; + target_addr.SetLoadAddress(addr + offset, target); + heap_buf_ptr->SetByteSize(bytes); + size_t bytes_read = + target->ReadMemory(target_addr, heap_buf_ptr->GetBytes(), bytes, + error, /*force_live_memory=*/true); + if (error.Success() || bytes_read > 0) { + data.SetData(data_sp); + return bytes_read; + } } } break; case eAddressTypeHost: { diff --git a/lldb/test/API/functionalities/postmortem/elf-core/TestLinuxCore.py b/lldb/test/API/functionalities/postmortem/elf-core/TestLinuxCore.py index a287fd19ba352..d1e065a32efdc 100644 --- a/lldb/test/API/functionalities/postmortem/elf-core/TestLinuxCore.py +++ b/lldb/test/API/functionalities/postmortem/elf-core/TestLinuxCore.py @@ -977,6 +977,33 @@ def test_get_core_file_api(self): self.assertEqual(process.GetCoreFile().GetFilename(), core_file_name) self.dbg.DeleteTarget(target) + @skipIfLLVMTargetMissing("X86") + def test_ro_cstring(self): + """ + Test that we can show the summary for a cstring variable that points + to a r/o memory page which is not dumped to a core file. + """ + target = self.dbg.CreateTarget("altmain2.out") + process = target.LoadCore("altmain2.core") + self.assertTrue(process, PROCESS_IS_VALID) + + frame = process.GetSelectedThread().GetFrameAtIndex(0) + self.assertEqual(frame.GetFunctionName(), "_start") + + var = frame.FindVariable("F") + + # The variable points to a RO segment that is not dumped to the core + # file and thus process.ReadCStringFromMemory() cannot get the value. + error = lldb.SBError() + cstr = process.ReadCStringFromMemory(var.GetValueAsUnsigned(), 256, error) + self.assertFailure(error, error_str="core file does not contain 0x804a000") + self.assertEqual(cstr, "") + + # Nevertheless, when getting the summary, the value can be read from the + # application binary. + cstr = var.GetSummary() + self.assertEqual(cstr, '"_start"') + def check_memory_regions(self, process, region_count): region_list = process.GetMemoryRegions() self.assertEqual(region_list.GetSize(), region_count) diff --git a/lldb/test/API/functionalities/postmortem/elf-core/altmain2.core b/lldb/test/API/functionalities/postmortem/elf-core/altmain2.core new file mode 100755 index 0000000000000000000000000000000000000000..b9dd8de08b813442037fcb5bedd08e8bbabfdc0b GIT binary patch literal 40960 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 aAa>MNSFS9>wE@m`bXZx$UDQ;$dHgS6POs$v literal 0 HcmV?d00001 diff --git a/lldb/test/API/functionalities/postmortem/elf-core/altmain2.out b/lldb/test/API/functionalities/postmortem/elf-core/altmain2.out new file mode 100755 index 0000000000000000000000000000000000000000..e930c3d8055e11ea8256faf244a208ff5a7bc033 GIT binary patch literal 9776 zcmeHNOK%%h6h3!6;~J)M?4%Nn3S>eHG$2o2R$BTXB*BRa77?OBV#6>VPizx=#u|@l ziV9RhNUaJ|x?{nDpTK{p0I`Av3;sYQ7D#~DL;@7fH=Y|g77MmW_bBI{*LUa6{qD_d zd_JmFH-r!*MWYNQ(Y~H5bMmLNgG!k!GUz;wQ+`lK`nH~f{>Uy=N3KAFI$PprKuhdG z4c4Q&#r~IEXFb6#ba;M_>$$J=9P}jDpjlSTfBj)xhdU~$V_7AN0mXn~Krx^gPz)#r z6a$I@#eiZ!F`yVw3>;@*`|iV!e<}R@BxjAkr-?qheemny;oZt#-&PKQyjMB+hUWIa zdvH%b_u%+c6)6T31BwB~fMP%~pcqgLC<YV*iUGxdVn8wQKViV>#cmWIf7#9T^-I?I z?OH#G`_{sey=2dqmitM#_~ByNo-fa)X?mPzYRT;6$NS_b|Jk9Zwb?gFB*g^x1d5Mh z;Kl%n%yc;xA}e#^i?=wTZ;;3o;c53{V;2zJd^ZWZBz$(VB71|)iMLV1Kw_NC8U5NM z&nb$h^OI&~`pk4uOk@j>5oK(#GL^|+GB2Ain9oij{nF|8rv#(*GG%gu!nH~5G`}<_ zQsf|!Jx8YbqM6C_de0D6pjTN9?pk;b3k&gQehdcP6Rhk^3v5&q)7toeBaV26AVb4W zCynAChIzklh=#^Z7b59hIAjqdZsktu`W=1@2u>uWYc-$yL|Yp({I40n1@uKgX1R`d z^R;bjec?iSK31u-w8%r;5B#eQKk%cL$Dtc}&8w~Di_2E2VU>1*u;lh`23|7?gRtK# z^@AI&pk9jITHEh&ov(<uTk_g&uUYCwVeETxD-5U>h8;@pkJoe~a@%poZ3VVRb8)9T zw~)Np$N+Yv==A%c^kEU3Y|-<9Sa2`O3|s6C@q{Mm3Y?US2}WGt@KlN~Fn)a`eq|&c zdP!%qy0x}ib+$G(-l$x6uCK0DD-Jo%-o<6R;m1zbbK+({*tOj~&enRpbgzzIcVm|v zKd2Mgy_+2-iftSXY*Tu%zZa7og$dejgt6UibHWQd9Y0{F?$`Pa$Bo>e;rC?N3U)&2 zyR};6zbB)1EAXYi6S<wEfY+0GVE8Q~-t>QzGmOKTB)v7@nHy-(t0P687tR5Ga*@%u zV-0$CMsfI;1}?*jb3`AHyrY~-dVFwC7g>RuXN8=yh@MZp!GId{a%u-zq7{pX|BeJ0 z2+mphh#iXvUll2`_9iE!kJ|SZQ3p;cvc^Yy40mOQXiI{IYRQ*tDE}$rULK0ESI7sf zc(&Z{4~)BoLMo_1@1$1Zs!tIWQw)s6!47>?=pDxGb8d_kYeEaGkFeq_r2NLXf7=Jv R7{;xfCHh=WVvF@4{{Sg@>kj|` literal 0 HcmV?d00001 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits