mirror of https://github.com/xemu-project/xemu.git
-----BEGIN PGP SIGNATURE-----
iQEcBAABAgAGBQJZOEC7AAoJEJykq7OBq3PIs4wIAMWtKbkZQkgqpHnSt4ZzpjkQ 1lRLmM6HOqMO1SarK0PduSRafwgUD2q/24gk6UeqUbArZXK+7U3SnfsfEHkOqCdB +ELRPZ+/b77AEZzhCSZ7uHHvrISO5MtLW/z4Av8GB5KYARbO5aZgIyeg7Na29SDk vQoANktrtLgLHu0vZfSUTTmPMRJqcC/DMm/EukXapXVW+cEt23V+nohchFmw8VtF Uni17u26B7CJGZOGduD11CIIvQ9QX+acyDlknkCIqfwd3Xxle0Mu0S3IV4KH7zjn MIcF3hGQWeln5AZzQe998EC0Ko+pmPRooZaeUbrolp+KjK9OcRnNKr7O2jjvGkA= =9+yN -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/stefanha/tags/block-pull-request' into staging # gpg: Signature made Wed 07 Jun 2017 19:06:51 BST # gpg: using RSA key 0x9CA4ABB381AB73C8 # gpg: Good signature from "Stefan Hajnoczi <stefanha@redhat.com>" # gpg: aka "Stefan Hajnoczi <stefanha@gmail.com>" # Primary key fingerprint: 8695 A8BF D3F9 7CDA AC35 775A 9CA4 ABB3 81AB 73C8 * remotes/stefanha/tags/block-pull-request: configure: split c and cxx extra flags coroutine-lock: do not touch coroutine after another one has been entered .gdbinit: load QEMU sub-commands when gdb starts coccinelle: fix typo in comment oslib: strip trailing '\n' from error_setg() string argument Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
2a8469aaab
|
@ -0,0 +1,8 @@
|
|||
# GDB may have ./.gdbinit loading disabled by default. In that case you can
|
||||
# follow the instructions it prints. They boil down to adding the following to
|
||||
# your home directory's ~/.gdbinit file:
|
||||
#
|
||||
# add-auto-load-safe-path /path/to/qemu/.gdbinit
|
||||
|
||||
# Load QEMU-specific sub-commands and settings
|
||||
source scripts/qemu-gdb.py
|
|
@ -91,7 +91,8 @@ update_cxxflags() {
|
|||
# Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
|
||||
# options which some versions of GCC's C++ compiler complain about
|
||||
# because they only make sense for C programs.
|
||||
QEMU_CXXFLAGS=
|
||||
QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS"
|
||||
|
||||
for arg in $QEMU_CFLAGS; do
|
||||
case $arg in
|
||||
-Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
|
||||
|
@ -345,6 +346,9 @@ for opt do
|
|||
--extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
|
||||
EXTRA_CFLAGS="$optarg"
|
||||
;;
|
||||
--extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
|
||||
EXTRA_CXXFLAGS="$optarg"
|
||||
;;
|
||||
--extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
|
||||
EXTRA_LDFLAGS="$optarg"
|
||||
;;
|
||||
|
@ -788,6 +792,8 @@ for opt do
|
|||
;;
|
||||
--extra-cflags=*)
|
||||
;;
|
||||
--extra-cxxflags=*)
|
||||
;;
|
||||
--extra-ldflags=*)
|
||||
;;
|
||||
--enable-debug-info)
|
||||
|
@ -1305,6 +1311,7 @@ Advanced options (experts only):
|
|||
--cxx=CXX use C++ compiler CXX [$cxx]
|
||||
--objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
|
||||
--extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
|
||||
--extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
|
||||
--extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
|
||||
--make=MAKE use specified make [$make]
|
||||
--install=INSTALL use specified install [$install]
|
||||
|
@ -1490,37 +1497,6 @@ if test "$bogus_os" = "yes"; then
|
|||
error_exit "Unrecognized host OS $targetos"
|
||||
fi
|
||||
|
||||
# Check that the C++ compiler exists and works with the C compiler
|
||||
if has $cxx; then
|
||||
cat > $TMPC <<EOF
|
||||
int c_function(void);
|
||||
int main(void) { return c_function(); }
|
||||
EOF
|
||||
|
||||
compile_object
|
||||
|
||||
cat > $TMPCXX <<EOF
|
||||
extern "C" {
|
||||
int c_function(void);
|
||||
}
|
||||
int c_function(void) { return 42; }
|
||||
EOF
|
||||
|
||||
update_cxxflags
|
||||
|
||||
if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
|
||||
# C++ compiler $cxx works ok with C compiler $cc
|
||||
:
|
||||
else
|
||||
echo "C++ compiler $cxx does not work with C compiler $cc"
|
||||
echo "Disabling C++ specific optional code"
|
||||
cxx=
|
||||
fi
|
||||
else
|
||||
echo "No C++ compiler available; disabling C++ specific optional code"
|
||||
cxx=
|
||||
fi
|
||||
|
||||
gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
|
||||
gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
|
||||
gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
|
||||
|
@ -5064,6 +5040,38 @@ EOF
|
|||
fi
|
||||
fi
|
||||
|
||||
# Check that the C++ compiler exists and works with the C compiler.
|
||||
# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
|
||||
if has $cxx; then
|
||||
cat > $TMPC <<EOF
|
||||
int c_function(void);
|
||||
int main(void) { return c_function(); }
|
||||
EOF
|
||||
|
||||
compile_object
|
||||
|
||||
cat > $TMPCXX <<EOF
|
||||
extern "C" {
|
||||
int c_function(void);
|
||||
}
|
||||
int c_function(void) { return 42; }
|
||||
EOF
|
||||
|
||||
update_cxxflags
|
||||
|
||||
if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
|
||||
# C++ compiler $cxx works ok with C compiler $cc
|
||||
:
|
||||
else
|
||||
echo "C++ compiler $cxx does not work with C compiler $cc"
|
||||
echo "Disabling C++ specific optional code"
|
||||
cxx=
|
||||
fi
|
||||
else
|
||||
echo "No C++ compiler available; disabling C++ specific optional code"
|
||||
cxx=
|
||||
fi
|
||||
|
||||
echo_version() {
|
||||
if test "$1" = "yes" ; then
|
||||
echo "($2)"
|
||||
|
@ -5269,6 +5277,7 @@ if test "$mingw32" = "no" ; then
|
|||
fi
|
||||
echo "qemu_helperdir=$libexecdir" >> $config_host_mak
|
||||
echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
|
||||
echo "extra_cxxflags=$EXTRA_CXXFLAGS" >> $config_host_mak
|
||||
echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
|
||||
echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
|
||||
echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
|
||||
|
@ -5911,6 +5920,7 @@ echo "WINDRES=$windres" >> $config_host_mak
|
|||
echo "CFLAGS=$CFLAGS" >> $config_host_mak
|
||||
echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
|
||||
echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
|
||||
echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
|
||||
echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
|
||||
if test "$sparse" = "yes" ; then
|
||||
echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
|
||||
|
@ -6376,6 +6386,7 @@ FILES="$FILES pc-bios/spapr-rtas/Makefile"
|
|||
FILES="$FILES pc-bios/s390-ccw/Makefile"
|
||||
FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
|
||||
FILES="$FILES pc-bios/qemu-icon.bmp"
|
||||
FILES="$FILES .gdbinit scripts" # scripts needed by relative path in .gdbinit
|
||||
for bios_file in \
|
||||
$source_path/pc-bios/*.bin \
|
||||
$source_path/pc-bios/*.lid \
|
||||
|
|
|
@ -6,9 +6,9 @@ libvixl_OBJS = vixl/utils.o \
|
|||
|
||||
# The -Wno-sign-compare is needed only for gcc 4.6, which complains about
|
||||
# some signed-unsigned equality comparisons which later gcc versions do not.
|
||||
$(addprefix $(obj)/,$(libvixl_OBJS)): QEMU_CFLAGS := -I$(SRC_PATH)/disas/libvixl $(QEMU_CFLAGS) -Wno-sign-compare
|
||||
$(addprefix $(obj)/,$(libvixl_OBJS)): QEMU_CXXFLAGS := -I$(SRC_PATH)/disas/libvixl $(QEMU_CXXFLAGS) -Wno-sign-compare
|
||||
# Ensure that C99 macros are defined regardless of the inclusion order of
|
||||
# headers in vixl. This is required at least on NetBSD.
|
||||
$(addprefix $(obj)/,$(libvixl_OBJS)): QEMU_CFLAGS += -D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS -D__STDC_FORMAT_MACROS
|
||||
$(addprefix $(obj)/,$(libvixl_OBJS)): QEMU_CXXFLAGS += -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS
|
||||
|
||||
common-obj-$(CONFIG_ARM_A64_DIS) += $(libvixl_OBJS)
|
||||
|
|
|
@ -20,9 +20,6 @@ MAKEFLAGS += -rR
|
|||
%.mak:
|
||||
clean-target:
|
||||
|
||||
# Flags for C++ compilation
|
||||
QEMU_CXXFLAGS = -D__STDC_LIMIT_MACROS $(filter-out -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Wold-style-declaration -Wold-style-definition -Wredundant-decls, $(QEMU_CFLAGS))
|
||||
|
||||
# Flags for dependency generation
|
||||
QEMU_DGFLAGS += -MMD -MP -MT $@ -MF $(@D)/$(*F).d
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// replace 'R = X; return R;' with 'return R;'
|
||||
// replace 'R = X; return R;' with 'return X;'
|
||||
@@
|
||||
identifier VAR;
|
||||
expression E;
|
||||
|
|
|
@ -402,7 +402,7 @@ void os_mem_prealloc(int fd, char *area, size_t memory, int smp_cpus,
|
|||
/* touch pages simultaneously */
|
||||
if (touch_all_pages(area, hpagesize, numpages, smp_cpus)) {
|
||||
error_setg(errp, "os_mem_prealloc: Insufficient free host memory "
|
||||
"pages available to allocate guest RAM\n");
|
||||
"pages available to allocate guest RAM");
|
||||
}
|
||||
|
||||
ret = sigaction(SIGBUS, &oldact, NULL);
|
||||
|
|
|
@ -77,10 +77,25 @@ void coroutine_fn qemu_co_queue_wait(CoQueue *queue, CoMutex *mutex)
|
|||
void qemu_co_queue_run_restart(Coroutine *co)
|
||||
{
|
||||
Coroutine *next;
|
||||
QSIMPLEQ_HEAD(, Coroutine) tmp_queue_wakeup =
|
||||
QSIMPLEQ_HEAD_INITIALIZER(tmp_queue_wakeup);
|
||||
|
||||
trace_qemu_co_queue_run_restart(co);
|
||||
while ((next = QSIMPLEQ_FIRST(&co->co_queue_wakeup))) {
|
||||
QSIMPLEQ_REMOVE_HEAD(&co->co_queue_wakeup, co_queue_next);
|
||||
|
||||
/* Because "co" has yielded, any coroutine that we wakeup can resume it.
|
||||
* If this happens and "co" terminates, co->co_queue_wakeup becomes
|
||||
* invalid memory. Therefore, use a temporary queue and do not touch
|
||||
* the "co" coroutine as soon as you enter another one.
|
||||
*
|
||||
* In its turn resumed "co" can pupulate "co_queue_wakeup" queue with
|
||||
* new coroutines to be woken up. The caller, who has resumed "co",
|
||||
* will be responsible for traversing the same queue, which may cause
|
||||
* a different wakeup order but not any missing wakeups.
|
||||
*/
|
||||
QSIMPLEQ_CONCAT(&tmp_queue_wakeup, &co->co_queue_wakeup);
|
||||
|
||||
while ((next = QSIMPLEQ_FIRST(&tmp_queue_wakeup))) {
|
||||
QSIMPLEQ_REMOVE_HEAD(&tmp_queue_wakeup, co_queue_next);
|
||||
qemu_coroutine_enter(next);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -126,6 +126,11 @@ void qemu_aio_coroutine_enter(AioContext *ctx, Coroutine *co)
|
|||
|
||||
qemu_co_queue_run_restart(co);
|
||||
|
||||
/* Beware, if ret == COROUTINE_YIELD and qemu_co_queue_run_restart()
|
||||
* has started any other coroutine, "co" might have been reentered
|
||||
* and even freed by now! So be careful and do not touch it.
|
||||
*/
|
||||
|
||||
switch (ret) {
|
||||
case COROUTINE_YIELD:
|
||||
return;
|
||||
|
|
Loading…
Reference in New Issue