else (CMAKE_SYSTEM_NAME STREQUAL Darwin)
# Ensure that objcopy is present
- if (DEFINED ENV{CROSSCOMPILE} AND NOT DEFINED CLR_CROSS_COMPONENTS_BUILD)
+ if (CLR_UNIX_CROSS_BUILD AND NOT DEFINED CLR_CROSS_COMPONENTS_BUILD)
if (CMAKE_SYSTEM_PROCESSOR STREQUAL armv7l OR CMAKE_SYSTEM_PROCESSOR STREQUAL aarch64 OR CMAKE_SYSTEM_PROCESSOR STREQUAL arm)
find_program(OBJCOPY ${TOOLCHAIN}-objcopy)
elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL i686)
endif()
set(CLR_CMAKE_PLATFORM_LINUX 1)
- # Detect Alpine Linux
- SET(OS_RELEASE_FILENAME "/etc/os-release")
- if (EXISTS ${OS_RELEASE_FILENAME})
- file(READ ${OS_RELEASE_FILENAME} OS_RELEASE)
- string(FIND "${OS_RELEASE}" "ID=alpine" CLR_CMAKE_PLATFORM_ALPINE_LINUX)
- if(CLR_CMAKE_PLATFORM_ALPINE_LINUX EQUAL -1)
- unset(CLR_CMAKE_PLATFORM_ALPINE_LINUX)
- endif(CLR_CMAKE_PLATFORM_ALPINE_LINUX EQUAL -1)
- endif(EXISTS ${OS_RELEASE_FILENAME})
+ # Detect Linux ID
+ if(DEFINED CLR_CMAKE_LINUX_ID)
+ if(CLR_CMAKE_LINUX_ID STREQUAL alpine)
+ set(CLR_CMAKE_PLATFORM_ALPINE_LINUX 1)
+ endif()
+ endif(DEFINED CLR_CMAKE_LINUX_ID)
endif(CMAKE_SYSTEM_NAME STREQUAL Linux)
if(CMAKE_SYSTEM_NAME STREQUAL Darwin)
--- /dev/null
+# Exception Handling Write Through Optimization.
+
+Write through is an optimization done on local variables that live across exception handling flow like a handler, filter, or finally so that they can be enregistered - treated as a register candidate - throughout a method. For each variable live across one of these constructs, the minimum requirement is that a store to the variables location on the stack is placed between a reaching definition and any point of control flow leading to the handler, as well as a load between any return from a filter or finally and an upward exposed use. Conceptually this maintains the value of the variable on the stack across the exceptional flow which would kill any live registers. This transformation splits a local variable into multiple enregisterable compiler temporaries backed by the local variable on the stack. For local vars that additionally have appearances within a eh construct, a load from the stack local is inserted to a temp that will be enregistered within the handler.
+
+## Motivation
+
+Historically the JIT has not done this transformation because exception handling was rare and thus the transformation was not worth the compile time. Additionally it was easy to make the recomendation to users to remove EH from performance critical methods since they had control of where the EH appeared. Neither of these points remain true as we increase our focus on cloud workloads. The use of non-blocking async calls are common in performance critical paths for these workloads and async injects exception handling constructs to implement the feature. This in combination with the long standing use of EH in 'foreach' and 'using' statements means that we are seeing EH constructs that are difficult for the user to manage or remove high in the profile (Techempower on Kestrel is a good example). Given these cloud workloads doing the transformation would be a clear benefit.
+
+## Design
+
+The goal of the design is to preserve the constraints listed above - i.e. preserve a correct value on the stack for any local var that crosses an EH edge in the flow graph. To ensure that the broad set of global optimizations can act on the IR shape produced by this transformation and that phase ordering issues do not block enregistration opportunities the write through phase will be staged just prior to SSA build after morph and it will do a full walk of the IR rewriting appearances to proxies as well as inserting reloads at the appropriate blocks in the flow graph as indicated by EH control flow semantics. To preserve the needed values on the stack a store will also be inserted after every definition to copy the new value in the proxy back to the stack location. This will leave non optimal number of stores (too many) but with the strategy that the more expensive analysis to eliminate/better place stores will be staged as a global optimization in a higher compilation tier.
+
+### Throughput
+
+To identify EH crossing local vars global liveness is necessary. This comes at the significant cost of the liveness analysis. To mitigate this the write through phase is staged immediately before SSA build for the global optimizer. Since the typical case is that there is no EH, the liveness analysis in write through can be reused directly by SSA build. For the case where EH local vars are present liveness today must be rebuilt for SSA since new local vars have been added, but incremental update to the RyuJIT liveness analysis can be implemented (worklist based live analysis) to improve the throughput. Additionally the write through transformation does a full IR walk - also expensive - to replace EH local var appearances with proxies and insert transfers to and from the stack for EH flow, given this initial implementations may need to be staged as part of AOT (crossgen) compiles until tiering can move the more expensive analysis out of the startup path.
+
+### Algorithm
+On the IR directly before SSA build:
+- Run global liveness to identify local vars that cross EH boundaries (as a byproduct of this these local vars are marked "do not enregister")
+- Foreach EH local var create a new local var "proxy" that can be enregisterd.
+- Iterate each block in the flow graph doing the following:
+ * Foreach tree in block do a post order traversal and
+ - Replace all appearances of EH local vars with the defined proxy
+ - Insert a copy of proxy definition back to the EH local var (on the stack)
+ * If EH handler entry block insert reloads from EH local var to proxy at block head
+ * If finally or filter exit, insert reloads from EH local var to proxy at successor block heads
+- For method entry block, insert reloads from parameter EH local vars to proxies
+
+At end no proxy should be live across EH flow and all value updates will be written back to the stack location.
+
+## Next steps
+
+The initial prototype that produced the example bellow is currently being improved to make it production ready. At the same time a more extensive suite of example tests are being developed.
+
+- [X] Proof of concept prototype.
+- [ ] Production implementation of WriteThru phase.
+- [ ] Suite of optimization examples/regression tests.
+- [ ] Testing
+ * [ ] Full CI test pass.
+ * [ ] JIT benchmark diffs.
+ * [ ] Kestrel techempower numbers.
+
+## Example
+
+The following is a simple example that shows enregistration for a local var live, and modified, through a catch.
+
+#### Source code snippet
+
+```
+class Enreg01
+{
+ int val;
+ double dist;
+
+ public Enreg01(int x) {
+ val = x;
+ dist = (double)x;
+ }
+
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ public int foo(ref double d) { return (int)d; }
+
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ public int Run()
+ {
+ int sum = val;
+
+ try {
+ TryValue(97);
+ }
+ catch (ValueException e)
+ {
+ Console.WriteLine("Catching {0}", Convert.ToString(e.x));
+ sum += val + e.x;
+ foo(ref dist);
+ sum += val;
+ }
+
+ return sum;
+ }
+
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ public int TryValue(int y)
+ {
+ if (y == 97)
+ {
+ Console.WriteLine("Throwing 97");
+ throw new ValueException(97);
+ }
+ else
+ {
+ return y;
+ }
+ }
+}
+```
+#### Post WriteThru GenTree nodes for Run() method
+
+The Run() contains the catch and is the only method the EH WriteThru modifies.
+
+```
+Creating enregisterable proxies:
+lvaGrabTemp returning 8 (V08 tmp5) (a long lifetime temp) called for Add proxy for EH Write Thru..
+Creating proxy V08 for local var V00
+
+lvaGrabTemp returning 9 (V09 tmp6) (a long lifetime temp) called for Add proxy for EH Write Thru..
+Creating proxy V09 for local var V01
+
+Trees after EH Write Thru
+
+---------------------------------------------------------------------------------------------------------------------------
+BBnum descAddr ref try hnd preds weight [IL range] [jump] [EH region] [flags]
+---------------------------------------------------------------------------------------------------------------------------
+BB01 [00000263A1C161B8] 1 1 [000..007) i label target
+BB02 [00000263A1C162D0] 1 0 BB01 1 [007..012) T0 try { } keep i try label gcsafe
+BB03 [00000263A1C16500] 2 BB02,BB04 1 [050..052) (return) i label target gcsafe
+++++ funclets follow
+BB04 [00000263A1C163E8] 0 0 0 [012..050)-> BB03 ( cret ) H0 F catch { } keep i rare label target gcsafe flet
+-------------------------------------------------------------------------------------------------------------------------------------
+
+------------ BB01 [000..007), preds={} succs={BB02}
+
+***** BB01, stmt 1
+ ( 3, 3) [000123] ------------ * stmtExpr void (IL ???... ???)
+N001 ( 3, 2) [000120] ------------ | /--* lclVar ref V00 this
+N003 ( 3, 3) [000122] -A------R--- \--* = ref
+N002 ( 1, 1) [000121] D------N---- \--* lclVar ref V08 tmp5
+
+***** BB01, stmt 2
+ ( 17, 13) [000005] ------------ * stmtExpr void (IL 0x000...0x006)
+N007 ( 3, 2) [000097] ------------ | /--* lclVar int V09 tmp6
+N009 ( 7, 5) [000098] -A------R--- | /--* = int
+N008 ( 3, 2) [000096] D------N---- | | \--* lclVar int V01 loc0
+N010 ( 17, 13) [000099] -A-XG------- \--* comma void
+N004 ( 6, 5) [000002] ---XG------- | /--* indir int
+N002 ( 1, 1) [000059] ------------ | | | /--* const long 16 field offset Fseq[val]
+N003 ( 4, 3) [000060] -------N---- | | \--* + byref
+N001 ( 3, 2) [000001] ------------ | | \--* lclVar ref V08 tmp5
+N006 ( 10, 8) [000004] -A-XG---R--- \--* = int
+N005 ( 3, 2) [000003] D------N---- \--* lclVar int V09 tmp6
+
+------------ BB02 [007..012), preds={BB01} succs={BB03}
+
+***** BB02, stmt 3
+ ( 16, 10) [000013] ------------ * stmtExpr void (IL 0x007...0x00F)
+N008 ( 16, 10) [000011] --C-G------- \--* call int Enreg01.TryIncrement
+N004 ( 1, 1) [000009] ------------ this in rcx +--* lclVar ref V08 tmp5
+N005 ( 1, 1) [000010] ------------ arg1 in rdx \--* const int 97
+
+------------ BB03 [050..052) (return), preds={BB02,BB04} succs={}
+
+***** BB03, stmt 4
+ ( 3, 3) [000119] ------------ * stmtExpr void (IL ???... ???)
+N001 ( 3, 2) [000116] ------------ | /--* lclVar int V01 loc0
+N003 ( 3, 3) [000118] -A------R--- \--* = int
+N002 ( 1, 1) [000117] D------N---- \--* lclVar int V09 tmp6
+
+***** BB03, stmt 5
+ ( 4, 3) [000017] ------------ * stmtExpr void (IL 0x050...0x051)
+N002 ( 4, 3) [000016] ------------ \--* return int
+N001 ( 3, 2) [000015] ------------ \--* lclVar int V09 tmp6
+
+------------ BB04 [012..050) -> BB03 (cret), preds={} succs={BB03}
+
+***** BB04, stmt 6
+ ( 5, 4) [000021] ------------ * stmtExpr void (IL 0x012...0x012)
+N001 ( 1, 1) [000007] -----O------ | /--* catchArg ref
+N003 ( 5, 4) [000020] -A---O--R--- \--* = ref
+N002 ( 3, 2) [000019] D------N---- \--* lclVar ref V03 tmp0
+
+***** BB04, stmt 7
+ ( 3, 3) [000111] ------------ * stmtExpr void (IL ???... ???)
+N001 ( 3, 2) [000108] ------------ | /--* lclVar ref V00 this
+N003 ( 3, 3) [000110] -A------R--- \--* = ref
+N002 ( 1, 1) [000109] D------N---- \--* lclVar ref V08 tmp5
+
+***** BB04, stmt 8
+ ( 3, 3) [000115] ------------ * stmtExpr void (IL ???... ???)
+N001 ( 3, 2) [000112] ------------ | /--* lclVar int V01 loc0
+N003 ( 3, 3) [000114] -A------R--- \--* = int
+N002 ( 1, 1) [000113] D------N---- \--* lclVar int V09 tmp6
+
+***** BB04, stmt 9
+ ( 59, 43) [000034] ------------ * stmtExpr void (IL 0x013...0x037)
+N021 ( 59, 43) [000031] --CXG------- \--* call void System.Console.WriteLine
+N002 ( 5, 12) [000066] ----G------- | /--* indir ref
+N001 ( 3, 10) [000065] ------------ | | \--* const(h) long 0xB3963070 "Catching {0}"
+N004 ( 9, 15) [000076] -A--G---R-L- arg0 SETUP +--* = ref
+N003 ( 3, 2) [000075] D------N---- | \--* lclVar ref V05 tmp2
+N012 ( 20, 14) [000029] --CXG------- | /--* call ref System.Convert.ToString
+N010 ( 6, 8) [000028] ---XG------- arg0 in rcx | | \--* indir int
+N008 ( 1, 4) [000067] ------------ | | | /--* const long 140 field offset Fseq[x]
+N009 ( 4, 6) [000068] -------N---- | | \--* + byref
+N007 ( 3, 2) [000027] ------------ | | \--* lclVar ref V03 tmp0
+N014 ( 24, 17) [000072] -ACXG---R-L- arg1 SETUP +--* = ref
+N013 ( 3, 2) [000071] D------N---- | \--* lclVar ref V04 tmp1
+N017 ( 3, 2) [000073] ------------ arg1 in rdx +--* lclVar ref V04 tmp1 (last use)
+N018 ( 3, 2) [000077] ------------ arg0 in rcx \--* lclVar ref V05 tmp2 (last use)
+
+***** BB04, stmt 10
+ ( 18, 19) [000044] ------------ * stmtExpr void (IL 0x028... ???)
+N014 ( 1, 1) [000101] ------------ | /--* lclVar int V09 tmp6
+N016 ( 5, 4) [000102] -A------R--- | /--* = int
+N015 ( 3, 2) [000100] D------N---- | | \--* lclVar int V01 loc0
+N017 ( 18, 19) [000103] -A-XG------- \--* comma void
+N010 ( 6, 8) [000039] ---XG------- | /--* indir int
+N008 ( 1, 4) [000081] ------------ | | | /--* const long 140 field offset Fseq[x]
+N009 ( 4, 6) [000082] -------N---- | | \--* + byref
+N007 ( 3, 2) [000038] ------------ | | \--* lclVar ref V03 tmp0 (last use)
+N011 ( 13, 15) [000041] ---XG------- | /--* + int
+N005 ( 4, 4) [000037] ---XG------- | | | /--* indir int
+N003 ( 1, 1) [000079] ------------ | | | | | /--* const long 16 field offset Fseq[val]
+N004 ( 2, 2) [000080] -------N---- | | | | \--* + byref
+N002 ( 1, 1) [000036] ------------ | | | | \--* lclVar ref V08 tmp5
+N006 ( 6, 6) [000040] ---XG------- | | \--* + int
+N001 ( 1, 1) [000035] ------------ | | \--* lclVar int V09 tmp6
+N013 ( 13, 15) [000043] -A-XG---R--- \--* = int
+N012 ( 1, 1) [000042] D------N---- \--* lclVar int V09 tmp6
+
+***** BB04, stmt 11
+ ( 20, 14) [000051] ------------ * stmtExpr void (IL 0x038...0x044)
+N013 ( 20, 14) [000049] --CXGO------ \--* call int Enreg01.foo
+N007 ( 1, 1) [000086] ------------ | /--* const long 8 field offset Fseq[dist]
+N008 ( 3, 3) [000087] ------------ | /--* + byref
+N006 ( 1, 1) [000085] ------------ | | \--* lclVar ref V08 tmp5
+N009 ( 5, 5) [000088] ---XGO-N---- arg1 in rdx +--* comma byref
+N005 ( 2, 2) [000084] ---X-O-N---- | \--* nullcheck byte
+N004 ( 1, 1) [000083] ------------ | \--* lclVar ref V08 tmp5
+N010 ( 1, 1) [000045] ------------ this in rcx \--* lclVar ref V08 tmp5
+
+***** BB04, stmt 12
+ ( 11, 10) [000058] ------------ * stmtExpr void (IL 0x045...0x04D)
+N009 ( 1, 1) [000105] ------------ | /--* lclVar int V09 tmp6
+N011 ( 5, 4) [000106] -A------R--- | /--* = int
+N010 ( 3, 2) [000104] D------N---- | | \--* lclVar int V01 loc0
+N012 ( 11, 10) [000107] -A-XG------- \--* comma void
+N005 ( 4, 4) [000054] ---XG------- | /--* indir int
+N003 ( 1, 1) [000094] ------------ | | | /--* const long 16 field offset Fseq[val]
+N004 ( 2, 2) [000095] -------N---- | | \--* + byref
+N002 ( 1, 1) [000053] ------------ | | \--* lclVar ref V08 tmp5
+N006 ( 6, 6) [000055] ---XG------- | /--* + int
+N001 ( 1, 1) [000052] ------------ | | \--* lclVar int V09 tmp6
+N008 ( 6, 6) [000057] -A-XG---R--- \--* = int
+N007 ( 1, 1) [000056] D------N---- \--* lclVar int V09 tmp6
+
+```
+
+#### Post register allocation and code generation code
+
+```diff
+--- base.asmdmp 2017-03-28 20:40:36.000000000 -0700
++++ wt.asmdmp 2017-03-28 20:41:11.000000000 -0700
+@@ -1,78 +1,85 @@
+ *************** After end code gen, before unwindEmit()
+-G_M16307_IG01: ; func=00, offs=000000H, size=0014H, gcVars=0000000000000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, nogc <-- Prolog IG
++G_M16307_IG01: ; func=00, offs=000000H, size=0017H, gcVars=0000000000000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, nogc <-- Prolog IG
+
+ push rbp
++push r14
+ push rdi
+ push rsi
++push rbx
+ sub rsp, 48
+-lea rbp, [rsp+40H]
+-mov qword ptr [V07 rbp-20H], rsp
++lea rbp, [rsp+50H]
++mov qword ptr [V07 rbp-30H], rsp
+ mov gword ptr [V00 rbp+10H], rcx
+
+-G_M16307_IG02: ; offs=000014H, size=000AH, gcVars=0000000000000001 {V00}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
++G_M16307_IG02: ; offs=000017H, size=000AH, gcVars=0000000000000001 {V00}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
+
+-mov rcx, gword ptr [V00 rbp+10H]
+-mov ecx, dword ptr [rcx+16]
+-mov dword ptr [V01 rbp-14H], ecx
++mov rsi, gword ptr [V00 rbp+10H]
++mov edi, dword ptr [rsi+16]
++mov dword ptr [V01 rbp-24H], edi
+
+-G_M16307_IG03: ; offs=00001EH, size=000FH, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
++G_M16307_IG03: ; offs=000021H, size=000EH, gcrefRegs=00000040 {rsi}, byrefRegs=00000000 {}, byref
+
+-mov rcx, gword ptr [V00 rbp+10H]
++mov rcx, rsi ; Elided reload in try region
+ mov edx, 97
+ call Enreg01:TryIncrement(int):int:this
+ nop
+
+-G_M16307_IG04: ; offs=00002DH, size=0003H, gcVars=0000000000000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
++G_M16307_IG04: ; offs=00002FH, size=0005H, gcVars=0000000000000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
+
+-mov eax, dword ptr [V01 rbp-14H]
++mov edi, dword ptr [V01 rbp-24H]
++mov eax, edi
+
+-G_M16307_IG05: ; offs=000030H, size=0008H, epilog, nogc, emitadd
++G_M16307_IG05: ; offs=000034H, size=000BH, epilog, nogc, emitadd
+
+-lea rsp, [rbp-10H]
++lea rsp, [rbp-20H]
++pop rbx
+ pop rsi
+ pop rdi
++pop r14
+ pop rbp
+ ret
+
+-G_M16307_IG06: ; func=01, offs=000038H, size=0014H, gcrefRegs=00000004 {rdx}, byrefRegs=00000000 {}, byref, funclet prolog, nogc
++G_M16307_IG06: ; func=01, offs=00003FH, size=0017H, gcrefRegs=00000004 {rdx}, byrefRegs=00000000 {}, byref, funclet prolog, nogc
+
+ push rbp
++push r14
+ push rdi
+ push rsi
++push rbx
+ sub rsp, 48
+ mov rbp, qword ptr [rcx+32]
+ mov qword ptr [rsp+20H], rbp
+-lea rbp, [rbp+40H]
++lea rbp, [rbp+50H]
+
+-G_M16307_IG07: ; offs=00004CH, size=005EH, gcVars=0000000000000001 {V00}, gcrefRegs=00000004 {rdx}, byrefRegs=00000000 {}, gcvars, byref, isz
++G_M16307_IG07: ; offs=000056H, size=0054H, gcVars=0000000000000001 {V00}, gcrefRegs=00000004 {rdx}, byrefRegs=00000000 {}, gcvars, byref, isz
+
+ mov rsi, rdx
+-mov rcx, 0x18A3C473070
+-mov rdi, gword ptr [rcx]
++mov rcx, gword ptr [V00 rbp+10H] ; Reload of proxy register
++mov rdi, rcx ; Missed peep
++mov ecx, dword ptr [V01 rbp-24H] ; Reload of proxy register
++mov ebx, ecx ; Missed peep
++mov rcx, 0x263B3963070
++mov r14, gword ptr [rcx] ; Missed addressing mode
+ mov ecx, dword ptr [rsi+140]
+ call System.Convert:ToString(int):ref
+ mov rdx, rax
+-mov rcx, rdi
++mov rcx, r14
+ call System.Console:WriteLine(ref,ref)
+-mov edx, dword ptr [V01 rbp-14H] ; Elided stack access
+-mov rcx, gword ptr [V00 rbp+10H] ; Elided stack access
+-add edx, dword ptr [rcx+16]
+-add edx, dword ptr [rsi+140]
+-mov dword ptr [V01 rbp-14H], edx ; Elided stack access
+-mov rdx, gword ptr [V00 rbp+10H] ; Elided stack access
+-add rdx, 8
+-mov rcx, gword ptr [V00 rbp+10H] ; Elided stack access
++add ebx, dword ptr [rdi+16]
++add ebx, dword ptr [rsi+140]
++lea rdx, bword ptr [rdi+8]
++mov rcx, rdi
+ call Enreg01:foo(byref):int:this
+-mov eax, dword ptr [V01 rbp-14H] ; Elided stack access
+-mov rdx, gword ptr [V00 rbp+10H] ; Elided stack access
+-add eax, dword ptr [rdx+16]
+-mov dword ptr [V01 rbp-14H], eax ; Elided stack access
++add ebx, dword ptr [rdi+16]
++mov dword ptr [V01 rbp-24H], ebx ; Store of proxy register
+ lea rax, G_M16307_IG04
+
+-G_M16307_IG08: ; offs=0000AAH, size=0008H, funclet epilog, nogc, emitadd
++G_M16307_IG08: ; offs=0000AAH, size=000BH, funclet epilog, nogc, emitadd
+
+ add rsp, 48
++pop rbx
+ pop rsi
+ pop rdi
++pop r14
+ pop rbp
+ ret
+
+```
+
+Summary of diff:
+replaced 6 loads and 2 stores with 2 loads, 1 store, 2 push, 2 pop.
+
+
+
|**openSUSE 42.1**|[![x64 status](https://img.shields.io/jenkins/s/https/ci.dot.net/job/dotnet_coreclr/job/master/debug_opensuse42.1.svg?label=x64)](http://ci.dot.net/job/dotnet_coreclr/job/master/job/debug_opensuse42.1)|[![x64 status](https://img.shields.io/jenkins/s/https/ci.dot.net/job/dotnet_coreclr/job/master/release_opensuse42.1.svg?label=x64)](http://ci.dot.net/job/dotnet_coreclr/job/master/job/release_opensuse42.1)|
|**OS X 10.12**|[![x64 status](https://img.shields.io/jenkins/s/https/ci.dot.net/job/dotnet_coreclr/job/master/debug_osx.svg?label=x64)](http://ci.dot.net/job/dotnet_coreclr/job/master/job/debug_osx)|[![x64 status](https://img.shields.io/jenkins/s/https/ci.dot.net/job/dotnet_coreclr/job/master/release_osx.svg?label=x64)](http://ci.dot.net/job/dotnet_coreclr/job/master/job/release_osx)|
|**Red Hat 7.2**|[![x64 status](https://img.shields.io/jenkins/s/https/ci.dot.net/job/dotnet_coreclr/job/master/debug_rhel7.2.svg?label=x64)](http://ci.dot.net/job/dotnet_coreclr/job/master/job/debug_rhel7.2)|[![x64 status](https://img.shields.io/jenkins/s/https/ci.dot.net/job/dotnet_coreclr/job/master/release_rhel7.2.svg?label=x64)](http://ci.dot.net/job/dotnet_coreclr/job/master/job/release_rhel7.2)|
-|**Fedora 23**|[![x64 status](https://img.shields.io/jenkins/s/https/ci.dot.net/job/dotnet_coreclr/job/master/debug_fedora23.svg?label=x64)](http://ci.dot.net/job/dotnet_coreclr/job/master/job/debug_fedora23)|[![x64 status](https://img.shields.io/jenkins/s/https/ci.dot.net/job/dotnet_coreclr/job/master/release_fedora23.svg?label=x64)](http://ci.dot.net/job/dotnet_coreclr/job/master/job/release_fedora23)|
|**Ubuntu 14.04**|[![x64 status](https://img.shields.io/jenkins/s/https/ci.dot.net/job/dotnet_coreclr/job/master/debug_ubuntu.svg?label=x64)](http://ci.dot.net/job/dotnet_coreclr/job/master/job/debug_ubuntu)|[![x64 status](https://img.shields.io/jenkins/s/https/ci.dot.net/job/dotnet_coreclr/job/master/release_ubuntu.svg?label=x64)](http://ci.dot.net/job/dotnet_coreclr/job/master/job/release_ubuntu)|
|**Ubuntu 16.04**|[![x64 status](https://img.shields.io/jenkins/s/https/ci.dot.net/job/dotnet_coreclr/job/master/debug_ubuntu16.04.svg?label=x64)](http://ci.dot.net/job/dotnet_coreclr/job/master/job/debug_ubuntu16.04)|[![x64 status](https://img.shields.io/jenkins/s/https/ci.dot.net/job/dotnet_coreclr/job/master/release_ubuntu16.04.svg?label=x64)](http://ci.dot.net/job/dotnet_coreclr/job/master/job/release_ubuntu16.04)|
|**Ubuntu 16.10**|[![x64 status](https://img.shields.io/jenkins/s/https/ci.dot.net/job/dotnet_coreclr/job/master/debug_ubuntu16.10.svg?label=x64)](http://ci.dot.net/job/dotnet_coreclr/job/master/job/debug_ubuntu16.10)|[![x64 status](https://img.shields.io/jenkins/s/https/ci.dot.net/job/dotnet_coreclr/job/master/release_ubuntu16.10.svg?label=x64)](http://ci.dot.net/job/dotnet_coreclr/job/master/job/release_ubuntu16.10)|
for more information on Nuget. For now it is enough to know Nuget is a system that
bundles components into `*.nupkg` files (which are ZIP archives) and these packages can be 'published'
either through a local file system path or by a URL (e.g. https://www.nuget.org/). There are then tools
-(e.g. Nuget.exe, Visual Studio, dotnet.exe) that based on a configuration file (project.json) know
+(e.g. Nuget.exe, Visual Studio, dotnet.exe) that based on a configuration file (.csproj) know
how to search these publishing locations and pull down consistent set of packages for the
application.
set __BuildTypeDebug=0
set __BuildTypeChecked=0
set __BuildTypeRelease=0
-set __BuildJit32="-DBUILD_JIT32=0"
+set __BuildJit32=0
set __BuildStandaloneGC="-DFEATURE_STANDALONE_GC=0"
set __PgoInstrument=0
if /i "%1" == "skipbuildpackages" (set __BuildPackages=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
if /i "%1" == "skiprestoreoptdata" (set __RestoreOptData=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
if /i "%1" == "usenmakemakefiles" (set __NMakeMakefiles=1&set __ConfigureOnly=1&set __BuildNative=1&set __BuildNativeCoreLib=0&set __BuildCoreLib=0&set __BuildTests=0&set __BuildPackages=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
-if /i "%1" == "buildjit32" (set __BuildJit32="-DBUILD_JIT32=1"&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
+if /i "%1" == "buildjit32" (set __BuildJit32=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
if /i "%1" == "pgoinstrument" (set __PgoInstrument=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
if /i "%1" == "ibcinstrument" (set __IbcTuning=/Tuning&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
if /i "%1" == "toolset_dir" (set __ToolsetDir=%2&set __PassThroughArgs=%__PassThroughArgs% %2&set processedArgs=!processedArgs! %1 %2&shift&shift&goto Arg_Loop)
pushd "%__IntermediatesDir%"
set __ExtraCmakeArgs=!___SDKVersion! "-DCLR_CMAKE_TARGET_OS=%__BuildOs%" "-DCLR_CMAKE_PACKAGES_DIR=%__PackagesDir%" "-DCLR_CMAKE_PGO_INSTRUMENT=%__PgoInstrument%" "-DCLR_CMAKE_OPTDATA_VERSION=%__PgoOptDataVersion%"
- call "%__SourceDir%\pal\tools\gen-buildsys-win.bat" "%__ProjectDir%" %__VSVersion% %__BuildArch% %__BuildJit32% %__BuildStandaloneGC% !__ExtraCmakeArgs!
+ call "%__SourceDir%\pal\tools\gen-buildsys-win.bat" "%__ProjectDir%" %__VSVersion% %__BuildArch% "-DBUILD_JIT32=%__BuildJit32%" %__BuildStandaloneGC% !__ExtraCmakeArgs!
@if defined _echo @echo on
popd
:SkipConfigure
set __nugetBuildArgs=-buildNugetPackage=true
)
+ set PackageCompatJit=
+ if "%__BuildJit32%" == "1" (
+ set PackageCompatJit=1
+ )
@call %__ProjectDir%\run.cmd build -Project=%__ProjectDir%\build.proj -MsBuildLog=!__MsbuildLog! -MsBuildWrn=!__MsbuildWrn! -MsBuildErr=!__MsbuildErr! !__nugetBuildArgs! %__RunArgs% !__ExtraBuildArgs! %__UnprocessedBuildArgs%
if not !errorlevel! == 0 (
echo %__MsgPrefix%Error: System.Private.CoreLib build failed. Refer to the build log files for details:
'Ubuntu16.04': 'Linux',
'Ubuntu16.10': 'Linux',
'Debian8.4':'Linux',
- 'Fedora23':'Linux',
'OSX10.12':'OSX',
'Windows_NT':'Windows_NT',
'FreeBSD':'FreeBSD',
'RHEL7.2',
'Ubuntu16.04',
'Ubuntu16.10',
- 'Tizen',
- 'Fedora23']
+ 'Tizen']
def static crossList = ['Ubuntu', 'OSX10.12', 'CentOS7.1', 'RHEL7.2', 'Debian8.4']
def static configurationList = ['Debug', 'Checked', 'Release']
// This is the set of architectures
- def static architectureList = ['arm', 'arm64', 'x64', 'x86', 'x86compatjit']
+ def static architectureList = ['arm', 'arm64', 'x64', 'x86']
}
def static setMachineAffinity(def job, def os, def architecture) {
if (architecture == 'arm64' && os == 'Windows_NT') {
- // For cross compilation
- job.with {
- label('arm64')
- }
+ Utilities.setMachineAffinity(job, os, 'latest-arm64');
} else if (architecture == 'arm64' && os == 'Ubuntu') {
Utilities.setMachineAffinity(job, os, 'arm-cross-latest');
} else if ((architecture == 'arm') && (os == 'Ubuntu' || os == 'Ubuntu16.04' || os == 'Tizen')) {
case 'x86':
baseName = architecture.toLowerCase() + '_' + configuration.toLowerCase() + '_' + os.toLowerCase()
break
- case 'x86compatjit':
- baseName = 'x86_compatjit_' + configuration.toLowerCase() + '_' + os.toLowerCase()
- break
default:
println("Unknown architecture: ${architecture}");
assert false
switch (architecture) {
case 'x64':
case 'x86':
- case 'x86compatjit':
if (architecture == 'x86' && os == 'Ubuntu') {
Utilities.addPeriodicTrigger(job, '@daily')
}
}
}
// For x86, only add per-commit jobs for Windows
- else if (architecture == 'x86' || architecture == 'x86compatjit') {
+ else if (architecture == 'x86') {
if (os == 'Windows_NT') {
Utilities.addGithubPushTrigger(job)
}
}
}
// For x86, only add per-commit jobs for Windows
- else if (architecture == 'x86' || architecture == 'x86compatjit') {
+ else if (architecture == 'x86') {
if (os == 'Windows_NT') {
Utilities.addPeriodicTrigger(job, 'H H * * 3,6') // some time every Wednesday and Saturday
}
case 'illink':
// Testing on other operating systems TBD
- assert (os == 'Windows_NT')
+ assert (os == 'Windows_NT' || os == 'Ubuntu')
if (architecture == 'x64' || architecture == 'x86') {
- Utilities.addPeriodicTrigger(job, '@daily')
+ if (configuration == 'Checked') {
+ Utilities.addPeriodicTrigger(job, '@daily')
+ }
}
break
// Distinguish with the other architectures (arm and x86)
Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${architecture} ${configuration} Build", "(?i).*test\\W+${os}\\W+${architecture}.*")
break
- case 'Fedora23':
case 'Ubuntu16.10':
case 'OpenSUSE42.1':
assert !isFlowJob
Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${architecture} ${configuration} Build", "(?i).*test\\W+${os}\\W+.*")
break
case 'Ubuntu':
+ if (scenario == 'illink') {
+ Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${architecture} ${configuration} via ILLink", "(?i).*test\\W+${os}\\W+${architecture}\\W+${configuration}\\W+${scenario}.*")
+ break
+ }
+ // fall through
case 'OSX10.12':
// Triggers on the non-flow jobs aren't necessary here
// Corefx testing uses non-flow jobs.
}
break
// editor brace matching: }
- case 'x86compatjit': // editor brace matching: {
- assert (os == 'Windows_NT')
- def arch = 'x86'
- def jit = 'compatjit'
- switch (scenario) {
- case 'default':
- if (configuration == 'Checked') {
- Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${arch} ${jit} ${configuration} Build and Test",
- "(?i).*test\\W+${os}\\W+${arch}\\W+${jit}\\W+${configuration}.*")
- }
- break
- case 'pri1':
- if (configuration == 'Release') {
- Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${arch} ${jit} ${configuration} Priority 1 Build and Test",
- "(?i).*test\\W+${os}\\W+${arch}\\W+${jit}\\W+${configuration}\\W+Priority 1 Build and Test.*")
- }
- break
- case 'ilrt':
- if (configuration == 'Release') {
- Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${arch} ${jit} ${configuration} IL RoundTrip Build and Test",
- "(?i).*test\\W+${os}\\W+${arch}\\W+${jit}\\W+${configuration}\\W+${scenario}.*")
- }
- break
- case 'r2r':
- if (configuration == 'Checked' || configuration == 'Release') {
- Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${arch} ${jit} ${configuration} R2R pri0 Build & Test",
- "(?i).*test\\W+${os}\\W+${arch}\\W+${jit}\\W+${configuration}\\W+${scenario}.*")
- }
- break
- case 'pri1r2r':
- if (configuration == 'Checked' || configuration == 'Release') {
- Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${arch} ${jit} ${configuration} R2R pri1 Build & Test",
- "(?i).*test\\W+${os}\\W+${arch}\\W+${jit}\\W+${configuration}\\W+${scenario}.*")
- }
- break
- case 'gcstress15_pri1r2r':
- if (configuration == 'Release' || configuration == 'Checked') {
- Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${arch} ${jit} ${configuration} GCStress 15 R2R pri1 Build & Test",
- "(?i).*test\\W+${os}\\W+${arch}\\W+${jit}\\W+${configuration}\\W+${scenario}.*")
- }
- break
- case 'r2r_jitstress1':
- case 'r2r_jitstress2':
- case 'r2r_jitstressregs1':
- case 'r2r_jitstressregs2':
- case 'r2r_jitstressregs3':
- case 'r2r_jitstressregs4':
- case 'r2r_jitstressregs8':
- case 'r2r_jitstressregs0x10':
- case 'r2r_jitstressregs0x80':
- case 'r2r_jitstressregs0x1000':
- case 'r2r_jitminopts':
- case 'r2r_jitforcerelocs':
- if (configuration == 'Release' || configuration == 'Checked') {
- def displayStr = getR2RStressModeDisplayName(scenario)
- Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${arch} ${jit} ${configuration} ${displayStr} R2R Build & Test",
- "(?i).*test\\W+${os}\\W+${arch}\\W+${jit}\\W+${configuration}\\W+${scenario}.*")
- }
- break
- case 'longgc':
- if (configuration == 'Release') {
- Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${arch} ${jit} ${configuration} Long-Running GC Build & Test",
- "(?i).*test\\W+${os}\\W+${arch}\\W+${jit}\\W+${configuration}\\W+${scenario}.*")
- }
- break
- case 'gcsimulator':
- if (configuration == 'Release') {
- Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${arch} ${jit} ${configuration} GC Simulator",
- "(?i).*test\\W+${os}\\W+${arch}\\W+${jit}\\W+${configuration}\\W+${scenario}.*")
- }
- break
- case 'standalone_gc':
- if (configuration == 'Release' || configuration == 'Checked') {
- Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${architecture} ${configuration} Standalone GC", "(?i).*test\\W+${os}\\W+${configuration}\\W+${scenario}.*")
- }
- break
- case 'minopts':
- case 'forcerelocs':
- case 'jitstress1':
- case 'jitstress2':
- case 'jitstressregs1':
- case 'jitstressregs2':
- case 'jitstressregs3':
- case 'jitstressregs4':
- case 'jitstressregs8':
- case 'jitstressregs0x10':
- case 'jitstressregs0x80':
- case 'jitstressregs0x1000':
- case 'jitstress2_jitstressregs1':
- case 'jitstress2_jitstressregs2':
- case 'jitstress2_jitstressregs3':
- case 'jitstress2_jitstressregs4':
- case 'jitstress2_jitstressregs8':
- case 'jitstress2_jitstressregs0x10':
- case 'jitstress2_jitstressregs0x80':
- case 'jitstress2_jitstressregs0x1000':
- case 'tailcallstress':
- case 'jitsse2only':
- case 'gcstress0x3':
- case 'gcstress0xc':
- case 'zapdisable':
- case 'heapverify1':
- case 'gcstress0xc_zapdisable':
- case 'gcstress0xc_zapdisable_jitstress2':
- case 'gcstress0xc_zapdisable_heapverify1':
- case 'gcstress0xc_jitstress1':
- case 'gcstress0xc_jitstress2':
- case 'gcstress0xc_minopts_heapverify1':
- def displayStr = getStressModeDisplayName(scenario)
- Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${arch} ${jit} ${configuration} Build and Test (Jit - ${displayStr})",
- "(?i).*test\\W+${os}\\W+${arch}\\W+${jit}\\W+${configuration}\\W+${scenario}.*")
- break
- case 'corefx_baseline':
- case 'corefx_minopts':
- case 'corefx_jitstress1':
- case 'corefx_jitstress2':
- case 'corefx_jitstressregs1':
- case 'corefx_jitstressregs2':
- case 'corefx_jitstressregs3':
- case 'corefx_jitstressregs4':
- case 'corefx_jitstressregs8':
- case 'corefx_jitstressregs0x10':
- case 'corefx_jitstressregs0x80':
- case 'corefx_jitstressregs0x1000':
- def displayName = ('CoreFx ' + getStressModeDisplayName(scenario)).trim()
- assert (os == 'Windows_NT')
- Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${arch} ${jit} ${configuration} Build and Test (Jit - ${displayName})",
- "(?i).*test\\W+${os}\\W+${arch}\\W+${jit}\\W+${configuration}\\W+${scenario}.*")
- break
- case 'illink':
- Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${architecture} ${configuration} via ILLink", "(?i).*test\\W+${os}\\W+${architecture}\\W+${configuration}\\W+${scenario}.*")
- break
- default:
- println("Unknown scenario: ${os} ${arch} ${jit} ${scenario}");
- assert false
- break
- }
- break
- // editor brace matching: }
default:
println("Unknown architecture: ${architecture}");
assert false
switch (architecture) {
case 'x64':
case 'x86':
- case 'x86compatjit':
def arch = architecture
def buildOpts = ''
- // We need to explicitly run build-test.cmd with Exclude for x86compatjit, so skip tests.
- if (architecture == 'x86compatjit') {
- arch = 'x86'
- buildOpts = 'compatjitcrossgen skiptests'
- }
-
- def illinkArch = (architecture == 'x86compatjit') ? 'x86' : architecture
if (scenario == 'illink') {
- buildCommands += "tests\\scripts\\build_illink.cmd clone ${illinkArch}"
+ buildCommands += "tests\\scripts\\build_illink.cmd clone ${arch}"
}
if (Constants.jitStressModeScenarios.containsKey(scenario) ||
if (scenario == 'illink')
{
- illinkArguments = "link %WORKSPACE%\\linker\\linker\\bin\\netcore_Relase\\netcoreapp2.0\\win10-${illinkArch}\\publish\\illink.exe"
+ illinkArguments = "link %WORKSPACE%\\linker\\linker\\bin\\netcore_Release\\netcoreapp2.0\\win10-${arch}\\publish\\illink.exe"
}
runtestArguments = "${lowerConfiguration} ${arch} ${gcstressStr} ${crossgenStr} ${runcrossgentestsStr} ${runjitstressStr} ${runjitstressregsStr} ${runjitmioptsStr} ${runjitforcerelocsStr} ${runjitdisasmStr} ${gcTestArguments} ${illinkArguments} collectdumps"
else if (architecture == 'x64' || architecture == 'x86') {
buildCommands += "tests\\runtest.cmd ${runtestArguments}"
}
- else if (architecture == 'x86compatjit') {
- def testEnvLocation = "%WORKSPACE%\\tests\\x86\\compatjit_x86_testenv.cmd"
- buildCommands += "build-test.cmd ${runtestArguments}"
- buildCommands += "tests\\runtest.cmd ${runtestArguments} TestEnv ${testEnvLocation}"
- }
}
if (!enableCorefxTesting) {
case 'RHEL7.2':
case 'OpenSUSE42.1':
case 'Tizen':
- case 'Fedora23': // editor brace matching: {
switch (architecture) {
case 'x64':
case 'x86':
- case 'x86compatjit':
- def arch = architecture
- if (architecture == 'x86compatjit') {
- arch = 'x86'
- }
-
if (architecture == 'x86' && os == 'Ubuntu') {
// build only, not test yet
buildCommands += "./tests/scripts/x86_ci_script.sh --buildConfig=${lowerConfiguration}"
}
if (scenario == 'formatting') {
- buildCommands += "python tests/scripts/format.py -c \${WORKSPACE} -o Linux -a ${arch}"
+ buildCommands += "python tests/scripts/format.py -c \${WORKSPACE} -o Linux -a ${architecture}"
Utilities.addArchival(newJob, "format.patch", "", true, false)
break
}
+ if (scenario == 'illink') {
+ assert(os == 'Ubuntu')
+ buildCommands += "./tests/scripts/build_illink.sh --clone --arch=${architecture}"
+ }
+
def standaloneGc = ''
if (scenario == 'standalone_gc') {
standaloneGc = 'buildstandalonegc'
// only on supported OS platforms.
if (os == 'FreeBSD')
{
- buildCommands += "./build.sh skipmscorlib verbose ${lowerConfiguration} ${arch} ${standaloneGc}"
+ buildCommands += "./build.sh skipmscorlib verbose ${lowerConfiguration} ${architecture} ${standaloneGc}"
}
else
{
def bootstrapRid = Utilities.getBoostrapPublishRid(os)
def bootstrapRidEnv = bootstrapRid != null ? "__PUBLISH_RID=${bootstrapRid} " : ''
- buildCommands += "${bootstrapRidEnv}./build.sh verbose ${lowerConfiguration} ${arch} ${standaloneGc}"
+ buildCommands += "${bootstrapRidEnv}./build.sh verbose ${lowerConfiguration} ${architecture} ${standaloneGc}"
}
- buildCommands += "src/pal/tests/palsuite/runpaltests.sh \${WORKSPACE}/bin/obj/${osGroup}.${arch}.${configuration} \${WORKSPACE}/bin/paltestout"
+ buildCommands += "src/pal/tests/palsuite/runpaltests.sh \${WORKSPACE}/bin/obj/${osGroup}.${architecture}.${configuration} \${WORKSPACE}/bin/paltestout"
// Set time out
setTestJobTimeOut(newJob, scenario)
def workspaceRelativeFxRoot = "_/fx"
def absoluteFxRoot = "\$WORKSPACE/${workspaceRelativeFxRoot}"
- buildCommands += "python -u \$WORKSPACE/tests/scripts/run-corefx-tests.py -arch ${arch} -build_type ${configuration} -fx_root ${absoluteFxRoot} -fx_branch ${branch} -env_script ${scriptFileName}"
+ buildCommands += "python -u \$WORKSPACE/tests/scripts/run-corefx-tests.py -arch ${architecture} -build_type ${configuration} -fx_root ${absoluteFxRoot} -fx_branch ${branch} -env_script ${scriptFileName}"
setTestJobTimeOut(newJob, scenario)
return
}
break
- case 'x86compatjit':
- // Skip non-windows
- if (os != 'Windows_NT') {
- return
- }
- break
case 'x64':
// Everything implemented
break
}
// Windows: Everything implemented
break
- case 'x86compatjit':
- // No stress modes for compatjit.dll.
- // (There's no technical reason we couldn't allow these.)
- return
default:
return
}
}
break
case 'illink':
- if (os != 'Windows_NT') {
+ if (os != 'Windows_NT' && (os != 'Ubuntu' || architecture != 'x64')) {
return
}
- if (architecture != 'x64' && architecture != 'x86' && architecture != 'x86compatjit') {
+ if (architecture != 'x64' && architecture != 'x86') {
return
}
if (isBuildOnly) {
case 'formatting':
return
case 'illink':
- if (os != 'Windows_NT') {
+ if (os != 'Windows_NT' && os != 'Ubuntu') {
return
}
break
def runjitforcerelocsStr = ''
def runjitdisasmStr = ''
def gcstressStr = ''
+ def illinkStr = ''
if (scenario == 'r2r' ||
scenario == 'pri1r2r' ||
runjitdisasmStr = '--jitdisasm --crossgen'
}
+ if (scenario == 'illink')
+ {
+ illinkStr = '--link=\$WORKSPACE/linker/linker/bin/netcore_Release/netcoreapp2.0/ubuntu-x64/publish/illink'
+ }
+
if (isLongGc(scenario)) {
// Long GC tests behave very poorly when they are not
// the only test running (many of them allocate until OOM).
--mscorlibDir=\"\${WORKSPACE}/bin/Product/${osGroup}.${architecture}.${configuration}\" \\
--coreFxBinDir=\"\${WORKSPACE}/bin/CoreFxBinDir\" \\
--limitedDumpGeneration \\
- ${testEnvOpt} ${serverGCString} ${gcstressStr} ${crossgenStr} ${runcrossgentestsStr} ${runjitstressStr} ${runjitstressregsStr} ${runjitmioptsStr} ${runjitforcerelocsStr} ${runjitdisasmStr} ${sequentialString} ${playlistString}""")
+ ${testEnvOpt} ${serverGCString} ${gcstressStr} ${crossgenStr} ${runcrossgentestsStr} ${runjitstressStr} ${runjitstressregsStr} ${runjitmioptsStr} ${runjitforcerelocsStr} ${runjitdisasmStr} ${illinkStr} ${sequentialString} ${playlistString}""")
}
}
}
'RHEL7.2': 'Linux',
'Ubuntu16.04': 'Linux',
'Debian8.4':'Linux',
- 'Fedora23':'Linux',
'OSX':'OSX',
'Windows_NT':'Windows_NT',
'FreeBSD':'FreeBSD',
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<NativeBinary Include="$(BinDir)clrjit.dll" />
- <NativeBinary Condition="'$(Platform)' == 'x86'" Include="$(BinDir)compatjit.dll" />
+ <NativeBinary Condition="'$(Platform)' == 'x86' and '$(PackageCompatJit)' != ''" Include="$(BinDir)compatjit.dll" />
<CrossArchitectureSpecificNativeFileAndSymbol Include="$(BinDir)$(CrossTargetComponentFolder)\clrjit.dll" />
<!-- prevent accidental inclusion in AOT projects. -->
<PropertyGroup>
<_PlatformDoesNotSupportNiFiles Condition="'$(Platform)' == 'arm'">true</_PlatformDoesNotSupportNiFiles>
<_PlatformDoesNotSupportNiFiles Condition="'$(Platform)' == 'armel'">true</_PlatformDoesNotSupportNiFiles>
+ <_PlatformDoesNotSupportNiFiles Condition="'$(Platform)' == 'x86'">true</_PlatformDoesNotSupportNiFiles>
+ <_PlatformDoesNotSupportEventTrace Condition="'$(Platform)' == 'arm'">true</_PlatformDoesNotSupportEventTrace>
+ <_PlatformDoesNotSupportEventTrace Condition="'$(Platform)' == 'armel'">true</_PlatformDoesNotSupportEventTrace>
+ <_PlatformDoesNotSupportEventTrace Condition="'$(Platform)' == 'x86'">true</_PlatformDoesNotSupportEventTrace>
</PropertyGroup>
<ItemGroup>
<NativeBinary Include="$(BinDir)libcoreclr.so" />
- <NativeBinary Condition="'$(_PlatformDoesNotSupportNiFiles)' != 'true'" Include="$(BinDir)libcoreclrtraceptprovider.so" />
+ <NativeBinary Condition="'$(_PlatformDoesNotSupportEventTrace)' != 'true'" Include="$(BinDir)libcoreclrtraceptprovider.so" />
<NativeBinary Include="$(BinDir)libdbgshim.so" />
<NativeBinary Include="$(BinDir)libmscordaccore.so" />
<NativeBinary Include="$(BinDir)libmscordbi.so" />
<NativeBinary Include="$(BinDir)mscorrc.dll" />
<NativeBinary Include="$(BinDir)sos.dll" />
<NativeBinary Include="$(BinDir)System.Private.CoreLib.ni.dll" />
+ <NativeBinary Include="$(UniversalCRTSDKDir)Redist\ucrt\DLLs\$(BuildArch)\*.dll" Condition="'$(BuildType)'=='Release' AND '$(BuildArch)' != 'arm64'" />
<ArchitectureSpecificLibFile Include="$(BinDir)System.Private.CoreLib.dll" />
<ArchitectureSpecificLibFile Include="$(BinDir)SOS.NETCore.dll" />
<ArchitectureSpecificToolFile Include="$(BinDir)crossgen.exe" />
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+
+ <Target Name="VerifyVCRedist" BeforeTargets="GetSymbolPackageFiles" Condition="'$(_runtimeOSFamily)' == 'win'">
+ <Error Condition="'$(UniversalCRTSDKDir)' == ''" Text="Unable to find VC Redist binaries - check that UniversalCRTSDKDir environment variable is set" />
+ </Target>
<!--
Finds symbol files and injects them into the package build.
-->
}
FCIMPLEND
-
-
FCIMPL0(FC_BOOL_RET, SystemNative::IsServerGC)
{
FCALL_CONTRACT;
#endif // FEATURE_COMINTEROP
-// Helper method to retrieve OS Version based on the environment.
-BOOL GetOSVersionForEnvironment(LPOSVERSIONINFO lpVersionInformation)
-{
-#ifdef FEATURE_WINDOWSPHONE
- // Return phone version information if it is available
- if (!g_fGetPhoneVersionInitialized)
- {
- HMODULE hPhoneInfo = WszLoadLibrary(W("phoneinfo.dll"));
- if(hPhoneInfo != NULL)
- g_pfnGetPhoneVersion = (pfnGetPhoneVersion)GetProcAddress(hPhoneInfo, "GetPhoneVersion");
-
- g_fGetPhoneVersionInitialized = true;
- }
-
- if (g_pfnGetPhoneVersion!= NULL)
- return g_pfnGetPhoneVersion(lpVersionInformation);
-#endif // FEATURE_WINDOWSPHONE
-
- return ::GetOSVersion(lpVersionInformation);
-}
-
-
-/*
- * SystemNative::GetOSVersion - Fcall corresponding to System.Environment.GetVersion
- * It calls clr!GetOSVersion to get the real OS version even when running in
- * app compat. Calling kernel32!GetVersionEx() directly will be shimmed and will return the
- * fake OS version. In order to avoid this the call to getVersionEx is made via mscoree.dll.
- * Mscoree.dll resides in system32 dir and is never lied about OS version.
- */
-
-FCIMPL1(FC_BOOL_RET, SystemNative::GetOSVersion, OSVERSIONINFOObject *osVer)
-{
- FCALL_CONTRACT;
-
- OSVERSIONINFO ver;
- ver.dwOSVersionInfoSize = osVer->dwOSVersionInfoSize;
-
- BOOL ret = GetOSVersionForEnvironment(&ver);
-
- if(ret)
- {
- osVer->dwMajorVersion = ver.dwMajorVersion;
- osVer->dwMinorVersion = ver.dwMinorVersion;
- osVer->dwBuildNumber = ver.dwBuildNumber;
- osVer->dwPlatformId = ver.dwPlatformId;
-
- HELPER_METHOD_FRAME_BEGIN_RET_1(osVer);
- SetObjectReference((OBJECTREF*)&(osVer->szCSDVersion), StringObject::NewString(ver.szCSDVersion), GetAppDomain());
- HELPER_METHOD_FRAME_END();
- }
-
- FC_RETURN_BOOL(ret);
-}
-FCIMPLEND
-
-/*
- * SystemNative::GetOSVersionEx - Fcall implementation for System.Environment.GetVersionEx
- * Similar as above except this takes OSVERSIONINFOEX structure as input
- */
-
-FCIMPL1(FC_BOOL_RET, SystemNative::GetOSVersionEx, OSVERSIONINFOEXObject *osVer)
-{
- FCALL_CONTRACT;
-
- OSVERSIONINFOEX ver;
- ver.dwOSVersionInfoSize = osVer->dwOSVersionInfoSize;
-
- BOOL ret = GetOSVersionForEnvironment((OSVERSIONINFO *)&ver);
-
- if(ret)
- {
- osVer->dwMajorVersion = ver.dwMajorVersion;
- osVer->dwMinorVersion = ver.dwMinorVersion;
- osVer->dwBuildNumber = ver.dwBuildNumber;
- osVer->dwPlatformId = ver.dwPlatformId;
- osVer->wServicePackMajor = ver.wServicePackMajor;
- osVer->wServicePackMinor = ver.wServicePackMinor;
- osVer->wSuiteMask = ver.wSuiteMask;
- osVer->wProductType = ver.wProductType;
- osVer->wReserved = ver.wReserved;
-
- HELPER_METHOD_FRAME_BEGIN_RET_1(osVer);
- SetObjectReference((OBJECTREF*)&(osVer->szCSDVersion), StringObject::NewString(ver.szCSDVersion), GetAppDomain());
- HELPER_METHOD_FRAME_END();
- }
-
- FC_RETURN_BOOL(ret);
-}
-FCIMPLEND
static FCDECL0(INT64, __GetSystemTimeAsFileTime);
static FCDECL0(UINT32, GetCurrentProcessorNumber);
static FCDECL0(UINT32, GetTickCount);
- static FCDECL1(FC_BOOL_RET, GetOSVersion, OSVERSIONINFOObject *osVer);
- static FCDECL1(FC_BOOL_RET, GetOSVersionEx, OSVERSIONINFOEXObject *osVer);
-
static
void QCALLTYPE Exit(INT32 exitcode);
// from the runtime controller. This represents the last amount of processing
// the DI gets to do on an event before giving it to the user.
//
-#ifdef _PREFAST_
-#pragma warning(push)
-#pragma warning(disable:21000) // Suppress PREFast warning about overly large function
-#endif
void CordbProcess::DispatchRCEvent()
{
INTERNAL_API_ENTRY(this);
// A V2 shim can provide a proxy calllack that takes these events and queues them and
// does the real dispatch to the user to emulate V2 semantics.
//
+#ifdef _PREFAST_
+#pragma warning(push)
+#pragma warning(disable:21000) // Suppress PREFast warning about overly large function
+#endif
void CordbProcess::RawDispatchEvent(
DebuggerIPCEvent * pEvent,
RSLockHolder * pLockHolder,
static void HandleFatalError(unsigned int exitCode);
static bool ShouldFinalizeObjectForUnload(AppDomain* pDomain, Object* obj);
+ static bool EagerFinalized(Object* obj);
};
#endif // __GCENV_EE_H__
assert (method_table(obj)->HasFinalizer());
-#ifndef FEATURE_REDHAWK
- if (method_table(obj) == pWeakReferenceMT || method_table(obj)->GetCanonicalMethodTable() == pWeakReferenceOfTCanonMT)
+ if (GCToEEInterface::EagerFinalized(obj))
{
- //destruct the handle right there.
- FinalizeWeakReference (obj);
MoveItem (i, Seg, FreeList);
}
- else
-#endif //!FEATURE_REDHAWK
- if ((obj->GetHeader()->GetBits()) & BIT_SBLK_FINALIZER_RUN)
+ else if ((obj->GetHeader()->GetBits()) & BIT_SBLK_FINALIZER_RUN)
{
//remove the object because we don't want to
//run the finalizer
void updateGCShadow(Object** ptr, Object* val);
#endif
-// the method table for the WeakReference class
-extern MethodTable *pWeakReferenceMT;
-// The canonical method table for WeakReference<T>
-extern MethodTable *pWeakReferenceOfTCanonMT;
-extern void FinalizeWeakReference(Object * obj);
-
// The single GC heap instance, shared with the VM.
extern IGCHeapInternal* g_theGCHeap;
return g_theGCToCLR->ShouldFinalizeObjectForUnload(pDomain, obj);
}
+ALWAYS_INLINE bool GCToEEInterface::EagerFinalized(Object* obj)
+{
+ assert(g_theGCToCLR != nullptr);
+ return g_theGCToCLR->EagerFinalized(obj);
+}
+
#undef ALWAYS_INLINE
#endif // __GCTOENV_EE_STANDALONE_INL__
// an app domain.
virtual
bool ShouldFinalizeObjectForUnload(AppDomain* pDomain, Object* obj) = 0;
+
+ // Offers the EE the option to finalize the given object eagerly, i.e.
+ // not on the finalizer thread but on the current thread. The
+ // EE returns true if it finalized the object eagerly and the GC does not
+ // need to do so, and false if it chose not to eagerly finalize the object
+ // and it's up to the GC to finalize it later.
+ virtual
+ bool EagerFinalized(Object* obj) = 0;
+
};
#endif // _GCINTERFACE_EE_H_
return true;
}
+bool GCToEEInterface::EagerFinalized(Object* obj)
+{
+ // The sample does not finalize anything eagerly.
+ return false;
+}
+
bool IsGCSpecialThread()
{
// TODO: Implement for background GC
afEnableJITcompileTracking = 0x8000, // From "DebuggableAttribute".
afDisableJITcompileOptimizer = 0x4000, // From "DebuggableAttribute".
+ afDebuggableAttributeMask = 0xc000,
afRetargetable = 0x0100, // The assembly can be retargeted (at runtime) to an
// assembly from a different publisher.
#endif
// Update this one
-SELECTANY const GUID JITEEVersionIdentifier = { /* 61783541-8fc0-44ce-80f7-7789b93a3309 */
- 0x61783541,
- 0x8fc0,
- 0x44ce,
- { 0x80, 0xf7, 0x77, 0x89, 0xb9, 0x3a, 0x33, 0x09 }
+SELECTANY const GUID JITEEVersionIdentifier = { /* f00b3f49-ddd2-49be-ba43-6e49ffa66959 */
+ 0xf00b3f49,
+ 0xddd2,
+ 0x49be,
+ { 0xba, 0x43, 0x6e, 0x49, 0xff, 0xa6, 0x69, 0x59 }
};
//////////////////////////////////////////////////////////////////////////////////////////////////////////
// token comes from CEE_NEWOBJ
CORINFO_TOKENKIND_NewObj = 0x200 | CORINFO_TOKENKIND_Method,
+
+ // token comes from CEE_LDVIRTFTN
+ CORINFO_TOKENKIND_Ldvirtftn = 0x400 | CORINFO_TOKENKIND_Method,
};
struct CORINFO_RESOLVED_TOKEN
CORJIT_FLAG_USE_PINVOKE_HELPERS = 36, // The JIT should use the PINVOKE_{BEGIN,END} helpers instead of emitting inline transitions
CORJIT_FLAG_REVERSE_PINVOKE = 37, // The JIT should insert REVERSE_PINVOKE_{ENTER,EXIT} helpers into method prolog/epilog
CORJIT_FLAG_DESKTOP_QUIRKS = 38, // The JIT should generate desktop-quirk-compatible code
+ CORJIT_FLAG_TIER0 = 39, // This is the initial tier for tiered compilation which should generate code as quickly as possible
+ CORJIT_FLAG_TIER1 = 40, // This is the final tier (for now) for tiered compilation which should generate high quality code
};
CORJIT_FLAGS()
struct {
ULONGLONG Low;
LONGLONG High;
- } DUMMYSTRUCTNAME;
+ };
double D[2];
float S[4];
WORD H[8];
DWORD CR : 2;
DWORD FrameSize : 9;
} PackedUnwindData;
- } DUMMYUNIONNAME;
+ };
} T_RUNTIME_FUNCTION, *PT_RUNTIME_FUNCTION;
#include <xclrdata.h>
#endif
+#if defined(_TARGET_X86_) && defined(FEATURE_PAL)
+typedef DPTR(struct _UNWIND_INFO) PTR_UNWIND_INFO;
+#endif
+
#ifdef _WIN64
typedef DPTR(T_RUNTIME_FUNCTION) PTR_RUNTIME_FUNCTION;
typedef DPTR(struct _UNWIND_INFO) PTR_UNWIND_INFO;
class Object;
#if !defined(FEATURE_PAL)
-/******************************/
-/* CLR ETW supported versions */
-/******************************/
-#define ETW_SUPPORTED_MAJORVER 5 // ETW is supported on win2k and above
-#define ETW_ENABLED_MAJORVER 6 // OS versions >= to this we enable ETW registration by default, since on XP and Windows 2003, registration is too slow.
/***************************************/
/* Tracing levels supported by CLR ETW */
#include <wmistr.h>
#include <evntrace.h>
#include <evntprov.h>
-#if !defined(DONOT_DEFINE_ETW_CALLBACK) && !defined(DACCESS_COMPILE)
-#define GetVersionEx(Version) (GetOSVersion((LPOSVERSIONINFOW)Version))
-#else
-#define GetVersionEx(Version) (WszGetVersionEx((LPOSVERSIONINFOW)Version))
-#endif // !DONOT_DEFINE_ETW_CALLBACK && !DACCESS_COMPILE
#endif //!FEATURE_REDHAWK
#endif //!defined(FEATURE_PAL)
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-//
-// LegacyActivationShim.h
-//
-// This file allows simple migration from .NET Runtime v2 Host Activation APIs
-// to the .NET Runtime v4 Host Activation APIs through simple shim functions.
-
-#ifndef __LEGACYACTIVATIONSHIM_H__
-#define __LEGACYACTIVATIONSHIM_H__
-
-#pragma warning(push)
-#pragma warning(disable:4127) // warning C4127: conditional expression is constant
- // caused by IfHrFailRet's while(0) code.
-#pragma warning(disable:4917) // a GUID can only be associated with a class, interface or namespace
-#pragma warning(disable:4191) // 'reinterpret_cast' : unsafe conversion from 'FARPROC' to 'XXX'
-
-#ifdef _MANAGED
-// We are compiling Managed C++, switch to native code then (and store current managed/native status on the stack)
-#pragma managed(push, off)
-#endif //_MANAGED
-
-#include "mscoree.h"
-#include "metahost.h"
-
-#include "wchar.h"
-
-#include "corerror.h"
-
-// To minimize how much we perturb sources that we are included in, we make sure that
-// all macros we define/redefine are restored at the end of the header.
-#pragma push_macro("IfHrFailRet")
-#pragma push_macro("IfHrFailRetFALSE")
-#pragma push_macro("IfHrFailRetVOID")
-
-// ---IfHrFailRet------------------------------------------------------------------------------------
-#undef IfHrFailRet
-#undef IfHrFailRetFALSE
-#undef IfHrFailRetVOID
-#define IfHrFailRet(EXPR) do { hr = (EXPR); if(FAILED(hr)) { return (hr); } } while (0)
-#define IfHrFailRetFALSE(EXPR) do { HRESULT _hr_ = (EXPR); if(FAILED(_hr_)) { return false; } } while (0)
-#define IfHrFailRetVOID(EXPR) do { HRESULT _hr_ = (EXPR); if(FAILED(_hr_)) { return; } } while (0)
-
-#include "legacyactivationshimutil.h"
-
-// Use of deprecated APIs within LegacyActivationShim namespace will result in C4996 that we will
-// disable for our own use.
-#pragma warning(push)
-#pragma warning(disable:4996)
-// ---LEGACYACTIVATONSHIM NAMESPACE----------------------------------------------------------------
-namespace LegacyActivationShim
-{
- // ---HELPERS----------------------------------------------------------------------------------
-#define GET_CLRMETAHOST(x) \
- ICLRMetaHost *x = NULL; \
- IfHrFailRet(Util::GetCLRMetaHost(&x))
-
-#define GET_CLRMETAHOSTPOLICY(x) \
- ICLRMetaHostPolicy*x = NULL; \
- IfHrFailRet(Util::GetCLRMetaHostPolicy(&x))
-
-#define GET_CLRINFO(x) \
- ICLRRuntimeInfo *x = NULL; \
- IfHrFailRet(Util::GetCLRRuntimeInfo(&x))
-
-#define LEGACY_API_PASS_THROUGH_STATIC(_name, _ret_type, _ret_value, _sig, _args) \
- { \
- hr = S_OK; \
- _ret_value = ::_name _args; \
- }
-
-#define LEGACY_API_PASS_THROUGH_STATIC_VOIDRET(_name, _sig, _args) \
- { \
- ::_name _args; \
- }
-
-#define LEGACY_API_PASS_THROUGH_DELAYLOAD(_name, _ret_type, _ret_value, _sig, _args) \
- { \
- typedef _ret_type __stdcall t_FN _sig; \
- Util::MscoreeFunctor<t_FN> FN; \
- if (SUCCEEDED(hr = FN.Init(#_name))) { \
- _ret_value = FN()_args; \
- } \
- }
-
-#define LEGACY_API_PASS_THROUGH_DELAYLOAD_VOIDRET(_name, _sig, _args) \
- { \
- typedef void __stdcall t_FN _sig; \
- Util::MscoreeFunctor<t_FN> FN; \
- if (SUCCEEDED(FN.Init(#_name))) { \
- FN()_args; \
- } \
- }
-
-#ifndef LEGACY_ACTIVATION_SHIM_DELAY_LOAD
-#define CALL_LEGACY_API(_name, _sig, _args) \
- LEGACY_API_PASS_THROUGH_STATIC(_name, HRESULT, hr, _sig, _args)
-#define CALL_LEGACY_API_VOIDRET(_name, _sig, _args) \
- LEGACY_API_PASS_THROUGH_STATIC_VOIDRET(_name, _sig, _args)
-#else
-#define CALL_LEGACY_API(_name, _sig, _args) \
- LEGACY_API_PASS_THROUGH_DELAYLOAD(_name, HRESULT, hr, _sig, _args)
-#define CALL_LEGACY_API_VOIDRET(_name, _sig, _args) \
- LEGACY_API_PASS_THROUGH_DELAYLOAD_VOIDRET(_name, _sig, _args)
-#endif
-
- // ---LEGACY SHIM FUNCTIONS--------------------------------------------------------------------
-
- // --------------------------------------------------------------------------------------------
- inline
- HRESULT GetCORSystemDirectory(
- __out_ecount(cchBuffer) LPWSTR pBuffer,
- __in DWORD cchBuffer,
- __out DWORD *pdwLength)
- {
- HRESULT hr = S_OK;
-
- if (Util::HasNewActivationAPIs())
- {
- DWORD dwLengthDummy = cchBuffer;
- if (pdwLength == NULL)
- pdwLength = &dwLengthDummy;
- else
- *pdwLength = cchBuffer;
-
- GET_CLRINFO(pInfo);
- IfHrFailRet(pInfo->GetRuntimeDirectory(pBuffer, pdwLength));
- }
- else
- {
- CALL_LEGACY_API(GetCORSystemDirectory,
- (LPWSTR pBuffer,
- DWORD cchBuffer,
- DWORD *pdwLength),
- (pBuffer,
- cchBuffer,
- pdwLength));
- }
-
- return hr;
- }
-
- // --------------------------------------------------------------------------------------------
- inline
- HRESULT GetCORVersion(
- __out_ecount(cchBuffer) LPWSTR pbBuffer,
- __in DWORD cchBuffer,
- __out DWORD *pdwLength)
- {
- HRESULT hr = S_OK;
-
- if (Util::HasNewActivationAPIs())
- {
- DWORD dwLengthDummy = cchBuffer;
- if (pdwLength == NULL)
- pdwLength = &dwLengthDummy;
- else
- *pdwLength = cchBuffer;
-
- GET_CLRINFO(pInfo);
- IfHrFailRet(pInfo->GetVersionString(pbBuffer, pdwLength));
- }
- else
- {
- CALL_LEGACY_API(GetCORVersion,
- (LPWSTR pbBuffer,
- DWORD cchBuffer,
- DWORD *pdwLength),
- (pbBuffer,
- cchBuffer,
- pdwLength));
-
- }
-
- return hr;
- }
-
- // --------------------------------------------------------------------------------------------
- inline
- HRESULT GetFileVersion(
- __in LPCWSTR szFileName,
- __out_ecount(cchBuffer) LPWSTR szBuffer,
- __in DWORD cchBuffer,
- __out DWORD *pdwLength)
- {
- HRESULT hr = S_OK;
-
- if (Util::HasNewActivationAPIs())
- {
- DWORD dwLengthDummy = cchBuffer;
- if (pdwLength == NULL)
- pdwLength = &dwLengthDummy;
- else
- *pdwLength = cchBuffer;
-
- GET_CLRMETAHOST(pMH);
- IfHrFailRet(pMH->GetVersionFromFile(szFileName, szBuffer, pdwLength));
- }
- else
- {
- CALL_LEGACY_API(GetFileVersion,
- (LPCWSTR szFileName,
- LPWSTR szBuffer,
- DWORD cchBuffer,
- DWORD *pdwLength),
- (szFileName,
- szBuffer,
- cchBuffer,
- pdwLength));
- }
-
- return hr;
- }
-
- // --------------------------------------------------------------------------------------------
- inline
- HRESULT GetCORRequiredVersion(
- __out_ecount(cchBuffer) LPWSTR pBuffer,
- __in DWORD cchBuffer,
- __out DWORD *pdwLength)
- {
- HRESULT hr = S_OK;
-
- if (Util::HasNewActivationAPIs())
- {
- DWORD dwLengthDummy = cchBuffer;
- if (pdwLength == NULL)
- pdwLength = &dwLengthDummy;
- else
- *pdwLength = cchBuffer;
-
- IfHrFailRet(Util::GetConfigImageVersion(pBuffer, pdwLength));
- }
- else
- {
- CALL_LEGACY_API(GetCORRequiredVersion,
- (LPWSTR pBuffer,
- DWORD cchBuffer,
- DWORD *pdwLength),
- (pBuffer,
- cchBuffer,
- pdwLength));
- }
-
- return hr;
- }
-
- // --------------------------------------------------------------------------------------------
- // This API is the one exception that we don't have fully equivalent functionality for
- // in the new APIs. Specifically, we do not have the runtimeInfoFlags equivalent that
- // allows platform differentiation. As such, we just send the call to the legacy API,
- // which does not bind (thankfully) and so we do not cap this specific API to Whidbey.
- inline
- HRESULT GetRequestedRuntimeInfo(
- __in_opt LPCWSTR pExe,
- __in_opt LPCWSTR pwszVersion,
- __in_opt LPCWSTR pConfigurationFile,
- __in DWORD startupFlags,
- __in DWORD runtimeInfoFlags,
- __out_ecount(dwDirectory) LPWSTR pDirectory,
- __in DWORD dwDirectory,
- __out DWORD *pdwDirectoryLength,
- __out_ecount(cchBuffer) LPWSTR pVersion,
- __in DWORD cchBuffer,
- __out DWORD *pdwLength)
- {
- HRESULT hr = S_OK;
-
- CALL_LEGACY_API(GetRequestedRuntimeInfo,
- (LPCWSTR pExe,
- LPCWSTR pwszVersion,
- LPCWSTR pConfigurationFile,
- DWORD startupFlags,
- DWORD runtimeInfoFlags,
- LPWSTR pDirectory,
- DWORD dwDirectory,
- DWORD *pdwDirectoryLength,
- LPWSTR pVersion,
- DWORD cchBuffer,
- DWORD *pdwLength),
- (pExe,
- pwszVersion,
- pConfigurationFile,
- startupFlags,
- runtimeInfoFlags,
- pDirectory,
- dwDirectory,
- pdwDirectoryLength,
- pVersion,
- cchBuffer,
- pdwLength));
-
- return hr;
- }
-
- // --------------------------------------------------------------------------------------------
- inline
- HRESULT GetRequestedRuntimeVersion(
- __in LPWSTR pExe,
- __out_ecount(cchBuffer) LPWSTR pVersion,
- __in DWORD cchBuffer,
- __out DWORD *pdwLength)
- {
- HRESULT hr = S_OK;
-
- if (Util::HasNewActivationAPIs())
- {
- DWORD dwLengthDummy = cchBuffer;
- if (pdwLength == NULL)
- pdwLength = &dwLengthDummy;
- else
- *pdwLength = cchBuffer;
-
- GET_CLRMETAHOSTPOLICY(pMHP);
- ICLRRuntimeInfo *pInfo = NULL;
- IfHrFailRet(pMHP->GetRequestedRuntime(
- METAHOST_POLICY_USE_PROCESS_IMAGE_PATH,
- pExe,
- NULL, // config stream
- pVersion,
- pdwLength,
- NULL, // image version str
- NULL, // image version len
- NULL,
- IID_ICLRRuntimeInfo,
- reinterpret_cast<LPVOID*>(&pInfo)));// ppRuntime
- Util::ReleaseHolder<ICLRRuntimeInfo*> hInfo(pInfo);
- }
- else
- {
- CALL_LEGACY_API(GetRequestedRuntimeVersion,
- (LPWSTR pExe,
- LPWSTR pVersion,
- DWORD cchBuffer,
- DWORD *pdwLength),
- (pExe,
- pVersion,
- cchBuffer,
- pdwLength));
- }
-
- return hr;
- }
-
- // --------------------------------------------------------------------------------------------
- inline
- HRESULT CorBindToRuntimeHost(
- LPCWSTR pwszVersion,
- LPCWSTR pwszBuildFlavor,
- LPCWSTR pwszHostConfigFile,
- VOID* pReserved,
- DWORD startupFlags,
- REFCLSID rclsid,
- REFIID riid,
- LPVOID FAR *ppv)
- {
- HRESULT hr = S_OK;
-
- if (Util::HasNewActivationAPIs())
- {
- IStream *pConfigStream = NULL;
- Util::ReleaseHolder<IStream*> hConfigStream;
- if (pwszHostConfigFile != NULL)
- {
- IfHrFailRet(Util::CreateIStreamFromFile(pwszHostConfigFile, &pConfigStream));
- hConfigStream.Assign(pConfigStream);
- }
-
- WCHAR wszVersionLocal[512];
- DWORD cchVersionLocal = 512;
- if (pwszVersion != NULL)
- wcsncpy_s(&wszVersionLocal[0], cchVersionLocal, pwszVersion, _TRUNCATE);
-
- ICLRRuntimeInfo *pInfo = NULL;
- IfHrFailRet(Util::GetCLRRuntimeInfo(
- &pInfo,
- NULL,
- pConfigStream,
- pwszVersion == NULL ? NULL : &wszVersionLocal[0],
- pwszVersion == NULL ? NULL : &cchVersionLocal));
-
- // We're intentionally ignoring the HRESULT return value, since CorBindToRuntimeEx
- // always ignored these flags when a runtime had already been bound, and we need
- // to emulate that behavior for when multiple calls to CorBindToRuntimeEx are made
- // but with different startup flags (ICLRRuntimeInfo::SetDefaultStartupFlags will
- // return E_INVALIDARG in the case that the runtime has already been started with
- // different flags).
- Util::AddStartupFlags(pInfo, pwszBuildFlavor, startupFlags, pwszHostConfigFile);
-
- IfHrFailRet(pInfo->GetInterface(rclsid, riid, ppv));
- }
- else
- {
- CALL_LEGACY_API(CorBindToRuntimeHost,
- (LPCWSTR pwszVersion,
- LPCWSTR pwszBuildFlavor,
- LPCWSTR pwszHostConfigFile,
- VOID* pReserved,
- DWORD startupFlags,
- REFCLSID rclsid,
- REFIID riid,
- LPVOID FAR *ppv),
- (pwszVersion,
- pwszBuildFlavor,
- pwszHostConfigFile,
- pReserved,
- startupFlags,
- rclsid,
- riid,
- ppv));
- }
-
- return hr;
- }
-
- // --------------------------------------------------------------------------------------------
- inline
- HRESULT CorBindToRuntimeEx(
- LPCWSTR pwszVersion,
- LPCWSTR pwszBuildFlavor,
- DWORD startupFlags,
- REFCLSID rclsid,
- REFIID riid,
- LPVOID* ppv)
- {
- HRESULT hr = S_OK;
-
- if (Util::HasNewActivationAPIs())
- {
- WCHAR wszVersionLocal[512];
- DWORD cchVersionLocal = 512;
- if (pwszVersion != NULL)
- wcsncpy_s(&wszVersionLocal[0], cchVersionLocal, pwszVersion, _TRUNCATE);
-
- ICLRRuntimeInfo *pInfo = NULL;
- IfHrFailRet(Util::GetCLRRuntimeInfo(
- &pInfo,
- NULL, // exe path
- NULL, // config stream
- pwszVersion == NULL ? NULL : &wszVersionLocal[0],
- pwszVersion == NULL ? NULL : &cchVersionLocal));
-
- // We're intentionally ignoring the HRESULT return value, since CorBindToRuntimeEx
- // always ignored these flags when a runtime had already been bound, and we need
- // to emulate that behavior for when multiple calls to CorBindToRuntimeEx are made
- // but with different startup flags (ICLRRuntimeInfo::SetDefaultStartupFlags will
- // return E_INVALIDARG in the case that the runtime has already been started with
- // different flags).
- Util::AddStartupFlags(pInfo, pwszBuildFlavor, startupFlags, NULL);
-
- IfHrFailRet(pInfo->GetInterface(rclsid, riid, ppv));
- }
- else
- {
- CALL_LEGACY_API(CorBindToRuntimeEx,
- (LPCWSTR pwszVersion,
- LPCWSTR pwszBuildFlavor,
- DWORD startupFlags,
- REFCLSID rclsid,
- REFIID riid,
- LPVOID* ppv),
- (pwszVersion,
- pwszBuildFlavor,
- startupFlags,
- rclsid,
- riid,
- ppv));
- }
-
- return hr;
- }
-
- // --------------------------------------------------------------------------------------------
- inline
- HRESULT CorBindToRuntimeByCfg(
- IStream* pCfgStream,
- DWORD reserved,
- DWORD startupFlags,
- REFCLSID rclsid,
- REFIID riid,
- LPVOID* ppv)
- {
- HRESULT hr = S_OK;
-
- if (Util::HasNewActivationAPIs())
- {
- // The legacy CorBindToRuntimeByCfg picks up startup flags from both the config stream and
- // application config file if it is present. For simplicity, we ignore the app config here.
- ICLRRuntimeInfo *pInfo = NULL;
- IfHrFailRet(Util::GetCLRRuntimeInfo(
- &pInfo,
- NULL, // exe path
- pCfgStream));
-
- // We're intentionally ignoring the HRESULT return value, since CorBindToRuntimeEx
- // always ignored these flags when a runtime had already been bound, and we need
- // to emulate that behavior for when multiple calls to CorBindToRuntimeEx are made
- // but with different startup flags (ICLRRuntimeInfo::SetDefaultStartupFlags will
- // return E_INVALIDARG in the case that the runtime has already been started with
- // different flags).
- Util::AddStartupFlags(pInfo, NULL, startupFlags, NULL);
-
- IfHrFailRet(pInfo->GetInterface(rclsid, riid, ppv));
- }
- else
- {
- CALL_LEGACY_API(CorBindToRuntimeByCfg,
- (IStream* pCfgStream,
- DWORD reserved,
- DWORD startupFlags,
- REFCLSID rclsid,
- REFIID riid,
- LPVOID* ppv),
- (pCfgStream,
- reserved,
- startupFlags,
- rclsid,
- riid,
- ppv));
- }
-
- return hr;
- }
-
- // --------------------------------------------------------------------------------------------
- inline
- HRESULT CorBindToRuntime(
- LPCWSTR pwszVersion,
- LPCWSTR pwszBuildFlavor,
- REFCLSID rclsid,
- REFIID riid,
- LPVOID* ppv)
- {
- HRESULT hr = S_OK;
-
- if (Util::HasNewActivationAPIs())
- {
- WCHAR wszVersionLocal[512];
- DWORD cchVersionLocal = 512;
- if (pwszVersion != NULL)
- wcsncpy_s(&wszVersionLocal[0], cchVersionLocal, pwszVersion, _TRUNCATE);
-
- ICLRRuntimeInfo *pInfo = NULL;
- IfHrFailRet(Util::GetCLRRuntimeInfo(
- &pInfo,
- NULL, // exe path
- NULL, // config stream
- pwszVersion == NULL ? NULL : &wszVersionLocal[0],
- pwszVersion == NULL ? NULL : &cchVersionLocal));
-
- // CorBindToRuntime has its special default flags
- //
- // We're intentionally ignoring the HRESULT return value, since CorBindToRuntimeEx
- // always ignored these flags when a runtime had already been bound, and we need
- // to emulate that behavior for when multiple calls to CorBindToRuntimeEx are made
- // but with different startup flags (ICLRRuntimeInfo::SetDefaultStartupFlags will
- // return E_INVALIDARG in the case that the runtime has already been started with
- // different flags).
- Util::AddStartupFlags(pInfo, NULL, STARTUP_LOADER_OPTIMIZATION_MULTI_DOMAIN_HOST, NULL);
-
- IfHrFailRet(pInfo->GetInterface(rclsid, riid, ppv));
- }
- else
- {
- CALL_LEGACY_API(CorBindToRuntime,
- (LPCWSTR pwszVersion,
- LPCWSTR pwszBuildFlavor,
- REFCLSID rclsid,
- REFIID riid,
- LPVOID* ppv),
- (pwszVersion,
- pwszBuildFlavor,
- rclsid,
- riid,
- ppv));
- }
-
- return hr;
- }
-
- // --------------------------------------------------------------------------------------------
- inline
- HRESULT CorBindToCurrentRuntime(
- LPCWSTR pwszFileName,
- REFCLSID rclsid,
- REFIID riid,
- LPVOID FAR *ppv)
- {
- HRESULT hr = S_OK;
-
- if (Util::HasNewActivationAPIs())
- {
- ICLRRuntimeInfo *pInfo = NULL;
- IfHrFailRet(Util::GetCLRRuntimeInfo(
- &pInfo,
- pwszFileName));
-
- IfHrFailRet(pInfo->GetInterface(rclsid, riid, ppv));
- }
- else
- {
- CALL_LEGACY_API(CorBindToCurrentRuntime,
- (LPCWSTR pwszFileName,
- REFCLSID rclsid,
- REFIID riid,
- LPVOID FAR *ppv),
- (pwszFileName,
- rclsid,
- riid,
- ppv));
- }
-
- return hr;
- }
-
- // --------------------------------------------------------------------------------------------
- inline
- HRESULT ClrCreateManagedInstance(
- LPCWSTR pTypeName,
- REFIID riid,
- void **ppObject)
- {
- HRESULT hr = S_OK;
-
- if (Util::HasNewActivationAPIs())
- {
- GET_CLRINFO(pInfo);
- HRESULT (STDMETHODCALLTYPE *pfnClrCreateManagedInstance)(LPCWSTR typeName, REFIID riid, void ** ppv) = NULL;
- IfHrFailRet(pInfo->GetProcAddress("ClrCreateManagedInstance", (LPVOID *)&pfnClrCreateManagedInstance));
- IfHrFailRet(pfnClrCreateManagedInstance(pTypeName, riid, ppObject));
- }
- else
- {
- CALL_LEGACY_API(ClrCreateManagedInstance,
- (LPCWSTR pTypeName,
- REFIID riid,
- void **ppObject),
- (pTypeName,
- riid,
- ppObject));
- }
-
- return hr;
- }
-
- // --------------------------------------------------------------------------------------------
- inline
- HRESULT LoadLibraryShim(
- LPCWSTR szDllName,
- LPCWSTR szVersion,
- LPVOID pvReserved,
- HMODULE *phModDll)
- {
- HRESULT hr = S_OK;
-
- if (Util::HasNewActivationAPIs())
- {
- Util::ReleaseHolder<ICLRRuntimeInfo*> hInfo;
- ICLRRuntimeInfo *pInfo = NULL;
-
- // Semantics of LoadLibraryShim is that a non-null version must match exactly.
- if (szVersion != NULL)
- {
- GET_CLRMETAHOST(pMH);
- IfHrFailRet(pMH->GetRuntime(szVersion, IID_ICLRRuntimeInfo, reinterpret_cast<LPVOID*>(&pInfo)));
- hInfo.Assign(pInfo);
- }
- else
- {
- IfHrFailRet(Util::GetCLRRuntimeInfo(&pInfo));
- }
- IfHrFailRet(pInfo->LoadLibrary(szDllName, phModDll));
- }
- else
- {
- CALL_LEGACY_API(LoadLibraryShim,
- (LPCWSTR szDllName,
- LPCWSTR szVersion,
- LPVOID pvReserved,
- HMODULE *phModDll),
- (szDllName,
- szVersion,
- pvReserved,
- phModDll));
- }
-
- return hr;
- }
-
- // --------------------------------------------------------------------------------------------
- inline
- HRESULT CallFunctionShim(
- LPCWSTR szDllName,
- LPCSTR szFunctionName,
- LPVOID lpvArgument1,
- LPVOID lpvArgument2,
- LPCWSTR szVersion,
- LPVOID pvReserved)
- {
- HRESULT hr = S_OK;
-
- if (Util::HasNewActivationAPIs())
- {
- HMODULE hMod = NULL;
- HRESULT (__stdcall * pfn)(LPVOID,LPVOID) = NULL;
-
- // Load library
- IfHrFailRet(LegacyActivationShim::LoadLibraryShim(szDllName, szVersion, pvReserved, &hMod));
-
- // NOTE: Legacy CallFunctionShim does not release HMODULE, leak to maintain compat
- // Util::HMODULEHolder hModHolder(hMod);
-
- // Find function.
- pfn = (HRESULT (__stdcall *)(LPVOID,LPVOID))GetProcAddress(hMod, szFunctionName);
- if (pfn == NULL)
- return HRESULT_FROM_WIN32(GetLastError());
-
- // Call it.
- return pfn(lpvArgument1, lpvArgument2);
- }
- else
- {
- CALL_LEGACY_API(CallFunctionShim,
- (LPCWSTR szDllName,
- LPCSTR szFunctionName,
- LPVOID lpvArgument1,
- LPVOID lpvArgument2,
- LPCWSTR szVersion,
- LPVOID pvReserved),
- (szDllName,
- szFunctionName,
- lpvArgument1,
- lpvArgument2,
- szVersion,
- pvReserved));
- }
-
- return hr;
- }
-
- // --------------------------------------------------------------------------------------------
- inline
- HRESULT GetRealProcAddress(
- LPCSTR pwszProcName,
- VOID **ppv)
- {
- HRESULT hr = S_OK;
-
- if (Util::HasNewActivationAPIs())
- {
- GET_CLRINFO(pInfo);
- IfHrFailRet(pInfo->GetProcAddress(pwszProcName, ppv));
- }
- else
- {
- CALL_LEGACY_API(GetRealProcAddress,
- (LPCSTR pwszProcName,
- VOID **ppv),
- (pwszProcName,
- ppv));
- }
-
- return hr;
- }
-
- // --------------------------------------------------------------------------------------------
- inline
- void CorExitProcess(
- int exitCode)
- {
-#ifndef LEGACY_ACTIVATION_SHIM_DELAY_LOAD
- ::CorExitProcess(exitCode);
-#else
- typedef void __stdcall t_CorExitProcess(
- int exitCode);
-
- Util::MscoreeFunctor<t_CorExitProcess> FN;
- if (FAILED(FN.Init("CorExitProcess")))
- return;
-
- FN()(exitCode);
-#endif
- }
-
-// Define this method only if it is not yet defined as macro (see ndp\clr\src\inc\UtilCode.h).
-#ifndef LoadStringRC
- // --------------------------------------------------------------------------------------------
- inline
- HRESULT LoadStringRC(
- UINT nResourceID,
- __out_ecount(nMax) LPWSTR szBuffer,
- int nMax,
- int fQuiet)
- {
- HRESULT hr = S_OK;
-
- if (Util::HasNewActivationAPIs())
- {
- GET_CLRINFO(pInfo);
- DWORD cchMax = static_cast<DWORD>(nMax);
- IfHrFailRet(pInfo->LoadErrorString(nResourceID, szBuffer, &cchMax, -1));
- }
- else
- {
- CALL_LEGACY_API(LoadStringRC,
- (UINT nResourceID,
- LPWSTR szBuffer,
- int nMax,
- int fQuiet),
- (nResourceID,
- szBuffer,
- nMax,
- fQuiet));
- }
-
- return hr;
- }
-#endif //LoadStringRC
-
-// Define this method only if it is not yet defined as macro (see ndp\clr\src\inc\UtilCode.h).
-#if !defined(LoadStringRCEx) && !defined(FEATURE_CORESYSTEM)
- // --------------------------------------------------------------------------------------------
- inline
- HRESULT LoadStringRCEx(
- LCID lcid,
- UINT nResourceID,
- __out_ecount(nMax) LPWSTR szBuffer,
- int nMax,
- int fQuiet,
- int *pcwchUsed)
- {
- HRESULT hr = S_OK;
-
- if (Util::HasNewActivationAPIs())
- {
- GET_CLRINFO(pInfo);
- DWORD cchUsed = static_cast<DWORD>(nMax);
- IfHrFailRet(pInfo->LoadErrorString(nResourceID, szBuffer, &cchUsed, lcid));
- *pcwchUsed = cchUsed;
- }
- else
- {
- CALL_LEGACY_API(LoadStringRCEx,
- (LCID lcid,
- UINT nResourceID,
- LPWSTR szBuffer,
- int nMax,
- int fQuiet,
- int *pcwchUsed),
- (lcid,
- nResourceID,
- szBuffer,
- nMax,
- fQuiet,
- pcwchUsed));
- }
-
- return hr;
- }
-#endif //LoadStringRCEx
-
- // --------------------------------------------------------------------------------------------
- inline
- HRESULT LockClrVersion(
- FLockClrVersionCallback hostCallback,
- FLockClrVersionCallback *pBeginHostSetup,
- FLockClrVersionCallback *pEndHostSetup)
- {
- HRESULT hr = S_OK;
-
- CALL_LEGACY_API(LockClrVersion,
- (FLockClrVersionCallback hostCallback,
- FLockClrVersionCallback *pBeginHostSetup,
- FLockClrVersionCallback *pEndHostSetup),
- (hostCallback,
- pBeginHostSetup,
- pEndHostSetup));
-
- return hr;
- }
-
- // --------------------------------------------------------------------------------------------
- inline
- HRESULT CreateDebuggingInterfaceFromVersion(
- int nDebuggerVersion,
- LPCWSTR szDebuggeeVersion,
- IUnknown ** ppCordb)
- {
- HRESULT hr = S_OK;
-
- CALL_LEGACY_API(CreateDebuggingInterfaceFromVersion,
- (int nDebuggerVersion,
- LPCWSTR szDebuggeeVersion,
- IUnknown ** ppCordb),
- (nDebuggerVersion,
- szDebuggeeVersion,
- ppCordb));
-
- return hr;
- }
-
- // --------------------------------------------------------------------------------------------
- inline
- HRESULT GetVersionFromProcess(
- __in HANDLE hProcess,
- __out_ecount(cchBuffer) LPWSTR pVersion,
- __in DWORD cchBuffer,
- __out DWORD *pdwLength)
- {
- HRESULT hr = S_OK;
-
- CALL_LEGACY_API(GetVersionFromProcess,
- (HANDLE hProcess,
- LPWSTR pVersion,
- DWORD cchBuffer,
- DWORD *pdwLength),
- (hProcess,
- pVersion,
- cchBuffer,
- pdwLength));
-
- return hr;
- }
-
- // --------------------------------------------------------------------------------------------
-// CoInitializeEE is declared in cor.h, define it only if explicitly requested
-#ifdef LEGACY_ACTIVATION_SHIM_DEFINE_CoInitializeEE
- inline
- HRESULT CoInitializeEE(DWORD flags)
- {
- HRESULT hr = S_OK;
-
- if (Util::HasNewActivationAPIs())
- {
- GET_CLRINFO(pInfo);
- HRESULT (* pfnCoInitializeEE)(DWORD);
- IfHrFailRet(pInfo->GetProcAddress("CoInitializeEE", (LPVOID *)&pfnCoInitializeEE));
- return (*pfnCoInitializeEE)(flags);
- }
- else
- {
- CALL_LEGACY_API(CoInitializeEE,
- (DWORD flags),
- (flags));
- }
-
- return hr;
- }
-
- inline
- VOID CoUninitializeEE(BOOL flags)
- {
- if (Util::HasNewActivationAPIs())
- {
- ICLRRuntimeInfo *pInfo = NULL;
- if (FAILED(Util::GetCLRRuntimeInfo(&pInfo)))
- return;
-
- VOID (* pfnCoUninitializeEE)(BOOL);
- if (FAILED(pInfo->GetProcAddress("CoUninitializeEE", (LPVOID *)&pfnCoUninitializeEE)))
- return;
-
- (*pfnCoUninitializeEE)(flags);
- }
- else
- {
- CALL_LEGACY_API_VOIDRET(CoUninitializeEE,
- (BOOL flags),
- (flags));
- }
- }
-
- inline
- HRESULT CoInitializeCor(DWORD flags)
- {
- HRESULT hr = S_OK;
-
- if (Util::HasNewActivationAPIs())
- {
- GET_CLRINFO(pInfo);
- HRESULT (* pfnCoInitializeCor)(DWORD);
- IfHrFailRet(pInfo->GetProcAddress("CoInitializeCor", (LPVOID *)&pfnCoInitializeCor));
- return (*pfnCoInitializeCor)(flags);
- }
- else
- {
- CALL_LEGACY_API(CoInitializeCor,
- (DWORD flags),
- (flags));
- }
-
- return hr;
- }
-
- inline
- VOID CoUninitializeCor()
- {
- if (Util::HasNewActivationAPIs())
- {
- ICLRRuntimeInfo *pInfo = NULL;
- if (FAILED(Util::GetCLRRuntimeInfo(&pInfo)))
- return;
-
- VOID (* pfnCoUninitializeCor)();
- if (FAILED(pInfo->GetProcAddress("CoUninitializeCor", (LPVOID *)&pfnCoUninitializeCor)))
- return;
-
- (*pfnCoUninitializeCor)();
- }
- else
- {
- CALL_LEGACY_API_VOIDRET(CoUninitializeCor,
- (VOID),
- ());
- }
- }
-
-#endif //LEGACY_ACTIVATION_SHIM_DEFINE_CoInitializeEE
-
- // --------------------------------------------------------------------------------------------
-// CoEEShutDownCOM is declared in cor.h, define it only if explicitly requested
-#ifdef LEGACY_ACTIVATION_SHIM_DEFINE_CoEEShutDownCOM
- inline
- void CoEEShutDownCOM()
- {
- if (Util::HasNewActivationAPIs())
- {
- ICLRRuntimeInfo *pInfo = NULL;
- IfHrFailRetVOID(Util::GetCLRRuntimeInfo(&pInfo));
- void (* pfnCoEEShutDownCOM)();
- IfHrFailRetVOID(pInfo->GetProcAddress("CoEEShutDownCOM", (LPVOID *)&pfnCoEEShutDownCOM));
- (*pfnCoEEShutDownCOM)();
- }
- else
- {
- CALL_LEGACY_API_VOIDRET(CoEEShutDownCOM,
- (),
- ());
- }
-
- return;
- }
-#endif //LEGACY_ACTIVATION_SHIM_DEFINE_CoEEShutDownCOM
-
- // ---StrongName Function Helpers--------------------------------------------------------------
-#if !defined(LEGACY_ACTIVATION_SHIM_DELAY_LOAD) && defined(__STRONG_NAME_H)
-#define LEGACY_STRONGNAME_API_PASS_THROUGH(_name, _ret_type, _ret_value, _sig, _args) \
- LEGACY_API_PASS_THROUGH_STATIC(_name, _ret_type, _ret_value, _sig, _args)
-#define LEGACY_STRONGNAME_API_PASS_THROUGH_VOIDRET(_name, _sig, _args) \
- LEGACY_API_PASS_THROUGH_STATIC_VOIDRET(_name, _sig, _args)
-#else //defined(LEGACY_ACTIVATION_SHIM_DELAY_LOAD) || !defined(__STRONG_NAME_H)
-#define LEGACY_STRONGNAME_API_PASS_THROUGH(_name, _ret_type, _ret_value, _sig, _args) \
- LEGACY_API_PASS_THROUGH_DELAYLOAD(_name, _ret_type, _ret_value, _sig, _args)
-#define LEGACY_STRONGNAME_API_PASS_THROUGH_VOIDRET(_name, _sig, _args) \
- LEGACY_API_PASS_THROUGH_DELAYLOAD_VOIDRET(_name, _sig, _args)
-#endif //defined(LEGACY_ACTIVATION_SHIM_DELAY_LOAD) || !defined(__STRONG_NAME_H)
-
-// Defines a method that just delegates a call to the right runtime, this one is for SN APIs that
-// return HRESULT.
-#define PASS_THROUGH_IMPL_HRESULT(_name, _signature, _args) \
- inline \
- HRESULT _name##_signature \
- { \
- HRESULT hr = S_OK; \
- if (Util::HasNewActivationAPIs()) \
- { \
- ICLRStrongName *pSN = NULL; \
- IfHrFailRet(Util::GetCLRStrongName(&pSN)); \
- IfHrFailRet(pSN->_name _args); \
- } \
- else \
- { \
- LEGACY_STRONGNAME_API_PASS_THROUGH( \
- _name, HRESULT, hr, _signature, _args); \
- IfHrFailRet(hr); \
- } \
- return hr; \
- }
-
-// Defines a method that just delegates a call to the right runtime, this one is for SN APIs that
-// return BOOL.
-#define PASS_THROUGH_IMPL_BOOLEAN(_name, _signature, _args) \
- inline \
- BOOL _name##_signature \
- { \
- HRESULT hr = S_OK; \
- if (Util::HasNewActivationAPIs()) \
- { \
- ICLRStrongName *pSN = NULL; \
- IfHrFailRetFALSE(Util::GetCLRStrongName(&pSN)); \
- IfHrFailRetFALSE(pSN->_name _args); \
- return TRUE; \
- } \
- else \
- { \
- BOOL fResult = TRUE; \
- LEGACY_STRONGNAME_API_PASS_THROUGH( \
- _name, BOOL, fResult, _signature, _args); \
- IfHrFailRetFALSE(hr); \
- return fResult; \
- } \
- }
-
-// Defines a method that just delegates a call to the right runtime, this one is for SN APIs that
-// return VOID.
-#define PASS_THROUGH_IMPL_VOID(_name, _signature, _args) \
- inline \
- VOID _name##_signature \
- { \
- HRESULT hr = S_OK; \
- if (Util::HasNewActivationAPIs()) \
- { \
- ICLRStrongName *pSN = NULL; \
- IfHrFailRetVOID(Util::GetCLRStrongName(&pSN)); \
- IfHrFailRetVOID(pSN->_name _args); \
- return; \
- } \
- else \
- { \
- LEGACY_STRONGNAME_API_PASS_THROUGH_VOIDRET( \
- _name, _signature, _args); \
- IfHrFailRetVOID(hr); \
- return; \
- } \
- }
-
- // ---StrongName functions---------------------------------------------------------------------
-
-PASS_THROUGH_IMPL_HRESULT(GetHashFromAssemblyFile,
- (LPCSTR pszFilePath, unsigned int *piHashAlg, BYTE *pbHash, DWORD cchHash, DWORD *pchHash),
- (pszFilePath, piHashAlg, pbHash, cchHash, pchHash));
-
-PASS_THROUGH_IMPL_HRESULT(GetHashFromAssemblyFileW,
- (LPCWSTR pwzFilePath, unsigned int *piHashAlg, BYTE *pbHash, DWORD cchHash, DWORD *pchHash),
- (pwzFilePath, piHashAlg, pbHash, cchHash, pchHash));
-
-PASS_THROUGH_IMPL_HRESULT(GetHashFromBlob,
- (BYTE *pbBlob, DWORD cchBlob, unsigned int *piHashAlg, BYTE *pbHash, DWORD cchHash, DWORD *pchHash),
- (pbBlob, cchBlob, piHashAlg, pbHash, cchHash, pchHash));
-
-PASS_THROUGH_IMPL_HRESULT(GetHashFromFile,
- (LPCSTR pszFilePath, unsigned int *piHashAlg, BYTE *pbHash, DWORD cchHash, DWORD *pchHash),
- (pszFilePath, piHashAlg, pbHash, cchHash, pchHash));
-
-PASS_THROUGH_IMPL_HRESULT(GetHashFromFileW,
- (LPCWSTR pwzFilePath, unsigned int *piHashAlg, BYTE *pbHash, DWORD cchHash, DWORD *pchHash),
- (pwzFilePath, piHashAlg, pbHash, cchHash, pchHash));
-
-PASS_THROUGH_IMPL_HRESULT(GetHashFromHandle,
- (HANDLE hFile, unsigned int *piHashAlg, BYTE *pbHash, DWORD cchHash, DWORD *pchHash),
- (hFile, piHashAlg, pbHash, cchHash, pchHash));
-
-PASS_THROUGH_IMPL_BOOLEAN(StrongNameCompareAssemblies,
- (LPCWSTR pwzAssembly1, LPCWSTR pwzAssembly2, DWORD *pdwResult),
- (pwzAssembly1, pwzAssembly2, pdwResult));
-
-PASS_THROUGH_IMPL_VOID(StrongNameFreeBuffer,
- (BYTE *pbMemory),
- (pbMemory));
-
-PASS_THROUGH_IMPL_BOOLEAN(StrongNameGetBlob,
- (LPCWSTR pwzFilePath, BYTE *pbBlob, DWORD *pcbBlob),
- (pwzFilePath, pbBlob, pcbBlob));
-
-PASS_THROUGH_IMPL_BOOLEAN(StrongNameGetBlobFromImage,
- (BYTE *pbBase, DWORD dwLength, BYTE *pbBlob, DWORD *pcbBlob),
- (pbBase, dwLength, pbBlob, pcbBlob));
-
-PASS_THROUGH_IMPL_BOOLEAN(StrongNameGetPublicKey,
- (LPCWSTR pwzKeyContainer, BYTE *pbKeyBlob, ULONG cbKeyBlob, BYTE **ppbPublicKeyBlob, ULONG *pcbPublicKeyBlob),
- (pwzKeyContainer, pbKeyBlob, cbKeyBlob, ppbPublicKeyBlob, pcbPublicKeyBlob));
-
-PASS_THROUGH_IMPL_BOOLEAN(StrongNameHashSize,
- (ULONG ulHashAlg, DWORD *pcbSize),
- (ulHashAlg, pcbSize));
-
-PASS_THROUGH_IMPL_BOOLEAN(StrongNameKeyDelete,
- (LPCWSTR pwzKeyContainer),
- (pwzKeyContainer));
-
-PASS_THROUGH_IMPL_BOOLEAN(StrongNameKeyGen,
- (LPCWSTR pwzKeyContainer, DWORD dwFlags, BYTE **ppbKeyBlob, ULONG *pcbKeyBlob),
- (pwzKeyContainer, dwFlags, ppbKeyBlob, pcbKeyBlob));
-
-PASS_THROUGH_IMPL_BOOLEAN(StrongNameKeyGenEx,
- (LPCWSTR pwzKeyContainer, DWORD dwFlags, DWORD dwKeySize, BYTE **ppbKeyBlob, ULONG *pcbKeyBlob),
- (pwzKeyContainer, dwFlags, dwKeySize, ppbKeyBlob, pcbKeyBlob));
-
-PASS_THROUGH_IMPL_BOOLEAN(StrongNameKeyInstall,
- (LPCWSTR pwzKeyContainer, BYTE *pbKeyBlob, ULONG cbKeyBlob),
- (pwzKeyContainer, pbKeyBlob, cbKeyBlob));
-
-PASS_THROUGH_IMPL_BOOLEAN(StrongNameSignatureGeneration,
- (LPCWSTR pwzFilePath, LPCWSTR pwzKeyContainer, BYTE *pbKeyBlob, ULONG cbKeyBlob, BYTE **ppbSignatureBlob, ULONG *pcbSignatureBlob),
- (pwzFilePath, pwzKeyContainer, pbKeyBlob, cbKeyBlob, ppbSignatureBlob, pcbSignatureBlob));
-
-PASS_THROUGH_IMPL_BOOLEAN(StrongNameSignatureGenerationEx,
- (LPCWSTR wszFilePath, LPCWSTR wszKeyContainer, BYTE *pbKeyBlob, ULONG cbKeyBlob, BYTE **ppbSignatureBlob, ULONG *pcbSignatureBlob, DWORD dwFlags),
- (wszFilePath, wszKeyContainer, pbKeyBlob, cbKeyBlob, ppbSignatureBlob, pcbSignatureBlob, dwFlags));
-
-PASS_THROUGH_IMPL_BOOLEAN(StrongNameSignatureSize,
- (BYTE *pbPublicKeyBlob, ULONG cbPublicKeyBlob, DWORD *pcbSize),
- (pbPublicKeyBlob, cbPublicKeyBlob, pcbSize));
-
-PASS_THROUGH_IMPL_BOOLEAN(StrongNameSignatureVerification,
- (LPCWSTR pwzFilePath, DWORD dwInFlags, DWORD *pdwOutFlags),
- (pwzFilePath, dwInFlags, pdwOutFlags));
-
-PASS_THROUGH_IMPL_BOOLEAN(StrongNameSignatureVerificationEx,
- (LPCWSTR pwzFilePath, BOOLEAN fForceVerification, BOOLEAN *pfWasVerified),
- (pwzFilePath, fForceVerification, pfWasVerified));
-
-PASS_THROUGH_IMPL_BOOLEAN(StrongNameSignatureVerificationFromImage,
- (BYTE *pbBase, DWORD dwLength, DWORD dwInFlags, DWORD *pdwOutFlags),
- (pbBase, dwLength, dwInFlags, pdwOutFlags));
-
-PASS_THROUGH_IMPL_BOOLEAN(StrongNameTokenFromAssembly,
- (LPCWSTR pwzFilePath, BYTE **ppbStrongNameToken, ULONG *pcbStrongNameToken),
- (pwzFilePath, ppbStrongNameToken, pcbStrongNameToken));
-
-PASS_THROUGH_IMPL_BOOLEAN(StrongNameTokenFromAssemblyEx,
- (LPCWSTR pwzFilePath, BYTE **ppbStrongNameToken, ULONG *pcbStrongNameToken, BYTE **ppbPublicKeyBlob, ULONG *pcbPublicKeyBlob),
- (pwzFilePath, ppbStrongNameToken, pcbStrongNameToken, ppbPublicKeyBlob, pcbPublicKeyBlob));
-
-PASS_THROUGH_IMPL_BOOLEAN(StrongNameTokenFromPublicKey,
- (BYTE *pbPublicKeyBlob, ULONG cbPublicKeyBlob, BYTE **ppbStrongNameToken, ULONG *pcbStrongNameToken),
- (pbPublicKeyBlob, cbPublicKeyBlob, ppbStrongNameToken, pcbStrongNameToken));
-
-#undef PASS_THROUGH_IMPL_HRESULT
-#undef PASS_THROUGH_IMPL_BOOLEAN
-#undef PASS_THROUGH_IMPL_VOID
-
-// Defines a method that just delegates a call to the right runtime, this one is for SN APIs that
-// return BOOLEAN.
-#define WRAP_HRESULT_IMPL_BOOLEAN(_WrapperName, _name, _signature, _args) \
- inline \
- HRESULT _WrapperName##_signature \
- { \
- HRESULT hr = S_OK; \
- if (Util::HasNewActivationAPIs()) \
- { \
- ICLRStrongName *pSN = NULL; \
- IfHrFailRet(Util::GetCLRStrongName(&pSN)); \
- return pSN->_name _args; \
- } \
- else \
- { \
- typedef BOOL __stdcall t_FN _signature; \
- Util::MscoreeFunctor<t_FN> FN; \
- IfHrFailRet(FN.Init(#_name)); \
- if ((FN() _args)) \
- { \
- return S_OK; \
- } \
- else \
- { /*@TODO: Static bind version, if necessary*/ \
- typedef DWORD __stdcall t_FNStrongNameErrorInfo(void); \
- Util::MscoreeFunctor<t_FNStrongNameErrorInfo> FNStrongNameErrorInfo; \
- IfHrFailRet(FNStrongNameErrorInfo.Init("StrongNameErrorInfo")); \
- HRESULT hrResult = (HRESULT)FNStrongNameErrorInfo() (); \
- if (SUCCEEDED(hrResult)) \
- { \
- hrResult = E_FAIL; \
- } \
- return hrResult; \
- } \
- } \
- }
-
-WRAP_HRESULT_IMPL_BOOLEAN(StrongNameHashSize_HRESULT,
- StrongNameHashSize,
- (ULONG ulHashAlg, DWORD *pcbSize),
- (ulHashAlg, pcbSize));
-
-WRAP_HRESULT_IMPL_BOOLEAN(StrongNameTokenFromPublicKey_HRESULT,
- StrongNameTokenFromPublicKey,
- (BYTE *pbPublicKeyBlob, ULONG cbPublicKeyBlob, BYTE **ppbStrongNameToken, ULONG *pcbStrongNameToken),
- (pbPublicKeyBlob, cbPublicKeyBlob, ppbStrongNameToken, pcbStrongNameToken));
-
-WRAP_HRESULT_IMPL_BOOLEAN(StrongNameSignatureSize_HRESULT,
- StrongNameSignatureSize,
- (BYTE *pbPublicKeyBlob, ULONG cbPublicKeyBlob, DWORD *pcbSize),
- (pbPublicKeyBlob, cbPublicKeyBlob, pcbSize));
-
-WRAP_HRESULT_IMPL_BOOLEAN(StrongNameGetPublicKey_HRESULT,
- StrongNameGetPublicKey,
- (LPCWSTR pwzKeyContainer, BYTE *pbKeyBlob, ULONG cbKeyBlob, BYTE **ppbPublicKeyBlob, ULONG *pcbPublicKeyBlob),
- (pwzKeyContainer, pbKeyBlob, cbKeyBlob, ppbPublicKeyBlob, pcbPublicKeyBlob));
-
-WRAP_HRESULT_IMPL_BOOLEAN(StrongNameKeyInstall_HRESULT,
- StrongNameKeyInstall,
- (LPCWSTR pwzKeyContainer, BYTE *pbKeyBlob, ULONG cbKeyBlob),
- (pwzKeyContainer, pbKeyBlob, cbKeyBlob));
-
-WRAP_HRESULT_IMPL_BOOLEAN(StrongNameSignatureGeneration_HRESULT,
- StrongNameSignatureGeneration,
- (LPCWSTR pwzFilePath, LPCWSTR pwzKeyContainer, BYTE *pbKeyBlob, ULONG cbKeyBlob, BYTE **ppbSignatureBlob, ULONG *pcbSignatureBlob),
- (pwzFilePath, pwzKeyContainer, pbKeyBlob, cbKeyBlob, ppbSignatureBlob, pcbSignatureBlob));
-
-WRAP_HRESULT_IMPL_BOOLEAN(StrongNameKeyGen_HRESULT,
- StrongNameKeyGen,
- (LPCWSTR pwzKeyContainer, DWORD dwFlags, BYTE **ppbKeyBlob, ULONG *pcbKeyBlob),
- (pwzKeyContainer, dwFlags, ppbKeyBlob, pcbKeyBlob));
-
-#undef WRAP_HRESULT_IMPL_BOOLEAN
-
-// Defines a method that just delegates a call to the right runtime, this one is for ICLRStrongName2
-// APIs that return BOOLEAN.
-#define WRAP_HRESULT_IMPL_BOOLEAN(_WrapperName, _name, _signature, _args) \
- inline \
- HRESULT _WrapperName##_signature \
- { \
- HRESULT hr = S_OK; \
- if (Util::HasNewActivationAPIs()) \
- { \
- ICLRStrongName2 *pSN = NULL; \
- IfHrFailRet(Util::GetCLRStrongName2(&pSN)); \
- return pSN->_name _args; \
- } \
- else \
- { \
- return E_FAIL; \
- } \
- }
-
-
-WRAP_HRESULT_IMPL_BOOLEAN(StrongNameGetPublicKeyEx_HRESULT,
- StrongNameGetPublicKeyEx,
- (LPCWSTR pwzKeyContainer, BYTE *pbKeyBlob, ULONG cbKeyBlob, BYTE **ppbPublicKeyBlob, ULONG *pcbPublicKeyBlob, ULONG uHashAlgId, ULONG uReserved),
- (pwzKeyContainer, pbKeyBlob, cbKeyBlob, ppbPublicKeyBlob, pcbPublicKeyBlob, uHashAlgId, uReserved));
-
-#undef WRAP_HRESULT_IMPL_BOOLEAN
-
- inline
- HRESULT ClrCoCreateInstance(
- REFCLSID rclsid,
- LPUNKNOWN pUnkOuter,
- DWORD dwClsContext,
- REFIID riid,
- LPVOID * ppv)
- {
- HRESULT hr = S_OK;
-
- if (Util::HasNewActivationAPIs() /*&& Util::IsCLSIDHostedByClr(rclsid)*/)
- {
- GET_CLRINFO(pInfo);
- IfHrFailRet(pInfo->GetInterface(rclsid, riid, ppv));
- }
- else
- {
- IfHrFailRet(::CoCreateInstance(rclsid, pUnkOuter, dwClsContext, riid, ppv));
- }
-
- return hr;
- }
-}; // namespace LegacyActivationShim
-#pragma warning(pop) // Revert C4996 status
-
-#undef LEGACY_API_PASS_THROUGH_STATIC
-#undef LEGACY_API_PASS_THROUGH_STATIC_VOIDRET
-#undef LEGACY_API_PASS_THROUGH_DELAYLOAD
-#undef LEGACY_API_PASS_THROUGH_DELAYLOAD_VOIDRET
-#undef CALL_LEGACY_API
-#undef LEGACY_STRONGNAME_API_PASS_THROUGH
-#undef LEGACY_STRONGNAME_API_PASS_THROUGH_VOIDRET
-
-#undef LEGACY_ACTIVATION_SHIM_DEFAULT_PRODUCT_VER_HELPER_L
-#undef LEGACY_ACTIVATION_SHIM_DEFAULT_PRODUCT_VER_STR_L
-
-#pragma pop_macro("IfHrFailRetVOID")
-#pragma pop_macro("IfHrFailRetFALSE")
-#pragma pop_macro("IfHrFailRet")
-
-#ifdef _MANAGED
-// We are compiling Managed C++, restore previous managed/native status from the stack
-#pragma managed(pop)
-#endif //_MANAGED
-
-#pragma warning(pop)
-
-#endif // __LEGACYACTIVATIONSHIM_H__
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-//
-
-#ifndef __LEGACYACTIVATIONSHIMDELAYLOAD_H__
-#define __LEGACYACTIVATIONSHIMDELAYLOAD_H__
-
-#define LEGACY_ACTIVATION_SHIM_DELAY_LOAD
-#include <legacyactivationshim.h>
-#undef LEGACY_ACTIVATION_SHIM_DELAY_LOAD
-
-#endif //__LEGACYACTIVATIONSHIMDELAYLOAD_H__
#define WszLogonUser LogonUserW
#define WszCreateProcessAsUser CreateProcessAsUserW
#define WszGetCurrentHwProfile GetCurrentHwProfileW
-#define WszGetVersionEx GetVersionExW
#define WszCreateJobObject CreateJobObjectW
#define WszOpenJobObject OpenJobObjectW
#define CLR_VER_SUITENAME 0x0000040
#define CLR_VER_PRODUCT_TYPE 0x0000080
-BOOL GetOSVersion(LPOSVERSIONINFOW osVer);
-
// Output printf-style formatted text to the debugger if it's present or stdout otherwise.
inline void DbgWPrintf(const LPCWSTR wszFormat, ...)
{
add_subdirectory(protojit)
endif (CLR_CMAKE_PLATFORM_ARCH_ARM)
-if ((CLR_CMAKE_PLATFORM_ARCH_I386 OR CLR_CMAKE_PLATFORM_ARCH_AMD64) AND WIN32)
+if (CLR_CMAKE_PLATFORM_ARCH_I386 OR CLR_CMAKE_PLATFORM_ARCH_AMD64)
# On x86, build RyuJIT/ARM32 cross-compiling altjit.
# On amd64, build RyuJIT/ARM64 cross-compiling altjit.
add_subdirectory(protononjit)
+endif ()
- # Build Linux/x86-running-on-Windows altjit or
- # Linux/AMD64-running-on-Windows altjit..
+if ((CLR_CMAKE_PLATFORM_ARCH_I386 OR CLR_CMAKE_PLATFORM_ARCH_AMD64) AND WIN32)
+ # On Windows, build altjit that targets the Linux ABI:
+ # On x86, build Linux/x86 altjit. This enables UNIX_X86_ABI.
+ # On amd64, build Linux/AMD64 altjit. This enables UNIX_AMD64_ABI and FEATURE_UNIX_AMD64_STRUCT_PASSING.
add_subdirectory(linuxnonjit)
endif ()
# (Note: we could also create linuxlegacynonjit for generating Linux/ARM32 code using LEGACY_BACKEND, if needed.)
add_subdirectory(legacynonjit)
endif (CLR_CMAKE_PLATFORM_ARCH_I386 AND WIN32)
-
-if (CLR_CMAKE_PLATFORM_ARCH_I386 AND WIN32)
- if (NOT CLR_BUILD_JIT32)
- add_subdirectory(compatjit)
- endif ()
-endif (CLR_CMAKE_PLATFORM_ARCH_I386 AND WIN32)
// since conversions between them are not verifiable.
#define TI_FLAG_NATIVE_INT 0x00000200
+// This item contains resolved token. It is used for ctor delegate optimization.
+#define TI_FLAG_TOKEN 0x00000400
+
// This item contains the 'this' pointer (used for tracking)
#define TI_FLAG_THIS_PTR 0x00001000
unsigned byref : 1; // used
unsigned byref_readonly : 1; // used
unsigned nativeInt : 1; // used
- unsigned : 2; // unused
+ unsigned token : 1; // used
+ unsigned : 1; // unused
unsigned thisPtr : 1; // used
unsigned thisPermHome : 1; // used
unsigned generic_type_var : 1; // used
union {
CORINFO_CLASS_HANDLE m_cls;
- // Valid only for type TI_METHOD
+ // Valid only for type TI_METHOD without IsToken
CORINFO_METHOD_HANDLE m_method;
+ // Valid only for TI_TOKEN with IsToken
+ CORINFO_RESOLVED_TOKEN* m_token;
};
template <typename T>
m_method = method;
}
+ typeInfo(CORINFO_RESOLVED_TOKEN* token)
+ {
+ assert(token != nullptr);
+ assert(token->hMethod != nullptr);
+ assert(!isInvalidHandle(token->hMethod));
+ m_flags = TI_METHOD;
+ SetIsToken();
+ m_token = token;
+ }
+
#ifdef DEBUG
#if VERBOSE_VERIFY
void Dump() const;
// Operations
/////////////////////////////////////////////////////////////////////////
+ void SetIsToken()
+ {
+ m_flags |= TI_FLAG_TOKEN;
+ assert(m_bits.token);
+ }
+
void SetIsThisPtr()
{
m_flags |= TI_FLAG_THIS_PTR;
CORINFO_METHOD_HANDLE GetMethod() const
{
assert(GetType() == TI_METHOD);
+ if (IsToken())
+ {
+ return m_token->hMethod;
+ }
return m_method;
}
+ CORINFO_RESOLVED_TOKEN* GetToken() const
+ {
+ assert(IsToken());
+ return m_token;
+ }
+
// Get this item's type
// If primitive, returns the primitive type (TI_*)
// If not primitive, returns:
// Returns whether this is a method desc
BOOL IsMethod() const
{
- return (GetType() == TI_METHOD);
+ return GetType() == TI_METHOD;
}
BOOL IsStruct() const
return (m_flags & TI_FLAG_UNINIT_OBJREF);
}
+ BOOL IsToken() const
+ {
+ return IsMethod() && ((m_flags & TI_FLAG_TOKEN) != 0);
+ }
+
private:
// used to make functions that return typeinfo efficient.
typeInfo(DWORD flags, CORINFO_CLASS_HANDLE cls)
}
//------------------------------------------------------------------------
-// genEmitGSCookieCheck: Generate code to check that the GS cookie wasn't thrashed by a buffer overrun.
-//
-void CodeGen::genEmitGSCookieCheck(bool pushReg)
-{
- NYI("ARM genEmitGSCookieCheck");
-}
-
-//------------------------------------------------------------------------
// genCallFinally: Generate a call to the finally block.
//
BasicBlock* CodeGen::genCallFinally(BasicBlock* block)
switch (treeNode->gtOper)
{
+ case GT_LCLHEAP:
+ genLclHeap(treeNode);
+ break;
+
case GT_CNS_INT:
case GT_CNS_DBL:
genSetRegToConst(targetReg, targetType, treeNode);
varDsc->lvRegNum = REG_STK;
}
+//--------------------------------------------------------------------------------------
+// genLclHeap: Generate code for localloc
+//
+// Description:
+// There are 2 ways depending from build version to generate code for localloc:
+// 1) For debug build where memory should be initialized we generate loop
+// which invoke push {tmpReg} N times.
+// 2) Fore /o build However, we tickle the pages to ensure that SP is always
+// valid and is in sync with the "stack guard page". Amount of iteration
+// is N/PAGE_SIZE.
+//
+// Comments:
+// There can be some optimization:
+// 1) It's not needed to generate loop for zero size allocation
+// 2) For small allocation (less than 4 store) we unroll loop
+// 3) For allocation less than PAGE_SIZE and when it's not needed to initialize
+// memory to zero, we can just increment SP.
+//
+// Notes: Size N should be aligned to STACK_ALIGN before any allocation
+//
+void CodeGen::genLclHeap(GenTreePtr tree)
+{
+ assert(tree->OperGet() == GT_LCLHEAP);
+
+ GenTreePtr size = tree->gtOp.gtOp1;
+ noway_assert((genActualType(size->gtType) == TYP_INT) || (genActualType(size->gtType) == TYP_I_IMPL));
+
+ // Result of localloc will be returned in regCnt.
+ // Also it used as temporary register in code generation
+ // for storing allocation size
+ regNumber regCnt = tree->gtRegNum;
+ regMaskTP tmpRegsMask = tree->gtRsvdRegs;
+ regNumber pspSymReg = REG_NA;
+ var_types type = genActualType(size->gtType);
+ emitAttr easz = emitTypeSize(type);
+ BasicBlock* endLabel = nullptr;
+ BasicBlock* loop = nullptr;
+ unsigned stackAdjustment = 0;
+
+#ifdef DEBUG
+ // Verify ESP
+ if (compiler->opts.compStackCheckOnRet)
+ {
+ noway_assert(compiler->lvaReturnEspCheck != 0xCCCCCCCC &&
+ compiler->lvaTable[compiler->lvaReturnEspCheck].lvDoNotEnregister &&
+ compiler->lvaTable[compiler->lvaReturnEspCheck].lvOnFrame);
+ getEmitter()->emitIns_S_R(INS_cmp, EA_PTRSIZE, REG_SPBASE, compiler->lvaReturnEspCheck, 0);
+
+ BasicBlock* esp_check = genCreateTempLabel();
+ emitJumpKind jmpEqual = genJumpKindForOper(GT_EQ, CK_SIGNED);
+ inst_JMP(jmpEqual, esp_check);
+ getEmitter()->emitIns(INS_BREAKPOINT);
+ genDefineTempLabel(esp_check);
+ }
+#endif
+
+ noway_assert(isFramePointerUsed()); // localloc requires Frame Pointer to be established since SP changes
+ noway_assert(genStackLevel == 0); // Can't have anything on the stack
+
+ // Whether method has PSPSym.
+ bool hasPspSym;
+#if FEATURE_EH_FUNCLETS
+ hasPspSym = (compiler->lvaPSPSym != BAD_VAR_NUM);
+#else
+ hasPspSym = false;
+#endif
+
+ // Check to 0 size allocations
+ // size_t amount = 0;
+ if (size->IsCnsIntOrI())
+ {
+ // If size is a constant, then it must be contained.
+ assert(size->isContained());
+
+ // If amount is zero then return null in regCnt
+ size_t amount = size->gtIntCon.gtIconVal;
+ if (amount == 0)
+ {
+ instGen_Set_Reg_To_Zero(EA_PTRSIZE, regCnt);
+ goto BAILOUT;
+ }
+ }
+ else
+ {
+ // If 0 bail out by returning null in regCnt
+ genConsumeRegAndCopy(size, regCnt);
+ endLabel = genCreateTempLabel();
+ getEmitter()->emitIns_R_R(INS_TEST, easz, regCnt, regCnt);
+ emitJumpKind jmpEqual = genJumpKindForOper(GT_EQ, CK_SIGNED);
+ inst_JMP(jmpEqual, endLabel);
+ }
+
+ stackAdjustment = 0;
+#if FEATURE_EH_FUNCLETS
+ // If we have PSPsym, then need to re-locate it after localloc.
+ if (hasPspSym)
+ {
+ stackAdjustment += STACK_ALIGN;
+
+ // Save a copy of PSPSym
+ assert(genCountBits(tmpRegsMask) >= 1);
+ regMaskTP pspSymRegMask = genFindLowestBit(tmpRegsMask);
+ tmpRegsMask &= ~pspSymRegMask;
+ pspSymReg = genRegNumFromMask(pspSymRegMask);
+ getEmitter()->emitIns_R_S(ins_Load(TYP_I_IMPL), EA_PTRSIZE, pspSymReg, compiler->lvaPSPSym, 0);
+ }
+#endif
+
+#if FEATURE_FIXED_OUT_ARGS
+ // If we have an outgoing arg area then we must adjust the SP by popping off the
+ // outgoing arg area. We will restore it right before we return from this method.
+ if (compiler->lvaOutgoingArgSpaceSize > 0)
+ {
+ assert((compiler->lvaOutgoingArgSpaceSize % STACK_ALIGN) == 0); // This must be true for the stack to remain
+ // aligned
+ inst_RV_IV(INS_add, REG_SPBASE, compiler->lvaOutgoingArgSpaceSize, EA_PTRSIZE);
+ stackAdjustment += compiler->lvaOutgoingArgSpaceSize;
+ }
+#endif
+
+ // Put aligned allocation size to regCnt
+ if (size->IsCnsIntOrI())
+ {
+ // 'amount' is the total number of bytes to localloc to properly STACK_ALIGN
+ size_t amount = size->gtIntCon.gtIconVal;
+ amount = AlignUp(amount, STACK_ALIGN);
+
+ // For small allocations we will generate up to four stp instructions
+ size_t cntStackAlignedWidthItems = (amount >> STACK_ALIGN_SHIFT);
+ if (cntStackAlignedWidthItems <= 4)
+ {
+ instGen_Set_Reg_To_Zero(EA_PTRSIZE, regCnt);
+
+ while (cntStackAlignedWidthItems != 0)
+ {
+ inst_IV(INS_push, (unsigned)genRegMask(regCnt));
+ cntStackAlignedWidthItems -= 1;
+ }
+
+ goto ALLOC_DONE;
+ }
+ else if (!compiler->info.compInitMem && (amount < compiler->eeGetPageSize())) // must be < not <=
+ {
+ // Since the size is a page or less, simply adjust the SP value
+ // The SP might already be in the guard page, must touch it BEFORE
+ // the alloc, not after.
+ getEmitter()->emitIns_R_R_I(INS_ldr, EA_4BYTE, regCnt, REG_SP, 0);
+ inst_RV_IV(INS_sub, REG_SP, amount, EA_PTRSIZE);
+ goto ALLOC_DONE;
+ }
+
+ // regCnt will be the total number of bytes to locAlloc
+ genSetRegToIcon(regCnt, amount, ((int)amount == amount) ? TYP_INT : TYP_LONG);
+ }
+ else
+ {
+ // Round up the number of bytes to allocate to a STACK_ALIGN boundary.
+ inst_RV_IV(INS_add, regCnt, (STACK_ALIGN - 1), emitActualTypeSize(type));
+ inst_RV_IV(INS_AND, regCnt, ~(STACK_ALIGN - 1), emitActualTypeSize(type));
+ }
+
+ // Allocation
+ if (compiler->info.compInitMem)
+ {
+ // At this point 'regCnt' is set to the total number of bytes to locAlloc.
+ // Since we have to zero out the allocated memory AND ensure that RSP is always valid
+ // by tickling the pages, we will just push 0's on the stack.
+
+ assert(tmpRegsMask != RBM_NONE);
+ assert(genCountBits(tmpRegsMask) >= 1);
+
+ regMaskTP regCntMask = genFindLowestBit(tmpRegsMask);
+ tmpRegsMask &= ~regCntMask;
+ regNumber regTmp = genRegNumFromMask(regCntMask);
+ instGen_Set_Reg_To_Zero(EA_PTRSIZE, regTmp);
+
+ // Loop:
+ BasicBlock* loop = genCreateTempLabel();
+ genDefineTempLabel(loop);
+
+ noway_assert(STACK_ALIGN == 8);
+ inst_IV(INS_push, (unsigned)genRegMask(regTmp));
+ inst_IV(INS_push, (unsigned)genRegMask(regTmp));
+
+ // If not done, loop
+ // Note that regCnt is the number of bytes to stack allocate.
+ assert(genIsValidIntReg(regCnt));
+ getEmitter()->emitIns_R_R_I(INS_sub, EA_PTRSIZE, regCnt, regCnt, STACK_ALIGN);
+ emitJumpKind jmpNotEqual = genJumpKindForOper(GT_NE, CK_SIGNED);
+ inst_JMP(jmpNotEqual, loop);
+ }
+ else
+ {
+ // At this point 'regCnt' is set to the total number of bytes to locAlloc.
+ //
+ // We don't need to zero out the allocated memory. However, we do have
+ // to tickle the pages to ensure that SP is always valid and is
+ // in sync with the "stack guard page". Note that in the worst
+ // case SP is on the last byte of the guard page. Thus you must
+ // touch SP+0 first not SP+0x1000.
+ //
+ // Another subtlety is that you don't want SP to be exactly on the
+ // boundary of the guard page because PUSH is predecrement, thus
+ // call setup would not touch the guard page but just beyond it
+ //
+ // Note that we go through a few hoops so that SP never points to
+ // illegal pages at any time during the ticking process
+ //
+ // subs regCnt, SP, regCnt // regCnt now holds ultimate SP
+ // jb Loop // result is smaller than orignial SP (no wrap around)
+ // mov regCnt, #0 // Overflow, pick lowest possible value
+ //
+ // Loop:
+ // ldr regTmp, [SP + 0] // tickle the page - read from the page
+ // sub regTmp, SP, PAGE_SIZE // decrement SP by PAGE_SIZE
+ // cmp regTmp, regCnt
+ // jb Done
+ // mov SP, regTmp
+ // j Loop
+ //
+ // Done:
+ // mov SP, regCnt
+ //
+
+ // Setup the regTmp
+ assert(tmpRegsMask != RBM_NONE);
+ assert(genCountBits(tmpRegsMask) == 1);
+ regNumber regTmp = genRegNumFromMask(tmpRegsMask);
+
+ BasicBlock* loop = genCreateTempLabel();
+ BasicBlock* done = genCreateTempLabel();
+
+ // subs regCnt, SP, regCnt // regCnt now holds ultimate SP
+ getEmitter()->emitIns_R_R_R(INS_sub, EA_PTRSIZE, regCnt, REG_SPBASE, regCnt);
+
+ inst_JMP(EJ_vc, loop); // branch if the V flag is not set
+
+ // Ups... Overflow, set regCnt to lowest possible value
+ instGen_Set_Reg_To_Zero(EA_PTRSIZE, regCnt);
+
+ genDefineTempLabel(loop);
+
+ // tickle the page - Read from the updated SP - this triggers a page fault when on the guard page
+ getEmitter()->emitIns_R_R_I(INS_ldr, EA_4BYTE, regTmp, REG_SPBASE, 0);
+
+ // decrement SP by PAGE_SIZE
+ getEmitter()->emitIns_R_R_I(INS_sub, EA_PTRSIZE, regTmp, REG_SPBASE, compiler->eeGetPageSize());
+
+ getEmitter()->emitIns_R_R(INS_cmp, EA_PTRSIZE, regTmp, regCnt);
+ emitJumpKind jmpLTU = genJumpKindForOper(GT_LT, CK_UNSIGNED);
+ inst_JMP(jmpLTU, done);
+
+ // Update SP to be at the next page of stack that we will tickle
+ getEmitter()->emitIns_R_R(INS_mov, EA_PTRSIZE, REG_SPBASE, regCnt);
+
+ // Jump to loop and tickle new stack address
+ inst_JMP(EJ_jmp, loop);
+
+ // Done with stack tickle loop
+ genDefineTempLabel(done);
+
+ // Now just move the final value to SP
+ getEmitter()->emitIns_R_R(INS_mov, EA_PTRSIZE, REG_SPBASE, regCnt);
+ }
+
+ALLOC_DONE:
+ // Re-adjust SP to allocate PSPSym and out-going arg area
+ if (stackAdjustment != 0)
+ {
+ assert((stackAdjustment % STACK_ALIGN) == 0); // This must be true for the stack to remain aligned
+ assert(stackAdjustment > 0);
+ getEmitter()->emitIns_R_R_I(INS_sub, EA_PTRSIZE, REG_SPBASE, REG_SPBASE, (int)stackAdjustment);
+
+#if FEATURE_EH_FUNCLETS
+ // Write PSPSym to its new location.
+ if (hasPspSym)
+ {
+ assert(genIsValidIntReg(pspSymReg));
+ getEmitter()->emitIns_S_R(ins_Store(TYP_I_IMPL), EA_PTRSIZE, pspSymReg, compiler->lvaPSPSym, 0);
+ }
+#endif
+ // Return the stackalloc'ed address in result register.
+ // regCnt = RSP + stackAdjustment.
+ getEmitter()->emitIns_R_R_I(INS_add, EA_PTRSIZE, regCnt, REG_SPBASE, (int)stackAdjustment);
+ }
+ else // stackAdjustment == 0
+ {
+ // Move the final value of SP to regCnt
+ inst_RV_RV(INS_mov, regCnt, REG_SPBASE);
+ }
+
+BAILOUT:
+ if (endLabel != nullptr)
+ genDefineTempLabel(endLabel);
+
+ // Write the lvaLocAllocSPvar stack frame slot
+ if (compiler->lvaLocAllocSPvar != BAD_VAR_NUM)
+ {
+ getEmitter()->emitIns_S_R(ins_Store(TYP_I_IMPL), EA_PTRSIZE, regCnt, compiler->lvaLocAllocSPvar, 0);
+ }
+
+#if STACK_PROBES
+ if (compiler->opts.compNeedStackProbes)
+ {
+ genGenerateStackProbe();
+ }
+#endif
+
+#ifdef DEBUG
+ // Update new ESP
+ if (compiler->opts.compStackCheckOnRet)
+ {
+ noway_assert(compiler->lvaReturnEspCheck != 0xCCCCCCCC &&
+ compiler->lvaTable[compiler->lvaReturnEspCheck].lvDoNotEnregister &&
+ compiler->lvaTable[compiler->lvaReturnEspCheck].lvOnFrame);
+ getEmitter()->emitIns_S_R(ins_Store(TYP_I_IMPL), EA_PTRSIZE, regCnt, compiler->lvaReturnEspCheck, 0);
+ }
+#endif
+
+ genProduceReg(tree);
+}
+
//------------------------------------------------------------------------
// genTableBasedSwitch: generate code for a switch statement based on a table of ip-relative offsets
//
// Insert a null check on "this" pointer if asked.
if (call->NeedsNullCheck())
{
- const regNumber regThis = genGetThisArgReg(call);
- const regNumber tmpReg = genRegNumFromMask(call->gtRsvdRegs);
+ const regNumber regThis = genGetThisArgReg(call);
+ regMaskTP tempMask = genFindLowestBit(call->gtRsvdRegs);
+ const regNumber tmpReg = genRegNumFromMask(tempMask);
+ if (genCountBits(call->gtRsvdRegs) > 1)
+ {
+ call->gtRsvdRegs &= ~tempMask;
+ }
getEmitter()->emitIns_R_R_I(INS_ldr, EA_4BYTE, tmpReg, regThis, 0);
}
instGen_Set_Reg_To_Imm(emitActualTypeSize(type), reg, val, flags);
}
-/*****************************************************************************
- *
- * Generate code to check that the GS cookie wasn't thrashed by a buffer
- * overrun. On ARM64 we always use REG_TMP_0 and REG_TMP_1 as temp registers
- * and this works fine in the case of tail calls
- * Implementation Note: pushReg = true, in case of tail calls.
- */
-void CodeGen::genEmitGSCookieCheck(bool pushReg)
-{
- noway_assert(compiler->gsGlobalSecurityCookieAddr || compiler->gsGlobalSecurityCookieVal);
-
- // Make sure that the return register is reported as live GC-ref so that any GC that kicks in while
- // executing GS cookie check will not collect the object pointed to by REG_INTRET (R0).
- if (!pushReg && (compiler->info.compRetType == TYP_REF))
- gcInfo.gcRegGCrefSetCur |= RBM_INTRET;
-
- regNumber regGSConst = REG_TMP_0;
- regNumber regGSValue = REG_TMP_1;
-
- if (compiler->gsGlobalSecurityCookieAddr == nullptr)
- {
- // load the GS cookie constant into a reg
- //
- genSetRegToIcon(regGSConst, compiler->gsGlobalSecurityCookieVal, TYP_I_IMPL);
- }
- else
- {
- // Ngen case - GS cookie constant needs to be accessed through an indirection.
- instGen_Set_Reg_To_Imm(EA_HANDLE_CNS_RELOC, regGSConst, (ssize_t)compiler->gsGlobalSecurityCookieAddr);
- getEmitter()->emitIns_R_R_I(ins_Load(TYP_I_IMPL), EA_PTRSIZE, regGSConst, regGSConst, 0);
- }
- // Load this method's GS value from the stack frame
- getEmitter()->emitIns_R_S(ins_Load(TYP_I_IMPL), EA_PTRSIZE, regGSValue, compiler->lvaGSSecurityCookie, 0);
- // Compare with the GC cookie constant
- getEmitter()->emitIns_R_R(INS_cmp, EA_PTRSIZE, regGSConst, regGSValue);
-
- BasicBlock* gsCheckBlk = genCreateTempLabel();
- emitJumpKind jmpEqual = genJumpKindForOper(GT_EQ, CK_SIGNED);
- inst_JMP(jmpEqual, gsCheckBlk);
- genEmitHelperCall(CORINFO_HELP_FAIL_FAST, 0, EA_UNKNOWN);
- genDefineTempLabel(gsCheckBlk);
-}
-
BasicBlock* CodeGen::genCallFinally(BasicBlock* block)
{
// Generate a call to the finally, like this:
if (movRequired)
{
- emitAttr movSize = EA_ATTR(genTypeSize(targetType));
- getEmitter()->emitIns_R_R(INS_mov, movSize, retReg, op1->gtRegNum);
+ emitAttr attr = emitTypeSize(targetType);
+ getEmitter()->emitIns_R_R(INS_mov, attr, retReg, op1->gtRegNum);
}
}
return result;
}
+#ifndef LEGACY_BACKEND
+#ifdef _TARGET_ARMARCH_
+//------------------------------------------------------------------------
+// genEmitGSCookieCheck: Generate code to check that the GS cookie
+// wasn't thrashed by a buffer overrun. Coomon code for ARM32 and ARM64
+//
+void CodeGen::genEmitGSCookieCheck(bool pushReg)
+{
+ noway_assert(compiler->gsGlobalSecurityCookieAddr || compiler->gsGlobalSecurityCookieVal);
+
+ // Make sure that the return register is reported as live GC-ref so that any GC that kicks in while
+ // executing GS cookie check will not collect the object pointed to by REG_INTRET (R0).
+ if (!pushReg && (compiler->info.compRetType == TYP_REF))
+ gcInfo.gcRegGCrefSetCur |= RBM_INTRET;
+
+ regNumber regGSConst = REG_TMP_0;
+ regNumber regGSValue = REG_TMP_1;
+
+ if (compiler->gsGlobalSecurityCookieAddr == nullptr)
+ {
+ // load the GS cookie constant into a reg
+ //
+ genSetRegToIcon(regGSConst, compiler->gsGlobalSecurityCookieVal, TYP_I_IMPL);
+ }
+ else
+ {
+ // Ngen case - GS cookie constant needs to be accessed through an indirection.
+ instGen_Set_Reg_To_Imm(EA_HANDLE_CNS_RELOC, regGSConst, (ssize_t)compiler->gsGlobalSecurityCookieAddr);
+ getEmitter()->emitIns_R_R_I(ins_Load(TYP_I_IMPL), EA_PTRSIZE, regGSConst, regGSConst, 0);
+ }
+ // Load this method's GS value from the stack frame
+ getEmitter()->emitIns_R_S(ins_Load(TYP_I_IMPL), EA_PTRSIZE, regGSValue, compiler->lvaGSSecurityCookie, 0);
+ // Compare with the GC cookie constant
+ getEmitter()->emitIns_R_R(INS_cmp, EA_PTRSIZE, regGSConst, regGSValue);
+
+ BasicBlock* gsCheckBlk = genCreateTempLabel();
+ emitJumpKind jmpEqual = genJumpKindForOper(GT_EQ, CK_SIGNED);
+ inst_JMP(jmpEqual, gsCheckBlk);
+ // regGSConst and regGSValue aren't needed anymore, we can use them for helper call
+ genEmitHelperCall(CORINFO_HELP_FAIL_FAST, 0, EA_UNKNOWN, regGSConst);
+ genDefineTempLabel(gsCheckBlk);
+}
+#endif // _TARGET_ARMARCH_
+#endif // !LEGACY_BACKEND
+
/*****************************************************************************
*
* Generate an exit sequence for a return from a method (note: when compiling
bool trackedStackPtrsContig; // are tracked stk-ptrs contiguous ?
-#ifdef _TARGET_AMD64_
+#if defined(_TARGET_AMD64_) || defined(_TARGET_ARM64_)
trackedStackPtrsContig = false;
#elif defined(_TARGET_ARM_)
// On arm due to prespilling of arguments, tracked stk-ptrs may not be contiguous
trackedStackPtrsContig = !compiler->opts.compDbgEnC && !compiler->compIsProfilerHookNeeded();
-#elif defined(_TARGET_ARM64_)
- // Incoming vararg registers are homed on the top of the stack. Tracked var may not be contiguous.
- trackedStackPtrsContig = !compiler->opts.compDbgEnC && !compiler->info.compIsVarArgs;
#else
trackedStackPtrsContig = !compiler->opts.compDbgEnC;
#endif
}
#endif // defined(_TARGET_ARMARCH_)
+#if defined(_TARGET_ARM_)
+ // If there are any reserved registers, add them to the
+ if (regSet.rsMaskResvd != RBM_NONE)
+ {
+ regSet.rsSetRegsModified(regSet.rsMaskResvd);
+ }
+#endif // _TARGET_ARM_
+
#ifdef DEBUG
if (verbose)
{
}
else
{
- noway_assert(pInfo->osMajor >= 5);
-
DWORD basePtr = WIN_NT5_TLS_HIGHOFFSET;
threadTlsIndex -= 64;
+++ /dev/null
-Only contents of this folder, excluding subfolders, will be mirrored by the Git-TFS Mirror.
\ No newline at end of file
+++ /dev/null
-project(compatjit)
-
-# This compatjit.dll is only built if we are not building JIT32 as compatjit.dll.
-# It is a normal JIT build, and only exists so the JIT nuget package can build,
-# with both clrjit.dll and compatjit.dll, if JIT32 is not being built.
-
-add_definitions(-DFEATURE_NO_HOST)
-add_definitions(-DSELF_NO_HOST)
-add_definitions(-DFEATURE_READYTORUN_COMPILER)
-remove_definitions(-DFEATURE_MERGE_JIT_AND_ENGINE)
-
-if(WIN32)
- add_definitions(-DFX_VER_INTERNALNAME_STR=compatjit.dll)
-endif(WIN32)
-
-add_library_clr(compatjit
- SHARED
- ${SHARED_LIB_SOURCES}
- ${JIT_ARCH_SOURCES}
-)
-
-add_dependencies(compatjit jit_exports)
-
-set_property(TARGET compatjit APPEND_STRING PROPERTY LINK_FLAGS ${JIT_EXPORTS_LINKER_OPTION})
-set_property(TARGET compatjit APPEND_STRING PROPERTY LINK_DEPENDS ${JIT_EXPORTS_FILE})
-
-set(RYUJIT_LINK_LIBRARIES
- utilcodestaticnohost
- gcinfo
-)
-
-if(CLR_CMAKE_PLATFORM_UNIX)
- list(APPEND RYUJIT_LINK_LIBRARIES
- mscorrc_debug
- coreclrpal
- palrt
- )
-else()
- list(APPEND RYUJIT_LINK_LIBRARIES
- ${STATIC_MT_CRT_LIB}
- ${STATIC_MT_VCRT_LIB}
- kernel32.lib
- advapi32.lib
- ole32.lib
- oleaut32.lib
- uuid.lib
- user32.lib
- version.lib
- shlwapi.lib
- bcrypt.lib
- crypt32.lib
- RuntimeObject.lib
- )
-endif(CLR_CMAKE_PLATFORM_UNIX)
-
-target_link_libraries(compatjit
- ${RYUJIT_LINK_LIBRARIES}
-)
-
-# add the install targets
-install_clr(compatjit)
opts.jitFlags = jitFlags;
opts.compFlags = CLFLG_MAXOPT; // Default value is for full optimization
- if (jitFlags->IsSet(JitFlags::JIT_FLAG_DEBUG_CODE) || jitFlags->IsSet(JitFlags::JIT_FLAG_MIN_OPT))
+ if (jitFlags->IsSet(JitFlags::JIT_FLAG_DEBUG_CODE) || jitFlags->IsSet(JitFlags::JIT_FLAG_MIN_OPT) ||
+ jitFlags->IsSet(JitFlags::JIT_FLAG_TIER0))
{
opts.compFlags = CLFLG_MINOPT;
}
//
// If the EE sets SPEED_OPT we will optimize for speed at the expense of code size
//
- else if (jitFlags->IsSet(JitFlags::JIT_FLAG_SPEED_OPT))
+ else if (jitFlags->IsSet(JitFlags::JIT_FLAG_SPEED_OPT) ||
+ (jitFlags->IsSet(JitFlags::JIT_FLAG_TIER1) && !jitFlags->IsSet(JitFlags::JIT_FLAG_MIN_OPT)))
{
opts.compCodeOpt = FAST_CODE;
assert(!jitFlags->IsSet(JitFlags::JIT_FLAG_SIZE_OPT));
StackEntry impPopStack(CORINFO_CLASS_HANDLE& structTypeRet);
GenTreePtr impPopStack(typeInfo& ti);
StackEntry& impStackTop(unsigned n = 0);
+ unsigned impStackHeight();
void impSaveStackState(SavedStack* savePtr, bool copy);
void impRestoreStackState(SavedStack* savePtr);
bool impIsImplicitTailCallCandidate(
OPCODE curOpcode, const BYTE* codeAddrOfNextOpcode, const BYTE* codeEnd, int prefixFlags, bool isRecursive);
+ CORINFO_RESOLVED_TOKEN* impAllocateToken(CORINFO_RESOLVED_TOKEN token);
+
/*
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
void fgNoteNonInlineCandidate(GenTreeStmt* stmt, GenTreeCall* call);
static fgWalkPreFn fgFindNonInlineCandidate;
#endif
- GenTreePtr fgOptimizeDelegateConstructor(GenTreeCall* call, CORINFO_CONTEXT_HANDLE* ExactContextHnd);
+ GenTreePtr fgOptimizeDelegateConstructor(GenTreeCall* call,
+ CORINFO_CONTEXT_HANDLE* ExactContextHnd,
+ CORINFO_RESOLVED_TOKEN* ldftnToken);
GenTreePtr fgMorphLeaf(GenTreePtr tree);
void fgAssignSetVarDef(GenTreePtr tree);
GenTreePtr fgMorphOneAsgBlockOp(GenTreePtr tree);
* Optimize the call to the delegate constructor.
*/
-GenTreePtr Compiler::fgOptimizeDelegateConstructor(GenTreeCall* call, CORINFO_CONTEXT_HANDLE* ExactContextHnd)
+GenTreePtr Compiler::fgOptimizeDelegateConstructor(GenTreeCall* call,
+ CORINFO_CONTEXT_HANDLE* ExactContextHnd,
+ CORINFO_RESOLVED_TOKEN* ldftnToken)
{
noway_assert(call->gtCallType == CT_USER_FUNC);
CORINFO_METHOD_HANDLE methHnd = call->gtCallMethHnd;
#ifdef FEATURE_READYTORUN_COMPILER
if (opts.IsReadyToRun())
{
+ if (IsTargetAbi(CORINFO_CORERT_ABI))
+ {
+ if (ldftnToken != nullptr)
+ {
+ GenTreePtr thisPointer = call->gtCallObjp;
+ GenTreePtr targetObjPointers = call->gtCallArgs->Current();
+ GenTreeArgList* helperArgs = nullptr;
+ CORINFO_LOOKUP pLookup;
+ CORINFO_CONST_LOOKUP entryPoint;
+ info.compCompHnd->getReadyToRunDelegateCtorHelper(ldftnToken, clsHnd, &pLookup);
+ if (!pLookup.lookupKind.needsRuntimeLookup)
+ {
+ helperArgs = gtNewArgList(thisPointer, targetObjPointers);
+ entryPoint = pLookup.constLookup;
+ }
+ else
+ {
+ assert(oper != GT_FTN_ADDR);
+ CORINFO_CONST_LOOKUP genericLookup;
+ info.compCompHnd->getReadyToRunHelper(ldftnToken, &pLookup.lookupKind,
+ CORINFO_HELP_READYTORUN_GENERIC_HANDLE, &genericLookup);
+ GenTreePtr ctxTree = getRuntimeContextTree(pLookup.lookupKind.runtimeLookupKind);
+ helperArgs = gtNewArgList(thisPointer, targetObjPointers, ctxTree);
+ entryPoint = genericLookup;
+ }
+ call = gtNewHelperCallNode(CORINFO_HELP_READYTORUN_DELEGATE_CTOR, TYP_VOID, GTF_EXCEPT, helperArgs);
+ call->setEntryPoint(entryPoint);
+ }
+ }
// ReadyToRun has this optimization for a non-virtual function pointers only for now.
- if (oper == GT_FTN_ADDR)
+ else if (oper == GT_FTN_ADDR)
{
GenTreePtr thisPointer = call->gtCallObjp;
GenTreePtr targetObjPointers = call->gtCallArgs->Current();
call = gtNewHelperCallNode(CORINFO_HELP_READYTORUN_DELEGATE_CTOR, TYP_VOID, GTF_EXCEPT, helperArgs);
- CORINFO_RESOLVED_TOKEN* ldftnToken = targetMethod->gtFptrVal.gtLdftnResolvedToken;
- CORINFO_LOOKUP entryPoint;
+ assert(ldftnToken == targetMethod->gtFptrVal.gtLdftnResolvedToken);
+ CORINFO_LOOKUP entryPoint;
info.compCompHnd->getReadyToRunDelegateCtorHelper(ldftnToken, clsHnd, &entryPoint);
assert(!entryPoint.lookupKind.needsRuntimeLookup);
call->setEntryPoint(entryPoint.constLookup);
return verCurrentState.esStack[verCurrentState.esStackDepth - n - 1];
}
+
+unsigned Compiler::impStackHeight()
+{
+ return verCurrentState.esStackDepth;
+}
+
/*****************************************************************************
* Some of the trees are spilled specially. While unspilling them, or
* making a copy, these need to be handled specially. The function
int tailCall = prefixFlags & PREFIX_TAILCALL;
bool readonlyCall = (prefixFlags & PREFIX_READONLY) != 0;
+ CORINFO_RESOLVED_TOKEN* ldftnToken = nullptr;
+
// Synchronized methods need to call CORINFO_HELP_MON_EXIT at the end. We could
// do that before tailcalls, but that is probably not the intended
// semantic. So just disallow tailcalls from synchronized methods.
exactContextHnd = nullptr;
}
+ if ((opcode == CEE_NEWOBJ) && ((clsFlags & CORINFO_FLG_DELEGATE) != 0))
+ {
+ // Only verifiable cases are supported.
+ // dup; ldvirtftn; newobj; or ldftn; newobj.
+ // IL test could contain unverifiable sequence, in this case optimization should not be done.
+ if (impStackHeight() > 0)
+ {
+ typeInfo delegateTypeInfo = impStackTop().seTypeInfo;
+ if (delegateTypeInfo.IsToken())
+ {
+ ldftnToken = delegateTypeInfo.GetToken();
+ }
+ }
+ }
+
//-------------------------------------------------------------------------
// The main group of arguments
{
// New inliner morph it in impImportCall.
// This will allow us to inline the call to the delegate constructor.
- call = fgOptimizeDelegateConstructor(call->AsCall(), &exactContextHnd);
+ call = fgOptimizeDelegateConstructor(call->AsCall(), &exactContextHnd, ldftnToken);
}
if (!bIntrinsicImported)
return;
}
- impPushOnStack(op1, typeInfo(resolvedToken.hMethod));
+ CORINFO_RESOLVED_TOKEN* heapToken = impAllocateToken(resolvedToken);
+ impPushOnStack(op1, typeInfo(heapToken));
break;
}
return;
}
- impPushOnStack(fptr, typeInfo(resolvedToken.hMethod));
+ CORINFO_RESOLVED_TOKEN* heapToken = impAllocateToken(resolvedToken);
+ assert(heapToken->tokenType == CORINFO_TOKENKIND_Method);
+ heapToken->tokenType = CORINFO_TOKENKIND_Ldvirtftn;
+ impPushOnStack(fptr, typeInfo(heapToken));
break;
}
}
#endif // defined(DEBUG)
}
+
+//------------------------------------------------------------------------
+// impAllocateToken: create CORINFO_RESOLVED_TOKEN into jit-allocated memory and init it.
+//
+// Arguments:
+// token - init value for the allocated token.
+//
+// Return Value:
+// pointer to token into jit-allocated memory.
+CORINFO_RESOLVED_TOKEN* Compiler::impAllocateToken(CORINFO_RESOLVED_TOKEN token)
+{
+ CORINFO_RESOLVED_TOKEN* memory = (CORINFO_RESOLVED_TOKEN*)compGetMem(sizeof(token));
+ *memory = token;
+ return memory;
+}
#define __PLACEMENT_NEW_INLINE // don't bring in the global placement new, it is easy to make a mistake
// with our new(compiler*) pattern.
-#if COR_JIT_EE_VER > 460
-#define NO_CLRCONFIG // Don't bring in the usual CLRConfig infrastructure, since the JIT uses the JIT/EE
- // interface to retrieve config values.
-
-// This is needed for contract.inl when FEATURE_STACK_PROBE is enabled.
-struct CLRConfig
-{
- static struct ConfigKey
- {
- } EXTERNAL_NO_SO_NOT_MAINLINE;
- static DWORD GetConfigValue(const ConfigKey& key)
- {
- return 0;
- }
-};
-#endif
-
#include "utilcode.h" // this defines assert as _ASSERTE
#include "host.h" // this redefines assert for the JIT to use assertAbort
#include "utils.h"
JIT_FLAG_USE_PINVOKE_HELPERS = 36, // The JIT should use the PINVOKE_{BEGIN,END} helpers instead of emitting inline transitions
JIT_FLAG_REVERSE_PINVOKE = 37, // The JIT should insert REVERSE_PINVOKE_{ENTER,EXIT} helpers into method prolog/epilog
JIT_FLAG_DESKTOP_QUIRKS = 38, // The JIT should generate desktop-quirk-compatible code
+ JIT_FLAG_TIER0 = 39, // This is the initial tier for tiered compilation which should generate code as quickly as possible
+ JIT_FLAG_TIER1 = 40, // This is the final tier (for now) for tiered compilation which should generate high quality code
};
// clang-format on
FLAGS_EQUAL(CORJIT_FLAGS::CORJIT_FLAG_USE_PINVOKE_HELPERS, JIT_FLAG_USE_PINVOKE_HELPERS);
FLAGS_EQUAL(CORJIT_FLAGS::CORJIT_FLAG_REVERSE_PINVOKE, JIT_FLAG_REVERSE_PINVOKE);
FLAGS_EQUAL(CORJIT_FLAGS::CORJIT_FLAG_DESKTOP_QUIRKS, JIT_FLAG_DESKTOP_QUIRKS);
+ FLAGS_EQUAL(CORJIT_FLAGS::CORJIT_FLAG_TIER0, JIT_FLAG_TIER0);
+ FLAGS_EQUAL(CORJIT_FLAGS::CORJIT_FLAG_TIER1, JIT_FLAG_TIER1);
#undef FLAGS_EQUAL
}
}
}
+void Lowering::TreeNodeInfoInitLclHeap(GenTree* tree)
+{
+ TreeNodeInfo* info = &(tree->gtLsraInfo);
+ LinearScan* l = m_lsra;
+ Compiler* compiler = comp;
+
+ info->srcCount = 1;
+ info->dstCount = 1;
+
+ // Need a variable number of temp regs (see genLclHeap() in codegenarm.cpp):
+ // Here '-' means don't care.
+ //
+ // Size? Init Memory? # temp regs
+ // 0 - 0
+ // const and <=4 ptr words - hasPspSym ? 1 : 0
+ // const and <PageSize No hasPspSym ? 1 : 0
+ // >4 ptr words Yes hasPspSym ? 2 : 1
+ // Non-const Yes hasPspSym ? 2 : 1
+ // Non-const No hasPspSym ? 2 : 1
+
+ bool hasPspSym;
+#if FEATURE_EH_FUNCLETS
+ hasPspSym = (compiler->lvaPSPSym != BAD_VAR_NUM);
+#else
+ hasPspSym = false;
+#endif
+
+ GenTreePtr size = tree->gtOp.gtOp1;
+ if (size->IsCnsIntOrI())
+ {
+ MakeSrcContained(tree, size);
+
+ size_t sizeVal = size->gtIntCon.gtIconVal;
+ if (sizeVal == 0)
+ {
+ info->internalIntCount = 0;
+ }
+ else
+ {
+ sizeVal = AlignUp(sizeVal, STACK_ALIGN);
+ size_t cntStackAlignedWidthItems = (sizeVal >> STACK_ALIGN_SHIFT);
+
+ // For small allocations up to 4 store instructions
+ if (cntStackAlignedWidthItems <= 4)
+ {
+ info->internalIntCount = 0;
+ }
+ else if (!compiler->info.compInitMem)
+ {
+ // No need to initialize allocated stack space.
+ if (sizeVal < compiler->eeGetPageSize())
+ {
+ info->internalIntCount = 0;
+ }
+ else
+ {
+ // target (regCnt) + tmp + [psp]
+ info->internalIntCount = 1;
+ info->isInternalRegDelayFree = true;
+ }
+ }
+ else
+ {
+ // target (regCnt) + tmp + [psp]
+ info->internalIntCount = 1;
+ info->isInternalRegDelayFree = true;
+ }
+
+ if (hasPspSym)
+ {
+ info->internalIntCount++;
+ }
+ }
+ }
+ else
+ {
+ // target (regCnt) + tmp + [psp]
+ info->internalIntCount = hasPspSym ? 2 : 1;
+ info->isInternalRegDelayFree = true;
+ }
+}
+
//------------------------------------------------------------------------
// TreeNodeInfoInitBlockStore: Set the NodeInfo for a block store.
//
TreeNodeInfoInitBlockStore(tree->AsBlk());
break;
+ case GT_LCLHEAP:
+ TreeNodeInfoInitLclHeap(tree);
+ break;
+
case GT_STOREIND:
{
info->srcCount = 2;
clr_unknown_arch()
endif()
+if (NOT WIN32)
+ if (CLR_CMAKE_PLATFORM_ARCH_I386)
+ remove_definitions(-DUNIX_X86_ABI)
+ elseif(CLR_CMAKE_PLATFORM_ARCH_AMD64)
+ remove_definitions(-DUNIX_AMD64_ABI)
+ remove_definitions(-DFEATURE_UNIX_AMD64_STRUCT_PASSING)
+ else()
+ clr_unknown_arch()
+ endif()
+endif(NOT WIN32)
+
if(WIN32)
add_definitions(-DFX_VER_INTERNALNAME_STR=protononjit.dll)
endif(WIN32)
dwFlags = (CorAssemblyFlags) pMiniMd->getFlagsOfAssembly(pRecord);
// Validate the flags
- invalidAssemblyFlags = dwFlags & (~(afPublicKey | afRetargetable | afPA_FullMask | afEnableJITcompileTracking | afDisableJITcompileOptimizer | afContentType_Mask));
+ invalidAssemblyFlags = dwFlags & (~(afPublicKey | afRetargetable | afPA_FullMask | afDebuggableAttributeMask | afContentType_Mask));
// Validate we only set a legal processor architecture flags
// The processor architecture flags were introduced in CLR v2.0.
<Compile Include="$(BclSourcesRoot)\System\Security\VerificationException.cs" />
</ItemGroup>
<ItemGroup>
- <Compile Include="$(BclSourcesRoot)\System\Security\Util\URLString.cs" />
- </ItemGroup>
- <ItemGroup>
<Compile Include="$(BclSourcesRoot)\System\Diagnostics\Assert.cs" />
<Compile Include="$(BclSourcesRoot)\System\Diagnostics\AssertFilter.cs" />
<Compile Include="$(BclSourcesRoot)\System\Diagnostics\AssertFilters.cs" />
internal partial class Interop
{
+ // As defined in winerror.h and https://msdn.microsoft.com/en-us/library/windows/desktop/ms681382.aspx
internal partial class Errors
{
internal const int ERROR_SUCCESS = 0x0;
*/
-
+using Microsoft.Win32.SafeHandles;
using System;
-using System.Collections;
+using System.Buffers;
using System.Collections.Generic;
-using System.Security;
-using System.Text;
-using System.Threading;
-using System.IO;
-using System.Runtime.Remoting;
-using System.Runtime.InteropServices;
-using Microsoft.Win32.SafeHandles;
-using System.Runtime.Versioning;
-using System.Globalization;
using System.Diagnostics.Contracts;
-using System.Diagnostics.CodeAnalysis;
+using System.IO;
+using System.Text;
namespace Microsoft.Win32
{
public void DeleteValue(String name, bool throwOnMissingValue)
{
EnsureWriteable();
- CheckPermission(RegistryInternalCheck.CheckValueWritePermission, name, false, RegistryKeyPermissionCheck.Default);
int errorCode = Win32Native.RegDeleteValue(hkey, name);
//
{
ValidateKeyName(name);
EnsureNotDisposed();
- name = FixupName(name); // Fixup multiple slashes to a single slash
+ name = FixupName(name); // Fixup multiple slashes to a single slash
- CheckPermission(RegistryInternalCheck.CheckOpenSubKeyWithWritablePermission, name, writable, RegistryKeyPermissionCheck.Default);
SafeRegistryHandle result = null;
int ret = Win32Native.RegOpenKeyEx(hkey,
name,
return OpenSubKey(name, false);
}
- internal int InternalSubKeyCount()
+ /// <summary>
+ /// Retrieves an array of strings containing all the subkey names.
+ /// </summary>
+ public string[] GetSubKeyNames()
{
EnsureNotDisposed();
- int subkeys = 0;
- int junk = 0;
- int ret = Win32Native.RegQueryInfoKey(hkey,
- null,
- null,
- IntPtr.Zero,
- ref subkeys, // subkeys
- null,
- null,
- ref junk, // values
- null,
- null,
- null,
- null);
-
- if (ret != 0)
- Win32Error(ret, null);
- return subkeys;
- }
+ var names = new List<string>();
+ char[] name = ArrayPool<char>.Shared.Rent(MaxKeyLength + 1);
- /**
- * Retrieves an array of strings containing all the subkey names.
- *
- * @return all subkey names.
- */
- public String[] GetSubKeyNames()
- {
- CheckPermission(RegistryInternalCheck.CheckKeyReadPermission, null, false, RegistryKeyPermissionCheck.Default);
- return InternalGetSubKeyNames();
- }
-
- internal unsafe String[] InternalGetSubKeyNames()
- {
- EnsureNotDisposed();
- int subkeys = InternalSubKeyCount();
- String[] names = new String[subkeys]; // Returns 0-length array if empty.
-
- if (subkeys > 0)
+ try
{
- char[] name = new char[MaxKeyLength + 1];
-
- int namelen;
-
- fixed (char* namePtr = &name[0])
+ int result;
+ int nameLength = name.Length;
+
+ while ((result = Win32Native.RegEnumKeyEx(
+ hkey,
+ names.Count,
+ name,
+ ref nameLength,
+ null,
+ null,
+ null,
+ null)) != Interop.Errors.ERROR_NO_MORE_ITEMS)
{
- for (int i = 0; i < subkeys; i++)
+ switch (result)
{
- namelen = name.Length; // Don't remove this. The API's doesn't work if this is not properly initialised.
- int ret = Win32Native.RegEnumKeyEx(hkey,
- i,
- namePtr,
- ref namelen,
- null,
- null,
- null,
- null);
- if (ret != 0)
- Win32Error(ret, null);
- names[i] = new String(namePtr);
+ case Interop.Errors.ERROR_SUCCESS:
+ names.Add(new string(name, 0, nameLength));
+ nameLength = name.Length;
+ break;
+ default:
+ // Throw the error
+ Win32Error(result, null);
+ break;
}
}
}
+ finally
+ {
+ ArrayPool<char>.Shared.Return(name);
+ }
- return names;
+ return names.ToArray();
}
- internal int InternalValueCount()
+ /// <summary>
+ /// Retrieves an array of strings containing all the value names.
+ /// </summary>
+ public unsafe string[] GetValueNames()
{
EnsureNotDisposed();
- int values = 0;
- int junk = 0;
- int ret = Win32Native.RegQueryInfoKey(hkey,
- null,
- null,
- IntPtr.Zero,
- ref junk, // subkeys
- null,
- null,
- ref values, // values
- null,
- null,
- null,
- null);
- if (ret != 0)
- Win32Error(ret, null);
- return values;
- }
+ var names = new List<string>();
- /**
- * Retrieves an array of strings containing all the value names.
- *
- * @return all value names.
- */
- public unsafe String[] GetValueNames()
- {
- CheckPermission(RegistryInternalCheck.CheckKeyReadPermission, null, false, RegistryKeyPermissionCheck.Default);
- EnsureNotDisposed();
+ // Names in the registry aren't usually very long, although they can go to as large
+ // as 16383 characters (MaxValueLength).
+ //
+ // Every call to RegEnumValue will allocate another buffer to get the data from
+ // NtEnumerateValueKey before copying it back out to our passed in buffer. This can
+ // add up quickly- we'll try to keep the memory pressure low and grow the buffer
+ // only if needed.
- int values = InternalValueCount();
- String[] names = new String[values];
+ char[] name = ArrayPool<char>.Shared.Rent(100);
- if (values > 0)
+ try
{
- char[] name = new char[MaxValueLength + 1];
- int namelen;
-
- fixed (char* namePtr = &name[0])
+ int result;
+ int nameLength = name.Length;
+
+ while ((result = Win32Native.RegEnumValue(
+ hkey,
+ names.Count,
+ name,
+ ref nameLength,
+ IntPtr.Zero,
+ null,
+ null,
+ null)) != Interop.Errors.ERROR_NO_MORE_ITEMS)
{
- for (int i = 0; i < values; i++)
+ switch (result)
{
- namelen = name.Length;
-
- int ret = Win32Native.RegEnumValue(hkey,
- i,
- namePtr,
- ref namelen,
- IntPtr.Zero,
- null,
- null,
- null);
-
- if (ret != 0)
- {
- // ignore ERROR_MORE_DATA if we're querying HKEY_PERFORMANCE_DATA
- if (!(IsPerfDataKey() && ret == Win32Native.ERROR_MORE_DATA))
- Win32Error(ret, null);
- }
-
- names[i] = new String(namePtr);
+ // The size is only ever reported back correctly in the case
+ // of ERROR_SUCCESS. It will almost always be changed, however.
+ case Interop.Errors.ERROR_SUCCESS:
+ names.Add(new string(name, 0, nameLength));
+ break;
+ case Interop.Errors.ERROR_MORE_DATA:
+ if (IsPerfDataKey())
+ {
+ // Enumerating the values for Perf keys always returns
+ // ERROR_MORE_DATA, but has a valid name. Buffer does need
+ // to be big enough however. 8 characters is the largest
+ // known name. The size isn't returned, but the string is
+ // null terminated.
+ fixed (char* c = &name[0])
+ {
+ names.Add(new string(c));
+ }
+ }
+ else
+ {
+ char[] oldName = name;
+ int oldLength = oldName.Length;
+ name = null;
+ ArrayPool<char>.Shared.Return(oldName);
+ name = ArrayPool<char>.Shared.Rent(checked(oldLength * 2));
+ }
+ break;
+ default:
+ // Throw the error
+ Win32Error(result, null);
+ break;
}
+
+ // Always set the name length back to the buffer size
+ nameLength = name.Length;
}
}
+ finally
+ {
+ if (name != null)
+ ArrayPool<char>.Shared.Return(name);
+ }
- return names;
+ return names.ToArray();
}
/**
*/
public Object GetValue(String name)
{
- CheckPermission(RegistryInternalCheck.CheckValueReadPermission, name, false, RegistryKeyPermissionCheck.Default);
return InternalGetValue(name, null, false, true);
}
*/
public Object GetValue(String name, Object defaultValue)
{
- CheckPermission(RegistryInternalCheck.CheckValueReadPermission, name, false, RegistryKeyPermissionCheck.Default);
return InternalGetValue(name, defaultValue, false, true);
}
throw new ArgumentException(SR.Format(SR.Arg_EnumIllegalVal, (int)options), nameof(options));
}
bool doNotExpand = (options == RegistryValueOptions.DoNotExpandEnvironmentNames);
- CheckPermission(RegistryInternalCheck.CheckValueReadPermission, name, false, RegistryKeyPermissionCheck.Default);
return InternalGetValue(name, defaultValue, doNotExpand, true);
}
EnsureWriteable();
- if (!remoteKey && ContainsRegistryValue(name))
- { // Existing key
- CheckPermission(RegistryInternalCheck.CheckValueWritePermission, name, false, RegistryKeyPermissionCheck.Default);
- }
- else
- { // Creating a new value
- CheckPermission(RegistryInternalCheck.CheckValueCreatePermission, name, false, RegistryKeyPermissionCheck.Default);
- }
-
if (valueKind == RegistryValueKind.Unknown)
{
// this is to maintain compatibility with the old way of autodetecting the type.
}
}
- private void CheckPermission(RegistryInternalCheck check, string item, bool subKeyWritable, RegistryKeyPermissionCheck subKeyCheck)
- {
- // TODO: Cleanup
- }
-
private bool ContainsRegistryValue(string name)
{
int type = 0;
[DllImport(ADVAPI32, CharSet = CharSet.Auto, BestFitMapping = false)]
internal unsafe static extern int RegEnumKeyEx(SafeRegistryHandle hKey, int dwIndex,
- char* lpName, ref int lpcbName, int[] lpReserved,
+ char[] lpName, ref int lpcbName, int[] lpReserved,
[Out]StringBuilder lpClass, int[] lpcbClass,
long[] lpftLastWriteTime);
[DllImport(ADVAPI32, CharSet = CharSet.Auto, BestFitMapping = false)]
internal unsafe static extern int RegEnumValue(SafeRegistryHandle hKey, int dwIndex,
- char* lpValueName, ref int lpcbValueName,
+ char[] lpValueName, ref int lpcbValueName,
IntPtr lpReserved_MustBeZero, int[] lpType, byte[] lpData,
int[] lpcbData);
#else
private const int BCRYPT_USE_SYSTEM_PREFERRED_RNG = 0x00000002;
#endif
+
+ internal const byte VER_GREATER_EQUAL = 0x3;
+ internal const uint VER_MAJORVERSION = 0x0000002;
+ internal const uint VER_MINORVERSION = 0x0000001;
+ internal const uint VER_SERVICEPACKMAJOR = 0x0000020;
+ internal const uint VER_SERVICEPACKMINOR = 0x0000010;
+ [DllImport("kernel32.dll")]
+ internal static extern bool VerifyVersionInfoW([In, Out] OSVERSIONINFOEX lpVersionInfo, uint dwTypeMask, ulong dwlConditionMask);
+ [DllImport("kernel32.dll")]
+ internal static extern ulong VerSetConditionMask(ulong dwlConditionMask, uint dwTypeBitMask, byte dwConditionMask);
}
}
// Constants from fusionsetup.h.
private const string LOADER_OPTIMIZATION = "LOADER_OPTIMIZATION";
- private const string CONFIGURATION_EXTENSION = ".config";
private const string ACTAG_APP_BASE_URL = "APPBASE";
else
_AppDomainInitializer = null;
- _ConfigurationBytes = copy.GetConfigurationBytes();
+ _ConfigurationBytes = null;
#if FEATURE_COMINTEROP
_DisableInterfaceCache = copy._DisableInterfaceCache;
#endif // FEATURE_COMINTEROP
else
ApplicationBase = appBase;
}
- ConfigurationFile = ApplicationName + AppDomainSetup.ConfigurationExtension;
}
internal string[] Value
}
}
- internal String GetUnsecureApplicationBase()
- {
- return Value[(int)LoaderInformation.ApplicationBaseValue];
- }
-
public string AppDomainManagerAssembly
{
get { return _AppDomainManagerAssembly; }
[Pure]
get
{
- return VerifyDir(GetUnsecureApplicationBase(), false);
+ return Value[(int)LoaderInformation.ApplicationBaseValue];
}
set
{
- Value[(int)LoaderInformation.ApplicationBaseValue] = NormalizePath(value, false);
+ Value[(int)LoaderInformation.ApplicationBaseValue] = (value == null || value.Length == 0)?null:Path.GetFullPath(value);
}
}
-
- private String NormalizePath(String path, bool useAppBase)
- {
- if (path == null)
- return null;
-
- // If we add very long file name support ("\\?\") to the Path class then this is unnecesary,
- // but we do not plan on doing this for now.
-
- // Long path checks can be quirked, and as loading default quirks too early in the setup of an AppDomain is risky
- // we'll avoid checking path lengths- we'll still fail at MAX_PATH later if we're !useAppBase when we call Path's
- // NormalizePath.
- if (!useAppBase)
- path = Security.Util.URLString.PreProcessForExtendedPathRemoval(
- checkPathLength: false,
- url: path,
- isFileUrl: false);
-
-
- int len = path.Length;
- if (len == 0)
- return null;
-
-#if !PLATFORM_UNIX
- bool UNCpath = false;
-#endif // !PLATFORM_UNIX
-
- if ((len > 7) &&
- (String.Compare(path, 0, "file:", 0, 5, StringComparison.OrdinalIgnoreCase) == 0))
- {
- int trim;
-
- if (path[6] == '\\')
- {
- if ((path[7] == '\\') || (path[7] == '/'))
- {
- // Don't allow "file:\\\\", because we can't tell the difference
- // with it for "file:\\" + "\\server" and "file:\\\" + "\localpath"
- if ((len > 8) &&
- ((path[8] == '\\') || (path[8] == '/')))
- throw new ArgumentException(SR.Argument_InvalidPathChars);
-
- // file:\\\ means local path
- else
-#if !PLATFORM_UNIX
- trim = 8;
-#else
- // For Unix platform, trim the first 7 characters only.
- // Trimming the first 8 characters will cause
- // the root path separator to be trimmed away,
- // and the absolute local path becomes a relative local path.
- trim = 7;
-#endif // !PLATFORM_UNIX
- }
-
- // file:\\ means remote server
- else
- {
- trim = 5;
-#if !PLATFORM_UNIX
- UNCpath = true;
-#endif // !PLATFORM_UNIX
- }
- }
-
- // local path
- else if (path[7] == '/')
-#if !PLATFORM_UNIX
- trim = 8;
-#else
- // For Unix platform, trim the first 7 characters only.
- // Trimming the first 8 characters will cause
- // the root path separator to be trimmed away,
- // and the absolute local path becomes a relative local path.
- trim = 7;
-#endif // !PLATFORM_UNIX
-
- // remote
- else
- {
- // file://\\remote
- if ((len > 8) && (path[7] == '\\') && (path[8] == '\\'))
- trim = 7;
- else
- { // file://remote
- trim = 5;
-#if !PLATFORM_UNIX
- // Create valid UNC path by changing
- // all occurences of '/' to '\\' in path
- System.Text.StringBuilder winPathBuilder =
- new System.Text.StringBuilder(len);
- for (int i = 0; i < len; i++)
- {
- char c = path[i];
- if (c == '/')
- winPathBuilder.Append('\\');
- else
- winPathBuilder.Append(c);
- }
- path = winPathBuilder.ToString();
-#endif // !PLATFORM_UNIX
- }
-#if !PLATFORM_UNIX
- UNCpath = true;
-#endif // !PLATFORM_UNIX
- }
-
- path = path.Substring(trim);
- len -= trim;
- }
-
-#if !PLATFORM_UNIX
- bool localPath;
-
- // UNC
- if (UNCpath ||
- ((len > 1) &&
- ((path[0] == '/') || (path[0] == '\\')) &&
- ((path[1] == '/') || (path[1] == '\\'))))
- localPath = false;
-
- else
- {
- int colon = path.IndexOf(':') + 1;
-
- // protocol other than file:
- if ((colon != 0) &&
- (len > colon + 1) &&
- ((path[colon] == '/') || (path[colon] == '\\')) &&
- ((path[colon + 1] == '/') || (path[colon + 1] == '\\')))
- localPath = false;
-
- else
- localPath = true;
- }
-
- if (localPath)
-#else
- if ( (len == 1) ||
- ( (path[0] != '/') && (path[0] != '\\') ) )
-#endif // !PLATFORM_UNIX
- {
- if (useAppBase &&
- ((len == 1) || (path[1] != ':')))
- {
- String appBase = Value[(int)LoaderInformation.ApplicationBaseValue];
-
- if ((appBase == null) || (appBase.Length == 0))
- throw new MemberAccessException(SR.AppDomain_AppBaseNotSet);
-
- StringBuilder result = StringBuilderCache.Acquire();
-
- bool slash = false;
- if ((path[0] == '/') || (path[0] == '\\'))
- {
- string pathRoot = AppDomain.NormalizePath(appBase, fullCheck: false);
- pathRoot = pathRoot.Substring(0, IO.PathInternal.GetRootLength(pathRoot));
-
- if (pathRoot.Length == 0)
- { // URL
- int index = appBase.IndexOf(":/", StringComparison.Ordinal);
- if (index == -1)
- index = appBase.IndexOf(":\\", StringComparison.Ordinal);
-
- // Get past last slashes of "url:http://"
- int urlLen = appBase.Length;
- for (index += 1;
- (index < urlLen) && ((appBase[index] == '/') || (appBase[index] == '\\'));
- index++) ;
-
- // Now find the next slash to get domain name
- for (; (index < urlLen) && (appBase[index] != '/') && (appBase[index] != '\\');
- index++) ;
-
- pathRoot = appBase.Substring(0, index);
- }
-
- result.Append(pathRoot);
- slash = true;
- }
- else
- result.Append(appBase);
-
- // Make sure there's a slash separator (and only one)
- int aLen = result.Length - 1;
- if ((result[aLen] != '/') &&
- (result[aLen] != '\\'))
- {
- if (!slash)
- {
-#if !PLATFORM_UNIX
- if (appBase.IndexOf(":/", StringComparison.Ordinal) == -1)
- result.Append('\\');
- else
-#endif // !PLATFORM_UNIX
- result.Append('/');
- }
- }
- else if (slash)
- result.Remove(aLen, 1);
-
- result.Append(path);
- path = StringBuilderCache.GetStringAndRelease(result);
- }
- else
- path = AppDomain.NormalizePath(path, fullCheck: true);
- }
-
- return path;
- }
-
- public String ConfigurationFile
- {
- get
- {
- return VerifyDir(Value[(int)LoaderInformation.ConfigurationFileValue], true);
- }
-
- set
- {
- Value[(int)LoaderInformation.ConfigurationFileValue] = value;
- }
- }
-
- public byte[] GetConfigurationBytes()
- {
- if (_ConfigurationBytes == null)
- return null;
-
- return (byte[])_ConfigurationBytes.Clone();
- }
-
+
// only needed by AppDomain.Setup(). Not really needed by users.
internal Dictionary<string, object> GetCompatibilityFlags()
{
}
}
- private String VerifyDir(String dir, bool normalize)
- {
- if (dir != null)
- {
- if (dir.Length == 0)
- dir = null;
- else
- {
- if (normalize)
- dir = NormalizePath(dir, true);
- }
- }
-
- return dir;
- }
-
public String ApplicationName
{
get
}
}
- internal static string ConfigurationExtension
- {
- get
- {
- return CONFIGURATION_EXTENSION;
- }
- }
-
static internal int Locate(String s)
{
if (String.IsNullOrEmpty(s))
{
public static partial class Debug
{
- private static string NewLine => "\n";
-
- private const string EnvVar_DebugWriteToStdErr = "COMPlus_DebugWriteToStdErr";
- private static readonly bool s_shouldWriteToStdErr =
- Internal.Runtime.Augments.EnvironmentAugments.GetEnvironmentVariable(EnvVar_DebugWriteToStdErr) == "1";
+ private static readonly bool s_shouldWriteToStdErr = Environment.GetEnvironmentVariable("COMPlus_DebugWriteToStdErr") == "1";
private static void ShowAssertDialog(string stackTrace, string message, string detailMessage)
{
}
else
{
- // TODO: #3708 Determine if/how to put up a dialog instead.
- var exc = new DebugAssertException(message, detailMessage, stackTrace);
- if (!s_shouldWriteToStdErr)
- {
- // We always want to print out Debug.Assert failures to stderr, even if
- // !s_shouldWriteToStdErr, so if it wouldn't have been printed in
- // WriteCore (only when s_shouldWriteToStdErr), print it here.
- WriteToStderr(exc.Message);
- }
- throw exc;
+ // In Core, we do not show a dialog.
+ // Fail in order to avoid anyone catching an exception and masking
+ // an assert failure.
+ var ex = new DebugAssertException(message, detailMessage, stackTrace);
+ Environment.FailFast(ex.Message, ex);
}
}
{
public static partial class Debug
{
- private static string NewLine => "\r\n";
-
private static void ShowAssertDialog(string stackTrace, string message, string detailMessage)
{
if (Debugger.IsAttached)
}
else
{
- // TODO: #3708 Determine if/how to put up a dialog instead.
- throw new DebugAssertException(message, detailMessage, stackTrace);
+ // In Core, we do not show a dialog.
+ // Fail in order to avoid anyone catching an exception and masking
+ // an assert failure.
+ var ex = new DebugAssertException(message, detailMessage, stackTrace);
+ Environment.FailFast(ex.Message, ex);
}
}
private static string FormatAssert(string stackTrace, string message, string detailMessage)
{
- string newLine = GetIndentString() + NewLine;
+ string newLine = GetIndentString() + Environment.NewLine;
return SR.DebugAssertBanner + newLine
+ SR.DebugAssertShortMessage + newLine
+ message + newLine
[System.Diagnostics.Conditional("DEBUG")]
public static void WriteLine(string message)
{
- Write(message + NewLine);
+ Write(message + Environment.NewLine);
}
[System.Diagnostics.Conditional("DEBUG")]
s_needIndent = false;
}
s_WriteCore(message);
- if (message.EndsWith(NewLine))
+ if (message.EndsWith(Environment.NewLine))
{
s_needIndent = true;
}
private sealed class DebugAssertException : Exception
{
internal DebugAssertException(string message, string detailMessage, string stackTrace) :
- base(message + NewLine + detailMessage + NewLine + stackTrace)
+ base(message + Environment.NewLine + detailMessage + Environment.NewLine + stackTrace)
{
}
}
#if (!ES_BUILD_STANDALONE && !PROJECTN)
// API available on OS >= Win 8 and patched Win 7.
// Disable only for FrameworkEventSource to avoid recursion inside exception handling.
- var osVer = Environment.OSVersion.Version.Major * 10 + Environment.OSVersion.Version.Minor;
- if (this.Name != "System.Diagnostics.Eventing.FrameworkEventSource" || osVer >= 62)
+ if (this.Name != "System.Diagnostics.Eventing.FrameworkEventSource" || Environment.IsWindows8OrAbove)
#endif
{
int setInformationResult;
}
}
- /*==================================OSVersion===================================
- **Action:
- **Returns:
- **Arguments:
- **Exceptions:
- ==============================================================================*/
- internal static OperatingSystem OSVersion
- {
- get
- {
- Contract.Ensures(Contract.Result<OperatingSystem>() != null);
-
- if (m_os == null)
- { // We avoid the lock since we don't care if two threads will set this at the same time.
- Microsoft.Win32.Win32Native.OSVERSIONINFO osvi = new Microsoft.Win32.Win32Native.OSVERSIONINFO();
- if (!GetVersion(osvi))
- {
- throw new InvalidOperationException(SR.InvalidOperation_GetVersion);
- }
-
- Microsoft.Win32.Win32Native.OSVERSIONINFOEX osviEx = new Microsoft.Win32.Win32Native.OSVERSIONINFOEX();
- if (!GetVersionEx(osviEx))
- throw new InvalidOperationException(SR.InvalidOperation_GetVersion);
-
-#if PLATFORM_UNIX
- PlatformID id = PlatformID.Unix;
-#else
- PlatformID id = PlatformID.Win32NT;
-#endif // PLATFORM_UNIX
-
- Version v = new Version(osvi.MajorVersion, osvi.MinorVersion, osvi.BuildNumber, (osviEx.ServicePackMajor << 16) | osviEx.ServicePackMinor);
- m_os = new OperatingSystem(id, v, osvi.CSDVersion);
- }
- Debug.Assert(m_os != null, "m_os != null");
- return m_os;
- }
- }
-
-
- internal static bool IsWindows8OrAbove
- {
- get
- {
- return true;
- }
- }
-
+#if !FEATURE_PAL
+ private static Lazy<bool> s_IsWindows8OrAbove = new Lazy<bool>(() =>
+ {
+ ulong conditionMask = Win32Native.VerSetConditionMask(0, Win32Native.VER_MAJORVERSION, Win32Native.VER_GREATER_EQUAL);
+ conditionMask = Win32Native.VerSetConditionMask(conditionMask, Win32Native.VER_MINORVERSION, Win32Native.VER_GREATER_EQUAL);
+ conditionMask = Win32Native.VerSetConditionMask(conditionMask, Win32Native.VER_SERVICEPACKMAJOR, Win32Native.VER_GREATER_EQUAL);
+ conditionMask = Win32Native.VerSetConditionMask(conditionMask, Win32Native.VER_SERVICEPACKMINOR, Win32Native.VER_GREATER_EQUAL);
+
+ // Windows 8 version is 6.2
+ var version = new Win32Native.OSVERSIONINFOEX { MajorVersion = 6, MinorVersion = 2, ServicePackMajor = 0, ServicePackMinor = 0 };
+
+ return Win32Native.VerifyVersionInfoW(version,
+ Win32Native.VER_MAJORVERSION | Win32Native.VER_MINORVERSION | Win32Native.VER_SERVICEPACKMAJOR | Win32Native.VER_SERVICEPACKMINOR,
+ conditionMask);
+ });
+ internal static bool IsWindows8OrAbove => s_IsWindows8OrAbove.Value;
+#endif
+
#if FEATURE_COMINTEROP
- internal static bool IsWinRTSupported
+ // Does the current version of Windows have Windows Runtime suppport?
+ private static Lazy<bool> s_IsWinRTSupported = new Lazy<bool>(() =>
{
- get
- {
- return true;
- }
- }
-#endif // FEATURE_COMINTEROP
-
+ return WinRTSupported();
+ });
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- internal static extern bool GetVersion(Microsoft.Win32.Win32Native.OSVERSIONINFO osVer);
+ internal static bool IsWinRTSupported => s_IsWinRTSupported.Value;
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- internal static extern bool GetVersionEx(Microsoft.Win32.Win32Native.OSVERSIONINFOEX osVer);
+ [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
+ [SuppressUnmanagedCodeSecurity]
+ [return: MarshalAs(UnmanagedType.Bool)]
+ private static extern bool WinRTSupported();
+#endif // FEATURE_COMINTEROP
/*==================================StackTrace==================================
return ToString(format, null);
}
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
private static char HexToChar(int a)
{
a = a & 0xf;
return (char)((a > 9) ? a - 10 + 0x61 : a + 0x30);
}
- unsafe private static int HexsToChars(char* guidChars, int offset, int a, int b)
+ unsafe private static int HexsToChars(char* guidChars, int a, int b)
{
- return HexsToChars(guidChars, offset, a, b, false);
+ guidChars[0] = HexToChar(a >> 4);
+ guidChars[1] = HexToChar(a);
+
+ guidChars[2] = HexToChar(b >> 4);
+ guidChars[3] = HexToChar(b);
+
+ return 4;
}
- unsafe private static int HexsToChars(char* guidChars, int offset, int a, int b, bool hex)
+ unsafe private static int HexsToCharsHexOutput(char* guidChars, int a, int b)
{
- if (hex)
- {
- guidChars[offset++] = '0';
- guidChars[offset++] = 'x';
- }
- guidChars[offset++] = HexToChar(a >> 4);
- guidChars[offset++] = HexToChar(a);
- if (hex)
- {
- guidChars[offset++] = ',';
- guidChars[offset++] = '0';
- guidChars[offset++] = 'x';
- }
- guidChars[offset++] = HexToChar(b >> 4);
- guidChars[offset++] = HexToChar(b);
- return offset;
+ guidChars[0] = '0';
+ guidChars[1] = 'x';
+
+ guidChars[2] = HexToChar(a >> 4);
+ guidChars[3] = HexToChar(a);
+
+ guidChars[4] = ',';
+ guidChars[5] = '0';
+ guidChars[6] = 'x';
+
+ guidChars[7] = HexToChar(b >> 4);
+ guidChars[8] = HexToChar(b);
+
+ return 9;
}
// IFormattable interface
// {0xdddddddd,0xdddd,0xdddd,{0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd}}
guidChars[offset++] = '0';
guidChars[offset++] = 'x';
- offset = HexsToChars(guidChars, offset, _a >> 24, _a >> 16);
- offset = HexsToChars(guidChars, offset, _a >> 8, _a);
+ offset += HexsToChars(guidChars + offset, _a >> 24, _a >> 16);
+ offset += HexsToChars(guidChars + offset, _a >> 8, _a);
guidChars[offset++] = ',';
guidChars[offset++] = '0';
guidChars[offset++] = 'x';
- offset = HexsToChars(guidChars, offset, _b >> 8, _b);
+ offset += HexsToChars(guidChars + offset, _b >> 8, _b);
guidChars[offset++] = ',';
guidChars[offset++] = '0';
guidChars[offset++] = 'x';
- offset = HexsToChars(guidChars, offset, _c >> 8, _c);
+ offset += HexsToChars(guidChars + offset, _c >> 8, _c);
guidChars[offset++] = ',';
guidChars[offset++] = '{';
- offset = HexsToChars(guidChars, offset, _d, _e, true);
+ offset += HexsToCharsHexOutput(guidChars + offset, _d, _e);
guidChars[offset++] = ',';
- offset = HexsToChars(guidChars, offset, _f, _g, true);
+ offset += HexsToCharsHexOutput(guidChars + offset, _f, _g);
guidChars[offset++] = ',';
- offset = HexsToChars(guidChars, offset, _h, _i, true);
+ offset += HexsToCharsHexOutput(guidChars + offset, _h, _i);
guidChars[offset++] = ',';
- offset = HexsToChars(guidChars, offset, _j, _k, true);
+ offset += HexsToCharsHexOutput(guidChars + offset, _j, _k);
guidChars[offset++] = '}';
}
else
{
// [{|(]dddddddd[-]dddd[-]dddd[-]dddd[-]dddddddddddd[}|)]
- offset = HexsToChars(guidChars, offset, _a >> 24, _a >> 16);
- offset = HexsToChars(guidChars, offset, _a >> 8, _a);
+ offset += HexsToChars(guidChars + offset, _a >> 24, _a >> 16);
+ offset += HexsToChars(guidChars + offset, _a >> 8, _a);
if (dash) guidChars[offset++] = '-';
- offset = HexsToChars(guidChars, offset, _b >> 8, _b);
+ offset += HexsToChars(guidChars + offset, _b >> 8, _b);
if (dash) guidChars[offset++] = '-';
- offset = HexsToChars(guidChars, offset, _c >> 8, _c);
+ offset += HexsToChars(guidChars + offset, _c >> 8, _c);
if (dash) guidChars[offset++] = '-';
- offset = HexsToChars(guidChars, offset, _d, _e);
+ offset += HexsToChars(guidChars + offset, _d, _e);
if (dash) guidChars[offset++] = '-';
- offset = HexsToChars(guidChars, offset, _f, _g);
- offset = HexsToChars(guidChars, offset, _h, _i);
- offset = HexsToChars(guidChars, offset, _j, _k);
+ offset += HexsToChars(guidChars + offset, _f, _g);
+ offset += HexsToChars(guidChars + offset, _h, _i);
+ offset += HexsToChars(guidChars + offset, _j, _k);
}
}
}
namespace System.Runtime.Serialization
{
+ // This class duplicates a class on CoreFX. We are keeping it here -- just this one method --
+ // as it was widely invoked by reflection to workaround it being missing in .NET Core 1.0
internal static class FormatterServices
{
// Gets a new instance of the object. The entire object is initalized to 0 and no
[MethodImplAttribute(MethodImplOptions.InternalCall)]
private static extern Object nativeGetUninitializedObject(RuntimeType type);
- private static Binder s_binder = Type.DefaultBinder;
-
- /*============================LoadAssemblyFromString============================
- **Action: Loads an assembly from a given string. The current assembly loading story
- ** is quite confusing. If the assembly is in the fusion cache, we can load it
- ** using the stringized-name which we transmitted over the wire. If that fails,
- ** we try for a lookup of the assembly using the simple name which is the first
- ** part of the assembly name. If we can't find it that way, we'll return null
- ** as our failure result.
- **Returns: The loaded assembly or null if it can't be found.
- **Arguments: assemblyName -- The stringized assembly name.
- **Exceptions: None
- ==============================================================================*/
- internal static Assembly LoadAssemblyFromString(String assemblyName)
- {
- //
- // Try using the stringized assembly name to load from the fusion cache.
- //
- BCLDebug.Trace("SER", "[LoadAssemblyFromString]Looking for assembly: ", assemblyName);
- Assembly found = Assembly.Load(assemblyName);
- return found;
- }
}
}
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-// URLString
-//
-//
-// Implementation of membership condition for zones
-//
-
-namespace System.Security.Util
-{
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Runtime.CompilerServices;
- using System.Runtime.InteropServices;
- using System.Runtime.Versioning;
- using System.Runtime.Serialization;
- using System.Globalization;
- using System.Text;
- using System.IO;
- using System.Diagnostics.Contracts;
-
- internal static class URLString
- {
- internal static string PreProcessForExtendedPathRemoval(bool checkPathLength, string url, bool isFileUrl)
- {
- bool isUncShare = false;
- return PreProcessForExtendedPathRemoval(checkPathLength: checkPathLength, url: url, isFileUrl: isFileUrl, isUncShare: ref isUncShare);
- }
-
- // Keeping this signature to avoid reflection breaks
- private static string PreProcessForExtendedPathRemoval(string url, bool isFileUrl, ref bool isUncShare)
- {
- return PreProcessForExtendedPathRemoval(checkPathLength: true, url: url, isFileUrl: isFileUrl, isUncShare: ref isUncShare);
- }
-
- private static string PreProcessForExtendedPathRemoval(bool checkPathLength, string url, bool isFileUrl, ref bool isUncShare)
- {
- // This is the modified URL that we will return
- StringBuilder modifiedUrl = new StringBuilder(url);
-
- // ITEM 1 - remove extended path characters.
- {
- // Keep track of where we are in both the comparison and altered strings.
- int curCmpIdx = 0;
- int curModIdx = 0;
-
- // If all the '\' have already been converted to '/', just check for //?/ or //./
- if ((url.Length - curCmpIdx) >= 4 &&
- (String.Compare(url, curCmpIdx, "//?/", 0, 4, StringComparison.OrdinalIgnoreCase) == 0 ||
- String.Compare(url, curCmpIdx, "//./", 0, 4, StringComparison.OrdinalIgnoreCase) == 0))
- {
- modifiedUrl.Remove(curModIdx, 4);
- curCmpIdx += 4;
- }
- else
- {
- if (isFileUrl)
- {
- // We need to handle an indefinite number of leading front slashes for file URLs since we could
- // get something like:
- // file://\\?\
- // file:/\\?\
- // file:\\?\
- // etc...
- while (url[curCmpIdx] == '/')
- {
- curCmpIdx++;
- curModIdx++;
- }
- }
-
- // Remove the extended path characters
- if ((url.Length - curCmpIdx) >= 4 &&
- (String.Compare(url, curCmpIdx, "\\\\?\\", 0, 4, StringComparison.OrdinalIgnoreCase) == 0 ||
- String.Compare(url, curCmpIdx, "\\\\?/", 0, 4, StringComparison.OrdinalIgnoreCase) == 0 ||
- String.Compare(url, curCmpIdx, "\\\\.\\", 0, 4, StringComparison.OrdinalIgnoreCase) == 0 ||
- String.Compare(url, curCmpIdx, "\\\\./", 0, 4, StringComparison.OrdinalIgnoreCase) == 0))
- {
- modifiedUrl.Remove(curModIdx, 4);
- curCmpIdx += 4;
- }
- }
- }
-
- // ITEM 2 - convert all slashes to forward slashes, and strip leading slashes.
- if (isFileUrl)
- {
- int slashCount = 0;
- bool seenFirstBackslash = false;
-
- while (slashCount < modifiedUrl.Length && (modifiedUrl[slashCount] == '/' || modifiedUrl[slashCount] == '\\'))
- {
- // Look for sets of consecutive backslashes. We can't just look for these at the start
- // of the string, since file:// might come first. Instead, once we see the first \, look
- // for a second one following it.
- if (!seenFirstBackslash && modifiedUrl[slashCount] == '\\')
- {
- seenFirstBackslash = true;
- if (slashCount + 1 < modifiedUrl.Length && modifiedUrl[slashCount + 1] == '\\')
- isUncShare = true;
- }
-
- slashCount++;
- }
-
- modifiedUrl.Remove(0, slashCount);
- modifiedUrl.Replace('\\', '/');
- }
-
- // ITEM 3 - If the path is greater than or equal (due to terminating NULL in windows) MAX_PATH, we throw.
- if (checkPathLength)
- {
- // This needs to be a separate method to avoid hitting the static constructor on AppContextSwitches
- CheckPathTooLong(modifiedUrl);
- }
-
- // Create the result string from the StringBuilder
- return modifiedUrl.ToString();
- }
-
- [MethodImpl(MethodImplOptions.NoInlining)]
- private static void CheckPathTooLong(StringBuilder path)
- {
- if (path.Length >= (
-#if PLATFORM_UNIX
- Interop.Sys.MaxPath))
-#else
- PathInternal.MaxLongPath))
-#endif
- {
- throw new PathTooLongException(SR.IO_PathTooLong);
- }
- }
- }
-}
typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX;
#endif
-PALIMPORT
-BOOL
-PALAPI
-GetVersionExW(
- IN OUT LPOSVERSIONINFOW lpVersionInformation);
-
-#ifdef UNICODE
-#define GetVersionEx GetVersionExW
-#else
-#define GetVersionEx GetVersionExA
-#endif
-
#define IMAGE_FILE_MACHINE_I386 0x014c
#define IMAGE_FILE_MACHINE_ARM64 0xAA64 // ARM64 Little-Endian
PALIMPORT
BOOL
PALAPI
-GetVersionExA(
- IN OUT LPOSVERSIONINFOA lpVersionInformation);
-
-PALIMPORT
-BOOL
-PALAPI
RemoveDirectoryA(
IN LPCSTR lpPathName);
misc/sysinfo.cpp
misc/time.cpp
misc/utils.cpp
- misc/version.cpp
objmgr/palobjbase.cpp
objmgr/shmobject.cpp
objmgr/shmobjectmanager.cpp
LEAF_ENTRY ThrowExceptionFromContextInternal, _TEXT
push ebp
mov ecx, [esp + 12] // ecx: PAL_SEHException * (first argument for ThrowExceptionHelper)
- mov ebx, [esp + 8] // ebx: CONTEXT *
+ mov eax, [esp + 8] // ebx: CONTEXT *
- mov ebp, [ebx + CONTEXT_Ebp]
- mov esp, [ebx + CONTEXT_ResumeEsp]
+ mov ebp, [eax + CONTEXT_Ebp]
+ mov esp, [eax + CONTEXT_ResumeEsp]
+ mov ebx, [eax + CONTEXT_Ebx]
+ mov esi, [eax + CONTEXT_Esi]
+ mov edi, [eax + CONTEXT_Edi]
// The ESP is re-initialized as the target frame's value, so the current function's
// CFA is now right at the ESP.
.cfi_restore ebp
// Store return address to the stack
- mov ebx, [ebx + CONTEXT_Eip]
- push ebx
+ mov eax, [eax + CONTEXT_Eip]
+ push eax
jmp EXTERNAL_C_FUNC(ThrowExceptionHelper)
+
LEAF_END ThrowExceptionFromContextInternal, _TEXT
}
else if (size == 0)
{
- // handle error in GetEnvironmentVariableA
+ // If size is 0, it either means GetEnvironmentVariableA failed, or that
+ // it succeeded and the value of the variable is empty. Check GetLastError
+ // to determine which. If the call failed, we won't touch the buffer.
+ if (GetLastError() == ERROR_SUCCESS)
+ {
+ *lpBuffer = '\0';
+ }
}
else
{
{ ERROR_SEM_TIMEOUT, W("The semaphore timeout period has expired.\n") },
{ ERROR_INSUFFICIENT_BUFFER, W("The data area passed to a system call is too small.\n") },
{ ERROR_INVALID_NAME, W("The filename, directory name, or volume label syntax is incorrect.\n") },
- { ERROR_MOD_NOT_FOUND, W("The specified module could not be found.\n") },
+ { ERROR_MOD_NOT_FOUND, W("The specified module or one of its dependencies could not be found.\n") },
{ ERROR_PROC_NOT_FOUND, W("The specified procedure could not be found.\n") },
{ ERROR_WAIT_NO_CHILDREN, W("There are no child processes to wait for.\n") },
{ ERROR_NEGATIVE_SEEK, W("An attempt was made to move the file pointer before the beginning of the file.\n") },
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*++
-
-
-
-Module Name:
-
- version.c
-
-Abstract:
-
- Implementation of functions for getting platform.OS versions.
-
-Revision History:
-
-
-
---*/
-
-#include "pal/palinternal.h"
-#include "pal/dbgmsg.h"
-
-SET_DEFAULT_DEBUG_CHANNEL(MISC);
-
-/*++
-Function:
- GetVersionExA
-
-
-
-GetVersionEx
-
-The GetVersionEx function obtains extended information about the
-version of the operating system that is currently running.
-
-Parameters
-
-lpVersionInfo
- [in/out] Pointer to an OSVERSIONINFO data structure that the
- function fills with operating system version information.
-
- Before calling the GetVersionEx function, set the
- dwOSVersionInfoSize member of the OSVERSIONINFO data structure
- to sizeof(OSVERSIONINFO).
-
-Return Values
-
-If the function succeeds, the return value is a nonzero value.
-
-If the function fails, the return value is zero. To get extended error
-information, call GetLastError. The function fails if you specify an
-invalid value for the dwOSVersionInfoSize member of the OSVERSIONINFO
-structure.
-
---*/
-BOOL
-PALAPI
-GetVersionExA(
- IN OUT LPOSVERSIONINFOA lpVersionInformation)
-{
- BOOL bRet = TRUE;
- PERF_ENTRY(GetVersionExA);
- ENTRY("GetVersionExA (lpVersionInformation=%p)\n", lpVersionInformation);
-
- if (lpVersionInformation->dwOSVersionInfoSize == sizeof(OSVERSIONINFOA))
- {
- lpVersionInformation->dwMajorVersion = 5; /* same as WIN2000 */
- lpVersionInformation->dwMinorVersion = 0; /* same as WIN2000 */
- lpVersionInformation->dwBuildNumber = 0;
- lpVersionInformation->dwPlatformId = VER_PLATFORM_UNIX;
- lpVersionInformation->szCSDVersion[0] = '\0'; /* no service pack */
- }
- else
- {
- SetLastError(ERROR_INVALID_PARAMETER);
- bRet = FALSE;
- }
- LOGEXIT("GetVersionExA returning BOOL %d\n", bRet);
- PERF_EXIT(GetVersionExA);
- return bRet;
-}
-
-
-/*++
-Function:
- GetVersionExW
-
-See GetVersionExA
---*/
-BOOL
-PALAPI
-GetVersionExW(
- IN OUT LPOSVERSIONINFOW lpVersionInformation)
-{
- BOOL bRet = TRUE;
-
- PERF_ENTRY(GetVersionExW);
- ENTRY("GetVersionExW (lpVersionInformation=%p)\n", lpVersionInformation);
-
- if (lpVersionInformation->dwOSVersionInfoSize == sizeof(OSVERSIONINFOW))
- {
- lpVersionInformation->dwMajorVersion = 5; /* same as WIN2000 */
- lpVersionInformation->dwMinorVersion = 0; /* same as WIN2000 */
- lpVersionInformation->dwBuildNumber = 0;
- lpVersionInformation->dwPlatformId = VER_PLATFORM_UNIX;
- lpVersionInformation->szCSDVersion[0] = '\0'; /* no service pack */
- }
- else
- {
- SetLastError(ERROR_INVALID_PARAMETER);
- bRet = FALSE;
- }
- LOGEXIT("GetVersionExW returning BOOL %d\n", bRet);
- PERF_EXIT(GetVersionExW);
- return bRet;
-}
+++ /dev/null
-cmake_minimum_required(VERSION 2.8.12.2)
-
-add_subdirectory(test1)
-
+++ /dev/null
-cmake_minimum_required(VERSION 2.8.12.2)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(SOURCES
- test.cpp
-)
-
-add_executable(paltest_getversionexa_test1
- ${SOURCES}
-)
-
-add_dependencies(paltest_getversionexa_test1 coreclrpal)
-
-target_link_libraries(paltest_getversionexa_test1
- ${COMMON_TEST_LIBRARIES}
-)
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*============================================================
-**
-** Source : test.c
-**
-** Purpose: Test for GetVersionExA() function
-**
-**
-**=========================================================*/
-
-#include <palsuite.h>
-
-int __cdecl main(int argc, char *argv[]) {
-
- OSVERSIONINFO TheVersionInfo;
- OSVERSIONINFO* pVersionInfo = &TheVersionInfo;
-
- /*
- * Initialize the PAL and return FAILURE if this fails
- */
-
- if(0 != (PAL_Initialize(argc, argv)))
- {
- return FAIL;
- }
-
-
- /* This needs to be done before using GetVersionEx */
- pVersionInfo->dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
-
- /* If GetVersionEx fails, then the test fails */
- if(GetVersionEx(pVersionInfo) == 0)
- {
- Fail("ERROR: The GetVersionEx function returned 0, which indicates "
- "failure.");
- }
-
- /* These values are fixed, ensure they're set properly */
- if(pVersionInfo->dwMajorVersion != 5)
- {
- Fail("ERROR: The fixed value of dwMajorVersion shoud be 5, "
- "but is really %d.",pVersionInfo->dwMajorVersion);
- }
-
- /* The minor version values for Win2k and XP are different
- for Win2k minor version equals 0 and for XP minor version
- equals 1. Both values are excepted here. */
- if((pVersionInfo->dwMinorVersion != 0) &&
- (pVersionInfo->dwMinorVersion != 1))
- {
- Fail("ERROR: The fixed value of dwMinorVersion shoud be 0 or 1, "
- "but is really %d.",pVersionInfo->dwMinorVersion);
- }
- if(pVersionInfo->dwBuildNumber_PAL_Undefined < 0)
- {
- Fail("ERROR: The value of dwBuildNumber shoud be at least 0, but "
- "is really %d.",pVersionInfo->dwBuildNumber_PAL_Undefined);
- }
-
-#if !WIN32
- /* Under BSD, the PlatformID should be UNIX and the Service Pack
- version should be set to "".
- */
-
- if(pVersionInfo->dwPlatformId != VER_PLATFORM_UNIX ||
- pVersionInfo->szCSDVersion_PAL_Undefined[0] != 0)
- {
- Fail("ERROR: The dwPlatformId should be %d but is really %d. And the "
- "szCSDVerion should be NULL.",
- VER_PLATFORM_UNIX,pVersionInfo->dwPlatformId);
- }
-#endif
-
-
- PAL_Terminate();
- return PASS;
-}
-
-
-
+++ /dev/null
-# Licensed to the .NET Foundation under one or more agreements.
-# The .NET Foundation licenses this file to you under the MIT license.
-# See the LICENSE file in the project root for more information.
-
-Version = 1.0
-Section = Miscellaneous
-Function = GetVersionExA
-Name = Positive Test for GetVersionExA
-TYPE = DEFAULT
-EXE1 = test
-Description
-= Test that all the values in the OSVERSION structure are set properly
-= for the current environment.
-
-
-
+++ /dev/null
-cmake_minimum_required(VERSION 2.8.12.2)
-
-add_subdirectory(test1)
-
+++ /dev/null
-cmake_minimum_required(VERSION 2.8.12.2)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(SOURCES
- test.cpp
-)
-
-add_executable(paltest_getversionexw_test1
- ${SOURCES}
-)
-
-add_dependencies(paltest_getversionexw_test1 coreclrpal)
-
-target_link_libraries(paltest_getversionexw_test1
- ${COMMON_TEST_LIBRARIES}
-)
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*============================================================
-**
-** Source : test.c
-**
-** Purpose: Test for GetVersionExW() function
-**
-**
-**=========================================================*/
-
-#define UNICODE
-
-#include <palsuite.h>
-
-int __cdecl main(int argc, char *argv[])
-{
-
- OSVERSIONINFO TheVersionInfo;
- OSVERSIONINFO* pVersionInfo = &TheVersionInfo;
-
- /*
- * Initialize the PAL and return FAILURE if this fails
- */
-
- if(0 != (PAL_Initialize(argc, argv)))
- {
- return FAIL;
- }
-
- /* This needs to be done before using GetVersionEx */
- pVersionInfo->dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
-
- /* If GetVersionEx fails, then the test fails */
- if(GetVersionEx(pVersionInfo) == 0)
- {
- Fail("ERROR: The GetVersionEx function returned 0, which indicates "
- "failure.");
- }
-
- /* These values are fixed, ensure they're set properly */
- if(pVersionInfo->dwMajorVersion != 5)
- {
- Fail("ERROR: The fixed value of dwMajorVersion shoud be 5, but is "
- " really %d.",pVersionInfo->dwMajorVersion);
- }
-
- /* The minor version values for Win2k and XP are different
- for Win2k minor version equals 0 and for XP minor version
- equals 1. Both values are excepted here. */
- if((pVersionInfo->dwMinorVersion != 0) &&
- (pVersionInfo->dwMinorVersion != 1))
- {
- Fail("ERROR: The fixed value of dwMinorVersion shoud be 0 or 1, "
- "but is really %d.",pVersionInfo->dwMinorVersion);
- }
-
- if(pVersionInfo->dwBuildNumber_PAL_Undefined < 0)
- {
- Fail("ERROR: The value of dwBuildNumber shoud be at least 0, but is "
- "really %d.",pVersionInfo->dwBuildNumber_PAL_Undefined);
- }
-
-#if !WIN32
-
-
- /* Under BSD, the PlatformID should be UNIX and the Service Pack
- version should be set to "".
- */
-
- if(pVersionInfo->dwPlatformId != VER_PLATFORM_UNIX ||
- pVersionInfo->szCSDVersion_PAL_Undefined[0] != 0)
- {
- Fail("ERROR: The dwPlatformId should be %d but is really %d. And the "
- "szCSDVerion should be NULL.",VER_PLATFORM_UNIX,
- pVersionInfo->dwPlatformId);
- }
-#endif
-
-
- PAL_Terminate();
- return PASS;
-}
-
-
-
+++ /dev/null
-# Licensed to the .NET Foundation under one or more agreements.
-# The .NET Foundation licenses this file to you under the MIT license.
-# See the LICENSE file in the project root for more information.
-
-Version = 1.0
-Section = Miscellaneous
-Function = GetVersionExW
-Name = Positive Test for GetVersionExW
-TYPE = DEFAULT
-EXE1 = test
-Description
-= Test that all the values in the OSVERSION structure are set properly
-= for the current environment.
-
-
-
miscellaneous/GetDateFormatW/GetDateFormatW_neg2/paltest_getdateformatw_getdateformatw_neg2
miscellaneous/GetDateFormatW/test1/paltest_getdateformatw_test1
miscellaneous/GetUserNameW/test1/paltest_getusernamew_test1
-miscellaneous/GetVersionExA/test1/paltest_getversionexa_test1
-miscellaneous/GetVersionExW/test1/paltest_getversionexw_test1
miscellaneous/InterLockedExchangeAdd/test1/paltest_interlockedexchangeadd_test1
miscellaneous/IsBadCodePtr/test1/paltest_isbadcodeptr_test1
miscellaneous/IsBadReadPtr/test1/paltest_isbadreadptr_test1
fi
cmake_extra_defines="$cmake_extra_defines -C $CONFIG_DIR/tryrun.cmake"
cmake_extra_defines="$cmake_extra_defines -DCMAKE_TOOLCHAIN_FILE=$CONFIG_DIR/toolchain.cmake"
+ cmake_extra_defines="$cmake_extra_defines -DCLR_UNIX_CROSS_BUILD=1"
+fi
+if [ $OS == "Linux" ]; then
+ linux_id_file="/etc/os-release"
+ if [[ -n "$CROSSCOMPILE" ]]; then
+ linux_id_file="$ROOTFS_DIR/$linux_id_file"
+ fi
+ if [[ -e $linux_id_file ]]; then
+ source $linux_id_file
+ cmake_extra_defines="$cmake_extra_defines -DCLR_CMAKE_LINUX_ID=$ID"
+ fi
fi
if [ "$build_arch" == "armel" ]; then
cmake_extra_defines="$cmake_extra_defines -DARM_SOFTFP=1"
FillRegDisplay(&rd, ContextRecord);
- rd.SP = ContextRecord->ResumeEsp;
+ rd.SP = ContextRecord->Esp;
rd.PCTAddr = (UINT_PTR)&(ContextRecord->Eip);
if (ContextPointers)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
-if(WIN32)
- add_compile_options(/wd4996)
-endif(WIN32)
-
set(UTILCODE_COMMON_SOURCES
clrhost_nodependencies.cpp
ccomprc.cpp
RestoreRegMS 26, X26
RestoreRegMS 27, X27
RestoreRegMS 28, X28
+ RestoreRegMS 29, X29
Done
; Its imperative that the return value of HelperMethodFrameRestoreState is zero
; This helper enables us to call into a funclet after restoring Fp register
NESTED_ENTRY CallEHFunclet
-
- ; Using below prolog instead of PROLOG_SAVE_REG_PAIR fp,lr, #-16!
- ; is intentional. Above statement would also emit instruction to save
- ; sp in fp. If sp is saved in fp in prolog then it is not expected that fp can change in the body
- ; of method. However, this method needs to be able to change fp before calling funclet.
- ; This is required to access locals in funclet.
- PROLOG_SAVE_REG_PAIR x19,x20, #-16!
- PROLOG_SAVE_REG fp, #0
- PROLOG_SAVE_REG lr, #8
-
; On entry:
;
; X0 = throwable
; X2 = address of X19 register in CONTEXT record; used to restore the non-volatile registers of CrawlFrame
; X3 = address of the location where the SP of funclet's caller (i.e. this helper) should be saved.
;
+
+ ; Using below prolog instead of PROLOG_SAVE_REG_PAIR fp,lr, #-16!
+ ; is intentional. Above statement would also emit instruction to save
+ ; sp in fp. If sp is saved in fp in prolog then it is not expected that fp can change in the body
+ ; of method. However, this method needs to be able to change fp before calling funclet.
+ ; This is required to access locals in funclet.
+ PROLOG_SAVE_REG_PAIR_NO_FP fp,lr, #-96!
+
+ ; Spill callee saved registers
+ PROLOG_SAVE_REG_PAIR x19, x20, 16
+ PROLOG_SAVE_REG_PAIR x21, x22, 32
+ PROLOG_SAVE_REG_PAIR x23, x24, 48
+ PROLOG_SAVE_REG_PAIR x25, x26, 64
+ PROLOG_SAVE_REG_PAIR x27, x28, 80
+
; Save the SP of this function. We cannot store SP directly.
mov fp, sp
str fp, [x3]
+ ldp x19, x20, [x2, #0]
+ ldp x21, x22, [x2, #16]
+ ldp x23, x24, [x2, #32]
+ ldp x25, x26, [x2, #48]
+ ldp x27, x28, [x2, #64]
ldr fp, [x2, #80] ; offset of fp in CONTEXT relative to X19
; Invoke the funclet
blr x1
nop
- EPILOG_RESTORE_REG_PAIR fp, lr, #16!
+ EPILOG_RESTORE_REG_PAIR x19, x20, 16
+ EPILOG_RESTORE_REG_PAIR x21, x22, 32
+ EPILOG_RESTORE_REG_PAIR x23, x24, 48
+ EPILOG_RESTORE_REG_PAIR x25, x26, 64
+ EPILOG_RESTORE_REG_PAIR x27, x28, 80
+ EPILOG_RESTORE_REG_PAIR fp, lr, #96!
EPILOG_RETURN
NESTED_END CallEHFunclet
}
//
- // flags are non-optional, except processor architecture and content type
+ // flags are non-optional, except processor architecture, content type, and debuggable attribute bits
//
- DWORD dwFlagsMask = ~(afPA_FullMask | afContentType_Mask);
+ DWORD dwFlagsMask = ~(afPA_FullMask | afContentType_Mask | afDebuggableAttributeMask);
if ((pRef->m_dwFlags & dwFlagsMask) != (pDef->m_dwFlags & dwFlagsMask))
return FALSE;
#endif // ENABLE_CONTRACTS_IMPL
-
#endif // CROSSGEN_COMPILE
-
-
-//
-// GetOSVersion - Gets the real OS version bypassing the OS compatibility shim
-// Mscoree.dll resides in System32 dir and is always excluded from compat shim.
-// This function calls mscoree!shim function via mscoreei ICLRRuntimeHostInternal interface
-// to get the OS version. We do not do this PAL or coreclr..we direclty call the OS
-// in that case.
-//
-BOOL GetOSVersion(LPOSVERSIONINFO lposVer)
-{
-// Fix for warnings when building against WinBlue build 9444.0.130614-1739
-// warning C4996: 'GetVersionExW': was declared deprecated
-// externalapis\windows\winblue\sdk\inc\sysinfoapi.h(442)
-// Deprecated. Use VerifyVersionInfo* or IsWindows* macros from VersionHelpers.
-#pragma warning( disable : 4996 )
- return WszGetVersionEx(lposVer);
-#pragma warning( default : 4996 )
-}
return pUnwindInfo;
+#elif defined(_TARGET_X86_) && defined(FEATURE_PAL)
+ PTR_UNWIND_INFO pUnwindInfo(dac_cast<PTR_UNWIND_INFO>(moduleBase + RUNTIME_FUNCTION__GetUnwindInfoAddress(pRuntimeFunction)));
+
+ *pSize = ALIGN_UP(sizeof(UNWIND_INFO), sizeof(DWORD));
+
+ return pUnwindInfo;
+
#elif defined(_TARGET_ARM_)
// if this function uses packed unwind data then at least one of the two least significant bits
&fForceProfiling,
&fForceInstrument);
- OSVERSIONINFOW osInfo;
- osInfo.dwOSVersionInfoSize = sizeof(osInfo);
- if (!GetOSVersion(&osInfo))
- _ASSERTE(!"GetOSVersion failed");
-
- _ASSERTE(osInfo.dwMajorVersion < 999);
- _ASSERTE(osInfo.dwMinorVersion < 999);
- pNativeVersionInfo->wOSPlatformID = (WORD) osInfo.dwPlatformId;
+#ifndef FEATURE_PAL
+ pNativeVersionInfo->wOSPlatformID = VER_PLATFORM_WIN32_NT;
+#else
+ pNativeVersionInfo->wOSPlatformID = VER_PLATFORM_UNIX;
+#endif
// The native images should be OS-version agnostic. Do not store the actual OS version for determinism.
// pNativeVersionInfo->wOSMajorVersion = (WORD) osInfo.dwMajorVersion;
FCFuncEnd()
FCFuncStart(gEnvironmentFuncs)
- FCFuncElement("GetVersion", SystemNative::GetOSVersion)
- FCFuncElement("GetVersionEx", SystemNative::GetOSVersionEx)
FCFuncElement("get_TickCount", SystemNative::GetTickCount)
QCFuncElement("_Exit", SystemNative::Exit)
FCFuncElement("set_ExitCode", SystemNative::SetExitCode)
FCFuncElement("GetCommandLineArgsNative", SystemNative::GetCommandLineArgs)
FCFuncElement("get_CurrentProcessorNumber", SystemNative::GetCurrentProcessorNumber)
-#if defined(FEATURE_COMINTEROP) && !defined(FEATURE_CORESYSTEM)
+#if defined(FEATURE_COMINTEROP)
QCFuncElement("WinRTSupported", SystemNative::WinRTSupported)
#endif // FEATURE_COMINTEROP
FCFuncElementSig("FailFast", &gsig_SM_Str_RetVoid, SystemNative::FailFast)
// TODO Currently we assume that ESP of funclet frames is always fixed but actually it could change.
if (pCodeInfo->IsFunclet())
{
- baseSP = curESP + 12; // padding for 16byte stack alignment allocated in genFuncletProlog()
+ // Set baseSP as initial SP
+ baseSP = pContext->pCurrentContext->ResumeEsp;
+ // 16-byte stack alignment padding (allocated in genFuncletProlog)
+ baseSP += 12;
pContext->PCTAddr = baseSP;
pContext->ControlPC = *PTR_PCODE(pContext->PCTAddr);
GC_NOTRIGGER;
} CONTRACTL_END;
+#ifdef WIN64EXCEPTIONS
+ if (flags & ParentOfFuncletStackFrame)
+ {
+ LOG((LF_GCROOTS, LL_INFO100000, "Not reporting this frame because it was already reported via another funclet.\n"));
+ return true;
+ }
+#endif // WIN64EXCEPTIONS
+
GCInfoToken gcInfoToken = pCodeInfo->GetGCInfoToken();
unsigned curOffs = pCodeInfo->GetRelOffset();
_ASSERTE(*castto(table, unsigned short *)++ == 0xBABE);
#endif
+#ifdef WIN64EXCEPTIONS // funclets
+ //
+ // If we're in a funclet, we do not want to report the incoming varargs. This is
+ // taken care of by the parent method and the funclet should access those arguments
+ // by way of the parent method's stack frame.
+ //
+ if(pCodeInfo->IsFunclet())
+ {
+ return true;
+ }
+#endif // WIN64EXCEPTIONS
+
/* Are we a varargs function, if so we have to report all args
except 'this' (note that the GC tables created by the x86 jit
do not contain ANY arguments except 'this' (even if they
{
WRAPPER_NO_CONTRACT;
-#ifndef FEATURE_CORESYSTEM
- OSVERSIONINFO osVer;
- osVer.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
-
- if (GetOSVersion(&osVer) == FALSE) {
- return HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED);
- }
- else if (osVer.dwMajorVersion < ETW_SUPPORTED_MAJORVER) {
- return HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED);
- }
-
- // if running on OS < Longhorn, skip registration unless reg key is set
- // since ETW reg is expensive (in both time and working set) on older OSes
- if (osVer.dwMajorVersion < ETW_ENABLED_MAJORVER && !g_fEnableETW && !CLRConfig::GetConfigValue(CLRConfig::EXTERNAL_PreVistaETWEnabled))
- return HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED);
-
- // If running on OS >= Longhorn, skip registration if ETW is not enabled
- if (osVer.dwMajorVersion >= ETW_ENABLED_MAJORVER && !g_fEnableETW && !CLRConfig::GetConfigValue(CLRConfig::EXTERNAL_VistaAndAboveETWEnabled))
- return HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED);
-#endif
-
EventRegisterMicrosoft_Windows_DotNETRuntime();
EventRegisterMicrosoft_Windows_DotNETRuntimePrivate();
EventRegisterMicrosoft_Windows_DotNETRuntimeRundown();
#include "comcallablewrapper.h"
#endif // FEATURE_COMINTEROP
+// the method table for the WeakReference class
+extern MethodTable* pWeakReferenceMT;
+
+// The canonical method table for WeakReference<T>
+extern MethodTable* pWeakReferenceOfTCanonMT;
+
+// Finalizes a weak reference directly.
+extern void FinalizeWeakReference(Object* obj);
+
void GCToEEInterface::SuspendEE(SUSPEND_REASON reason)
{
WRAPPER_NO_CONTRACT;
// to move them to a new app domain instead of finalizing them here.
return true;
}
+
+bool GCToEEInterface::EagerFinalized(Object* obj)
+{
+ MethodTable* pMT = obj->GetGCSafeMethodTable();
+ if (pMT == pWeakReferenceMT ||
+ pMT->GetCanonicalMethodTable() == pWeakReferenceOfTCanonMT)
+ {
+ FinalizeWeakReference(obj);
+ return true;
+ }
+
+ return false;
+}
void EnableFinalization(bool foundFinalizers);
void HandleFatalError(unsigned int exitCode);
bool ShouldFinalizeObjectForUnload(AppDomain* pDomain, Object* obj);
+ bool EagerFinalized(Object* obj);
};
#endif // FEATURE_STANDALONE_GC
{
if (FindNativeInfoInILVariable(0, startNativeOffset, &locals.pVars, locals.countVars, &nativeVar) == S_OK)
{
- vars[0].m_var_type = GetTypeInfoFromTypeHandle(TypeHandle(md->GetMethodTable()), pTypeMap, method);
+ TypeHandle th = TypeHandle(md->GetMethodTable());
+ if (th.IsValueType())
+ th = th.MakePointer();
+ vars[0].m_var_type = GetTypeInfoFromTypeHandle(th, pTypeMap, method);
vars[0].m_var_name = new char[strlen("this") + 1];
strcpy(vars[0].m_var_name, "this");
vars[0].m_il_index = 0;
#endif // FEATURE_READYTORUN
+//
+// Entry stack:
+// dispatch token
+// siteAddrForRegisterIndirect (used only if this is a RegisterIndirect dispatch call)
+// return address of caller to stub
+//
+// Please see vm/i386/virtualcallstubcpu.hpp for details
+//
NESTED_ENTRY ResolveWorkerAsmStub, _TEXT, NoHandler
//
// The stub arguments are where we want to setup the TransitionBlock. We will
mov esi, esp
+ #define STACK_ALIGN_PADDING 8
+
+ sub esp, STACK_ALIGN_PADDING
push [esi + 4*4] // dispatch token
push [esi + 5*4] // siteAddrForRegisterIndirect
push esi // pTransitionBlock
// Setup up proper EBP frame now that the stub arguments can be trashed
- mov [esi + 4*4],ebx
- mov [esi + 5*4],ebp
+ mov [esi + 4*4], ebx
+ mov [esi + 5*4], ebp
lea ebp, [esi + 5*4]
// Make the call
+ CHECK_STACK_ALIGNMENT
call C_FUNC(VSD_ResolveWorker)
+ add esp, STACK_ALIGN_PADDING
+
+ #undef STACK_ALIGN_PADDING
+
// From here on, mustn't trash eax
// pop ArgumentRegisters
- pop edx
- pop ecx
+ pop edx
+ pop ecx
// pop CalleeSavedRegisters
- pop edi
- pop esi
- pop ebx
- pop ebp
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
// Now jump to the target
- jmp eax // continue on into the method
+ jmp eax // continue on into the method
NESTED_END ResolveWorkerAsmStub, _TEXT
#ifdef FEATURE_STUBS_AS_IL
CORINFO_CONTEXT_HANDLE ownerType)
{
CONTRACTL {
- SO_TOLERANT;
THROWS;
GC_TRIGGERS;
MODE_PREEMPTIVE;
pEEInfoOut->maxUncheckedOffsetForNullObject = MAX_UNCHECKED_OFFSET_FOR_NULL_OBJECT;
pEEInfoOut->targetAbi = CORINFO_CORECLR_ABI;
- OSVERSIONINFO sVerInfo;
- sVerInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
- GetOSVersion(&sVerInfo);
-
pEEInfoOut->osType = CORINFO_WINNT;
- pEEInfoOut->osMajor = sVerInfo.dwMajorVersion;
- pEEInfoOut->osMinor = sVerInfo.dwMinorVersion;
- pEEInfoOut->osBuild = sVerInfo.dwBuildNumber;
+ // hardcode OS version to 0.0.0. These fields can be removed from JITEE interface
+ pEEInfoOut->osMajor = 0;
+ pEEInfoOut->osMinor = 0;
+ pEEInfoOut->osBuild = 0;
EE_TO_JIT_TRANSITION();
}
bool fBackgroundThread = flags.IsSet(CORJIT_FLAGS::CORJIT_FLAG_MCJIT_BACKGROUND);
#endif
- // If this is the first stage of a tiered compilation progression, use min-opt, otherwise
+ // If this is the first stage of a tiered compilation progression, use tier0, otherwise
// use default compilation options
#ifdef FEATURE_TIERED_COMPILATION
if (!IsEligibleForTieredCompilation())
else
{
fStable = FALSE;
- flags.Add(CORJIT_FLAGS(CORJIT_FLAGS::CORJIT_FLAG_MIN_OPT));
+ flags.Add(CORJIT_FLAGS(CORJIT_FLAGS::CORJIT_FLAG_TIER0));
}
#endif
}
CONTRACTL_END;
-#ifdef _TARGET_AMD64_
+#if defined(_TARGET_AMD64_) || (defined(_TARGET_X86_) && defined(FEATURE_PAL))
// A normal method entry point is always 8 byte aligned, but a funclet can start at an odd address.
// Since PtrHashMap can't handle odd pointers, check for this case and return NULL.
if ((entryPoint & 0x1) != 0)
EX_TRY
{
CORJIT_FLAGS flags = CORJIT_FLAGS(CORJIT_FLAGS::CORJIT_FLAG_MCJIT_BACKGROUND);
- flags.Add(CORJIT_FLAGS(CORJIT_FLAGS::CORJIT_FLAG_SPEED_OPT));
+ flags.Add(CORJIT_FLAGS(CORJIT_FLAGS::CORJIT_FLAG_TIER1));
if (pMethod->IsDynamicMethod())
{
#endif //REDHAWK
}
+#elif defined(_TARGET_X86_) && defined(FEATURE_PAL)
+
+UINT ZapUnwindData::GetAlignment()
+{
+ return sizeof(BYTE);
+}
+
+DWORD ZapUnwindData::GetSize()
+{
+ DWORD dwSize = ZapBlob::GetSize();
+
+ return dwSize;
+}
+
+void ZapUnwindData::Save(ZapWriter * pZapWriter)
+{
+ ZapImage * pImage = ZapImage::GetImage(pZapWriter);
+
+ PVOID pData = GetData();
+ DWORD dwSize = GetBlobSize();
+
+ pZapWriter->Write(pData, dwSize);
+}
+
#elif defined(_TARGET_ARM_) || defined(_TARGET_ARM64_)
UINT ZapUnwindData::GetAlignment()
## This list file has been produced automatically. Any changes
## are subject to being overwritten when reproducing this file.
##
-## Last Updated: 27-Feb-2017 16:38:10
-## Commit: 740b64d2513c68f8455444a90f477010f71093bf
+## Last Updated: 31-Mar-2017 09:36:29
+## Commit: 2401b6ed08252d48831bfd804c3533cd0142c76c
##
[Dev10_535767.cmd_0]
RelativePath=baseservices\compilerservices\dynamicobjectproperties\Dev10_535767\Dev10_535767.cmd
Categories=Pri1;RT;EXPECTED_PASS
HostStyle=0
-[DateTimeCompare.cmd_1248]
-RelativePath=CoreMangLib\cti\system\datetime\DateTimeCompare\DateTimeCompare.cmd
-WorkingDir=CoreMangLib\cti\system\datetime\DateTimeCompare
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeCompareTo1.cmd_1249]
-RelativePath=CoreMangLib\cti\system\datetime\DateTimeCompareTo1\DateTimeCompareTo1.cmd
-WorkingDir=CoreMangLib\cti\system\datetime\DateTimeCompareTo1
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeCtor1.cmd_1250]
-RelativePath=CoreMangLib\cti\system\datetime\DateTimeCtor1\DateTimeCtor1.cmd
-WorkingDir=CoreMangLib\cti\system\datetime\DateTimeCtor1
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeCtor3.cmd_1251]
-RelativePath=CoreMangLib\cti\system\datetime\DateTimeCtor3\DateTimeCtor3.cmd
-WorkingDir=CoreMangLib\cti\system\datetime\DateTimeCtor3
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeCtor4.cmd_1252]
-RelativePath=CoreMangLib\cti\system\datetime\DateTimeCtor4\DateTimeCtor4.cmd
-WorkingDir=CoreMangLib\cti\system\datetime\DateTimeCtor4
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeCtor6.cmd_1253]
-RelativePath=CoreMangLib\cti\system\datetime\DateTimeCtor6\DateTimeCtor6.cmd
-WorkingDir=CoreMangLib\cti\system\datetime\DateTimeCtor6
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeCtor7.cmd_1254]
-RelativePath=CoreMangLib\cti\system\datetime\DateTimeCtor7\DateTimeCtor7.cmd
-WorkingDir=CoreMangLib\cti\system\datetime\DateTimeCtor7
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeDate.cmd_1255]
-RelativePath=CoreMangLib\cti\system\datetime\DateTimeDate\DateTimeDate.cmd
-WorkingDir=CoreMangLib\cti\system\datetime\DateTimeDate
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeGetHashCode.cmd_1256]
-RelativePath=CoreMangLib\cti\system\datetime\DateTimeGetHashCode\DateTimeGetHashCode.cmd
-WorkingDir=CoreMangLib\cti\system\datetime\DateTimeGetHashCode
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeHour.cmd_1257]
-RelativePath=CoreMangLib\cti\system\datetime\DateTimeHour\DateTimeHour.cmd
-WorkingDir=CoreMangLib\cti\system\datetime\DateTimeHour
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeKind.cmd_1258]
-RelativePath=CoreMangLib\cti\system\datetime\DateTimeKind\DateTimeKind.cmd
-WorkingDir=CoreMangLib\cti\system\datetime\DateTimeKind
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeMaxValue.cmd_1259]
-RelativePath=CoreMangLib\cti\system\datetime\DateTimeMaxValue\DateTimeMaxValue.cmd
-WorkingDir=CoreMangLib\cti\system\datetime\DateTimeMaxValue
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeMillisecond.cmd_1260]
-RelativePath=CoreMangLib\cti\system\datetime\DateTimeMillisecond\DateTimeMillisecond.cmd
-WorkingDir=CoreMangLib\cti\system\datetime\DateTimeMillisecond
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeMinute.cmd_1261]
-RelativePath=CoreMangLib\cti\system\datetime\DateTimeMinute\DateTimeMinute.cmd
-WorkingDir=CoreMangLib\cti\system\datetime\DateTimeMinute
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeMinValue.cmd_1262]
-RelativePath=CoreMangLib\cti\system\datetime\DateTimeMinValue\DateTimeMinValue.cmd
-WorkingDir=CoreMangLib\cti\system\datetime\DateTimeMinValue
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeNow.cmd_1263]
-RelativePath=CoreMangLib\cti\system\datetime\DateTimeNow\DateTimeNow.cmd
-WorkingDir=CoreMangLib\cti\system\datetime\DateTimeNow
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeParse1.cmd_1264]
-RelativePath=CoreMangLib\cti\system\datetime\DateTimeParse1\DateTimeParse1.cmd
-WorkingDir=CoreMangLib\cti\system\datetime\DateTimeParse1
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeParse2.cmd_1265]
-RelativePath=CoreMangLib\cti\system\datetime\DateTimeParse2\DateTimeParse2.cmd
-WorkingDir=CoreMangLib\cti\system\datetime\DateTimeParse2
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeParse3.cmd_1266]
-RelativePath=CoreMangLib\cti\system\datetime\DateTimeParse3\DateTimeParse3.cmd
-WorkingDir=CoreMangLib\cti\system\datetime\DateTimeParse3
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeParseExact1.cmd_1267]
-RelativePath=CoreMangLib\cti\system\datetime\DateTimeParseExact1\DateTimeParseExact1.cmd
-WorkingDir=CoreMangLib\cti\system\datetime\DateTimeParseExact1
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeParseExact2.cmd_1268]
-RelativePath=CoreMangLib\cti\system\datetime\DateTimeParseExact2\DateTimeParseExact2.cmd
-WorkingDir=CoreMangLib\cti\system\datetime\DateTimeParseExact2
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeParseExact3.cmd_1269]
-RelativePath=CoreMangLib\cti\system\datetime\DateTimeParseExact3\DateTimeParseExact3.cmd
-WorkingDir=CoreMangLib\cti\system\datetime\DateTimeParseExact3
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeSecond.cmd_1270]
-RelativePath=CoreMangLib\cti\system\datetime\DateTimeSecond\DateTimeSecond.cmd
-WorkingDir=CoreMangLib\cti\system\datetime\DateTimeSecond
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeSubtract1.cmd_1271]
-RelativePath=CoreMangLib\cti\system\datetime\DateTimeSubtract1\DateTimeSubtract1.cmd
-WorkingDir=CoreMangLib\cti\system\datetime\DateTimeSubtract1
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeSubtract2.cmd_1272]
-RelativePath=CoreMangLib\cti\system\datetime\DateTimeSubtract2\DateTimeSubtract2.cmd
-WorkingDir=CoreMangLib\cti\system\datetime\DateTimeSubtract2
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeTicks.cmd_1273]
-RelativePath=CoreMangLib\cti\system\datetime\DateTimeTicks\DateTimeTicks.cmd
-WorkingDir=CoreMangLib\cti\system\datetime\DateTimeTicks
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeTimeOfDay.cmd_1274]
-RelativePath=CoreMangLib\cti\system\datetime\DateTimeTimeOfDay\DateTimeTimeOfDay.cmd
-WorkingDir=CoreMangLib\cti\system\datetime\DateTimeTimeOfDay
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimetoday.cmd_1275]
-RelativePath=CoreMangLib\cti\system\datetime\DateTimetoday\DateTimetoday.cmd
-WorkingDir=CoreMangLib\cti\system\datetime\DateTimetoday
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeToFileTime.cmd_1276]
-RelativePath=CoreMangLib\cti\system\datetime\DateTimeToFileTime\DateTimeToFileTime.cmd
-WorkingDir=CoreMangLib\cti\system\datetime\DateTimeToFileTime
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeToFileTimeUtc.cmd_1277]
-RelativePath=CoreMangLib\cti\system\datetime\DateTimeToFileTimeUtc\DateTimeToFileTimeUtc.cmd
-WorkingDir=CoreMangLib\cti\system\datetime\DateTimeToFileTimeUtc
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeToLocalTime.cmd_1278]
-RelativePath=CoreMangLib\cti\system\datetime\DateTimeToLocalTime\DateTimeToLocalTime.cmd
-WorkingDir=CoreMangLib\cti\system\datetime\DateTimeToLocalTime
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeToString1.cmd_1279]
-RelativePath=CoreMangLib\cti\system\datetime\DateTimeToString1\DateTimeToString1.cmd
-WorkingDir=CoreMangLib\cti\system\datetime\DateTimeToString1
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeToString2.cmd_1280]
-RelativePath=CoreMangLib\cti\system\datetime\DateTimeToString2\DateTimeToString2.cmd
-WorkingDir=CoreMangLib\cti\system\datetime\DateTimeToString2
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeToString3.cmd_1281]
-RelativePath=CoreMangLib\cti\system\datetime\DateTimeToString3\DateTimeToString3.cmd
-WorkingDir=CoreMangLib\cti\system\datetime\DateTimeToString3
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeUtcNow.cmd_1282]
-RelativePath=CoreMangLib\cti\system\datetime\DateTimeUtcNow\DateTimeUtcNow.cmd
-WorkingDir=CoreMangLib\cti\system\datetime\DateTimeUtcNow
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeKindLocal.cmd_1283]
-RelativePath=CoreMangLib\cti\system\datetimekind\DateTimeKindLocal\DateTimeKindLocal.cmd
-WorkingDir=CoreMangLib\cti\system\datetimekind\DateTimeKindLocal
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeKindUnspecified.cmd_1284]
-RelativePath=CoreMangLib\cti\system\datetimekind\DateTimeKindUnspecified\DateTimeKindUnspecified.cmd
-WorkingDir=CoreMangLib\cti\system\datetimekind\DateTimeKindUnspecified
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeKindUtc.cmd_1285]
-RelativePath=CoreMangLib\cti\system\datetimekind\DateTimeKindUtc\DateTimeKindUtc.cmd
-WorkingDir=CoreMangLib\cti\system\datetimekind\DateTimeKindUtc
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
[DayOfWeekFriday.cmd_1286]
RelativePath=CoreMangLib\cti\system\dayofweek\DayOfWeekFriday\DayOfWeekFriday.cmd
WorkingDir=CoreMangLib\cti\system\dayofweek\DayOfWeekFriday
Categories=Pri1;RT;EXPECTED_PASS
HostStyle=0
-[CalendarWeekRuleFirstDay.cmd_1426]
-RelativePath=CoreMangLib\cti\system\globalization\calendarweekrule\CalendarWeekRuleFirstDay\CalendarWeekRuleFirstDay.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\calendarweekrule\CalendarWeekRuleFirstDay
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[CalendarWeekRuleFirstFourDayWeek.cmd_1427]
-RelativePath=CoreMangLib\cti\system\globalization\calendarweekrule\CalendarWeekRuleFirstFourDayWeek\CalendarWeekRuleFirstFourDayWeek.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\calendarweekrule\CalendarWeekRuleFirstFourDayWeek
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[CalendarWeekRuleFirstFullWeek.cmd_1428]
-RelativePath=CoreMangLib\cti\system\globalization\calendarweekrule\CalendarWeekRuleFirstFullWeek\CalendarWeekRuleFirstFullWeek.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\calendarweekrule\CalendarWeekRuleFirstFullWeek
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[CharUnicodeInfoGetNumericValue1.cmd_1429]
-RelativePath=CoreMangLib\cti\system\globalization\charunicodeinfo\CharUnicodeInfoGetNumericValue1\CharUnicodeInfoGetNumericValue1.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\charunicodeinfo\CharUnicodeInfoGetNumericValue1
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[CharUnicodeInfoGetNumericValue2.cmd_1430]
-RelativePath=CoreMangLib\cti\system\globalization\charunicodeinfo\CharUnicodeInfoGetNumericValue2\CharUnicodeInfoGetNumericValue2.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\charunicodeinfo\CharUnicodeInfoGetNumericValue2
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[CharUnicodeInfoGetUnicodeCategory1.cmd_1431]
-RelativePath=CoreMangLib\cti\system\globalization\charunicodeinfo\CharUnicodeInfoGetUnicodeCategory1\CharUnicodeInfoGetUnicodeCategory1.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\charunicodeinfo\CharUnicodeInfoGetUnicodeCategory1
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[CharUnicodeInfoGetUnicodeCategory2.cmd_1432]
-RelativePath=CoreMangLib\cti\system\globalization\charunicodeinfo\CharUnicodeInfoGetUnicodeCategory2\CharUnicodeInfoGetUnicodeCategory2.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\charunicodeinfo\CharUnicodeInfoGetUnicodeCategory2
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[CompareInfoCompare2.cmd_1433]
-RelativePath=CoreMangLib\cti\system\globalization\compareinfo\CompareInfoCompare2\CompareInfoCompare2.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\compareinfo\CompareInfoCompare2
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[CompareInfoIndexOf2.cmd_1434]
-RelativePath=CoreMangLib\cti\system\globalization\compareinfo\CompareInfoIndexOf2\CompareInfoIndexOf2.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\compareinfo\CompareInfoIndexOf2
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[CompareOptionsIgnoreCase.cmd_1435]
-RelativePath=CoreMangLib\cti\system\globalization\compareoptions\CompareOptionsIgnoreCase\CompareOptionsIgnoreCase.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\compareoptions\CompareOptionsIgnoreCase
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[CompareOptionsIgnoreKanaType.cmd_1436]
-RelativePath=CoreMangLib\cti\system\globalization\compareoptions\CompareOptionsIgnoreKanaType\CompareOptionsIgnoreKanaType.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\compareoptions\CompareOptionsIgnoreKanaType
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[CompareOptionsIgnoreNonSpace.cmd_1437]
-RelativePath=CoreMangLib\cti\system\globalization\compareoptions\CompareOptionsIgnoreNonSpace\CompareOptionsIgnoreNonSpace.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\compareoptions\CompareOptionsIgnoreNonSpace
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[CompareOptionsIgnoreSymbols.cmd_1438]
-RelativePath=CoreMangLib\cti\system\globalization\compareoptions\CompareOptionsIgnoreSymbols\CompareOptionsIgnoreSymbols.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\compareoptions\CompareOptionsIgnoreSymbols
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[CompareOptionsIgnoreWidth.cmd_1439]
-RelativePath=CoreMangLib\cti\system\globalization\compareoptions\CompareOptionsIgnoreWidth\CompareOptionsIgnoreWidth.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\compareoptions\CompareOptionsIgnoreWidth
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[CompareOptionsNone.cmd_1440]
-RelativePath=CoreMangLib\cti\system\globalization\compareoptions\CompareOptionsNone\CompareOptionsNone.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\compareoptions\CompareOptionsNone
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[CompareOptionsOrdinal.cmd_1441]
-RelativePath=CoreMangLib\cti\system\globalization\compareoptions\CompareOptionsOrdinal\CompareOptionsOrdinal.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\compareoptions\CompareOptionsOrdinal
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[CompareOptionsOrdinalIgoreCase.cmd_1442]
-RelativePath=CoreMangLib\cti\system\globalization\compareoptions\CompareOptionsOrdinalIgoreCase\CompareOptionsOrdinalIgoreCase.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\compareoptions\CompareOptionsOrdinalIgoreCase
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[CompareOptionsStringSort.cmd_1443]
-RelativePath=CoreMangLib\cti\system\globalization\compareoptions\CompareOptionsStringSort\CompareOptionsStringSort.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\compareoptions\CompareOptionsStringSort
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[CultureInfoClone.cmd_1444]
-RelativePath=CoreMangLib\cti\system\globalization\cultureinfo\CultureInfoClone\CultureInfoClone.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\cultureinfo\CultureInfoClone
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[CultureInfoEnglishName.cmd_1445]
-RelativePath=CoreMangLib\cti\system\globalization\cultureinfo\CultureInfoEnglishName\CultureInfoEnglishName.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\cultureinfo\CultureInfoEnglishName
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[CultureInfoEquals.cmd_1446]
-RelativePath=CoreMangLib\cti\system\globalization\cultureinfo\CultureInfoEquals\CultureInfoEquals.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\cultureinfo\CultureInfoEquals
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[CultureInfoGetCultureInfo2.cmd_1447]
-RelativePath=CoreMangLib\cti\system\globalization\cultureinfo\CultureInfoGetCultureInfo2\CultureInfoGetCultureInfo2.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\cultureinfo\CultureInfoGetCultureInfo2
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[CultureInfoGetHashCode.cmd_1448]
-RelativePath=CoreMangLib\cti\system\globalization\cultureinfo\CultureInfoGetHashCode\CultureInfoGetHashCode.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\cultureinfo\CultureInfoGetHashCode
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[CultureInfoInvariantCulture.cmd_1449]
-RelativePath=CoreMangLib\cti\system\globalization\cultureinfo\CultureInfoInvariantCulture\CultureInfoInvariantCulture.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\cultureinfo\CultureInfoInvariantCulture
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[CultureInfoIsNeutralCulture.cmd_1450]
-RelativePath=CoreMangLib\cti\system\globalization\cultureinfo\CultureInfoIsNeutralCulture\CultureInfoIsNeutralCulture.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\cultureinfo\CultureInfoIsNeutralCulture
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[CultureInfoName.cmd_1451]
-RelativePath=CoreMangLib\cti\system\globalization\cultureinfo\CultureInfoName\CultureInfoName.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\cultureinfo\CultureInfoName
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[CultureInfoNativeName.cmd_1452]
-RelativePath=CoreMangLib\cti\system\globalization\cultureinfo\CultureInfoNativeName\CultureInfoNativeName.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\cultureinfo\CultureInfoNativeName
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[CultureInfoParent.cmd_1453]
-RelativePath=CoreMangLib\cti\system\globalization\cultureinfo\CultureInfoParent\CultureInfoParent.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\cultureinfo\CultureInfoParent
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[CultureInfoReadOnly.cmd_1454]
-RelativePath=CoreMangLib\cti\system\globalization\cultureinfo\CultureInfoReadOnly\CultureInfoReadOnly.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\cultureinfo\CultureInfoReadOnly
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[CultureInfoTextInfo.cmd_1455]
-RelativePath=CoreMangLib\cti\system\globalization\cultureinfo\CultureInfoTextInfo\CultureInfoTextInfo.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\cultureinfo\CultureInfoTextInfo
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[CultureInfoToString.cmd_1456]
-RelativePath=CoreMangLib\cti\system\globalization\cultureinfo\CultureInfoToString\CultureInfoToString.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\cultureinfo\CultureInfoToString
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[CultureInfoTwoLetterISOLanguageName.cmd_1457]
-RelativePath=CoreMangLib\cti\system\globalization\cultureinfo\CultureInfoTwoLetterISOLanguageName\CultureInfoTwoLetterISOLanguageName.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\cultureinfo\CultureInfoTwoLetterISOLanguageName
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeFormatInfoClone.cmd_1458]
-RelativePath=CoreMangLib\cti\system\globalization\datetimeformatinfo\DateTimeFormatInfoClone\DateTimeFormatInfoClone.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\datetimeformatinfo\DateTimeFormatInfoClone
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeFormatInfoCurrentInfo.cmd_1459]
-RelativePath=CoreMangLib\cti\system\globalization\datetimeformatinfo\DateTimeFormatInfoCurrentInfo\DateTimeFormatInfoCurrentInfo.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\datetimeformatinfo\DateTimeFormatInfoCurrentInfo
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeFormatInfoGetAbbreviatedMonthName.cmd_1460]
-RelativePath=CoreMangLib\cti\system\globalization\datetimeformatinfo\DateTimeFormatInfoGetAbbreviatedMonthName\DateTimeFormatInfoGetAbbreviatedMonthName.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\datetimeformatinfo\DateTimeFormatInfoGetAbbreviatedMonthName
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeFormatInfoGetFormat.cmd_1461]
-RelativePath=CoreMangLib\cti\system\globalization\datetimeformatinfo\DateTimeFormatInfoGetFormat\DateTimeFormatInfoGetFormat.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\datetimeformatinfo\DateTimeFormatInfoGetFormat
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeFormatInfoGetInstance.cmd_1462]
-RelativePath=CoreMangLib\cti\system\globalization\datetimeformatinfo\DateTimeFormatInfoGetInstance\DateTimeFormatInfoGetInstance.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\datetimeformatinfo\DateTimeFormatInfoGetInstance
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeFormatInfoGetMonthName.cmd_1463]
-RelativePath=CoreMangLib\cti\system\globalization\datetimeformatinfo\DateTimeFormatInfoGetMonthName\DateTimeFormatInfoGetMonthName.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\datetimeformatinfo\DateTimeFormatInfoGetMonthName
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeFormatInfoInvariantInfo.cmd_1464]
-RelativePath=CoreMangLib\cti\system\globalization\datetimeformatinfo\DateTimeFormatInfoInvariantInfo\DateTimeFormatInfoInvariantInfo.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\datetimeformatinfo\DateTimeFormatInfoInvariantInfo
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeFormatInfoIsReadOnly.cmd_1465]
-RelativePath=CoreMangLib\cti\system\globalization\datetimeformatinfo\DateTimeFormatInfoIsReadOnly\DateTimeFormatInfoIsReadOnly.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\datetimeformatinfo\DateTimeFormatInfoIsReadOnly
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeFormatInfoReadOnly.cmd_1466]
-RelativePath=CoreMangLib\cti\system\globalization\datetimeformatinfo\DateTimeFormatInfoReadOnly\DateTimeFormatInfoReadOnly.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\datetimeformatinfo\DateTimeFormatInfoReadOnly
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeFormatInfoRFC1123Pattern.cmd_1467]
-RelativePath=CoreMangLib\cti\system\globalization\datetimeformatinfo\DateTimeFormatInfoRFC1123Pattern\DateTimeFormatInfoRFC1123Pattern.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\datetimeformatinfo\DateTimeFormatInfoRFC1123Pattern
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeFormatInfoSortableDateTimePattern.cmd_1468]
-RelativePath=CoreMangLib\cti\system\globalization\datetimeformatinfo\DateTimeFormatInfoSortableDateTimePattern\DateTimeFormatInfoSortableDateTimePattern.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\datetimeformatinfo\DateTimeFormatInfoSortableDateTimePattern
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[UniversalSortableDateTimePattern.cmd_1469]
-RelativePath=CoreMangLib\cti\system\globalization\datetimeformatinfo\UniversalSortableDateTimePattern\UniversalSortableDateTimePattern.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\datetimeformatinfo\UniversalSortableDateTimePattern
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeStyleAllowInnerWhite.cmd_1470]
-RelativePath=CoreMangLib\cti\system\globalization\datetimestyles\DateTimeStyleAllowInnerWhite\DateTimeStyleAllowInnerWhite.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\datetimestyles\DateTimeStyleAllowInnerWhite
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeStylesAdjustToUniversal.cmd_1471]
-RelativePath=CoreMangLib\cti\system\globalization\datetimestyles\DateTimeStylesAdjustToUniversal\DateTimeStylesAdjustToUniversal.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\datetimestyles\DateTimeStylesAdjustToUniversal
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeStylesAllowLeadingWhite.cmd_1472]
-RelativePath=CoreMangLib\cti\system\globalization\datetimestyles\DateTimeStylesAllowLeadingWhite\DateTimeStylesAllowLeadingWhite.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\datetimestyles\DateTimeStylesAllowLeadingWhite
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeStylesAllowTrailingWhite.cmd_1473]
-RelativePath=CoreMangLib\cti\system\globalization\datetimestyles\DateTimeStylesAllowTrailingWhite\DateTimeStylesAllowTrailingWhite.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\datetimestyles\DateTimeStylesAllowTrailingWhite
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeStylesAllowWhiteSpaces.cmd_1474]
-RelativePath=CoreMangLib\cti\system\globalization\datetimestyles\DateTimeStylesAllowWhiteSpaces\DateTimeStylesAllowWhiteSpaces.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\datetimestyles\DateTimeStylesAllowWhiteSpaces
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeStylesAssumeLocal.cmd_1475]
-RelativePath=CoreMangLib\cti\system\globalization\datetimestyles\DateTimeStylesAssumeLocal\DateTimeStylesAssumeLocal.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\datetimestyles\DateTimeStylesAssumeLocal
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeStylesAssumeUniversal.cmd_1476]
-RelativePath=CoreMangLib\cti\system\globalization\datetimestyles\DateTimeStylesAssumeUniversal\DateTimeStylesAssumeUniversal.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\datetimestyles\DateTimeStylesAssumeUniversal
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeStylesNoCurrentDateDefault.cmd_1477]
-RelativePath=CoreMangLib\cti\system\globalization\datetimestyles\DateTimeStylesNoCurrentDateDefault\DateTimeStylesNoCurrentDateDefault.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\datetimestyles\DateTimeStylesNoCurrentDateDefault
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeStylesNone.cmd_1478]
-RelativePath=CoreMangLib\cti\system\globalization\datetimestyles\DateTimeStylesNone\DateTimeStylesNone.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\datetimestyles\DateTimeStylesNone
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[DateTimeStylesRoundTripKind.cmd_1479]
-RelativePath=CoreMangLib\cti\system\globalization\datetimestyles\DateTimeStylesRoundTripKind\DateTimeStylesRoundTripKind.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\datetimestyles\DateTimeStylesRoundTripKind
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[NumberFormatInfoClone.cmd_1480]
-RelativePath=CoreMangLib\cti\system\globalization\numberformatinfo\NumberFormatInfoClone\NumberFormatInfoClone.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\numberformatinfo\NumberFormatInfoClone
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[NumberFormatInfoCtor.cmd_1481]
-RelativePath=CoreMangLib\cti\system\globalization\numberformatinfo\NumberFormatInfoCtor\NumberFormatInfoCtor.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\numberformatinfo\NumberFormatInfoCtor
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[NumberFormatInfoCurrencyDecimalSeparator.cmd_1482]
-RelativePath=CoreMangLib\cti\system\globalization\numberformatinfo\NumberFormatInfoCurrencyDecimalSeparator\NumberFormatInfoCurrencyDecimalSeparator.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\numberformatinfo\NumberFormatInfoCurrencyDecimalSeparator
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[NumberFormatInfoCurrencyGroupSeparator.cmd_1483]
-RelativePath=CoreMangLib\cti\system\globalization\numberformatinfo\NumberFormatInfoCurrencyGroupSeparator\NumberFormatInfoCurrencyGroupSeparator.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\numberformatinfo\NumberFormatInfoCurrencyGroupSeparator
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[NumberFormatInfoGetFormat.cmd_1484]
-RelativePath=CoreMangLib\cti\system\globalization\numberformatinfo\NumberFormatInfoGetFormat\NumberFormatInfoGetFormat.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\numberformatinfo\NumberFormatInfoGetFormat
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[NumberFormatInfoGetInstance.cmd_1485]
-RelativePath=CoreMangLib\cti\system\globalization\numberformatinfo\NumberFormatInfoGetInstance\NumberFormatInfoGetInstance.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\numberformatinfo\NumberFormatInfoGetInstance
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[NumberFormatInfoReadOnly.cmd_1486]
-RelativePath=CoreMangLib\cti\system\globalization\numberformatinfo\NumberFormatInfoReadOnly\NumberFormatInfoReadOnly.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\numberformatinfo\NumberFormatInfoReadOnly
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[NumberStylesAllowCurrencySymbol.cmd_1487]
-RelativePath=CoreMangLib\cti\system\globalization\numberstyles\NumberStylesAllowCurrencySymbol\NumberStylesAllowCurrencySymbol.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\numberstyles\NumberStylesAllowCurrencySymbol
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[NumberStylesAllowDecimalPoint.cmd_1488]
-RelativePath=CoreMangLib\cti\system\globalization\numberstyles\NumberStylesAllowDecimalPoint\NumberStylesAllowDecimalPoint.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\numberstyles\NumberStylesAllowDecimalPoint
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[NumberStylesAllowExponent.cmd_1489]
-RelativePath=CoreMangLib\cti\system\globalization\numberstyles\NumberStylesAllowExponent\NumberStylesAllowExponent.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\numberstyles\NumberStylesAllowExponent
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[NumberStylesAllowHexSpecifier.cmd_1490]
-RelativePath=CoreMangLib\cti\system\globalization\numberstyles\NumberStylesAllowHexSpecifier\NumberStylesAllowHexSpecifier.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\numberstyles\NumberStylesAllowHexSpecifier
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[NumberStylesAllowLeadingSign.cmd_1491]
-RelativePath=CoreMangLib\cti\system\globalization\numberstyles\NumberStylesAllowLeadingSign\NumberStylesAllowLeadingSign.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\numberstyles\NumberStylesAllowLeadingSign
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[NumberStylesAllowLeadingWhite.cmd_1492]
-RelativePath=CoreMangLib\cti\system\globalization\numberstyles\NumberStylesAllowLeadingWhite\NumberStylesAllowLeadingWhite.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\numberstyles\NumberStylesAllowLeadingWhite
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[NumberStylesAllowParentheses.cmd_1493]
-RelativePath=CoreMangLib\cti\system\globalization\numberstyles\NumberStylesAllowParentheses\NumberStylesAllowParentheses.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\numberstyles\NumberStylesAllowParentheses
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[NumberStylesAllowThousands.cmd_1494]
-RelativePath=CoreMangLib\cti\system\globalization\numberstyles\NumberStylesAllowThousands\NumberStylesAllowThousands.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\numberstyles\NumberStylesAllowThousands
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[NumberStylesAllowTrailingSign.cmd_1495]
-RelativePath=CoreMangLib\cti\system\globalization\numberstyles\NumberStylesAllowTrailingSign\NumberStylesAllowTrailingSign.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\numberstyles\NumberStylesAllowTrailingSign
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[NumberStylesAllowTrailingWhite.cmd_1496]
-RelativePath=CoreMangLib\cti\system\globalization\numberstyles\NumberStylesAllowTrailingWhite\NumberStylesAllowTrailingWhite.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\numberstyles\NumberStylesAllowTrailingWhite
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[NumberStylesAny.cmd_1497]
-RelativePath=CoreMangLib\cti\system\globalization\numberstyles\NumberStylesAny\NumberStylesAny.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\numberstyles\NumberStylesAny
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[NumberStylesCurrency.cmd_1498]
-RelativePath=CoreMangLib\cti\system\globalization\numberstyles\NumberStylesCurrency\NumberStylesCurrency.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\numberstyles\NumberStylesCurrency
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[NumberStylesFloat.cmd_1499]
-RelativePath=CoreMangLib\cti\system\globalization\numberstyles\NumberStylesFloat\NumberStylesFloat.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\numberstyles\NumberStylesFloat
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[NumberStylesHexNumber.cmd_1500]
-RelativePath=CoreMangLib\cti\system\globalization\numberstyles\NumberStylesHexNumber\NumberStylesHexNumber.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\numberstyles\NumberStylesHexNumber
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[NumberStylesInteger.cmd_1501]
-RelativePath=CoreMangLib\cti\system\globalization\numberstyles\NumberStylesInteger\NumberStylesInteger.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\numberstyles\NumberStylesInteger
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[NumberStylesNone.cmd_1502]
-RelativePath=CoreMangLib\cti\system\globalization\numberstyles\NumberStylesNone\NumberStylesNone.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\numberstyles\NumberStylesNone
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[NumberStylesNumber.cmd_1503]
-RelativePath=CoreMangLib\cti\system\globalization\numberstyles\NumberStylesNumber\NumberStylesNumber.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\numberstyles\NumberStylesNumber
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[RegionInfoEquals.cmd_1505]
-RelativePath=CoreMangLib\cti\system\globalization\regioninfo\RegionInfoEquals\RegionInfoEquals.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\regioninfo\RegionInfoEquals
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[RegionInfoGetHashCode.cmd_1506]
-RelativePath=CoreMangLib\cti\system\globalization\regioninfo\RegionInfoGetHashCode\RegionInfoGetHashCode.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\regioninfo\RegionInfoGetHashCode
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[RegionInfoIsMetric.cmd_1507]
-RelativePath=CoreMangLib\cti\system\globalization\regioninfo\RegionInfoIsMetric\RegionInfoIsMetric.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\regioninfo\RegionInfoIsMetric
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[RegionInfoISOCurrencySymbol.cmd_1508]
-RelativePath=CoreMangLib\cti\system\globalization\regioninfo\RegionInfoISOCurrencySymbol\RegionInfoISOCurrencySymbol.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\regioninfo\RegionInfoISOCurrencySymbol
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[RegionInfoName.cmd_1509]
-RelativePath=CoreMangLib\cti\system\globalization\regioninfo\RegionInfoName\RegionInfoName.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\regioninfo\RegionInfoName
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[RegionInfoToString.cmd_1510]
-RelativePath=CoreMangLib\cti\system\globalization\regioninfo\RegionInfoToString\RegionInfoToString.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\regioninfo\RegionInfoToString
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[RegionInfoTwoLetterISORegionName.cmd_1511]
-RelativePath=CoreMangLib\cti\system\globalization\regioninfo\RegionInfoTwoLetterISORegionName\RegionInfoTwoLetterISORegionName.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\regioninfo\RegionInfoTwoLetterISORegionName
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[StringInfoCtor1.cmd_1512]
-RelativePath=CoreMangLib\cti\system\globalization\stringinfo\StringInfoCtor1\StringInfoCtor1.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\stringinfo\StringInfoCtor1
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[StringInfoCtor2.cmd_1513]
-RelativePath=CoreMangLib\cti\system\globalization\stringinfo\StringInfoCtor2\StringInfoCtor2.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\stringinfo\StringInfoCtor2
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[StringInfoEquals.cmd_1514]
-RelativePath=CoreMangLib\cti\system\globalization\stringinfo\StringInfoEquals\StringInfoEquals.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\stringinfo\StringInfoEquals
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[StringInfoGetHashCode.cmd_1515]
-RelativePath=CoreMangLib\cti\system\globalization\stringinfo\StringInfoGetHashCode\StringInfoGetHashCode.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\stringinfo\StringInfoGetHashCode
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[StringInfoGetNextTextElement2.cmd_1516]
-RelativePath=CoreMangLib\cti\system\globalization\stringinfo\StringInfoGetNextTextElement2\StringInfoGetNextTextElement2.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\stringinfo\StringInfoGetNextTextElement2
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[StringInfoGetTextElementEnumerator1.cmd_1517]
-RelativePath=CoreMangLib\cti\system\globalization\stringinfo\StringInfoGetTextElementEnumerator1\StringInfoGetTextElementEnumerator1.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\stringinfo\StringInfoGetTextElementEnumerator1
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[StringInfoGetTextElementEnumerator2.cmd_1518]
-RelativePath=CoreMangLib\cti\system\globalization\stringinfo\StringInfoGetTextElementEnumerator2\StringInfoGetTextElementEnumerator2.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\stringinfo\StringInfoGetTextElementEnumerator2
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[StringInfoLengthInTextElements.cmd_1519]
-RelativePath=CoreMangLib\cti\system\globalization\stringinfo\StringInfoLengthInTextElements\StringInfoLengthInTextElements.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\stringinfo\StringInfoLengthInTextElements
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[StringInfoParseCombiningCharacters.cmd_1520]
-RelativePath=CoreMangLib\cti\system\globalization\stringinfo\StringInfoParseCombiningCharacters\StringInfoParseCombiningCharacters.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\stringinfo\StringInfoParseCombiningCharacters
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[StringInfoString.cmd_1521]
-RelativePath=CoreMangLib\cti\system\globalization\stringinfo\StringInfoString\StringInfoString.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\stringinfo\StringInfoString
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[TextElementEnumeratorCurrent.cmd_1522]
-RelativePath=CoreMangLib\cti\system\globalization\textelementenumerator\TextElementEnumeratorCurrent\TextElementEnumeratorCurrent.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\textelementenumerator\TextElementEnumeratorCurrent
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[TextElementEnumeratorElementIndex.cmd_1523]
-RelativePath=CoreMangLib\cti\system\globalization\textelementenumerator\TextElementEnumeratorElementIndex\TextElementEnumeratorElementIndex.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\textelementenumerator\TextElementEnumeratorElementIndex
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[TextElementEnumeratorGetTextElement.cmd_1524]
-RelativePath=CoreMangLib\cti\system\globalization\textelementenumerator\TextElementEnumeratorGetTextElement\TextElementEnumeratorGetTextElement.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\textelementenumerator\TextElementEnumeratorGetTextElement
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[TextElementEnumeratorMoveNext.cmd_1525]
-RelativePath=CoreMangLib\cti\system\globalization\textelementenumerator\TextElementEnumeratorMoveNext\TextElementEnumeratorMoveNext.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\textelementenumerator\TextElementEnumeratorMoveNext
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[TextElementEnumeratorReset.cmd_1526]
-RelativePath=CoreMangLib\cti\system\globalization\textelementenumerator\TextElementEnumeratorReset\TextElementEnumeratorReset.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\textelementenumerator\TextElementEnumeratorReset
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[TextInfoCultureName.cmd_1527]
-RelativePath=CoreMangLib\cti\system\globalization\textinfo\TextInfoCultureName\TextInfoCultureName.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\textinfo\TextInfoCultureName
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[TextInfoEquals.cmd_1528]
-RelativePath=CoreMangLib\cti\system\globalization\textinfo\TextInfoEquals\TextInfoEquals.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\textinfo\TextInfoEquals
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[TextInfoGetHashCode.cmd_1529]
-RelativePath=CoreMangLib\cti\system\globalization\textinfo\TextInfoGetHashCode\TextInfoGetHashCode.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\textinfo\TextInfoGetHashCode
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[TextInfoIsReadOnly.cmd_1530]
-RelativePath=CoreMangLib\cti\system\globalization\textinfo\TextInfoIsReadOnly\TextInfoIsReadOnly.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\textinfo\TextInfoIsReadOnly
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[TextInfoToString.cmd_1531]
-RelativePath=CoreMangLib\cti\system\globalization\textinfo\TextInfoToString\TextInfoToString.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\textinfo\TextInfoToString
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[TextInfoToUpper1.cmd_1532]
-RelativePath=CoreMangLib\cti\system\globalization\textinfo\TextInfoToUpper1\TextInfoToUpper1.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\textinfo\TextInfoToUpper1
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[TextInfoToUpper2.cmd_1533]
-RelativePath=CoreMangLib\cti\system\globalization\textinfo\TextInfoToUpper2\TextInfoToUpper2.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\textinfo\TextInfoToUpper2
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[UnicodeCategoryClosePunctuation.cmd_1534]
-RelativePath=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryClosePunctuation\UnicodeCategoryClosePunctuation.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryClosePunctuation
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[UnicodeCategoryConnectorPunctuation.cmd_1535]
-RelativePath=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryConnectorPunctuation\UnicodeCategoryConnectorPunctuation.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryConnectorPunctuation
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[UnicodeCategoryControl.cmd_1536]
-RelativePath=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryControl\UnicodeCategoryControl.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryControl
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[UnicodeCategoryDashPunctuation.cmd_1537]
-RelativePath=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryDashPunctuation\UnicodeCategoryDashPunctuation.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryDashPunctuation
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[UnicodeCategoryDecimalDigitNumber.cmd_1538]
-RelativePath=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryDecimalDigitNumber\UnicodeCategoryDecimalDigitNumber.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryDecimalDigitNumber
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[UnicodeCategoryEnclosingMark.cmd_1539]
-RelativePath=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryEnclosingMark\UnicodeCategoryEnclosingMark.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryEnclosingMark
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[UnicodeCategoryFinalQuotePunctuation.cmd_1540]
-RelativePath=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryFinalQuotePunctuation\UnicodeCategoryFinalQuotePunctuation.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryFinalQuotePunctuation
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[UnicodeCategoryFormat.cmd_1541]
-RelativePath=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryFormat\UnicodeCategoryFormat.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryFormat
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[UnicodeCategoryInitialQuotePunctuation.cmd_1542]
-RelativePath=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryInitialQuotePunctuation\UnicodeCategoryInitialQuotePunctuation.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryInitialQuotePunctuation
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[UnicodeCategoryLetterNumber.cmd_1543]
-RelativePath=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryLetterNumber\UnicodeCategoryLetterNumber.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryLetterNumber
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[UnicodeCategoryLineSeparator.cmd_1544]
-RelativePath=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryLineSeparator\UnicodeCategoryLineSeparator.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryLineSeparator
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[UnicodeCategoryLowercaseLetter.cmd_1545]
-RelativePath=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryLowercaseLetter\UnicodeCategoryLowercaseLetter.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryLowercaseLetter
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[UnicodeCategoryMathSymbol.cmd_1546]
-RelativePath=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryMathSymbol\UnicodeCategoryMathSymbol.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryMathSymbol
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[UnicodeCategoryModifierLetter.cmd_1547]
-RelativePath=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryModifierLetter\UnicodeCategoryModifierLetter.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryModifierLetter
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[UnicodeCategoryModifierSymbol.cmd_1548]
-RelativePath=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryModifierSymbol\UnicodeCategoryModifierSymbol.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryModifierSymbol
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[UnicodeCategoryNonSpacingMark.cmd_1549]
-RelativePath=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryNonSpacingMark\UnicodeCategoryNonSpacingMark.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryNonSpacingMark
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[UnicodeCategoryOpenPunctuation.cmd_1550]
-RelativePath=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryOpenPunctuation\UnicodeCategoryOpenPunctuation.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryOpenPunctuation
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[UnicodeCategoryOtherLetter.cmd_1551]
-RelativePath=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryOtherLetter\UnicodeCategoryOtherLetter.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryOtherLetter
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[UnicodeCategoryOtherNotAssigned.cmd_1552]
-RelativePath=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryOtherNotAssigned\UnicodeCategoryOtherNotAssigned.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryOtherNotAssigned
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[UnicodeCategoryOtherNumber.cmd_1553]
-RelativePath=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryOtherNumber\UnicodeCategoryOtherNumber.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryOtherNumber
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[UnicodeCategoryOtherPunctuation.cmd_1554]
-RelativePath=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryOtherPunctuation\UnicodeCategoryOtherPunctuation.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryOtherPunctuation
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[UnicodeCategoryOtherSymbol.cmd_1555]
-RelativePath=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryOtherSymbol\UnicodeCategoryOtherSymbol.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryOtherSymbol
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[UnicodeCategoryParagraphSeparator.cmd_1556]
-RelativePath=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryParagraphSeparator\UnicodeCategoryParagraphSeparator.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryParagraphSeparator
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[UnicodeCategoryPrivateUse.cmd_1557]
-RelativePath=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryPrivateUse\UnicodeCategoryPrivateUse.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryPrivateUse
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[UnicodeCategorySpaceSeparator.cmd_1558]
-RelativePath=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategorySpaceSeparator\UnicodeCategorySpaceSeparator.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategorySpaceSeparator
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[UnicodeCategorySpacingCombiningMark.cmd_1559]
-RelativePath=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategorySpacingCombiningMark\UnicodeCategorySpacingCombiningMark.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategorySpacingCombiningMark
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[UnicodeCategorySurrogate.cmd_1560]
-RelativePath=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategorySurrogate\UnicodeCategorySurrogate.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategorySurrogate
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[UnicodeCategoryTitlecaseLetter.cmd_1561]
-RelativePath=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryTitlecaseLetter\UnicodeCategoryTitlecaseLetter.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryTitlecaseLetter
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
-[UnicodeCategoryUppercaseLetter.cmd_1562]
-RelativePath=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryUppercaseLetter\UnicodeCategoryUppercaseLetter.cmd
-WorkingDir=CoreMangLib\cti\system\globalization\unicodecategory\UnicodeCategoryUppercaseLetter
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
[GuidCompareTo1_cti.cmd_1563]
RelativePath=CoreMangLib\cti\system\guid\GuidCompareTo1_cti\GuidCompareTo1_cti.cmd
WorkingDir=CoreMangLib\cti\system\guid\GuidCompareTo1_cti
Categories=Pri1;RT;EXPECTED_PASS
HostStyle=0
-[Co7510ParseExact_formatarray.cmd_2836]
-RelativePath=CoreMangLib\system\datetime\Co7510ParseExact_formatarray\Co7510ParseExact_formatarray.cmd
-WorkingDir=CoreMangLib\system\datetime\Co7510ParseExact_formatarray
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
[NegativeGenerics.cmd_2837]
RelativePath=CoreMangLib\system\delegate\generics\NegativeGenerics\NegativeGenerics.cmd
WorkingDir=CoreMangLib\system\delegate\generics\NegativeGenerics
Categories=Pri1;RT;EXPECTED_PASS
HostStyle=0
-[Shift_Jis.cmd_2846]
-RelativePath=CoreMangLib\system\text\encoding\Shift_Jis\Shift_Jis.cmd
-WorkingDir=CoreMangLib\system\text\encoding\Shift_Jis
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri1;RT;EXPECTED_PASS
-HostStyle=0
-
[Version_Parsing.cmd_2847]
RelativePath=CoreMangLib\system\version\Version_Parsing\Version_Parsing.cmd
WorkingDir=CoreMangLib\system\version\Version_Parsing
WorkingDir=JIT\Methodical\stringintern\_XModuletest4-xmod
Expected=0
MaxAllowedDurationSeconds=600
-Categories=Pri0;EXPECTED_PASSPASSPASSPASS
+Categories=Pri0;EXPECTED_PASSPASSPASSPASS;EXPECTED_PASS
HostStyle=0
[structinregs.cmd_7583]
Categories=Pri0;EXPECTED_PASS
HostStyle=0
-[DeltaBlue.cmd_8033]
-RelativePath=JIT\Performance\CodeQuality\V8\DeltaBlue\DeltaBlue\DeltaBlue.cmd
-WorkingDir=JIT\Performance\CodeQuality\V8\DeltaBlue\DeltaBlue
-Expected=0
-MaxAllowedDurationSeconds=1000
-Categories=GCSTRESS_FAIL;Pri0;LONG_RUNNING;ISSUE_6065;EXPECTED_PASS
-HostStyle=0
-
[Richards.cmd_8034]
RelativePath=JIT\Performance\CodeQuality\V8\Richards\Richards\Richards.cmd
WorkingDir=JIT\Performance\CodeQuality\V8\Richards\Richards
Categories=Pri0;JIT;EXPECTED_PASS
HostStyle=0
-[b475589.cmd_8932]
-RelativePath=JIT\Regression\CLR-x86-JIT\V2.0-RTM\b475589\b475589\b475589.cmd
-WorkingDir=JIT\Regression\CLR-x86-JIT\V2.0-RTM\b475589\b475589
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=Pri0;JIT;EXPECTED_FAIL;8156
-HostStyle=0
-
[b487364.cmd_8933]
RelativePath=JIT\Regression\CLR-x86-JIT\V2.0-RTM\b487364\b487364\b487364.cmd
WorkingDir=JIT\Regression\CLR-x86-JIT\V2.0-RTM\b487364\b487364
Categories=EXPECTED_PASS
HostStyle=0
-[VSW491668.cmd_9372]
-RelativePath=Loader\classloader\generics\GenericMethods\VSW491668\VSW491668.cmd
-WorkingDir=Loader\classloader\generics\GenericMethods\VSW491668
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=NEW;EXPECTED_FAIL;8156
-HostStyle=0
-
[abstract01.cmd_9373]
RelativePath=Loader\classloader\generics\Instantiation\Negative\abstract01\abstract01.cmd
WorkingDir=Loader\classloader\generics\Instantiation\Negative\abstract01
Categories=EXPECTED_PASS;NEW
HostStyle=0
-[ConstantArgsByte.cmd_10042]
-RelativePath=JIT\Performance\CodeQuality\Inlining\ConstantArgsByte\ConstantArgsByte.cmd
-WorkingDir=JIT\Performance\CodeQuality\Inlining\ConstantArgsByte
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=EXPECTED_PASS;NEW
-HostStyle=0
-
[Generated1478.cmd_10043]
RelativePath=Loader\classloader\TypeGeneratorTests\TypeGeneratorTest1478\Generated1478\Generated1478.cmd
WorkingDir=Loader\classloader\TypeGeneratorTests\TypeGeneratorTest1478\Generated1478
Categories=EXPECTED_PASS;NEW
HostStyle=0
-[ConstantArgsShort.cmd_10227]
-RelativePath=JIT\Performance\CodeQuality\Inlining\ConstantArgsShort\ConstantArgsShort.cmd
-WorkingDir=JIT\Performance\CodeQuality\Inlining\ConstantArgsShort
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=EXPECTED_PASS;NEW
-HostStyle=0
-
[Generated908.cmd_10228]
RelativePath=Loader\classloader\TypeGeneratorTests\TypeGeneratorTest908\Generated908\Generated908.cmd
WorkingDir=Loader\classloader\TypeGeneratorTests\TypeGeneratorTest908\Generated908
Categories=EXPECTED_PASS;NEW
HostStyle=0
-[ConstantArgsInt.cmd_10362]
-RelativePath=JIT\Performance\CodeQuality\Inlining\ConstantArgsInt\ConstantArgsInt.cmd
-WorkingDir=JIT\Performance\CodeQuality\Inlining\ConstantArgsInt
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=EXPECTED_PASS;NEW
-HostStyle=0
-
[Generated1297.cmd_10363]
RelativePath=Loader\classloader\TypeGeneratorTests\TypeGeneratorTest1297\Generated1297\Generated1297.cmd
WorkingDir=Loader\classloader\TypeGeneratorTests\TypeGeneratorTest1297\Generated1297
Categories=EXPECTED_PASS;NEW
HostStyle=0
-[ConstantArgsLong.cmd_10508]
-RelativePath=JIT\Performance\CodeQuality\Inlining\ConstantArgsLong\ConstantArgsLong.cmd
-WorkingDir=JIT\Performance\CodeQuality\Inlining\ConstantArgsLong
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=EXPECTED_PASS;NEW
-HostStyle=0
-
[Generated1013.cmd_10509]
RelativePath=Loader\classloader\TypeGeneratorTests\TypeGeneratorTest1013\Generated1013\Generated1013.cmd
WorkingDir=Loader\classloader\TypeGeneratorTests\TypeGeneratorTest1013\Generated1013
Categories=EXPECTED_PASS;NEW
HostStyle=0
-[ConstantArgsULong.cmd_10557]
-RelativePath=JIT\Performance\CodeQuality\Inlining\ConstantArgsULong\ConstantArgsULong.cmd
-WorkingDir=JIT\Performance\CodeQuality\Inlining\ConstantArgsULong
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=EXPECTED_PASS;NEW
-HostStyle=0
-
[Generated331.cmd_10558]
RelativePath=Loader\classloader\TypeGeneratorTests\TypeGeneratorTest331\Generated331\Generated331.cmd
WorkingDir=Loader\classloader\TypeGeneratorTests\TypeGeneratorTest331\Generated331
Categories=EXPECTED_PASS;NEW
HostStyle=0
-[ConstantArgsSByte.cmd_10706]
-RelativePath=JIT\Performance\CodeQuality\Inlining\ConstantArgsSByte\ConstantArgsSByte.cmd
-WorkingDir=JIT\Performance\CodeQuality\Inlining\ConstantArgsSByte
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=EXPECTED_PASS;NEW
-HostStyle=0
-
[Generated806.cmd_10707]
RelativePath=Loader\classloader\TypeGeneratorTests\TypeGeneratorTest806\Generated806\Generated806.cmd
WorkingDir=Loader\classloader\TypeGeneratorTests\TypeGeneratorTest806\Generated806
Categories=EXPECTED_PASS;NEW
HostStyle=0
-[ConstantArgsFloat.cmd_10832]
-RelativePath=JIT\Performance\CodeQuality\Inlining\ConstantArgsFloat\ConstantArgsFloat.cmd
-WorkingDir=JIT\Performance\CodeQuality\Inlining\ConstantArgsFloat
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=EXPECTED_PASS;NEW
-HostStyle=0
-
[Generated716.cmd_10833]
RelativePath=Loader\classloader\TypeGeneratorTests\TypeGeneratorTest716\Generated716\Generated716.cmd
WorkingDir=Loader\classloader\TypeGeneratorTests\TypeGeneratorTest716\Generated716
Categories=EXPECTED_PASS;NEW
HostStyle=0
-[ConstantArgsString.cmd_10898]
-RelativePath=JIT\Performance\CodeQuality\Inlining\ConstantArgsString\ConstantArgsString.cmd
-WorkingDir=JIT\Performance\CodeQuality\Inlining\ConstantArgsString
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=EXPECTED_PASS;NEW
-HostStyle=0
-
[mcc_i02.cmd_10899]
RelativePath=JIT\jit64\mcc\interop\mcc_i02\mcc_i02.cmd
WorkingDir=JIT\jit64\mcc\interop\mcc_i02
Categories=EXPECTED_FAIL;4851;NEW
HostStyle=0
-[ConstantArgsUInt.cmd_10955]
-RelativePath=JIT\Performance\CodeQuality\Inlining\ConstantArgsUInt\ConstantArgsUInt.cmd
-WorkingDir=JIT\Performance\CodeQuality\Inlining\ConstantArgsUInt
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=EXPECTED_PASS;NEW
-HostStyle=0
-
[Generated1228.cmd_10956]
RelativePath=Loader\classloader\TypeGeneratorTests\TypeGeneratorTest1228\Generated1228\Generated1228.cmd
WorkingDir=Loader\classloader\TypeGeneratorTests\TypeGeneratorTest1228\Generated1228
Categories=EXPECTED_PASS;NEW
HostStyle=0
-[ConstantArgsUShort.cmd_10983]
-RelativePath=JIT\Performance\CodeQuality\Inlining\ConstantArgsUShort\ConstantArgsUShort.cmd
-WorkingDir=JIT\Performance\CodeQuality\Inlining\ConstantArgsUShort
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=EXPECTED_PASS;NEW
-HostStyle=0
-
[Generated1165.cmd_10984]
RelativePath=Loader\classloader\TypeGeneratorTests\TypeGeneratorTest1165\Generated1165\Generated1165.cmd
WorkingDir=Loader\classloader\TypeGeneratorTests\TypeGeneratorTest1165\Generated1165
Categories=EXPECTED_PASS;NEW
HostStyle=0
-[ConstantArgsChar.cmd_11115]
-RelativePath=JIT\Performance\CodeQuality\Inlining\ConstantArgsChar\ConstantArgsChar.cmd
-WorkingDir=JIT\Performance\CodeQuality\Inlining\ConstantArgsChar
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=EXPECTED_PASS;NEW
-HostStyle=0
-
[Generated553.cmd_11116]
RelativePath=Loader\classloader\TypeGeneratorTests\TypeGeneratorTest553\Generated553\Generated553.cmd
WorkingDir=Loader\classloader\TypeGeneratorTests\TypeGeneratorTest553\Generated553
WorkingDir=JIT\Performance\CodeQuality\Span\SpanBench
Expected=0
MaxAllowedDurationSeconds=600
-Categories=EXPECTED_PASS;NEW
+Categories=EXPECTED_FAIL;10544;NEW
HostStyle=0
[Generated1202.cmd_11489]
Categories=EXPECTED_PASS;NEW
HostStyle=0
-[ConstantArgsDouble.cmd_11531]
-RelativePath=JIT\Performance\CodeQuality\Inlining\ConstantArgsDouble\ConstantArgsDouble.cmd
-WorkingDir=JIT\Performance\CodeQuality\Inlining\ConstantArgsDouble
-Expected=0
-MaxAllowedDurationSeconds=600
-Categories=EXPECTED_PASS;NEW
-HostStyle=0
-
[Generated539.cmd_11532]
RelativePath=Loader\classloader\TypeGeneratorTests\TypeGeneratorTest539\Generated539\Generated539.cmd
WorkingDir=Loader\classloader\TypeGeneratorTests\TypeGeneratorTest539\Generated539
Categories=EXPECTED_PASS;NEW
HostStyle=0
+[MathFCos.cmd_11565]
+RelativePath=CoreMangLib\cti\system\mathf\MathFCos\MathFCos.cmd
+WorkingDir=CoreMangLib\cti\system\mathf\MathFCos
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[sealeddefault.cmd_11566]
+RelativePath=JIT\opt\Devirtualization\sealeddefault\sealeddefault.cmd
+WorkingDir=JIT\opt\Devirtualization\sealeddefault
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[StringReplace3.cmd_11567]
+RelativePath=CoreMangLib\cti\system\string\StringReplace3\StringReplace3.cmd
+WorkingDir=CoreMangLib\cti\system\string\StringReplace3
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[MathFRound1.cmd_11568]
+RelativePath=CoreMangLib\cti\system\mathf\MathFRound1\MathFRound1.cmd
+WorkingDir=CoreMangLib\cti\system\mathf\MathFRound1
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[ArrayJagged.cmd_11569]
+RelativePath=JIT\CodeGenBringUpTests\ArrayJagged\ArrayJagged.cmd
+WorkingDir=JIT\CodeGenBringUpTests\ArrayJagged
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[MathFFloor.cmd_11570]
+RelativePath=CoreMangLib\cti\system\mathf\MathFFloor\MathFFloor.cmd
+WorkingDir=CoreMangLib\cti\system\mathf\MathFFloor
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[comparable.cmd_11571]
+RelativePath=JIT\opt\Devirtualization\comparable\comparable.cmd
+WorkingDir=JIT\opt\Devirtualization\comparable
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[sealedmethod.cmd_11572]
+RelativePath=JIT\opt\Devirtualization\sealedmethod\sealedmethod.cmd
+WorkingDir=JIT\opt\Devirtualization\sealedmethod
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[generic.cmd_11573]
+RelativePath=JIT\opt\Devirtualization\generic\generic.cmd
+WorkingDir=JIT\opt\Devirtualization\generic
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[ForeignThreadExceptions.cmd_11574]
+RelativePath=Exceptions\ForeignThread\ForeignThreadExceptions\ForeignThreadExceptions.cmd
+WorkingDir=Exceptions\ForeignThread\ForeignThreadExceptions
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_FAIL;10636;NEW
+HostStyle=0
+
+[MathFExp.cmd_11575]
+RelativePath=CoreMangLib\cti\system\mathf\MathFExp\MathFExp.cmd
+WorkingDir=CoreMangLib\cti\system\mathf\MathFExp
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[MathFMax.cmd_11576]
+RelativePath=CoreMangLib\cti\system\mathf\MathFMax\MathFMax.cmd
+WorkingDir=CoreMangLib\cti\system\mathf\MathFMax
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[MathFAtan2.cmd_11577]
+RelativePath=CoreMangLib\cti\system\mathf\MathFAtan2\MathFAtan2.cmd
+WorkingDir=CoreMangLib\cti\system\mathf\MathFAtan2
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[MathFAtan.cmd_11578]
+RelativePath=CoreMangLib\cti\system\mathf\MathFAtan\MathFAtan.cmd
+WorkingDir=CoreMangLib\cti\system\mathf\MathFAtan
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[MathFRound2.cmd_11579]
+RelativePath=CoreMangLib\cti\system\mathf\MathFRound2\MathFRound2.cmd
+WorkingDir=CoreMangLib\cti\system\mathf\MathFRound2
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[fromcollection.cmd_11580]
+RelativePath=JIT\opt\Devirtualization\fromcollection\fromcollection.cmd
+WorkingDir=JIT\opt\Devirtualization\fromcollection
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[GitHub_9651.cmd_11581]
+RelativePath=JIT\Regression\JitBlue\GitHub_9651\GitHub_9651\GitHub_9651.cmd
+WorkingDir=JIT\Regression\JitBlue\GitHub_9651\GitHub_9651
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[overload.cmd_11582]
+RelativePath=JIT\opt\Devirtualization\overload\overload.cmd
+WorkingDir=JIT\opt\Devirtualization\overload
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[MathFIEEERemainder.cmd_11583]
+RelativePath=CoreMangLib\cti\system\mathf\MathFIEEERemainder\MathFIEEERemainder.cmd
+WorkingDir=CoreMangLib\cti\system\mathf\MathFIEEERemainder
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[MathFCosh.cmd_11584]
+RelativePath=CoreMangLib\cti\system\mathf\MathFCosh\MathFCosh.cmd
+WorkingDir=CoreMangLib\cti\system\mathf\MathFCosh
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[ArrayExc.cmd_11585]
+RelativePath=JIT\CodeGenBringUpTests\ArrayExc\ArrayExc.cmd
+WorkingDir=JIT\CodeGenBringUpTests\ArrayExc
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[MathFSqrt.cmd_11586]
+RelativePath=CoreMangLib\cti\system\mathf\MathFSqrt\MathFSqrt.cmd
+WorkingDir=CoreMangLib\cti\system\mathf\MathFSqrt
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[Vector3GetHash_r.cmd_11587]
+RelativePath=JIT\SIMD\Vector3GetHash_r\Vector3GetHash_r.cmd
+WorkingDir=JIT\SIMD\Vector3GetHash_r
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[CoreFX_15913.cmd_11588]
+RelativePath=JIT\Regression\JitBlue\CoreFX_15913\CoreFX_15913\CoreFX_15913.cmd
+WorkingDir=JIT\Regression\JitBlue\CoreFX_15913\CoreFX_15913
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[MathFMin.cmd_11589]
+RelativePath=CoreMangLib\cti\system\mathf\MathFMin\MathFMin.cmd
+WorkingDir=CoreMangLib\cti\system\mathf\MathFMin
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[sealedclass.cmd_11590]
+RelativePath=JIT\opt\Devirtualization\sealedclass\sealedclass.cmd
+WorkingDir=JIT\opt\Devirtualization\sealedclass
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[Array4.cmd_11591]
+RelativePath=JIT\CodeGenBringUpTests\Array4\Array4.cmd
+WorkingDir=JIT\CodeGenBringUpTests\Array4
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[override.cmd_11592]
+RelativePath=JIT\opt\Devirtualization\override\override.cmd
+WorkingDir=JIT\opt\Devirtualization\override
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[enum.cmd_11593]
+RelativePath=JIT\opt\Devirtualization\enum\enum.cmd
+WorkingDir=JIT\opt\Devirtualization\enum
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[Array3.cmd_11594]
+RelativePath=JIT\CodeGenBringUpTests\Array3\Array3.cmd
+WorkingDir=JIT\CodeGenBringUpTests\Array3
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[MathFSin.cmd_11595]
+RelativePath=CoreMangLib\cti\system\mathf\MathFSin\MathFSin.cmd
+WorkingDir=CoreMangLib\cti\system\mathf\MathFSin
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[CheckProjects.cmd_11596]
+RelativePath=JIT\CheckProjects\CheckProjects\CheckProjects.cmd
+WorkingDir=JIT\CheckProjects\CheckProjects
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_FAIL;10635;NEW
+HostStyle=0
+
+[ArrayMD1.cmd_11597]
+RelativePath=JIT\CodeGenBringUpTests\ArrayMD1\ArrayMD1.cmd
+WorkingDir=JIT\CodeGenBringUpTests\ArrayMD1
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[MathFLog10.cmd_11598]
+RelativePath=CoreMangLib\cti\system\mathf\MathFLog10\MathFLog10.cmd
+WorkingDir=CoreMangLib\cti\system\mathf\MathFLog10
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[MathFSign.cmd_11599]
+RelativePath=CoreMangLib\cti\system\mathf\MathFSign\MathFSign.cmd
+WorkingDir=CoreMangLib\cti\system\mathf\MathFSign
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[MathFE.cmd_11600]
+RelativePath=CoreMangLib\cti\system\mathf\MathFE\MathFE.cmd
+WorkingDir=CoreMangLib\cti\system\mathf\MathFE
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[MathFCeiling.cmd_11601]
+RelativePath=CoreMangLib\cti\system\mathf\MathFCeiling\MathFCeiling.cmd
+WorkingDir=CoreMangLib\cti\system\mathf\MathFCeiling
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[GitHub_10311.cmd_11602]
+RelativePath=JIT\opt\Devirtualization\GitHub_10311\GitHub_10311.cmd
+WorkingDir=JIT\opt\Devirtualization\GitHub_10311
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[late.cmd_11603]
+RelativePath=JIT\opt\Devirtualization\late\late.cmd
+WorkingDir=JIT\opt\Devirtualization\late
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[inlinedevirt.cmd_11604]
+RelativePath=JIT\opt\Devirtualization\inlinedevirt\inlinedevirt.cmd
+WorkingDir=JIT\opt\Devirtualization\inlinedevirt
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[MathFSinh.cmd_11605]
+RelativePath=CoreMangLib\cti\system\mathf\MathFSinh\MathFSinh.cmd
+WorkingDir=CoreMangLib\cti\system\mathf\MathFSinh
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[MathFPI.cmd_11606]
+RelativePath=CoreMangLib\cti\system\mathf\MathFPI\MathFPI.cmd
+WorkingDir=CoreMangLib\cti\system\mathf\MathFPI
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[MathFAbs.cmd_11607]
+RelativePath=CoreMangLib\cti\system\mathf\MathFAbs\MathFAbs.cmd
+WorkingDir=CoreMangLib\cti\system\mathf\MathFAbs
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[sharedoverride.cmd_11608]
+RelativePath=JIT\opt\Devirtualization\sharedoverride\sharedoverride.cmd
+WorkingDir=JIT\opt\Devirtualization\sharedoverride
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[MathFTan.cmd_11609]
+RelativePath=CoreMangLib\cti\system\mathf\MathFTan\MathFTan.cmd
+WorkingDir=CoreMangLib\cti\system\mathf\MathFTan
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[Vector3GetHash_ro.cmd_11610]
+RelativePath=JIT\SIMD\Vector3GetHash_ro\Vector3GetHash_ro.cmd
+WorkingDir=JIT\SIMD\Vector3GetHash_ro
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[exacttype.cmd_11611]
+RelativePath=JIT\opt\Devirtualization\exacttype\exacttype.cmd
+WorkingDir=JIT\opt\Devirtualization\exacttype
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[simple.cmd_11612]
+RelativePath=JIT\opt\Devirtualization\simple\simple.cmd
+WorkingDir=JIT\opt\Devirtualization\simple
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[Array2.cmd_11613]
+RelativePath=JIT\CodeGenBringUpTests\Array2\Array2.cmd
+WorkingDir=JIT\CodeGenBringUpTests\Array2
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[GitHub_9945.cmd_11614]
+RelativePath=JIT\opt\Devirtualization\GitHub_9945\GitHub_9945.cmd
+WorkingDir=JIT\opt\Devirtualization\GitHub_9945
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[DeadThreads.cmd_11615]
+RelativePath=baseservices\threading\DeadThreads\DeadThreads\DeadThreads.cmd
+WorkingDir=baseservices\threading\DeadThreads\DeadThreads
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[ldtokenmember.cmd_11616]
+RelativePath=reflection\ldtoken\ldtokenmember\ldtokenmember.cmd
+WorkingDir=reflection\ldtoken\ldtokenmember
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[MathFLog.cmd_11617]
+RelativePath=CoreMangLib\cti\system\mathf\MathFLog\MathFLog.cmd
+WorkingDir=CoreMangLib\cti\system\mathf\MathFLog
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[Array1.cmd_11618]
+RelativePath=JIT\CodeGenBringUpTests\Array1\Array1.cmd
+WorkingDir=JIT\CodeGenBringUpTests\Array1
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[MathFAcos.cmd_11619]
+RelativePath=CoreMangLib\cti\system\mathf\MathFAcos\MathFAcos.cmd
+WorkingDir=CoreMangLib\cti\system\mathf\MathFAcos
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[MathFPow.cmd_11620]
+RelativePath=CoreMangLib\cti\system\mathf\MathFPow\MathFPow.cmd
+WorkingDir=CoreMangLib\cti\system\mathf\MathFPow
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[covariance.cmd_11621]
+RelativePath=JIT\opt\Devirtualization\covariance\covariance.cmd
+WorkingDir=JIT\opt\Devirtualization\covariance
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[ArrBoundUnsigned.cmd_11622]
+RelativePath=JIT\opt\AssertionPropagation\ArrBoundUnsigned\ArrBoundUnsigned.cmd
+WorkingDir=JIT\opt\AssertionPropagation\ArrBoundUnsigned
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[GitHub_9891.cmd_11623]
+RelativePath=JIT\Regression\JitBlue\GitHub_9891\GitHub_9891\GitHub_9891.cmd
+WorkingDir=JIT\Regression\JitBlue\GitHub_9891\GitHub_9891
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[DynMethodJumpStubTests.cmd_11624]
+RelativePath=CoreMangLib\cti\system\reflection\emit\DynMethodJumpStubTests\DynMethodJumpStubTests\DynMethodJumpStubTests.cmd
+WorkingDir=CoreMangLib\cti\system\reflection\emit\DynMethodJumpStubTests\DynMethodJumpStubTests
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[MathFTanh.cmd_11625]
+RelativePath=CoreMangLib\cti\system\mathf\MathFTanh\MathFTanh.cmd
+WorkingDir=CoreMangLib\cti\system\mathf\MathFTanh
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[ArrayMD2.cmd_11626]
+RelativePath=JIT\CodeGenBringUpTests\ArrayMD2\ArrayMD2.cmd
+WorkingDir=JIT\CodeGenBringUpTests\ArrayMD2
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[contravariance.cmd_11627]
+RelativePath=JIT\opt\Devirtualization\contravariance\contravariance.cmd
+WorkingDir=JIT\opt\Devirtualization\contravariance
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[k-nucleotide.cmd_11628]
+RelativePath=JIT\Performance\CodeQuality\BenchmarksGame\k-nucleotide\k-nucleotide\k-nucleotide.cmd
+WorkingDir=JIT\Performance\CodeQuality\BenchmarksGame\k-nucleotide\k-nucleotide
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[ArrayObj.cmd_11629]
+RelativePath=JIT\CodeGenBringUpTests\ArrayObj\ArrayObj.cmd
+WorkingDir=JIT\CodeGenBringUpTests\ArrayObj
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
+[GitHub_9945_2.cmd_11630]
+RelativePath=JIT\opt\Devirtualization\GitHub_9945_2\GitHub_9945_2.cmd
+WorkingDir=JIT\opt\Devirtualization\GitHub_9945_2
+Expected=0
+MaxAllowedDurationSeconds=600
+Categories=EXPECTED_PASS;NEW
+HostStyle=0
+
g_arm64ci_path = os.path.join(os.environ["USERPROFILE"], "bin")
g_dotnet_url = "https://go.microsoft.com/fwlink/?LinkID=831469"
-g_test_url = "https://clrjit.blob.core.windows.net/arm64ci/CoreCLRTests-28d04376fe54aea392d75d478bd468f14d134e67.zip"
+g_test_url = "https://clrjit.blob.core.windows.net/arm64ci/CoreCLR-Pri1Testing.zip"
g_x64_client_url = "https://clrjit.blob.core.windows.net/arm64ci/x64_client.zip"
################################################################################
call restore.cmd -RuntimeIdentifier=%rid%
set DoNotEmbedDescriptors=1
cd ..\linker
-..\corebuild\Tools\dotnetcli\dotnet.exe publish -r %rid% -c netcore_Relase
+..\corebuild\Tools\dotnetcli\dotnet.exe publish -r %rid% -c netcore_Release
popd
echo Built %cd%\linker\linker\bin\netcore_Release\netcoreapp2.0\%rid%\publish\illink.exe
+
:Done
exit /b 0
# Argument variables
clone=
setenv=
-os='ubuntu.16.04'
+os='ubuntu'
arch='x64'
for i in "$@"
;;
--clone)
- echo "Need to clone"
clone=1
;;
rid="$os-$arch"
if [ ! -z "$clone" ]; then
- echo "Of Course Not here"
git clone --recursive https://github.com/mono/linker
fi
PARSER.add_argument("-test_dir", dest="test_dir", nargs='?', default=None)
PARSER.add_argument("-commit_hash", dest="commit_hash", nargs='?', default=None)
PARSER.add_argument("-failures_csv", dest="failures_csv", nargs='?', default=None)
+PARSER.add_argument("--unset_new", dest="unset_new", action="store_true", default=False)
ARGS = PARSER.parse_args(sys.argv[1:])
################################################################################
old_metadata = [item for item in metadata if item[1] != -1]
with open(file_name, "w") as file_handle:
- file_handle.write("## This list file has been produced automatically. Any changes\n")
- file_handle.write("## are subject to being overwritten when reproducing this file.\n")
- file_handle.write("## \n")
- file_handle.write("## Last Updated: %s\n" % current_time_str)
- file_handle.write("## Commit: %s\n" % ARGS.commit_hash)
- file_handle.write("## \n")
+ file_handle.write("## This list file has been produced automatically. Any changes" + os.pathsep)
+ file_handle.write("## are subject to being overwritten when reproducing this file." + os.pathsep))
+ file_handle.write("## " + os.pathsep))
+ file_handle.write("## Last Updated: %s%s" % (current_time_str, os.pathsep))
+ file_handle.write("## Commit: %s%s" % (ARGS.commit_hash, os.pathsep))
+ file_handle.write("## " + os.pathsep))
order = ["RelativePath", "WorkingDir", "Expected",
"MaxAllowedDurationSeconds", "Categories", "HostStyle"]
attribute_str = ""
for key in order:
- attribute_str += "%s=%s\n" % (key, item[key])
+ attribute_str += "%s=%s%s" % (key, item[key], os.pathsep))
- file_handle.write(attribute_str + "\n")
+ file_handle.write(attribute_str + os.pathsep))
write_metadata(old_metadata)
write_metadata(new_metadata, old_metadata[-1][1] + 1)
test_dir = args.test_dir
old_list_file = args.old_list_file
commit_hash = args.commit_hash
+ unset_new = args.unset_new
if commit_hash is None:
print "Error please provide a commit hash."
new_split = new_metadata["Categories"].split(";")
old_split = old_metadata["Categories"].split(";")
- if "NEW" in old_split:
- old_split.remove("NEW")
+ if unset_new:
+ if "NEW" in old_split:
+ old_split.remove("NEW")
# If an old test is marked as a failing test. Make
# sure that we carry that information along.
joined_categories = set(old_split + new_split)
overwritten = True
- old_metadata[attribute] = ";".join(joined_categories)
+ ordered_categories = []
+ for item in old_split:
+ if item in joined_categories:
+ ordered_categories.append(item)
+ joined_categories.remove(item)
+
+ old_metadata[attribute] = ";".join(ordered_categories)
+ old_metadata[attribute] = old_metadata[attribute] + ";" + ";".join(joined_categories) if len(joined_categories) > 0 else old_metadata[attribute]
old_test_metadata[test_name] = (old_metadata, index)
elif new_metadata[attribute] != old_metadata[attribute]:
if overwritten:
update_count += 1
+ tests_removed = 0
+ tests_to_remove = []
+ for old_test_name in old_test_metadata:
+ # Remove all old unreferenced tests
+ if old_test_name not in test_metadata:
+ tests_to_remove.append(old_test_name)
+ tests_removed += 1
+
+ for test_name in tests_to_remove:
+ old_test_metadata.pop(test_name)
+
print "Added %d tests." % new_test_count
+ print "Removed %d tests." % tests_removed
print "Finished join. %d tests updated." % update_count
test_metadata = old_test_metadata
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LocallocLarge", "JIT\CodeGenBringUpTests\LocallocLarge.csproj", "{C5578A39-72FF-4D25-99DA-96A8A99C6740}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LocallocB_N", "JIT\CodeGenBringUpTests\LocallocB_N.csproj", "{38302715-A140-493E-AEF4-3E8F9EE99195}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LocallocB_N_PSP", "JIT\CodeGenBringUpTests\LocallocB_N_PSP.csproj", "{6222AF08-F765-44C2-B48C-3C040D62303F}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LocallocCnstB117", "JIT\CodeGenBringUpTests\LocallocCnstB117.csproj", "{5A0F2889-91F1-4670-A4AF-9AF0598E22B7}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LocallocCnstB117_PSP", "JIT\CodeGenBringUpTests\LocallocCnstB117_PSP.csproj", "{C82D33B6-5779-4E19-8220-1DEA587203B1}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LocallocCnstB1", "JIT\CodeGenBringUpTests\LocallocCnstB1.csproj", "{4240086D-0722-4E93-A6DD-BF779715CE73}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LocallocCnstB1_PSP", "JIT\CodeGenBringUpTests\LocallocCnstB1_PSP.csproj", "{18F8266B-2F59-4058-8FE6-6B8368CD0D0F}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LocallocCnstB5001", "JIT\CodeGenBringUpTests\LocallocCnstB5001.csproj", "{E7B36F3A-CD18-4F21-8898-CA43C5FDEA1E}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LocallocCnstB5001_PSP", "JIT\CodeGenBringUpTests\LocallocCnstB5001_PSP.csproj", "{1EB5785A-2050-4AD1-820B-F46CCCC3C65A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LocallocCnstB5", "JIT\CodeGenBringUpTests\LocallocCnstB5.csproj", "{061E4E38-14A9-4305-AD27-5A01A95E9FCE}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LocallocCnstB5_PSP", "JIT\CodeGenBringUpTests\LocallocCnstB5_PSP.csproj", "{5F015026-51D0-4EF7-B538-24E8864F31D6}"
+EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LongArgsAndReturn", "JIT\CodeGenBringUpTests\LongArgsAndReturn.csproj", "{FC3E9CEC-7659-471A-8B2E-8CFB3FBFDB4E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lt1", "JIT\CodeGenBringUpTests\Lt1.csproj", "{A7850EBD-6701-473E-8686-99535F0794A6}"
{C6DC8E85-DCD2-49A0-977D-CE9795552632} = {954F04D0-2FFD-4923-BE9A-2F9F58145708}
{8BA7A4A1-EBB6-44CD-828B-F2BA5523691A} = {954F04D0-2FFD-4923-BE9A-2F9F58145708}
{650B07D3-9BC0-4EF8-8557-44200EC13261} = {954F04D0-2FFD-4923-BE9A-2F9F58145708}
+ {38302715-A140-493E-AEF4-3E8F9EE99195} = {954F04D0-2FFD-4923-BE9A-2F9F58145708}
+ {6222AF08-F765-44C2-B48C-3C040D62303F} = {954F04D0-2FFD-4923-BE9A-2F9F58145708}
+ {5A0F2889-91F1-4670-A4AF-9AF0598E22B7} = {954F04D0-2FFD-4923-BE9A-2F9F58145708}
+ {C82D33B6-5779-4E19-8220-1DEA587203B1} = {954F04D0-2FFD-4923-BE9A-2F9F58145708}
+ {4240086D-0722-4E93-A6DD-BF779715CE73} = {954F04D0-2FFD-4923-BE9A-2F9F58145708}
+ {18F8266B-2F59-4058-8FE6-6B8368CD0D0F} = {954F04D0-2FFD-4923-BE9A-2F9F58145708}
+ {E7B36F3A-CD18-4F21-8898-CA43C5FDEA1E} = {954F04D0-2FFD-4923-BE9A-2F9F58145708}
+ {1EB5785A-2050-4AD1-820B-F46CCCC3C65A} = {954F04D0-2FFD-4923-BE9A-2F9F58145708}
+ {061E4E38-14A9-4305-AD27-5A01A95E9FCE} = {954F04D0-2FFD-4923-BE9A-2F9F58145708}
+ {5F015026-51D0-4EF7-B538-24E8864F31D6} = {954F04D0-2FFD-4923-BE9A-2F9F58145708}
{C5578A39-72FF-4D25-99DA-96A8A99C6740} = {954F04D0-2FFD-4923-BE9A-2F9F58145708}
{FC3E9CEC-7659-471A-8B2E-8CFB3FBFDB4E} = {954F04D0-2FFD-4923-BE9A-2F9F58145708}
{A7850EBD-6701-473E-8686-99535F0794A6} = {954F04D0-2FFD-4923-BE9A-2F9F58145708}
# Include all .exe files in this directory as entry points (some tests had multiple .exe file modules)
for bin in *.exe *.dll;
do
- Assemblies="$Assemblies -a $bin"
+ Assemblies="$Assemblies -a ${bin%.*}"
done
# Run dotnet-linker
<Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
</ItemGroup>
<ItemGroup>
- <ProjectReference Include="..\..\..\Common\CoreCLRTestLibrary\CoreCLRTestLibrary.csproj">
+ <ProjectReference Include="..\..\Common\CoreCLRTestLibrary\CoreCLRTestLibrary.csproj">
<Project>{c8c0dc74-fac4-45b1-81fe-70c4808366e0}</Project>
<Name>CoreCLRTestLibrary</Name>
</ProjectReference>
--- /dev/null
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+//
+
+
+using System;
+using System.Runtime.CompilerServices;
+public class BringUpTest
+{
+ const int Pass = 100;
+ const int Fail = -1;
+
+ // Reduce all values to byte
+ [MethodImplAttribute(MethodImplOptions.NoInlining)]
+ public static unsafe bool CHECK(byte check, byte expected) {
+ return check == expected;
+ }
+
+ [MethodImplAttribute(MethodImplOptions.NoInlining)]
+ public static unsafe int LocallocB_N(int n)
+ {
+ byte* a = stackalloc byte[n];
+
+ for (int i = 0; i < n; i++)
+ {
+ a[i] = (byte) i;
+ }
+
+ for (int i = 0; i < n; i++)
+ {
+ if (!CHECK(a[i], (byte) i)) return i;
+ }
+
+ return -1;
+ }
+
+ public static int Main()
+ {
+ int ret;
+
+ ret = LocallocB_N(1);
+ if (ret != -1) {
+ Console.WriteLine("LocallocB_N - Test 1: Failed on index: " + ret);
+ return Fail;
+ }
+
+ ret = LocallocB_N(5);
+ if (ret != -1) {
+ Console.WriteLine("LocallocB_N - Test 2: Failed on index: " + ret);
+ return Fail;
+ }
+
+ ret = LocallocB_N(117);
+ if (ret != -1) {
+ Console.WriteLine("LocallocB_N - Test 3: Failed on index: " + ret);
+ return Fail;
+ }
+
+ ret = LocallocB_N(5001);
+ if (ret != -1) {
+ Console.WriteLine("LocallocB_N - Test 4: Failed on index: " + ret);
+ return Fail;
+ }
+
+ return Pass;
+ }
+}
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{38302715-A140-493E-AEF4-3E8F9EE99195}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ </PropertyGroup>
+ <!-- Default configurations to help VS understand the configurations -->
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ </PropertyGroup>
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="LocallocB_N.cs" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+ <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+ </PropertyGroup>
+</Project>
\ No newline at end of file
--- /dev/null
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+//
+
+
+using System;
+using System.Runtime.CompilerServices;
+public class BringUpTest
+{
+ const int Pass = 100;
+ const int Fail = -1;
+
+ // Reduce all values to byte
+ [MethodImplAttribute(MethodImplOptions.NoInlining)]
+ public static unsafe bool CHECK(byte check, byte expected) {
+ return check == expected;
+ }
+
+ [MethodImplAttribute(MethodImplOptions.NoInlining)]
+ public static unsafe int LocallocB_N_PSP(int n)
+ {
+ byte* a = stackalloc byte[n];
+ int i;
+ for (i = 0; i < n; i++)
+ {
+ a[i] = (byte) i;
+ }
+
+ i = 0;
+ try
+ {
+ for (; i < n; i++)
+ {
+ if (!CHECK(a[i], (byte) i)) return i;
+ }
+ }
+ catch
+ {
+ Console.WriteLine("ERROR!!!");
+ return i;
+ }
+
+ return -1;
+ }
+
+ public static int Main()
+ {
+ int ret;
+
+ ret = LocallocB_N_PSP(1);
+ if (ret != -1) {
+ Console.WriteLine("LocallocB_N_PSP - Test 1: Failed on index: " + ret);
+ return Fail;
+ }
+
+ ret = LocallocB_N_PSP(5);
+ if (ret != -1) {
+ Console.WriteLine("LocallocB_N_PSP - Test 2: Failed on index: " + ret);
+ return Fail;
+ }
+
+ ret = LocallocB_N_PSP(117);
+ if (ret != -1) {
+ Console.WriteLine("LocallocB_N_PSP - Test 3: Failed on index: " + ret);
+ return Fail;
+ }
+
+ ret = LocallocB_N_PSP(5001);
+ if (ret != -1) {
+ Console.WriteLine("LocallocB_N_PSP - Test 4: Failed on index: " + ret);
+ return Fail;
+ }
+
+ return Pass;
+ }
+}
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{6222AF08-F765-44C2-B48C-3C040D62303F}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ </PropertyGroup>
+ <!-- Default configurations to help VS understand the configurations -->
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ </PropertyGroup>
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="LocallocB_N_PSP.cs" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+ <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+ </PropertyGroup>
+</Project>
\ No newline at end of file
--- /dev/null
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+//
+
+
+using System;
+using System.Runtime.CompilerServices;
+public class BringUpTest
+{
+ const int Pass = 100;
+ const int Fail = -1;
+
+ // Reduce all values to byte
+ [MethodImplAttribute(MethodImplOptions.NoInlining)]
+ public static unsafe bool CHECK(byte check, byte expected) {
+ return check == expected;
+ }
+
+ [MethodImplAttribute(MethodImplOptions.NoInlining)]
+ public static unsafe int LocallocCnstB1()
+ {
+ byte* a = stackalloc byte[1];
+ for (int i = 0; i < 1; i++)
+ {
+ a[i] = (byte) i;
+ }
+
+ for (int i = 0; i < 1; i++)
+ {
+ if (!CHECK(a[i], (byte) i)) return i;
+ }
+
+ return -1;
+ }
+
+ public static int Main()
+ {
+ int ret;
+
+ ret = LocallocCnstB1();
+ if (ret != -1) {
+ Console.WriteLine("LocallocCnstB1: Failed on index: " + ret);
+ return Fail;
+ }
+
+ return Pass;
+ }
+}
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{4240086D-0722-4E93-A6DD-BF779715CE73}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ </PropertyGroup>
+ <!-- Default configurations to help VS understand the configurations -->
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ </PropertyGroup>
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="LocallocCnstB1.cs" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+ <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+ </PropertyGroup>
+</Project>
\ No newline at end of file
--- /dev/null
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+//
+
+
+using System;
+using System.Runtime.CompilerServices;
+public class BringUpTest
+{
+ const int Pass = 100;
+ const int Fail = -1;
+
+ // Reduce all values to byte
+ [MethodImplAttribute(MethodImplOptions.NoInlining)]
+ public static unsafe bool CHECK(byte check, byte expected) {
+ return check == expected;
+ }
+
+ [MethodImplAttribute(MethodImplOptions.NoInlining)]
+ public static unsafe int LocallocCnstB117()
+ {
+ byte* a = stackalloc byte[117];
+ for (int i = 0; i < 117; i++)
+ {
+ a[i] = (byte) i;
+ }
+
+ for (int i = 0; i < 117; i++)
+ {
+ if (!CHECK(a[i], (byte) i)) return i;
+ }
+
+ return -1;
+ }
+
+ public static int Main()
+ {
+ int ret;
+
+ ret = LocallocCnstB117();
+ if (ret != -1) {
+ Console.WriteLine("LocallocCnstB117: Failed on index: " + ret);
+ return Fail;
+ }
+
+ return Pass;
+ }
+}
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{5A0F2889-91F1-4670-A4AF-9AF0598E22B7}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ </PropertyGroup>
+ <!-- Default configurations to help VS understand the configurations -->
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ </PropertyGroup>
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="LocallocCnstB117.cs" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+ <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+ </PropertyGroup>
+</Project>
\ No newline at end of file
--- /dev/null
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+//
+
+
+using System;
+using System.Runtime.CompilerServices;
+public class BringUpTest
+{
+ const int Pass = 100;
+ const int Fail = -1;
+
+ // Reduce all values to byte
+ [MethodImplAttribute(MethodImplOptions.NoInlining)]
+ public static unsafe bool CHECK(byte check, byte expected) {
+ return check == expected;
+ }
+
+ [MethodImplAttribute(MethodImplOptions.NoInlining)]
+ public static unsafe int LocallocCnstB117_PSP()
+ {
+ byte* a = stackalloc byte[117];
+ int i;
+ for (i = 0; i < 117; i++)
+ {
+ a[i] = (byte) i;
+ }
+
+ i = 0;
+ try
+ {
+ for (; i < 117; i++)
+ {
+ if (!CHECK(a[i], (byte) i)) return i;
+ }
+ }
+ catch
+ {
+ Console.WriteLine("ERROR!!!");
+ return i;
+ }
+
+ return -1;
+ }
+
+ public static int Main()
+ {
+ int ret;
+
+ ret = LocallocCnstB117_PSP();
+ if (ret != -1) {
+ Console.WriteLine("LocallocCnstB117_PSP: Failed on index: " + ret);
+ return Fail;
+ }
+
+ return Pass;
+ }
+}
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{C82D33B6-5779-4E19-8220-1DEA587203B1}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ </PropertyGroup>
+ <!-- Default configurations to help VS understand the configurations -->
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ </PropertyGroup>
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="LocallocCnstB117_PSP.cs" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+ <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+ </PropertyGroup>
+</Project>
\ No newline at end of file
--- /dev/null
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+//
+
+
+using System;
+using System.Runtime.CompilerServices;
+public class BringUpTest
+{
+ const int Pass = 100;
+ const int Fail = -1;
+
+ // Reduce all values to byte
+ [MethodImplAttribute(MethodImplOptions.NoInlining)]
+ public static unsafe bool CHECK(byte check, byte expected) {
+ return check == expected;
+ }
+
+ [MethodImplAttribute(MethodImplOptions.NoInlining)]
+ public static unsafe int LocallocCnstB1_PSP()
+ {
+ byte* a = stackalloc byte[1];
+ int i;
+ for (i = 0; i < 1; i++)
+ {
+ a[i] = (byte) i;
+ }
+
+ i = 0;
+ try
+ {
+ for (; i < 1; i++)
+ {
+ if (!CHECK(a[i], (byte) i)) return i;
+ }
+ }
+ catch
+ {
+ Console.WriteLine("ERROR!!!");
+ return i;
+ }
+
+ return -1;
+ }
+
+ public static int Main()
+ {
+ int ret;
+
+ ret = LocallocCnstB1_PSP();
+ if (ret != -1) {
+ Console.WriteLine("LocallocCnstB1_PSP: Failed on index: " + ret);
+ return Fail;
+ }
+
+ return Pass;
+ }
+}
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{18F8266B-2F59-4058-8FE6-6B8368CD0D0F}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ </PropertyGroup>
+ <!-- Default configurations to help VS understand the configurations -->
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ </PropertyGroup>
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="LocallocCnstB1_PSP.cs" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+ <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+ </PropertyGroup>
+</Project>
\ No newline at end of file
--- /dev/null
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+//
+
+
+using System;
+using System.Runtime.CompilerServices;
+public class BringUpTest
+{
+ const int Pass = 100;
+ const int Fail = -1;
+
+ // Reduce all values to byte
+ [MethodImplAttribute(MethodImplOptions.NoInlining)]
+ public static unsafe bool CHECK(byte check, byte expected) {
+ return check == expected;
+ }
+
+ [MethodImplAttribute(MethodImplOptions.NoInlining)]
+ public static unsafe int LocallocCnstB5()
+ {
+ byte* a = stackalloc byte[5];
+ for (int i = 0; i < 5; i++)
+ {
+ a[i] = (byte) i;
+ }
+
+ for (int i = 0; i < 5; i++)
+ {
+ if (!CHECK(a[i], (byte) i)) return i;
+ }
+
+ return -1;
+ }
+
+ public static int Main()
+ {
+ int ret;
+
+ ret = LocallocCnstB5();
+ if (ret != -1) {
+ Console.WriteLine("LocallocCnstB5: Failed on index: " + ret);
+ return Fail;
+ }
+
+ return Pass;
+ }
+}
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{061E4E38-14A9-4305-AD27-5A01A95E9FCE}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ </PropertyGroup>
+ <!-- Default configurations to help VS understand the configurations -->
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ </PropertyGroup>
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="LocallocCnstB5.cs" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+ <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+ </PropertyGroup>
+</Project>
\ No newline at end of file
--- /dev/null
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+//
+
+
+using System;
+using System.Runtime.CompilerServices;
+public class BringUpTest
+{
+ const int Pass = 100;
+ const int Fail = -1;
+
+ // Reduce all values to byte
+ [MethodImplAttribute(MethodImplOptions.NoInlining)]
+ public static unsafe bool CHECK(byte check, byte expected) {
+ return check == expected;
+ }
+
+ [MethodImplAttribute(MethodImplOptions.NoInlining)]
+ public static unsafe int LocallocCnstB5001()
+ {
+ byte* a = stackalloc byte[5001];
+ for (int i = 0; i < 5001; i++)
+ {
+ a[i] = (byte) i;
+ }
+
+ for (int i = 0; i < 5001; i++)
+ {
+ if (!CHECK(a[i], (byte) i)) return i;
+ }
+
+ return -1;
+ }
+
+ public static int Main()
+ {
+ int ret;
+
+ ret = LocallocCnstB5001();
+ if (ret != -1) {
+ Console.WriteLine("LocallocCnstB5001: Failed on index: " + ret);
+ return Fail;
+ }
+
+ return Pass;
+ }
+}
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{E7B36F3A-CD18-4F21-8898-CA43C5FDEA1E}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ </PropertyGroup>
+ <!-- Default configurations to help VS understand the configurations -->
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ </PropertyGroup>
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="LocallocCnstB5001.cs" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+ <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+ </PropertyGroup>
+</Project>
\ No newline at end of file
--- /dev/null
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+//
+
+
+using System;
+using System.Runtime.CompilerServices;
+public class BringUpTest
+{
+ const int Pass = 100;
+ const int Fail = -1;
+
+ // Reduce all values to byte
+ [MethodImplAttribute(MethodImplOptions.NoInlining)]
+ public static unsafe bool CHECK(byte check, byte expected) {
+ return check == expected;
+ }
+
+ [MethodImplAttribute(MethodImplOptions.NoInlining)]
+ public static unsafe int LocallocCnstB5001_PSP()
+ {
+ byte* a = stackalloc byte[5001];
+ int i;
+ for (i = 0; i < 5001; i++)
+ {
+ a[i] = (byte) i;
+ }
+
+ i = 0;
+ try
+ {
+ for (; i < 5001; i++)
+ {
+ if (!CHECK(a[i], (byte) i)) return i;
+ }
+ }
+ catch
+ {
+ Console.WriteLine("ERROR!!!");
+ return i;
+ }
+
+ return -1;
+ }
+
+ public static int Main()
+ {
+ int ret;
+
+ ret = LocallocCnstB5001_PSP();
+ if (ret != -1) {
+ Console.WriteLine("LocallocCnstB5001_PSP: Failed on index: " + ret);
+ return Fail;
+ }
+
+ return Pass;
+ }
+}
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{1EB5785A-2050-4AD1-820B-F46CCCC3C65A}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ </PropertyGroup>
+ <!-- Default configurations to help VS understand the configurations -->
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ </PropertyGroup>
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="LocallocCnstB5001_PSP.cs" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+ <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+ </PropertyGroup>
+</Project>
\ No newline at end of file
--- /dev/null
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+//
+
+
+using System;
+using System.Runtime.CompilerServices;
+public class BringUpTest
+{
+ const int Pass = 100;
+ const int Fail = -1;
+
+ // Reduce all values to byte
+ [MethodImplAttribute(MethodImplOptions.NoInlining)]
+ public static unsafe bool CHECK(byte check, byte expected) {
+ return check == expected;
+ }
+
+ [MethodImplAttribute(MethodImplOptions.NoInlining)]
+ public static unsafe int LocallocCnstB5_PSP()
+ {
+ byte* a = stackalloc byte[5];
+ int i;
+ for (i = 0; i < 5; i++)
+ {
+ a[i] = (byte) i;
+ }
+
+ i = 0;
+ try
+ {
+ for (; i < 5; i++)
+ {
+ if (!CHECK(a[i], (byte) i)) return i;
+ }
+ }
+ catch
+ {
+ Console.WriteLine("ERROR!!!");
+ return i;
+ }
+
+ return -1;
+ }
+
+ public static int Main()
+ {
+ int ret;
+
+ ret = LocallocCnstB5_PSP();
+ if (ret != -1) {
+ Console.WriteLine("LocallocCnstB5_PSP: Failed on index: " + ret);
+ return Fail;
+ }
+
+ return Pass;
+ }
+}
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{5F015026-51D0-4EF7-B538-24E8864F31D6}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ </PropertyGroup>
+ <!-- Default configurations to help VS understand the configurations -->
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ </PropertyGroup>
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="LocallocCnstB5_PSP.cs" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+ <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+ </PropertyGroup>
+</Project>
\ No newline at end of file
{
// Code size 154 (0x9a)
.maxstack 3
- .locals init ([0] class [System.Console]System.Exception e)
+ .locals init ([0] class [mscorlib]System.Exception e)
IL_0000: ldstr "Executing Condition18.Test2 - Caller(imperative se"
+ "curity): Arguments: None - ReturnType: 3 byte struct; Callee: Arguments"
+ ": None - ReturnType: 3 byte struct"
ConditionalWeakTable<K,V> tbl = new ConditionalWeakTable<K,V>();
// Try to remove key from an empty dictionary
- Random r = new Random();
-
// Remove should return false
Test.Eval(!tbl.Remove(keys[0]), "Err_005 Expected Remove to return false");
// Try to get non existing key
// TryGetValue should return false and value should contian default(TValue)
- Random r = new Random();
Test.Eval(!tbl.TryGetValue(key, out val), "Err_011 Expected TryGetValue to return false");
Test.Eval(val == null, "Err_012 Expected val to be null");
}