Re: [PATCH v2 04/10] powerpc/traps: Use REG_FMT in show_signal_msg()
From: Michael Ellerman <mpe@ellerman.id.au>
Date: 2018-07-31 09:32:40
Also in:
lkml
Murilo Opsfelder Araujo [off-list ref] writes:
On Mon, Jul 30, 2018 at 06:30:47PM +0200, LEROY Christophe wrote:quoted
Murilo Opsfelder Araujo [off-list ref] a =C3=A9crit=C2=A0:quoted
On Fri, Jul 27, 2018 at 06:40:23PM +0200, LEROY Christophe wrote:quoted
Murilo Opsfelder Araujo [off-list ref] a =C3=A9crit=C2=A0:quoted
Simplify the message format by using REG_FMT as the register forma=
t. This
quoted
quoted
quoted
quoted
avoids having two different formats and avoids checking for MSR_64=
BIT.
quoted
quoted
quoted
Are you sure it is what we want ?Yes.quoted
Won't it change the behaviour for a 32 bits app running on a 64bits =
kernel ?
quoted
quoted
In fact, this changes how many zeroes are prefixed when displaying the registers (%016lx vs. %08lx format). For example, 32-bits userspace, 64-bits ke=
rnel:
quoted
Indeed that's what I suspected. What is the real benefit of this change ? Why not keep the current format for 32bits userspace ? All those leading zeroes are pointless to me.One of the benefits is simplifying the code by removing some checks. Ano=
ther is
deduplicating almost identical format strings in favor of a unified one. After reading Joe's comment [1], %px seems to be the format we're looking=
for.
An extract from Documentation/core-api/printk-formats.rst: "%px is functionally equivalent to %lx (or %lu). %px is preferred becau=
se it
is more uniquely grep'able." So I guess we don't need to worry about the format (%016lx vs. %08lx), le=
t's
just use %px, as per the guideline.
I don't think I like %px. It makes the format string cleaner, but it means we have to cast everything to void * which is ugly as heck. I actually don't think the leading zeroes are helpful at all in the signal message, ie. we should just use %lx there. They are useful in show_regs() because we want everything to line up. So I think I'll drop patch 3 and use 0x%lx in show_signal_msg(), meaning we end up with, eg: [ 73.414535] segv[3759]: segfault (11) at 0x0 nip 0x10000420 lr 0xfe618= 54 code 0x1 in segv[10000000+10000] [ 73.414641] segv[3759]: code: 4e800421 80010014 38210010 7c0803a6 4bff= ff30 9421ffd0 93e1002c 7c3f0b78 [ 73.414665] segv[3759]: code: 39200000 913f001c 813f001c 39400001 <914= 90000> 39200000 7d234b78 397f0030 I'll do that unless anyone screams loudly, because it would be nice to get this into 4.19. cheers