According to this discussion: http://lkml.org/lkml/2008/7/25/338 http://lkml.org/lkml/2008/7/26/72
Frame pointers do nothing useful on PowerPC, so lib/Kconfig.debug makes CONFIG_FRAME_POINTER unselectable on PPC targets. But ftrace.h requires CONFIG_FRAME_POINTER for CALLER_ADDR macros. Therefore tracing is completely useless on PowerPC: [...] <idle>-0 0X.h3 2us+: 0:140:R + [000] 1733:120:S mvtsd <idle>-0 0X.h3 9us+: 0 (0) <idle>-0 0X..3 72us : 0 (0) <idle>-0 0X..3 73us : 0:140:R ==> [000] 1733:120:R mvtsd This patch introduces a ARCH_HAS_NORMAL_FRAME_POINTERS Kconfig symbol, when selected the CALLER_ADDR macros are available without the FRAME_POINTER Kconfig symbol. With this patch the trace output turns into: [...] <idle>-0 0X.h3 2us+: 0:140:R + [000] 1740:120:S mvtsd <idle>-0 0X.h3 9us+: hrtimer_wakeup (__run_hrtimer) <idle>-0 0X..3 87us : cpu_idle (__got2_end) <idle>-0 0X..3 89us : 0:140:R ==> [000] 1740:120:R mvtsd Signed-off-by: Anton Vorontsov <avoront...@ru.mvista.com> --- On Mon, Feb 02, 2009 at 09:04:15AM -0500, Steven Rostedt wrote: [...] > > > -#ifdef CONFIG_FRAME_POINTER > > > +#if defined(CONFIG_FRAME_POINTER) || defined(CONFIG_PPC) > > Perhaps we should add a HAVE_NORMAL_FRAME_POINTERS in > arch/powerpc/Kconfig under PPC and then we can change the above line to: > > #if defined(CONFIG_FRAME_POINTERS) || \ > defined(CONFIG_HAVE_NORMAL_FRAME_POINTERS) > > This way when another arch wants to belong to this, we do not need to > have a list of archs here. Would it be better if we introduce ARCH_HAS_NORMAL_FRAME_POINTERS in lib/Kconfig.debug, along with ARCH_WANT_FRAME_POINTERS? Note that we can't use ARCH_WANT_FRAME_POINTERS for our needs since that symbol is used for other (mostly cosmetic) purposes: whether we we want CONFIG_FRAME_POINTER depend on CONFIG_DEBUG_KERNEL, and whether frame pointers should be default =y (see commit da4276b8299a6544dc41ac2485d3ffca5811b3fb). arch/powerpc/Kconfig | 1 + include/linux/ftrace.h | 3 ++- lib/Kconfig.debug | 6 ++++++ 3 files changed, 9 insertions(+), 1 deletions(-) diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index 74cc312..d1c67bd 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig @@ -111,6 +111,7 @@ config PPC select HAVE_FTRACE_MCOUNT_RECORD select HAVE_DYNAMIC_FTRACE select HAVE_FUNCTION_TRACER + select ARCH_HAS_NORMAL_FRAME_POINTERS select ARCH_WANT_OPTIONAL_GPIOLIB select HAVE_IDE select HAVE_IOREMAP_PROT diff --git a/include/linux/ftrace.h b/include/linux/ftrace.h index 7840e71..ede3fe2 100644 --- a/include/linux/ftrace.h +++ b/include/linux/ftrace.h @@ -237,7 +237,8 @@ static inline void __ftrace_enabled_restore(int enabled) #endif } -#ifdef CONFIG_FRAME_POINTER +#if defined(CONFIG_FRAME_POINTER) || \ + defined(CONFIG_ARCH_HAS_NORMAL_FRAME_POINTERS) /* TODO: need to fix this for ARM */ # define CALLER_ADDR0 ((unsigned long)__builtin_return_address(0)) # define CALLER_ADDR1 ((unsigned long)__builtin_return_address(1)) diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index 29044f5..808f4e2 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug @@ -579,6 +579,12 @@ config ARCH_WANT_FRAME_POINTERS bool help +config ARCH_HAS_NORMAL_FRAME_POINTERS + bool + help + Architectures should select this symbol if their ABI implies + having a frame pointer. + config FRAME_POINTER bool "Compile the kernel with frame pointers" depends on DEBUG_KERNEL && \ -- 1.5.6.5 _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev