This silences two warnings:
frameworks/base/cmds/app_process/app_main.cpp:238:11: warning: Potential
memory leak
frameworks/base/cmds/app_process/app_main.cpp:261:9: warning: Potential
memory leak
As the (existing) comment notes, we nuke argv later in main(), so these
copies are necessary. Since these args need to live for basically the
entire life of the process, it seems pointless to go out of our way to
free them.
Bug: 27101951
Test: mma. Static analyzer warnings are gone.
Change-Id: Icbfabfede9db909f6acb274b697cb6076c3fc11f
To prevent it from hanging up.
Bug: 37500397
Bug: 34085250
Test: DismissDialogsInstrumentation test
Change-Id: Ia69f6a5676666bc9286272b82f242d7b1d0ee286
selinux should provide equivalent protection, and this prevents
transitioning to a helper binary for crash dumping.
Bug: http://b/30705528
Change-Id: I64b05236931d418f268b193418e937ab6b0985e0
* No new functionality was added, this was already possible via
-Djava.class.path=classpath
* However, this makes it a bit more compatible with other tools
that use -cp to invoke the main class.
* Also update the benchmarks README for correct up-to-date vogar
instructions.
Test: vogar --mode app_process --benchmark frameworks/base/core/tests/benchmarks/src/android/os/ParcelBenchmark.java
Bug: 31807538
Change-Id: Idb04600fed3dd955437ccac832617dcfd1b52b63
Don't make allowances for older kernels. Kernels must handle this
properly since it is now a CTS requirement.
Also remove some unreachable return statements.
Change-Id: I280c4ed5e461d37672236747b5dbb7d1e97ecfec
pthread_setname_np() expects 16 or fewer characters for the name argument. When the process name is longer, we should trim it.
Change-Id: I40be3a4212bdaab900c8eb30fa27aeeb7ed1b0d1
Preload public native libraries when starting a zygote
This lets other users of libnativeloader (like dex2oat)
avoid unnecessary cold loads of libandroid.so which could
take up to a second.
Bug: http://b/27245894
(cherry picked from commit b0824979be2653ba300382b52c1b1236fd44f0de)
Change-Id: I04a640c104dba5b585a59d63270e81b6c9ad6f7e
When starting the runtime from app_process, we only pass JDWP options
if starting zygote. It prevents from opening a JDWP connection in
non-zygote programs while Android apps (forked from zygote) remain
debuggable.
Bug: 23050463
Change-Id: If8ea719063a65db4cdeed69a838b52e87b078b08
This change adds three new timeslices :
- PostFork : As soon as possible after the app forks from the
zygote. Can be used in conjunction with the system_server
"Start proc:" event to derive an upper bound on fork() and
zygote overhead.
- RuntimeInit & ActivityThreadMain for ZygoteInit#runtimeInit
and ActivityThread#main.
ActivityThread#handleBindApplication and higher level functions
are already well instrumented in systrace. handleBindApplication
should occur immediately after ActivityThread#main.
Note that we use the Activity manager tag to make it easier to
correlate these new events with surrounding events (Start proc
and handleBindApplication) that are already using the AM tag.
bug: 21632700
Change-Id: Ibc01f1721f962c913f3c02a51763b6feb1eb6a4d
app_main.c gets sys/stat.h inherited from
private/android_filesystem_config.h it should
not rely on this in the future. The intent is
to move fs_config function into libcutils and
thus deprecate any need for sys/stat.h in this
include file.
Bug: 19908228
Change-Id: I477b825e582742113f849aaa1df50c41e496b6f6
When Android processes fork from Zygote, we rewrite the command line
with a new name, eg. "system_server". When we do this, we should
fill the entire block with zeros to remove corrupted argument
information that may otherwise remain in the /proc/<pid>/cmdline buffer
and be seen in tools and stack dumps.
Fixed an issue where VM options could be overwritten after setting
the nice name if the name was too long.
Bug: 17474152
Change-Id: Ie6cf9ed7752a04300a340e26cd6812bb35c59e1b
The runtime expects them to exist before it's launched.
The boot image / art files are created during the first
zygote launch.
Change-Id: I5ed0ad4854dc7785246344c8f6eaf54e560feb7d
When app_process/zygote starts, make sure PR_SET_NO_NEW_PRIVS is set.
This prevents zygote spawned apps from acquiring new privileges
on exec.
In particular, this allows the CTS test
android.os.cts.SecurityFeaturesTest#testNoNewPrivs() to pass if ART is set
as the default runtime.
Change-Id: I81139cda999c7b1430242561aad28f566e9b6da0
Use String8::isEmpty instead. Note that this code path is hit
only if the zygote calls ::exit, and that never happens unless
the VM invocation fails.
Change-Id: I0e7d3a86a79b12b2174ca3bf0dbe1904e33c041a
- Use different process names for the 32 / 64 bit zygote.
- Pass command line arguments correctly. The first unmatched
argument must be passed through to the java main class.
Change-Id: I952ebbdbba941f118d992354b9bd0ada2dade417
Query system properties for the list of ABIs and pass
it as a command line argument to ZygoteInit.
Also add a new Zygote command that returns this list of
ABIs to peers.
Change-Id: I68034c6f63fa626911122579a011a0a25a8cda94
- Make copies of argc, argv before argv is potentially
overwritten with the process name.
- Allow multiple command line arguments to be passed to
ZygoteInit (this is required for some of the 64 bit
zygote work).
- Add an explanatory comment about how these argments
are processed.
Change-Id: I752be69c5c0f97ed17d1a3dded19f46ee00929b0
These look like historical oddities, and weren't really being
used for anything useful.
Process:setArgV0 was being called by android.util.Process, but
that functionality can be moved directly into the implementation
of that class.
bug: 13647418
Change-Id: I216c8f8a4c065f0cf3a61f19f9e32decd26f93f6
Stop working around bad applications by setting ADDR_COMPAT_LAYOUT.
ADDR_COMPAT_LAYOUT is undesirable because it reduces the amount of
address space available to an application.
The Android emulator, in both 4.3 and 4.4, does not set
ADDR_COMPAT_LAYOUT. Anyone needing to test their application on a
version of Android without ADDR_COMPAT_LAYOUT can use the emulator
and reproduce the failures.
Change-Id: I8f753acc205798bd7f031026c7ece12d26de562c
This change disables all atrace tracing in Zygote immediately after it is
initialized. This is necessary because Zygote has no way to receive
notifications that the enabled trace tags have been changed. Tracing is
re-enabled when other processes fork from Zygote.
Change-Id: If2983858fb0c4890ba9ab041849b1c4d98f66c13
Different kernels seem to handle ADDR_COMPAT_LAYOUT differently,
sometimes passing it to its children, sometimes not. If it's not
passed to its child successfully, we can end up in a restart loop.
Instead of testing for the presence of ADDR_COMPAT_LAYOUT, use an
environment variable instead, which is handled more predictably.
Bug: 8392487
Change-Id: Ia531dd2abb4e1cd46f3430d844e644f53581f530
For the emulator, we want people to see memory as it
actually is, not how we're hacking around buggy apps. Don't
set ADDR_COMPAT_LAYOUT on the emulator.
For reasons that I don't understand, personality(ADDR_COMPAT_LAYOUT)
does not persist across an exec on the emulator. app_main gets
into a tight loop restarting itself because of this. This change
also works around that bug.
Change-Id: Ia73a7d2d623c25cf39d248145d97307945d554da
This seems simpler and more contained, and I think the comment explaining
why hoop-jumping is necessary is a bit clearer now.
Change-Id: Ief4afd7cbb42188ed835fce23e497520bdb753a8
Since LOG_ALWAYS_FATAL is always fatal and code after it is by
definition unreachable, put the call after other diagnostic output.
Change-Id: Ib3a515a04125d8e4f6e8af3a6f59226e8f0dd9cd