mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	kbuild: add -fno-discard-value-names to cmd_cc_ll_c
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/1467
Reviewed-by: Nathan Chancellor <nathan@kernel.org>
Reviewed-by: Fangrui Song <maskray@google.com>
Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
			
			
This commit is contained in:
		
							parent
							
								
									04518e4c2e
								
							
						
					
					
						commit
						c67a85bee7
					
				
					 1 changed files with 1 additions and 1 deletions
				
			
		| 
						 | 
					@ -140,7 +140,7 @@ $(obj)/%.symtypes : $(src)/%.c FORCE
 | 
				
			||||||
# LLVM assembly
 | 
					# LLVM assembly
 | 
				
			||||||
# Generate .ll files from .c
 | 
					# Generate .ll files from .c
 | 
				
			||||||
quiet_cmd_cc_ll_c = CC $(quiet_modtag)  $@
 | 
					quiet_cmd_cc_ll_c = CC $(quiet_modtag)  $@
 | 
				
			||||||
      cmd_cc_ll_c = $(CC) $(c_flags) -emit-llvm -S -o $@ $<
 | 
					      cmd_cc_ll_c = $(CC) $(c_flags) -emit-llvm -S -fno-discard-value-names -o $@ $<
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$(obj)/%.ll: $(src)/%.c FORCE
 | 
					$(obj)/%.ll: $(src)/%.c FORCE
 | 
				
			||||||
	$(call if_changed_dep,cc_ll_c)
 | 
						$(call if_changed_dep,cc_ll_c)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue