Author: Tatyana Krasnukha Date: 2020-07-29T21:53:18+03:00 New Revision: d5c1f686e34fdd9ed8ec9b7a195799baf492e854
URL: https://github.com/llvm/llvm-project/commit/d5c1f686e34fdd9ed8ec9b7a195799baf492e854 DIFF: https://github.com/llvm/llvm-project/commit/d5c1f686e34fdd9ed8ec9b7a195799baf492e854.diff LOG: [lldb/BreakpointSite] Handle all ways of control flow Added: Modified: lldb/source/Breakpoint/BreakpointSite.cpp Removed: ################################################################################ diff --git a/lldb/source/Breakpoint/BreakpointSite.cpp b/lldb/source/Breakpoint/BreakpointSite.cpp index bdcabd7cce5e..faa7e4c261e7 100644 --- a/lldb/source/Breakpoint/BreakpointSite.cpp +++ b/lldb/source/Breakpoint/BreakpointSite.cpp @@ -170,36 +170,39 @@ bool BreakpointSite::IntersectsRange(lldb::addr_t addr, size_t size, // The function should be called only for software breakpoints. lldbassert(GetType() == Type::eSoftware); - if (m_byte_size > 0) { - const lldb::addr_t bp_end_addr = m_addr + m_byte_size; - const lldb::addr_t end_addr = addr + size; - // Is the breakpoint end address before the passed in start address? - if (bp_end_addr <= addr) - return false; - // Is the breakpoint start address after passed in end address? - if (end_addr <= m_addr) - return false; - if (intersect_addr || intersect_size || opcode_offset) { - if (m_addr < addr) { - if (intersect_addr) - *intersect_addr = addr; - if (intersect_size) - *intersect_size = - std::min<lldb::addr_t>(bp_end_addr, end_addr) - addr; - if (opcode_offset) - *opcode_offset = addr - m_addr; - } else { - if (intersect_addr) - *intersect_addr = m_addr; - if (intersect_size) - *intersect_size = - std::min<lldb::addr_t>(bp_end_addr, end_addr) - m_addr; - if (opcode_offset) - *opcode_offset = 0; - } + if (m_byte_size == 0) + return false; + + const lldb::addr_t bp_end_addr = m_addr + m_byte_size; + const lldb::addr_t end_addr = addr + size; + // Is the breakpoint end address before the passed in start address? + if (bp_end_addr <= addr) + return false; + + // Is the breakpoint start address after passed in end address? + if (end_addr <= m_addr) + return false; + + if (intersect_addr || intersect_size || opcode_offset) { + if (m_addr < addr) { + if (intersect_addr) + *intersect_addr = addr; + if (intersect_size) + *intersect_size = + std::min<lldb::addr_t>(bp_end_addr, end_addr) - addr; + if (opcode_offset) + *opcode_offset = addr - m_addr; + } else { + if (intersect_addr) + *intersect_addr = m_addr; + if (intersect_size) + *intersect_size = + std::min<lldb::addr_t>(bp_end_addr, end_addr) - m_addr; + if (opcode_offset) + *opcode_offset = 0; } - return true; } + return true; } size_t _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits