BTW, I think the better way to handle this in lldb is not to move the PC past 
the trap when you stop, but that when CONTINUING past a trap that we don't 
recognize, we always make sure we start past the trap.  That way it won't look 
weird when people compare crash logs coming from hitting a trap with backtraces 
in lldb, but we would still get the desired behavior.

Jim


> On Mar 4, 2020, at 11:29 PM, Pavel Labath <pa...@labath.sk> wrote:
> 
> On 04/03/2020 21:45, Jim Ingham via llvm-dev wrote:
>> As you have seen, different machine architectures do different things after 
>> hitting a trap.  On x86_64, the trap instruction is executed, and then you 
>> stop, so the PC is left after the stop.  On arm64, when execution halts the 
>> pc is still pointing at the trap instruction.
>> 
>> I don't think lldb should be in the business of telling systems how they 
>> should report stops, especially since that is certainly something we can 
>> handle in lldb.
>> 
>> For traps that lldb recognizes as ones it is using for breakpoints, it 
>> already has to handle this difference for you.  But for traps we know 
>> nothing about we don't do anything special. 
>> 
>> I think it would be entirely reasonable that whenever lldb encounters a trap 
>> instruction that isn't one of ours it should always move the PC after the 
>> trap before returning control to the user.  I can't see why you would want 
>> to keep hitting the trap over and over.  I've received several bugs (on the 
>> Apple bug reporter side) for this feature.  This might be something we teach 
>> lldb-server & debugserver to do, rather than lldb but that's an 
>> implementation detail...
>> 
>> For now, on architectures where the trap doesn't execute, you just need to 
>> move the pc past the trap by hand (with the "thread jump" command) before 
>> continuing.  That has always been safe on arm64 so far as I can tell.
>> 
>> Jim
> 
> Yes, this is something that has bugged me too.
> 
> While I think it would be nice if the OSes hid these architecture quirks
> (hell, I think it would be nice if the CPU manufacturers made this
> consistent so that the OS doesn't need to hide it), I think that
> changing that at this point is very unlikely, and so working around it
> in lldb is probably the best we can do.
> 
> I am not sure what is the official position on continuing from a debug
> trap, but I think that without that ability, the concept would be pretty
> useless. A quick example <https://godbolt.org/z/-8voBz> shows that clang
> produces the "expected" output even at -O3. In fact, on aarch64,
> __builtin_debugtrap() and __builtin_trap() produce the same instruction,
> and the only difference between them is that the latter also triggers
> DCE of everything coming after it.
> 
> pl

_______________________________________________
lldb-dev mailing list
lldb-dev@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev

Reply via email to