llvm-project/lldb
Walter Erquinigo 48d8af9825 [intel-pt] Disable/Enable tracing to guarantee the trace is correct
As mentioned in the comment inside the code, the Intel documentation
states that the internal CPU buffer is flushed out to RAM only when tracing is
disabled. Otherwise, the buffer on RAM might be stale.

This diff disables tracing when the trace buffer is going to be read. This is a
quite safe operation, as the reading is done when the inferior is paused at a
breakpoint, so we are not losing any packets because there's no code being
executed.

After the reading is finished, tracing is enabled back.

It's a bit hard to write a test for this now, but Greg Clayton and I will
refactor the PT support and writing tests for it will be easier. However
I tested it manually by doing a script that automates
the following flow

```
(lldb) b main
Breakpoint 1: where = a.out`main + 15 at main.cpp:4:7, address = 0x000000000040050f
(lldb) r
Process 3078226 stopped
* thread #1, name = 'a.out', stop reason = breakpoint 1.1
frame #0: 0x000000000040050f a.out`main at main.cpp:4:7
(lldb) processor-trace start
(lldb) b 5
Breakpoint 2: where = a.out`main + 22 at main.cpp:5:12, address = 0x0000000000400516
(lldb) c
Process 3078226 resuming
Process 3078226 stopped
* thread #1, name = 'a.out', stop reason = breakpoint 2.1
frame #0: 0x0000000000400516 a.out`main at main.cpp:5:12
(lldb) processor-trace show-instr-log
thread #1: tid=3078226
0x40050f <+15>: movl $0x0, -0x8(%rbp)

>>> Before, some runs of the script up to this point lead to empty traces

(lldb) b 6
Breakpoint 3: where = a.out`main + 42 at main.cpp:6:14, address = 0x000000000040052a
(lldb) c
Process 3092991 resuming
Process 3092991 stopped
* thread #1, name = 'a.out', stop reason = breakpoint 3.1
frame #0: 0x000000000040052a a.out`main at main.cpp:6:14
(lldb) processor-trace show-instr-log thread #1: tid=3092991
0x40050f <+15>: movl $0x0, -0x8(%rbp)
0x400516 <+22>: movl $0x0, -0xc(%rbp)
0x40051d <+29>: cmpl $0x2710, -0xc(%rbp) ; imm = 0x2710
0x400524 <+36>: jge 0x400546 ; <+70> at main.cpp
0x400524 <+36>: jge 0x400546 ; <+70> at main.cpp

>>> The trace was re-enabled correctly and includes the instruction of the
first reading.
```
Those instructions correspond to these lines
```
3 int main() {
4 int z = 0;
5 for (int i = 0; i < 10000; i++) {
6 z += fun(z)
...
```

Differential Revision: https://reviews.llvm.org/D85241
2020-10-23 16:36:42 -07:00
..
bindings Add an SB API to get the SBTarget from an SBBreakpoint 2020-10-15 14:28:44 -07:00
cmake Fix "Unknown arguments specified" to if in lldb 2020-10-21 07:24:53 -07:00
docs [lldb] Add a page to the docs with (external) links on how to use LLDB 2020-10-20 11:43:31 -07:00
examples [lldb/examples] Add missing declaration in heap.py 2020-09-24 08:44:45 -07:00
include/lldb [lldb] Move copying of files into reproducer out of process 2020-10-23 12:33:54 -07:00
packages/Python Revert "[lldb] Explicitly use the configuration architecture when building test executables" 2020-10-22 18:42:19 +02:00
resources
scripts [LLDB] Add QEMU testing environment setup guide for SVE testing 2020-10-06 12:35:08 +05:00
source [intel-pt] Disable/Enable tracing to guarantee the trace is correct 2020-10-23 16:36:42 -07:00
test [lldb] Move copying of files into reproducer out of process 2020-10-23 12:33:54 -07:00
third_party/Python/module Revert "[lldb] temporary commit to see why a test is failing only on lldb-aarch64-ubuntu" 2020-08-05 11:55:02 +02:00
tools [lldb] Move copying of files into reproducer out of process 2020-10-23 12:33:54 -07:00
unittests [lldb/DWARF] Add support for DW_OP_implicit_value 2020-10-22 18:02:44 +02:00
utils [lldb] Hoist -s (trace directory) argument out of LLDB_TEST_COMMON_ARGS (NFC) 2020-09-29 17:23:33 -07:00
.clang-format
.clang-tidy [lldb] Add .clang-tidy with customization to disable readability-identifier-naming 2020-03-09 12:50:28 -07:00
.gitignore
CMakeLists.txt [lldb] Enable cmake policy CMP0077 for option() 2020-10-17 00:16:24 -07:00
CODE_OWNERS.txt [lldb][NFC] Cleanup mentions and code related to lldb-mi 2019-07-19 15:55:23 +00:00
LICENSE.TXT
use_lldb_suite_root.py