mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-11-05 20:35:44 +00:00
gdbstub: Report the actual qemu-user pid
Currently qemu-user reports pid 1 to GDB. Resolve the TODO and report the actual PID. Using getpid() relies on the assumption that there is only one GDBProcess. Add an assertion to make sure that future changes don't break it. Reviewed-by: Alex Bennée <alex.bennee@linaro.org> Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com> Message-Id: <20230621203627.1808446-6-iii@linux.ibm.com> Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Message-Id: <20230630180423.558337-36-alex.bennee@linaro.org>
This commit is contained in:
parent
a3fcc111fa
commit
dc14a7a6e9
1 changed files with 17 additions and 8 deletions
|
@ -202,13 +202,16 @@ void gdb_memtox(GString *buf, const char *mem, int len)
|
|||
|
||||
static uint32_t gdb_get_cpu_pid(CPUState *cpu)
|
||||
{
|
||||
/* TODO: In user mode, we should use the task state PID */
|
||||
#ifdef CONFIG_USER_ONLY
|
||||
return getpid();
|
||||
#else
|
||||
if (cpu->cluster_index == UNASSIGNED_CLUSTER_INDEX) {
|
||||
/* Return the default process' PID */
|
||||
int index = gdbserver_state.process_num - 1;
|
||||
return gdbserver_state.processes[index].pid;
|
||||
}
|
||||
return cpu->cluster_index + 1;
|
||||
#endif
|
||||
}
|
||||
|
||||
GDBProcess *gdb_get_process(uint32_t pid)
|
||||
|
@ -2137,19 +2140,25 @@ void gdb_read_byte(uint8_t ch)
|
|||
void gdb_create_default_process(GDBState *s)
|
||||
{
|
||||
GDBProcess *process;
|
||||
int max_pid = 0;
|
||||
int pid;
|
||||
|
||||
#ifdef CONFIG_USER_ONLY
|
||||
assert(gdbserver_state.process_num == 0);
|
||||
pid = getpid();
|
||||
#else
|
||||
if (gdbserver_state.process_num) {
|
||||
max_pid = s->processes[s->process_num - 1].pid;
|
||||
pid = s->processes[s->process_num - 1].pid;
|
||||
} else {
|
||||
pid = 0;
|
||||
}
|
||||
/* We need an available PID slot for this process */
|
||||
assert(pid < UINT32_MAX);
|
||||
pid++;
|
||||
#endif
|
||||
|
||||
s->processes = g_renew(GDBProcess, s->processes, ++s->process_num);
|
||||
process = &s->processes[s->process_num - 1];
|
||||
|
||||
/* We need an available PID slot for this process */
|
||||
assert(max_pid < UINT32_MAX);
|
||||
|
||||
process->pid = max_pid + 1;
|
||||
process->pid = pid;
|
||||
process->attached = false;
|
||||
process->target_xml[0] = '\0';
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue