[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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



commit 68224f49a05daf3361b282907b668ed57caca3c8
Author:     Dmytro Prokopchuk <dmytro_prokopchuk1@xxxxxxxx>
AuthorDate: Tue Oct 27 08:50:01 2026 +0100
Commit:     Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Tue Oct 27 08:50:01 2026 +0100

    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: a401b5c9dc35 ("Eclair: re-enable scanning of the (almost) final 
linking step")
    Signed-off-by: Dmytro Prokopchuk <dmytro_prokopchuk1@xxxxxxxx>
    Acked-by: Nicola Vetrini <nicola.vetrini@xxxxxxxxxxx>
    Acked-by: Jan Beulich <jbeulich@xxxxxxxx>
---
 automation/eclair_analysis/ECLAIR/analysis.ecl       |  2 +-
 .../ECLAIR/generate-xen-syms-passes.sh               | 20 ++++++++++++++++++++
 automation/eclair_analysis/ECLAIR/generate_ecl.sh    |  3 +++
 3 files changed, 24 insertions(+), 1 deletion(-)

diff --git a/automation/eclair_analysis/ECLAIR/analysis.ecl 
b/automation/eclair_analysis/ECLAIR/analysis.ecl
index c6e1a7a95d..6d51cb15a8 100644
--- a/automation/eclair_analysis/ECLAIR/analysis.ecl
+++ b/automation/eclair_analysis/ECLAIR/analysis.ecl
@@ -37,7 +37,7 @@ their Standard Library equivalents."
 -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."
 -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)"}
 -doc_end
 
diff --git a/automation/eclair_analysis/ECLAIR/generate-xen-syms-passes.sh 
b/automation/eclair_analysis/ECLAIR/generate-xen-syms-passes.sh
new file mode 100755
index 0000000000..7d00b96833
--- /dev/null
+++ b/automation/eclair_analysis/ECLAIR/generate-xen-syms-passes.sh
@@ -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
diff --git a/automation/eclair_analysis/ECLAIR/generate_ecl.sh 
b/automation/eclair_analysis/ECLAIR/generate_ecl.sh
index b955783904..b97fc55fd2 100755
--- a/automation/eclair_analysis/ECLAIR/generate_ecl.sh
+++ b/automation/eclair_analysis/ECLAIR/generate_ecl.sh
@@ -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)
 "${script_dir}/generate-linker-symbols.sh"
+
+# Hide every xen-syms linking pass except LAST_LINKING_PASS.
+"${script_dir}/generate-xen-syms-passes.sh"
--
generated by git-patchbot for /home/xen/git/xen.git#staging



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.