Skip to content
  • Linus Torvalds's avatar
    Disable "frame-address" warning · 124a3d88
    Linus Torvalds authored
    
    
    Newer versions of gcc warn about the use of __builtin_return_address()
    with a non-zero argument when "-Wall" is specified:
    
      kernel/trace/trace_irqsoff.c: In function ‘stop_critical_timings’:
      kernel/trace/trace_irqsoff.c:433:86: warning: calling ‘__builtin_return_address’ with a nonzero argument is unsafe [-Wframe-address]
         stop_critical_timing(CALLER_ADDR0, CALLER_ADDR1);
      [ .. repeats a few times for other similar cases .. ]
    
    It is true that a non-zero argument is somewhat dangerous, and we do not
    actually have very many uses of that in the kernel - but the ftrace code
    does use it, and as Stephen Rostedt says:
    
     "We are well aware of the danger of using __builtin_return_address() of
      > 0.  In fact that's part of the reason for having the "thunk" code in
      x86 (See arch/x86/entry/thunk_{64,32}.S).  [..] it adds extra frames
      when tracking irqs off sections, to prevent __builtin_return_address()
      from accessing bad areas.  In fact the thunk_32.S states: 'Trampoline to
      trace irqs off.  (otherwise CALLER_ADDR1 might crash)'."
    
    For now, __builtin_return_address() with a non-zero argument is the best
    we can do, and the warning is not helpful and can end up making people
    miss other warnings for real problems.
    
    So disable the frame-address warning on compilers that need it.
    
    Acked-by: default avatarSteven Rostedt <rostedt@goodmis.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    124a3d88