> On Aug 26, 2021, at 10:47 PM, Philippe Mathieu-Daudé wrote: > > On 8/26/21 11:11 PM, imp@bsdimp.com wrote: >> From: Warner Losh >> >> cpu_copy shouldbe called when processes are creating new threads. It > > Typo "should be" > >> copies the current state of the CPU to a new cpu state needed for the >> new thread. >> >> Signed-off-by: Stacey Son >> Signed-off-by: Warner Losh >> Signed-off-by: Justin Hibbits >> Reviewed-by: Richard Henderson >> --- >> bsd-user/main.c | 30 ++++++++++++++++++++++++++++++ >> 1 file changed, 30 insertions(+) >> >> diff --git a/bsd-user/main.c b/bsd-user/main.c >> index e2ed9e32ba..b35bcf4d1e 100644 >> --- a/bsd-user/main.c >> +++ b/bsd-user/main.c >> @@ -180,6 +180,36 @@ void init_task_state(TaskState *ts) >> ts->sigqueue_table[i].next = NULL; >> } >> >> +CPUArchState *cpu_copy(CPUArchState *env) >> +{ >> + CPUState *cpu = env_cpu(env); >> + CPUState *new_cpu = cpu_create(cpu_type); >> + CPUArchState *new_env = new_cpu->env_ptr; >> + CPUBreakpoint *bp; >> + CPUWatchpoint *wp; >> + >> + /* Reset non arch specific state */ >> + cpu_reset(new_cpu); >> + >> + memcpy(new_env, env, sizeof(CPUArchState)); >> + >> + /* >> + * Clone all break/watchpoints. >> + * Note: Once we support ptrace with hw-debug register access, make sure >> + * BP_CPU break/watchpoints are handled correctly on clone. >> + */ >> + QTAILQ_INIT(&cpu->breakpoints); >> + QTAILQ_INIT(&cpu->watchpoints); >> + QTAILQ_FOREACH(bp, &cpu->breakpoints, entry) { >> + cpu_breakpoint_insert(new_cpu, bp->pc, bp->flags, NULL); >> + } >> + QTAILQ_FOREACH(wp, &cpu->watchpoints, entry) { >> + cpu_watchpoint_insert(new_cpu, wp->vaddr, wp->len, wp->flags, NULL); >> + } >> + >> + return new_env; >> +} > > But where is it called? It’s in the bsd-user fork’d proc code: https://github.com/qemu-bsd-user/qemu-bsd-user/blob/079d45942db8d1038806cb459992b4f016b52b51/bsd-user/freebsd/os-thread.c#L1566 Is where it’s called from. I wanted to get it out of the way in this review since I was trying to get all the changes to main.c done, but if you’d like, I can drop it and submit in the next round. Warner