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 # */ ]
Unified · Split
| @@ -2,14 +2,14 @@ · 1 unmodified line | |||
| 2 | #define __LINUX_KBUILD_H | 2 | #define __LINUX_KBUILD_H |
| 3 | 3 | ||
| 4 | #define DEFINE(sym, val) \ | 4 | #define DEFINE(sym, val) \ |
| 5 | asm volatile("\n->" #sym " %0 " #val : : "i" (val)) | 5 | asm volatile("\n.ascii \"->" #sym " %0 " #val "\"" : : "i" (val)) |
| 6 | 6 | ||
| 7 | #define BLANK() asm volatile("\n->" : : ) | 7 | #define BLANK() asm volatile("\n.ascii \"->\"" : : ) |
| 8 | 8 | ||
| 9 | #define OFFSET(sym, str, mem) \ | 9 | #define OFFSET(sym, str, mem) \ |
| 10 | DEFINE(sym, offsetof(struct str, mem)) | 10 | DEFINE(sym, offsetof(struct str, mem)) |
| 11 | 11 | ||
| 12 | #define COMMENT(x) \ | 12 | #define COMMENT(x) \ |
| 13 | asm volatile("\n->#" x) | 13 | asm volatile("\n.ascii \"->#" x "\"") |
| 14 | 14 | ||
| 15 | #endif | 15 | #endif |
| @@ -413,10 +413,14 @@ cmd_xzmisc = (cat $(filter-out FORCE,$^) | \ · 412 unmodified lines | |||
| 413 | # --------------------------------------------------------------------------- | 413 | # --------------------------------------------------------------------------- |
| 414 | 414 | ||
| 415 | # Default sed regexp - multiline due to syntax constraints | 415 | # Default sed regexp - multiline due to syntax constraints |
| 416 | # | ||
| 417 | # Use [:space:] because LLVM's integrated assembler inserts <tab> around | ||
| 418 | # the .ascii directive whereas GCC keeps the <space> as-is. | ||
| 416 | define sed-offsets | 419 | define sed-offsets |
| 417 | "/^->/{s:->#\(.*\):/* \1 */:; \ | 420 | 's:^[[:space:]]*\.ascii[[:space:]]*"\(.*\)".*:\1:; \ |
| 421 | /^->/{s:->#\(.*\):/* \1 */:; \ | ||
| 418 | s:^->\([^ ]*\) [\$$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; \ | 422 | s:^->\([^ ]*\) [\$$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; \ |
| 419 | s:->::; p;}" | 423 | s:->::; p;}' |
| 420 | endef | 424 | endef |
| 421 | 425 | ||
| 422 | # Use filechk to avoid rebuilds when a header changes, but the resulting file | 426 | # Use filechk to avoid rebuilds when a header changes, but the resulting file |