Discontinuation of V8 support for ARM chips without VFPv2

452 views
Skip to first unread message

Daniel Clifford

unread,
Apr 4, 2013, 7:52:22 AM4/4/13
to v8-u...@googlegroups.com
Due the increasing cost of the keeping the "no-VFPv2" port of V8 working on ARM, we are planning on making 3.17 the last V8 release that that supports ARM chips without VFPv2. Starting with the 3.18 release, the minimal V8 requirements will increase to ARMv6 + VFPv2. In order to simplify maintenance, we will also remove the "pre-VFP2" ARM code from the V8 code base.

Danno

Tom Jacobs

unread,
Oct 30, 2013, 7:35:40 AM10/30/13
to v8-u...@googlegroups.com
Hi Danno,

We're running V8 on Android and we're finding that it's crashing on some older Android devices (a few years old), we suspect those that don't have VFPv2.
I see support for no-VFPv2 was removed in 3.18 in this commit: https://code.google.com/p/v8/source/detail?r=14159

Is there any way of bringing no-VFPv2 support back to V8? We're running a fork of it from about 6 months ago (https://github.com/Expensify/jv8), and so might it be as simple as just reverting that commit?

Or is there any other way of working around and having it run fine on those chips?

Our crash happens here:
Trying to load lib /data/data/org.me.mobiexpensifyg/lib/libjv8.so 0x46030c28
... crash ...
#00  pc 0023c978  /data/data/org.me.mobiexpensifyg/lib/libjv8.so
By analyzing which line of code the crash comes from, this is what I get:
$ addr2line -C -f -e obj/local/armeabi/libjv8.so 0023c978
v8::internal::Isolate::EnsureDefaultIsolate()

Thanks,
Tom.

Rodolph Perfetta

unread,
Oct 30, 2013, 7:58:18 AM10/30/13
to v8-u...@googlegroups.com
Hi Tom,

Can you confirm this is a VFP issue:
 * adb shell cat /proc/cpuinfo on the device will tell you if you have VFP
 * what instruction is generating the fault?

On a side note reverting the commit on a post 3.18 V8 will not work.

Cheers,
Rodolph.



--
--
v8-users mailing list
v8-u...@googlegroups.com
http://groups.google.com/group/v8-users
---
You received this message because you are subscribed to the Google Groups "v8-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to v8-users+u...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Daniel Clifford

unread,
Oct 30, 2013, 9:04:45 AM10/30/13
to v8-u...@googlegroups.com
Hi Tom,

Unfortunately, it's not possible to just revert the removal of no-VFP. We now require a subset of the Crankshaft compiler for all platforms that we support, and supporting no-VFP Crankshaft code was simply too much work for the value added (Chrome for Android is not support on any of those devices) and maintaining the no-VFP code slowed our progress on the core supported platforms.

I don't think that we even would want to bring no-VFP back to trunk V8, even if you were to magically provide full no-VFP support including Crankshaft based on bleeding edge in a patch for us. The complexity the port adds still outweighs the benefit going forward. If your crash is indeed due to missing VFP support, you will have to use an older version of V8 for those devices.

Regards,
Danno 

Tom Jacobs

unread,
Oct 31, 2013, 6:45:38 AM10/31/13
to v8-u...@googlegroups.com
We've heard reports of our app not working on these phones (usually android 2.2 phones):
- HTC Wildfire S
- Samsung Galaxy Ace
- Samsung Galaxy Mini
- Samsung Galaxy Ace Duos S6802 
- Samsung GT I5510M 

Running the app in a 2.2 armeabi Android simulator, it crashes, and that simulator gives this cpuinfo:
 
/Applications/android-sdk-mac_x86/platform-tools/adb  shell cat /proc/cpuinfo
Processor       : ARM926EJ-S rev 5 (v5l)
BogoMIPS        : 262.14
Features        : swp half thumb fastmult vfp edsp java 
CPU implementer : 0x41
CPU architecture: 5TEJ
CPU variant     : 0x0
CPU part        : 0x926
CPU revision    : 5

Hardware        : Goldfish
Revision        : 0000
Serial          : 0000000000000000


So is the solution just to bring our v8 back to 3.17?
Can you think of any other workaround to get v8 to run on these phones, perhaps by doing floating point some other way?

We also have the option of using Rhino instead for these phones, but we'd have to detect the CPU type first. We may have to go this route.

The crash stack for it is below:

10-31 21:31:54.430      385-385/org.me.mobiexpensifyg D/dalvikvm﹕ Trying to load lib /data/data/org.me.mobiexpensifyg/lib/libjv8.so 0x46030c28
10-31 21:31:54.572        30-30/? I/DEBUG﹕ *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
10-31 21:31:54.572        30-30/? I/DEBUG﹕ Build fingerprint: 'generic/sdk/generic/:2.2/FRF91/43546:eng/test-keys'
10-31 21:31:54.572        30-30/? I/DEBUG﹕ pid: 385, tid: 385  >>> org.me.mobiexpensifyg <<<
10-31 21:31:54.572        30-30/? I/DEBUG﹕ signal 4 (SIGILL), fault addr 8123b770
10-31 21:31:54.572        30-30/? I/DEBUG﹕ r0 00149a38  r1 00000000  r2 00000000  r3 fffff4f4
10-31 21:31:54.572        30-30/? I/DEBUG﹕ r4 001375d0  r5 8147ddb8  r6 81481e20  r7 81481e38
10-31 21:31:54.581        30-30/? I/DEBUG﹕ r8 00149a38  r9 0000ccb0  10 4208bca4  fp 00000000
10-31 21:31:54.581        30-30/? I/DEBUG﹕ ip 00149a30  sp be984738  lr 8123b76c  pc 8123b770  cpsr 20000010
10-31 21:31:54.741        30-30/? I/DEBUG﹕ #00  pc 0023b770  /data/data/org.me.mobiexpensifyg/lib/libjv8.so
10-31 21:31:54.741        30-30/? I/DEBUG﹕ #01  lr 8123b76c  /data/data/org.me.mobiexpensifyg/lib/libjv8.so
10-31 21:31:54.741        30-30/? I/DEBUG﹕ code around pc:
10-31 21:31:54.741        30-30/? I/DEBUG﹕ 8123b750 e59f305c e7953003 e5830000 e3a00004
10-31 21:31:54.741        30-30/? I/DEBUG﹕ 8123b760 ebfc86ab e1a08000 ebfffdc7 e59f3044
10-31 21:31:54.751        30-30/? I/DEBUG﹕ 8123b770 e3050760 e7953003 e5838000 ebfc86a4
10-31 21:31:54.751        30-30/? I/DEBUG﹕ 8123b780 e1a05000 ebfffe8e e5865000 eaffffdd
10-31 21:31:54.751        30-30/? I/DEBUG﹕ 8123b790 e5970000 e5961000 eb05e6f8 eaffffdd
10-31 21:31:54.751        30-30/? I/DEBUG﹕ code around lr:
10-31 21:31:54.751        30-30/? I/DEBUG﹕ 8123b74c eb05e645 e59f305c e7953003 e5830000
10-31 21:31:54.751        30-30/? I/DEBUG﹕ 8123b75c e3a00004 ebfc86ab e1a08000 ebfffdc7
10-31 21:31:54.751        30-30/? I/DEBUG﹕ 8123b76c e59f3044 e3050760 e7953003 e5838000
10-31 21:31:54.751        30-30/? I/DEBUG﹕ 8123b77c ebfc86a4 e1a05000 ebfffe8e e5865000
10-31 21:31:54.761        30-30/? I/DEBUG﹕ 8123b78c eaffffdd e5970000 e5961000 eb05e6f8
10-31 21:31:54.761        30-30/? I/DEBUG﹕ stack:
10-31 21:31:54.761        30-30/? I/DEBUG﹕ be9846f8  00000000
10-31 21:31:54.761        30-30/? I/DEBUG﹕ be9846fc  be98472c  [stack]
10-31 21:31:54.761        30-30/? I/DEBUG﹕ be984700  00000000
10-31 21:31:54.761        30-30/? I/DEBUG﹕ be984704  0000ccb0  [heap]
10-31 21:31:54.761        30-30/? I/DEBUG﹕ be984708  4208bca4
10-31 21:31:54.761        30-30/? I/DEBUG﹕ be98470c  00000004
10-31 21:31:54.761        30-30/? I/DEBUG﹕ be984710  8147ddb8  /data/data/org.me.mobiexpensifyg/lib/libjv8.so
10-31 21:31:54.771        30-30/? I/DEBUG﹕ be984714  81481e20
10-31 21:31:54.771        30-30/? I/DEBUG﹕ be984718  81481e38
10-31 21:31:54.771        30-30/? I/DEBUG﹕ be98471c  afd0cd65  /system/lib/libc.so
10-31 21:31:54.771        30-30/? I/DEBUG﹕ be984720  00000004
10-31 21:31:54.771        30-30/? I/DEBUG﹕ be984724  8099eac4  /data/data/org.me.mobiexpensifyg/lib/libgnustl_shared.so
10-31 21:31:54.771        30-30/? I/DEBUG﹕ be984728  001375d0  [heap]
10-31 21:31:54.771        30-30/? I/DEBUG﹕ be98472c  8147ddb8  /data/data/org.me.mobiexpensifyg/lib/libjv8.so
10-31 21:31:54.771        30-30/? I/DEBUG﹕ be984730  df002777
10-31 21:31:54.771        30-30/? I/DEBUG﹕ be984734  e3a070ad
10-31 21:31:54.771        30-30/? I/DEBUG﹕ #00 be984738  8147c58c  /data/data/org.me.mobiexpensifyg/lib/libjv8.so
10-31 21:31:54.780        30-30/? I/DEBUG﹕ be98473c  00000003
10-31 21:31:54.780        30-30/? I/DEBUG﹕ be984740  00000004
10-31 21:31:54.780        30-30/? I/DEBUG﹕ be984744  00000000
10-31 21:31:54.780        30-30/? I/DEBUG﹕ be984748  80813b00  /system/lib/libdvm.so
10-31 21:31:54.780        30-30/? I/DEBUG﹕ be98474c  b0001169  /system/bin/linker
10-31 21:31:54.780        30-30/? I/DEBUG﹕ be984750  b0010488
10-31 21:31:54.780        30-30/? I/DEBUG﹕ be984754  00002730
10-31 21:31:54.780        30-30/? I/DEBUG﹕ be984758  b0010494
10-31 21:31:54.780        30-30/? I/DEBUG﹕ be98475c  b000122b  /system/bin/linker
10-31 21:31:54.780        30-30/? I/DEBUG﹕ be984760  b00134dc
10-31 21:31:54.780        30-30/? I/DEBUG﹕ be984764  80900000  /data/data/org.me.mobiexpensifyg/lib/libgnustl_shared.so
10-31 21:31:54.780        30-30/? I/DEBUG﹕ be984768  0000001d
10-31 21:31:54.791        30-30/? I/DEBUG﹕ be98476c  b00103a4
10-31 21:31:54.791        30-30/? I/DEBUG﹕ be984770  b00103a4
10-31 21:31:54.791        30-30/? I/DEBUG﹕ be984774  00002730
10-31 21:31:54.791        30-30/? I/DEBUG﹕ be984778  00002730
10-31 21:31:54.791        30-30/? I/DEBUG﹕ be98477c  b0002817  /system/bin/linker
10-31 21:31:55.641        32-32/? D/Zygote﹕ Process 385 terminated by signal (4)
10-31 21:31:55.651       96-247/system_process I/ActivityManager﹕ Process org.me.mobiexpensifyg (pid 385) has died.

You received this message because you are subscribed to a topic in the Google Groups "v8-users" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/v8-users/aSOFbaAQvMk/unsubscribe.
To unsubscribe from this group and all its topics, send an email to v8-users+u...@googlegroups.com.

Rodolph Perfetta

unread,
Oct 31, 2013, 7:39:20 AM10/31/13
to v8-u...@googlegroups.com
Tom,

Yes ARM926 CPU are not supported, not only they don't have VFP but they are ARMv5 when V8 base requirement is ARMv6. So V8 3.17 is the only way for you.

Also I couldn't help noticing your simulator has VFP support (though the real hardware won't). Your crash is not VFP related, you are failing on a movw instruction which is an ARMv7 only instruction when your CPU is ARMv5. So you probably compiled your binary for ARMv7. Compiling for ARMv5 will only move the issue as V8 will emit instruction from newer architecture.

HTH,
Rodolph.
Reply all
Reply to author
Forward
0 new messages