Skip to content

Commit 992a456

Browse files
oltolmjrfonseca
authored andcommitted
fix line numbers
1 parent 616ab1c commit 992a456

File tree

1 file changed

+13
-11
lines changed

1 file changed

+13
-11
lines changed

src/mgwhelp/dwarf_find.cpp

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)