diff --git a/lldb/source/Plugins/Process/elf-core/ProcessElfCore.cpp b/lldb/source/Plugins/Process/elf-core/ProcessElfCore.cpp --- a/lldb/source/Plugins/Process/elf-core/ProcessElfCore.cpp +++ b/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() { diff --git a/lldb/test/API/functionalities/postmortem/elf-core/TestLinuxCore.py b/lldb/test/API/functionalities/postmortem/elf-core/TestLinuxCore.py --- a/lldb/test/API/functionalities/postmortem/elf-core/TestLinuxCore.py +++ b/lldb/test/API/functionalities/postmortem/elf-core/TestLinuxCore.py @@ -155,6 +155,24 @@ 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_read_memory(self): + """Test that we are able to read as many bytes as available""" + target = self.dbg.CreateTarget("linux-x86_64.out") + process = target.LoadCore("linux-x86_64.core") + self.assertTrue(process, PROCESS_IS_VALID) + + error = lldb.SBError() + bytesread = process.ReadMemory(0x400ff0, 20, error) + + # read only 16 bytes without zero bytes filling + self.assertEqual(len(bytesread), 16) + self.dbg.DeleteTarget(target) + @skipIf(triple='^mips') @skipIfLLVMTargetMissing("X86") def test_FPR_SSE(self):