Make hexdump only print the # bytes; add pahexdump; make syscall_table visible
authorRonald G. Minnich <rminnich@google.com>
Tue, 25 Feb 2014 17:50:05 +0000 (09:50 -0800)
committerRonald G. Minnich <rminnich@google.com>
Tue, 25 Feb 2014 17:51:28 +0000 (09:51 -0800)
hexdump would print too much; fix that.
pahexdump uses a physical address.
For VMs we need to make the syscall_table visible.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
kern/include/kdebug.h
kern/include/syscall.h
kern/src/hexdump.c
kern/src/syscall.c

index 907aaf6..f9590b2 100644 (file)
@@ -28,4 +28,5 @@ void __print_func_exit(const char *func, const char *file);
 #define print_func_entry() __print_func_entry(__FUNCTION__, __FILE__)
 #define print_func_exit() __print_func_exit(__FUNCTION__, __FILE__)
 void hexdump(void *v, int length);
+void pahexdump(uintptr_t pa, int length);
 #endif /* ROS_KERN_KDEBUG_H */
index 2b6f533..f4be19a 100644 (file)
@@ -38,7 +38,8 @@ struct sys_table_entry {
        syscall_t call;
        char *name;
 };
-const static struct sys_table_entry syscall_table[];
+extern const struct sys_table_entry syscall_table[];
+extern const int max_syscall;
 /* Syscall invocation */
 void prep_syscalls(struct proc *p, struct syscall *sysc, unsigned int nr_calls);
 void run_local_syscall(struct syscall *sysc);
index 0fa1918..fa94f2e 100644 (file)
@@ -42,7 +42,7 @@ void hexdump(void *v, int length)
                int j;
 
                all_zero++;
-               for (j = 0; j < 16; j++) {
+               for (j = 0; (j < 16) && (i + j < length); j++) {
                        if (m[i + j] != 0) {
                                all_zero = 0;
                                break;
@@ -62,3 +62,10 @@ void hexdump(void *v, int length)
                }
        }
 }
+
+/* easier in monitor */
+void pahexdump(uintptr_t pa, int len)
+{
+       void *v = KADDR(pa);
+       hexdump(v, len);
+}
index 4e19113..459198a 100644 (file)
@@ -1734,7 +1734,7 @@ static int sys_fd2path(struct proc *p, int fd, void *u_buf, size_t len)
 
 /************** Syscall Invokation **************/
 
-const static struct sys_table_entry syscall_table[] = {
+const struct sys_table_entry syscall_table[] = {
        [SYS_null] = {(syscall_t)sys_null, "null"},
        [SYS_block] = {(syscall_t)sys_block, "block"},
        [SYS_cache_buster] = {(syscall_t)sys_cache_buster, "buster"},
@@ -1804,7 +1804,7 @@ const static struct sys_table_entry syscall_table[] = {
        [SYS_fd2path] ={(syscall_t)sys_fd2path, "fd2path"},
 
 };
-
+const int max_syscall = sizeof(syscall_table)/sizeof(syscall_table[0]);
 /* Executes the given syscall.
  *
  * Note tf is passed in, which points to the tf of the context on the kernel
@@ -1818,7 +1818,7 @@ intreg_t syscall(struct proc *p, uintreg_t sc_num, uintreg_t a0, uintreg_t a1,
 {
        intreg_t ret = -1;
        ERRSTACK(1);
-       const int max_syscall = sizeof(syscall_table)/sizeof(syscall_table[0]);
+
 
        uint32_t coreid, vcoreid;
        if (systrace_flags & SYSTRACE_ON) {