From e5b2245d685a38979d3260e0358c19c9216dc521 Mon Sep 17 00:00:00 2001 From: Jim Ingham Date: Wed, 25 Apr 2012 19:48:30 +0000 Subject: [PATCH] Make sure the end of the first line is still within the function, and if not, don't push the prologue past it. rdar://problem/11271074 llvm-svn: 155579 --- lldb/source/Symbol/Function.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lldb/source/Symbol/Function.cpp b/lldb/source/Symbol/Function.cpp index 1fddd18..e1afb92 100644 --- a/lldb/source/Symbol/Function.cpp +++ b/lldb/source/Symbol/Function.cpp @@ -564,7 +564,12 @@ Function::GetPrologueByteSize () // of the function. const addr_t func_start_file_addr = m_range.GetBaseAddress().GetFileAddress(); const addr_t line_entry_end_file_addr = line_entry.range.GetBaseAddress().GetFileAddress() + line_entry.range.GetByteSize(); - if (line_entry_end_file_addr > func_start_file_addr) + // Watch out for the case where the end of the first line is at or past the end of the function, in that + // case, set the prologue byte size to 0. This happens, for instance, with a function that is one + // instruction long... + if (!GetAddressRange().ContainsFileAddress(line_entry_end_file_addr)) + m_prologue_byte_size = 0; + else if (line_entry_end_file_addr > func_start_file_addr) m_prologue_byte_size = line_entry_end_file_addr - func_start_file_addr; } } -- 2.7.4