accel/tcg: Avoid reading too much in load_atom_{2,4}
tests/tcg: ensure system-mode gdb tests start stopped gdbstub: more fixes for client Ctrl-C handling -----BEGIN PGP SIGNATURE----- iQFRBAABCgA7FiEEekgeeIaLTbaoWgXAZN846K9+IV8FAmTVJ4EdHHJpY2hhcmQu aGVuZGVyc29uQGxpbmFyby5vcmcACgkQZN846K9+IV+/iAf9EUojONGO1FQCUokR +8kfHFaGH5R5U4v6Zd6xlwHt94iagW8s+DdpM/YdmgZFxQ5jglCCsLOXQYtJ/HPu McKRv86Yr264ysrwYzTuyOLIC585UU0KzYbGBQvjCSeQ43Au5bR/3ec35Lwgm7OO eukLdpmuD4QoSgBmVgkbziKH1zaX8NjgPoWGfFqxfzzWUZBfU4VfyLgGKw2gtqoz fMTORiqbnzSvQfYINNJ0qBTyXWm0YmydDzaK6zfBrsCzdMk3JYksxgneItvqgRar A5UAYUPhBPftIyTAnI3PQo+siyuaDhFRU9BwHb25a/pkuOUg8PBFO2HruseLmmdl bPcnhQ== =7c0w -----END PGP SIGNATURE----- Merge tag 'pull-tcg-20230810' of https://gitlab.com/rth7680/qemu into staging accel/tcg: Avoid reading too much in load_atom_{2,4} tests/tcg: ensure system-mode gdb tests start stopped gdbstub: more fixes for client Ctrl-C handling # -----BEGIN PGP SIGNATURE----- # # iQFRBAABCgA7FiEEekgeeIaLTbaoWgXAZN846K9+IV8FAmTVJ4EdHHJpY2hhcmQu # aGVuZGVyc29uQGxpbmFyby5vcmcACgkQZN846K9+IV+/iAf9EUojONGO1FQCUokR # +8kfHFaGH5R5U4v6Zd6xlwHt94iagW8s+DdpM/YdmgZFxQ5jglCCsLOXQYtJ/HPu # McKRv86Yr264ysrwYzTuyOLIC585UU0KzYbGBQvjCSeQ43Au5bR/3ec35Lwgm7OO # eukLdpmuD4QoSgBmVgkbziKH1zaX8NjgPoWGfFqxfzzWUZBfU4VfyLgGKw2gtqoz # fMTORiqbnzSvQfYINNJ0qBTyXWm0YmydDzaK6zfBrsCzdMk3JYksxgneItvqgRar # A5UAYUPhBPftIyTAnI3PQo+siyuaDhFRU9BwHb25a/pkuOUg8PBFO2HruseLmmdl # bPcnhQ== # =7c0w # -----END PGP SIGNATURE----- # gpg: Signature made Thu 10 Aug 2023 11:08:01 AM PDT # gpg: using RSA key 7A481E78868B4DB6A85A05C064DF38E8AF7E215F # gpg: issuer "richard.henderson@linaro.org" # gpg: Good signature from "Richard Henderson <richard.henderson@linaro.org>" [ultimate] * tag 'pull-tcg-20230810' of https://gitlab.com/rth7680/qemu: gdbstub: don't complain about preemptive ACK chars gdbstub: more fixes for client Ctrl-C handling tests/tcg: ensure system-mode gdb tests start stopped accel/tcg: Avoid reading too much in load_atom_{2,4} Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
commit
70b73990d5
@ -404,7 +404,10 @@ static uint16_t load_atom_2(CPUArchState *env, uintptr_t ra,
|
||||
return load_atomic2(pv);
|
||||
}
|
||||
if (HAVE_ATOMIC128_RO) {
|
||||
return load_atom_extract_al16_or_al8(pv, 2);
|
||||
intptr_t left_in_page = -(pi | TARGET_PAGE_MASK);
|
||||
if (likely(left_in_page > 8)) {
|
||||
return load_atom_extract_al16_or_al8(pv, 2);
|
||||
}
|
||||
}
|
||||
|
||||
atmax = required_atomicity(env, pi, memop);
|
||||
@ -443,7 +446,10 @@ static uint32_t load_atom_4(CPUArchState *env, uintptr_t ra,
|
||||
return load_atomic4(pv);
|
||||
}
|
||||
if (HAVE_ATOMIC128_RO) {
|
||||
return load_atom_extract_al16_or_al8(pv, 4);
|
||||
intptr_t left_in_page = -(pi | TARGET_PAGE_MASK);
|
||||
if (likely(left_in_page > 8)) {
|
||||
return load_atom_extract_al16_or_al8(pv, 4);
|
||||
}
|
||||
}
|
||||
|
||||
atmax = required_atomicity(env, pi, memop);
|
||||
|
@ -2059,9 +2059,10 @@ void gdb_read_byte(uint8_t ch)
|
||||
* here, but it does expect a stop reply.
|
||||
*/
|
||||
if (ch != 0x03) {
|
||||
warn_report("gdbstub: client sent packet while target running\n");
|
||||
trace_gdbstub_err_unexpected_runpkt(ch);
|
||||
} else {
|
||||
gdbserver_state.allow_stop_reply = true;
|
||||
}
|
||||
gdbserver_state.allow_stop_reply = true;
|
||||
vm_stop(RUN_STATE_PAUSED);
|
||||
} else
|
||||
#endif
|
||||
@ -2073,6 +2074,11 @@ void gdb_read_byte(uint8_t ch)
|
||||
gdbserver_state.line_buf_index = 0;
|
||||
gdbserver_state.line_sum = 0;
|
||||
gdbserver_state.state = RS_GETLINE;
|
||||
} else if (ch == '+') {
|
||||
/*
|
||||
* do nothing, gdb may preemptively send out ACKs on
|
||||
* initial connection
|
||||
*/
|
||||
} else {
|
||||
trace_gdbstub_err_garbage(ch);
|
||||
}
|
||||
|
@ -26,6 +26,7 @@ gdbstub_err_invalid_repeat(uint8_t ch) "got invalid RLE count: 0x%02x"
|
||||
gdbstub_err_invalid_rle(void) "got invalid RLE sequence"
|
||||
gdbstub_err_checksum_invalid(uint8_t ch) "got invalid command checksum digit: 0x%02x"
|
||||
gdbstub_err_checksum_incorrect(uint8_t expected, uint8_t got) "got command packet with incorrect checksum, expected=0x%02x, received=0x%02x"
|
||||
gdbstub_err_unexpected_runpkt(uint8_t ch) "unexpected packet (0x%02x) while target running"
|
||||
|
||||
# softmmu.c
|
||||
gdbstub_hit_watchpoint(const char *type, int cpu_gdb_index, uint64_t vaddr) "Watchpoint hit, type=\"%s\" cpu=%d, vaddr=0x%" PRIx64 ""
|
||||
|
@ -69,13 +69,10 @@ if __name__ == '__main__':
|
||||
|
||||
# Launch QEMU with binary
|
||||
if "system" in args.qemu:
|
||||
cmd = "%s %s %s -gdb unix:path=%s,server=on" % (args.qemu,
|
||||
args.qargs,
|
||||
args.binary,
|
||||
socket_name)
|
||||
cmd = f'{args.qemu} {args.qargs} {args.binary}' \
|
||||
f' -S -gdb unix:path={socket_name},server=on'
|
||||
else:
|
||||
cmd = "%s %s -g %s %s" % (args.qemu, args.qargs, socket_name,
|
||||
args.binary)
|
||||
cmd = f'{args.qemu} {args.qargs} -g {socket_name} {args.binary}'
|
||||
|
||||
log(output, "QEMU CMD: %s" % (cmd))
|
||||
inferior = subprocess.Popen(shlex.split(cmd))
|
||||
|
@ -9,7 +9,7 @@ AARCH64_SRC=$(SRC_PATH)/tests/tcg/aarch64
|
||||
VPATH += $(AARCH64_SRC)
|
||||
|
||||
# Base architecture tests
|
||||
AARCH64_TESTS=fcvt pcalign-a64
|
||||
AARCH64_TESTS=fcvt pcalign-a64 lse2-fault
|
||||
|
||||
fcvt: LDFLAGS+=-lm
|
||||
|
||||
|
38
tests/tcg/aarch64/lse2-fault.c
Normal file
38
tests/tcg/aarch64/lse2-fault.c
Normal file
@ -0,0 +1,38 @@
|
||||
#include <sys/mman.h>
|
||||
#include <sys/shm.h>
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
int psize = getpagesize();
|
||||
int id;
|
||||
void *p;
|
||||
|
||||
/*
|
||||
* We need a shared mapping to enter CF_PARALLEL mode.
|
||||
* The easiest way to get that is shmat.
|
||||
*/
|
||||
id = shmget(IPC_PRIVATE, 2 * psize, IPC_CREAT | 0600);
|
||||
if (id < 0) {
|
||||
perror("shmget");
|
||||
return 2;
|
||||
}
|
||||
p = shmat(id, NULL, 0);
|
||||
if (p == MAP_FAILED) {
|
||||
perror("shmat");
|
||||
return 2;
|
||||
}
|
||||
|
||||
/* Protect the second page. */
|
||||
if (mprotect(p + psize, psize, PROT_NONE) < 0) {
|
||||
perror("mprotect");
|
||||
return 2;
|
||||
}
|
||||
|
||||
/*
|
||||
* Load 4 bytes, 6 bytes from the end of the page.
|
||||
* On success this will load 0 from the newly allocated shm.
|
||||
*/
|
||||
return *(int *)(p + psize - 6);
|
||||
}
|
Loading…
Reference in New Issue
Block a user