RFC : Handling breakpoints on archs. with imprecise exceptions.

Ramana Radhakrishnan ramana.radhakrishnan@codito.com
Thu Mar 24 19:46:00 GMT 2005


Hi,

While looking at a GDB port to a processor that has 
imprecise exceptions/ interrupts i.e. the equivalent of a 
software breakpoint would require 4 instructions to stop. 
With my research I was unable to find any GDB port that 
needed to handle such a case.

The mechanism that is in mind is the following for setting 
breakpoints.


Description
------------

Maintain a separate breakpoint table to which control would 
branch to from the debuggee. So gdb's breakpoint instruction 
is replaced by a branch to the corresponding breakpoint 
table for the

1 . Replace the instruction with a branch to an entry in a 
breakpoint table which already contains the necessary 
instructions for this purpose. So all that 
breakpoint_from_pc does is to encode this branch instruction 
and return this as the breakpoint instruction.

2.  The breakpoint once hit gets informed to gdb as a 
breakpoint being hit at some location in the breakpoint 
table. So when GDB checks for a breakpoint as having been 
hit the PC it should use should be the value of the PC at 
which the breakpoint was actually set.

GDB specifics.:
---------------

a. Define gdbarch_adjust_breakpoint_address in the backend 
to store the mapping in the backend for the PC at which 
breakpoint has been set to the actual value for the PC where 
the breakpoint would be reported to have been hit.

b. Define deprecated_target_wait_hook in the backend to 
restore the actual value of the PC for GDB to continue with 
its work.However as this is a deprecated hook I would not 
like to use this in a new port.

c. Add a new notify_backend_breakpoint_deleted_hook since 
the backend needs notification for the breakpoint being 
deleted and hence free an entry in the breakpoint table.



cheers
Ramana

-- 
Ramana Radhakrishnan
GNU Tools
codito ergo sum (www.codito.com)



More information about the Gdb mailing list