mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
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:
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
|
||||
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
|
||||
|
||||
|
||||
@@ -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)
|
||||
"${script_dir}/generate-linker-symbols.sh"
|
||||
|
||||
# Hide every xen-syms linking pass except LAST_LINKING_PASS.
|
||||
"${script_dir}/generate-xen-syms-passes.sh"
|
||||