[DTrace-devel] [PATCH] test: fix the bitfield-offset fix
Kris Van Hees
kris.van.hees at oracle.com
Wed Mar 6 19:56:25 UTC 2024
On Wed, Mar 06, 2024 at 03:52:07PM +0000, Nick Alcock via DTrace-devel wrote:
> Many systems on which CTF is too old for tst.bitfield-offset.d to pass will
> also be too old for objdump --ctf=.ctf to work: in that case, we have no way
> to tell how new the CTF is (and thus whether this bug is expected to be
> fixed), so we have to skip it.
>
> Even figuring out if this is the case is hard. We don't want to try to
> objdump the entire kernel CTFA again in case it works (it's huge and takes
> ages to dump: we're not exiting early on a version check here, after all).
> But objdump returns with an exitcode of 1 both if an unrecognized option is
> found *and* if the target contains no CTF at all -- so we must literally
> grep for 'Unrecognized option' (under LANG=C) to be sure of spotting an
> instance we must skip. (We also check for a zero exit code, because if our
> random test executable *does* contain CTF and dumping it works there's no
> need to grep the stderr for anything at all.)
>
> Signed-off-by: Nick Alcock <nick.alcock at oracle.com>
Reviewed-by: Kris Van Hees <kris.van.hees at oracle.com>
> ---
> test/unittest/bitfields/tst.bitfield-offset.x | 12 +++++++++++-
> 1 file changed, 11 insertions(+), 1 deletion(-)
>
> diff --git a/test/unittest/bitfields/tst.bitfield-offset.x b/test/unittest/bitfields/tst.bitfield-offset.x
> index 316c54a0d08f9..e49713af37830 100755
> --- a/test/unittest/bitfields/tst.bitfield-offset.x
> +++ b/test/unittest/bitfields/tst.bitfield-offset.x
> @@ -7,11 +7,21 @@
> # objdump, because the CTF version number differs.
> #
> # Alas objdump cannot read vmlinux.ctfa of this vintage on its
> -# own: we must embed it into an ELF file ourselves.
> +# own: we must embed it into an ELF file ourselves. Worse yet,
> +# objdump might be too old to read CTF at all: in this case, just
> +# skip the test, since we can't possibly tell what it was
> +# generated by.
> +
> +if ! objdump --ctf=.ctf --ctf-parent=shared_ctf /bin/true > /dev/null 2>&1 && \
> + LANG=C objdump --ctf=.ctf --ctf-parent=shared_ctf /bin/true 2>&1 | \
> + grep 'unrecognized option' > /dev/null 2>&1; then
> + exit 2
> +fi
>
> ctfa=$tmpdir/vmlinux.ctfa
> trap "rm -f $ctfa" EXIT ERR
>
> objcopy --add-section=.ctf=/lib/modules/$(uname -r)/kernel/vmlinux.ctfa /bin/true $ctfa
> +
> objdump --ctf=.ctf --ctf-parent=shared_ctf $ctfa |\
> awk '/Version: 3/ { exit 1; } /Version: / { exit 0; }'
> --
> 2.43.0.272.gce700b77fd
>
>
> _______________________________________________
> DTrace-devel mailing list
> DTrace-devel at oss.oracle.com
> https://oss.oracle.com/mailman/listinfo/dtrace-devel
More information about the DTrace-devel
mailing list