* [PATCH] x86: small unifications of address printing
@ 2008-07-01 15:52 Vegard Nossum
2008-07-01 18:29 ` Andi Kleen
2008-07-01 20:26 ` Ingo Molnar
0 siblings, 2 replies; 6+ messages in thread
From: Vegard Nossum @ 2008-07-01 15:52 UTC (permalink / raw)
To: linux-kernel; +Cc: Ingo Molnar
(resend to lkml)
From: Vegard Nossum <vegard.nossum@gmail.com>
Date: Tue, 1 Jul 2008 14:51:08 +0200
Subject: [PATCH] x86: small unifications of address printing
'man 3 printf' tells me that %p should be printed as if by %#x, but
this is not true for the kernel, which does not use the '0x' prefix
for the %p conversion specifier.
A small cast to (void *) is also prettier than #ifdef/#else/#endif.
Signed-off-by: Vegard Nossum <vegard.nossum@gmail.com>
---
arch/x86/mm/fault.c | 16 ++++------------
1 files changed, 4 insertions(+), 12 deletions(-)
diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c
index cd0ea9d..179c159 100644
--- a/arch/x86/mm/fault.c
+++ b/arch/x86/mm/fault.c
@@ -409,11 +409,7 @@ static void show_fault_oops(struct pt_regs *regs, unsigned long error_code,
printk(KERN_CONT "NULL pointer dereference");
else
printk(KERN_CONT "paging request");
-#ifdef CONFIG_X86_32
- printk(KERN_CONT " at %08lx\n", address);
-#else
- printk(KERN_CONT " at %016lx\n", address);
-#endif
+ printk(KERN_CONT " at %p\n", (void *) address);
printk(KERN_ALERT "IP:");
printk_address(regs->ip, 1);
dump_pagetable(address);
@@ -830,14 +826,10 @@ bad_area_nosemaphore:
if (show_unhandled_signals && unhandled_signal(tsk, SIGSEGV) &&
printk_ratelimit()) {
printk(
-#ifdef CONFIG_X86_32
- "%s%s[%d]: segfault at %lx ip %08lx sp %08lx error %lx",
-#else
- "%s%s[%d]: segfault at %lx ip %lx sp %lx error %lx",
-#endif
+ "%s%s[%d]: segfault at %lx ip %p sp %p error %lx",
task_pid_nr(tsk) > 1 ? KERN_INFO : KERN_EMERG,
- tsk->comm, task_pid_nr(tsk), address, regs->ip,
- regs->sp, error_code);
+ tsk->comm, task_pid_nr(tsk), address,
+ (void *) regs->ip, (void *) regs->sp, error_code);
print_vma_addr(" in ", regs->ip);
printk("\n");
}
--
1.5.4.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH] x86: small unifications of address printing
2008-07-01 15:52 [PATCH] x86: small unifications of address printing Vegard Nossum
@ 2008-07-01 18:29 ` Andi Kleen
2008-07-01 18:46 ` Vegard Nossum
2008-07-01 20:26 ` Ingo Molnar
1 sibling, 1 reply; 6+ messages in thread
From: Andi Kleen @ 2008-07-01 18:29 UTC (permalink / raw)
To: Vegard Nossum; +Cc: linux-kernel
Vegard Nossum <vegard.nossum@gmail.com> writes:
> 'man 3 printf' tells me that %p should be printed as if by %#x, but
> this is not true for the kernel, which does not use the '0x' prefix
> for the %p conversion specifier.
Problem is that %p will not pad to 8/16 digits. Addresses are traditionally
padded.
-Andi
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] x86: small unifications of address printing
2008-07-01 18:29 ` Andi Kleen
@ 2008-07-01 18:46 ` Vegard Nossum
2008-07-01 18:58 ` Andi Kleen
0 siblings, 1 reply; 6+ messages in thread
From: Vegard Nossum @ 2008-07-01 18:46 UTC (permalink / raw)
To: Andi Kleen; +Cc: linux-kernel
On Tue, Jul 1, 2008 at 8:29 PM, Andi Kleen <andi@firstfloor.org> wrote:
> Vegard Nossum <vegard.nossum@gmail.com> writes:
>
>> 'man 3 printf' tells me that %p should be printed as if by %#x, but
>> this is not true for the kernel, which does not use the '0x' prefix
>> for the %p conversion specifier.
>
> Problem is that %p will not pad to 8/16 digits. Addresses are traditionally
> padded.
Yes, it will, and correctly too:
case 'p':
flags |= SMALL;
if (field_width == -1) {
field_width = 2*sizeof(void *);
flags |= ZEROPAD;
}
Or did I read this code wrong? field_width is initialized to -1 by
default unless overridden. The SMALL flag means lowercase hexadecimal
digits.
Vegard
--
"The animistic metaphor of the bug that maliciously sneaked in while
the programmer was not looking is intellectually dishonest as it
disguises that the error is the programmer's own creation."
-- E. W. Dijkstra, EWD1036
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] x86: small unifications of address printing
2008-07-01 18:46 ` Vegard Nossum
@ 2008-07-01 18:58 ` Andi Kleen
2008-07-01 19:12 ` Vegard Nossum
0 siblings, 1 reply; 6+ messages in thread
From: Andi Kleen @ 2008-07-01 18:58 UTC (permalink / raw)
To: Vegard Nossum; +Cc: linux-kernel
> Yes, it will, and correctly too:
>
> case 'p':
> flags |= SMALL;
> if (field_width == -1) {
> field_width = 2*sizeof(void *);
> flags |= ZEROPAD;
> }
>
> Or did I read this code wrong? field_width is initialized to -1 by
> default unless overridden. The SMALL flag means lowercase hexadecimal
> digits.
You're right. The kernel differs from user space/traditional behaviour
in this regard.
-Andi
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] x86: small unifications of address printing
2008-07-01 18:58 ` Andi Kleen
@ 2008-07-01 19:12 ` Vegard Nossum
0 siblings, 0 replies; 6+ messages in thread
From: Vegard Nossum @ 2008-07-01 19:12 UTC (permalink / raw)
To: Andi Kleen; +Cc: linux-kernel
On Tue, Jul 1, 2008 at 8:58 PM, Andi Kleen <andi@firstfloor.org> wrote:
>
>> Yes, it will, and correctly too:
>>
>> case 'p':
>> flags |= SMALL;
>> if (field_width == -1) {
>> field_width = 2*sizeof(void *);
>> flags |= ZEROPAD;
>> }
>>
>> Or did I read this code wrong? field_width is initialized to -1 by
>> default unless overridden. The SMALL flag means lowercase hexadecimal
>> digits.
>
> You're right. The kernel differs from user space/traditional behaviour
> in this regard.
...in this regard _too_ ;-)
I just ran a short test with glibc, and I'm surprised to see that this
implementation is not zero-padding the number.
The C99 standard has this to say:
"The argument shall be a pointer to void. The value of the pointer is
converted to a sequence of printing characters, in an implementation-defined
manner."
so I suppose it's quite alright after all.
Thanks for looking.
Vegard
--
"The animistic metaphor of the bug that maliciously sneaked in while
the programmer was not looking is intellectually dishonest as it
disguises that the error is the programmer's own creation."
-- E. W. Dijkstra, EWD1036
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] x86: small unifications of address printing
2008-07-01 15:52 [PATCH] x86: small unifications of address printing Vegard Nossum
2008-07-01 18:29 ` Andi Kleen
@ 2008-07-01 20:26 ` Ingo Molnar
1 sibling, 0 replies; 6+ messages in thread
From: Ingo Molnar @ 2008-07-01 20:26 UTC (permalink / raw)
To: Vegard Nossum; +Cc: linux-kernel
* Vegard Nossum <vegard.nossum@gmail.com> wrote:
> (resend to lkml)
>
> From: Vegard Nossum <vegard.nossum@gmail.com>
> Date: Tue, 1 Jul 2008 14:51:08 +0200
> Subject: [PATCH] x86: small unifications of address printing
>
> 'man 3 printf' tells me that %p should be printed as if by %#x, but
> this is not true for the kernel, which does not use the '0x' prefix
> for the %p conversion specifier.
>
> A small cast to (void *) is also prettier than #ifdef/#else/#endif.
applied to tip/x86/debug - thanks Vegard.
Ingo
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2008-07-01 20:27 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-07-01 15:52 [PATCH] x86: small unifications of address printing Vegard Nossum
2008-07-01 18:29 ` Andi Kleen
2008-07-01 18:46 ` Vegard Nossum
2008-07-01 18:58 ` Andi Kleen
2008-07-01 19:12 ` Vegard Nossum
2008-07-01 20:26 ` Ingo Molnar
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox