Eclair: scan the last xen-syms linking pass on Arm

The hide pattern .xen-syms.[013] leaves pass 2 visible. On x86
LAST_LINKING_PASS is 2, so that is the final link. On Arm
LAST_LINKING_PASS is 3 and the final image is .xen-syms.3. Pass 2 is
usually only a symlink, so Eclair saw no program link and reported every
translation unit as unreachable.

During analysis preparation, read LAST_LINKING_PASS from the architecture
makefile and the pass numbers from the foreach list in
xen/scripts/Makefile.link. Hide every pass except that one. An earlier
pass that is a real link stays hidden. The generator runs from
generate_ecl.sh, together with the other ECLAIR configuration scripts.

Fixes: a401b5c9dc ("Eclair: re-enable scanning of the (almost) final linking step")
Signed-off-by: Dmytro Prokopchuk <dmytro_prokopchuk1@epam.com>
Acked-by: Nicola Vetrini <nicola.vetrini@bugseng.com>
Acked-by: Jan Beulich <jbeulich@suse.com>
This commit is contained in:
Dmytro Prokopchuk authored and Jan Beulich committed 2026-10-27 08:50:01 +01:00
1 parent df8d101a38
commit 68224f49a0
3 files changed
+24 -1

No files matched your search

@@ -37,7 +37,7 @@ their Standard Library equivalents."
-doc_begin="Do not analyze intermediate linking artifacts, as they do not differ from their final -doc_begin="Do not analyze intermediate linking artifacts, as they do not differ from their final
counterparts for the purposes of MISRA C static analysis." counterparts for the purposes of MISRA C static analysis."
-file_tag+={xen_efi_tmp, "^xen/\\.xen\\.efi\\.([01]|alt\\..*)$"} -file_tag+={xen_efi_tmp, "^xen/\\.xen\\.efi\\.([01]|alt\\..*)$"}
-file_tag+={xen_syms_tmp, "^xen/\\.xen-syms\\.[013]$"} -eval_file=xen-syms-passes.ecl
-frames+={hide, "kind(program)&&target(xen_syms_tmp||xen_efi_tmp)"} -frames+={hide, "kind(program)&&target(xen_syms_tmp||xen_efi_tmp)"}
-doc_end -doc_end
@@ -0,0 +1,20 @@
#!/bin/bash
# Hide every xen-syms linking pass except LAST_LINKING_PASS.
# The pass list is the foreach in xen/scripts/Makefile.link.
set -e
cd "$(dirname "$0")"
arch=$(echo "${XEN_TARGET_ARCH}" | sed -e 's/x86.*/x86/' -e 's/arm.*/arm/')
last=$(sed -n 's/^LAST_LINKING_PASS *:= *\([0-9]\).*/\1/p' \
"../../../xen/arch/${arch}/Makefile" | head -n 1)
passes=$(sed -n 's/.*foreach n,\([0-9 ]*\).*/\1/p' \
../../../xen/scripts/Makefile.link | head -n 1)
test -n "${last}"
test -n "${passes}"
hidden=$(printf '%s' "${passes}" | tr -d " ${last}")
printf '%s\n' \
"-file_tag+={xen_syms_tmp, \"^xen/\\\\.xen-syms\\\\.[${hidden}]\$\"}" \
>xen-syms-passes.ecl
@@ -20,3 +20,6 @@ accepted_rst="${ECLAIR_PROJECT_ROOT}/docs/misra/rules.rst"
# Generate the list of linker-defined symbols (must be run after a Xen build) # Generate the list of linker-defined symbols (must be run after a Xen build)
"${script_dir}/generate-linker-symbols.sh" "${script_dir}/generate-linker-symbols.sh"
# Hide every xen-syms linking pass except LAST_LINKING_PASS.
"${script_dir}/generate-xen-syms-passes.sh"
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.