linux-user: Fix shmat(NULL) for host != guest page size
tcg/optimize: Fix sign_mask for logical right-shift accel/tcg: Use CPUState.get_pc in cpu_io_recompile disas: Show opcodes for target_disas and monitor_disas -----BEGIN PGP SIGNATURE----- iQFRBAABCgA7FiEEekgeeIaLTbaoWgXAZN846K9+IV8FAmYHPmwdHHJpY2hhcmQu aGVuZGVyc29uQGxpbmFyby5vcmcACgkQZN846K9+IV86VAf6AlcoLrvyN4u4bV4V REIXe8y+IsqvNdNE6z1KRLdqbBzHHzlDD9TesX8QNmg1w8WxvBNg9Iv0cWeBgIyN C/dpXVpNWbsfqtMLKIrBUkKiIyrQtxJC73HyoF0eqGftX5WxqYF/NCfXRHQFUdDP wvGGq784IL4kLVMHX4fXB7Vmosei51cobnENo0b4A2fzDOGAFfQd38MSnPlL1+xb BB+vV1hRFsf0Uihmvgk5AIdWlHxfqMWHq5rGV7ND26OTjZkOaPk3AeaX/eBCZd+8 /gBd8Ok56WrVckz1hBMndRXwRjOQaowrNi1+vN3v6fqgNU227MaZ+hvvMCo7GSM7 NhyQ9g== =Y35A -----END PGP SIGNATURE----- Merge tag 'pull-tcg-20240329' of https://gitlab.com/rth7680/qemu into staging linux-user: Fix shmat(NULL) for host != guest page size tcg/optimize: Fix sign_mask for logical right-shift accel/tcg: Use CPUState.get_pc in cpu_io_recompile disas: Show opcodes for target_disas and monitor_disas # -----BEGIN PGP SIGNATURE----- # # iQFRBAABCgA7FiEEekgeeIaLTbaoWgXAZN846K9+IV8FAmYHPmwdHHJpY2hhcmQu # aGVuZGVyc29uQGxpbmFyby5vcmcACgkQZN846K9+IV86VAf6AlcoLrvyN4u4bV4V # REIXe8y+IsqvNdNE6z1KRLdqbBzHHzlDD9TesX8QNmg1w8WxvBNg9Iv0cWeBgIyN # C/dpXVpNWbsfqtMLKIrBUkKiIyrQtxJC73HyoF0eqGftX5WxqYF/NCfXRHQFUdDP # wvGGq784IL4kLVMHX4fXB7Vmosei51cobnENo0b4A2fzDOGAFfQd38MSnPlL1+xb # BB+vV1hRFsf0Uihmvgk5AIdWlHxfqMWHq5rGV7ND26OTjZkOaPk3AeaX/eBCZd+8 # /gBd8Ok56WrVckz1hBMndRXwRjOQaowrNi1+vN3v6fqgNU227MaZ+hvvMCo7GSM7 # NhyQ9g== # =Y35A # -----END PGP SIGNATURE----- # gpg: Signature made Fri 29 Mar 2024 22:19:24 GMT # gpg: using RSA key 7A481E78868B4DB6A85A05C064DF38E8AF7E215F # gpg: issuer "richard.henderson@linaro.org" # gpg: Good signature from "Richard Henderson <richard.henderson@linaro.org>" [full] # Primary key fingerprint: 7A48 1E78 868B 4DB6 A85A 05C0 64DF 38E8 AF7E 215F * tag 'pull-tcg-20240329' of https://gitlab.com/rth7680/qemu: accel/tcg: Use CPUState.get_pc in cpu_io_recompile disas: Show opcodes for target_disas and monitor_disas tcg/optimize: Fix sign_mask for logical right-shift tests/tcg: Test shmat(NULL) linux-user: Fix shmat(NULL) for h != g linux-user: Fix shmat() strace linux-user: Fix semctl() strace Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
b9dbf6f9bf
@ -634,7 +634,7 @@ void cpu_io_recompile(CPUState *cpu, uintptr_t retaddr)
|
||||
cpu->cflags_next_tb = curr_cflags(cpu) | CF_MEMI_ONLY | n;
|
||||
|
||||
if (qemu_loglevel_mask(CPU_LOG_EXEC)) {
|
||||
vaddr pc = log_pc(cpu, tb);
|
||||
vaddr pc = cpu->cc->get_pc(cpu);
|
||||
if (qemu_log_in_addr_range(pc)) {
|
||||
qemu_log("cpu_io_recompile: rewound execution of TB to %016"
|
||||
VADDR_PRIx "\n", pc);
|
||||
|
@ -34,6 +34,7 @@ void monitor_disas(Monitor *mon, CPUState *cpu, uint64_t pc,
|
||||
disas_initialize_debug_target(&s, cpu);
|
||||
s.info.fprintf_func = disas_gstring_printf;
|
||||
s.info.stream = (FILE *)ds; /* abuse this slot */
|
||||
s.info.show_opcodes = true;
|
||||
|
||||
if (is_physical) {
|
||||
s.info.read_memory_func = physical_read_memory;
|
||||
|
@ -211,6 +211,7 @@ void target_disas(FILE *out, CPUState *cpu, uint64_t code, size_t size)
|
||||
s.info.stream = out;
|
||||
s.info.buffer_vma = code;
|
||||
s.info.buffer_length = size;
|
||||
s.info.show_opcodes = true;
|
||||
|
||||
if (s.info.cap_arch >= 0 && cap_disas_target(&s.info, code, size)) {
|
||||
return;
|
||||
|
@ -1354,7 +1354,7 @@ abi_ulong target_shmat(CPUArchState *cpu_env, int shmid,
|
||||
if (h_len != t_len) {
|
||||
int mmap_p = PROT_READ | (shmflg & SHM_RDONLY ? 0 : PROT_WRITE);
|
||||
int mmap_f = MAP_PRIVATE | MAP_ANONYMOUS
|
||||
| (reserved_va || (shmflg & SHM_REMAP)
|
||||
| (reserved_va || mapped || (shmflg & SHM_REMAP)
|
||||
? MAP_FIXED : MAP_FIXED_NOREPLACE);
|
||||
|
||||
test = mmap(want, m_len, mmap_p, mmap_f, -1, 0);
|
||||
|
@ -657,7 +657,6 @@ print_newselect(CPUArchState *cpu_env, const struct syscallname *name,
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef TARGET_NR_semctl
|
||||
static void
|
||||
print_semctl(CPUArchState *cpu_env, const struct syscallname *name,
|
||||
abi_long arg1, abi_long arg2, abi_long arg3,
|
||||
@ -668,7 +667,6 @@ print_semctl(CPUArchState *cpu_env, const struct syscallname *name,
|
||||
print_ipc_cmd(arg3);
|
||||
qemu_log(",0x" TARGET_ABI_FMT_lx ")", arg4);
|
||||
}
|
||||
#endif
|
||||
|
||||
static void
|
||||
print_shmat(CPUArchState *cpu_env, const struct syscallname *name,
|
||||
@ -698,14 +696,12 @@ print_ipc(CPUArchState *cpu_env, const struct syscallname *name,
|
||||
{
|
||||
switch(arg1) {
|
||||
case IPCOP_semctl:
|
||||
qemu_log("semctl(" TARGET_ABI_FMT_ld "," TARGET_ABI_FMT_ld ",",
|
||||
arg1, arg2);
|
||||
print_ipc_cmd(arg3);
|
||||
qemu_log(",0x" TARGET_ABI_FMT_lx ")", arg4);
|
||||
print_semctl(cpu_env, &(const struct syscallname){ .name = "semctl" },
|
||||
arg2, arg3, arg4, arg5, 0, 0);
|
||||
break;
|
||||
case IPCOP_shmat:
|
||||
print_shmat(cpu_env, &(const struct syscallname){ .name = "shmat" },
|
||||
arg1, arg4, arg2, 0, 0, 0);
|
||||
arg2, arg5, arg3, 0, 0, 0);
|
||||
break;
|
||||
default:
|
||||
qemu_log(("%s("
|
||||
|
@ -2376,7 +2376,7 @@ static bool fold_shift(OptContext *ctx, TCGOp *op)
|
||||
* will not reduced the number of input sign repetitions.
|
||||
*/
|
||||
sign = (s_mask & -s_mask) >> 1;
|
||||
if (!(z_mask & sign)) {
|
||||
if (sign && !(z_mask & sign)) {
|
||||
ctx->s_mask = s_mask;
|
||||
}
|
||||
break;
|
||||
|
@ -10,6 +10,7 @@ VPATH += $(AARCH64_SRC)
|
||||
|
||||
# Base architecture tests
|
||||
AARCH64_TESTS=fcvt pcalign-a64 lse2-fault
|
||||
AARCH64_TESTS += test-2248
|
||||
|
||||
fcvt: LDFLAGS+=-lm
|
||||
|
||||
|
28
tests/tcg/aarch64/test-2248.c
Normal file
28
tests/tcg/aarch64/test-2248.c
Normal file
@ -0,0 +1,28 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/* See https://gitlab.com/qemu-project/qemu/-/issues/2248 */
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
__attribute__((noinline))
|
||||
long test(long x, long y, long sh)
|
||||
{
|
||||
long r;
|
||||
asm("cmp %1, %2\n\t"
|
||||
"cset x12, lt\n\t"
|
||||
"and w11, w12, #0xff\n\t"
|
||||
"cmp w11, #0\n\t"
|
||||
"csetm x14, ne\n\t"
|
||||
"lsr x13, x14, %3\n\t"
|
||||
"sxtb %0, w13"
|
||||
: "=r"(r)
|
||||
: "r"(x), "r"(y), "r"(sh)
|
||||
: "x11", "x12", "x13", "x14");
|
||||
return r;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
long r = test(0, 1, 2);
|
||||
assert(r == -1);
|
||||
return 0;
|
||||
}
|
38
tests/tcg/multiarch/linux/linux-shmat-null.c
Normal file
38
tests/tcg/multiarch/linux/linux-shmat-null.c
Normal file
@ -0,0 +1,38 @@
|
||||
/*
|
||||
* Test shmat(NULL).
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0-or-later
|
||||
*/
|
||||
#include <assert.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/ipc.h>
|
||||
#include <sys/shm.h>
|
||||
|
||||
int main(void)
|
||||
{
|
||||
int shmid;
|
||||
char *p;
|
||||
int err;
|
||||
|
||||
/* Create, attach and intialize shared memory. */
|
||||
shmid = shmget(IPC_PRIVATE, 1, IPC_CREAT | 0600);
|
||||
assert(shmid != -1);
|
||||
p = shmat(shmid, NULL, 0);
|
||||
assert(p != (void *)-1);
|
||||
*p = 42;
|
||||
|
||||
/* Reattach, check that the value is still there. */
|
||||
err = shmdt(p);
|
||||
assert(err == 0);
|
||||
p = shmat(shmid, NULL, 0);
|
||||
assert(p != (void *)-1);
|
||||
assert(*p == 42);
|
||||
|
||||
/* Detach. */
|
||||
err = shmdt(p);
|
||||
assert(err == 0);
|
||||
err = shmctl(shmid, IPC_RMID, NULL);
|
||||
assert(err == 0);
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
Loading…
Reference in New Issue
Block a user