• Frederic Weisbecker's avatar
    x86: Fix instruction breakpoint encoding · 89e45aac
    Frederic Weisbecker authored
    Lengths and types of breakpoints are encoded in a half byte
    into CPU registers. However when we extract these values
    and store them, we add a high half byte part to them: 0x40 to the
    length and 0x80 to the type.
    When that gets reloaded to the CPU registers, the high part
    is masked.
    
    While making the instruction breakpoints available for perf,
    I zapped that high part on instruction breakpoint encoding
    and that broke the arch -> generic translation used by ptrace
    instruction breakpoints. Writing dr7 to set an inst breakpoint
    was then failing.
    
    There is no apparent reason for these high parts so we could get
    rid of them altogether. That's an invasive change though so let's
    do that later and for now fix the problem by restoring that inst
    breakpoint high part encoding in this sole patch.
    Reported-by: default avatarKelvie Wong <kelvie@ieee.org>
    Signed-off-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
    Cc: Prasad <prasad@linux.vnet.ibm.com>
    Cc: Mahesh Salgaonkar <mahesh@linux.vnet.ibm.com>
    Cc: Will Deacon <will.deacon@arm.com>
    89e45aac
hw_breakpoint.c 12.1 KB