Patchwork [meta-oe,3/3] llvm2.9: try to fix thumb build and disable it after failure

login
register
mail settings
Submitter Martin Jansa
Date April 19, 2013, 2:02 p.m.
Message ID <1366380143-12256-3-git-send-email-Martin.Jansa@gmail.com>
Download mbox | patch
Permalink /patch/48581/
State Accepted, archived
Commit 9d68ba4fc2b2f862bfb9619f74e082c88ab68604
Headers show

Comments

Martin Jansa - April 19, 2013, 2:02 p.m.
* khem: could you check what I'm doing wrong? This is out of my league..

Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
---
 .../recipes-core/llvm/llvm2.9/0019-issue6065.patch | 35 ++++++++++++++++++++++
 meta-oe/recipes-core/llvm/llvm2.9_2.9.bb           |  9 ++++++
 2 files changed, 44 insertions(+)
 create mode 100644 meta-oe/recipes-core/llvm/llvm2.9/0019-issue6065.patch
Henning Heinold - April 20, 2013, 9:46 a.m.
Hi Martin,

sorry to say but arm support on 2.9 is broken in serval way. I put
it in mostly for testing purpose. Maybe with upcoming llvm 3.3 the arm situation
will be better.

Bye Henning
Martin Jansa - April 20, 2013, 10:24 a.m.
On Sat, Apr 20, 2013 at 11:46:05AM +0200, Henning Heinold wrote:
> Hi Martin,
> 
> sorry to say but arm support on 2.9 is broken in serval way. I put

Yes I also got this feeling :/.

> it in mostly for testing purpose. Maybe with upcoming llvm 3.3 the arm situation
> will be better.

Well when I was checking if there is thumb fix later in git repo for
backport I haven't found it, so we'll probably need to fix thumb also
for 3.3..

I wanted to add 2.9 only to be able to remove both from meta-java
without loosing anything and this at least fixes build so I don't have
another recipe in error in jenkins builds.

Also mesa documentation says that 2.9 is recommended llvm version (but
it supports different versions too)

Patch

diff --git a/meta-oe/recipes-core/llvm/llvm2.9/0019-issue6065.patch b/meta-oe/recipes-core/llvm/llvm2.9/0019-issue6065.patch
new file mode 100644
index 0000000..aff3d1d
--- /dev/null
+++ b/meta-oe/recipes-core/llvm/llvm2.9/0019-issue6065.patch
@@ -0,0 +1,35 @@ 
+--- llvm-2.9.orig/lib/Target/ARM/ARMJITInfo.cpp	2013-04-19 14:49:28.063566919 +0200
++++ llvm-2.9/lib/Target/ARM/ARMJITInfo.cpp	2013-04-19 15:24:31.065435029 +0200
+@@ -59,7 +59,17 @@
+     // for the real target function right now. We have to act as if this
+     // whole compilation callback doesn't exist as far as the caller is
+     // concerned, so we can't just preserve the callee saved regs.
++    // stmdb introduced in http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMJITInfo.cpp?diff_format=h&r1=57911&r2=57910&pathrev=57911
++    // but fails on armv4t
++    // | {standard input}: Assembler messages:
++    // | {standard input}:22: Error: selected processor does not support Thumb mode `stmdb sp!,{r0,r1,r2,r3,lr}'
++    // | {standard input}:31: Error: lo register required -- `ldmia sp!,{r0,r1,r2,r3,lr}'
++    // | {standard input}:32: Error: lo register required -- `ldr pc,[sp],#4'
++#ifndef __thumb__
+     "stmdb sp!, {r0, r1, r2, r3, lr}\n"
++#else
++    "push {r0, r1, r2, r3, lr}\n"
++#endif
+ #if (defined(__VFP_FP__) && !defined(__SOFTFP__))
+     "fstmfdd sp!, {d0, d1, d2, d3, d4, d5, d6, d7}\n"
+ #endif
+@@ -99,8 +109,14 @@
+     // The above twiddling of the saved return addresses allows us to
+     // deallocate everything, including the LR the stub saved, with two
+     // updating load instructions.
++#ifndef __thumb__
+     "ldmia  sp!, {r0, r1, r2, r3, lr}\n"
+     "ldr    pc, [sp], #4\n"
++#else
++    // thumb dont allow lr and pc to be poped in the same instruction.
++    "pop {r0, r1, r2, r3, lr}\n"
++    "pop {pc}\n"
++#endif
+       );
+ #else  // Not an ARM host
+   void ARMCompilationCallback() {
diff --git a/meta-oe/recipes-core/llvm/llvm2.9_2.9.bb b/meta-oe/recipes-core/llvm/llvm2.9_2.9.bb
index d5b8c01..dc7f873 100644
--- a/meta-oe/recipes-core/llvm/llvm2.9_2.9.bb
+++ b/meta-oe/recipes-core/llvm/llvm2.9_2.9.bb
@@ -4,6 +4,15 @@  PR = "${INC_PR}.0"
 
 SRC_URI += "file://0035-gcc-4.7.patch"
 
+# 0019-issue6065.patch is still needed but a bit modified, because it was resolved by
+# http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMJITInfo.cpp?r1=120304&r2=124694&pathrev=124694
+# http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMJITInfo.cpp?diff_format=h&r1=57911&r2=57910&pathrev=57911
+# and still it fails with 
+# {standard input}:31: Error: invalid register list to push/pop instruction -- `pop {r0,r1,r2,r3,lr}'
+# make[2]: *** [lib/Target/ARM/CMakeFiles/LLVMARMCodeGen.dir/ARMJITInfo.cpp.o] Error 1
+# SRC_URI += "file://0019-issue6065.patch"
+ARM_INSTRUCTION_SET = "arm"
+
 SRC_URI_append_libc-uclibc = " file://arm_fenv_uclibc.patch "
 
 PARALLEL_MAKE_virtclass-native = ""