• Nick Desaulniers's avatar
    kbuild: add -fno-discard-value-names to cmd_cc_ll_c · c67a85be
    Nick Desaulniers authored
    When debugging LLVM IR, it can be handy for clang to not discard value
    names used for local variables and parameters. Compare the generated IR.
    
    -fdiscard-value-names:
      define i32 @core_sys_select(i32 %0, ptr %1, ptr %2, ptr %3, ptr %4) {
        %6 = alloca i64
        %7 = alloca %struct.poll_wqueues
        %8 = alloca [64 x i32]
    
    -fno-discard-value-names:
      define i32 @core_sys_select(i32 %n, ptr %inp, ptr %outp, ptr %exp,
                                  ptr %end_time) {
        %expire.i = alloca i64
        %table.i = alloca %struct.poll_wqueues
        %stack_fds = alloca [64 x i32]
    
    The rule for generating human readable LLVM IR (.ll) is only useful as a
    debugging feature:
    
    $ make LLVM=1 fs/select.ll
    
    As Fangrui notes:
      A LLVM_ENABLE_ASSERTIONS=off build of Clang defaults to
      -fdiscard-value-names.
    
      A LLVM_ENABLE_ASSERTIONS=on build of Clang defaults to
      -fno-discard-value-names.
    
    Explicitly enable -fno-discard-value-names so that the IR always contains
    value names regardless of whether assertions were enabled or not.
    Assertions generally are not enabled in releases of clang packaged by
    distributions.
    
    Link: https://github.com/ClangBuiltLinux/linux/issues/1467Reviewed-by: default avatarNathan Chancellor <nathan@kernel.org>
    Reviewed-by: default avatarFangrui Song <maskray@google.com>
    Signed-off-by: default avatarNick Desaulniers <ndesaulniers@google.com>
    Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
    c67a85be
Makefile.build 17.6 KB