diff mbox series

[v2] perf: fix reproducibility issue occasionally

Message ID 20250923125857.340991-1-hongxu.jia@windriver.com
State New
Headers show
Series [v2] perf: fix reproducibility issue occasionally | expand

Commit Message

Hongxu Jia Sept. 23, 2025, 12:58 p.m. UTC
Due to commit [1] applied in kernel v6.16 (such as qemux86-64),
perl has reproducibility issue occasionally.

Perf's build process generates two copies of its internal headers,
one at tools/lib/perf/include/internal and one at libperf/include/internal
with files like core.h. Although the files are identical, the binaries including
them would see them at different paths and have different debuginfo data. [2]

The reason is the order of include dir `tools/lib/perf/include' and
`libperf/include' is not stable, such as

$ x86_64-poky-linux-gcc  ... \
   -Ipath-to/tmp/work/qemux86_64-poky-linux/perf/1.0/sources/perf-1.0/tools/lib/perf/include \
   -Ipath-to/tmp/work/qemux86_64-poky-linux/perf/1.0/sources/perf-1.0/libperf/include \
   -c -o path-to/tmp/work/qemux86_64-poky-linux/perf/1.0/sources/perf-1.0/libperf/core.o core.c

$ recipe-sysroot-native/usr/bin/dwarfsrcfiles sources/perf-1.0/libperf/core.o
/usr/src/debug/perf/1.0/tools/lib/perf/core.c
...
        /usr/src/debug/perf/1.0/tools/lib/perf/include/perf/core.h
        /usr/src/debug/perf/1.0/tools/lib/perf/include/internal/lib.h
...

$ x86_64-poky-linux-gcc  ... \
   -Ipath-to/tmp/work/qemux86_64-poky-linux/perf/1.0/sources/perf-1.0/libperf/include \
   -Ipath-to/tmp/work/qemux86_64-poky-linux/perf/1.0/sources/perf-1.0/tools/lib/perf/include \
   -c -o path-to/tmp/work/qemux86_64-poky-linux/perf/1.0/sources/perf-1.0/libperf/core.o core.c

$ recipe-sysroot-native/usr/bin/dwarfsrcfiles sources/perf-1.0/libperf/core.o
/usr/src/debug/perf/1.0/tools/lib/perf/core.c
...
    /usr/src/debug/perf/1.0/libperf/include/perf/core.h
    /usr/src/debug/perf/1.0/libperf/include/internal/lib.h
...

This commit explicitly sets the order of these two include dirs
in EXTRA_CFLAGS.

This commit has no regression for kernel v6.6 (such as genericx86-64)

Also enable verbose for compile to trace the detail of build

[1] https://github.com/torvalds/linux/commit/f5b07010c13c77541e8ade167d05bef3b8a63739
[2] https://git.openembedded.org/openembedded-core/commit/?id=0a886fcacaab0fbce1306c0f99d482f940a8f705

Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
---
 meta/recipes-kernel/perf/perf.bb | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
diff mbox series

Patch

diff --git a/meta/recipes-kernel/perf/perf.bb b/meta/recipes-kernel/perf/perf.bb
index 98dffd1cc9..58476796d3 100644
--- a/meta/recipes-kernel/perf/perf.bb
+++ b/meta/recipes-kernel/perf/perf.bb
@@ -105,7 +105,7 @@  EXTRA_OEMAKE = '\
     LDSHARED="${CC} -shared" \
     AR="${AR}" \
     LD="${LD}" \
-    EXTRA_CFLAGS="-ldw -I${S}" \
+    EXTRA_CFLAGS="-ldw -I${S} -I${S}/libperf/include -I${S}/tools/lib/perf/include" \
     YFLAGS='-y --file-prefix-map=${WORKDIR}=${TARGET_DBGSRC_DIR}' \
     EXTRA_LDFLAGS="${PERF_EXTRA_LDFLAGS}" \
     perfexecdir=${libexecdir} \
@@ -174,8 +174,8 @@  do_compile() {
 	# There are two copies of internal headers such as:
 	# libperf/include/internal/xyarray.h and tools/lib/perf/include/internal/xyarray.h
 	# For reproducibile binaries, we need to find one copy, hence force libperf to be created first
-	oe_runmake ${B}/libperf/libperf.a
-	oe_runmake all
+	oe_runmake ${B}/libperf/libperf.a V=1
+	oe_runmake all V=1
 }
 
 do_install() {