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 v2] Eclair: scan the last xen-syms linking pass on Arm
Date: Wed, 07 Oct 2026 20:07:46 +0200 [thread overview]
Message-ID: <bbc500e1808a7bca4385189e35eb6434@bugseng.com> (raw)
In-Reply-To: <e73c282694e68083305d03219f983bf74a8bf494.1791392326.git.dmytro_prokopchuk1@epam.com>
On 2026-10-07 19:12, 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.
>
> Before the analysis build, 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.
>
> Fixes: a401b5c9dc35 ("Eclair: re-enable scanning of the (almost) final
> linking step")
> Signed-off-by: Dmytro Prokopchuk <dmytro_prokopchuk1@epam.com>
> ---
> Current patch isn't tested, sent just for review (if this accepted,
> I'll run pipeline).
>
> 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
>
> Link to v1:
> https://patchew.org/Xen/2f67ef7c4593d3ab94b75b5b819e7e046e055796.1791293680.git.dmytro._5Fprokopchuk1@epam.com/
> ---
> .../eclair_analysis/ECLAIR/analysis.ecl | 2 +-
> automation/eclair_analysis/ECLAIR/analyze.sh | 3 +++
> .../ECLAIR/generate-xen-syms-passes.sh | 20 +++++++++++++++++++
> 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/analyze.sh
> b/automation/eclair_analysis/ECLAIR/analyze.sh
> index 2356fc4007..ef59e87212 100755
> --- a/automation/eclair_analysis/ECLAIR/analyze.sh
> +++ b/automation/eclair_analysis/ECLAIR/analyze.sh
> @@ -78,6 +78,9 @@ export ECLAIR_PROJECT_NAME="XEN_${VARIANT}-${SET}"
> rm -rf "${ECLAIR_OUTPUT_DIR:?}/*"
> mkdir -p "${ECLAIR_DATA_DIR}"
>
> +# Generate hide pattern.
> +"${SCRIPT_DIR}/generate-xen-syms-passes.sh"
> +
I would prefer it integrated in [1] instead, running in prepare.sh. At
least we keep these calls to ECL generation scripts together.
[1]
https://gitlab.com/xen-project/hardware/xen/-/blob/staging/automation/eclair_analysis/ECLAIR/generate_ecl.sh?ref_type=heads
> # Perform the build (from scratch) in an ECLAIR environment.
> "${ECLAIR_BIN_DIR}eclair_env" \
> "-config_file='${SCRIPT_DIR}/analysis.ecl'" \
> 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
--
Nicola Vetrini, B.Sc.
Software Engineer
BUGSENG (https://bugseng.com)
LinkedIn: https://www.linkedin.com/in/nicola-vetrini-a42471253
next prev parent reply other threads:[~2026-10-07 18:08 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-07 17:12 [PATCH v2] Eclair: scan the last xen-syms linking pass on Arm Dmytro Prokopchuk1
2026-10-07 18:07 ` Nicola Vetrini [this message]
2026-10-12 20:23 ` Dmytro Prokopchuk1
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=bbc500e1808a7bca4385189e35eb6434@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.