[Lldb-commits] [PATCH] D91238: Recognize __builtin_debugtrap on arm64, advance pc past it so users can continue easily

Jason Molenda via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Wed Nov 11 00:05:59 PST 2020


jasonmolenda created this revision.
jasonmolenda added reviewers: clayborg, labath.
jasonmolenda added a project: LLDB.
Herald added subscribers: omjavaid, JDevlieghere, pengfei, kristof.beyls.
jasonmolenda requested review of this revision.

This is a change I need on Darwin systems, so I'm trying to decide whether I put the test case in API/functionalities or in macosx, but I think it may apply on Linux as well.

With a __builtin_debugtrap() in a program, we want the debugger to stop execution there, but we want the user to get past it with a 'continue' or next/step.  With a __builtin_trap(), we want the debugger to stop on that instruction and not advance unless the user rewrites $pc manually or something.

On x86, __builtin_debugtrap() is 0xcc (the breakpoint instruction); when you hit that, the pc has advanced past the 0xcc.  In debugserver (DNBArchImplX86_64::NotifyException) when we've hit an 0xcc that was NOT a breakpoint debugserver inserted, it leaves the $pc past the 0xcc, so continuing will work.

On arm64, __builtin_debugtrap is 'brk #0xf000', this patch recognizes that specific instruction in DNBArchMachARM64::NotifyException and advances the pc past it so we get the same behavior.

The test case hits a __builtin_debugtrap(), continues past it, hits a __builtin_trap(), and checks that it cannot advance past that.  With this debugserver patch, that's how lldb behaves on both x86 darwin and arm64 darwin.

Pretty simple stuff; the only real question is whether we should make this a macos-only tested behavior, or include Linux as well. Anyone know how this works with lldb-server on linux?


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D91238

Files:
  lldb/test/API/functionalities/builtin-debugtrap/Makefile
  lldb/test/API/functionalities/builtin-debugtrap/TestBuiltinDebugTrap.py
  lldb/test/API/functionalities/builtin-debugtrap/main.cpp
  lldb/tools/debugserver/source/MacOSX/arm64/DNBArchImplARM64.cpp

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D91238.304411.patch
Type: text/x-patch
Size: 4319 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20201111/3d59805d/attachment-0001.bin>


More information about the lldb-commits mailing list