54 lines
1.6 KiB
Markdown
54 lines
1.6 KiB
Markdown
# JIT symbols
|
|
|
|
[TOC]
|
|
|
|
## Java JIT symbols
|
|
|
|
On Android >= P, simpleperf supports profiling Java code, no matter whether it is executed by
|
|
the interpreter, or JITed, or compiled into native instructions. So you don't need to do anything.
|
|
|
|
For details on Android O and N, see
|
|
[android_application_profiling.md](./android_application_profiling.md#prepare-an-android-application).
|
|
|
|
## Generic JIT symbols
|
|
|
|
Simpleperf supports picking up symbols from per-pid symbol map files, somewhat similar to what
|
|
Linux kernel perftool does. Application should create those files at specific locations.
|
|
|
|
### Symbol map file location for application
|
|
|
|
Application should create symbol map files in its data directory.
|
|
|
|
For example, process `123` of application `foo.bar.baz` should create
|
|
`/data/data/foo.bar.baz/perf-123.map`.
|
|
|
|
### Symbol map file location for standalone program
|
|
|
|
Standalone programs should create symbol map files in `/data/local/tmp`.
|
|
|
|
For example, standalone program process `123` should create `/data/local/tmp/perf-123.map`.
|
|
|
|
### Symbol map file format
|
|
|
|
Symbol map file is a text file.
|
|
|
|
Every line describes a new symbol. Line format is:
|
|
```
|
|
<symbol-absolute-address> <symbol-size> <symbol-name>
|
|
```
|
|
|
|
For example:
|
|
```
|
|
0x10000000 0x16 jit_symbol_one
|
|
0x20000000 0x332 jit_symbol_two
|
|
0x20002004 0x8 jit_symbol_three
|
|
```
|
|
|
|
### Known issues
|
|
|
|
Current implementation gets confused if memory pages where JIT symbols reside are reused by mapping
|
|
a file either before or after.
|
|
|
|
For example, if memory pages were first used by `dlopen("libfoo.so")`, then freed by `dlclose`,
|
|
then allocated for JIT symbols - simpleperf will report symbols from `libfoo.so` instead.
|