Linux Archive

Linux Archive (http://www.linux-archive.org/)
-   Crash Utility (http://www.linux-archive.org/crash-utility/)
-   -   s390x: Print userspace PSW and registers for active tasks (http://www.linux-archive.org/crash-utility/660004-s390x-print-userspace-psw-registers-active-tasks.html)

Dave Anderson 04-26-2012 06:02 PM

s390x: Print userspace PSW and registers for active tasks
 
----- Original Message -----
> Hi Dave,
>
> Currently when we find a userspace pt_regs at the beginning of the stack,
> we print nothing. With this patch the userspace PSW and general purpose
> registers are printed.
>
> With this change for the user it is clearer now that the task has
> been interrupted while running in userspace.
>
> Example: External interrupt while in userspace
>
> Before change:
>
> crash> bt -a
> ...
> #1 [176327e08] arch_send_call_function_ipi_mask at 115d80
> #2 [176327e38] do_extint at 10dd82
> #3 [176327eb0] ext_skip at 63e344
>
> After change:
>
> crash> bt -a
> ...
> #1 [176327e08] arch_send_call_function_ipi_mask at 115d80
> #2 [176327e38] do_extint at 10dd82
> #3 [176327eb0] ext_skip at 63e344
> PSW: 0705e00180000000 0000000080000a16 (userspace)
> GPRS: 0000000000000001 000003ff00647213 000003fffd800000 0000000003710001
> 0000000080000afc 000003fffff77e58 0000000080000bb0 000003fffff781c0
> 00000000800007bc 0000000000000000 0000000080000b44 000003fffff77e58
> 000003fffd7c6000 000003fffd777020 0000000080000b02 000003fffff77e58
>
> Michael

Looks good -- queued for crash-6.0.6.

Thanks,
Dave

> ---
> s390x.c | 20 +++++++++++++-------
> 1 file changed, 13 insertions(+), 7 deletions(-)
>
> --- a/s390x.c
> +++ b/s390x.c
> @@ -978,12 +978,16 @@ static void print_ptregs(struct bt_info
> return;
>
> fprintf(fp, " PSW: %016lx %016lx ", psw_flags, psw_addr);
> - sym = closest_symbol(psw_addr);
> - offs = psw_addr - closest_symbol_value(psw_addr);
> - if (module_symbol(psw_addr, NULL, &lm, NULL, 0))
> - fprintf(fp, "(%s+%ld [%s])
", sym, offs, lm->mod_name);
> - else
> - fprintf(fp, "(%s+%ld)
", sym, offs);
> + if (psw_flags & S390X_PSW_MASK_PSTATE) {
> + fprintf(fp, "(user space)
");
> + } else {
> + sym = closest_symbol(psw_addr);
> + offs = psw_addr - closest_symbol_value(psw_addr);
> + if (module_symbol(psw_addr, NULL, &lm, NULL, 0))
> + fprintf(fp, "(%s+%ld [%s])
", sym, offs, lm->mod_name);
> + else
> + fprintf(fp, "(%s+%ld)
", sym, offs);
> + }
>
> addr = sp + MEMBER_OFFSET("pt_regs", "gprs");
> for (i = 0; i < 16; i++) {
> @@ -1039,8 +1043,10 @@ static unsigned long show_trace(struct b
> return sp;
> /* Check for user PSW */
> reg = readmem_ul(sp + MEMBER_OFFSET("pt_regs", "psw"));
> - if (reg & S390X_PSW_MASK_PSTATE)
> + if (reg & S390X_PSW_MASK_PSTATE) {
> + print_ptregs(bt, sp);
> return sp;
> + }
> /* Get new backchain from r15 */
> reg = readmem_ul(sp + MEMBER_OFFSET("pt_regs", "gprs") +
> 15 * sizeof(long));
>

--
Crash-utility mailing list
Crash-utility@redhat.com
https://www.redhat.com/mailman/listinfo/crash-utility


All times are GMT. The time now is 04:34 PM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.