Skip to content
  • Mike Dunn's avatar
    xscale: check that wp length does not exceed address · ebfb2f4f
    Mike Dunn authored
    
    
    Hi everyone,
    
    A while back I sent in a patch that adds support for watchpoint lengths greater
    than four on xscale.  It's been working well, until the other day, when it
    caused an unexpected debug exception.  Looking into this I realized there is a
    case where it breaks: when the length arg is greater than the base address.
    This is a consequence of the way the hardware works.  Don't see a work-around,
    so I added code to xscale_add_watchpoint() to check for and disallow this
    combination.
    
    Some more detail... xscale watchpoint hardware does not support a length
    directly.  Instead, a mask value can be specified (not to be confused with the
    optional mask arg to the wp command, which xscale does not support).  Any bits
    set in the mask are ignored when the watchpoint hardware compares the access
    address to the watchpoint address.  So as long as the length is a power of two,
    setting the mask to length-1 effectively specifies the length.  Or so I thought,
    until I realized that if the length exceeds the base address, *all* bits of the
    base address are ignored by the comaparator, and the watchpoint range
    effectively becomes 0 .. length.
    
    Questions, comments, criticisms gratefully received.
    
    Thanks,
    Mike
    
    Signed-off-by: default avatarMike Dunn <mikedunn@newsguy.com>
    ebfb2f4f