Hi, all
Does anybody know what does '.....isra.0' mean in GCC 10.2 compiled objects?
I just noticed this issue when using bcc/eBPF tools. I submitted the detail into * https://github.com/iovisor/bcc/issues/3293
Simply put, when building a linux kernel with GCC 10.2, the symbol 'finish_task_switch' becomes 'finish_task_switch.isra.0' in the object (as reported by 'nm')
Because a lot of kernel tracers (such as bcc) use 'finish_task_switch' as the probe point, this change in the compilation result can make all result such tools fail.
Thanks. Best regards, Guodong Xu
Thanks to John Stultz, now I know that this may relate to the new improvements about IPA-SRA in GCC 10. Refer to [1], which states: "Inter-procedural optimization improvements: The inter-procedural scalar replacement of aggregates (IPA-SRA) pass was re-implemented to work at link-time and can now also remove computing and returning unused return values."
However, such a change of symbol names negatively impacts the tracing tools commonly used in kernel debugging. Such as bcc/eBPF, who __hardcoded__ function names (without the .isra.0 suffix) into their scripts.
[1] https://gcc.gnu.org/gcc-10/changes.html
On Fri, Mar 5, 2021 at 11:21 AM Guodong Xu guodong.xu@linaro.org wrote:
Hi, all
Does anybody know what does '.....isra.0' mean in GCC 10.2 compiled objects?
I just noticed this issue when using bcc/eBPF tools. I submitted the detail into
Simply put, when building a linux kernel with GCC 10.2, the symbol 'finish_task_switch' becomes 'finish_task_switch.isra.0' in the object (as reported by 'nm')
Because a lot of kernel tracers (such as bcc) use 'finish_task_switch' as the probe point, this change in the compilation result can make all result such tools fail.
Thanks. Best regards, Guodong Xu
On 3/5/21 12:37 AM, Guodong Xu wrote:
Thanks to John Stultz, now I know that this may relate to the new improvements about IPA-SRA in GCC 10. Refer to [1], which states: "Inter-procedural optimization improvements: The inter-procedural scalar replacement of aggregates (IPA-SRA) pass was re-implemented to work at link-time and can now also remove computing and returning unused return values."
However, such a change of symbol names negatively impacts the tracing tools commonly used in kernel debugging. Such as bcc/eBPF, who __hardcoded__ function names (without the .isra.0 suffix) into their scripts.
You can add __noclone to prevent such.
r~
linaro-toolchain@lists.linaro.org