mirror of https://github.com/xemu-project/xemu.git
* x86 bugfixes
* OpenBSD support for naming threads * Refined Python support policy -----BEGIN PGP SIGNATURE----- iQFIBAABCAAyFiEE8TM4V0tmI4mGbHaCv/vSX3jHroMFAmP0wtkUHHBib256aW5p QHJlZGhhdC5jb20ACgkQv/vSX3jHroNI6QgAjMvEV0N5FZYMpiuQdjebBeV+uHM6 LThewCQa0cW5jb1X1NFBbOxYlNfE3WQeZqQF+BiVJr5wT2UsyNsPH7wTjsP387vV juoD7D/XZo8P4Qi+vJWo8XVBrzWEK8QS1P+NxWr+ZnsAhDx2+MR87fVmHtVBW1pI oDO0iyRrvVtaTAIVyNWSgZ59SLMmcH/6L4aYv5nrKYuAWx7fTneGGheKuqk55RsV sMv+fHolmmwKVm8tMFksw0atPwL7ZmSm1uObNHCQKdDNSoakC7YpaXa3y8LEzU7I B4h/PsmRpN33ggvsiuzFp9kfEHMy4QazfpoVFFqTLalhTr+XuiNTxj8xdA== =6eNN -----END PGP SIGNATURE----- Merge tag 'for-upstream' of https://gitlab.com/bonzini/qemu into staging * x86 bugfixes * OpenBSD support for naming threads * Refined Python support policy # -----BEGIN PGP SIGNATURE----- # # iQFIBAABCAAyFiEE8TM4V0tmI4mGbHaCv/vSX3jHroMFAmP0wtkUHHBib256aW5p # QHJlZGhhdC5jb20ACgkQv/vSX3jHroNI6QgAjMvEV0N5FZYMpiuQdjebBeV+uHM6 # LThewCQa0cW5jb1X1NFBbOxYlNfE3WQeZqQF+BiVJr5wT2UsyNsPH7wTjsP387vV # juoD7D/XZo8P4Qi+vJWo8XVBrzWEK8QS1P+NxWr+ZnsAhDx2+MR87fVmHtVBW1pI # oDO0iyRrvVtaTAIVyNWSgZ59SLMmcH/6L4aYv5nrKYuAWx7fTneGGheKuqk55RsV # sMv+fHolmmwKVm8tMFksw0atPwL7ZmSm1uObNHCQKdDNSoakC7YpaXa3y8LEzU7I # B4h/PsmRpN33ggvsiuzFp9kfEHMy4QazfpoVFFqTLalhTr+XuiNTxj8xdA== # =6eNN # -----END PGP SIGNATURE----- # gpg: Signature made Tue 21 Feb 2023 13:10:49 GMT # 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] # Primary key fingerprint: 46F5 9FBD 57D6 12E7 BFD4 E2F7 7E15 100C CD36 69B1 # Subkey fingerprint: F133 3857 4B66 2389 866C 7682 BFFB D25F 78C7 AE83 * tag 'for-upstream' of https://gitlab.com/bonzini/qemu: target/i386/gdbstub: Fix a bug about order of FPU stack in 'g' packets. docs: build-platforms: refine requirements on Python build dependencies thread-posix: add support for setting threads name on OpenBSD target/i386: Fix 32-bit AD[CO]X insns in 64-bit mode Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
3f21065f09
|
@ -86,6 +86,38 @@ respective ports repository, while NetBSD will use the pkgsrc repository.
|
|||
For macOS, `Homebrew`_ will be used, although `MacPorts`_ is expected to carry
|
||||
similar versions.
|
||||
|
||||
Some build dependencies may follow less conservative rules:
|
||||
|
||||
Python runtime
|
||||
Distributions with long-term support often provide multiple versions
|
||||
of the Python runtime. While QEMU will initially aim to support the
|
||||
distribution's default runtime, it may later increase its minimum version
|
||||
to any newer python that is available as an option from the vendor.
|
||||
In this case, it will be necessary to use the ``--python`` command line
|
||||
option of the ``configure`` script to point QEMU to a supported
|
||||
version of the Python runtime.
|
||||
|
||||
As of QEMU |version|, the minimum supported version of Python is 3.6.
|
||||
|
||||
Python build dependencies
|
||||
Some of QEMU's build dependencies are written in Python. Usually these
|
||||
are only packaged by distributions for the default Python runtime.
|
||||
If QEMU bumps its minimum Python version and a non-default runtime is
|
||||
required, it may be necessary to fetch python modules from the Python
|
||||
Package Index (PyPI) via ``pip``, in order to build QEMU.
|
||||
|
||||
Optional build dependencies
|
||||
Build components whose absence does not affect the ability to build
|
||||
QEMU may not be available in distros, or may be too old for QEMU's
|
||||
requirements. Many of these, such as the Avocado testing framework
|
||||
or various linters, are written in Python and therefore can also
|
||||
be installed using ``pip``. Cross compilers are another example
|
||||
of optional build-time dependency; in this case it is possible to
|
||||
download them from repositories such as EPEL, to use container-based
|
||||
cross compilation using ``docker`` or ``podman``, or to use pre-built
|
||||
binaries distributed with QEMU.
|
||||
|
||||
|
||||
Windows
|
||||
-------
|
||||
|
||||
|
|
12
meson.build
12
meson.build
|
@ -2129,6 +2129,18 @@ config_host_data.set('CONFIG_PTHREAD_SETNAME_NP_WO_TID', cc.links(gnu_source_pre
|
|||
pthread_create(&thread, 0, f, 0);
|
||||
return 0;
|
||||
}''', dependencies: threads))
|
||||
config_host_data.set('CONFIG_PTHREAD_SET_NAME_NP', cc.links(gnu_source_prefix + '''
|
||||
#include <pthread.h>
|
||||
#include <pthread_np.h>
|
||||
|
||||
static void *f(void *p) { return NULL; }
|
||||
int main(void)
|
||||
{
|
||||
pthread_t thread;
|
||||
pthread_create(&thread, 0, f, 0);
|
||||
pthread_set_name_np(thread, "QEMU");
|
||||
return 0;
|
||||
}''', dependencies: threads))
|
||||
config_host_data.set('CONFIG_PTHREAD_CONDATTR_SETCLOCK', cc.links(gnu_source_prefix + '''
|
||||
#include <pthread.h>
|
||||
#include <time.h>
|
||||
|
|
|
@ -121,7 +121,9 @@ int x86_cpu_gdb_read_register(CPUState *cs, GByteArray *mem_buf, int n)
|
|||
return gdb_get_reg32(mem_buf, env->regs[gpr_map32[n]]);
|
||||
}
|
||||
} else if (n >= IDX_FP_REGS && n < IDX_FP_REGS + 8) {
|
||||
floatx80 *fp = (floatx80 *) &env->fpregs[n - IDX_FP_REGS];
|
||||
int st_index = n - IDX_FP_REGS;
|
||||
int r_index = (st_index + env->fpstt) % 8;
|
||||
floatx80 *fp = &env->fpregs[r_index].d;
|
||||
int len = gdb_get_reg64(mem_buf, cpu_to_le64(fp->low));
|
||||
len += gdb_get_reg16(mem_buf, cpu_to_le16(fp->high));
|
||||
return len;
|
||||
|
|
|
@ -1037,6 +1037,8 @@ static void gen_ADCOX(DisasContext *s, CPUX86State *env, MemOp ot, int cc_op)
|
|||
#ifdef TARGET_X86_64
|
||||
case MO_32:
|
||||
/* If TL is 64-bit just do everything in 64-bit arithmetic. */
|
||||
tcg_gen_ext32u_tl(s->T0, s->T0);
|
||||
tcg_gen_ext32u_tl(s->T1, s->T1);
|
||||
tcg_gen_add_i64(s->T0, s->T0, s->T1);
|
||||
tcg_gen_add_i64(s->T0, s->T0, carry_in);
|
||||
tcg_gen_shri_i64(carry_out, s->T0, 32);
|
||||
|
|
|
@ -12,11 +12,14 @@ ifeq ($(filter %-linux-user, $(TARGET)),$(TARGET))
|
|||
X86_64_TESTS += vsyscall
|
||||
X86_64_TESTS += noexec
|
||||
X86_64_TESTS += cmpxchg
|
||||
X86_64_TESTS += adox
|
||||
TESTS=$(MULTIARCH_TESTS) $(X86_64_TESTS) test-x86_64
|
||||
else
|
||||
TESTS=$(MULTIARCH_TESTS)
|
||||
endif
|
||||
|
||||
adox: CFLAGS=-O2
|
||||
|
||||
run-test-i386-ssse3: QEMU_OPTS += -cpu max
|
||||
run-plugin-test-i386-ssse3-%: QEMU_OPTS += -cpu max
|
||||
|
||||
|
|
|
@ -0,0 +1,69 @@
|
|||
/* See if ADOX give expected results */
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
static uint64_t adoxq(bool *c_out, uint64_t a, uint64_t b, bool c)
|
||||
{
|
||||
asm ("addl $0x7fffffff, %k1\n\t"
|
||||
"adoxq %2, %0\n\t"
|
||||
"seto %b1"
|
||||
: "+r"(a), "=&r"(c) : "r"(b), "1"((int)c));
|
||||
*c_out = c;
|
||||
return a;
|
||||
}
|
||||
|
||||
static uint64_t adoxl(bool *c_out, uint64_t a, uint64_t b, bool c)
|
||||
{
|
||||
asm ("addl $0x7fffffff, %k1\n\t"
|
||||
"adoxl %k2, %k0\n\t"
|
||||
"seto %b1"
|
||||
: "+r"(a), "=&r"(c) : "r"(b), "1"((int)c));
|
||||
*c_out = c;
|
||||
return a;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
uint64_t r;
|
||||
bool c;
|
||||
|
||||
r = adoxq(&c, 0, 0, 0);
|
||||
assert(r == 0);
|
||||
assert(c == 0);
|
||||
|
||||
r = adoxl(&c, 0, 0, 0);
|
||||
assert(r == 0);
|
||||
assert(c == 0);
|
||||
|
||||
r = adoxl(&c, 0x100000000, 0, 0);
|
||||
assert(r == 0);
|
||||
assert(c == 0);
|
||||
|
||||
r = adoxq(&c, 0, 0, 1);
|
||||
assert(r == 1);
|
||||
assert(c == 0);
|
||||
|
||||
r = adoxl(&c, 0, 0, 1);
|
||||
assert(r == 1);
|
||||
assert(c == 0);
|
||||
|
||||
r = adoxq(&c, -1, -1, 0);
|
||||
assert(r == -2);
|
||||
assert(c == 1);
|
||||
|
||||
r = adoxl(&c, -1, -1, 0);
|
||||
assert(r == 0xfffffffe);
|
||||
assert(c == 1);
|
||||
|
||||
r = adoxq(&c, -1, -1, 1);
|
||||
assert(r == -1);
|
||||
assert(c == 1);
|
||||
|
||||
r = adoxl(&c, -1, -1, 1);
|
||||
assert(r == 0xffffffff);
|
||||
assert(c == 1);
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -18,6 +18,10 @@
|
|||
#include "qemu/tsan.h"
|
||||
#include "qemu/bitmap.h"
|
||||
|
||||
#ifdef CONFIG_PTHREAD_SET_NAME_NP
|
||||
#include <pthread_np.h>
|
||||
#endif
|
||||
|
||||
static bool name_threads;
|
||||
|
||||
void qemu_thread_naming(bool enable)
|
||||
|
@ -25,7 +29,8 @@ void qemu_thread_naming(bool enable)
|
|||
name_threads = enable;
|
||||
|
||||
#if !defined CONFIG_PTHREAD_SETNAME_NP_W_TID && \
|
||||
!defined CONFIG_PTHREAD_SETNAME_NP_WO_TID
|
||||
!defined CONFIG_PTHREAD_SETNAME_NP_WO_TID && \
|
||||
!defined CONFIG_PTHREAD_SET_NAME_NP
|
||||
/* This is a debugging option, not fatal */
|
||||
if (enable) {
|
||||
fprintf(stderr, "qemu: thread naming not supported on this host\n");
|
||||
|
@ -480,6 +485,8 @@ static void *qemu_thread_start(void *args)
|
|||
pthread_setname_np(pthread_self(), qemu_thread_args->name);
|
||||
# elif defined(CONFIG_PTHREAD_SETNAME_NP_WO_TID)
|
||||
pthread_setname_np(qemu_thread_args->name);
|
||||
# elif defined(CONFIG_PTHREAD_SET_NAME_NP)
|
||||
pthread_set_name_np(pthread_self(), qemu_thread_args->name);
|
||||
# endif
|
||||
}
|
||||
QEMU_TSAN_ANNOTATE_THREAD_NAME(qemu_thread_args->name);
|
||||
|
|
Loading…
Reference in New Issue