@@ -215,6 +215,7 @@ dwarf_find_line(dwarf_module *dwarf, Dwarf_Addr addr, struct dwarf_line_info *in
215215 Dwarf_Error error = 0 ;
216216 std::string symbol_name;
217217 unsigned int offset_addr;
218+ std::string result_file;
218219
219220 Dwarf_Debug dbg = dwarf->dbg ;
220221
@@ -261,16 +262,15 @@ dwarf_find_line(dwarf_module *dwarf, Dwarf_Addr addr, struct dwarf_line_info *in
261262 goto no_srclines;
262263 }
263264
264- Dwarf_Unsigned lineno, plineno;
265+ Dwarf_Unsigned lineno, plineno, result_lineno ;
265266 Dwarf_Addr lineaddr, plineaddr;
266267 char *file, *pfile;
267268 plineaddr = ~0ULL ;
268- plineno = lineno = 0 ;
269+ plineno = lineno = result_lineno = 0 ;
269270 pfile = file = nullptr ;
270271 Dwarf_Signed i;
271272
272- i = 0 ;
273- while (i < linecount) {
273+ for (i = 0 ; i < linecount; ++i) {
274274 if (dwarf_lineaddr (linebuf[i], &lineaddr, &error) != DW_DLV_OK) {
275275 OutputDebug (" MGWHELP: dwarf_lineaddr failed - %s\n " , dwarf_errmsg (error));
276276 break ;
@@ -300,11 +300,11 @@ dwarf_find_line(dwarf_module *dwarf, Dwarf_Addr addr, struct dwarf_line_info *in
300300
301301 if (addr > plineaddr && addr < lineaddr) {
302302 // Lines are past the address
303- lineno = plineno;
304- file = pfile;
303+ result_lineno = plineno;
304+ if (pfile)
305+ result_file = pfile;
305306 pfile = nullptr ;
306307 result = true ;
307- break ;
308308 }
309309
310310 if (dwarf_lineno (linebuf[i], &lineno, &error) != DW_DLV_OK) {
@@ -318,6 +318,9 @@ dwarf_find_line(dwarf_module *dwarf, Dwarf_Addr addr, struct dwarf_line_info *in
318318
319319 if (addr == lineaddr) {
320320 // Exact match
321+ result_lineno = lineno;
322+ if (file)
323+ result_file = file;
321324 result = true ;
322325 break ;
323326 }
@@ -329,12 +332,11 @@ dwarf_find_line(dwarf_module *dwarf, Dwarf_Addr addr, struct dwarf_line_info *in
329332 }
330333 pfile = file;
331334 file = NULL ;
332- ++i;
333335 }
334336
335- if (result && file ) {
336- info->filename = file ;
337- info->line = lineno ;
337+ if (result) {
338+ info->filename = result_file ;
339+ info->line = result_lineno ;
338340 info->offset_addr = offset_addr;
339341 }
340342 if (file) {
0 commit comments