From: Nicola Vetrini <nicola.vetrini@bugseng.com>
To: Dmytro Prokopchuk1 <dmytro_prokopchuk1@epam.com>
Cc: xen-devel@lists.xenproject.org,
Doug Goldstein <cardoe@cardoe.com>,
Stefano Stabellini <sstabellini@kernel.org>
Subject: Re: [PATCH v3] Eclair: scan the last xen-syms linking pass on Arm
Date: Tue, 13 Oct 2026 14:06:39 +0200 [thread overview]
Message-ID: <bbf53927199f7644ef019171b86ad754@bugseng.com> (raw)
In-Reply-To: <da077c781fe07f776946475521bd06409a9af100.1791836668.git.dmytro_prokopchuk1@epam.com>
On 2026-10-12 22:49, Dmytro Prokopchuk1 wrote:
> 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@epam.com>
Acked-by: Nicola Vetrini <nicola.vetrini@bugseng.com>
Thanks for spotting and fixing this!
> ---
> Test CI pipeline:
> https://gitlab.com/xen-project/people/dimaprkp4k/xen/-/pipelines/2940065908
>
> Changes in v3:
> - generate the hide pattern from generate_ecl.sh, which prepare.sh
> already runs
>
> Link to v2:
> https://patchew.org/Xen/e73c282694e68083305d03219f983bf74a8bf494.1791392326.git.dmytro._5Fprokopchuk1@epam.com/
>
> Changes in v2:
> - update commit message
> - generate hide pattern before analysis
> - read LAST_LINKING_PASS from the arch Makefile and pass numbers from
> the Makefile.link
> ---
> .../eclair_analysis/ECLAIR/analysis.ecl | 2 +-
> .../ECLAIR/generate-xen-syms-passes.sh | 20 +++++++++++++++++++
> .../eclair_analysis/ECLAIR/generate_ecl.sh | 3 +++
> 3 files changed, 24 insertions(+), 1 deletion(-)
> create mode 100755
> automation/eclair_analysis/ECLAIR/generate-xen-syms-passes.sh
>
> diff --git a/automation/eclair_analysis/ECLAIR/analysis.ecl
> b/automation/eclair_analysis/ECLAIR/analysis.ecl
> index c6e1a7a95d..df1006bcaa 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..e3795e8234
> --- /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"
--
Nicola Vetrini, B.Sc.
Software Engineer
BUGSENG (https://bugseng.com)
LinkedIn: https://www.linkedin.com/in/nicola-vetrini-a42471253
prev parent reply other threads:[~2026-10-13 12:07 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-12 20:49 [PATCH v3] Eclair: scan the last xen-syms linking pass on Arm Dmytro Prokopchuk1
2026-10-13 7:52 ` Jan Beulich
2026-10-13 8:02 ` Dmytro Prokopchuk1
2026-10-13 8:14 ` Jan Beulich
2026-10-13 12:06 ` Nicola Vetrini [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=bbf53927199f7644ef019171b86ad754@bugseng.com \
--to=nicola.vetrini@bugseng.com \
--cc=cardoe@cardoe.com \
--cc=dmytro_prokopchuk1@epam.com \
--cc=sstabellini@kernel.org \
--cc=xen-devel@lists.xenproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.