This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Sorry guys, the prev patch is so ugly. Thanks for teach me clear about the gdbarch_software_single_step, Pedro. I did some extend with your idea. Because record_wait need record_resume_step point out this resume is signal step or continue. if (!step) { /* This is not hard single step. */ if (!gdbarch_software_single_step_p (gdbarch)) { /* This is a normal continue. */ step = 1; } else { /* This arch support soft sigle step. */ if (single_step_breakpoints_inserted ()) { /* This is a soft single step. */ record_resume_step = 1; } else { /* This is a continue. Try to insert a soft single step breakpoint. */ if (!gdbarch_software_single_step (gdbarch, get_current_frame ())) { /* This system don't want use soft single step. Use hard sigle step. */ step = 1; } } } } Shuchuang, please help me try this patch. Thanks. Best regards, Hui 2010-01-04 Hui Zhu <teawater@gmail.com> * breakpoint.c (single_step_breakpoints_inserted): New function. * breakpoint.h (single_step_breakpoints_inserted): Extern. * record.c (record_resume): Add code for software single step. (record_wait): Ditto. On Fri, Dec 25, 2009 at 01:38, Pedro Alves <pedro@codesourcery.com> wrote: > On Wednesday 23 December 2009 09:23:21, Hui Zhu wrote: >> + ? ? ?struct gdbarch *gdbarch = target_thread_architecture (ptid); >> + >> ? ? ? ?record_message (get_current_regcache (), signal); > >> ? ? ? ?record_beneath_to_resume (record_beneath_to_resume_ops, ptid, 1, >> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?signal); > > Why is this resume call still present? > >> + >> + ? ? ? if (gdbarch_software_single_step_p (gdbarch)) >> + ? ? ? ? { >> + ? ? ? ? ? if (!inserted_single_step_breakpoint_p ()) > > Isn't this naming stale? ?I thought you had renamed this. > >> + ? ? ? ? ? ? gdbarch_software_single_step (gdbarch, get_current_frame ()); >> + ? ? ? ? ? record_beneath_to_resume (record_beneath_to_resume_ops, >> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ptid, step, signal); >> + ? ? ? ? ? record_resume_step = 0; >> + ? ? ? ? } >> + ? ? ? else >> + ? ? ? ? record_beneath_to_resume (record_beneath_to_resume_ops, ptid, 1, >> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? signal); >> ? ? ?} >> > > You've got the predicates a bit mixed up. > > ?- gdbarch_software_single_step_p purpose is only "is there or > ? not a gdbarch_software_single_step callback registered in > ? this gdbarch"? ?It returning true does not mean that > ? software single-step should be used for that single-step. > > ?- gdbarch_software_single_step can return false, meaning, > ? no software single-step needs to be used. > > This is how stepping over atomic sequences is handled > currently (grep for deal_with_atomic_sequence): > gdbarch_software_single_step_p returns true, but > gdbarch_software_single_step returns false most > of the times. ?See also infrun.c:maybe_software_singlestep. > > I think you want this: > > ? ? ? if (!step > ? ? ? ? ? && gdbarch_software_single_step_p (gdbarch) > ? ? ? ? ? && !single_step_breakpoints_inserted () > ? ? ? ? ? && gdbarch_software_single_step (gdbarch, get_current_frame ())) > ? ? ? ? record_resume_step = 0; > ? ? ? else > ? ? ? ? record_resume_step = 1; > > ? ? ? record_beneath_to_resume (record_beneath_to_resume_ops, ptid, > ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? record_resume_step, signal); > > If `step' is true when record_resume is called, and so is > gdbarch_software_single_step_p, then it must be that infrun.c > already determined that gdbarch_software_single_step returns > false, otherwise, `step' would be false (maybe_software_singlestep). > > If `step' is false (the user is requesting a continue), and > no single-step breakpoints are inserted yet, but, > gdbarch_software_single_step returns false, we have ourselves > an arch/target combo that only wants software single-stepping > for atomic sequences, e.g., MIPS (non-linux), or PPC. ?If > so, we should force hardware single-step in the target > beneath (set record_resume_step to 1). > > -- > Pedro Alves >
Attachment:
prec_software_single_step.txt
Description: Text document
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |