From 43339b1d1cac16ee3e3b556ff5ab3f031d03b5eb Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Fri, 24 Jun 2016 10:50:25 +0930 Subject: [PATCH] Limit objdump -S context lines Showing context lines is confusing in many cases, an obvious example being loops. * objdump.c (struct print_file_list): Add "max_printed". (try_print_file_open): Init new field. (show_line): Don't show 5 context lines when redisplaying source. --- binutils/ChangeLog | 6 ++++++ binutils/objdump.c | 13 +++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 201b4668eb..757aa988eb 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,9 @@ +2016-06-24 Alan Modra + + * objdump.c (struct print_file_list): Add "max_printed". + (try_print_file_open): Init new field. + (show_line): Don't show 5 context lines when redisplaying source. + 2016-06-22 Nick Clifton * testsuite/binutils-all/ar.exp: Skip tests for Alpha target. diff --git a/binutils/objdump.c b/binutils/objdump.c index 5b848014c7..174596e252 100644 --- a/binutils/objdump.c +++ b/binutils/objdump.c @@ -1135,6 +1135,7 @@ struct print_file_list const char **linemap; unsigned maxline; unsigned last_line; + unsigned max_printed; int first; }; @@ -1260,6 +1261,7 @@ try_print_file_open (const char *origname, const char *modname) p->linemap = index_file (p->map, p->mapsize, &p->maxline); p->last_line = 0; + p->max_printed = 0; p->filename = origname; p->modname = modname; p->next = print_files; @@ -1447,10 +1449,17 @@ show_line (bfd *abfd, asection *section, bfd_vma addr_offset) l = linenumber - SHOW_PRECEDING_CONTEXT_LINES; if (l >= linenumber) l = 1; - if (p->last_line >= l && p->last_line <= linenumber) - l = p->last_line + 1; + if (p->max_printed >= l) + { + if (p->max_printed < linenumber) + l = p->max_printed + 1; + else + l = linenumber; + } } dump_lines (p, l, linenumber); + if (p->max_printed < linenumber) + p->max_printed = linenumber; p->last_line = linenumber; p->first = 0; }