All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] kbuild, LLVMLinux: Fix asm-offset generation to work with clang
@ 2014-09-23 19:25 behanw
  2014-09-24 10:37 ` Arnd Bergmann
  0 siblings, 1 reply; 3+ messages in thread
From: behanw @ 2014-09-23 19:25 UTC (permalink / raw)
  To: mq
  Cc: linux-kernel, Behan Webster, Greg Kroah-Hartman, Ard Biesheuvel,
	H. Peter Anvin, Tom Gundersen, Masahiro Yamada, Arnd Bergmann

From: Behan Webster <behanw@converseincode.com>

When using clang with -no-integerated-as clang will use the gnu assembler instead
of the integrated assembler. However clang will still perform asm error checking
before sending the inline assembly language to gas.

The generation of asm-offsets from within C code is dependent on gcc's blind
passing of whatever is in asm() through to gas. Arbirary text is
passed through which is then modified by a sed script into the appropriate .h
and .S code. Since the arbitrary text is not valid assembly language, clang fails.

This can be fixed by making the arbitrary text into an ASM comment and then
updating the sed scripts accordingly to work as expected.

This solution works for both gcc and clang.

Signed-off-by: Behan Webster <behanw@converseincode.com>
Reviewed-by: Mark Charlebois <charlebm@gmail.com>
Reviewed-by: Jan-Simon Möller <dl9pf@gmx.de>
Cc: Jan Moskyto Matejka <mq@suse.cz>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: "H. Peter Anvin" <hpa@linux.intel.com>
Cc: Tom Gundersen <teg@jklm.no>
Cc: Masahiro Yamada <yamada.m@jp.panasonic.com>
Cc: Arnd Bergmann <arnd@arndb.de>
---
 Kbuild                 | 8 ++++----
 include/linux/kbuild.h | 6 +++---
 scripts/mod/Makefile   | 8 ++++----
 3 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/Kbuild b/Kbuild
index b8b708a..2f509c9 100644
--- a/Kbuild
+++ b/Kbuild
@@ -52,10 +52,10 @@ targets += arch/$(SRCARCH)/kernel/asm-offsets.s
 
 # Default sed regexp - multiline due to syntax constraints
 define sed-y
-	"/^->/{s:->#\(.*\):/* \1 */:; \
-	s:^->\([^ ]*\) [\$$#]*\([-0-9]*\) \(.*\):#define \1 \2 /* \3 */:; \
-	s:^->\([^ ]*\) [\$$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; \
-	s:->::; p;}"
+	"/^@->/{s:->#\(.*\):/* \1 */:; \
+	s:^@->\([^ ]*\) [\$$#]*\([-0-9]*\) \(.*\):#define \1 \2 /* \3 */:; \
+	s:^@->\([^ ]*\) [\$$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; \
+	s:@->::; p;}"
 endef
 
 quiet_cmd_offsets = GEN     $@
diff --git a/include/linux/kbuild.h b/include/linux/kbuild.h
index 22a7219..75fa2c3 100644
--- 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@->" #sym " %0 " #val : : "i" (val))
 
-#define BLANK() asm volatile("\n->" : : )
+#define BLANK() asm volatile("\n@->" : : )
 
 #define OFFSET(sym, str, mem) \
 	DEFINE(sym, offsetof(struct str, mem))
 
 #define COMMENT(x) \
-	asm volatile("\n->#" x)
+	asm volatile("\n@->#" x)
 
 #endif
diff --git a/scripts/mod/Makefile b/scripts/mod/Makefile
index c11212f..86f6b85 100644
--- a/scripts/mod/Makefile
+++ b/scripts/mod/Makefile
@@ -6,10 +6,10 @@ modpost-objs	:= modpost.o file2alias.o sumversion.o
 devicetable-offsets-file := devicetable-offsets.h
 
 define sed-y
-	"/^->/{s:->#\(.*\):/* \1 */:; \
-	s:^->\([^ ]*\) [\$$#]*\([-0-9]*\) \(.*\):#define \1 \2 /* \3 */:; \
-	s:^->\([^ ]*\) [\$$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; \
-	s:->::; p;}"
+	"/^@->/{s:@->#\(.*\):/* \1 */:; \
+	s:^@->\([^ ]*\) [\$$#]*\([-0-9]*\) \(.*\):#define \1 \2 /* \3 */:; \
+	s:^@->\([^ ]*\) [\$$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; \
+	s:@->::; p;}"
 endef
 
 quiet_cmd_offsets = GEN     $@
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] kbuild, LLVMLinux: Fix asm-offset generation to work with clang
  2014-09-23 19:25 [PATCH] kbuild, LLVMLinux: Fix asm-offset generation to work with clang behanw
@ 2014-09-24 10:37 ` Arnd Bergmann
  2014-09-24 18:27   ` Behan Webster
  0 siblings, 1 reply; 3+ messages in thread
From: Arnd Bergmann @ 2014-09-24 10:37 UTC (permalink / raw)
  To: behanw
  Cc: mq, linux-kernel, Greg Kroah-Hartman, Ard Biesheuvel,
	H. Peter Anvin, Tom Gundersen, Masahiro Yamada

On Tuesday 23 September 2014 12:25:31 behanw@converseincode.com wrote:
> 
>  #define DEFINE(sym, val) \
> -        asm volatile("\n->" #sym " %0 " #val : : "i" (val))
> +       asm volatile("\n@->" #sym " %0 " #val : : "i" (val))

Isn't the '@' character to start a comment architecture specific?

If this makes it work on ARM, what about other architectures?

	Arnd

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] kbuild, LLVMLinux: Fix asm-offset generation to work with clang
  2014-09-24 10:37 ` Arnd Bergmann
@ 2014-09-24 18:27   ` Behan Webster
  0 siblings, 0 replies; 3+ messages in thread
From: Behan Webster @ 2014-09-24 18:27 UTC (permalink / raw)
  To: Arnd Bergmann
  Cc: mq, linux-kernel, Greg Kroah-Hartman, Ard Biesheuvel,
	H. Peter Anvin, Tom Gundersen, Masahiro Yamada, fengguang.wu

On 09/24/14 03:37, Arnd Bergmann wrote:
> On Tuesday 23 September 2014 12:25:31 behanw@converseincode.com wrote:
>>   #define DEFINE(sym, val) \
>> -        asm volatile("\n->" #sym " %0 " #val : : "i" (val))
>> +       asm volatile("\n@->" #sym " %0 " #val : : "i" (val))
> Isn't the '@' character to start a comment architecture specific?
I had worried about that as well (as we discussed at LCU), but with the 
limited testing I tried this with it seemed to indicate that gas was 
smart enough to handle it in most cases. However the kbuild test robot 
indicates that this patch breaks MIPS. So indeed your concern is justified.

Gotta love the kbuild test robot. Thank you Fengguang Wu!

> If this makes it work on ARM, what about other architectures?
For now, I think I need to try something else.

Thanks,

Behan

-- 
Behan Webster
behanw@converseincode.com


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2014-09-24 18:27 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-09-23 19:25 [PATCH] kbuild, LLVMLinux: Fix asm-offset generation to work with clang behanw
2014-09-24 10:37 ` Arnd Bergmann
2014-09-24 18:27   ` Behan Webster

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.