[Lldb-commits] [PATCH] D93939: [elf-core] Improve reading memory from core file
Djordje Todorovic via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Fri Jan 22 01:53:18 PST 2021
djtodoro updated this revision to Diff 318464.
djtodoro added a comment.
nfc
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D93939/new/
https://reviews.llvm.org/D93939
Files:
lldb/source/Plugins/Process/elf-core/ProcessElfCore.cpp
lldb/test/API/functionalities/postmortem/elf-core/TestLinuxCore.py
lldb/test/API/functionalities/postmortem/elf-core/linux-x86_64-for-disassemble.core
lldb/test/API/functionalities/postmortem/elf-core/linux-x86_64-for-disassemble.out
Index: lldb/test/API/functionalities/postmortem/elf-core/TestLinuxCore.py
===================================================================
--- lldb/test/API/functionalities/postmortem/elf-core/TestLinuxCore.py
+++ lldb/test/API/functionalities/postmortem/elf-core/TestLinuxCore.py
@@ -155,6 +155,37 @@
self.do_test("linux-x86_64", self._x86_64_pid, self._x86_64_regions,
"a.out")
+
+ @skipIf(triple='^mips')
+ @skipIfLLVMTargetMissing("X86")
+ @skipIfWindows
+ @skipIfReproducer
+ def test_frame_disassemble(self):
+ """Test that we are able to disassemble all the frames"""
+ disasmtarget = self.dbg.CreateTarget("linux-x86_64-for-disassemble.out")
+ disasmprocess = disasmtarget.LoadCore("linux-x86_64-for-disassemble.core")
+ self.assertTrue(disasmprocess, PROCESS_IS_VALID)
+
+ disasmthread = disasmprocess.GetSelectedThread()
+ framenum = disasmthread.GetNumFrames()
+ for i in range(framenum):
+ frame = disasmthread.GetFrameAtIndex(i)
+ disassembly = frame.Disassemble()
+ self.assertNotEqual(disassembly, "")
+ self.assertNotIn("error", disassembly)
+ # Make sure we don't have some dummy disassembly.
+ # Each function should start with:
+ # pushq %rbp
+ # ...
+ # Sometimes it just prints some dummy code as:
+ # addb %al, (%rax)
+ # addb %al, (%rax)
+ # ...
+ framesetup = disassembly.splitlines()[1]
+ self.assertNotIn("addb", framesetup)
+
+ self.dbg.DeleteTarget(disasmtarget)
+
@skipIf(triple='^mips')
@skipIfLLVMTargetMissing("X86")
def test_FPR_SSE(self):
Index: lldb/source/Plugins/Process/elf-core/ProcessElfCore.cpp
===================================================================
--- lldb/source/Plugins/Process/elf-core/ProcessElfCore.cpp
+++ lldb/source/Plugins/Process/elf-core/ProcessElfCore.cpp
@@ -353,7 +353,6 @@
const lldb::addr_t file_end = address_range->data.GetRangeEnd();
size_t bytes_to_read = size; // Number of bytes to read from the core file
size_t bytes_copied = 0; // Number of bytes actually read from the core file
- size_t zero_fill_size = 0; // Padding
lldb::addr_t bytes_left =
0; // Number of bytes available in the core file from the given address
@@ -367,24 +366,15 @@
if (file_end > file_start + offset)
bytes_left = file_end - (file_start + offset);
- // Figure out how many bytes we need to zero-fill if we are reading more
- // bytes than available in the on-disk segment
- if (bytes_to_read > bytes_left) {
- zero_fill_size = bytes_to_read - bytes_left;
+ if (bytes_to_read > bytes_left)
bytes_to_read = bytes_left;
- }
// If there is data available on the core file read it
if (bytes_to_read)
bytes_copied =
core_objfile->CopyData(offset + file_start, bytes_to_read, buf);
- assert(zero_fill_size <= size);
- // Pad remaining bytes
- if (zero_fill_size)
- memset(((char *)buf) + bytes_copied, 0, zero_fill_size);
-
- return bytes_copied + zero_fill_size;
+ return bytes_copied;
}
void ProcessElfCore::Clear() {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D93939.318464.patch
Type: text/x-patch
Size: 3238 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20210122/f0db42ec/attachment.bin>
More information about the lldb-commits
mailing list