Lines Matching defs:breakpoint

31 	breakpoint(NULL),
45 rw_lock_init(&fLock, "breakpoint manager");
53 // delete the installed breakpoint objects
58 // delete underlying software breakpoint
59 if (installedBreakpoint->breakpoint->software)
60 delete installedBreakpoint->breakpoint;
69 // delete the hardware breakpoint objects
70 while (Breakpoint* breakpoint = fHardwareBreakpoints.RemoveHead())
71 delete breakpoint;
82 Breakpoint* breakpoint = new(std::nothrow) Breakpoint;
83 if (breakpoint == NULL)
86 breakpoint->address = 0;
87 breakpoint->installedBreakpoint = NULL;
88 breakpoint->used = false;
89 breakpoint->software = false;
91 fHardwareBreakpoints.Add(breakpoint);
108 // check whether there's already a breakpoint at the address
113 // create the breakpoint object
120 // breakpoint.
121 Breakpoint* breakpoint = _GetUnusedHardwareBreakpoint(false);
122 if (breakpoint != NULL) {
123 status_t error = _InstallHardwareBreakpoint(breakpoint, address);
127 breakpoint->installedBreakpoint = installed;
128 installed->breakpoint = breakpoint;
130 // install a software breakpoint
155 if (installed->breakpoint->software)
156 _UninstallSoftwareBreakpoint(installed->breakpoint);
158 _UninstallHardwareBreakpoint(installed->breakpoint);
180 // We need at least one hardware breakpoint for our breakpoint management.
230 // uninstall underlying hard/software breakpoint
231 if (installedBreakpoint->breakpoint->software)
232 _UninstallSoftwareBreakpoint(installedBreakpoint->breakpoint);
234 _UninstallHardwareBreakpoint(installedBreakpoint->breakpoint);
293 // address of the first possibly intersecting software breakpoint
301 Breakpoint* breakpoint = installed->breakpoint;
302 if (breakpoint->address >= address + size)
305 if (breakpoint->software) {
306 // Software breakpoint intersects -- replace the read data with
307 // the data saved in the breakpoint object.
308 addr_t minAddress = std::max(breakpoint->address, address);
310 breakpoint->address + DEBUG_SOFTWARE_BREAKPOINT_SIZE)
313 breakpoint->softwareData + (minAddress - breakpoint->address),
341 // Get the first breakpoint -- if it starts before the address, we'll
351 Breakpoint* breakpoint = installed->breakpoint;
352 if (breakpoint->address >= address)
355 if (breakpoint->software) {
356 // We've got a breakpoint that is partially intersecting with the
359 breakpoint->address + DEBUG_SOFTWARE_BREAKPOINT_SIZE)
361 memcpy(breakpoint->softwareData + (address - breakpoint->address),
375 Breakpoint* breakpoint = installed->breakpoint;
376 if (breakpoint->address >= address + size)
379 if (breakpoint->software) {
380 // write the data up to the breakpoint (if any)
381 size_t toCopy = breakpoint->address - address;
398 // write to the breakpoint data
400 memcpy(breakpoint->softwareData, buffer, toCopy);
432 // Check whether there's a software breakpoint at the continuation address.
434 if (installed == NULL || !installed->breakpoint->software)
437 // We need to replace the software breakpoint by a hardware one, or
439 Breakpoint* breakpoint = _GetUnusedHardwareBreakpoint(true);
440 if (breakpoint == NULL) {
441 dprintf("Failed to allocate a hardware breakpoint.\n");
445 status_t error = _InstallHardwareBreakpoint(breakpoint, address);
449 _UninstallSoftwareBreakpoint(installed->breakpoint);
451 breakpoint->installedBreakpoint = installed;
452 installed->breakpoint = breakpoint;
461 Breakpoint* breakpoint = it.Next();) {
462 if (!breakpoint->used)
463 return breakpoint;
469 // replace one by a software breakpoint
471 Breakpoint* breakpoint = it.Next();) {
472 if (breakpoint->installedBreakpoint == NULL)
476 breakpoint->installedBreakpoint, breakpoint->address);
480 if (_UninstallHardwareBreakpoint(breakpoint) == B_OK)
481 return breakpoint;
492 Breakpoint* breakpoint = new(std::nothrow) Breakpoint;
493 if (breakpoint == NULL)
495 ObjectDeleter<Breakpoint> breakpointDeleter(breakpoint);
497 breakpoint->address = address;
498 breakpoint->installedBreakpoint = installed;
499 breakpoint->used = true;
500 breakpoint->software = true;
502 // save the memory where the software breakpoint shall be installed
504 status_t error = _ReadMemory(address, breakpoint->softwareData,
511 // write the breakpoint code
518 // breakpoint written partially only -- undo the written part
521 _WriteMemory(address, breakpoint->softwareData, bytesTransferred,
527 installed->breakpoint = breakpoint;
530 TRACE("installed software breakpoint at %#lx\n", address);
537 BreakpointManager::_UninstallSoftwareBreakpoint(Breakpoint* breakpoint)
540 _WriteMemory(breakpoint->address, breakpoint->softwareData,
543 TRACE("uninstalled software breakpoint at %#lx\n", breakpoint->address);
545 delete breakpoint;
551 BreakpointManager::_InstallHardwareBreakpoint(Breakpoint* breakpoint,
559 fHardwareBreakpoints.Remove(breakpoint);
560 fHardwareBreakpoints.Add(breakpoint);
562 TRACE("installed hardware breakpoint at %#lx\n", address);
564 breakpoint->address = address;
565 breakpoint->used = true;
571 BreakpointManager::_UninstallHardwareBreakpoint(Breakpoint* breakpoint)
573 status_t error = arch_clear_breakpoint((void*)breakpoint->address);
577 TRACE("uninstalled hardware breakpoint at %#lx\n", breakpoint->address);
579 breakpoint->used = false;
580 breakpoint->installedBreakpoint = NULL;
603 // We need a hardware breakpoint.
604 watchpoint->breakpoint = _GetUnusedHardwareBreakpoint(true);
605 if (watchpoint->breakpoint == NULL) {
606 dprintf("Failed to allocate a hardware breakpoint for watchpoint.\n");
618 watchpoint->breakpoint->used = true;
629 watchpoint->breakpoint->used = false;