[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 03/26] gdbstub: fix gdb_get_cpu(s, pid, tid) when pid
From: |
Peter Maydell |
Subject: |
[Qemu-devel] [PULL 03/26] gdbstub: fix gdb_get_cpu(s, pid, tid) when pid and/or tid are 0 |
Date: |
Mon, 28 Jan 2019 18:10:24 +0000 |
From: Luc Michel <address@hidden>
a TID or PID value means "any thread" (resp. "any process"). This commit
fixes the different combinations when at least one value is 0.
When both are 0, the function now returns the first attached CPU,
instead of the CPU with TID 1, which is not necessarily attached or even
existent.
When PID is specified but TID is 0, the function returns the first CPU
in the process, or NULL if the process does not exist or is not
attached.
In other cases, it returns the corresponding CPU, while ignoring the PID
check when PID is 0.
Reported-by: Peter Maydell <address@hidden>
Signed-off-by: Luc Michel <address@hidden>
Reviewed-by: Peter Maydell <address@hidden>
Message-id: address@hidden
Signed-off-by: Peter Maydell <address@hidden>
---
gdbstub.c | 72 +++++++++++++++++++++++++++++++++----------------------
1 file changed, 43 insertions(+), 29 deletions(-)
diff --git a/gdbstub.c b/gdbstub.c
index bfc7afb5096..d4cc6ecf99b 100644
--- a/gdbstub.c
+++ b/gdbstub.c
@@ -756,35 +756,6 @@ static CPUState *gdb_next_cpu_in_process(const GDBState
*s, CPUState *cpu)
return cpu;
}
-static CPUState *gdb_get_cpu(const GDBState *s, uint32_t pid, uint32_t tid)
-{
- GDBProcess *process;
- CPUState *cpu;
-
- if (!tid) {
- /* 0 means any thread, we take the first one */
- tid = 1;
- }
-
- cpu = find_cpu(tid);
-
- if (cpu == NULL) {
- return NULL;
- }
-
- process = gdb_get_cpu_process(s, cpu);
-
- if (process->pid != pid) {
- return NULL;
- }
-
- if (!process->attached) {
- return NULL;
- }
-
- return cpu;
-}
-
/* Return the cpu following @cpu, while ignoring unattached processes. */
static CPUState *gdb_next_attached_cpu(const GDBState *s, CPUState *cpu)
{
@@ -814,6 +785,49 @@ static CPUState *gdb_first_attached_cpu(const GDBState *s)
return cpu;
}
+static CPUState *gdb_get_cpu(const GDBState *s, uint32_t pid, uint32_t tid)
+{
+ GDBProcess *process;
+ CPUState *cpu;
+
+ if (!pid && !tid) {
+ /* 0 means any process/thread, we take the first attached one */
+ return gdb_first_attached_cpu(s);
+ } else if (pid && !tid) {
+ /* any thread in a specific process */
+ process = gdb_get_process(s, pid);
+
+ if (process == NULL) {
+ return NULL;
+ }
+
+ if (!process->attached) {
+ return NULL;
+ }
+
+ return get_first_cpu_in_process(s, process);
+ } else {
+ /* a specific thread */
+ cpu = find_cpu(tid);
+
+ if (cpu == NULL) {
+ return NULL;
+ }
+
+ process = gdb_get_cpu_process(s, cpu);
+
+ if (pid && process->pid != pid) {
+ return NULL;
+ }
+
+ if (!process->attached) {
+ return NULL;
+ }
+
+ return cpu;
+ }
+}
+
static const char *get_feature_xml(const GDBState *s, const char *p,
const char **newp, GDBProcess *process)
{
--
2.20.1
- [Qemu-devel] [PULL 00/26] target-arm queue, Peter Maydell, 2019/01/28
- [Qemu-devel] [PULL 01/26] target/arm: Fix validation of 32-bit address spaces for aa32, Peter Maydell, 2019/01/28
- [Qemu-devel] [PULL 03/26] gdbstub: fix gdb_get_cpu(s, pid, tid) when pid and/or tid are 0,
Peter Maydell <=
- [Qemu-devel] [PULL 02/26] target/arm: v8m: Ensure IDAU is respected if SAU is disabled, Peter Maydell, 2019/01/28
- [Qemu-devel] [PULL 08/26] MAINTAINERS: update microbit ARM board files, Peter Maydell, 2019/01/28
- [Qemu-devel] [PULL 05/26] tests/microbit-test: add TWI stub device test, Peter Maydell, 2019/01/28
- [Qemu-devel] [PULL 07/26] accel/tcg/user-exec: Don't parse aarch64 insns to test for read vs write, Peter Maydell, 2019/01/28
- [Qemu-devel] [PULL 09/26] target/arm: Don't clear supported PMU events when initializing PMCEID1, Peter Maydell, 2019/01/28
- [Qemu-devel] [PULL 10/26] memory: add memory_region_flush_rom_device(), Peter Maydell, 2019/01/28
- [Qemu-devel] [PULL 06/26] exec.c: Use correct attrs in cpu_memory_rw_debug(), Peter Maydell, 2019/01/28
- [Qemu-devel] [PULL 04/26] arm: Stub out NRF51 TWI magnetometer/accelerometer detection, Peter Maydell, 2019/01/28
- [Qemu-devel] [PULL 12/26] arm: Instantiate NRF51 special NVM's and NVMC, Peter Maydell, 2019/01/28
- [Qemu-devel] [PULL 11/26] hw/nvram/nrf51_nvm: Add nRF51 non-volatile memories, Peter Maydell, 2019/01/28