• Nick Desaulniers's avatar
    Makefile: LTO: have linker check -Wframe-larger-than · 24845dcb
    Nick Desaulniers authored
    -Wframe-larger-than= requires stack frame information, which the
    frontend cannot provide. This diagnostic is emitted late during
    compilation once stack frame size is available.
    
    When building with LTO, the frontend simply lowers C to LLVM IR and does
    not have stack frame information, so it cannot emit this diagnostic.
    When the linker drives LTO, it restarts optimizations and lowers LLVM IR
    to object code. At that point, it has stack frame information but
    doesn't know to check for a specific max stack frame size.
    
    I consider this a bug in LLVM that we need to fix. There are some
    details we're working out related to LTO such as which value to use when
    there are multiple different values specified per TU, or how to
    propagate these to compiler synthesized routines properly, if at all.
    
    Until it's fixed, ensure we don't miss these. At that point we can wrap
    this in a compiler version guard or revert this based on the minimum
    support version of Clang.
    
    The error message is not generated during link:
      LTO     vmlinux.o
    ld.lld: warning: stack size limit exceeded (8224) in foobarbaz
    
    Cc: Sami Tolvanen <samitolvanen@google.com>
    Reported-by: default avatarCandle Sun <candlesea@gmail.com>
    Suggested-by: default avatarFangrui Song <maskray@google.com>
    Signed-off-by: default avatarNick Desaulniers <ndesaulniers@google.com>
    Signed-off-by: default avatarKees Cook <keescook@chromium.org>
    Link: https://lore.kernel.org/r/20210312010942.1546679-1-ndesaulniers@google.com
    24845dcb
Makefile 64.3 KB