[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?
rG LLVM Github Monorepo
-------------- next part --------------
A non-text attachment was scrubbed...
Size: 4319 bytes
Desc: not available
More information about the lldb-commits