Skip to content

Commit

Permalink
gdbstub: Report the actual qemu-user pid
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
iii-i authored and stsquad committed Jul 3, 2023
1 parent a3fcc11 commit dc14a7a
Showing 1 changed file with 17 additions and 8 deletions.
25 changes: 17 additions & 8 deletions gdbstub/gdbstub.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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';
}
Expand Down

0 comments on commit dc14a7a

Please sign in to comment.