ARM/Thumb interworking support missing from nanojit
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
XULRunner |
Fix Released
|
Medium
|
|||
xulrunner-1.9.1 (Ubuntu) |
Fix Released
|
Medium
|
Unassigned | ||
Lucid |
Won't Fix
|
Medium
|
Alexander Sack |
Bug Description
Binary package hint: xulrunner-1.9.1
The problem here is that the nanojit output tries to call functions in xulrunner using plain BL instructions, causing the CPU to interpret the called (Thumb-2) code as ARM... which doesn't work.
The symptoms are random SIGILLs and segfaults in firefox-3.5.
Apparently, the required support has been implemented in mozilla-central for the last few months, but unfortunately there is not a straightforward patch against the current Ubuntu source to fix this :(
Possible workarounds:
1) Update to the firefox 3.6 / mozilla 1.9.2 branch on mozilla-central (http://
2) Build all of xulrunner with -marm (firefox may also need -marm --- it depends on whether the nanojit output might call absolutely anything or just support functions in xulrunner)
The most recent relevant commit on mozilla-central is http://
It looks like the relevant changes weren't on the mozilla 1.9.1 / firefox 3.5 branch.
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu lucid (development branch)
Release: 10.04
Codename: lucid
$ apt-cache policy xulrunner-1.9.1 firefox-3.5
xulrunner-1.9.1:
Installed: 1.9.1.5+
Candidate: 1.9.1.5+
Version table:
*** 1.9.1.5+
500 http://
100 /var/lib/
firefox-3.5:
Installed: 3.5.5+nobinonly
Candidate: 3.5.5+nobinonly
Version table:
*** 3.5.5+nobinonly
500 http://
100 /var/lib/
Changed in xulrunner-1.9.1 (Ubuntu): | |
assignee: | nobody → Alexander Sack (asac) |
Changed in xulrunner-1.9.1 (Ubuntu): | |
importance: | Undecided → Medium |
status: | New → Triaged |
Changed in xulrunner: | |
status: | Unknown → Fix Released |
Changed in xulrunner-1.9.1 (Ubuntu Lucid): | |
milestone: | none → lucid-alpha-2 |
tags: | added: iso-testing |
Changed in xulrunner-1.9.1 (Ubuntu Lucid): | |
milestone: | lucid-alpha-2 → lucid-alpha-3 |
Changed in xulrunner-1.9.1 (Ubuntu Lucid): | |
milestone: | lucid-alpha-3 → none |
status: | Triaged → Fix Committed |
Changed in xulrunner-1.9.1 (Ubuntu Lucid): | |
status: | Fix Committed → Won't Fix |
tags: | added: thumb |
Changed in xulrunner: | |
importance: | Unknown → Medium |
Changed in xulrunner-1.9.1 (Ubuntu): | |
assignee: | Alexander Sack (asac) → Chris Coulson (chrisccoulson) |
tags: | added: arm-porting-queue |
In previous discussions with Adobe we decided that Thumb1 would not be a good target for a JIT. The code cache is supposed to contain code that is inherently hot, so trading off compactness for performance for hot code seems silly. Hence we removed Thumb1. We also discussed that Thumb2 most likely would actually be an improvement, so we want a Thumb2 target. I am not sure how to do the configuration. We seem to be drifting towards runtime configuration (vlad just added VFP detection). If the backend is small enough we might tolerate having a Thumb2 code generation mode in parallel to regular ARM. Any comments? vlad? ed?