2008-10-10 02:19:41

by Anders Kaseorg

[permalink] [raw]
Subject: [PATCH] ftrace: Make ftrace_test_p6nop disassembler-friendly

Commit 4c3dc21b136f8cb4b72afee16c3ba7e961656c0b in tip introduced the
5-byte NOP ftrace_test_p6nop:
jmp . + 5
.byte 0x00, 0x00, 0x00
This is not friendly to disassemblers because an odd number of 0x00s
ends in the middle of an instruction boundary. This changes the 0x00s
to 1-byte NOPs (0x90).

Signed-off-by: Anders Kaseorg <[email protected]>

diff --git a/arch/x86/kernel/ftrace.c b/arch/x86/kernel/ftrace.c
index 222507e..d073d98 100644
--- a/arch/x86/kernel/ftrace.c
+++ b/arch/x86/kernel/ftrace.c
@@ -132,7 +132,9 @@ int __init ftrace_dyn_arch_init(void *data)
".section .text, \"ax\"\n"
"ftrace_test_jmp:"
"jmp ftrace_test_p6nop\n"
- ".byte 0x00,0x00,0x00\n" /* 2 byte jmp + 3 bytes */
+ "nop\n"
+ "nop\n"
+ "nop\n" /* 2 byte jmp + 3 bytes */
"ftrace_test_p6nop:"
P6_NOP5
"jmp 1f\n"
@@ -161,7 +163,7 @@ int __init ftrace_dyn_arch_init(void *data)
ftrace_nop = (unsigned long *)ftrace_test_nop5;
break;
case 2:
- pr_info("ftrace: converting mcount calls to jmp 1f\n");
+ pr_info("ftrace: converting mcount calls to jmp . + 5\n");
ftrace_nop = (unsigned long *)ftrace_test_jmp;
break;
}


2008-10-10 08:54:49

by Ingo Molnar

[permalink] [raw]
Subject: Re: [PATCH] ftrace: Make ftrace_test_p6nop disassembler-friendly


* Anders Kaseorg <[email protected]> wrote:

> Commit 4c3dc21b136f8cb4b72afee16c3ba7e961656c0b in tip introduced the
> 5-byte NOP ftrace_test_p6nop:
> jmp . + 5
> .byte 0x00, 0x00, 0x00
> This is not friendly to disassemblers because an odd number of 0x00s
> ends in the middle of an instruction boundary. This changes the 0x00s
> to 1-byte NOPs (0x90).
>
> Signed-off-by: Anders Kaseorg <[email protected]>

applied to tip/tracing/ftrace, good spotting Anders!

Steve, any objections?

Ingo

2008-10-10 13:27:47

by Steven Rostedt

[permalink] [raw]
Subject: Re: [PATCH] ftrace: Make ftrace_test_p6nop disassembler-friendly


On Fri, 10 Oct 2008, Ingo Molnar wrote:

>
> * Anders Kaseorg <[email protected]> wrote:
>
> > Commit 4c3dc21b136f8cb4b72afee16c3ba7e961656c0b in tip introduced the
> > 5-byte NOP ftrace_test_p6nop:
> > jmp . + 5
> > .byte 0x00, 0x00, 0x00
> > This is not friendly to disassemblers because an odd number of 0x00s
> > ends in the middle of an instruction boundary. This changes the 0x00s
> > to 1-byte NOPs (0x90).
> >
> > Signed-off-by: Anders Kaseorg <[email protected]>
>
> applied to tip/tracing/ftrace, good spotting Anders!
>
> Steve, any objections?

Nope, it's fine with me.

Acked-by: Steven Rostedt <[email protected]>

2008-10-10 16:13:19

by H. Peter Anvin

[permalink] [raw]
Subject: Re: [PATCH] ftrace: Make ftrace_test_p6nop disassembler-friendly

Steven Rostedt wrote:
> On Fri, 10 Oct 2008, Ingo Molnar wrote:
>
>> * Anders Kaseorg <[email protected]> wrote:
>>
>>> Commit 4c3dc21b136f8cb4b72afee16c3ba7e961656c0b in tip introduced the
>>> 5-byte NOP ftrace_test_p6nop:
>>> jmp . + 5
>>> .byte 0x00, 0x00, 0x00
>>> This is not friendly to disassemblers because an odd number of 0x00s
>>> ends in the middle of an instruction boundary. This changes the 0x00s
>>> to 1-byte NOPs (0x90).
>>>
>>> Signed-off-by: Anders Kaseorg <[email protected]>
>> applied to tip/tracing/ftrace, good spotting Anders!
>>
>> Steve, any objections?
>
> Nope, it's fine with me.
>
> Acked-by: Steven Rostedt <[email protected]>
>

The (semi-)amusing thing is that it should never, ever, get there.
66 66 66 66 90 is used over this, which should always work.

-hpa

2008-10-10 16:57:02

by Steven Rostedt

[permalink] [raw]
Subject: Re: [PATCH] ftrace: Make ftrace_test_p6nop disassembler-friendly


On Fri, 10 Oct 2008, H. Peter Anvin wrote:
>
> The (semi-)amusing thing is that it should never, ever, get there.
> 66 66 66 66 90 is used over this, which should always work.

Yeah, that was me being overly paranoid ;-) Which is not always a bad
thing.

-- Steve