tile: include the syscall number in the backtrace
authorChris Metcalf <cmetcalf@ezchip.com>
Thu, 17 Dec 2015 20:01:38 +0000 (15:01 -0500)
committerChris Metcalf <cmetcalf@ezchip.com>
Mon, 18 Jan 2016 19:49:16 +0000 (14:49 -0500)
This information is easily available in the backtrace data and can
be helpful when trying to figure out the backtrace, particularly
if we're early in kernel entry or late in kernel exit.

Signed-off-by: Chris Metcalf <cmetcalf@ezchip.com>
arch/tile/kernel/stack.c

index 402b9c85a894dc4b10982462178dd08529bca49d..22bbbd3ff4a3a4e0ae11bf9dd5b293be8d033c17 100644 (file)
@@ -78,8 +78,7 @@ static bool read_memory_func(void *result, unsigned long address,
 /* Return a pt_regs pointer for a valid fault handler frame */
 static struct pt_regs *valid_fault_handler(struct KBacktraceIterator* kbt)
 {
-       const char *fault = NULL;  /* happy compiler */
-       char fault_buf[64];
+       char fault[64];
        unsigned long sp = kbt->it.sp;
        struct pt_regs *p;
 
@@ -90,14 +89,14 @@ static struct pt_regs *valid_fault_handler(struct KBacktraceIterator* kbt)
        if (!in_kernel_stack(kbt, sp + C_ABI_SAVE_AREA_SIZE + PTREGS_SIZE-1))
                return NULL;
        p = (struct pt_regs *)(sp + C_ABI_SAVE_AREA_SIZE);
-       if (p->faultnum == INT_SWINT_1 || p->faultnum == INT_SWINT_1_SIGRETURN)
-               fault = "syscall";
-       else {
-               if (kbt->verbose) {     /* else we aren't going to use it */
-                       snprintf(fault_buf, sizeof(fault_buf),
+       if (kbt->verbose) {     /* else we aren't going to use it */
+               if (p->faultnum == INT_SWINT_1 ||
+                   p->faultnum == INT_SWINT_1_SIGRETURN)
+                       snprintf(fault, sizeof(fault),
+                                "syscall %ld", p->regs[TREG_SYSCALL_NR]);
+               else
+                       snprintf(fault, sizeof(fault),
                                 "interrupt %ld", p->faultnum);
-                       fault = fault_buf;
-               }
        }
        if (EX1_PL(p->ex1) == KERNEL_PL &&
            __kernel_text_address(p->pc) &&