Re: [RFT PATCH -next ] [BUGFIX] kprobes: Fix "Failed to find blacklist" error on ia64 and ppc64

2014-05-26 Thread Masami Hiramatsu
(2014/05/26 20:25), Suzuki K. Poulose wrote:
> On 05/07/2014 05:25 PM, Masami Hiramatsu wrote:
>> On ia64 and ppc64, the function pointer does not point the
>> entry address of the function, but the address of function
>> discriptor (which contains the entry address and misc
>> data.) Since the kprobes passes the function pointer stored
>> by NOKPROBE_SYMBOL() to kallsyms_lookup_size_offset() for
>> initalizing its blacklist, it fails and reports many errors
>> as below.
>>
>>   Failed to find blacklist 000101316830
>>   Failed to find blacklist 0001013000f0a000
>>   Failed to find blacklist 000101315f70a000
>>   Failed to find blacklist 000101324c80a000
>>   Failed to find blacklist 0001013063f0a000
>>   Failed to find blacklist 000101327800a000
>>   Failed to find blacklist 0001013277f0a000
>>   Failed to find blacklist 000101315a70a000
>>   Failed to find blacklist 0001013277e0a000
>>   Failed to find blacklist 000101305a20a000
>>   Failed to find blacklist 0001013277d0a000
>>   Failed to find blacklist 00010130bdc0a000
>>   Failed to find blacklist 00010130dc20a000
>>   Failed to find blacklist 000101309a00a000
>>   Failed to find blacklist 0001013277c0a000
>>   Failed to find blacklist 0001013277b0a000
>>   Failed to find blacklist 0001013277a0a000
>>   Failed to find blacklist 000101327790a000
>>   Failed to find blacklist 000101303140a000
>>   Failed to find blacklist 0001013a3280a000
>>
>> To fix this bug, this introduces function_entry() macro to
>> retrieve the entry address from the given function pointer,
>> and uses it in NOKPROBE_SYMBOL().
>>
>>
>> Signed-off-by: Masami Hiramatsu 
>> Reported-by: Tony Luck 
>> Cc: Tony Luck 
>> Cc: Fenghua Yu 
>> Cc: Benjamin Herrenschmidt 
>> Cc: Paul Mackerras 
>> Cc: Ananth N Mavinakayanahalli 
>> Cc: Kevin Hao 
>> Cc: linux-i...@vger.kernel.org
>> Cc: linux-kernel@vger.kernel.org
>> Cc: linuxppc-...@lists.ozlabs.org
>> ---
>>  arch/ia64/include/asm/types.h|2 ++
>>  arch/powerpc/include/asm/types.h |   11 +++
>>  include/linux/kprobes.h  |3 ++-
>>  include/linux/types.h|4 
>>  4 files changed, 19 insertions(+), 1 deletion(-)
>>
>> diff --git a/arch/ia64/include/asm/types.h b/arch/ia64/include/asm/types.h
>> index 4c351b1..6ab7b6c 100644
>> --- a/arch/ia64/include/asm/types.h
>> +++ b/arch/ia64/include/asm/types.h
>> @@ -27,5 +27,7 @@ struct fnptr {
>>  unsigned long gp;
>>  };
>>  
>> +#define constant_function_entry(fn) (((struct fnptr *)(fn))->ip)
>> +
>>  #endif /* !__ASSEMBLY__ */
>>  #endif /* _ASM_IA64_TYPES_H */
>> diff --git a/arch/powerpc/include/asm/types.h 
>> b/arch/powerpc/include/asm/types.h
>> index bfb6ded..fd297b8 100644
>> --- a/arch/powerpc/include/asm/types.h
>> +++ b/arch/powerpc/include/asm/types.h
>> @@ -25,6 +25,17 @@ typedef struct {
>>  unsigned long env;
>>  } func_descr_t;
>>  
>> +#if defined(CONFIG_PPC64) && (!defined(_CALL_ELF) || _CALL_ELF == 1)
>> +/*
>> + * On PPC64 ABIv1 the function pointer actually points to the
>> + * function's descriptor. The first entry in the descriptor is the
>> + * address of the function text.
>> + */
>> +#define constant_function_entry(fn) (((func_descr_t *)(fn))->entry)
>> +#else
>> +#define constant_function_entry(fn) ((unsigned long)(fn))
>> +#endif
>> +
>>  #endif /* __ASSEMBLY__ */
>>  
>>  #endif /* _ASM_POWERPC_TYPES_H */
>> diff --git a/include/linux/kprobes.h b/include/linux/kprobes.h
>> index e059507..637eafe 100644
>> --- a/include/linux/kprobes.h
>> +++ b/include/linux/kprobes.h
>> @@ -40,6 +40,7 @@
>>  #include 
>>  #include 
>>  #include 
>> +#include 
>>  
>>  #ifdef CONFIG_KPROBES
>>  #include 
>> @@ -485,7 +486,7 @@ static inline int enable_jprobe(struct jprobe *jp)
>>  #define __NOKPROBE_SYMBOL(fname)\
>>  static unsigned long __used \
>>  __attribute__((section("_kprobe_blacklist")))   \
>> -_kbl_addr_##fname = (unsigned long)fname;
>> +_kbl_addr_##fname = constant_function_entry(fname);
>>  #define NOKPROBE_SYMBOL(fname)  __NOKPROBE_SYMBOL(fname)
> 
> 
> Throws up build errors for me :
> 
>   CC  kernel/notifier.o
> kernel/notifier.c:105:1: error: initializer element is not constant
>  NOKPROBE_SYMBOL(notifier_call_chain);
>  ^
> kernel/notifier.c:188:1: error: initializer element is not constant
>  NOKPROBE_SYMBOL(__atomic_notifier_call_chain);
>  ^
> kernel/notifier.c:196:1: error: initializer element is not constant
>  NOKPROBE_SYMBOL(atomic_notifier_call_chain);
>  ^
> kernel/notifier.c:546:1: error: initializer element is not constant
>  NOKPROBE_SYMBOL(notify_die);
>  ^
> make[1]: *** [kernel/notifier.o] Error 1
> make: *** [kernel] Error 2

Thanks for the test!

>> +#define constant_function_entry(fn) (((func_descr_t *)(fn))->entry)

Ah! right, This is not allowed for initialization...
I'll update it to deref pointer when it is used.

Thank you again!


> 
> Thanks
> Suzuki
> 
> 


-- 
Masami HIRAMATSU
Software Platform Research Dept. Linux 

Re: [RFT PATCH -next ] [BUGFIX] kprobes: Fix "Failed to find blacklist" error on ia64 and ppc64

2014-05-26 Thread Suzuki K. Poulose
On 05/07/2014 05:25 PM, Masami Hiramatsu wrote:
> On ia64 and ppc64, the function pointer does not point the
> entry address of the function, but the address of function
> discriptor (which contains the entry address and misc
> data.) Since the kprobes passes the function pointer stored
> by NOKPROBE_SYMBOL() to kallsyms_lookup_size_offset() for
> initalizing its blacklist, it fails and reports many errors
> as below.
> 
>   Failed to find blacklist 000101316830
>   Failed to find blacklist 0001013000f0a000
>   Failed to find blacklist 000101315f70a000
>   Failed to find blacklist 000101324c80a000
>   Failed to find blacklist 0001013063f0a000
>   Failed to find blacklist 000101327800a000
>   Failed to find blacklist 0001013277f0a000
>   Failed to find blacklist 000101315a70a000
>   Failed to find blacklist 0001013277e0a000
>   Failed to find blacklist 000101305a20a000
>   Failed to find blacklist 0001013277d0a000
>   Failed to find blacklist 00010130bdc0a000
>   Failed to find blacklist 00010130dc20a000
>   Failed to find blacklist 000101309a00a000
>   Failed to find blacklist 0001013277c0a000
>   Failed to find blacklist 0001013277b0a000
>   Failed to find blacklist 0001013277a0a000
>   Failed to find blacklist 000101327790a000
>   Failed to find blacklist 000101303140a000
>   Failed to find blacklist 0001013a3280a000
> 
> To fix this bug, this introduces function_entry() macro to
> retrieve the entry address from the given function pointer,
> and uses it in NOKPROBE_SYMBOL().
> 
> 
> Signed-off-by: Masami Hiramatsu 
> Reported-by: Tony Luck 
> Cc: Tony Luck 
> Cc: Fenghua Yu 
> Cc: Benjamin Herrenschmidt 
> Cc: Paul Mackerras 
> Cc: Ananth N Mavinakayanahalli 
> Cc: Kevin Hao 
> Cc: linux-i...@vger.kernel.org
> Cc: linux-kernel@vger.kernel.org
> Cc: linuxppc-...@lists.ozlabs.org
> ---
>  arch/ia64/include/asm/types.h|2 ++
>  arch/powerpc/include/asm/types.h |   11 +++
>  include/linux/kprobes.h  |3 ++-
>  include/linux/types.h|4 
>  4 files changed, 19 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/ia64/include/asm/types.h b/arch/ia64/include/asm/types.h
> index 4c351b1..6ab7b6c 100644
> --- a/arch/ia64/include/asm/types.h
> +++ b/arch/ia64/include/asm/types.h
> @@ -27,5 +27,7 @@ struct fnptr {
>   unsigned long gp;
>  };
>  
> +#define constant_function_entry(fn) (((struct fnptr *)(fn))->ip)
> +
>  #endif /* !__ASSEMBLY__ */
>  #endif /* _ASM_IA64_TYPES_H */
> diff --git a/arch/powerpc/include/asm/types.h 
> b/arch/powerpc/include/asm/types.h
> index bfb6ded..fd297b8 100644
> --- a/arch/powerpc/include/asm/types.h
> +++ b/arch/powerpc/include/asm/types.h
> @@ -25,6 +25,17 @@ typedef struct {
>   unsigned long env;
>  } func_descr_t;
>  
> +#if defined(CONFIG_PPC64) && (!defined(_CALL_ELF) || _CALL_ELF == 1)
> +/*
> + * On PPC64 ABIv1 the function pointer actually points to the
> + * function's descriptor. The first entry in the descriptor is the
> + * address of the function text.
> + */
> +#define constant_function_entry(fn)  (((func_descr_t *)(fn))->entry)
> +#else
> +#define constant_function_entry(fn)  ((unsigned long)(fn))
> +#endif
> +
>  #endif /* __ASSEMBLY__ */
>  
>  #endif /* _ASM_POWERPC_TYPES_H */
> diff --git a/include/linux/kprobes.h b/include/linux/kprobes.h
> index e059507..637eafe 100644
> --- a/include/linux/kprobes.h
> +++ b/include/linux/kprobes.h
> @@ -40,6 +40,7 @@
>  #include 
>  #include 
>  #include 
> +#include 
>  
>  #ifdef CONFIG_KPROBES
>  #include 
> @@ -485,7 +486,7 @@ static inline int enable_jprobe(struct jprobe *jp)
>  #define __NOKPROBE_SYMBOL(fname) \
>  static unsigned long __used  \
>   __attribute__((section("_kprobe_blacklist")))   \
> - _kbl_addr_##fname = (unsigned long)fname;
> + _kbl_addr_##fname = constant_function_entry(fname);
>  #define NOKPROBE_SYMBOL(fname)   __NOKPROBE_SYMBOL(fname)


Throws up build errors for me :

  CC  kernel/notifier.o
kernel/notifier.c:105:1: error: initializer element is not constant
 NOKPROBE_SYMBOL(notifier_call_chain);
 ^
kernel/notifier.c:188:1: error: initializer element is not constant
 NOKPROBE_SYMBOL(__atomic_notifier_call_chain);
 ^
kernel/notifier.c:196:1: error: initializer element is not constant
 NOKPROBE_SYMBOL(atomic_notifier_call_chain);
 ^
kernel/notifier.c:546:1: error: initializer element is not constant
 NOKPROBE_SYMBOL(notify_die);
 ^
make[1]: *** [kernel/notifier.o] Error 1
make: *** [kernel] Error 2

Thanks
Suzuki

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [RFT PATCH -next ] [BUGFIX] kprobes: Fix Failed to find blacklist error on ia64 and ppc64

2014-05-26 Thread Suzuki K. Poulose
On 05/07/2014 05:25 PM, Masami Hiramatsu wrote:
 On ia64 and ppc64, the function pointer does not point the
 entry address of the function, but the address of function
 discriptor (which contains the entry address and misc
 data.) Since the kprobes passes the function pointer stored
 by NOKPROBE_SYMBOL() to kallsyms_lookup_size_offset() for
 initalizing its blacklist, it fails and reports many errors
 as below.
 
   Failed to find blacklist 000101316830
   Failed to find blacklist 0001013000f0a000
   Failed to find blacklist 000101315f70a000
   Failed to find blacklist 000101324c80a000
   Failed to find blacklist 0001013063f0a000
   Failed to find blacklist 000101327800a000
   Failed to find blacklist 0001013277f0a000
   Failed to find blacklist 000101315a70a000
   Failed to find blacklist 0001013277e0a000
   Failed to find blacklist 000101305a20a000
   Failed to find blacklist 0001013277d0a000
   Failed to find blacklist 00010130bdc0a000
   Failed to find blacklist 00010130dc20a000
   Failed to find blacklist 000101309a00a000
   Failed to find blacklist 0001013277c0a000
   Failed to find blacklist 0001013277b0a000
   Failed to find blacklist 0001013277a0a000
   Failed to find blacklist 000101327790a000
   Failed to find blacklist 000101303140a000
   Failed to find blacklist 0001013a3280a000
 
 To fix this bug, this introduces function_entry() macro to
 retrieve the entry address from the given function pointer,
 and uses it in NOKPROBE_SYMBOL().
 
 
 Signed-off-by: Masami Hiramatsu masami.hiramatsu...@hitachi.com
 Reported-by: Tony Luck tony.l...@gmail.com
 Cc: Tony Luck tony.l...@intel.com
 Cc: Fenghua Yu fenghua...@intel.com
 Cc: Benjamin Herrenschmidt b...@kernel.crashing.org
 Cc: Paul Mackerras pau...@samba.org
 Cc: Ananth N Mavinakayanahalli ana...@in.ibm.com
 Cc: Kevin Hao haoke...@gmail.com
 Cc: linux-i...@vger.kernel.org
 Cc: linux-kernel@vger.kernel.org
 Cc: linuxppc-...@lists.ozlabs.org
 ---
  arch/ia64/include/asm/types.h|2 ++
  arch/powerpc/include/asm/types.h |   11 +++
  include/linux/kprobes.h  |3 ++-
  include/linux/types.h|4 
  4 files changed, 19 insertions(+), 1 deletion(-)
 
 diff --git a/arch/ia64/include/asm/types.h b/arch/ia64/include/asm/types.h
 index 4c351b1..6ab7b6c 100644
 --- a/arch/ia64/include/asm/types.h
 +++ b/arch/ia64/include/asm/types.h
 @@ -27,5 +27,7 @@ struct fnptr {
   unsigned long gp;
  };
  
 +#define constant_function_entry(fn) (((struct fnptr *)(fn))-ip)
 +
  #endif /* !__ASSEMBLY__ */
  #endif /* _ASM_IA64_TYPES_H */
 diff --git a/arch/powerpc/include/asm/types.h 
 b/arch/powerpc/include/asm/types.h
 index bfb6ded..fd297b8 100644
 --- a/arch/powerpc/include/asm/types.h
 +++ b/arch/powerpc/include/asm/types.h
 @@ -25,6 +25,17 @@ typedef struct {
   unsigned long env;
  } func_descr_t;
  
 +#if defined(CONFIG_PPC64)  (!defined(_CALL_ELF) || _CALL_ELF == 1)
 +/*
 + * On PPC64 ABIv1 the function pointer actually points to the
 + * function's descriptor. The first entry in the descriptor is the
 + * address of the function text.
 + */
 +#define constant_function_entry(fn)  (((func_descr_t *)(fn))-entry)
 +#else
 +#define constant_function_entry(fn)  ((unsigned long)(fn))
 +#endif
 +
  #endif /* __ASSEMBLY__ */
  
  #endif /* _ASM_POWERPC_TYPES_H */
 diff --git a/include/linux/kprobes.h b/include/linux/kprobes.h
 index e059507..637eafe 100644
 --- a/include/linux/kprobes.h
 +++ b/include/linux/kprobes.h
 @@ -40,6 +40,7 @@
  #include linux/rcupdate.h
  #include linux/mutex.h
  #include linux/ftrace.h
 +#include linux/types.h
  
  #ifdef CONFIG_KPROBES
  #include asm/kprobes.h
 @@ -485,7 +486,7 @@ static inline int enable_jprobe(struct jprobe *jp)
  #define __NOKPROBE_SYMBOL(fname) \
  static unsigned long __used  \
   __attribute__((section(_kprobe_blacklist)))   \
 - _kbl_addr_##fname = (unsigned long)fname;
 + _kbl_addr_##fname = constant_function_entry(fname);
  #define NOKPROBE_SYMBOL(fname)   __NOKPROBE_SYMBOL(fname)


Throws up build errors for me :

  CC  kernel/notifier.o
kernel/notifier.c:105:1: error: initializer element is not constant
 NOKPROBE_SYMBOL(notifier_call_chain);
 ^
kernel/notifier.c:188:1: error: initializer element is not constant
 NOKPROBE_SYMBOL(__atomic_notifier_call_chain);
 ^
kernel/notifier.c:196:1: error: initializer element is not constant
 NOKPROBE_SYMBOL(atomic_notifier_call_chain);
 ^
kernel/notifier.c:546:1: error: initializer element is not constant
 NOKPROBE_SYMBOL(notify_die);
 ^
make[1]: *** [kernel/notifier.o] Error 1
make: *** [kernel] Error 2

Thanks
Suzuki

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [RFT PATCH -next ] [BUGFIX] kprobes: Fix Failed to find blacklist error on ia64 and ppc64

2014-05-26 Thread Masami Hiramatsu
(2014/05/26 20:25), Suzuki K. Poulose wrote:
 On 05/07/2014 05:25 PM, Masami Hiramatsu wrote:
 On ia64 and ppc64, the function pointer does not point the
 entry address of the function, but the address of function
 discriptor (which contains the entry address and misc
 data.) Since the kprobes passes the function pointer stored
 by NOKPROBE_SYMBOL() to kallsyms_lookup_size_offset() for
 initalizing its blacklist, it fails and reports many errors
 as below.

   Failed to find blacklist 000101316830
   Failed to find blacklist 0001013000f0a000
   Failed to find blacklist 000101315f70a000
   Failed to find blacklist 000101324c80a000
   Failed to find blacklist 0001013063f0a000
   Failed to find blacklist 000101327800a000
   Failed to find blacklist 0001013277f0a000
   Failed to find blacklist 000101315a70a000
   Failed to find blacklist 0001013277e0a000
   Failed to find blacklist 000101305a20a000
   Failed to find blacklist 0001013277d0a000
   Failed to find blacklist 00010130bdc0a000
   Failed to find blacklist 00010130dc20a000
   Failed to find blacklist 000101309a00a000
   Failed to find blacklist 0001013277c0a000
   Failed to find blacklist 0001013277b0a000
   Failed to find blacklist 0001013277a0a000
   Failed to find blacklist 000101327790a000
   Failed to find blacklist 000101303140a000
   Failed to find blacklist 0001013a3280a000

 To fix this bug, this introduces function_entry() macro to
 retrieve the entry address from the given function pointer,
 and uses it in NOKPROBE_SYMBOL().


 Signed-off-by: Masami Hiramatsu masami.hiramatsu...@hitachi.com
 Reported-by: Tony Luck tony.l...@gmail.com
 Cc: Tony Luck tony.l...@intel.com
 Cc: Fenghua Yu fenghua...@intel.com
 Cc: Benjamin Herrenschmidt b...@kernel.crashing.org
 Cc: Paul Mackerras pau...@samba.org
 Cc: Ananth N Mavinakayanahalli ana...@in.ibm.com
 Cc: Kevin Hao haoke...@gmail.com
 Cc: linux-i...@vger.kernel.org
 Cc: linux-kernel@vger.kernel.org
 Cc: linuxppc-...@lists.ozlabs.org
 ---
  arch/ia64/include/asm/types.h|2 ++
  arch/powerpc/include/asm/types.h |   11 +++
  include/linux/kprobes.h  |3 ++-
  include/linux/types.h|4 
  4 files changed, 19 insertions(+), 1 deletion(-)

 diff --git a/arch/ia64/include/asm/types.h b/arch/ia64/include/asm/types.h
 index 4c351b1..6ab7b6c 100644
 --- a/arch/ia64/include/asm/types.h
 +++ b/arch/ia64/include/asm/types.h
 @@ -27,5 +27,7 @@ struct fnptr {
  unsigned long gp;
  };
  
 +#define constant_function_entry(fn) (((struct fnptr *)(fn))-ip)
 +
  #endif /* !__ASSEMBLY__ */
  #endif /* _ASM_IA64_TYPES_H */
 diff --git a/arch/powerpc/include/asm/types.h 
 b/arch/powerpc/include/asm/types.h
 index bfb6ded..fd297b8 100644
 --- a/arch/powerpc/include/asm/types.h
 +++ b/arch/powerpc/include/asm/types.h
 @@ -25,6 +25,17 @@ typedef struct {
  unsigned long env;
  } func_descr_t;
  
 +#if defined(CONFIG_PPC64)  (!defined(_CALL_ELF) || _CALL_ELF == 1)
 +/*
 + * On PPC64 ABIv1 the function pointer actually points to the
 + * function's descriptor. The first entry in the descriptor is the
 + * address of the function text.
 + */
 +#define constant_function_entry(fn) (((func_descr_t *)(fn))-entry)
 +#else
 +#define constant_function_entry(fn) ((unsigned long)(fn))
 +#endif
 +
  #endif /* __ASSEMBLY__ */
  
  #endif /* _ASM_POWERPC_TYPES_H */
 diff --git a/include/linux/kprobes.h b/include/linux/kprobes.h
 index e059507..637eafe 100644
 --- a/include/linux/kprobes.h
 +++ b/include/linux/kprobes.h
 @@ -40,6 +40,7 @@
  #include linux/rcupdate.h
  #include linux/mutex.h
  #include linux/ftrace.h
 +#include linux/types.h
  
  #ifdef CONFIG_KPROBES
  #include asm/kprobes.h
 @@ -485,7 +486,7 @@ static inline int enable_jprobe(struct jprobe *jp)
  #define __NOKPROBE_SYMBOL(fname)\
  static unsigned long __used \
  __attribute__((section(_kprobe_blacklist)))   \
 -_kbl_addr_##fname = (unsigned long)fname;
 +_kbl_addr_##fname = constant_function_entry(fname);
  #define NOKPROBE_SYMBOL(fname)  __NOKPROBE_SYMBOL(fname)
 
 
 Throws up build errors for me :
 
   CC  kernel/notifier.o
 kernel/notifier.c:105:1: error: initializer element is not constant
  NOKPROBE_SYMBOL(notifier_call_chain);
  ^
 kernel/notifier.c:188:1: error: initializer element is not constant
  NOKPROBE_SYMBOL(__atomic_notifier_call_chain);
  ^
 kernel/notifier.c:196:1: error: initializer element is not constant
  NOKPROBE_SYMBOL(atomic_notifier_call_chain);
  ^
 kernel/notifier.c:546:1: error: initializer element is not constant
  NOKPROBE_SYMBOL(notify_die);
  ^
 make[1]: *** [kernel/notifier.o] Error 1
 make: *** [kernel] Error 2

Thanks for the test!

 +#define constant_function_entry(fn) (((func_descr_t *)(fn))-entry)

Ah! right, This is not allowed for initialization...
I'll update it to deref pointer when it is used.

Thank you again!


 
 Thanks
 Suzuki
 
 


-- 
Masami HIRAMATSU
Software Platform Research Dept. Linux Technology 

Re: Re: [RFT PATCH -next ] [BUGFIX] kprobes: Fix "Failed to find blacklist" error on ia64 and ppc64

2014-05-14 Thread Masami Hiramatsu
(2014/05/07 20:59), Masami Hiramatsu wrote:
> Hi Tony, Benjamin and Paul,
> 
> I've tried to fix this bug, but since I don't have either ppc64 nor ia64,
> this patch is not tested on those archs. Please review and test it on
> those machines.

Ping?

I need your help since I don't have test environment.

Thank you,

> 
> Thank you,
> 
> (2014/05/07 20:55), Masami Hiramatsu wrote:
>> On ia64 and ppc64, the function pointer does not point the
>> entry address of the function, but the address of function
>> discriptor (which contains the entry address and misc
>> data.) Since the kprobes passes the function pointer stored
>> by NOKPROBE_SYMBOL() to kallsyms_lookup_size_offset() for
>> initalizing its blacklist, it fails and reports many errors
>> as below.
>>
>>   Failed to find blacklist 000101316830
>>   Failed to find blacklist 0001013000f0a000
>>   Failed to find blacklist 000101315f70a000
>>   Failed to find blacklist 000101324c80a000
>>   Failed to find blacklist 0001013063f0a000
>>   Failed to find blacklist 000101327800a000
>>   Failed to find blacklist 0001013277f0a000
>>   Failed to find blacklist 000101315a70a000
>>   Failed to find blacklist 0001013277e0a000
>>   Failed to find blacklist 000101305a20a000
>>   Failed to find blacklist 0001013277d0a000
>>   Failed to find blacklist 00010130bdc0a000
>>   Failed to find blacklist 00010130dc20a000
>>   Failed to find blacklist 000101309a00a000
>>   Failed to find blacklist 0001013277c0a000
>>   Failed to find blacklist 0001013277b0a000
>>   Failed to find blacklist 0001013277a0a000
>>   Failed to find blacklist 000101327790a000
>>   Failed to find blacklist 000101303140a000
>>   Failed to find blacklist 0001013a3280a000
>>
>> To fix this bug, this introduces function_entry() macro to
>> retrieve the entry address from the given function pointer,
>> and uses it in NOKPROBE_SYMBOL().
>>
>>
>> Signed-off-by: Masami Hiramatsu 
>> Reported-by: Tony Luck 
>> Cc: Tony Luck 
>> Cc: Fenghua Yu 
>> Cc: Benjamin Herrenschmidt 
>> Cc: Paul Mackerras 
>> Cc: Ananth N Mavinakayanahalli 
>> Cc: Kevin Hao 
>> Cc: linux-i...@vger.kernel.org
>> Cc: linux-kernel@vger.kernel.org
>> Cc: linuxppc-...@lists.ozlabs.org
>> ---
>>  arch/ia64/include/asm/types.h|2 ++
>>  arch/powerpc/include/asm/types.h |   11 +++
>>  include/linux/kprobes.h  |3 ++-
>>  include/linux/types.h|4 
>>  4 files changed, 19 insertions(+), 1 deletion(-)
>>
>> diff --git a/arch/ia64/include/asm/types.h b/arch/ia64/include/asm/types.h
>> index 4c351b1..6ab7b6c 100644
>> --- a/arch/ia64/include/asm/types.h
>> +++ b/arch/ia64/include/asm/types.h
>> @@ -27,5 +27,7 @@ struct fnptr {
>>  unsigned long gp;
>>  };
>>  
>> +#define constant_function_entry(fn) (((struct fnptr *)(fn))->ip)
>> +
>>  #endif /* !__ASSEMBLY__ */
>>  #endif /* _ASM_IA64_TYPES_H */
>> diff --git a/arch/powerpc/include/asm/types.h 
>> b/arch/powerpc/include/asm/types.h
>> index bfb6ded..fd297b8 100644
>> --- a/arch/powerpc/include/asm/types.h
>> +++ b/arch/powerpc/include/asm/types.h
>> @@ -25,6 +25,17 @@ typedef struct {
>>  unsigned long env;
>>  } func_descr_t;
>>  
>> +#if defined(CONFIG_PPC64) && (!defined(_CALL_ELF) || _CALL_ELF == 1)
>> +/*
>> + * On PPC64 ABIv1 the function pointer actually points to the
>> + * function's descriptor. The first entry in the descriptor is the
>> + * address of the function text.
>> + */
>> +#define constant_function_entry(fn) (((func_descr_t *)(fn))->entry)
>> +#else
>> +#define constant_function_entry(fn) ((unsigned long)(fn))
>> +#endif
>> +
>>  #endif /* __ASSEMBLY__ */
>>  
>>  #endif /* _ASM_POWERPC_TYPES_H */
>> diff --git a/include/linux/kprobes.h b/include/linux/kprobes.h
>> index e059507..637eafe 100644
>> --- a/include/linux/kprobes.h
>> +++ b/include/linux/kprobes.h
>> @@ -40,6 +40,7 @@
>>  #include 
>>  #include 
>>  #include 
>> +#include 
>>  
>>  #ifdef CONFIG_KPROBES
>>  #include 
>> @@ -485,7 +486,7 @@ static inline int enable_jprobe(struct jprobe *jp)
>>  #define __NOKPROBE_SYMBOL(fname)\
>>  static unsigned long __used \
>>  __attribute__((section("_kprobe_blacklist")))   \
>> -_kbl_addr_##fname = (unsigned long)fname;
>> +_kbl_addr_##fname = constant_function_entry(fname);
>>  #define NOKPROBE_SYMBOL(fname)  __NOKPROBE_SYMBOL(fname)
>>  #else
>>  #define NOKPROBE_SYMBOL(fname)
>> diff --git a/include/linux/types.h b/include/linux/types.h
>> index 4d118ba..78e2d7d 100644
>> --- a/include/linux/types.h
>> +++ b/include/linux/types.h
>> @@ -212,5 +212,9 @@ struct callback_head {
>>  };
>>  #define rcu_head callback_head
>>  
>> +#ifndef constant_function_entry
>> +#define constant_function_entry(fn) ((unsigned long)(fn))
>> +#endif
>> +
>>  #endif /*  __ASSEMBLY__ */
>>  #endif /* _LINUX_TYPES_H */
>>
>>
>>
> 
> 


-- 
Masami HIRAMATSU
Software Platform Research Dept. Linux Technology Research Center
Hitachi, Ltd., Yokohama Research Laboratory
E-mail: 

Re: Re: [RFT PATCH -next ] [BUGFIX] kprobes: Fix Failed to find blacklist error on ia64 and ppc64

2014-05-14 Thread Masami Hiramatsu
(2014/05/07 20:59), Masami Hiramatsu wrote:
 Hi Tony, Benjamin and Paul,
 
 I've tried to fix this bug, but since I don't have either ppc64 nor ia64,
 this patch is not tested on those archs. Please review and test it on
 those machines.

Ping?

I need your help since I don't have test environment.

Thank you,

 
 Thank you,
 
 (2014/05/07 20:55), Masami Hiramatsu wrote:
 On ia64 and ppc64, the function pointer does not point the
 entry address of the function, but the address of function
 discriptor (which contains the entry address and misc
 data.) Since the kprobes passes the function pointer stored
 by NOKPROBE_SYMBOL() to kallsyms_lookup_size_offset() for
 initalizing its blacklist, it fails and reports many errors
 as below.

   Failed to find blacklist 000101316830
   Failed to find blacklist 0001013000f0a000
   Failed to find blacklist 000101315f70a000
   Failed to find blacklist 000101324c80a000
   Failed to find blacklist 0001013063f0a000
   Failed to find blacklist 000101327800a000
   Failed to find blacklist 0001013277f0a000
   Failed to find blacklist 000101315a70a000
   Failed to find blacklist 0001013277e0a000
   Failed to find blacklist 000101305a20a000
   Failed to find blacklist 0001013277d0a000
   Failed to find blacklist 00010130bdc0a000
   Failed to find blacklist 00010130dc20a000
   Failed to find blacklist 000101309a00a000
   Failed to find blacklist 0001013277c0a000
   Failed to find blacklist 0001013277b0a000
   Failed to find blacklist 0001013277a0a000
   Failed to find blacklist 000101327790a000
   Failed to find blacklist 000101303140a000
   Failed to find blacklist 0001013a3280a000

 To fix this bug, this introduces function_entry() macro to
 retrieve the entry address from the given function pointer,
 and uses it in NOKPROBE_SYMBOL().


 Signed-off-by: Masami Hiramatsu masami.hiramatsu...@hitachi.com
 Reported-by: Tony Luck tony.l...@gmail.com
 Cc: Tony Luck tony.l...@intel.com
 Cc: Fenghua Yu fenghua...@intel.com
 Cc: Benjamin Herrenschmidt b...@kernel.crashing.org
 Cc: Paul Mackerras pau...@samba.org
 Cc: Ananth N Mavinakayanahalli ana...@in.ibm.com
 Cc: Kevin Hao haoke...@gmail.com
 Cc: linux-i...@vger.kernel.org
 Cc: linux-kernel@vger.kernel.org
 Cc: linuxppc-...@lists.ozlabs.org
 ---
  arch/ia64/include/asm/types.h|2 ++
  arch/powerpc/include/asm/types.h |   11 +++
  include/linux/kprobes.h  |3 ++-
  include/linux/types.h|4 
  4 files changed, 19 insertions(+), 1 deletion(-)

 diff --git a/arch/ia64/include/asm/types.h b/arch/ia64/include/asm/types.h
 index 4c351b1..6ab7b6c 100644
 --- a/arch/ia64/include/asm/types.h
 +++ b/arch/ia64/include/asm/types.h
 @@ -27,5 +27,7 @@ struct fnptr {
  unsigned long gp;
  };
  
 +#define constant_function_entry(fn) (((struct fnptr *)(fn))-ip)
 +
  #endif /* !__ASSEMBLY__ */
  #endif /* _ASM_IA64_TYPES_H */
 diff --git a/arch/powerpc/include/asm/types.h 
 b/arch/powerpc/include/asm/types.h
 index bfb6ded..fd297b8 100644
 --- a/arch/powerpc/include/asm/types.h
 +++ b/arch/powerpc/include/asm/types.h
 @@ -25,6 +25,17 @@ typedef struct {
  unsigned long env;
  } func_descr_t;
  
 +#if defined(CONFIG_PPC64)  (!defined(_CALL_ELF) || _CALL_ELF == 1)
 +/*
 + * On PPC64 ABIv1 the function pointer actually points to the
 + * function's descriptor. The first entry in the descriptor is the
 + * address of the function text.
 + */
 +#define constant_function_entry(fn) (((func_descr_t *)(fn))-entry)
 +#else
 +#define constant_function_entry(fn) ((unsigned long)(fn))
 +#endif
 +
  #endif /* __ASSEMBLY__ */
  
  #endif /* _ASM_POWERPC_TYPES_H */
 diff --git a/include/linux/kprobes.h b/include/linux/kprobes.h
 index e059507..637eafe 100644
 --- a/include/linux/kprobes.h
 +++ b/include/linux/kprobes.h
 @@ -40,6 +40,7 @@
  #include linux/rcupdate.h
  #include linux/mutex.h
  #include linux/ftrace.h
 +#include linux/types.h
  
  #ifdef CONFIG_KPROBES
  #include asm/kprobes.h
 @@ -485,7 +486,7 @@ static inline int enable_jprobe(struct jprobe *jp)
  #define __NOKPROBE_SYMBOL(fname)\
  static unsigned long __used \
  __attribute__((section(_kprobe_blacklist)))   \
 -_kbl_addr_##fname = (unsigned long)fname;
 +_kbl_addr_##fname = constant_function_entry(fname);
  #define NOKPROBE_SYMBOL(fname)  __NOKPROBE_SYMBOL(fname)
  #else
  #define NOKPROBE_SYMBOL(fname)
 diff --git a/include/linux/types.h b/include/linux/types.h
 index 4d118ba..78e2d7d 100644
 --- a/include/linux/types.h
 +++ b/include/linux/types.h
 @@ -212,5 +212,9 @@ struct callback_head {
  };
  #define rcu_head callback_head
  
 +#ifndef constant_function_entry
 +#define constant_function_entry(fn) ((unsigned long)(fn))
 +#endif
 +
  #endif /*  __ASSEMBLY__ */
  #endif /* _LINUX_TYPES_H */



 
 


-- 
Masami HIRAMATSU
Software Platform Research Dept. Linux Technology Research Center
Hitachi, Ltd., Yokohama Research Laboratory
E-mail: masami.hiramatsu...@hitachi.com


--
To 

Re: [RFT PATCH -next ] [BUGFIX] kprobes: Fix "Failed to find blacklist" error on ia64 and ppc64

2014-05-09 Thread Masami Hiramatsu
(2014/05/08 15:16), Ananth N Mavinakayanahalli wrote:
> On Thu, May 08, 2014 at 02:40:00PM +0900, Masami Hiramatsu wrote:
>> (2014/05/08 13:47), Ananth N Mavinakayanahalli wrote:
>>> On Wed, May 07, 2014 at 08:55:51PM +0900, Masami Hiramatsu wrote:
>>>
>>> ...
>>>
 +#if defined(CONFIG_PPC64) && (!defined(_CALL_ELF) || _CALL_ELF == 1)
 +/*
 + * On PPC64 ABIv1 the function pointer actually points to the
 + * function's descriptor. The first entry in the descriptor is the
 + * address of the function text.
 + */
 +#define constant_function_entry(fn)   (((func_descr_t *)(fn))->entry)
 +#else
 +#define constant_function_entry(fn)   ((unsigned long)(fn))
 +#endif
 +
  #endif /* __ASSEMBLY__ */
>>>
>>> Hi Masami,
>>>
>>> You could just use ppc_function_entry() instead.
>>
>> No, I think ppc_function_entry() has two problems (on the latest -next 
>> kernel)
>>
>> At first, that is an inlined functions which is not applied in build time.
>> Since the NOKPROBE_SYMBOL() is used outside of any functions as like as
>> EXPORT_SYMBOL(), we can only use preprocessed macros.
>> Next, on PPC64 ABI*v2*, ppc_function_entry() returns local function entry,
>> which seems global function entry + 2 insns. I'm not sure about 
>> implementation
>> of the kallsyms on PPC64 ABIv2, but I guess we need global function entry
>> for kallsyms.
> 
> ABIv2 does away with function descriptors and Anton fixed up that
> routine to handle the change (the +2 is an artefact of that).

Hmm, do you mean that the address +2 is the actual entry point?
I'd like to know which address is same as the address shown in /proc/kallsyms.

>> BTW, could you test this patch on the latest -next tree on PPC64 if possible?
> 
> I'll test it, but it may take a bit.

Thanks for your help!

> 
> Ananth
> 
> 


-- 
Masami HIRAMATSU
Software Platform Research Dept. Linux Technology Research Center
Hitachi, Ltd., Yokohama Research Laboratory
E-mail: masami.hiramatsu...@hitachi.com


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [RFT PATCH -next ] [BUGFIX] kprobes: Fix Failed to find blacklist error on ia64 and ppc64

2014-05-09 Thread Masami Hiramatsu
(2014/05/08 15:16), Ananth N Mavinakayanahalli wrote:
 On Thu, May 08, 2014 at 02:40:00PM +0900, Masami Hiramatsu wrote:
 (2014/05/08 13:47), Ananth N Mavinakayanahalli wrote:
 On Wed, May 07, 2014 at 08:55:51PM +0900, Masami Hiramatsu wrote:

 ...

 +#if defined(CONFIG_PPC64)  (!defined(_CALL_ELF) || _CALL_ELF == 1)
 +/*
 + * On PPC64 ABIv1 the function pointer actually points to the
 + * function's descriptor. The first entry in the descriptor is the
 + * address of the function text.
 + */
 +#define constant_function_entry(fn)   (((func_descr_t *)(fn))-entry)
 +#else
 +#define constant_function_entry(fn)   ((unsigned long)(fn))
 +#endif
 +
  #endif /* __ASSEMBLY__ */

 Hi Masami,

 You could just use ppc_function_entry() instead.

 No, I think ppc_function_entry() has two problems (on the latest -next 
 kernel)

 At first, that is an inlined functions which is not applied in build time.
 Since the NOKPROBE_SYMBOL() is used outside of any functions as like as
 EXPORT_SYMBOL(), we can only use preprocessed macros.
 Next, on PPC64 ABI*v2*, ppc_function_entry() returns local function entry,
 which seems global function entry + 2 insns. I'm not sure about 
 implementation
 of the kallsyms on PPC64 ABIv2, but I guess we need global function entry
 for kallsyms.
 
 ABIv2 does away with function descriptors and Anton fixed up that
 routine to handle the change (the +2 is an artefact of that).

Hmm, do you mean that the address +2 is the actual entry point?
I'd like to know which address is same as the address shown in /proc/kallsyms.

 BTW, could you test this patch on the latest -next tree on PPC64 if possible?
 
 I'll test it, but it may take a bit.

Thanks for your help!

 
 Ananth
 
 


-- 
Masami HIRAMATSU
Software Platform Research Dept. Linux Technology Research Center
Hitachi, Ltd., Yokohama Research Laboratory
E-mail: masami.hiramatsu...@hitachi.com


--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [RFT PATCH -next ] [BUGFIX] kprobes: Fix "Failed to find blacklist" error on ia64 and ppc64

2014-05-08 Thread Ananth N Mavinakayanahalli
On Thu, May 08, 2014 at 02:40:00PM +0900, Masami Hiramatsu wrote:
> (2014/05/08 13:47), Ananth N Mavinakayanahalli wrote:
> > On Wed, May 07, 2014 at 08:55:51PM +0900, Masami Hiramatsu wrote:
> > 
> > ...
> > 
> >> +#if defined(CONFIG_PPC64) && (!defined(_CALL_ELF) || _CALL_ELF == 1)
> >> +/*
> >> + * On PPC64 ABIv1 the function pointer actually points to the
> >> + * function's descriptor. The first entry in the descriptor is the
> >> + * address of the function text.
> >> + */
> >> +#define constant_function_entry(fn)   (((func_descr_t *)(fn))->entry)
> >> +#else
> >> +#define constant_function_entry(fn)   ((unsigned long)(fn))
> >> +#endif
> >> +
> >>  #endif /* __ASSEMBLY__ */
> > 
> > Hi Masami,
> > 
> > You could just use ppc_function_entry() instead.
> 
> No, I think ppc_function_entry() has two problems (on the latest -next kernel)
> 
> At first, that is an inlined functions which is not applied in build time.
> Since the NOKPROBE_SYMBOL() is used outside of any functions as like as
> EXPORT_SYMBOL(), we can only use preprocessed macros.
> Next, on PPC64 ABI*v2*, ppc_function_entry() returns local function entry,
> which seems global function entry + 2 insns. I'm not sure about implementation
> of the kallsyms on PPC64 ABIv2, but I guess we need global function entry
> for kallsyms.

ABIv2 does away with function descriptors and Anton fixed up that
routine to handle the change (the +2 is an artefact of that).

> BTW, could you test this patch on the latest -next tree on PPC64 if possible?

I'll test it, but it may take a bit.

Ananth

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [RFT PATCH -next ] [BUGFIX] kprobes: Fix Failed to find blacklist error on ia64 and ppc64

2014-05-08 Thread Ananth N Mavinakayanahalli
On Thu, May 08, 2014 at 02:40:00PM +0900, Masami Hiramatsu wrote:
 (2014/05/08 13:47), Ananth N Mavinakayanahalli wrote:
  On Wed, May 07, 2014 at 08:55:51PM +0900, Masami Hiramatsu wrote:
  
  ...
  
  +#if defined(CONFIG_PPC64)  (!defined(_CALL_ELF) || _CALL_ELF == 1)
  +/*
  + * On PPC64 ABIv1 the function pointer actually points to the
  + * function's descriptor. The first entry in the descriptor is the
  + * address of the function text.
  + */
  +#define constant_function_entry(fn)   (((func_descr_t *)(fn))-entry)
  +#else
  +#define constant_function_entry(fn)   ((unsigned long)(fn))
  +#endif
  +
   #endif /* __ASSEMBLY__ */
  
  Hi Masami,
  
  You could just use ppc_function_entry() instead.
 
 No, I think ppc_function_entry() has two problems (on the latest -next kernel)
 
 At first, that is an inlined functions which is not applied in build time.
 Since the NOKPROBE_SYMBOL() is used outside of any functions as like as
 EXPORT_SYMBOL(), we can only use preprocessed macros.
 Next, on PPC64 ABI*v2*, ppc_function_entry() returns local function entry,
 which seems global function entry + 2 insns. I'm not sure about implementation
 of the kallsyms on PPC64 ABIv2, but I guess we need global function entry
 for kallsyms.

ABIv2 does away with function descriptors and Anton fixed up that
routine to handle the change (the +2 is an artefact of that).

 BTW, could you test this patch on the latest -next tree on PPC64 if possible?

I'll test it, but it may take a bit.

Ananth

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [RFT PATCH -next ] [BUGFIX] kprobes: Fix "Failed to find blacklist" error on ia64 and ppc64

2014-05-07 Thread Masami Hiramatsu
(2014/05/08 13:47), Ananth N Mavinakayanahalli wrote:
> On Wed, May 07, 2014 at 08:55:51PM +0900, Masami Hiramatsu wrote:
> 
> ...
> 
>> +#if defined(CONFIG_PPC64) && (!defined(_CALL_ELF) || _CALL_ELF == 1)
>> +/*
>> + * On PPC64 ABIv1 the function pointer actually points to the
>> + * function's descriptor. The first entry in the descriptor is the
>> + * address of the function text.
>> + */
>> +#define constant_function_entry(fn) (((func_descr_t *)(fn))->entry)
>> +#else
>> +#define constant_function_entry(fn) ((unsigned long)(fn))
>> +#endif
>> +
>>  #endif /* __ASSEMBLY__ */
> 
> Hi Masami,
> 
> You could just use ppc_function_entry() instead.

No, I think ppc_function_entry() has two problems (on the latest -next kernel)

At first, that is an inlined functions which is not applied in build time.
Since the NOKPROBE_SYMBOL() is used outside of any functions as like as
EXPORT_SYMBOL(), we can only use preprocessed macros.
Next, on PPC64 ABI*v2*, ppc_function_entry() returns local function entry,
which seems global function entry + 2 insns. I'm not sure about implementation
of the kallsyms on PPC64 ABIv2, but I guess we need global function entry
for kallsyms.

BTW, could you test this patch on the latest -next tree on PPC64 if possible?

Thank you,

-- 
Masami HIRAMATSU
Software Platform Research Dept. Linux Technology Research Center
Hitachi, Ltd., Yokohama Research Laboratory
E-mail: masami.hiramatsu...@hitachi.com


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [RFT PATCH -next ] [BUGFIX] kprobes: Fix "Failed to find blacklist" error on ia64 and ppc64

2014-05-07 Thread Ananth N Mavinakayanahalli
On Wed, May 07, 2014 at 08:55:51PM +0900, Masami Hiramatsu wrote:

...

> +#if defined(CONFIG_PPC64) && (!defined(_CALL_ELF) || _CALL_ELF == 1)
> +/*
> + * On PPC64 ABIv1 the function pointer actually points to the
> + * function's descriptor. The first entry in the descriptor is the
> + * address of the function text.
> + */
> +#define constant_function_entry(fn)  (((func_descr_t *)(fn))->entry)
> +#else
> +#define constant_function_entry(fn)  ((unsigned long)(fn))
> +#endif
> +
>  #endif /* __ASSEMBLY__ */

Hi Masami,

You could just use ppc_function_entry() instead.

Ananth

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [RFT PATCH -next ] [BUGFIX] kprobes: Fix "Failed to find blacklist" error on ia64 and ppc64

2014-05-07 Thread Masami Hiramatsu
Hi Tony, Benjamin and Paul,

I've tried to fix this bug, but since I don't have either ppc64 nor ia64,
this patch is not tested on those archs. Please review and test it on
those machines.

Thank you,

(2014/05/07 20:55), Masami Hiramatsu wrote:
> On ia64 and ppc64, the function pointer does not point the
> entry address of the function, but the address of function
> discriptor (which contains the entry address and misc
> data.) Since the kprobes passes the function pointer stored
> by NOKPROBE_SYMBOL() to kallsyms_lookup_size_offset() for
> initalizing its blacklist, it fails and reports many errors
> as below.
> 
>   Failed to find blacklist 000101316830
>   Failed to find blacklist 0001013000f0a000
>   Failed to find blacklist 000101315f70a000
>   Failed to find blacklist 000101324c80a000
>   Failed to find blacklist 0001013063f0a000
>   Failed to find blacklist 000101327800a000
>   Failed to find blacklist 0001013277f0a000
>   Failed to find blacklist 000101315a70a000
>   Failed to find blacklist 0001013277e0a000
>   Failed to find blacklist 000101305a20a000
>   Failed to find blacklist 0001013277d0a000
>   Failed to find blacklist 00010130bdc0a000
>   Failed to find blacklist 00010130dc20a000
>   Failed to find blacklist 000101309a00a000
>   Failed to find blacklist 0001013277c0a000
>   Failed to find blacklist 0001013277b0a000
>   Failed to find blacklist 0001013277a0a000
>   Failed to find blacklist 000101327790a000
>   Failed to find blacklist 000101303140a000
>   Failed to find blacklist 0001013a3280a000
> 
> To fix this bug, this introduces function_entry() macro to
> retrieve the entry address from the given function pointer,
> and uses it in NOKPROBE_SYMBOL().
> 
> 
> Signed-off-by: Masami Hiramatsu 
> Reported-by: Tony Luck 
> Cc: Tony Luck 
> Cc: Fenghua Yu 
> Cc: Benjamin Herrenschmidt 
> Cc: Paul Mackerras 
> Cc: Ananth N Mavinakayanahalli 
> Cc: Kevin Hao 
> Cc: linux-i...@vger.kernel.org
> Cc: linux-kernel@vger.kernel.org
> Cc: linuxppc-...@lists.ozlabs.org
> ---
>  arch/ia64/include/asm/types.h|2 ++
>  arch/powerpc/include/asm/types.h |   11 +++
>  include/linux/kprobes.h  |3 ++-
>  include/linux/types.h|4 
>  4 files changed, 19 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/ia64/include/asm/types.h b/arch/ia64/include/asm/types.h
> index 4c351b1..6ab7b6c 100644
> --- a/arch/ia64/include/asm/types.h
> +++ b/arch/ia64/include/asm/types.h
> @@ -27,5 +27,7 @@ struct fnptr {
>   unsigned long gp;
>  };
>  
> +#define constant_function_entry(fn) (((struct fnptr *)(fn))->ip)
> +
>  #endif /* !__ASSEMBLY__ */
>  #endif /* _ASM_IA64_TYPES_H */
> diff --git a/arch/powerpc/include/asm/types.h 
> b/arch/powerpc/include/asm/types.h
> index bfb6ded..fd297b8 100644
> --- a/arch/powerpc/include/asm/types.h
> +++ b/arch/powerpc/include/asm/types.h
> @@ -25,6 +25,17 @@ typedef struct {
>   unsigned long env;
>  } func_descr_t;
>  
> +#if defined(CONFIG_PPC64) && (!defined(_CALL_ELF) || _CALL_ELF == 1)
> +/*
> + * On PPC64 ABIv1 the function pointer actually points to the
> + * function's descriptor. The first entry in the descriptor is the
> + * address of the function text.
> + */
> +#define constant_function_entry(fn)  (((func_descr_t *)(fn))->entry)
> +#else
> +#define constant_function_entry(fn)  ((unsigned long)(fn))
> +#endif
> +
>  #endif /* __ASSEMBLY__ */
>  
>  #endif /* _ASM_POWERPC_TYPES_H */
> diff --git a/include/linux/kprobes.h b/include/linux/kprobes.h
> index e059507..637eafe 100644
> --- a/include/linux/kprobes.h
> +++ b/include/linux/kprobes.h
> @@ -40,6 +40,7 @@
>  #include 
>  #include 
>  #include 
> +#include 
>  
>  #ifdef CONFIG_KPROBES
>  #include 
> @@ -485,7 +486,7 @@ static inline int enable_jprobe(struct jprobe *jp)
>  #define __NOKPROBE_SYMBOL(fname) \
>  static unsigned long __used  \
>   __attribute__((section("_kprobe_blacklist")))   \
> - _kbl_addr_##fname = (unsigned long)fname;
> + _kbl_addr_##fname = constant_function_entry(fname);
>  #define NOKPROBE_SYMBOL(fname)   __NOKPROBE_SYMBOL(fname)
>  #else
>  #define NOKPROBE_SYMBOL(fname)
> diff --git a/include/linux/types.h b/include/linux/types.h
> index 4d118ba..78e2d7d 100644
> --- a/include/linux/types.h
> +++ b/include/linux/types.h
> @@ -212,5 +212,9 @@ struct callback_head {
>  };
>  #define rcu_head callback_head
>  
> +#ifndef constant_function_entry
> +#define constant_function_entry(fn)  ((unsigned long)(fn))
> +#endif
> +
>  #endif /*  __ASSEMBLY__ */
>  #endif /* _LINUX_TYPES_H */
> 
> 
> 


-- 
Masami HIRAMATSU
Software Platform Research Dept. Linux Technology Research Center
Hitachi, Ltd., Yokohama Research Laboratory
E-mail: masami.hiramatsu...@hitachi.com


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  

[RFT PATCH -next ] [BUGFIX] kprobes: Fix "Failed to find blacklist" error on ia64 and ppc64

2014-05-07 Thread Masami Hiramatsu
On ia64 and ppc64, the function pointer does not point the
entry address of the function, but the address of function
discriptor (which contains the entry address and misc
data.) Since the kprobes passes the function pointer stored
by NOKPROBE_SYMBOL() to kallsyms_lookup_size_offset() for
initalizing its blacklist, it fails and reports many errors
as below.

  Failed to find blacklist 000101316830
  Failed to find blacklist 0001013000f0a000
  Failed to find blacklist 000101315f70a000
  Failed to find blacklist 000101324c80a000
  Failed to find blacklist 0001013063f0a000
  Failed to find blacklist 000101327800a000
  Failed to find blacklist 0001013277f0a000
  Failed to find blacklist 000101315a70a000
  Failed to find blacklist 0001013277e0a000
  Failed to find blacklist 000101305a20a000
  Failed to find blacklist 0001013277d0a000
  Failed to find blacklist 00010130bdc0a000
  Failed to find blacklist 00010130dc20a000
  Failed to find blacklist 000101309a00a000
  Failed to find blacklist 0001013277c0a000
  Failed to find blacklist 0001013277b0a000
  Failed to find blacklist 0001013277a0a000
  Failed to find blacklist 000101327790a000
  Failed to find blacklist 000101303140a000
  Failed to find blacklist 0001013a3280a000

To fix this bug, this introduces function_entry() macro to
retrieve the entry address from the given function pointer,
and uses it in NOKPROBE_SYMBOL().


Signed-off-by: Masami Hiramatsu 
Reported-by: Tony Luck 
Cc: Tony Luck 
Cc: Fenghua Yu 
Cc: Benjamin Herrenschmidt 
Cc: Paul Mackerras 
Cc: Ananth N Mavinakayanahalli 
Cc: Kevin Hao 
Cc: linux-i...@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Cc: linuxppc-...@lists.ozlabs.org
---
 arch/ia64/include/asm/types.h|2 ++
 arch/powerpc/include/asm/types.h |   11 +++
 include/linux/kprobes.h  |3 ++-
 include/linux/types.h|4 
 4 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/arch/ia64/include/asm/types.h b/arch/ia64/include/asm/types.h
index 4c351b1..6ab7b6c 100644
--- a/arch/ia64/include/asm/types.h
+++ b/arch/ia64/include/asm/types.h
@@ -27,5 +27,7 @@ struct fnptr {
unsigned long gp;
 };
 
+#define constant_function_entry(fn) (((struct fnptr *)(fn))->ip)
+
 #endif /* !__ASSEMBLY__ */
 #endif /* _ASM_IA64_TYPES_H */
diff --git a/arch/powerpc/include/asm/types.h b/arch/powerpc/include/asm/types.h
index bfb6ded..fd297b8 100644
--- a/arch/powerpc/include/asm/types.h
+++ b/arch/powerpc/include/asm/types.h
@@ -25,6 +25,17 @@ typedef struct {
unsigned long env;
 } func_descr_t;
 
+#if defined(CONFIG_PPC64) && (!defined(_CALL_ELF) || _CALL_ELF == 1)
+/*
+ * On PPC64 ABIv1 the function pointer actually points to the
+ * function's descriptor. The first entry in the descriptor is the
+ * address of the function text.
+ */
+#define constant_function_entry(fn)(((func_descr_t *)(fn))->entry)
+#else
+#define constant_function_entry(fn)((unsigned long)(fn))
+#endif
+
 #endif /* __ASSEMBLY__ */
 
 #endif /* _ASM_POWERPC_TYPES_H */
diff --git a/include/linux/kprobes.h b/include/linux/kprobes.h
index e059507..637eafe 100644
--- a/include/linux/kprobes.h
+++ b/include/linux/kprobes.h
@@ -40,6 +40,7 @@
 #include 
 #include 
 #include 
+#include 
 
 #ifdef CONFIG_KPROBES
 #include 
@@ -485,7 +486,7 @@ static inline int enable_jprobe(struct jprobe *jp)
 #define __NOKPROBE_SYMBOL(fname)   \
 static unsigned long __used\
__attribute__((section("_kprobe_blacklist")))   \
-   _kbl_addr_##fname = (unsigned long)fname;
+   _kbl_addr_##fname = constant_function_entry(fname);
 #define NOKPROBE_SYMBOL(fname) __NOKPROBE_SYMBOL(fname)
 #else
 #define NOKPROBE_SYMBOL(fname)
diff --git a/include/linux/types.h b/include/linux/types.h
index 4d118ba..78e2d7d 100644
--- a/include/linux/types.h
+++ b/include/linux/types.h
@@ -212,5 +212,9 @@ struct callback_head {
 };
 #define rcu_head callback_head
 
+#ifndef constant_function_entry
+#define constant_function_entry(fn)((unsigned long)(fn))
+#endif
+
 #endif /*  __ASSEMBLY__ */
 #endif /* _LINUX_TYPES_H */


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[RFT PATCH -next ] [BUGFIX] kprobes: Fix Failed to find blacklist error on ia64 and ppc64

2014-05-07 Thread Masami Hiramatsu
On ia64 and ppc64, the function pointer does not point the
entry address of the function, but the address of function
discriptor (which contains the entry address and misc
data.) Since the kprobes passes the function pointer stored
by NOKPROBE_SYMBOL() to kallsyms_lookup_size_offset() for
initalizing its blacklist, it fails and reports many errors
as below.

  Failed to find blacklist 000101316830
  Failed to find blacklist 0001013000f0a000
  Failed to find blacklist 000101315f70a000
  Failed to find blacklist 000101324c80a000
  Failed to find blacklist 0001013063f0a000
  Failed to find blacklist 000101327800a000
  Failed to find blacklist 0001013277f0a000
  Failed to find blacklist 000101315a70a000
  Failed to find blacklist 0001013277e0a000
  Failed to find blacklist 000101305a20a000
  Failed to find blacklist 0001013277d0a000
  Failed to find blacklist 00010130bdc0a000
  Failed to find blacklist 00010130dc20a000
  Failed to find blacklist 000101309a00a000
  Failed to find blacklist 0001013277c0a000
  Failed to find blacklist 0001013277b0a000
  Failed to find blacklist 0001013277a0a000
  Failed to find blacklist 000101327790a000
  Failed to find blacklist 000101303140a000
  Failed to find blacklist 0001013a3280a000

To fix this bug, this introduces function_entry() macro to
retrieve the entry address from the given function pointer,
and uses it in NOKPROBE_SYMBOL().


Signed-off-by: Masami Hiramatsu masami.hiramatsu...@hitachi.com
Reported-by: Tony Luck tony.l...@gmail.com
Cc: Tony Luck tony.l...@intel.com
Cc: Fenghua Yu fenghua...@intel.com
Cc: Benjamin Herrenschmidt b...@kernel.crashing.org
Cc: Paul Mackerras pau...@samba.org
Cc: Ananth N Mavinakayanahalli ana...@in.ibm.com
Cc: Kevin Hao haoke...@gmail.com
Cc: linux-i...@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Cc: linuxppc-...@lists.ozlabs.org
---
 arch/ia64/include/asm/types.h|2 ++
 arch/powerpc/include/asm/types.h |   11 +++
 include/linux/kprobes.h  |3 ++-
 include/linux/types.h|4 
 4 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/arch/ia64/include/asm/types.h b/arch/ia64/include/asm/types.h
index 4c351b1..6ab7b6c 100644
--- a/arch/ia64/include/asm/types.h
+++ b/arch/ia64/include/asm/types.h
@@ -27,5 +27,7 @@ struct fnptr {
unsigned long gp;
 };
 
+#define constant_function_entry(fn) (((struct fnptr *)(fn))-ip)
+
 #endif /* !__ASSEMBLY__ */
 #endif /* _ASM_IA64_TYPES_H */
diff --git a/arch/powerpc/include/asm/types.h b/arch/powerpc/include/asm/types.h
index bfb6ded..fd297b8 100644
--- a/arch/powerpc/include/asm/types.h
+++ b/arch/powerpc/include/asm/types.h
@@ -25,6 +25,17 @@ typedef struct {
unsigned long env;
 } func_descr_t;
 
+#if defined(CONFIG_PPC64)  (!defined(_CALL_ELF) || _CALL_ELF == 1)
+/*
+ * On PPC64 ABIv1 the function pointer actually points to the
+ * function's descriptor. The first entry in the descriptor is the
+ * address of the function text.
+ */
+#define constant_function_entry(fn)(((func_descr_t *)(fn))-entry)
+#else
+#define constant_function_entry(fn)((unsigned long)(fn))
+#endif
+
 #endif /* __ASSEMBLY__ */
 
 #endif /* _ASM_POWERPC_TYPES_H */
diff --git a/include/linux/kprobes.h b/include/linux/kprobes.h
index e059507..637eafe 100644
--- a/include/linux/kprobes.h
+++ b/include/linux/kprobes.h
@@ -40,6 +40,7 @@
 #include linux/rcupdate.h
 #include linux/mutex.h
 #include linux/ftrace.h
+#include linux/types.h
 
 #ifdef CONFIG_KPROBES
 #include asm/kprobes.h
@@ -485,7 +486,7 @@ static inline int enable_jprobe(struct jprobe *jp)
 #define __NOKPROBE_SYMBOL(fname)   \
 static unsigned long __used\
__attribute__((section(_kprobe_blacklist)))   \
-   _kbl_addr_##fname = (unsigned long)fname;
+   _kbl_addr_##fname = constant_function_entry(fname);
 #define NOKPROBE_SYMBOL(fname) __NOKPROBE_SYMBOL(fname)
 #else
 #define NOKPROBE_SYMBOL(fname)
diff --git a/include/linux/types.h b/include/linux/types.h
index 4d118ba..78e2d7d 100644
--- a/include/linux/types.h
+++ b/include/linux/types.h
@@ -212,5 +212,9 @@ struct callback_head {
 };
 #define rcu_head callback_head
 
+#ifndef constant_function_entry
+#define constant_function_entry(fn)((unsigned long)(fn))
+#endif
+
 #endif /*  __ASSEMBLY__ */
 #endif /* _LINUX_TYPES_H */


--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [RFT PATCH -next ] [BUGFIX] kprobes: Fix Failed to find blacklist error on ia64 and ppc64

2014-05-07 Thread Masami Hiramatsu
Hi Tony, Benjamin and Paul,

I've tried to fix this bug, but since I don't have either ppc64 nor ia64,
this patch is not tested on those archs. Please review and test it on
those machines.

Thank you,

(2014/05/07 20:55), Masami Hiramatsu wrote:
 On ia64 and ppc64, the function pointer does not point the
 entry address of the function, but the address of function
 discriptor (which contains the entry address and misc
 data.) Since the kprobes passes the function pointer stored
 by NOKPROBE_SYMBOL() to kallsyms_lookup_size_offset() for
 initalizing its blacklist, it fails and reports many errors
 as below.
 
   Failed to find blacklist 000101316830
   Failed to find blacklist 0001013000f0a000
   Failed to find blacklist 000101315f70a000
   Failed to find blacklist 000101324c80a000
   Failed to find blacklist 0001013063f0a000
   Failed to find blacklist 000101327800a000
   Failed to find blacklist 0001013277f0a000
   Failed to find blacklist 000101315a70a000
   Failed to find blacklist 0001013277e0a000
   Failed to find blacklist 000101305a20a000
   Failed to find blacklist 0001013277d0a000
   Failed to find blacklist 00010130bdc0a000
   Failed to find blacklist 00010130dc20a000
   Failed to find blacklist 000101309a00a000
   Failed to find blacklist 0001013277c0a000
   Failed to find blacklist 0001013277b0a000
   Failed to find blacklist 0001013277a0a000
   Failed to find blacklist 000101327790a000
   Failed to find blacklist 000101303140a000
   Failed to find blacklist 0001013a3280a000
 
 To fix this bug, this introduces function_entry() macro to
 retrieve the entry address from the given function pointer,
 and uses it in NOKPROBE_SYMBOL().
 
 
 Signed-off-by: Masami Hiramatsu masami.hiramatsu...@hitachi.com
 Reported-by: Tony Luck tony.l...@gmail.com
 Cc: Tony Luck tony.l...@intel.com
 Cc: Fenghua Yu fenghua...@intel.com
 Cc: Benjamin Herrenschmidt b...@kernel.crashing.org
 Cc: Paul Mackerras pau...@samba.org
 Cc: Ananth N Mavinakayanahalli ana...@in.ibm.com
 Cc: Kevin Hao haoke...@gmail.com
 Cc: linux-i...@vger.kernel.org
 Cc: linux-kernel@vger.kernel.org
 Cc: linuxppc-...@lists.ozlabs.org
 ---
  arch/ia64/include/asm/types.h|2 ++
  arch/powerpc/include/asm/types.h |   11 +++
  include/linux/kprobes.h  |3 ++-
  include/linux/types.h|4 
  4 files changed, 19 insertions(+), 1 deletion(-)
 
 diff --git a/arch/ia64/include/asm/types.h b/arch/ia64/include/asm/types.h
 index 4c351b1..6ab7b6c 100644
 --- a/arch/ia64/include/asm/types.h
 +++ b/arch/ia64/include/asm/types.h
 @@ -27,5 +27,7 @@ struct fnptr {
   unsigned long gp;
  };
  
 +#define constant_function_entry(fn) (((struct fnptr *)(fn))-ip)
 +
  #endif /* !__ASSEMBLY__ */
  #endif /* _ASM_IA64_TYPES_H */
 diff --git a/arch/powerpc/include/asm/types.h 
 b/arch/powerpc/include/asm/types.h
 index bfb6ded..fd297b8 100644
 --- a/arch/powerpc/include/asm/types.h
 +++ b/arch/powerpc/include/asm/types.h
 @@ -25,6 +25,17 @@ typedef struct {
   unsigned long env;
  } func_descr_t;
  
 +#if defined(CONFIG_PPC64)  (!defined(_CALL_ELF) || _CALL_ELF == 1)
 +/*
 + * On PPC64 ABIv1 the function pointer actually points to the
 + * function's descriptor. The first entry in the descriptor is the
 + * address of the function text.
 + */
 +#define constant_function_entry(fn)  (((func_descr_t *)(fn))-entry)
 +#else
 +#define constant_function_entry(fn)  ((unsigned long)(fn))
 +#endif
 +
  #endif /* __ASSEMBLY__ */
  
  #endif /* _ASM_POWERPC_TYPES_H */
 diff --git a/include/linux/kprobes.h b/include/linux/kprobes.h
 index e059507..637eafe 100644
 --- a/include/linux/kprobes.h
 +++ b/include/linux/kprobes.h
 @@ -40,6 +40,7 @@
  #include linux/rcupdate.h
  #include linux/mutex.h
  #include linux/ftrace.h
 +#include linux/types.h
  
  #ifdef CONFIG_KPROBES
  #include asm/kprobes.h
 @@ -485,7 +486,7 @@ static inline int enable_jprobe(struct jprobe *jp)
  #define __NOKPROBE_SYMBOL(fname) \
  static unsigned long __used  \
   __attribute__((section(_kprobe_blacklist)))   \
 - _kbl_addr_##fname = (unsigned long)fname;
 + _kbl_addr_##fname = constant_function_entry(fname);
  #define NOKPROBE_SYMBOL(fname)   __NOKPROBE_SYMBOL(fname)
  #else
  #define NOKPROBE_SYMBOL(fname)
 diff --git a/include/linux/types.h b/include/linux/types.h
 index 4d118ba..78e2d7d 100644
 --- a/include/linux/types.h
 +++ b/include/linux/types.h
 @@ -212,5 +212,9 @@ struct callback_head {
  };
  #define rcu_head callback_head
  
 +#ifndef constant_function_entry
 +#define constant_function_entry(fn)  ((unsigned long)(fn))
 +#endif
 +
  #endif /*  __ASSEMBLY__ */
  #endif /* _LINUX_TYPES_H */
 
 
 


-- 
Masami HIRAMATSU
Software Platform Research Dept. Linux Technology Research Center
Hitachi, Ltd., Yokohama Research Laboratory
E-mail: masami.hiramatsu...@hitachi.com


--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to 

Re: [RFT PATCH -next ] [BUGFIX] kprobes: Fix Failed to find blacklist error on ia64 and ppc64

2014-05-07 Thread Ananth N Mavinakayanahalli
On Wed, May 07, 2014 at 08:55:51PM +0900, Masami Hiramatsu wrote:

...

 +#if defined(CONFIG_PPC64)  (!defined(_CALL_ELF) || _CALL_ELF == 1)
 +/*
 + * On PPC64 ABIv1 the function pointer actually points to the
 + * function's descriptor. The first entry in the descriptor is the
 + * address of the function text.
 + */
 +#define constant_function_entry(fn)  (((func_descr_t *)(fn))-entry)
 +#else
 +#define constant_function_entry(fn)  ((unsigned long)(fn))
 +#endif
 +
  #endif /* __ASSEMBLY__ */

Hi Masami,

You could just use ppc_function_entry() instead.

Ananth

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [RFT PATCH -next ] [BUGFIX] kprobes: Fix Failed to find blacklist error on ia64 and ppc64

2014-05-07 Thread Masami Hiramatsu
(2014/05/08 13:47), Ananth N Mavinakayanahalli wrote:
 On Wed, May 07, 2014 at 08:55:51PM +0900, Masami Hiramatsu wrote:
 
 ...
 
 +#if defined(CONFIG_PPC64)  (!defined(_CALL_ELF) || _CALL_ELF == 1)
 +/*
 + * On PPC64 ABIv1 the function pointer actually points to the
 + * function's descriptor. The first entry in the descriptor is the
 + * address of the function text.
 + */
 +#define constant_function_entry(fn) (((func_descr_t *)(fn))-entry)
 +#else
 +#define constant_function_entry(fn) ((unsigned long)(fn))
 +#endif
 +
  #endif /* __ASSEMBLY__ */
 
 Hi Masami,
 
 You could just use ppc_function_entry() instead.

No, I think ppc_function_entry() has two problems (on the latest -next kernel)

At first, that is an inlined functions which is not applied in build time.
Since the NOKPROBE_SYMBOL() is used outside of any functions as like as
EXPORT_SYMBOL(), we can only use preprocessed macros.
Next, on PPC64 ABI*v2*, ppc_function_entry() returns local function entry,
which seems global function entry + 2 insns. I'm not sure about implementation
of the kallsyms on PPC64 ABIv2, but I guess we need global function entry
for kallsyms.

BTW, could you test this patch on the latest -next tree on PPC64 if possible?

Thank you,

-- 
Masami HIRAMATSU
Software Platform Research Dept. Linux Technology Research Center
Hitachi, Ltd., Yokohama Research Laboratory
E-mail: masami.hiramatsu...@hitachi.com


--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/