<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>