All of lore.kernel.org
 help / color / mirror / Atom feed
From: Don Slutz <dslutz@verizon.com>
To: xen-devel@lists.xen.org
Cc: Ian Campbell <ian.campbell@citrix.com>,
	Stefano Stabellini <stefano.stabellini@eu.citrix.com>,
	George Dunlap <george.dunlap@eu.citrix.com>,
	Ian Jackson <ian.jackson@eu.citrix.com>,
	Don Slutz <dslutz@verizon.com>, Jan Beulich <JBeulich@suse.com>
Subject: [PATCH v3 05/16] xenctx: Add command line options -b and -l
Date: Mon, 11 Nov 2013 13:15:11 -0500	[thread overview]
Message-ID: <1384193722-2916-6-git-send-email-dslutz@terremark.com> (raw)
In-Reply-To: <1384193722-2916-1-git-send-email-dslutz@terremark.com>

From: Don Slutz <dslutz@verizon.com>

  -b <bytes>, --bytes-per-line <bytes>
                    change the number of bytes per line output for Stack.
                    note: rounded to native size (4 or 8 bytes).
  -l <lines>, --lines <lines>
                    change the number of lines output for Stack.

Signed-off-by: Don Slutz <dslutz@verizon.com>
---
 tools/xentrace/xenctx.c | 62 +++++++++++++++++++++++++++++++++++++++----------
 1 file changed, 50 insertions(+), 12 deletions(-)

diff --git a/tools/xentrace/xenctx.c b/tools/xentrace/xenctx.c
index 038536b..62ba94c 100644
--- a/tools/xentrace/xenctx.c
+++ b/tools/xentrace/xenctx.c
@@ -36,6 +36,8 @@ static struct xenctx {
     int stack_trace;
     int disp_all;
     int two_pages;
+    int bytes_per_line;
+    int lines;
     int all_vcpus;
     int self_paused;
     xc_dominfo_t dominfo;
@@ -62,6 +64,8 @@ typedef uint64_t guest_word_t;
 #define FMT_64B_WORD "%016lx"
 #endif
 
+#define MAX_BYTES_PER_LINE 128
+
 struct symbol {
     guest_word_t address;
     char *name;
@@ -649,25 +653,30 @@ static int print_stack(vcpu_guest_context_any_t *ctx, int vcpu, int width)
     guest_word_t *p;
     int i;
 
+    if (width)
+        xenctx.bytes_per_line = ((xenctx.bytes_per_line + width - 1) / width) * width;
     stack_limit = ((stack_pointer(ctx) + XC_PAGE_SIZE)
                    & ~((guest_word_t) XC_PAGE_SIZE - 1));
     if (xenctx.two_pages)
         stack_limit += XC_PAGE_SIZE;
     printf("\n");
-    printf("Stack:\n");
-    for (i=1; i<5 && stack < stack_limit; i++) {
-        while(stack < stack_limit && stack < stack_pointer(ctx) + i*32) {
-            p = map_page(ctx, vcpu, stack);
-            if (!p)
-                return -1;
-            word = read_stack_word(p, width);
-            printf(" ");
-            print_stack_word(word, width);
-            stack += width;
+    if (xenctx.lines) {
+        printf("Stack:\n");
+        for (i = 1; i < xenctx.lines + 1 && stack < stack_limit; i++) {
+            while(stack < stack_limit &&
+                  stack < stack_pointer(ctx) + i * xenctx.bytes_per_line) {
+                p = map_page(ctx, vcpu, stack);
+                if (!p)
+                    return -1;
+                word = read_stack_word(p, width);
+                printf(" ");
+                print_stack_word(word, width);
+                stack += width;
+            }
+            printf("\n");
         }
         printf("\n");
     }
-    printf("\n");
 
     if(xenctx.stack_trace)
         printf("Stack Trace:\n");
@@ -827,19 +836,26 @@ static void usage(void)
     printf("  -a, --all          display more registers\n");
     printf("  -C, --all-vcpus    print info for all vcpus\n");
     printf("  -2, --two-pages    assume the kernel was compiled with 8KiB stacks.\n");
+    printf("  -b <bytes>, --bytes-per-line <bytes>\n");
+    printf("                     change the number of bytes per line output for Stack.\n");
+    printf("                     note: rounded to native size (4 or 8 bytes).\n");
+    printf("  -l <lines>, --lines <lines>\n");
+    printf("                     change the number of lines output for Stack.\n");
 }
 
 int main(int argc, char **argv)
 {
     int ch;
     int ret;
-    static const char *sopts = "fs:hak:SC2";
+    static const char *sopts = "fs:hak:SC2b:l:";
     static const struct option lopts[] = {
         {"stack-trace", 0, NULL, 'S'},
         {"symbol-table", 1, NULL, 's'},
         {"frame-pointers", 0, NULL, 'f'},
         {"kernel-start", 1, NULL, 'k'},
         {"two-pages", 0, NULL, '2'},
+        {"bytes-per-line", 1, NULL, 'b'},
+        {"lines", 1, NULL, 'l'},
         {"all", 0, NULL, 'a'},
         {"all-vcpus", 0, NULL, 'C'},
         {"help", 0, NULL, 'h'},
@@ -849,6 +865,9 @@ int main(int argc, char **argv)
 
     int vcpu = 0;
 
+    xenctx.bytes_per_line = 32;
+    xenctx.lines = 5;
+
     while ((ch = getopt_long(argc, argv, sopts, lopts, NULL)) != -1) {
         switch(ch) {
         case 'f':
@@ -866,6 +885,25 @@ int main(int argc, char **argv)
         case '2':
             xenctx.two_pages = 1;
             break;
+        case 'b':
+            xenctx.bytes_per_line = strtol(optarg, NULL, 0);
+            if (xenctx.bytes_per_line < 4 ||
+                xenctx.bytes_per_line > MAX_BYTES_PER_LINE) {
+                fprintf(stderr,
+                        "%s: Unsupported value for --bytes-per-line. Needs to be 4 <= <bytes> <= %d\n",
+                        argv[0], MAX_BYTES_PER_LINE);
+                exit(-1);
+            }
+            break;
+        case 'l':
+            xenctx.lines = strtol(optarg, NULL, 0);
+            if (xenctx.lines < 0) {
+                fprintf(stderr,
+                        "%s: Unsupported value for --lines. Needs to be >= 0\n",
+                        argv[0]);
+                exit(-1);
+            }
+            break;
         case 'C':
             xenctx.all_vcpus = 1;
             break;
-- 
1.8.4

  parent reply	other threads:[~2013-11-11 18:15 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-11-11 18:15 [PATCH v3 00/16] xenctx: Many changes Don Slutz
2013-11-11 18:15 ` [PATCH v3 01/16] xenctx: clean up usage output Don Slutz
2013-11-13 17:24   ` Don Slutz
2013-11-11 18:15 ` [PATCH v3 02/16] xenctx: Correct check for xc_interface_open failing (prevents SIGSEGV) Don Slutz
2013-11-14 12:04   ` Don Slutz
2013-11-11 18:15 ` [PATCH v3 03/16] xenctx: Clean up stack trace when hypercall_page not in symbol table Don Slutz
2013-11-11 18:15 ` [PATCH v3 04/16] xenctx: Add -2 (--two-pages) option to switch stack size to 8KiB Don Slutz
2013-11-12 15:31   ` Jan Beulich
2013-11-13 17:19     ` Don Slutz
2013-11-11 18:15 ` Don Slutz [this message]
2013-11-11 18:15 ` [PATCH v3 06/16] xenctx: Add command line option -D (--decode-as-ascii) Don Slutz
2013-11-11 18:15 ` [PATCH v3 07/16] xenctx: Add command line option -t (--tag-stack-dump) Don Slutz
2013-11-11 18:15 ` [PATCH v3 08/16] xenctx: Change print_symbol to do the space before Don Slutz
2013-11-11 18:15 ` [PATCH v3 09/16] xenctx: More info on failed to map page Don Slutz
2013-11-11 18:15 ` [PATCH v3 10/16] xenctx: Add command line option -T (--tag-call-trace) Don Slutz
2013-11-11 18:15 ` [PATCH v3 11/16] xenctx: Add -m <maddr> option to dump memory at maddr Don Slutz
2013-11-11 18:15 ` [PATCH v3 12/16] xenctx: Add -d <daddr> option to dump memory at daddr as a stack Don Slutz
2013-11-11 18:15 ` [PATCH v3 13/16] xenctx: change is_kernel_text() into kernel_addr() Don Slutz
2013-11-11 18:15 ` [PATCH v3 14/16] xenctx: Add convert of more registers to symbols Don Slutz
2013-11-11 18:15 ` [PATCH v3 15/16] xenctx: Add output of vcpu value and state for --all-vcpus Don Slutz
2013-11-11 18:15 ` [PATCH v3 16/16] MAINTAINERS: Add XENCTX maintainer Don Slutz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1384193722-2916-6-git-send-email-dslutz@terremark.com \
    --to=dslutz@verizon.com \
    --cc=JBeulich@suse.com \
    --cc=george.dunlap@eu.citrix.com \
    --cc=ian.campbell@citrix.com \
    --cc=ian.jackson@eu.citrix.com \
    --cc=stefano.stabellini@eu.citrix.com \
    --cc=xen-devel@lists.xen.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.