- 23 3月, 2021 10 次提交
-
-
由 Jo Shields 提交于
On Apple Silicon, the command `arch -x86_64 XYZ` allows executing XYZ as if on an AMD64 CPU, rather than an ARMv8 CPU, for cases where both are possible (e.g. a shell script like build.sh). The deleted lines of code bypass the lies `arch` writes into uname, and instead forcibly detects the true nature of the host system's CPU regardless of whether or not the developer has reasons to lie. Whilst this trick was important in the early days of bringing up Apple Silicon support, it should hopefully now be obsolete. This fixes linking of LLVM in Mono runtime builds, where `arch -x86_64 ./build.sh -arch x64` would still attempt to link against ARM64 LLVM.
-
由 Radek Doulik 提交于
Fix build on windows in folders containing space(s) in the name and also in case where `EMSDK_PATH` contains space(s). * Add few quotes To fix windows build in directory containing spaces. * Add quotes around link attributes paths * More quotes and trimming * More improvements related to EMSDK_PATH * Use immediate set for EMSCRIPTEN_VERSION * Do not set ExeExt twice * Force ninja on Browser/windows And check for cmake and ninja in CheckEnv * Apply Ankit's quotation changes * Simplify forcing wasm, fix typos * Use -File instead of & "<ps1 script>" * Fix typo * Only add the escaped quotes on windows Co-authored-by: NAnkit Jain <radical@gmail.com>
-
由 Anirudh Agnihotry 提交于
* use packages instead of package report for packageInstallation and closure verification * add the package dependency * correct the names * excluding freebsd from testing * Update Versions.props * update the package versions, add support for exclude pakcages and packages to test * update the package validation version * Make package testing work indepent of version * testpackages -> testpackagesPath * fix restore or when no packages are produced * correct the no packages produced condition * use regex instead of major version
-
由 Bruce Forstall 提交于
* Fix DEBUG/non-DEBUG asm diffs due to instruction group size estimation This change fixes a long-existing difference between DEBUG and non-DEBUG codegen that recently manifest as asm diffs in instruction encoding in a Checked/Release SuperPMI run, mostly in the tests\JIT\Directed\arglist\vararg.cs test, specifically: ``` NativeVarargTest.VarArg:TestPassingManyFloats(System.Double[]):bool NativeVarargTest.VarArg:TestPassingManyDoublesManaged(System.Double[]):bool NativeVarargTest.VarArg:TestPassingManyDoubles(System.Double[]):bool NativeVarargTest.VarArg:TestPassingManyFloatsManaged(System.Single[]):bool double1:ProcessJagged3DArray(System.Double[][]) `` Example diff: ``` 215c7758454: 76 6a jbe 106 // checked 215c77b8ab4: 0f 86 6a 00 00 00 jbe 106 // release ``` Note that the offset ends up exactly the same, but the encoding is different. Some context on the emitter: The emitter collects generated machine instructions as a set of variable-sized `instrDesc` structures in instruction groups (IG, or `insGroup`). An IG is filled with a variable number of instrDescs into a fixed-sized buffer, which, when full or a new label (e.g., branch target) is encountered, is copied to dynamically allocated precise-sized memory for the set of instructions collected. If a BasicBlock required more instructions than fit in a single IG, multiple IG are generated, and the ones besides the first are marked with the IGF_EXTEND flag, called "emitAdd" or overflow IG. After codegen, all the IG are filled, and we have an estimated size for each instruction, and each IG has an estimated code offset from the beginning of the function. The estimated sizes could be wrong if we incorrectly estimated the size of an instruction (which in most cases could be considered a bug, but is particularly common with our Intel vector instructions currently) or the offset required for a branch (especially a forward branch). The JIT only does a single pass of branch tightening, so could have some cases of non-optimal estimates. Note that estimates are required to be too large; it is fatal for an estimate to be too small. During emission, we walk the IG list and instructions, encoding them into the memory buffer provided by the VM. At this point, we might shrink an instruction encoding, possibly because we can use a smaller branch encoding that expected. Notably, the size of instrDescs and insGroups varies between DEBUG and non-DEBUG builds. That means that the number of instrDescs that fit in an IG differs. This should have no effect on generated code, as long as code properly handles overflow IG and doesn't affect codegen based on IG size or number of contained instructions. The problem: During emission, we calculate an "offset adjustment" (in `emitOffsAdj`) that is used to estimate the distance from a forward jump instruction to its target. This determines the size of jump instruction encodings that we emit. For example, on x86/x64, a relative conditional branch can have a 1 byte or a 4 byte target offset. A 1-byte offset can be used if the target instruction is 127 bytes or fewer away. So, we estimate the distance using the jump instruction's known offset and the estimated offset of the target, which is the estimated offset of the instruction group (the label) calculated before emission minus the "shrinkage" of instruction sizes that we've seen so far. This "shrinkage" is due to over-estimation of instruction encoding sizes and branch estimated sizes. The shrinkage in `emitOffsAdjs` is only computed at the beginning of an IG. As additional instructions in an IG shrink, we don't take that into account when we reach a forward jump instruction and try to determine if a "small" branch encoding can be used. Thus, it's possible for a branch to be estimated to require a large 4-byte offset instead of a 1-byte offset because the forward branch is barely over the limit, but wouldn't be if we considered the already-shrunk instructions in the current IG. In fact, the more instructions that shrink in an IG, the larger our target offset estimate becomes, because the source instruction address is precise (since we know precisely how many bytes of instructions we've emitted), but the target offset estimate is fixed. Due to the different number of instructions in an IG between DEBUG and non-DEBUG builds, the estimate we use for a target offset for any particular branch, given enough instruction shrinkage and overflowing IG (such that there are a different number of IG between DEBUG and non-DEBUG) is different. This leads to different instruction encoding between the flavors. The solution: The solution is simple: track instruction shrinkage as we emit instructions, and use the latest, most accurate shrinkage adjustment when estimating branches. This gives no difference between DEBUG and non-DEBUG because it removes the indirect dependence on IG instruction count in recomputing `emitOffsAdj`. There are asm diffs (with just a Checked x64 JIT compared to baseline Checked JIT) due to some branches now being SHORT where previously they were LONG. * Add assert
-
由 Bruce Forstall 提交于
Both `compInit` and `compCompile` were initializing the method/class/full name strings. The call to `eeGetMethodFullName` is not cheap, and shows up high on a SuperPMI replay trace. Remove the duplicate initialization in `compCompile`. Speeds up SuperPMI replay and asm diffs.
-
由 Bruce Forstall 提交于
Fix potential Checked/Release issue. Remove default arg to emitLoopAlign to make calls more explicit.
-
由 Drew Scoggins 提交于
-
由 Bruce Forstall 提交于
-
由 Jo Shields 提交于
-
由 Jan Kotas 提交于
-
- 22 3月, 2021 14 次提交
-
-
由 Fan Yang 提交于
* Add new Mono embedding API to consume binary runtimeconfig format * Merge properties * Remove redundant macro * Move string process to the install function * Check if runtime_config_arg exist * Move file processing to install function * Update src/mono/mono/metadata/appdomain.c Co-authored-by: NAleksey Kliger (λgeek) <akliger@gmail.com> * Update src/mono/mono/metadata/appdomain.c Co-authored-by: NAleksey Kliger (λgeek) <akliger@gmail.com> * Update src/mono/mono/metadata/appdomain.c Co-authored-by: NAleksey Kliger (λgeek) <akliger@gmail.com> * Update src/mono/mono/metadata/appdomain.c Co-authored-by: NRyan Lucia <ryan@luciaonline.net> * Update src/mono/mono/metadata/appdomain.c Co-authored-by: NRyan Lucia <ryan@luciaonline.net> * Update src/mono/mono/metadata/appdomain.c Co-authored-by: NRyan Lucia <ryan@luciaonline.net> * Update src/mono/mono/metadata/appdomain.c Co-authored-by: NRyan Lucia <ryan@luciaonline.net> * Update src/mono/mono/metadata/appdomain.c Co-authored-by: NRyan Lucia <ryan@luciaonline.net> * Update src/mono/mono/metadata/appdomain.c Co-authored-by: NRyan Lucia <ryan@luciaonline.net> * Update src/mono/mono/metadata/appdomain.c Co-authored-by: NRyan Lucia <ryan@luciaonline.net> * Remove redundant intermediate copy * Remove extra memory allocation * Update src/mono/mono/mini/mono-private-unstable.h Co-authored-by: NRyan Lucia <ryan@luciaonline.net> Co-authored-by: NAleksey Kliger (λgeek) <akliger@gmail.com> Co-authored-by: NRyan Lucia <ryan@luciaonline.net>
-
https://github.com/dotnet/runtime由 dotnet-maestro[bot] 提交于
[main] Update dependencies from dotnet/runtime
-
由 Stephen Toub 提交于
* Lazily-allocate rarely needed ValueTask.s_canceledTask * Update ValueTask.cs
-
由 Steve MacLean 提交于
-
由 Stephen Toub 提交于
This isn't a big deal as it's once per websocket connection, but it annoys me every time I see the unnecessary waste in a trace. Previously this would allocate: 1. A byte[] for the bytes from the guid 2. A base64-encoded string for (1) 3. A string concatenating (2) and the known server guid 4. A byte[] containing the bytes from (3) 5. A byte[] containing the SHA1-hashed bytes of (4) 6. A base64-encoded string of (5) Now, it only allocates (2) and (6).
-
由 Egor Bogatov 提交于
-
由 David Fowler 提交于
- The default DI container uses arrays under the covers for IEnumerable<T> so we can take advantage of that to avoid allocating an array when storing a list of services and when enumerating them (when happens more often for OptionsFactory). - If the IEnumerable<T> isn't an array, we will convert it into one, paying that cost once instead of allocating an enumerator on calls to Create. - Also removed the IOptionsChangeTokenSource<TOptions> field from OptionsMonitor since it isn't used more than once.
-
由 Thays Grazia 提交于
* sourcelink test * Test sourcelink. * Fix sourcelink. * Change test name * Move test to another file. * Rollback GetSourceLinkUrl * Changing to make trying to get from a Windows url running on Linux.
-
由 Stephen Toub 提交于
* Seal private classes in corelib * Seal internal classes in corelib
-
由 Bruce Forstall 提交于
SuperPMI logging was doing a lot of work even if no log output was asked for. For example, there are LogDebug() calls in the recordRelocation path that were doing all the printf work and memory allocation even though we were not logging anything. Add a fast-path return to avoid all this unnecessary work.
-
由 Jan Kotas 提交于
-
由 Bruce Forstall 提交于
The problem manifested as an infinite loop during the StackLevelSetter phase in the release build SuperPMI replay of the tests, but also occurs as a normal release build test run of the varargsupport.il test. The issue is we had corrupt LIR gtPrev links, with a cycle. The problem had nothing to do with StackLevelSetter -- it just happened to be the first phase that iterated in reverse over the gtPrev links. The corruption was introduced in the importer, in `verConvertBBToThrowVerificationException`. It required a verification failure in a filter (possibly also catch) clause where the JIT would throw away the currently imported code and convert the block to a call to the verification failure helper. This was a classic case of important, functional code being under `#ifdef DEBUG` that is needed in non-DEBUG as well. The result was we would end up adding an `ASG(LCL_VAR, CATCH_ARG)` to the statement list twice, with the same `CATCH_ARG` node. Fixes #45580
-
由 Thays Grazia 提交于
* Another approach for PR #45124 * After discussion with @radical, decided to add this comment and use mono_runtime_printf_err.
-
由 Aaron Robinson 提交于
* Remove unnecessary property setting in corerun. * Remove unused get_envvar_as_boolean()
-
- 21 3月, 2021 7 次提交
-
-
由 Sychev Vadim 提交于
There is a test the custom constant attribute assigns the default value to Type.Missing parameter.
-
由 Jan Kotas 提交于
Apply workaround recommended by VC++ team
-
由 Jan Kotas 提交于
-
由 Eric Erhardt 提交于
* Resolve new ILLink warnings in Microsoft.Extensions.DependencyInjection These two new warnings came in because of: 1. #48823 2. #47938 * Use GetProperty.
-
由 Steve MacLean 提交于
-
https://github.com/dotnet/xharness由 dotnet-maestro[bot] 提交于
[main] Update dependencies from dotnet/xharness
-
https://github.com/mono/linker由 dotnet-maestro[bot] 提交于
Microsoft.NET.ILLink.Tasks From Version 6.0.100-preview.2.21169.2 -> To Version 6.0.100-preview.2.21169.4 Co-authored-by: Ndotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>
-
- 20 3月, 2021 9 次提交
-
-
由 Egor Bogatov 提交于
* Fix incorrect GTF_CALL_M_SPECIAL_INTRINSIC usage * Update importer.cpp
-
由 SingleAccretion 提交于
-
由 Michal Strehovský 提交于
These types are reflection emitted and will be null without ref emit.
-
由 Anton Firszov 提交于
* remove unused duplicate in .gitignore * delete "!pal/prebuilt/idl/*_i.c"
-
由 James Newton-King 提交于
-
由 Tarek Mahmoud Sayed 提交于
-
由 Jan Kotas 提交于
Fixes #49684
-
由 Anton Lapounov 提交于
-
由 Ankit Jain 提交于
* [wasm] Use g_error to emit errors in mini-wasm.c, so they show up with traces in js console * address review feedback vargaz: printf in JIT code is mapped to the platform logging operation, so this one can stay as it is. * Use g_printerr instead of g_error, as suggested by feedback
-