Matt Ellis [Thu, 14 Apr 2016 22:59:13 +0000 (15:59 -0700)]
Merge pull request #4326 from dotnet-bot/from-tfs
Merge changes from TFS
Andy Ayers [Thu, 14 Apr 2016 22:57:39 +0000 (15:57 -0700)]
Merge pull request #4335 from AndyAyersMS/InlineStrategy
Inliner: introducing InlineStrategy
Fadi Hanna [Thu, 14 Apr 2016 21:18:21 +0000 (14:18 -0700)]
Merge pull request #4339 from fadimounir/deltests
Delete fragile tests (will fix tests in a later PR)
Fadi Hanna [Thu, 14 Apr 2016 21:14:52 +0000 (14:14 -0700)]
Delete fragile tests (will fix tests in a later PR)
Andy Ayers [Tue, 12 Apr 2016 20:30:07 +0000 (13:30 -0700)]
Inliner: introducing InlineStrategy
Create the `InlineStrategy` class to hold inline-relevant data that
spans multiple inlines. It tracks the number of inline candidates,
attempts, successes, last successful policy, and holds onto the root
context, and so on. The strategy is responsible for creating contexts
and reporting overall results for a method (either tree-based or
data-based).
The strategy also includes a simple jit time estimate. From various
observations, post-inline jit time can be modelled acceptably by simple
linear relationships on the input IL size. The strategy uses these models
to estimate the initial and current jit time. Estimate units are roughly
microseconds.
The strategy creates a time budget to flag cases where the estimated
jit time increase due to inlining is unreasonbly large. The budget
is initially based on the root method size, and may increase if there
are non-discretionary force inlines.
Once we have a bit more vetting of the budgeting mechanism, policies
will use it to limit inlining in a small number of runaway inlining cases
(see for example #2472).
Remove code under MEASURE_INLINING since the strategy plus the context
tree (optionally extended via policies) contains all that data and more.
Likewise, consolidate a number of the compiler's inlining-related member
variables into the strategy.
Jan Vorlicek [Thu, 14 Apr 2016 20:36:08 +0000 (22:36 +0200)]
Merge pull request #4330 from janvorli/fix-sigsegv-deadlock
Fix possibility of deadlock in the SIGSEGV handler
Pat Gavlin [Thu, 14 Apr 2016 19:57:01 +0000 (12:57 -0700)]
Merge pull request #4322 from pgavlin/TlsLogEnv
Collect the JIT's TLS variables in a single type.
Pat Gavlin [Thu, 14 Apr 2016 17:58:36 +0000 (10:58 -0700)]
Merge pull request #4314 from pgavlin/GcInfoSList
Replace `SList` in the GC info encoders.
Jan Vorlicek [Thu, 14 Apr 2016 17:44:56 +0000 (19:44 +0200)]
Fix potential deadlock when calling ExecutionManager::IsManagedCode
The function can deadlock if the calling thread was holding the
ExecutionManager writer lock.
Jose Perez Rodriguez [Thu, 14 Apr 2016 17:44:29 +0000 (10:44 -0700)]
Merge pull request #4308 from joperezr/RemoveWarnings
Remove native build warnings
Jose Perez Rodriguez [Tue, 12 Apr 2016 22:56:08 +0000 (15:56 -0700)]
Updating BuildTools
Russ Keldorph [Thu, 14 Apr 2016 14:10:24 +0000 (07:10 -0700)]
Merge pull request #4327 from RussKeldorph/structinregs
Fix structinregs test on x86
Jan Vorlicek [Wed, 6 Apr 2016 18:41:51 +0000 (20:41 +0200)]
Fix possibility of deadlock in the SIGSEGV handler
The SIGSEGV handler was transitively calling pthread_attr_get_np to
get current stack limit no matter where the exception happened. The
problem was that if the segmentation violation happened in a C
runtime function, this could lead to deadlock since pthread_attr_get_np
is not signal safe.
The fix is to add callback that will figure out if the failing instruction
was in managed code or in one of the jit helpers and if not, it would
not attempt to handle the signal.
I have also removed non signal safe calls from the signal handlers code
path where we don't know yet whether the interrupted code was in a function
that could collide with a function that we call from the signal handler
or not. This includes TRACE and ASSERT calls that were calling string
formatting functions.
Russ Keldorph [Thu, 14 Apr 2016 04:45:05 +0000 (21:45 -0700)]
Fix structinregs test on x86
Fix a typo in _MSC_VER resulting in a mismatched calling convention on
x86. While I'm in here, I'm also fixing some benign mismatched function
pointer type definitions.
Jan Kotas [Thu, 14 Apr 2016 03:54:21 +0000 (20:54 -0700)]
Add back Path APIs needed by UWP
[tfs-changeset: 1596013]
tijoytom [Wed, 13 Apr 2016 23:43:51 +0000 (16:43 -0700)]
Merge pull request #4297 from tijoytom/master
Disabling the failing struct by value scenario.
Pat Gavlin [Wed, 13 Apr 2016 23:06:18 +0000 (16:06 -0700)]
Collect the JIT's TLS variables in a single type.
Instead of storing pointers to the thread-local compiler instance
and the current logging environment in separate TLS slots, wrap
these values in a struct and store a pointer to the struct in a
single TLS slot. This simplifies and standardizes the JIT's interface
to its TLS storage, especially when it is being statically linked
into another program or library that cannot use standard TLS.
Note that for release builds, the logging environment is not used
and a pointer to the current compiler instance is stored directly
into the JIT's TLS slot as an implementation detail of the TLS
wrapper type.
Matt Mitchell [Wed, 13 Apr 2016 22:47:40 +0000 (15:47 -0700)]
Merge pull request #4320 from mmitche/add-reporting
Add reporting functionality to the coreclr netci file
Matt Mitchell [Wed, 13 Apr 2016 22:20:21 +0000 (15:20 -0700)]
Add reporting functionality to the coreclr netci file
Also eliminate a few jobs that aren't being referenced.
Matt Mitchell [Wed, 13 Apr 2016 22:24:25 +0000 (15:24 -0700)]
Merge pull request #4319 from mmitche/archive-needed
Only archive dylib and .so files from the native coreclr tests
Matt Mitchell [Wed, 13 Apr 2016 22:22:45 +0000 (15:22 -0700)]
Only archive dylib and .so files from the native coreclr tests
Avoids a few hundred extra files
Tijoy Tom Kalathiparambil [Tue, 12 Apr 2016 18:32:23 +0000 (11:32 -0700)]
Disabling the failing struct by value scenario.
Brian Robbins [Wed, 13 Apr 2016 21:15:14 +0000 (14:15 -0700)]
Merge pull request #4068 from Lucrecious/master
Generate map files for symbol resolution for Linux native images on PerfView
Pat Gavlin [Wed, 13 Apr 2016 19:55:47 +0000 (12:55 -0700)]
Refactor `MemoryBlockDesc`.
- Encapsulate link management into `MemoryBlockDescList`.
- Replace `MemoryBlockDesc` and its separately-allocated buffer
with a new type, `MemoryBlock`, that stores the link to the
next memory block with the buffer itself.
Carol Eidt [Wed, 13 Apr 2016 18:43:40 +0000 (11:43 -0700)]
Merge pull request #4303 from CarolEidt/NoBarrierLclVarAddr
No GC barrier needed for indirection of expressions involving lclVars
Zhicheng Zhu [Wed, 13 Apr 2016 18:40:47 +0000 (11:40 -0700)]
Enable SOS gcInfo command. All it does basically is just enable the gcdecoder
Enable SOS gcInfo command. Basically all it does is just enable the code related to sos gcInfo and make it compiled for linux.
Pat Gavlin [Mon, 11 Apr 2016 17:09:08 +0000 (10:09 -0700)]
Replace `SList` in the GC info encoders.
Instead of using `SList`, manage the links manually. There are only
a few list manipulations in the encoders, so this is not too onerous.
Fadi Hanna [Wed, 13 Apr 2016 17:40:38 +0000 (10:40 -0700)]
Merge pull request #4295 from fadimounir/typesystemtests
Bulk port of TypeSystem test cases
Russ Keldorph [Wed, 13 Apr 2016 17:29:40 +0000 (10:29 -0700)]
Merge pull request #4310 from RussKeldorph/arglist
Port arglist tests for x86 and ARM
Carol Eidt [Tue, 12 Apr 2016 19:53:31 +0000 (12:53 -0700)]
No GC barrier needed for LclVar address expressions
The check for the case where a barrier is not required when writing to a
local variable needs to include the LocalVarAddr and lclVar address
expression cases.
Update per comments
Kyungwoo Lee [Wed, 13 Apr 2016 12:27:14 +0000 (05:27 -0700)]
Merge pull request #4302 from kyulee1/badtest
ARM64: Tests update
Kyungwoo Lee [Tue, 12 Apr 2016 20:30:31 +0000 (13:30 -0700)]
ARM64: Tests update
- Delete bad test (sql_stress4) which uses Thread.Abort which is not in
.NET Core.
- Delete non-existing test (MarshalBoolArray)
- Update time-out for StringConcat4/StringConcat8 which usualy failed due to time-out.
- Made _opt_dbgexplicit5/_opt_relexplicit5 UNSTABLE which pass mostly when
running twice in the lab.
- Delete bad test (b519927) which uses AppDomain.DefineDynamicAssembly
which is not in .NET Core.
- Delete bad test (b16241) that has overflow conversion (from double to int).
Koundinya Veluri [Wed, 13 Apr 2016 04:19:01 +0000 (21:19 -0700)]
Merge pull request #4074 from kouvel/SoftwareWriteWatch
Implement software write watch and make concurrent GC functional outs…
Russ Keldorph [Tue, 12 Apr 2016 18:49:58 +0000 (11:49 -0700)]
Port arglist tests for x86 and ARM
Arglist tests, which are only valid on Windows, have non-x64 versions that
needed to be ported.
Sivarv [Wed, 13 Apr 2016 01:38:51 +0000 (18:38 -0700)]
Merge pull request #4273 from sivarv/multireg2
Force IR to be always var=call in case of multi-reg returning call nodes plus refactoring changes
Pat Gavlin [Tue, 12 Apr 2016 23:57:42 +0000 (16:57 -0700)]
Merge pull request #4255 from pgavlin/GcInfoArrayList
Refactor `StructArrayList` for the GC info encoder.
Koundinya Veluri [Thu, 7 Jan 2016 19:21:27 +0000 (11:21 -0800)]
Implement software write watch and make concurrent GC functional outside Windows
- Implemented software write watch using write barriers
- A new set of write barriers is introduced, each corresponding to an existing one, but which also updates the write watch table. The GC switches to a write watch barrier during concurrent GC, and switches back to a non write watch barrier after the final query for dirty pages.
- The write watch table is alloacted along with the card table
- Since the card table is used differently, different synchonization is used for the write watch table. The runtime is suspended during resize since that is the most infrequently occuring operation, of that, ResetWriteWatch, and GetWriteWatch.
- ResetWriteWatch() doesn't need a suspend, but since the software WW version is much faster than the Windows version, moved it into the suspended region to avoid some synchronization that would otherwise be required
- The background calls to GetWriteWatch() don't need or do a suspend. They only need to synchronize with the resize path, not for the purpose of correct functionality, but to not miss dirty pages such that concurrent GC is effective.
Miscellaneous:
- Fixed runtests.sh to copy mscorlib.dll and delete the Windows version of mscorlib.ni.dll
Russ Keldorph [Tue, 12 Apr 2016 23:14:41 +0000 (16:14 -0700)]
Merge pull request #4278 from RussKeldorph/t1
Fix two "missing DLL" test failures
Matt Mitchell [Tue, 12 Apr 2016 22:46:57 +0000 (15:46 -0700)]
Merge pull request #4296 from mmitche/fix-prefix-casing
Fix output casing of prefix dir
sivarv [Mon, 11 Apr 2016 18:49:41 +0000 (11:49 -0700)]
Refactoring changes to use ReturnTypeDesc in codegenxarch.
Swaroop Sridhar [Tue, 12 Apr 2016 20:32:10 +0000 (13:32 -0700)]
Merge pull request #4279 from swaroop-sridhar/GC
GCInfo: Fix ARM64 GCInfo decoding
Fadi Hanna [Tue, 12 Apr 2016 00:27:01 +0000 (17:27 -0700)]
Bulk port of TypeSystem test cases
Pat Gavlin [Fri, 8 Apr 2016 22:39:55 +0000 (15:39 -0700)]
Clean up StructArrayList for GC info.
- Move the code into the GC info encoder, as that is its
only consumer.
- Remove contracts
- Delete dead code
- Reformat and refactor to current coding standards
Jan Vorlicek [Tue, 12 Apr 2016 19:18:32 +0000 (21:18 +0200)]
Merge pull request #4292 from janvorli/hw-exceptions-change
Fix hardware exception handling in native code on BSD
Kyungwoo Lee [Tue, 12 Apr 2016 18:25:40 +0000 (11:25 -0700)]
Merge pull request #4294 from kyulee1/fixsp
ARM64: Fix for recording SP for handler.
Matt Mitchell [Tue, 12 Apr 2016 16:48:00 +0000 (09:48 -0700)]
Fix output casing of prefix dir
The PREFIX dir is upper case, should be refered to as such. Blocker for building on Linux
Russ Keldorph [Sun, 10 Apr 2016 10:58:19 +0000 (03:58 -0700)]
Fix two "missing DLL" test failures
Fix #2234 Missing native DLL
Fix #2237 Missing DLL is a MC++ test hiding alongside a C# wrapper--delete
test which was mistakenly ported.
Lubomir Litchev [Tue, 12 Apr 2016 17:39:28 +0000 (10:39 -0700)]
Merge pull request #4085 from LLITCHEV/Issue3618-1
Fix a bug in the code for inserting a tree in the linear order.
Zhicheng Zhu [Mon, 11 Apr 2016 18:01:21 +0000 (11:01 -0700)]
fix GCInfo build problem, tested a few simple "HelloWorld" program works good!
Kyungwoo Lee [Tue, 12 Apr 2016 16:11:53 +0000 (09:11 -0700)]
ARM64: Fix for recording SP for handler.
Fixes https://github.com/dotnet/coreclr/issues/3701.
When GC occurs in a catch handler, we compare the current frame with the one
saved before the funclet was invoked.
The recorded SP address was wrong (offset by 16 byte), which caused FindParentStackFrameForStackWalk to null frame.
So, we ended up with assert on `ExceptionTracker::HasFrameBeenUnwoundByAnyActiveException(&m_crawl)`.
The issue was assembly helper, CallEHFunclet records FP instead of SP while SP is adjusted in prolog.
Jan Kotas [Tue, 12 Apr 2016 13:42:03 +0000 (03:42 -1000)]
Merge pull request #4290 from leemgs/upstream-clang38
Add clang-3.8 into build.sh
Stephen Toub [Tue, 12 Apr 2016 13:19:29 +0000 (09:19 -0400)]
Merge pull request #4187 from stephentoub/lcts_dispose_cancel_race
Fix race condition between CTS.Cancel and Dispose
Jan Vorlicek [Mon, 11 Apr 2016 12:21:01 +0000 (14:21 +0200)]
Fix hardware exception handling in native code on BSD
There is a problem with hardware exception handling when the exception
happens in native code and it is under the HardwareExceptionHolder on
FreeBSD and NetBSD. The problem was that the C++ unwinder was unable
to cross the signal trampoline.
This change fixes the problem by throwing the PAL_SEHException from
the context of the hardware exception itself rather than from the
signal handler.
Since it uses the same code as we were using for StartUnwindingNativeFrames
in CoreCLR before, I have moved that stuff to PAL and let both CoreCLR and
the signal handlers use it too.
At the same time, I have reenabled the paltest_pal_sxs_test1 for FreeBSD and
NetBSD, since it now works.
Jan Vorlicek [Tue, 12 Apr 2016 08:15:03 +0000 (10:15 +0200)]
Merge pull request #4280 from krytarowski/netbsd-support-59
Use _lwp_self() in THREADSilentGetCurrentThreadId() for NetBSD
Geunsik Lim [Tue, 12 Apr 2016 06:11:53 +0000 (15:11 +0900)]
Add clang-3.8 into build.sh
According to the official release note, clang 3.8 is also stable version.
http://llvm.org/releases/download.html
Let's add version 3.8 of clang into build.sh script.
Signed-off-by: Geunsik Lim <geunsik.lim@samsung.com>
David Mason [Tue, 12 Apr 2016 04:13:24 +0000 (21:13 -0700)]
Merge pull request #4274 from davmason/master
Bug Fixes for EventSource
Lubomir Litchev [Tue, 5 Apr 2016 17:31:20 +0000 (10:31 -0700)]
Fix a bug in the code for inserting a tree in the linear order.
A long standing issue in the Compiler::fgInsertTreeInListBefore method was
found where the gtStmtList of a statement was not updated when a tree is
inserted before the first statement in the list (stmt->gtStmtList ==
insertionPoint). In such case the gtStmtList is not updated to include the
new tree(s) inserted.
After talking to few people offline to understand where this fix should be made
and realizing that the comment on Compiler::fgMakeEmbeddedStmt is
incorrect, I made the necessary fix in Compiler::fgInsertTreeInListBefore
so the newly inserted tree(s) in includedin the gtStmtList of the updated
stmt.
Fixes 3618.
Kamil Rytarowski [Tue, 12 Apr 2016 00:26:54 +0000 (02:26 +0200)]
Use _lwp_self() in THREADSilentGetCurrentThreadId() for NetBSD
The _lwp_self() call returns the LWP ID of the calling LWP.
It requires <lwp.h> on NetBSD.
Sejong Oh [Tue, 12 Apr 2016 00:19:29 +0000 (17:19 -0700)]
Merge pull request #4101 from sejongoh/detect_ldsfld_access_non_static_field
Check if LDSFLD accesses non-static field
Mike McLaughlin [Tue, 12 Apr 2016 00:06:44 +0000 (17:06 -0700)]
Merge pull request #4277 from mikem8361/rpath
Unable to debug coreclr apps on Debian 8.2 (Issue #4263)
Mike McLaughlin [Mon, 11 Apr 2016 22:37:42 +0000 (15:37 -0700)]
Unable to debug coreclr apps on Debian 8.2 (Issue #4263)
Add set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) to dbi and sos cmake files.
Mike McLaughlin [Mon, 11 Apr 2016 23:55:44 +0000 (16:55 -0700)]
Merge pull request #4218 from mikem8361/symbols
Add symbol packages for coreclr runtime.
Andy Ayers [Mon, 11 Apr 2016 23:52:45 +0000 (16:52 -0700)]
Merge pull request #4272 from AndyAyersMS/FixSpectralNorm
Fix validation of spectralnorm under xunit-performance
Swaroop Sridhar [Fri, 8 Apr 2016 01:09:13 +0000 (18:09 -0700)]
GCInfo: Fix ARM64 GCInfo decoding
GCStress traps were not inserted in ARM64 code correctly because safepoint
offsets were not correctly computed by EnumerateSafepoints().
This change fixes the issue by adding the (-1) adjustment to the ARM64
Safepoint offsets, similar to ARM and AMD64.
Sean Gillespie [Mon, 11 Apr 2016 22:58:49 +0000 (15:58 -0700)]
Merge pull request #4113 from swgillespie/long_running_gc
Create Long-running GC test job for the CI
David Mason [Mon, 11 Apr 2016 20:41:29 +0000 (13:41 -0700)]
Buffer sending of large manifests
Aditya Mandaleeka [Mon, 11 Apr 2016 22:24:11 +0000 (15:24 -0700)]
Merge pull request #4157 from chuckries/master
Fix error return in getPath
Maoni Stephens [Mon, 11 Apr 2016 22:22:15 +0000 (15:22 -0700)]
Merge pull request #4266 from janvorli/fix-brick-table-issue
Fix brick table issue on Unix
Yi Zhang (CLR) [Mon, 11 Apr 2016 22:15:28 +0000 (15:15 -0700)]
Merge pull request #4261 from yizhang82/byvalarray_fix
Fix ByValArray support.
ByValArray marshalling is implemented actually in OleVariant.cpp, which implements both regular array marshalling and variant marshalling). Regular array marshalling code should be supported in x-plat but it was incorrectly #ifdef-ed out. Fix by only #ifdef the COM interop VARIANT part.
Fix #4262 and #4194
Mike McLaughlin [Tue, 5 Apr 2016 00:52:15 +0000 (17:52 -0700)]
Add symbol packages for coreclr runtime.
Depends on the new buildtools symbol support.
Update build tools version containing the new symbol file support.
Mike McLaughlin [Mon, 11 Apr 2016 21:54:33 +0000 (14:54 -0700)]
Merge remote-tracking branch 'upstream/master'
Andy Ayers [Mon, 11 Apr 2016 21:21:56 +0000 (14:21 -0700)]
Fix validation of spectralnorm under xunit-performance
The valiation code wasn't correctly for the iteration strategy
used by xunit-performance.
Closes #4270.
David Mason [Mon, 11 Apr 2016 20:40:18 +0000 (13:40 -0700)]
Fix bug where Tags weren't respected in tracelogging.
David Mason [Mon, 11 Apr 2016 20:38:16 +0000 (13:38 -0700)]
Increase max etw arguments to 64
Michelle McDaniel [Mon, 11 Apr 2016 20:21:45 +0000 (13:21 -0700)]
Merge pull request #4269 from adiaaida/longSub
Add support for x86 long subtract operator
Bruce Forstall [Mon, 11 Apr 2016 19:23:33 +0000 (12:23 -0700)]
Merge pull request #4206 from BruceForstall/RyujitX86
Clean up JIT build rules
Bruce Forstall [Mon, 11 Apr 2016 19:23:02 +0000 (12:23 -0700)]
Merge pull request #4221 from BruceForstall/Cleanup1
Cleanup: be consistent about compCalleeFPRegsSavedMask #ifdefs
Bruce Forstall [Mon, 11 Apr 2016 19:22:46 +0000 (12:22 -0700)]
Merge pull request #4239 from BruceForstall/Cleanup2
Cleanup: remove getFramePointerReg()
Bruce Forstall [Mon, 11 Apr 2016 19:22:25 +0000 (12:22 -0700)]
Merge pull request #4242 from BruceForstall/Cleanup3
Add genEstablishFramePointer() to enapsulate frame pointer creation
Bruce Forstall [Mon, 11 Apr 2016 19:21:56 +0000 (12:21 -0700)]
Merge pull request #4243 from BruceForstall/Cleanup4
Minor JIT changes
Sean Gillespie [Mon, 11 Apr 2016 19:02:07 +0000 (12:02 -0700)]
Add longgc to a new assert
Sean Gillespie [Mon, 11 Apr 2016 18:52:16 +0000 (11:52 -0700)]
Add new trigger phrases to documentation
Sean Gillespie [Fri, 11 Mar 2016 23:48:56 +0000 (15:48 -0800)]
Create Long-running GC test job for the CI
Sejong Oh [Wed, 6 Apr 2016 00:52:14 +0000 (17:52 -0700)]
Fix JIT crash with static function accessing non-static field
The IL below is invalid since the static function acceses the non-static
field. On Desktop CRL, JIT throws a verification exception. However, CoreCLR
doesn't support verification and JIT crashes. This fix makes JIT throw a
invalid program exception if verification is disabled.
.field int32 i
.method static int32 f()
{
ldsfld int32 Test::i
ret
}
The test also expects InvalidProgramException instead of
VerificationException.
Russ Keldorph [Mon, 11 Apr 2016 18:11:35 +0000 (11:11 -0700)]
Merge pull request #4268 from RussKeldorph/ignore
Add missing arch-specifc strings in .gitignore
Michelle McDaniel [Mon, 11 Apr 2016 17:24:41 +0000 (10:24 -0700)]
Add support for x86 long subtract operator
With #3296, we have all the support for subtracting longs on x86. Subtract
can use the same logic as addition for longs.
Fixes #4189.
Yi Zhang (CLR) [Mon, 11 Apr 2016 06:59:35 +0000 (23:59 -0700)]
ByValArray marshaling support is implemented in OleVariant.cpp (which actually implements both regular array marshalling and variant marshalling) and is incorrectly #ifdef-ed out under x-plat. Fix by only #ifdef the COM interop VARIANT part.
Re-enable ByValArray test as well.
Russ Keldorph [Wed, 30 Mar 2016 18:16:40 +0000 (11:16 -0700)]
Add missing arch-specifc strings in .gitignore
I would prefer that the test build not drop cruft outside of designated
folders like bin, but unless/until that happens we should at least make
the architectures' builds consistent.
Lubomir Litchev [Mon, 11 Apr 2016 14:58:49 +0000 (07:58 -0700)]
Merge pull request #4240 from LLITCHEV/Issue4147
Add test for issue 4115.
Andy Ayers [Mon, 11 Apr 2016 14:44:21 +0000 (07:44 -0700)]
Merge pull request #4245 from AndyAyersMS/ModelPolicy
Inliner: initial version of a model-based policy
Jan Vorlicek [Mon, 11 Apr 2016 11:42:07 +0000 (13:42 +0200)]
Fix brick table issue on Unix
There is a problem with Clang compiling a loop that sets a range of brick
table entries that are "shorts" as a memset. That causes it to be written
by bytes in some cases on OSX (and it is a mere chance that the memset on
Linux is implemented so that it doesn't use byte access).
This was causing corruption of the brick table on OSX.
The fix is to mark the pointer that iterates over the brick table as volatile
to prevent the compiler from using the memset.
Jan Kotas [Mon, 11 Apr 2016 06:03:19 +0000 (20:03 -1000)]
Merge pull request #3990 from myungjoo/testing/fix3856
Fix Linux-ARM Broken Stack w/ ThePreStub
Jan Kotas [Mon, 11 Apr 2016 06:00:34 +0000 (20:00 -1000)]
Merge pull request #4257 from jkotas/noexecstack
Pass noexecstack option to the assembler on Linux
Lubomir Litchev [Sun, 10 Apr 2016 20:46:01 +0000 (13:46 -0700)]
Add a test for Issue 4147.
This checkin adds a test for Issue 4147.
stephentoub [Fri, 8 Apr 2016 17:01:19 +0000 (13:01 -0400)]
Fix race condition between CTS.Cancel and Dispose
In general, CancellationTokenSource.Dispose is not meant to be used concurrently with other operations on the instance: Dispose should only be used when the creator of the CTS is done with it. However, there's one common situation where recommended usage runs afoul of this. A typical usage of a LinkedCancellationTokenSource (as created by CancellationTokenSource.CreateLinkedTokenSource) is as follows:
```C#
private CancellationToken _internalCancellation;
public void SomeMethod(CancellationToken externalCancellation)
{
using (var cts = CancellationTokenSource.CreateLinkedTokenSource(externalCancellation, _internalCancellation))
{
DoWork(cts.Token);
}
}
```
where an LCTS is used to combine some external source of cancellation with some internal one. It's important that the LCTS then be disposed, as otherwise it'll end up leaking state into constituent CTs, and in particular in the case of the externally provided one, that could be a very long lived token. However, it's perfectly fine for the external token to have cancellation requested at any time during this method, which means that even though Dispose and Cancel weren't designed to be safe to execute concurrently, and even though we recommend against it, it's actually possible with recommended usage.
It's a very dificult race to reproduce, but when it does, the typical visible result is an ObjectDisposedException. State corruption could also result.
This commit addresses that in two ways:
1. Rather than having the LCTS register a delegate with each CT that calls Cancel, it instead has its delegate call NotifyCancellation. This is the same method Cancel calls, but without the upfront disposal check. That eliminates the easily visible result of a race that would cause an ObjectDisposedException.
2. With all of the tweaking that's been done to Dispose since it was originally written, it's actually very close to being safe to use concurrently with Cancel; this takes it the rest of the way (though we still don't want to document it as such, it's really just to make LCTS work correctly). The only state Dispose mutates that could be problematic is a Timer and a ManualResetEvent. Timer's Dispose is already thread-safe. MRE's isn't, so if it's been allocated (which is relatively rare), I add a single Interlocked.Exchange to null it out, and then do a volatile read on a state field to see whether cancellation is currently in progress, only Dispose'ing of the MRE if it is, and leaving it for finalization otherwise. On the Cancel side, we just add some null checks to ensure we're not attempting to Dispose of null'd out fields, again with volatile reads where necessary.
Yi Zhang (CLR) [Sun, 10 Apr 2016 04:59:35 +0000 (21:59 -0700)]
Merge pull request #4250 from yizhang82/nativevariant_fix
Fix GetObjectForNativeVariant test issue. It should roundtrip the actual object instead of IntPtr. Also add proper variant clean up code.
Fix #4192.
Jan Kotas [Sun, 10 Apr 2016 04:15:42 +0000 (18:15 -1000)]
Pass noexecstack option to the assembler on Linux
Jan Kotas [Sun, 10 Apr 2016 01:51:18 +0000 (15:51 -1000)]
Merge pull request #4253 from jamesqo/faulty-trues
Fix a couple of erroneous assert(trues)
Yi Zhang (CLR) [Sun, 10 Apr 2016 01:13:51 +0000 (18:13 -0700)]
Merge pull request #4256 from yizhang82/chararray_fix
Change Marshal.SizeOf to sizeof to calculate buffer size because Marshal.Copy copies managed contents, while Marshal.SizeOf gives native size. Fix #4254
Yi Zhang (CLR) [Sat, 9 Apr 2016 20:18:36 +0000 (13:18 -0700)]
Change Marshal.SizeOf to sizeof because Marshal.Copy copies managed contents and does not do marshalling.