public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [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