Skip to content

Fix ptrace software breakpoints

Rob Clark linux-arm-kernel 1 version New

Get series with b4
b4 am [email protected]

Versions newest first

  1. v1 Latest0 of 2 patches 0 repliesNew

Patches in v1 No applies recorded yet

None of the 2 patches the cover letter announces are in this archive.

Reviews trailers per patch

PatchRob Clark
SeriesT-b

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes.

Read the v1 thread

Cover letter [PATCH 0/2] Fix ptrace software breakpoints
Quoted 24 lines · Will Deacon

When using GDB on a quad-core Cortex-A9 (Versatile Express) board, software breakpoints do not work if the inferior is scheduled onto a different CPU from the debugger.

When GDB changes the code of another context via the ptrace POKETEXT mechanism, the I-cache must be invalidated before the inferior is allowed to resume. If a copy-on-write is triggered by the copy_to_user_page function, the new page mappings must be used by the inferior in order to pick up the new instructions.

This patch series addresses this problem by:

(a) Providing a workaround for a known TLB issue on some revisions of the Cortex-A9.
(b) Performing correct I-cache invalidation in the flush_ptrace_access code.

All feedback/comments/tested-bys welcome.

Cc Rob Clark<[email protected]>
Cc Catalin Marinas<[email protected]>

Will Deacon (2):
ARM: errata: TLBIASIDIS and TLBIMVAIS operations can broadcast a
faulty ASID
ARM: flush_ptrace_access: invalidate all I-caches

Quoted 5 lines
  arch/arm/Kconfig                |   12 ++++++++++++
  arch/arm/include/asm/tlbflush.h |    8 ++++++++
  arch/arm/mm/flush.c             |    4 ++--
  3 files changed, 22 insertions(+), 2 deletions(-)

Tested on omap4430 (cortex-a9 SMP).. with this patchset I have yet to see it fail, in regular use nor in the test case I wrote to show the problem (git://github.com/robclark/gdb-test.git). Without these patches, I'd see SIGILL and missed breakpoints 90+% of the time in regular use of gdb (basically gdb was unusable unless I booted with nosmp or disabled cache), and 100% of the time in my gdb-test.