summaryrefslogtreecommitdiff
path: root/Documentation
AgeCommit message (Collapse)AuthorFilesLines
2019-01-31Add design document for unloadability (#22166)Jan Vorlicek2-0/+423
* Add design document for the unloadability
2019-01-30fixed pdf link in dotnet-standards.md (#22292)Meir Blachman1-1/+1
2019-01-23Remove all traces of FEATURE_STACK_PROBE. (#22149)Filip Navara4-17/+5
2019-01-16Update linux/OSX build instructions (#21679)Jarret Shook2-176/+87
* Update linux/OSX build instructions * Update based on feedback * Address PR feedback * Update to address feedback
2019-01-11Patch vtable slots and similar when tiering is enabled (#21292)Koundinya Veluri1-8/+1
Patch vtable slots and similar when tiering is enabled For a method eligible for code versioning and vtable slot backpatch: - It does not have a precode (`HasPrecode()` returns false) - It does not have a stable entry point (`HasStableEntryPoint()` returns false) - A call to the method may be: - An indirect call through the `MethodTable`'s backpatchable vtable slot - A direct call to a backpatchable `FuncPtrStub`, perhaps through a `JumpStub` - For interface methods, an indirect call through the virtual stub dispatch (VSD) indirection cell to a backpatchable `DispatchStub` or a `ResolveStub` that refers to a backpatchable `ResolveCacheEntry` - The purpose is that typical calls to the method have no additional overhead when code versioning is enabled Recording and backpatching slots: - In order for all vtable slots for the method to be backpatchable: - A vtable slot initially points to the `MethodDesc`'s temporary entry point, even when the method is inherited by a derived type (the slot's value is not copied from the parent) - The temporary entry point always points to the prestub and is never backpatched, in order to be able to discover new vtable slots through which the method may be called - The prestub, as part of `DoBackpatch()`, records any slots that are transitioned from the temporary entry point to the method's at-the-time current, non-prestub entry point - Any further changes to the method's entry point cause recorded slots to be backpatched in `BackpatchEntryPointSlots()` - In order for the `FuncPtrStub` to be backpatchable: - After the `FuncPtrStub` is created and exposed, it is patched to point to the method's at-the-time current entry point if necessary - Any further changes to the method's entry point cause the `FuncPtrStub` to be backpatched in `BackpatchEntryPointSlots()` - In order for VSD entities to be backpatchable: - A `DispatchStub`'s entry point target is aligned and recorded for backpatching in `BackpatchEntryPointSlots()` - The `DispatchStub` was modified on x86 and x64 such that the entry point target is aligned to a pointer to make it backpatchable - A `ResolveCacheEntry`'s entry point target is recorded for backpatching in `BackpatchEntryPointSlots()` Slot lifetime and management of recorded slots: - A slot is recorded in the `LoaderAllocator` in which the slot is allocated, see `RecordAndBackpatchEntryPointSlot()` - An inherited slot that has a shorter lifetime than the `MethodDesc`, when recorded, needs to be accessible by the `MethodDesc` for backpatching, so the dependent `LoaderAllocator` with the slot to backpatch is also recorded in the `MethodDesc`'s `LoaderAllocator`, see `MethodDescBackpatchInfo::AddDependentLoaderAllocator_Locked()` - At the end of a `LoaderAllocator`'s lifetime, the `LoaderAllocator` is unregistered from dependency `LoaderAllocators`, see `MethodDescBackpatchInfoTracker::ClearDependencyMethodDescEntryPointSlots()` - When a `MethodDesc`'s entry point changes, backpatching also includes iterating over recorded dependent `LoaderAllocators` to backpatch the relevant slots recorded there, see `BackpatchEntryPointSlots()` Synchronization between entry point changes and backpatching slots - A global lock is used to ensure that all recorded backpatchable slots corresponding to a `MethodDesc` point to the same entry point, see `DoBackpatch()` and `BackpatchEntryPointSlots()` for examples Due to startup time perf issues: - `IsEligibleForTieredCompilation()` is called more frequently with this change and in hotter paths. I chose to use a `MethodDesc` flag to store that information for fast retreival. The flag is initialized by `DetermineAndSetIsEligibleForTieredCompilation()`. - Initially, I experimented with allowing a method versionable with vtable slot backpatch to have a precode, and allocated a new precode that would also be the stable entry point when a direct call is necessary. That also allows recording a new slot to be optional - in the event of an OOM, the slot may just point to the stable entry point. There are a large number of such methods and the allocations were slowing down startup perf. So, I had to eliminate precodes for methods versionable with vtable slot backpatch and that in turn means that recording slots is necessary for versionability.
2019-01-08Merge pull request #20409 from lol768/patch-1Bruce Forstall1-0/+2
Add a note to clarify debugging w/ dotnet is fine
2019-01-08Updated "Viewing JIT Dumps" for .NET Core 3.0 (#21687)Günther Foidl1-9/+12
* Updated "Viewing JIT Dumps" for .NET Core 3.0 plus some minor wording change * Incorporated changes from https://github.com/dotnet/coreclr/pull/21859
2019-01-02Remove second 'license' word for readability (#21747)Marlon Regenhardt1-1/+1
The license name already has 'license' in the end, the second one is unnecessary.
2018-12-21Update tiering guide to reference the new TieredCompilation label (#21618)Koundinya Veluri1-3/+3
2018-12-06Guarded devirtualization foundations (#21270)Andy Ayers8-0/+533
Lay the groundwork for guarded devirtualization of virtual and interface calls in the jit. Introduce the notion of a guarded devirtualization candidate and identify these if regular devirtualization fails. Use simple heuristics to produce a class to guess for. Require that the method that would be invoked if the class guess is correct be a plausible inline candidate. Generalize the calli transformer to become an indirect call transformer. This runs after importation because it needs to introduce control flow and runs before inlining so that the new direct calls it introduces can be inlined. Implement the transformation to duplicate the call site, devirtualize on the side where the class is now known exactly, and turn the resulting direct call into an inline candidate. Add a motivation and design document.
2018-12-03Remove Hostx86/arm CrossGen from building and Simplify build.sh command line ↵Egor Chesakov1-1/+1
arguments for Linux/arm cross build (Part 2) (#21034) * Stop building and publishing Hostx86/arm crossgen on Linux/arm * Remove -crosscomponent argument and stop using CAC_ROOTFS_DIR environment variable in build.sh * Simplify the related logic in build.sh * Don't need to specify crosscomponent in tests/scripts/run-pmi-diffs.py * Don't set CAC_ROOTFS_DIR in buildpipeline, Jenkins files and in tests/scripts/run-pmi-diffs.py * Adjust documentation
2018-12-03Clarify use of LoadFromAssemblyName method (#21256)Rui1-2/+8
2018-12-01added info about the new .NET memory book (#21326)Maoni Stephens1-1/+2
2018-11-27Update changing-corelib.md (#21220)Dan Moseley1-13/+18
* Update changing-corelib.md @jkotas * Update changing-corelib.md
2018-11-26Update documentation for changing CoreLib (#21201)Jan Kotas4-38/+26
2018-11-24Fixing typo (#21081)Ayende Rahien1-5/+5
2018-11-14Update CoreFX-in-CoreCLR testing instructions (#21002)Bruce Forstall1-57/+122
Update to reflect changes in the repo, and fix various formatting issues.
2018-11-12Simplify build.sh command line arguments for Linux/arm cross build (Part 1) ↵Egor Chesakov1-1/+1
(#20836) * Don't use crosscomponent|-crosscomponent command line args in build.sh * Don't use CROSSCOMPONENT environment variable in build.sh src/pal/tools/gen-buildsys-clang.sh * Remove mentioning -crosscomponent from usage() in build-test.sh * Don't use -crosscomponent in buildpipeline * Don't use -crosscomponent in Groovy files * Remove mentioning crosscomponent in Documentation/building/linux-instructions.md * Stop building Hostx86/armel crossgen in build.sh * Disable CrossGen-ing of System.Private.CoreLib on Linux/armel
2018-10-30Corrected Typos and grammar (#20658)Shreyas Jejurkar10-73/+70
* Corrected some typos and grammar as per English language guidelines. * Reverted some of the changes * Reverted back some changes Phase 2
2018-10-29Fix typo in linux-performance-tracing (#20667)Jesús Corrius1-1/+1
precomppiled -> precompiled
2018-10-17Replace 'VSCode' by 'Visual Studio Code' in doc (#20441)Antoine Blanchet1-4/+4
Visual Studio Code is also broadly known as VSCode. But since this document already contained a typo and Visual Studio Code is not referred as VSCode elsewhere in the CoreCLR documentation I figured it could be nice to _clean_ this documentation page.
2018-10-14Add a note to clarify debugging w/ dotnet is fineAdam Williams1-0/+2
ref https://github.com/dotnet/coreclr/issues/12705#issuecomment-314102508
2018-10-11fix hyperlinkVance Morrison1-2/+2
2018-10-11Added docs for native DLLsVance Morrison1-2/+33
2018-10-10Added advice about using ZapDisable to get symbolsVance Morrison1-0/+13
2018-10-10Fix typoVance Morrison1-1/+1
2018-10-10Improve instructions on getting framework symbolsVance Morrison1-18/+42
2018-10-08Document describing upcoming object stack allocation work. (#20251)Eugene Rozenfeld2-0/+199
2018-10-07Remove mention of rotor from comments (#20297)Austin Wise1-1/+1
* Remove old reference to Rotor in documentation. All remaining references relate to rotor's role in CoreCLR history. * Remove rotor comment from enummem.cpp. I can find no evidence that the presence of g_pStressLog is conditional on FEATURE_PAL being defined. * Remove old todo, DbgDllMain looks for thread detach. * Update nativepipeline.h comment refernce to rotor. All unix-like systems except android have FEATURE_DBGIPC_TRANSPORT_DI defined, hence "most unix-like platforms". * Update some comments to not refer to Rotor. * Remove some more references to Rotor from comments. * Remove old comment. Though maybe this macro should be removed and everywhere use the & operator. It appears there are only two places that use this macro.
2018-10-05Update the dllmap design doc (6)annaaniol1-17/+19
2018-10-05Update the dllmap design doc (5)annaaniol1-121/+111
2018-10-05Update the dllmap design doc (4)annaaniol1-13/+15
2018-10-05Update the dllmap design doc (3)annaaniol1-12/+14
2018-10-05Update the dllmap design doc (2)annaaniol1-8/+29
2018-10-05Update the dllmap design docannaaniol1-66/+90
2018-10-05Add a dllmap design documentannaaniol1-0/+246
2018-10-03PDF link wasn't working (#20242)Paresh1-1/+1
Correct pdf link
2018-09-28Added transcript of ARMEnabled. (#20181)Alexander Soldatov1-1/+1
2018-09-14Add short guide for using tiered compilation and how to provide feedback ↵Koundinya Veluri1-0/+55
(#19773) * Add short guide for using tiered compilation and how to provide feedback * Suggested changes * Update to say that it's enabled by default * Add info about target framework/runtime
2018-09-01i386: Fixed definition with declaration in eetoprofinterfaceimpl.cpp (#18792)sergey ignatov1-0/+2
2018-08-30typo fix (#19763)Mark Jung1-1/+1
2018-08-29Typos (#19737)John Doe9-10/+10
* testsing -> testing * reclaming -> reclaiming * oppurtunity -> opportunity * implemenation -> implementation * indicaates -> indicates * enregisterd -> enregistered * compuations -> computations * convinient -> convenient * intution -> intuition * Communicaton -> Communication
2018-08-24Use runtest.py to run tests for all platforms (#19213)Jarret Shook3-55/+30
Change build-test.sh to always build the xunit wrappers. Before it would drop a token and check the existence of the token. Unify x64 linux/OSX/Windows excludes into one file, issues.targets. Includes different locations in the file which show where to put excludes. Remove all target specific aspects of issues.targets, all tests are excluded now via wildcard, this allows expanding to .cmd and .sh based on the built platform. Unify path separators to forward slash(/) in issues.targets to support both platforms Clean up issues.targets by removing long standing exclude tests, specifically tests that have been excluded due to missing features like rva_statics. Add DisableProjectBuild to tests which have been removed from issues.targets Conditionally add DisableProjectBuild to tests which have been marked as unsupported on unix. This is mostly a port of the unsupportedOnUnix.txt list. Instead of excluding the tests, unix will simply not build them. If tests are built on windows, they will be run but they will return pass, the test wrapper will check return instantly. All exclusions ported to issues.targets for linux targets. Expand runtest.py, this includes simple issues that made it past the original CR. In addition it adds more optional features to help with inner loop dev work such as: creating a repro folder under bin/repro/.. which sets up the env and calls the failing test. In addition a launch.json will now be created under bin/repro/.. which can be used to easily debug using vscode. More logging, such as printing failures, longest running tests ect. Initial excludes ported for arm64 windows Arm64 linux, armhf unix excludes and enables running runtest.sh for these targets. arm64 windows and arm32 windows excludes and enables running runtest.cmd on arm64 targets init-tools.sh changes to pull armhf and aarch64 dotnetcli init-tools.cmd changes to pull x86 packages for dotnetcli for arm64 windows runtest.cmd for almost all scenarios will call runtest.py runtest.sh for almsot all scenarios will call runtest.py Removes all logic for running tests using runtest.sh
2018-08-24Update version in documentation samples to 3.0Jan Kotas2-33/+23
2018-08-22Fix broken documentation links into mscorlib code (#19598)Drew Noakes3-4/+4
2018-08-17Enable Tiered Compilation by default (#19525)Koundinya Veluri1-3/+2
Enable Tiered Compilation by default 1) Changes the default state of the tiered compilation feature check to be ON BY DEFAULT 2) Removed comments about the source about this being a work in progress. Although it will surely continue to evolve and improve, remaining issues would be better tracked in our issue tracking system with the same default presumption as other runtime features - assume it works unless noted otherwise. 3) Adjusts a number of tests and automated scripts that made assumptions that the default setting of this feature is off. 4) Stop accepting the deprecated env var COMPLUS_EXPERIMENTAL_TieredCompilation. I'm not aware it has any remaining usage but if so we're going to find out. 5) Adjust config names for JitBench
2018-08-14Update debugging and createdump docs. (#19495)Mike McLaughlin2-5/+9
2018-08-10Update existing trigger phrases documentationBruce Forstall1-362/+746
2018-08-02Update debugging doc with symbol downloader instructions. (#19262)Mike McLaughlin1-4/+6
2018-08-02Fix broken link (#19244)Alex Novgorodov1-1/+1