public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot] [RFC] kbuild.h: workaround for llvm IAS
@ 2014-06-12 21:40 Jeroen Hofstee
  2014-06-24 12:53 ` Masahiro Yamada
  0 siblings, 1 reply; 5+ messages in thread
From: Jeroen Hofstee @ 2014-06-12 21:40 UTC (permalink / raw)
  To: u-boot

KBuild (ab)uses the asm statement to write to a file and
llvm integrated as chokes about these invalid asm statements.
Workaround it by making it look like valid asm code.

Signed-off-by: Jeroen Hofstee <jeroen@myspectrum.nl>
---
 Kbuild                 | 3 ++-
 include/linux/kbuild.h | 6 +++---
 2 files changed, 5 insertions(+), 4 deletions(-)

Does someone have a better solution?
Is this valid for all archs?

diff --git a/Kbuild b/Kbuild
index 6e1698c..ef97787 100644
--- a/Kbuild
+++ b/Kbuild
@@ -53,7 +53,8 @@ targets += arch/$(ARCH)/lib/asm-offsets.s
 
 # Default sed regexp - multiline due to syntax constraints
 define sed-y
-	"/^->/{s:->#\(.*\):/* \1 */:; \
+	"s:[[:space:]]*\.ascii[[:space:]]*\"\(.*\)\":\1:; \
+	/^->/{s:->#\(.*\):/* \1 */:; \
 	s:^->\([^ ]*\) [\$$#]*\([-0-9]*\) \(.*\):#define \1 \2 /* \3 */:; \
 	s:^->\([^ ]*\) [\$$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; \
 	s:->::; p;}"
diff --git a/include/linux/kbuild.h b/include/linux/kbuild.h
index ab7805a..8a9f645 100644
--- a/include/linux/kbuild.h
+++ b/include/linux/kbuild.h
@@ -7,14 +7,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
-- 
1.8.3.2

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

* [U-Boot] [RFC] kbuild.h: workaround for llvm IAS
  2014-06-12 21:40 [U-Boot] [RFC] kbuild.h: workaround for llvm IAS Jeroen Hofstee
@ 2014-06-24 12:53 ` Masahiro Yamada
  2014-06-24 19:36   ` Jeroen Hofstee
  0 siblings, 1 reply; 5+ messages in thread
From: Masahiro Yamada @ 2014-06-24 12:53 UTC (permalink / raw)
  To: u-boot

Hi Jeroen,


On Thu, 12 Jun 2014 23:40:54 +0200
Jeroen Hofstee <jeroen@myspectrum.nl> wrote:

> KBuild (ab)uses the asm statement to write to a file and
> llvm integrated as chokes about these invalid asm statements.
> Workaround it by making it look like valid asm code.
> 
> Signed-off-by: Jeroen Hofstee <jeroen@myspectrum.nl>

I think Linux has the same problem.

Are you willing to this patch to linux-kbuild ML?
Or fixing U-Boot only?

Best Regards
Masahiro Yamada

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

* [U-Boot] [RFC] kbuild.h: workaround for llvm IAS
  2014-06-24 12:53 ` Masahiro Yamada
@ 2014-06-24 19:36   ` Jeroen Hofstee
  2014-06-27  6:38     ` Masahiro Yamada
  0 siblings, 1 reply; 5+ messages in thread
From: Jeroen Hofstee @ 2014-06-24 19:36 UTC (permalink / raw)
  To: u-boot

Hi Masahiro,

On 24-06-14 14:53, Masahiro Yamada wrote:
> On Thu, 12 Jun 2014 23:40:54 +0200
> Jeroen Hofstee <jeroen@myspectrum.nl> wrote:
>
>> KBuild (ab)uses the asm statement to write to a file and
>> llvm integrated as chokes about these invalid asm statements.
>> Workaround it by making it look like valid asm code.
>>
>> Signed-off-by: Jeroen Hofstee <jeroen@myspectrum.nl>
> I think Linux has the same problem.
>
> Are you willing to this patch to linux-kbuild ML?
> Or fixing U-Boot only?
I don't mind in general, but it is just noise for them (cc-ing them to
create some).  For u-boot (ARM) you actually get a valid binary with
this patch after clang support has landed, for linux you just get other
errors as far as I tried (native only), patch below.

However in linux there seem more spots relying on the format, e.g.
     arch/ia64/kvm/Makefile
     arch/ia64/kernel/Makefile
     arch/um/Makefile

So if anything, I think this should be made a general rules first
in the makefiles. It seems stupid to potentially break something
while it gains nothing.

So yes, u-boot only afaic, or does that make your syncing more difficult?

Regards,
Jeroen


--- a/Kbuild
+++ b/Kbuild
@@ -52,7 +52,8 @@ targets += arch/$(SRCARCH)/kernel/asm-offsets.s

  # Default sed regexp - multiline due to syntax constraints
  define sed-y
-       "/^->/{s:->#\(.*\):/* \1 */:; \
+       "s:[[:space:]]*\.ascii[[:space:]]*\"\(.*\)\":\1:; \
+       /^->/{s:->#\(.*\):/* \1 */:; \
         s:^->\([^ ]*\) [\$$#]*\([-0-9]*\) \(.*\):#define \1 \2 /* \3 */:; \
         s:^->\([^ ]*\) [\$$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; \
         s:->::; p;}"
diff --git a/include/linux/kbuild.h b/include/linux/kbuild.h
index 22a7219..4e80f3a 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.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
diff --git a/scripts/mod/Makefile b/scripts/mod/Makefile
index c11212f..0698af3 100644
--- a/scripts/mod/Makefile
+++ b/scripts/mod/Makefile
@@ -6,7 +6,8 @@ modpost-objs    := modpost.o file2alias.o sumversion.o
  devicetable-offsets-file := devicetable-offsets.h

  define sed-y
-       "/^->/{s:->#\(.*\):/* \1 */:; \
+       "s:[[:space:]]*\.ascii[[:space:]]*\"\(.*\)\":\1:; \
+       /^->/{s:->#\(.*\):/* \1 */:; \
         s:^->\([^ ]*\) [\$$#]*\([-0-9]*\) \(.*\):#define \1 \2 /* \3 */:; \
         s:^->\([^ ]*\) [\$$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; \
         s:->::; p;}"

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

* [U-Boot] [RFC] kbuild.h: workaround for llvm IAS
  2014-06-24 19:36   ` Jeroen Hofstee
@ 2014-06-27  6:38     ` Masahiro Yamada
  2014-06-28 12:53       ` Jeroen Hofstee
  0 siblings, 1 reply; 5+ messages in thread
From: Masahiro Yamada @ 2014-06-27  6:38 UTC (permalink / raw)
  To: u-boot

Hi Jeroen,


On Tue, 24 Jun 2014 21:36:06 +0200
Jeroen Hofstee <jeroen@myspectrum.nl> wrote:

> >> KBuild (ab)uses the asm statement to write to a file and
> >> llvm integrated as chokes about these invalid asm statements.
> >> Workaround it by making it look like valid asm code.
> >>
> >> Signed-off-by: Jeroen Hofstee <jeroen@myspectrum.nl>
> > I think Linux has the same problem.
> >
> > Are you willing to this patch to linux-kbuild ML?
> > Or fixing U-Boot only?
> I don't mind in general, but it is just noise for them (cc-ing them to
> create some).  For u-boot (ARM) you actually get a valid binary with
> this patch after clang support has landed, for linux you just get other
> errors as far as I tried (native only), patch below.
> 
> However in linux there seem more spots relying on the format, e.g.
>      arch/ia64/kvm/Makefile
>      arch/ia64/kernel/Makefile
>      arch/um/Makefile
> 
> So if anything, I think this should be made a general rules first
> in the makefiles. It seems stupid to potentially break something
> while it gains nothing.
> 
> So yes, u-boot only afaic, or does that make your syncing more difficult?

I don't think syncing would be difficult.

BTW, do you know how they resolve this build error in other projects,
for example, in llvmlinux ?
http://llvm.linuxfoundation.org/index.php/Main_Page

Linux folks merged Clang support into the top Makefile, but not into ./Kbuild.
I don't know why.


Best Regards
Masahiro Yamada

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

* [U-Boot] [RFC] kbuild.h: workaround for llvm IAS
  2014-06-27  6:38     ` Masahiro Yamada
@ 2014-06-28 12:53       ` Jeroen Hofstee
  0 siblings, 0 replies; 5+ messages in thread
From: Jeroen Hofstee @ 2014-06-28 12:53 UTC (permalink / raw)
  To: u-boot

Hello Masahiro,

On 27-06-14 08:38, Masahiro Yamada wrote:
> KBuild (ab)uses the asm statement to write to a file and
> llvm integrated as chokes about these invalid asm statements.
> Workaround it by making it look like valid asm code.
>
> Signed-off-by: Jeroen Hofstee <jeroen@myspectrum.nl>
>>> I think Linux has the same problem.
>>>
>>> Are you willing to this patch to linux-kbuild ML?
>>> Or fixing U-Boot only?
>> I don't mind in general, but it is just noise for them (cc-ing them to
>> create some).  For u-boot (ARM) you actually get a valid binary with
>> this patch after clang support has landed, for linux you just get other
>> errors as far as I tried (native only), patch below.
>>
>> However in linux there seem more spots relying on the format, e.g.
>>       arch/ia64/kvm/Makefile
>>       arch/ia64/kernel/Makefile
>>       arch/um/Makefile
>>
>> So if anything, I think this should be made a general rules first
>> in the makefiles. It seems stupid to potentially break something
>> while it gains nothing.
>>
>> So yes, u-boot only afaic, or does that make your syncing more difficult?
> I don't think syncing would be difficult.
>
> BTW, do you know how they resolve this build error in other projects,
> for example, in llvmlinux ?
> http://llvm.linuxfoundation.org/index.php/Main_Page
>
> Linux folks merged Clang support into the top Makefile, but not into ./Kbuild.
> I don't know why.
I don't know how the llvmlinux people do it, but the alternative is to
add -no-integrated-as for clang when compiling such files (or use an
older clang version, since that used to be the default). Since gcc's LTO
dislikes the asm-offset.c technique as well, I think it is better to 
actually
create valid asm, so it no longer depends on compiler features at all.
I will leave it up to the llvmlinux folks to come up with a solution for
linux though...

Regards,
Jeroen

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

end of thread, other threads:[~2014-06-28 12:53 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-06-12 21:40 [U-Boot] [RFC] kbuild.h: workaround for llvm IAS Jeroen Hofstee
2014-06-24 12:53 ` Masahiro Yamada
2014-06-24 19:36   ` Jeroen Hofstee
2014-06-27  6:38     ` Masahiro Yamada
2014-06-28 12:53       ` Jeroen Hofstee

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox