mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-01 00:58:39 +02:00 
			
		
		
		
	kbuild: fix asm-offset generation to work with clang
KBuild abuses the asm statement to write to a file and clang chokes about these invalid asm statements. Hack it even more by fooling this is actual valid asm code. [masahiro: Import Jeroen's work for U-Boot: http://patchwork.ozlabs.org/patch/375026/ Tweak sed script a little to avoid garbage '#' for GCC case, like #define NR_PAGEFLAGS 23 /* __NR_PAGEFLAGS # */ ] Signed-off-by: Jeroen Hofstee <jeroen@myspectrum.nl> Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> Reviewed-by: Matthias Kaehlcke <mka@chromium.org> Tested-by: Matthias Kaehlcke <mka@chromium.org>
This commit is contained in:
		
							parent
							
								
									7dd47b95b0
								
							
						
					
					
						commit
						cf0c3e68aa
					
				
					 2 changed files with 9 additions and 5 deletions
				
			
		|  | @ -2,14 +2,14 @@ | ||||||
| #define __LINUX_KBUILD_H | #define __LINUX_KBUILD_H | ||||||
| 
 | 
 | ||||||
| #define DEFINE(sym, val) \ | #define DEFINE(sym, val) \ | ||||||
|         asm volatile("\n->" #sym " %0 " #val : : "i" (val)) | 	asm volatile("\n.ascii \"->" #sym " %0 " #val "\"" : : "i" (val)) | ||||||
| 
 | 
 | ||||||
| #define BLANK() asm volatile("\n->" : : ) | #define BLANK() asm volatile("\n.ascii \"->\"" : : ) | ||||||
| 
 | 
 | ||||||
| #define OFFSET(sym, str, mem) \ | #define OFFSET(sym, str, mem) \ | ||||||
| 	DEFINE(sym, offsetof(struct str, mem)) | 	DEFINE(sym, offsetof(struct str, mem)) | ||||||
| 
 | 
 | ||||||
| #define COMMENT(x) \ | #define COMMENT(x) \ | ||||||
| 	asm volatile("\n->#" x) | 	asm volatile("\n.ascii \"->#" x "\"") | ||||||
| 
 | 
 | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | @ -413,10 +413,14 @@ cmd_xzmisc = (cat $(filter-out FORCE,$^) | \ | ||||||
| # --------------------------------------------------------------------------- | # --------------------------------------------------------------------------- | ||||||
| 
 | 
 | ||||||
| # Default sed regexp - multiline due to syntax constraints | # Default sed regexp - multiline due to syntax constraints | ||||||
|  | # | ||||||
|  | # Use [:space:] because LLVM's integrated assembler inserts <tab> around | ||||||
|  | # the .ascii directive whereas GCC keeps the <space> as-is. | ||||||
| define sed-offsets | define sed-offsets | ||||||
| 	"/^->/{s:->#\(.*\):/* \1 */:; \ | 	's:^[[:space:]]*\.ascii[[:space:]]*"\(.*\)".*:\1:; \ | ||||||
|  | 	/^->/{s:->#\(.*\):/* \1 */:; \ | ||||||
| 	s:^->\([^ ]*\) [\$$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; \ | 	s:^->\([^ ]*\) [\$$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; \ | ||||||
| 	s:->::; p;}" | 	s:->::; p;}' | ||||||
| endef | endef | ||||||
| 
 | 
 | ||||||
| # Use filechk to avoid rebuilds when a header changes, but the resulting file | # Use filechk to avoid rebuilds when a header changes, but the resulting file | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Jeroen Hofstee
						Jeroen Hofstee