aboutsummaryrefslogtreecommitdiffstats
path: root/arch/tile/kernel
diff options
context:
space:
mode:
authorChris Metcalf <cmetcalf@ezchip.com>2015-12-17 15:01:38 -0500
committerChris Metcalf <cmetcalf@ezchip.com>2016-01-18 14:49:16 -0500
commit5ac65abd48b6d3c62ec17dc4c28830513dd605e0 (patch)
treeb9c5e1ff8b8fa460f41b408d379d8a10eda135a7 /arch/tile/kernel
parent7fa129ccb92c982ee8947d7fe004d7fd4f0691b9 (diff)
tile: include the syscall number in the backtrace
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>
Diffstat (limited to 'arch/tile/kernel')
-rw-r--r--arch/tile/kernel/stack.c17
1 files changed, 8 insertions, 9 deletions
diff --git a/arch/tile/kernel/stack.c b/arch/tile/kernel/stack.c
index 402b9c85a894..22bbbd3ff4a3 100644
--- a/arch/tile/kernel/stack.c
+++ b/arch/tile/kernel/stack.c
@@ -78,8 +78,7 @@ static bool read_memory_func(void *result, unsigned long address,
78/* Return a pt_regs pointer for a valid fault handler frame */ 78/* Return a pt_regs pointer for a valid fault handler frame */
79static struct pt_regs *valid_fault_handler(struct KBacktraceIterator* kbt) 79static struct pt_regs *valid_fault_handler(struct KBacktraceIterator* kbt)
80{ 80{
81 const char *fault = NULL; /* happy compiler */ 81 char fault[64];
82 char fault_buf[64];
83 unsigned long sp = kbt->it.sp; 82 unsigned long sp = kbt->it.sp;
84 struct pt_regs *p; 83 struct pt_regs *p;
85 84
@@ -90,14 +89,14 @@ static struct pt_regs *valid_fault_handler(struct KBacktraceIterator* kbt)
90 if (!in_kernel_stack(kbt, sp + C_ABI_SAVE_AREA_SIZE + PTREGS_SIZE-1)) 89 if (!in_kernel_stack(kbt, sp + C_ABI_SAVE_AREA_SIZE + PTREGS_SIZE-1))
91 return NULL; 90 return NULL;
92 p = (struct pt_regs *)(sp + C_ABI_SAVE_AREA_SIZE); 91 p = (struct pt_regs *)(sp + C_ABI_SAVE_AREA_SIZE);
93 if (p->faultnum == INT_SWINT_1 || p->faultnum == INT_SWINT_1_SIGRETURN) 92 if (kbt->verbose) { /* else we aren't going to use it */
94 fault = "syscall"; 93 if (p->faultnum == INT_SWINT_1 ||
95 else { 94 p->faultnum == INT_SWINT_1_SIGRETURN)
96 if (kbt->verbose) { /* else we aren't going to use it */ 95 snprintf(fault, sizeof(fault),
97 snprintf(fault_buf, sizeof(fault_buf), 96 "syscall %ld", p->regs[TREG_SYSCALL_NR]);
97 else
98 snprintf(fault, sizeof(fault),
98 "interrupt %ld", p->faultnum); 99 "interrupt %ld", p->faultnum);
99 fault = fault_buf;
100 }
101 } 100 }
102 if (EX1_PL(p->ex1) == KERNEL_PL && 101 if (EX1_PL(p->ex1) == KERNEL_PL &&
103 __kernel_text_address(p->pc) && 102 __kernel_text_address(p->pc) &&