On 18.09.2015 13:32, Peter Maydell wrote: >> +/* Return true if PC matches an installed breakpoint. */ >> > +static inline bool cpu_breakpoint_test(CPUState *cpu, vaddr pc, int mask) >> > +{ >> > + CPUBreakpoint *bp; >> > + >> > + if (unlikely(!QTAILQ_EMPTY(&cpu->breakpoints))) { >> > + QTAILQ_FOREACH(bp, &cpu->breakpoints, entry) { >> > + if (bp->pc == pc && (bp->flags & mask)) { >> > + return true; >> > + } >> > + } >> > + } >> > + return false; >> > +} > This won't work with the fix for ARM breakpoints Sergey currently has > on list: http://patchwork.ozlabs.org/patch/517359/ > where we need to behave differently for "there's a GDB breakpoint > here" and "there's a CPU breakpoint here" (because the complex > conditions on the latter require us to call a helper function to > see if we need to actually generate an EXCP_DEBUG exception). >
This is actually a good idea to move this boilerplate code into a single function. I think the problem can be solved by simply adding an optional parameter to get a reference to the matched breakpoint back from this function. Best regards, Sergey