bd3a1de683
The introduction and some examples are on this page: https://devblogs.microsoft.com/cppblog/announcing-jmc-stepping-in-visual-studio/ The `/JMC` flag enables these instrumentations: - Insert at the beginning of every function immediately after the prologue with a call to `void __fastcall __CheckForDebuggerJustMyCode(unsigned char *JMC_flag)`. The argument for `__CheckForDebuggerJustMyCode` is the address of a boolean global variable (the global variable is initialized to 1) with the name convention `__<hash>_<filename>`. All such global variables are placed in the `.msvcjmc` section. - The `<hash>` part of `__<hash>_<filename>` has a one-to-one mapping with a directory path. MSVC uses some unknown hashing function. Here I used DJB. - Add a dummy/empty COMDAT function `__JustMyCode_Default`. - Add `/alternatename:__CheckForDebuggerJustMyCode=__JustMyCode_Default` link option via ".drectve" section. This is to prevent failure in case `__CheckForDebuggerJustMyCode` is not provided during linking. Implementation: All the instrumentations are implemented in an IR codegen pass. The pass is placed immediately before CodeGenPrepare pass. This is to not interfere with mid-end optimizations and make the instrumentation target-independent (I'm still working on an ELF port in a separate patch). Reviewed By: hans Differential Revision: https://reviews.llvm.org/D118428 |
||
---|---|---|
.. | ||
Analysis | ||
APINotes | ||
ARCMT | ||
AST | ||
ASTMerge | ||
clang-rename | ||
ClangScanDeps | ||
CodeCompletion | ||
CodeGen | ||
CodeGenCoroutines | ||
CodeGenCUDA | ||
CodeGenCUDASPIRV | ||
CodeGenCXX | ||
CodeGenHIP | ||
CodeGenObjC | ||
CodeGenObjCXX | ||
CodeGenOpenCL | ||
CodeGenOpenCLCXX | ||
CodeGenSYCL | ||
Coverage | ||
CoverageMapping | ||
CXX | ||
Driver | ||
FixIt | ||
Format | ||
Frontend | ||
Headers | ||
Import | ||
Index | ||
Integration | ||
InterfaceStubs | ||
Interpreter | ||
Layout | ||
Lexer | ||
LibClang | ||
Misc | ||
Modules | ||
OpenMP | ||
Parser | ||
ParserSYCL | ||
PCH | ||
Preprocessor | ||
Profile | ||
Refactor | ||
Rewriter | ||
Sema | ||
SemaCUDA | ||
SemaCXX | ||
SemaObjC | ||
SemaObjCXX | ||
SemaOpenCL | ||
SemaOpenCLCXX | ||
SemaSYCL | ||
SemaTemplate | ||
Syntax | ||
TableGen | ||
Templight | ||
Tooling | ||
Unit | ||
utils/update_cc_test_checks | ||
VFS | ||
.clang-format | ||
CMakeLists.txt | ||
cxx-sections.data | ||
lit.cfg.py | ||
lit.site.cfg.py.in | ||
make_test_dirs.pl | ||
TestRunner.sh |