* Fix off-by-one in MODE SELECT commands
* extend --extra-*flags behavior to meson-based tests * allow using snappy in static builds * i386 TCG fixes * fix build failure when libgbm is not available -----BEGIN PGP SIGNATURE----- iQFIBAABCAAyFiEE8TM4V0tmI4mGbHaCv/vSX3jHroMFAmGJB/gUHHBib256aW5p QHJlZGhhdC5jb20ACgkQv/vSX3jHroM0+gf/STwGM2h7I/1V/rAQnLzpA4Y9iMwB urMjz5rBqSpBSvyxA83JAj7a/6V70U+gm+03Nh4zdKyvKKzVmsSHtLU6EbZFUy5y +agY6AoB/3VLIWSf8zJ5KsxLS3r030mvu6XBbs94AEDbQ5O4YjO+Tb5r/dIOVhJb W1B59cPvkSmmBoFnJe2/CNcHf0AMDQ96ge2su+Sx909Lyo94r6kibFb1bkjep/ke 0f21o3nAXSN/GBoZutLyZvMdEpwddrYwjVIyV2zCKL2XjTVXDKIphHM2iLyJxNli mnsQY51ZVdNkNAVy76nUWQ4+nJ/kT8Dhcl+6kWvI373PgokmEVpgZ0QKHQ== =GH6j -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/bonzini/tags/for-upstream' into staging * Fix off-by-one in MODE SELECT commands * extend --extra-*flags behavior to meson-based tests * allow using snappy in static builds * i386 TCG fixes * fix build failure when libgbm is not available # gpg: Signature made Mon 08 Nov 2021 12:20:24 PM CET # gpg: using RSA key F13338574B662389866C7682BFFBD25F78C7AE83 # gpg: issuer "pbonzini@redhat.com" # gpg: Good signature from "Paolo Bonzini <bonzini@gnu.org>" [full] # gpg: aka "Paolo Bonzini <pbonzini@redhat.com>" [full] * remotes/bonzini/tags/for-upstream: ui/gtk-egl: Fix build failure when libgbm is not available configure: ignore preexisting QEMU_*FLAGS envvars configure: propagate --extra-cflags and --extra-ldflags to meson compile tests configure: preserve CFLAGS, CXXFLAGS and LDFLAGS in config.status configure: simplify calls to meson_quote docs: adjust for demise of scripts/create_config meson: perform snappy test with the C++ compiler if used hw/scsi/scsi-disk: MODE_PAGE_ALLS not allowed in MODE SELECT commands target-i386: mmu: fix handling of noncanonical virtual addresses target-i386: mmu: use pg_mode instead of HF_LMA_MASK Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
commit
5e10ccc270
46
configure
vendored
46
configure
vendored
@ -158,7 +158,7 @@ update_cxxflags() {
|
|||||||
# Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
|
# Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
|
||||||
# options which some versions of GCC's C++ compiler complain about
|
# options which some versions of GCC's C++ compiler complain about
|
||||||
# because they only make sense for C programs.
|
# because they only make sense for C programs.
|
||||||
QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS"
|
QEMU_CXXFLAGS="-D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS"
|
||||||
CONFIGURE_CXXFLAGS=$(echo "$CONFIGURE_CFLAGS" | sed s/-std=gnu11/-std=gnu++11/)
|
CONFIGURE_CXXFLAGS=$(echo "$CONFIGURE_CFLAGS" | sed s/-std=gnu11/-std=gnu++11/)
|
||||||
for arg in $QEMU_CFLAGS; do
|
for arg in $QEMU_CFLAGS; do
|
||||||
case $arg in
|
case $arg in
|
||||||
@ -174,14 +174,14 @@ update_cxxflags() {
|
|||||||
|
|
||||||
compile_object() {
|
compile_object() {
|
||||||
local_cflags="$1"
|
local_cflags="$1"
|
||||||
do_cc $CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
|
do_cc $CFLAGS $EXTRA_CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
|
||||||
}
|
}
|
||||||
|
|
||||||
compile_prog() {
|
compile_prog() {
|
||||||
local_cflags="$1"
|
local_cflags="$1"
|
||||||
local_ldflags="$2"
|
local_ldflags="$2"
|
||||||
do_cc $CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC \
|
do_cc $CFLAGS $EXTRA_CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC \
|
||||||
$LDFLAGS $CONFIGURE_LDFLAGS $QEMU_LDFLAGS $local_ldflags
|
$LDFLAGS $EXTRA_LDFLAGS $CONFIGURE_LDFLAGS $QEMU_LDFLAGS $local_ldflags
|
||||||
}
|
}
|
||||||
|
|
||||||
# symbolically link $1 to $2. Portable version of "ln -sf".
|
# symbolically link $1 to $2. Portable version of "ln -sf".
|
||||||
@ -286,6 +286,10 @@ for opt do
|
|||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
|
EXTRA_CFLAGS=""
|
||||||
|
EXTRA_CXXFLAGS=""
|
||||||
|
EXTRA_LDFLAGS=""
|
||||||
|
|
||||||
xen_ctrl_version="$default_feature"
|
xen_ctrl_version="$default_feature"
|
||||||
xfs="$default_feature"
|
xfs="$default_feature"
|
||||||
membarrier="$default_feature"
|
membarrier="$default_feature"
|
||||||
@ -394,13 +398,13 @@ for opt do
|
|||||||
;;
|
;;
|
||||||
--cpu=*) cpu="$optarg"
|
--cpu=*) cpu="$optarg"
|
||||||
;;
|
;;
|
||||||
--extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
|
--extra-cflags=*)
|
||||||
QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
|
EXTRA_CFLAGS="$EXTRA_CFLAGS $optarg"
|
||||||
|
EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS $optarg"
|
||||||
|
;;
|
||||||
|
--extra-cxxflags=*) EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS $optarg"
|
||||||
;;
|
;;
|
||||||
--extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
|
--extra-ldflags=*) EXTRA_LDFLAGS="$EXTRA_LDFLAGS $optarg"
|
||||||
;;
|
|
||||||
--extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
|
|
||||||
EXTRA_LDFLAGS="$optarg"
|
|
||||||
;;
|
;;
|
||||||
--enable-debug-info) debug_info="yes"
|
--enable-debug-info) debug_info="yes"
|
||||||
;;
|
;;
|
||||||
@ -461,11 +465,13 @@ sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
|
|||||||
# left shift of signed integers is well defined and has the expected
|
# left shift of signed integers is well defined and has the expected
|
||||||
# 2s-complement style results. (Both clang and gcc agree that it
|
# 2s-complement style results. (Both clang and gcc agree that it
|
||||||
# provides these semantics.)
|
# provides these semantics.)
|
||||||
QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
|
QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv"
|
||||||
QEMU_CFLAGS="-Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
|
QEMU_CFLAGS="-Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
|
||||||
QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
|
QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
|
||||||
QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
|
QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
|
||||||
|
|
||||||
|
QEMU_LDFLAGS=
|
||||||
|
|
||||||
# Flags that are needed during configure but later taken care of by Meson
|
# Flags that are needed during configure but later taken care of by Meson
|
||||||
CONFIGURE_CFLAGS="-std=gnu11 -Wall"
|
CONFIGURE_CFLAGS="-std=gnu11 -Wall"
|
||||||
CONFIGURE_LDFLAGS=
|
CONFIGURE_LDFLAGS=
|
||||||
@ -1346,8 +1352,8 @@ Advanced options (experts only):
|
|||||||
build time
|
build time
|
||||||
--cxx=CXX use C++ compiler CXX [$cxx]
|
--cxx=CXX use C++ compiler CXX [$cxx]
|
||||||
--objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
|
--objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
|
||||||
--extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
|
--extra-cflags=CFLAGS append extra C compiler flags CFLAGS
|
||||||
--extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
|
--extra-cxxflags=CXXFLAGS append extra C++ compiler flags CXXFLAGS
|
||||||
--extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
|
--extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
|
||||||
--cross-cc-ARCH=CC use compiler when building ARCH guest test cases
|
--cross-cc-ARCH=CC use compiler when building ARCH guest test cases
|
||||||
--cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
|
--cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
|
||||||
@ -3402,7 +3408,7 @@ EOF
|
|||||||
|
|
||||||
update_cxxflags
|
update_cxxflags
|
||||||
|
|
||||||
if do_cxx $CXXFLAGS $CONFIGURE_CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
|
if do_cxx $CXXFLAGS $EXTRA_CXXFLAGS $CONFIGURE_CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
|
||||||
# C++ compiler $cxx works ok with C compiler $cc
|
# C++ compiler $cxx works ok with C compiler $cc
|
||||||
:
|
:
|
||||||
else
|
else
|
||||||
@ -3894,6 +3900,7 @@ echo "TOPSRC_DIR=$source_path" >> $config_mak
|
|||||||
if test "$skip_meson" = no; then
|
if test "$skip_meson" = no; then
|
||||||
cross="config-meson.cross.new"
|
cross="config-meson.cross.new"
|
||||||
meson_quote() {
|
meson_quote() {
|
||||||
|
test $# = 0 && return
|
||||||
echo "'$(echo $* | sed "s/ /','/g")'"
|
echo "'$(echo $* | sed "s/ /','/g")'"
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3908,10 +3915,10 @@ if test "$skip_meson" = no; then
|
|||||||
|
|
||||||
test -z "$cxx" && echo "link_language = 'c'" >> $cross
|
test -z "$cxx" && echo "link_language = 'c'" >> $cross
|
||||||
echo "[built-in options]" >> $cross
|
echo "[built-in options]" >> $cross
|
||||||
echo "c_args = [${CFLAGS:+$(meson_quote $CFLAGS)}]" >> $cross
|
echo "c_args = [$(meson_quote $CFLAGS $EXTRA_CFLAGS)]" >> $cross
|
||||||
echo "cpp_args = [${CXXFLAGS:+$(meson_quote $CXXFLAGS)}]" >> $cross
|
echo "cpp_args = [$(meson_quote $CXXFLAGS $EXTRA_CXXFLAGS)]" >> $cross
|
||||||
echo "c_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross
|
echo "c_link_args = [$(meson_quote $CFLAGS $LDFLAGS $EXTRA_CFLAGS $EXTRA_LDFLAGS)]" >> $cross
|
||||||
echo "cpp_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross
|
echo "cpp_link_args = [$(meson_quote $CXXFLAGS $LDFLAGS $EXTRA_CXXFLAGS $EXTRA_LDFLAGS)]" >> $cross
|
||||||
echo "[binaries]" >> $cross
|
echo "[binaries]" >> $cross
|
||||||
echo "c = [$(meson_quote $cc $CPU_CFLAGS)]" >> $cross
|
echo "c = [$(meson_quote $cc $CPU_CFLAGS)]" >> $cross
|
||||||
test -n "$cxx" && echo "cpp = [$(meson_quote $cxx $CPU_CFLAGS)]" >> $cross
|
test -n "$cxx" && echo "cpp = [$(meson_quote $cxx $CPU_CFLAGS)]" >> $cross
|
||||||
@ -4056,9 +4063,12 @@ preserve_env AR
|
|||||||
preserve_env AS
|
preserve_env AS
|
||||||
preserve_env CC
|
preserve_env CC
|
||||||
preserve_env CPP
|
preserve_env CPP
|
||||||
|
preserve_env CFLAGS
|
||||||
preserve_env CXX
|
preserve_env CXX
|
||||||
|
preserve_env CXXFLAGS
|
||||||
preserve_env INSTALL
|
preserve_env INSTALL
|
||||||
preserve_env LD
|
preserve_env LD
|
||||||
|
preserve_env LDFLAGS
|
||||||
preserve_env LD_LIBRARY_PATH
|
preserve_env LD_LIBRARY_PATH
|
||||||
preserve_env LIBTOOL
|
preserve_env LIBTOOL
|
||||||
preserve_env MAKE
|
preserve_env MAKE
|
||||||
|
@ -464,11 +464,10 @@ Built by Meson:
|
|||||||
scripts/make_device_config.sh program, feeding it the
|
scripts/make_device_config.sh program, feeding it the
|
||||||
default-configs/$TARGET-NAME file as input.
|
default-configs/$TARGET-NAME file as input.
|
||||||
|
|
||||||
``config-host.h``, ``$TARGET-NAME/config-target.h``, ``$TARGET-NAME/config-devices.h``
|
``config-host.h``, ``$TARGET_NAME-config-target.h``, ``$TARGET_NAME-config-devices.h``
|
||||||
These files are used by source code to determine what features
|
These files are used by source code to determine what features are
|
||||||
are enabled. They are generated from the contents of the corresponding
|
enabled. They are generated from the contents of the corresponding
|
||||||
``*.h`` files using the scripts/create_config program. This extracts
|
``*.mak`` files using Meson's ``configure_file()`` function.
|
||||||
relevant variables and formats them as C preprocessor macros.
|
|
||||||
|
|
||||||
``build.ninja``
|
``build.ninja``
|
||||||
The build rules.
|
The build rules.
|
||||||
|
@ -1087,6 +1087,7 @@ static int mode_sense_page(SCSIDiskState *s, int page, uint8_t **p_outbuf,
|
|||||||
uint8_t *p = *p_outbuf + 2;
|
uint8_t *p = *p_outbuf + 2;
|
||||||
int length;
|
int length;
|
||||||
|
|
||||||
|
assert(page < ARRAY_SIZE(mode_sense_valid));
|
||||||
if ((mode_sense_valid[page] & (1 << s->qdev.type)) == 0) {
|
if ((mode_sense_valid[page] & (1 << s->qdev.type)) == 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -1428,6 +1429,11 @@ static int scsi_disk_check_mode_select(SCSIDiskState *s, int page,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* MODE_PAGE_ALLS is only valid for MODE SENSE commands */
|
||||||
|
if (page == MODE_PAGE_ALLS) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
p = mode_current;
|
p = mode_current;
|
||||||
memset(mode_current, 0, inlen + 2);
|
memset(mode_current, 0, inlen + 2);
|
||||||
len = mode_sense_page(s, page, &p, 0);
|
len = mode_sense_page(s, page, &p, 0);
|
||||||
|
@ -197,6 +197,10 @@ add_project_arguments('-iquote', '.',
|
|||||||
link_language = meson.get_external_property('link_language', 'cpp')
|
link_language = meson.get_external_property('link_language', 'cpp')
|
||||||
if link_language == 'cpp'
|
if link_language == 'cpp'
|
||||||
add_languages('cpp', required: true, native: false)
|
add_languages('cpp', required: true, native: false)
|
||||||
|
cxx = meson.get_compiler('cpp')
|
||||||
|
linker = cxx
|
||||||
|
else
|
||||||
|
linker = cc
|
||||||
endif
|
endif
|
||||||
if host_machine.system() == 'darwin'
|
if host_machine.system() == 'darwin'
|
||||||
add_languages('objc', required: false, native: false)
|
add_languages('objc', required: false, native: false)
|
||||||
@ -1109,7 +1113,7 @@ if not get_option('snappy').auto() or have_system
|
|||||||
required: get_option('snappy'),
|
required: get_option('snappy'),
|
||||||
kwargs: static_kwargs)
|
kwargs: static_kwargs)
|
||||||
endif
|
endif
|
||||||
if snappy.found() and not cc.links('''
|
if snappy.found() and not linker.links('''
|
||||||
#include <snappy-c.h>
|
#include <snappy-c.h>
|
||||||
int main(void) { snappy_max_compressed_length(4096); return 0; }''', dependencies: snappy)
|
int main(void) { snappy_max_compressed_length(4096); return 0; }''', dependencies: snappy)
|
||||||
snappy = not_found
|
snappy = not_found
|
||||||
|
@ -90,19 +90,10 @@ static int mmu_translate(CPUState *cs, hwaddr addr, MMUTranslateFunc get_hphys_f
|
|||||||
target_ulong pdpe_addr;
|
target_ulong pdpe_addr;
|
||||||
|
|
||||||
#ifdef TARGET_X86_64
|
#ifdef TARGET_X86_64
|
||||||
if (env->hflags & HF_LMA_MASK) {
|
if (pg_mode & PG_MODE_LMA) {
|
||||||
bool la57 = pg_mode & PG_MODE_LA57;
|
bool la57 = pg_mode & PG_MODE_LA57;
|
||||||
uint64_t pml5e_addr, pml5e;
|
uint64_t pml5e_addr, pml5e;
|
||||||
uint64_t pml4e_addr, pml4e;
|
uint64_t pml4e_addr, pml4e;
|
||||||
int32_t sext;
|
|
||||||
|
|
||||||
/* test virtual address sign extension */
|
|
||||||
sext = la57 ? (int64_t)addr >> 56 : (int64_t)addr >> 47;
|
|
||||||
if (get_hphys_func && sext != 0 && sext != -1) {
|
|
||||||
env->error_code = 0;
|
|
||||||
cs->exception_index = EXCP0D_GPF;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (la57) {
|
if (la57) {
|
||||||
pml5e_addr = ((cr3 & ~0xfff) +
|
pml5e_addr = ((cr3 & ~0xfff) +
|
||||||
@ -287,7 +278,7 @@ do_check_protect_pse36:
|
|||||||
*prot |= PAGE_EXEC;
|
*prot |= PAGE_EXEC;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(env->hflags & HF_LMA_MASK)) {
|
if (!(pg_mode & PG_MODE_LMA)) {
|
||||||
pkr = 0;
|
pkr = 0;
|
||||||
} else if (ptep & PG_USER_MASK) {
|
} else if (ptep & PG_USER_MASK) {
|
||||||
pkr = pg_mode & PG_MODE_PKE ? env->pkru : 0;
|
pkr = pg_mode & PG_MODE_PKE ? env->pkru : 0;
|
||||||
@ -423,6 +414,18 @@ static int handle_mmu_fault(CPUState *cs, vaddr addr, int size,
|
|||||||
page_size = 4096;
|
page_size = 4096;
|
||||||
} else {
|
} else {
|
||||||
pg_mode = get_pg_mode(env);
|
pg_mode = get_pg_mode(env);
|
||||||
|
if (pg_mode & PG_MODE_LMA) {
|
||||||
|
int32_t sext;
|
||||||
|
|
||||||
|
/* test virtual address sign extension */
|
||||||
|
sext = (int64_t)addr >> (pg_mode & PG_MODE_LA57 ? 56 : 47);
|
||||||
|
if (sext != 0 && sext != -1) {
|
||||||
|
env->error_code = 0;
|
||||||
|
cs->exception_index = EXCP0D_GPF;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
error_code = mmu_translate(cs, addr, get_hphys, env->cr[3], is_write1,
|
error_code = mmu_translate(cs, addr, get_hphys, env->cr[3], is_write1,
|
||||||
mmu_idx, pg_mode,
|
mmu_idx, pg_mode,
|
||||||
&paddr, &page_size, &prot);
|
&paddr, &page_size, &prot);
|
||||||
|
@ -155,10 +155,12 @@ void gd_egl_refresh(DisplayChangeListener *dcl)
|
|||||||
surface_gl_destroy_texture(vc->gfx.gls, vc->gfx.ds);
|
surface_gl_destroy_texture(vc->gfx.gls, vc->gfx.ds);
|
||||||
surface_gl_create_texture(vc->gfx.gls, vc->gfx.ds);
|
surface_gl_create_texture(vc->gfx.gls, vc->gfx.ds);
|
||||||
}
|
}
|
||||||
|
#ifdef CONFIG_GBM
|
||||||
if (vc->gfx.guest_fb.dmabuf) {
|
if (vc->gfx.guest_fb.dmabuf) {
|
||||||
egl_dmabuf_release_texture(vc->gfx.guest_fb.dmabuf);
|
egl_dmabuf_release_texture(vc->gfx.guest_fb.dmabuf);
|
||||||
gd_egl_scanout_dmabuf(dcl, vc->gfx.guest_fb.dmabuf);
|
gd_egl_scanout_dmabuf(dcl, vc->gfx.guest_fb.dmabuf);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
graphic_hw_update(dcl->con);
|
graphic_hw_update(dcl->con);
|
||||||
|
Loading…
Reference in New Issue
Block a user