<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body>
<div>I'll check it out when I get back next week.</div><div><br></div><div>Dave</div><div><br></div><div><br></div><div><br></div><div><br></div><div id="composer_signature"><div style="font-size:85%;color:#575757">Sent from my Verizon Wireless 4G LTE smartphone</div></div><br><br>-------- Original message --------<br>From: Aaron Tomlin <atomlin@redhat.com> <br>Date: 07/27/2015 7:40 AM (GMT-08:00) <br>To: crash-utility@redhat.com <br>Subject: [Crash-utility] [PATCH] dis: Consolidate cmd_dis <br><br>Hi Dave,<br><br>No functionality change (hopefully). This patch is essentially a clean up<br>in preparation to introduce the "-f" option.<br><br>Please let me know your thoughts.<br><br>Signed-off-by: Aaron Tomlin <atomlin@redhat.com><br>---<br> kernel.c | 265 ++++++++++++++++++++++-----------------------------------------<br> 1 file changed, 91 insertions(+), 174 deletions(-)<br><br>diff --git a/kernel.c b/kernel.c<br>index 73d1983..3107014 100644<br>--- a/kernel.c<br>+++ b/kernel.c<br>@@ -1589,212 +1589,129 @@ cmd_dis(void)<br> return;<br> }<br> <br>- do_load_module_filter = module_symbol(req->addr, NULL, NULL, <br>- NULL, *gdb_output_radix);<br>+ req->command = GNU_RESOLVE_TEXT_ADDR;<br>+ gdb_interface(req);<br>+ req->flags &= ~GNU_COMMAND_FAILED;<br>+ if (reverse || req->flags & GNU_FUNCTION_ONLY) {<br>+ if (sp) {<br>+ savename = sp->name;<br>+ if ((sp = next_symbol(NULL, sp)))<br>+ req->addr2 = sp->value;<br>+ else<br>+ error(FATAL, <br>+ "unable to determine symbol after %s\n",<br>+ savename);<br>+ } else {<br>+ if ((sp = value_search(req->addr, NULL))<br>+ && (sp = next_symbol(NULL, sp)))<br>+ req->addr2 = sp->value; <br>+ else <br>+ error(FATAL, dis_err, req->addr);<br>+ }<br>+ }<br> <br>- if (!reverse) {<br>- req->command = GNU_RESOLVE_TEXT_ADDR;<br>- gdb_interface(req);<br>- if ((req->flags & GNU_COMMAND_FAILED) ||<br>- do_load_module_filter ||<br>- (req->flags & GNU_FUNCTION_ONLY)) {<br>- req->flags &= ~GNU_COMMAND_FAILED;<br>- if (sp) {<br>- savename = sp->name;<br>- if ((sp = next_symbol(NULL, sp)))<br>- req->addr2 = sp->value;<br>- else<br>- error(FATAL, <br>- "unable to determine symbol after %s\n",<br>- savename);<br>- } else {<br>- if ((sp = value_search(req->addr, NULL))<br>- && (sp = next_symbol(NULL, sp)))<br>- req->addr2 = sp->value; <br>- else <br>- error(FATAL, dis_err, req->addr);<br>- }<br>- }<br>+ if (reverse) {<br>+ revtarget = req->addr;<br>+ if ((sp = value_search(revtarget, NULL)) == NULL)<br>+ error(FATAL, "cannot resolve address: %lx\n", revtarget);<br> <br>- do_machdep_filter = machdep->dis_filter(req->addr, NULL, radix);<br>+ sprintf(buf1, "0x%lx", revtarget);<br>+ req->addr = sp->value;<br>+ } else<br> count = 0;<br>- open_tmpfile();<br>+ do_load_module_filter = module_symbol(req->addr, NULL, NULL, <br>+ NULL, *gdb_output_radix);<br>+<br>+ do_machdep_filter = machdep->dis_filter(req->addr, NULL, radix);<br>+ open_tmpfile();<br> #ifdef OLDWAY<br>- req->command = GNU_DISASSEMBLE;<br>- req->fp = pc->tmpfile;<br>- gdb_interface(req);<br>+ req->command = GNU_DISASSEMBLE;<br>+ req->fp = pc->tmpfile;<br>+ gdb_interface(req);<br> #else<br>- sprintf(buf1, "x/%ldi 0x%lx",<br>- count_entered && req->count ? req->count : <br>+ if (reverse)<br>+ sprintf(buf5, "x/%ldi 0x%lx",<br>+ (revtarget - req->addr) ? revtarget - req->addr : 1, <br>+ req->addr);<br>+ else<br>+ sprintf(buf5, "x/%ldi 0x%lx",<br>+ count_entered && req->count ? req->count : <br> req->flags & GNU_FUNCTION_ONLY ? <br> req->addr2 - req->addr : 1, <br> req->addr);<br>- gdb_pass_through(buf1, NULL, GNU_RETURN_ON_ERROR);<br>+ gdb_pass_through(buf5, NULL, GNU_RETURN_ON_ERROR);<br> #endif<br>- if (req->flags & GNU_COMMAND_FAILED) {<br>- close_tmpfile();<br>- error(FATAL, dis_err, req->addr);<br>- }<br>+ if (req->flags & GNU_COMMAND_FAILED) {<br>+ close_tmpfile();<br>+ error(FATAL, dis_err, req->addr);<br>+ }<br> <br>- rewind(pc->tmpfile);<br>- while (fgets(buf2, BUFSIZE, pc->tmpfile)) {<br>- if (STRNEQ(buf2, "Dump of") ||<br>- STRNEQ(buf2, "End of"))<br>- continue;<br>+ rewind(pc->tmpfile);<br>+ while (fgets(buf2, BUFSIZE, pc->tmpfile)) {<br>+ if (STRNEQ(buf2, "Dump of") ||<br>+ STRNEQ(buf2, "End of"))<br>+ continue;<br> <br>- strip_beginning_whitespace(buf2);<br>+ strip_beginning_whitespace(buf2);<br> <br>- if (do_load_module_filter)<br>- load_module_filter(buf2, LM_DIS_FILTER);<br>+ if (do_load_module_filter)<br>+ load_module_filter(buf2, LM_DIS_FILTER);<br> <br>- if (STRNEQ(buf2, "0x")) <br>- extract_hex(buf2, &curaddr, ':', TRUE);<br>+ if (STRNEQ(buf2, "0x")) <br>+ extract_hex(buf2, &curaddr, ':', TRUE);<br> <br>+ if (!reverse)<br> if ((req->flags & GNU_FUNCTION_ONLY) &&<br> (curaddr >= req->addr2))<br> break;<br> <br>- if (do_machdep_filter)<br>- machdep->dis_filter(curaddr, buf2, radix);<br>-<br>- if (req->flags & GNU_FUNCTION_ONLY) {<br>- if (req->flags & <br>- GNU_PRINT_LINE_NUMBERS) {<br>- get_line_number(curaddr, buf3,<br>- FALSE);<br>- if (!STREQ(buf3, buf4)) {<br>- print_verbatim(<br>- pc->saved_fp, buf3);<br>- print_verbatim(<br>- pc->saved_fp, "\n");<br>- strcpy(buf4, buf3);<br>- }<br>- }<br>-<br>- print_verbatim(pc->saved_fp, buf2); <br>- continue;<br>- } else {<br>- if (curaddr < req->addr) <br>- continue;<br>+ if (do_machdep_filter)<br>+ machdep->dis_filter(curaddr, buf2, radix);<br> <br>- if (req->flags & <br>- GNU_PRINT_LINE_NUMBERS) {<br>- get_line_number(curaddr, buf3, <br>- FALSE);<br>- if (!STREQ(buf3, buf4)) {<br>- print_verbatim(<br>- pc->saved_fp, buf3);<br>- print_verbatim(<br>- pc->saved_fp, "\n");<br>- strcpy(buf4, buf3);<br>- }<br>- } <br>-<br>- print_verbatim(pc->saved_fp, buf2);<br>-<br>- if (LASTCHAR(clean_line(buf2)) <br>- != ':') {<br>- if (++count == req->count)<br>- break;<br>- }<br>+ if (req->flags & GNU_PRINT_LINE_NUMBERS) {<br>+ get_line_number(curaddr, buf3,<br>+ FALSE);<br>+ if (!STREQ(buf3, buf4)) {<br>+ print_verbatim(<br>+ pc->saved_fp, buf3);<br>+ print_verbatim(<br>+ pc->saved_fp, "\n");<br>+ strcpy(buf4, buf3);<br> }<br>- }<br>- close_tmpfile();<br>- }<br>- }<br>- else if (bug_bytes_entered)<br>- return;<br>- else cmd_usage(pc->curcmd, SYNOPSIS);<br>-<br>- if (!reverse) {<br>- FREEBUF(req->buf);<br>- FREEBUF(req);<br>- return;<br>- }<br>-<br>- revtarget = req->addr;<br>- if ((sp = value_search(revtarget, NULL)) == NULL)<br>- error(FATAL, "cannot resolve address: %lx\n", revtarget);<br>-<br>- sprintf(buf1, "0x%lx", revtarget);<br>-<br>- open_tmpfile();<br>-<br>- req->addr = sp->value;<br>- req->flags |= GNU_FUNCTION_ONLY;<br>- req->command = GNU_RESOLVE_TEXT_ADDR;<br>- gdb_interface(req);<br>- req->flags &= ~GNU_COMMAND_FAILED;<br>- savename = sp->name;<br>- if ((sp = next_symbol(NULL, sp)))<br>- req->addr2 = sp->value;<br>- else {<br>- close_tmpfile();<br>- error(FATAL, "unable to determine symbol after %s\n", savename);<br>- }<br>-<br>- do_machdep_filter = machdep->dis_filter(req->addr, NULL, radix);<br>-#ifdef OLDWAY<br>- req->command = GNU_DISASSEMBLE;<br>- req->fp = pc->tmpfile;<br>- gdb_interface(req);<br>-#else<br>- sprintf(buf5, "x/%ldi 0x%lx",<br>- (revtarget - req->addr) ? revtarget - req->addr : 1, <br>- req->addr);<br>- gdb_pass_through(buf5, NULL, GNU_RETURN_ON_ERROR);<br>-#endif<br>- if (req->flags & GNU_COMMAND_FAILED) {<br>- close_tmpfile();<br>- error(FATAL, dis_err, req->addr);<br>- }<br>-<br>- rewind(pc->tmpfile);<br>- while (fgets(buf2, BUFSIZE, pc->tmpfile)) {<br>- if (STRNEQ(buf2, "Dump of") || STRNEQ(buf2, "End of"))<br>- continue;<br>+ }<br> <br>- strip_beginning_whitespace(buf2);<br>+ print_verbatim(pc->saved_fp, buf2); <br>+ if (reverse) {<br>+ if (STRNEQ(buf2, buf1)) {<br>+ if (LASTCHAR(clean_line(buf2)) != ':') <br>+ break;<br> <br>- if (do_load_module_filter)<br>- load_module_filter(buf2, LM_DIS_FILTER);<br>+ ret = fgets(buf2, BUFSIZE, pc->tmpfile);<br> <br>- if (STRNEQ(buf2, "0x"))<br>- extract_hex(buf2, &curaddr, ':', TRUE);<br>+ if (do_load_module_filter)<br>+ load_module_filter(buf2, LM_DIS_FILTER);<br> <br>- if (do_machdep_filter)<br>- machdep->dis_filter(curaddr, buf2, radix);<br>+ if (do_machdep_filter) <br>+ machdep->dis_filter(curaddr, buf2, radix);<br> <br>- if (req->flags & GNU_PRINT_LINE_NUMBERS) {<br>- get_line_number(curaddr, buf3, FALSE);<br>- if (!STREQ(buf3, buf4)) {<br>- print_verbatim(pc->saved_fp, buf3);<br>- print_verbatim(pc->saved_fp, "\n");<br>- strcpy(buf4, buf3);<br>+ print_verbatim(pc->saved_fp, buf2);<br>+ break;<br>+ }<br> }<br>- }<br> <br>- print_verbatim(pc->saved_fp, buf2);<br>- if (STRNEQ(buf2, buf1)) {<br>- if (LASTCHAR(clean_line(buf2)) != ':') <br>- break;<br>-<br>- ret = fgets(buf2, BUFSIZE, pc->tmpfile);<br>-<br>- if (do_load_module_filter)<br>- load_module_filter(buf2, LM_DIS_FILTER);<br>-<br>- if (do_machdep_filter) <br>- machdep->dis_filter(curaddr, buf2, radix);<br>-<br>- print_verbatim(pc->saved_fp, buf2);<br>- break;<br>+ if (count_entered && LASTCHAR(clean_line(buf2)) != ':')<br>+ if (++count == req->count)<br>+ break;<br> }<br>+ close_tmpfile();<br> }<br>+ else if (bug_bytes_entered)<br>+ return;<br>+ else cmd_usage(pc->curcmd, SYNOPSIS);<br> <br>- close_tmpfile();<br> FREEBUF(req->buf);<br> FREEBUF(req);<br>+ return;<br> }<br> <br> /*<br>-- <br>2.4.3<br><br>--<br>Crash-utility mailing list<br>Crash-utility@redhat.com<br>https://www.redhat.com/mailman/listinfo/crash-utility<br><br></body></html>