On 9/10/24 07:07, Alex Bennée wrote:
> The existing plugins already liberally use host pointer stuffing for
> passing user data which will fail when doing 64 bit guests on 32 bit
> hosts. We should discourage this by officially deprecating support and
> adding another nail to the 32 bit host coffin.
>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>
> ---
> v2
> - don't manually set based on CPU type, use __SIZEOF_POINTER__
> ---
> docs/about/deprecated.rst | 11 +++++++++++
> configure | 21 ++++++++++++++++++++-
> 2 files changed, 31 insertions(+), 1 deletion(-)
>
> diff --git a/docs/about/deprecated.rst b/docs/about/deprecated.rst
> index 88f0f03786..f7c7c33d39 100644
> --- a/docs/about/deprecated.rst
> +++ b/docs/about/deprecated.rst
> @@ -184,6 +184,17 @@ be an effective use of its limited resources, and thus intends to discontinue
> it. Since all recent x86 hardware from the past >10 years is capable of the
> 64-bit x86 extensions, a corresponding 64-bit OS should be used instead.
>
> +TCG Plugin support not enabled by default on 32-bit hosts (since 9.2)
> +'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
> +
> +While it is still possible to enable TCG plugin support for 32-bit
> +hosts there are a number of potential pitfalls when instrumenting
> +64-bit guests. The plugin APIs typically pass most addresses as
> +uint64_t but practices like encoding that address in a host pointer
> +for passing as user-data will lose data. As most software analysis
> +benefits from having plenty of host memory it seems reasonable to
> +encourage users to use 64 bit builds of QEMU for analysis work
> +whatever targets they are instrumenting.
>
> System emulator CPUs
> --------------------
> diff --git a/configure b/configure
> index 40186d865e..14581c1b9a 100755
> --- a/configure
> +++ b/configure
> @@ -516,6 +516,25 @@ case "$cpu" in
> ;;
> esac
>
> +# Now we have our CPU_CFLAGS we can check if we are targeting a 32 or
> +# 64 bit host.
> +
> +check_64bit_host() {
> +cat > $TMPC <<EOF
> +#if __SIZEOF_POINTER__ != 8
> +#error not 64 bit system
> +#endif
> +int main(void) { return 0; }
> +EOF
> + compile_object "$1"
> +}
> +
> +if check_64bit_host "$CPU_CFLAGS"; then
> + host_bits=64
> +else
> + host_bits=32
> +fi
> +
> if test -n "$host_arch" && {
> ! test -d "$source_path/linux-user/include/host/$host_arch" ||
> ! test -d "$source_path/common-user/host/$host_arch"; }; then
> @@ -1028,7 +1047,7 @@ if test "$static" = "yes" ; then
> fi
> plugins="no"
> fi
> -if test "$plugins" != "no"; then
> +if test "$plugins" != "no" && test $host_bits -eq 64; then
> plugins=yes
> subdirs="$subdirs contrib/plugins"
> fi
Thanks, it should open the door to be able to build plugins with meson.
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>