This undoes most of b2f3e8efe1.
This optimization prevents precompiled code from being disabled and re-enabled, because disabling causes the code to lose its only reference to its own instructions. This was okay for precompilated code that ran without a JIT because it is never disabled, but precompiled code that runs in a JIT will become disabled when corresponding optimized code is compiled and re-abled after a deopt.
R=fschneider@google.com
Review URL: https://codereview.chromium.org/1925153003 .
Kernel does not clear If-Then execution state bits when entering ARM signal handler which violates requirements imposed by ARM architecture reference. Some CPUs look at these bits even while in ARM mode which causes them
to skip some instructions in the prologue of the signal handler.
To work around the issue we insert enough NOPs in the prologue to ensure that no actual instructions are skipped and then branch to the actual signal handler.
For the kernel patch that fixes the issue see: http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=6ecf830e5029598732e04067e325d946097519cb
This causes sporadic crashes with SIGILL on some testing devices (e.g. Nexus 7).
R=fschneider@google.com
BUG=
Review URL: https://codereview.chromium.org/1940883002 .
Steps to make this work:
a) Make sure you have an android sdk checkout:
=> See https://github.com/dart-lang/sdk/wiki/Building-Dart-SDK-for-Android
b) Building using android-toolchain crosscompiler:
$ ./tools/build.py -mrelease -aarm --os=android dart_precompiled_runtime
=> Notice --os=android
c) Testing using attached android phones:
$ export PATH=$PATH:$PWD/third_party/android_tools/sdk/platform-tools
$ ./tools/test.py -mrelease -aarm --system=android -cprecompiler -rdart_precompiled --use-blobs
=> Notice --system=android
Failing tests on android can be marked in status files via:
[ $compiler == precompiler && $runtime == dart_precompiled && $system == android ]
R=whesse@google.com
Review URL: https://codereview.chromium.org/1922163002 .
Initializer expressions are evaluated only once. Therefore, do not store
constant expressions in the constant cache, since they will never be
used again.
Except: when generating a stack trace and accessing the local variables
in a the stack frame of an initializer expression (static final getter function),
the constant will have to be recomputed instead of retrieved from the cache.
This CL also disables the stacktrace_every stress flag while a stack trace
is being collected, to avoid recursive requests for stack traces.
BUG=
R=rmacnak@google.com
Review URL: https://codereview.chromium.org/1934733002 .
Without tracking dependencies more explicitly we can't propagate the
cid of values whose cid is guarded by a CheckClassId:
The CheckClassId c may not be hoisted by LICM because it is guarded
by a Redefinition r. However, after constant propagation and branch simplification
code that was not previously dominated by c (and r) may become dominated by c and r.
This code won't be using the redefined value r, but the original value and therefore
LICM can illegally eliminated checks / hoist dependent loads.
BUG=
R=vegorov@google.com
Review URL: https://codereview.chromium.org/1928633002 .
DBC always encodes branches similarly to arm64's far branches. In
particular, the unconditional jump takes a signed 26-bit offset.
This CL just modifies the test to generate enough code to test that
dbc can handle branches the same distance as the other platforms.
R=iposva@google.com
Review URL: https://codereview.chromium.org/1919283003 .
Previously, Socket::ListInterfaces failed to set the os_error out
parameter causing a crash in the caller. This change sets an error here.
I've also added NetworkInterface.listSupported, which returns false on
Android, and true everywhere else. ifaddrs.h continues not to exist in
the NDK, so in order to support NetworkInterface.list, we'd have to
reimplement it, or find a suitable reimplementation somewhere.
related #26329R=johnmccutchan@google.com
Review URL: https://codereview.chromium.org/1916223003 .
Since we don't have precise liveness information inside try-catch blocks,
there are often redundant phis inside try-catch of the form
v <- phi(v, v, ..., R, v, v, ...)
This CL finds these redundant phis and replaces them with R.
BUG=
R=rmacnak@google.com
Review URL: https://codereview.chromium.org/1918913002 .
There were differences between linux gcc, android gcc,
MacOS clang, and 32 vs. 64-bit w.r.t the __builtin
functions for detecting arithmetic overflow. I couldn't get
them all working at the same time. Instead, I removed them,
and changed to always use the inline assembly. This works
in all the configurations above.
This change also adds a simdbc64 target for building simdbc
for 64-bit, and sets up the android targets. simdbc targets
arm, and simdbc64 targets arm64. You can build them with:
$ ./tools/build.py -m release -a simdbc{64} --os=android runtime
R=iposva@google.com
Review URL: https://codereview.chromium.org/1904153003 .