Messages in this thread | | | Subject | Re: [RFC Patch 1/9] Introducing generic hardware breakpoint handler interfaces | From | Richard J Moore <> | Date | Thu, 18 Dec 2008 16:34:11 +0000 |
| |
"K.Prasad" <prasad@linux.vnet.ibm.com> wrote on 17/12/2008 03:47:03:
> [image removed] > > Re: [RFC Patch 1/9] Introducing generic hardware breakpoint handler interfaces > > K.Prasad > > to:. > > David Daney > > 17/12/2008 03:47 > > Cc: > > Linux Kernel Mailing List, Alan Stern, Roland McGrath, akpm, mingo, > Richard J Moore> > > Please respond to prasad > > On Thu, Dec 04, 2008 at 11:38:17AM -0800, David Daney wrote: > > K.Prasad wrote: > > [...] > >> + * len and type values are defined in include/asm/hw_breakpoint.h. > >> + * Available values vary according to the architecture. On i386 the > >> + * possibilities are: > >> + * > >> + * HW_BREAKPOINT_LEN_1 > >> + * HW_BREAKPOINT_LEN_2 > >> + * HW_BREAKPOINT_LEN_4 > >> + * HW_BREAKPOINT_LEN_EXECUTE > >> + * HW_BREAKPOINT_RW > >> + * HW_BREAKPOINT_READ > >> + * HW_BREAKPOINT_EXECUTE > >> + * > >> + * On other architectures HW_BREAKPOINT_LEN_8 may be available, and the > >> + * 1-, 2-, and 4-byte lengths may be unavailable. There also may be > >> + * HW_BREAKPOINT_WRITE. You can use #ifdef to check at compile time. > >> + */ > > > > On MIPS we support breakpoint lengths that are powers of 2 between 8 and > > 4096. Do you really want symbolic values for these? The debuggers have > > to do calculations with the length values, so translating between the > > symbolic values and numeric values would be tedious at best. > > > > > > David Daney > > Given that the possible values for length are finite and small on > x86(just three of them), it was chosen to be defined as constants. > > For architectures such as MIPS where a range of lengths can be possibly > monitored using HW Breakpoints, the arch_validate_hwbkpt_settings() > maybe suitably written to validate the input and the 'length' may also > be specified in numeric terms to the kernel interface (say > register_kernel_hw_breakpoint()). > > Thanks, > K.Prasad >
I think you need to cater for an arch-specific filter that validates the appearance of breakpoint interrupt. On the System Z, for example, one specifies a range using the pair of control registers, one for the start and the other of the end. You might think that this limits you to having only one contiguous range of addresses which generate a h/w bp interrupt. Not so. We use an algorithm, which employes a wrapping range (i.e start addr > end addr) and we continually resize the gap, whenever we take a BP interrupt, to begin at the next valid BP. That way we avoid too many erroneous interrupts and we also benignly filter the erroneous ones.
Other architectures that employ a variable range could do something similar. I'm thinking here of IA64 for example.
The other thing that occurs to me is whether you should also include HW_BREAKPOINT_IO for completeness. Of course not everyone supports breakpointing the I/O address space, but some do, so it ought to be catered
for.
Richard zVM CP Development
| |