I'm working on Android kernel profile-guided optimization to figure out
whether pgo can improve the performance of Android kernel. I have tried
to added '-fprofile-generate' option to build Android kernel(msm-4.19).
But error occurs during building: "undefined reference to
'__llvm_profile_instrument_target'".
I have tried to add libclang_rt.profile-aarch64-android.a as a library
when building Android kernel, but the error still shows up. I think the
kernel may not be able to call libraries outside the kernel source tree,
so I was porting pgo-related files(compiler-rt/lib/profile/) from
compiler-rt to Android kernel source tree.
Do you know why did this error occurs? And am I doing the right thing?
Is it possible to improve the performance of Android kernel with llvm
pgo mechanism?
The entry point is for value profiling and should be defined in InstrProfilingValue.o in the archive library. Can you check the symbol table of the .a file?
For kernel PGO, you will probably need to invoke the buffer API to dump the profile data: __llvm_profile_write_buffer. Before that call, try to get the buffer size with __llvm_profile_get_size_for_buffer() and allocate memory with that size.
Note the buffer API will ignore value profile data, so you should also disable value profiling in build with --mllvm -disable-vp option to avoid the unsats at link time.