| From foo@baz Wed Nov 21 18:50:25 CET 2018 |
| From: Jeroen Hofstee <jeroen@myspectrum.nl> |
| Date: Fri, 21 Apr 2017 15:21:11 +0900 |
| Subject: kbuild: fix asm-offset generation to work with clang |
| |
| From: Jeroen Hofstee <jeroen@myspectrum.nl> |
| |
| commit cf0c3e68aa81f992b0301f62e341b710d385bf68 upstream. |
| |
| 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> |
| Signed-off-by: Nick Desaulniers <ndesaulniers@google.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| include/linux/kbuild.h | 6 +++--- |
| scripts/Makefile.lib | 8 ++++++-- |
| 2 files changed, 9 insertions(+), 5 deletions(-) |
| |
| --- a/include/linux/kbuild.h |
| +++ b/include/linux/kbuild.h |
| @@ -2,14 +2,14 @@ |
| #define __LINUX_KBUILD_H |
| |
| #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(sym, offsetof(struct str, mem)) |
| |
| #define COMMENT(x) \ |
| - asm volatile("\n->#" x) |
| + asm volatile("\n.ascii \"->#" x "\"") |
| |
| #endif |
| --- a/scripts/Makefile.lib |
| +++ b/scripts/Makefile.lib |
| @@ -413,10 +413,14 @@ cmd_xzmisc = (cat $(filter-out FORCE,$^) |
| # --------------------------------------------------------------------------- |
| |
| # 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 |
| - "/^->/{s:->#\(.*\):/* \1 */:; \ |
| + 's:^[[:space:]]*\.ascii[[:space:]]*"\(.*\)".*:\1:; \ |
| + /^->/{s:->#\(.*\):/* \1 */:; \ |
| s:^->\([^ ]*\) [\$$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; \ |
| - s:->::; p;}" |
| + s:->::; p;}' |
| endef |
| |
| # Use filechk to avoid rebuilds when a header changes, but the resulting file |