Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/BuildItem.cs16
-rw-r--r--mcs/class/Microsoft.Build.Engine/Test/Microsoft.Build.BuildEngine/TargetTest.cs27
-rw-r--r--mcs/class/Mono.Debugger.Soft/Test/dtest-app.cs20
-rw-r--r--mcs/class/Mono.Debugger.Soft/Test/dtest.cs22
-rw-r--r--mcs/class/System.XML/System.Xml.Serialization/TypeData.cs14
-rw-r--r--mcs/class/System.XML/System.Xml.Serialization/XmlSerializationReaderInterpreter.cs3
-rw-r--r--mcs/class/System.Xml.Linq/Test/System.Xml.Linq/XElementTest.cs21
-rw-r--r--mcs/class/System/Mono.Btls/MonoBtlsContext.cs11
-rw-r--r--mcs/class/System/Mono.Net.Security/MobileTlsContext.cs12
-rw-r--r--mcs/class/System/System.Net.Sockets/TcpListener.platformnotsupported.cs10
-rw-r--r--mcs/class/System/System.Net.Sockets/UdpClient.platformnotsupported.cs5
-rw-r--r--mcs/class/System/System.Net/HttpListener.platformnotsupported.cs24
-rw-r--r--mcs/class/System/System.Net/HttpListenerContext.platformnotsupported.cs5
-rw-r--r--mcs/class/System/System.Net/HttpWebRequest.platformnotsupported.cs9
-rw-r--r--mono/btls/Makefile.am39
-rw-r--r--mono/btls/btls-time64.c1
-rw-r--r--mono/metadata/object-offsets.h2
-rw-r--r--mono/metadata/threadpool-ms.c8
-rw-r--r--mono/mini/debugger-agent.c5
-rw-r--r--mono/mini/main.c2
-rw-r--r--mono/mini/mini-arm64.c28
-rw-r--r--mono/tests/Makefile.am3
-rw-r--r--mono/tests/appdomain-threadpool-unload.cs52
-rw-r--r--mono/utils/mono-threads-posix.c9
-rw-r--r--scripts/Makefile.am1
-rw-r--r--tools/offsets-tool/Makefile33
-rw-r--r--tools/offsets-tool/MonoAotOffsetsDumper.cs79
27 files changed, 378 insertions, 83 deletions
diff --git a/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/BuildItem.cs b/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/BuildItem.cs
index f663120bf79..82af83b1523 100644
--- a/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/BuildItem.cs
+++ b/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/BuildItem.cs
@@ -227,6 +227,14 @@ namespace Microsoft.Build.BuildEngine {
string metadataValue,
bool treatMetadataValueAsLiteral)
{
+ SetMetadata (metadataName, metadataValue, treatMetadataValueAsLiteral, false);
+ }
+
+ void SetMetadata (string metadataName,
+ string metadataValue,
+ bool treatMetadataValueAsLiteral,
+ bool fromDynamicItem)
+ {
if (metadataName == null)
throw new ArgumentNullException ("metadataName");
@@ -251,9 +259,11 @@ namespace Microsoft.Build.BuildEngine {
} else if (HasParentItem) {
if (parent_item.child_items.Count > 1)
SplitParentItem ();
- parent_item.SetMetadata (metadataName, metadataValue, treatMetadataValueAsLiteral);
+ parent_item.SetMetadata (metadataName, metadataValue, treatMetadataValueAsLiteral, fromDynamicItem);
}
- if (FromXml || HasParentItem) {
+
+ // We don't want to reevalute the project for dynamic items
+ if (!fromDynamicItem && !IsDynamic && (FromXml || HasParentItem)) {
parent_item_group.ParentProject.MarkProjectAsDirty ();
parent_item_group.ParentProject.NeedToReevaluate ();
}
@@ -374,7 +384,7 @@ namespace Microsoft.Build.BuildEngine {
continue;
foreach (string name in evaluatedMetadata.Keys) {
- item.SetMetadata (name, (string)evaluatedMetadata [name]);
+ item.SetMetadata (name, (string)evaluatedMetadata [name], false, IsDynamic);
}
AddAndRemoveMetadata (project, item);
diff --git a/mcs/class/Microsoft.Build.Engine/Test/Microsoft.Build.BuildEngine/TargetTest.cs b/mcs/class/Microsoft.Build.Engine/Test/Microsoft.Build.BuildEngine/TargetTest.cs
index 6c7919e6ae7..c709615d250 100644
--- a/mcs/class/Microsoft.Build.Engine/Test/Microsoft.Build.BuildEngine/TargetTest.cs
+++ b/mcs/class/Microsoft.Build.Engine/Test/Microsoft.Build.BuildEngine/TargetTest.cs
@@ -698,6 +698,33 @@ namespace MonoTests.Microsoft.Build.BuildEngine {
}
[Test]
+ public void ItemGroupInsideTarget_UpdateMetadata ()
+ {
+ ItemGroupInsideTarget (
+ @"<Project ToolsVersion=""4.0"" xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
+ <ItemGroup>
+ <ProjectReference Include='xyz'/>
+ </ItemGroup>
+
+ <Target Name='Main' DependsOnTargets='CreateBar'>
+ <Message Text='Before: $(Bar)'/>
+ <ItemGroup>
+ <ProjectReference>
+ <AdditionalProperties>A=b</AdditionalProperties>
+ </ProjectReference>
+ </ItemGroup>
+ <Message Text='After: $(Bar)'/>
+ </Target>
+
+ <Target Name='CreateBar'>
+ <PropertyGroup>
+ <Bar>Bar01</Bar>
+ </PropertyGroup>
+ </Target>
+ </Project>", 2, "Before: Bar01", "After: Bar01");
+ }
+
+ [Test]
public void ItemGroupInsideTarget_Batching ()
{
ItemGroupInsideTarget (
diff --git a/mcs/class/Mono.Debugger.Soft/Test/dtest-app.cs b/mcs/class/Mono.Debugger.Soft/Test/dtest-app.cs
index cc2ab66960f..e4817ee4be5 100644
--- a/mcs/class/Mono.Debugger.Soft/Test/dtest-app.cs
+++ b/mcs/class/Mono.Debugger.Soft/Test/dtest-app.cs
@@ -430,6 +430,7 @@ public class Tests : TestsBase, ITest2
ss_recursive2 (1);
ss_recursive_chaotic ();
ss_fp_clobber ();
+ ss_no_frames ();
}
[MethodImplAttribute (MethodImplOptions.NoInlining)]
@@ -680,6 +681,25 @@ public class Tests : TestsBase, ITest2
}
[MethodImplAttribute (MethodImplOptions.NoInlining)]
+ public static void ss_no_frames () {
+ Action a = ss_no_frames_2;
+ var ar = a.BeginInvoke (null, null);
+ ar.AsyncWaitHandle.WaitOne ();
+ // Avoid waiting every time this runs
+ if (static_i == 56)
+ Thread.Sleep (200);
+ ss_no_frames_3 ();
+ }
+
+ [MethodImplAttribute (MethodImplOptions.NoInlining)]
+ public static void ss_no_frames_2 () {
+ }
+
+ [MethodImplAttribute (MethodImplOptions.NoInlining)]
+ public static void ss_no_frames_3 () {
+ }
+
+ [MethodImplAttribute (MethodImplOptions.NoInlining)]
public static bool is_even (int i) {
return i % 2 == 0;
}
diff --git a/mcs/class/Mono.Debugger.Soft/Test/dtest.cs b/mcs/class/Mono.Debugger.Soft/Test/dtest.cs
index 1933fc5e827..8f929048d1b 100644
--- a/mcs/class/Mono.Debugger.Soft/Test/dtest.cs
+++ b/mcs/class/Mono.Debugger.Soft/Test/dtest.cs
@@ -891,6 +891,28 @@ public class DebuggerTests
}
[Test]
+ public void SingleSteppingNoFrames () {
+ //
+ // Test what happens when starting a single step operation on a thread
+ // with no managed frames
+ //
+ // Run a delegate on a tp thread
+ var e = run_until ("ss_no_frames_2");
+
+ var this_type = e.Thread.GetFrames ()[0].Method.DeclaringType;
+ this_type.SetValue (this_type.GetField ("static_i"), vm.CreateValue (56));
+
+ var thread = e.Thread;
+ var e2 = run_until ("ss_no_frames_3");
+ // The tp thread should be idle now
+ step_req = vm.CreateStepRequest (thread);
+ step_req.Depth = StepDepth.Over;
+ AssertThrows<Exception> (delegate {
+ step_req.Enable ();
+ });
+ }
+
+ [Test]
public void MethodEntryExit () {
run_until ("single_stepping");
diff --git a/mcs/class/System.XML/System.Xml.Serialization/TypeData.cs b/mcs/class/System.XML/System.Xml.Serialization/TypeData.cs
index f32bb39e091..55de52a7784 100644
--- a/mcs/class/System.XML/System.Xml.Serialization/TypeData.cs
+++ b/mcs/class/System.XML/System.Xml.Serialization/TypeData.cs
@@ -135,10 +135,16 @@ namespace System.Xml.Serialization
void LookupTypeConvertor ()
{
- // We only need this for System.Xml.Linq.
- var convertor = type.GetCustomAttribute<XmlTypeConvertorAttribute> ();
- if (convertor != null)
- typeConvertor = type.GetMethod (convertor.Method, BindingFlags.Static | BindingFlags.NonPublic);
+ // We only need this for System.Xml.Linq
+ var t = type;
+ // HACK: because interpreter array handling is so bad
+ if (t.IsArray)
+ t = t.GetElementType ();
+
+ var convertor = t.GetCustomAttribute<XmlTypeConvertorAttribute> ();
+ if (convertor != null) {
+ typeConvertor = t.GetMethod (convertor.Method, BindingFlags.Static | BindingFlags.NonPublic);
+ }
}
internal void ConvertForAssignment (ref object value)
diff --git a/mcs/class/System.XML/System.Xml.Serialization/XmlSerializationReaderInterpreter.cs b/mcs/class/System.XML/System.Xml.Serialization/XmlSerializationReaderInterpreter.cs
index 5d9e4b24f34..d03dea1ff01 100644
--- a/mcs/class/System.XML/System.Xml.Serialization/XmlSerializationReaderInterpreter.cs
+++ b/mcs/class/System.XML/System.Xml.Serialization/XmlSerializationReaderInterpreter.cs
@@ -737,7 +737,8 @@ namespace System.Xml.Serialization
Type type = listType.Type;
if (type.IsArray)
{
- list = EnsureArrayIndex ((Array)list, index, type.GetElementType());
+ list = EnsureArrayIndex ((Array)list, index, type.GetElementType ());
+ listType.ConvertForAssignment (ref value);
((Array)list).SetValue (value, index);
}
else // Must be IEnumerable
diff --git a/mcs/class/System.Xml.Linq/Test/System.Xml.Linq/XElementTest.cs b/mcs/class/System.Xml.Linq/Test/System.Xml.Linq/XElementTest.cs
index 5415ff8e50a..f93bbabc3d8 100644
--- a/mcs/class/System.Xml.Linq/Test/System.Xml.Linq/XElementTest.cs
+++ b/mcs/class/System.Xml.Linq/Test/System.Xml.Linq/XElementTest.cs
@@ -2099,6 +2099,27 @@ namespace MonoTests.System.Xml.Linq
Assert.AreEqual (xe.Content.ToString (), "<Data />", "#3");
}
+ [XmlType ("Root")]
+ public class DeserializeXElementArray_Data
+ {
+ [XmlAnyElement]
+ public XElement[] Content;
+ }
+
+ [Test]
+ public void DeserializeXElementArray ()
+ {
+ var xmlString = "<Root><Data /></Root>";
+
+ var serializer = new XmlSerializer (typeof (DeserializeXElementArray_Data));
+ var res = serializer.Deserialize (new StringReader (xmlString));
+
+ Assert.IsNotNull (res, "#1");
+ Assert.AreEqual (typeof (DeserializeXElementArray_Data), res.GetType (), "#2");
+ var xe = (DeserializeXElementArray_Data)res;
+ Assert.AreEqual (xe.Content [0].ToString (), "<Data />", "#3");
+ }
+
[Test] // Bug #20151
public void XElementFromArrayWithNullValuesAsObject ()
{
diff --git a/mcs/class/System/Mono.Btls/MonoBtlsContext.cs b/mcs/class/System/Mono.Btls/MonoBtlsContext.cs
index 2df24d9793a..a926124bb56 100644
--- a/mcs/class/System/Mono.Btls/MonoBtlsContext.cs
+++ b/mcs/class/System/Mono.Btls/MonoBtlsContext.cs
@@ -135,7 +135,7 @@ namespace Mono.Btls
if (IsServer) {
SetPrivateCertificate (nativeServerCertificate);
} else {
- ssl.SetServerName (TargetHost);
+ ssl.SetServerName (ServerName);
}
}
@@ -236,14 +236,7 @@ namespace Mono.Btls
if (!IsServer)
ctx.SetSelectCallback (SelectCallback);
- var host = TargetHost;
- if (!string.IsNullOrEmpty (host)) {
- var pos = TargetHost.IndexOf (':');
- if (pos > 0)
- host = host.Substring (0, pos);
- }
-
- ctx.SetVerifyParam (MonoBtlsProvider.GetVerifyParam (host, IsServer));
+ ctx.SetVerifyParam (MonoBtlsProvider.GetVerifyParam (ServerName, IsServer));
TlsProtocolCode minProtocol, maxProtocol;
GetProtocolVersions (out minProtocol, out maxProtocol);
diff --git a/mcs/class/System/Mono.Net.Security/MobileTlsContext.cs b/mcs/class/System/Mono.Net.Security/MobileTlsContext.cs
index f051a5fcbc2..79f0468d461 100644
--- a/mcs/class/System/Mono.Net.Security/MobileTlsContext.cs
+++ b/mcs/class/System/Mono.Net.Security/MobileTlsContext.cs
@@ -35,6 +35,7 @@ namespace Mono.Net.Security
MobileAuthenticatedStream parent;
bool serverMode;
string targetHost;
+ string serverName;
SslProtocols enabledProtocols;
X509Certificate serverCertificate;
X509CertificateCollection clientCertificates;
@@ -54,6 +55,13 @@ namespace Mono.Net.Security
this.clientCertificates = clientCertificates;
this.askForClientCert = askForClientCert;
+ serverName = targetHost;
+ if (!string.IsNullOrEmpty (serverName)) {
+ var pos = serverName.IndexOf (':');
+ if (pos > 0)
+ serverName = serverName.Substring (0, pos);
+ }
+
certificateValidator = CertificateValidationHelper.GetInternalValidator (
parent.Settings, parent.Provider);
}
@@ -92,6 +100,10 @@ namespace Mono.Net.Security
get { return targetHost; }
}
+ protected string ServerName {
+ get { return serverName; }
+ }
+
protected bool AskForClientCertificate {
get { return askForClientCert; }
}
diff --git a/mcs/class/System/System.Net.Sockets/TcpListener.platformnotsupported.cs b/mcs/class/System/System.Net.Sockets/TcpListener.platformnotsupported.cs
index 7b64967345f..76941fc7ce3 100644
--- a/mcs/class/System/System.Net.Sockets/TcpListener.platformnotsupported.cs
+++ b/mcs/class/System/System.Net.Sockets/TcpListener.platformnotsupported.cs
@@ -78,6 +78,16 @@ namespace System.Net.Sockets
throw new PlatformNotSupportedException (EXCEPTION_MESSAGE);
}
+ public void AllowNatTraversal (bool allowed)
+ {
+ throw new PlatformNotSupportedException (EXCEPTION_MESSAGE);
+ }
+
+ public static TcpListener Create (int port)
+ {
+ throw new PlatformNotSupportedException (EXCEPTION_MESSAGE);
+ }
+
~TcpListener ()
{
}
diff --git a/mcs/class/System/System.Net.Sockets/UdpClient.platformnotsupported.cs b/mcs/class/System/System.Net.Sockets/UdpClient.platformnotsupported.cs
index 953350146d2..7a5e2dd740c 100644
--- a/mcs/class/System/System.Net.Sockets/UdpClient.platformnotsupported.cs
+++ b/mcs/class/System/System.Net.Sockets/UdpClient.platformnotsupported.cs
@@ -204,6 +204,11 @@ namespace System.Net.Sockets
set { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); }
}
+ public void AllowNatTraversal (bool allowed)
+ {
+ throw new PlatformNotSupportedException (EXCEPTION_MESSAGE);
+ }
+
public void Dispose ()
{
throw new PlatformNotSupportedException (EXCEPTION_MESSAGE);
diff --git a/mcs/class/System/System.Net/HttpListener.platformnotsupported.cs b/mcs/class/System/System.Net/HttpListener.platformnotsupported.cs
index bffdfbc7011..88ae1d361e3 100644
--- a/mcs/class/System/System.Net/HttpListener.platformnotsupported.cs
+++ b/mcs/class/System/System.Net/HttpListener.platformnotsupported.cs
@@ -26,6 +26,7 @@
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
+using System.Security.Authentication.ExtendedProtection;
using System.Threading.Tasks;
namespace System.Net {
@@ -33,6 +34,8 @@ namespace System.Net {
{
internal const string EXCEPTION_MESSAGE = "System.Net.HttpListener is not supported on the current platform.";
+ public delegate ExtendedProtectionPolicy ExtendedProtectionSelector (HttpListenerRequest request);
+
public HttpListener ()
{
throw new PlatformNotSupportedException (EXCEPTION_MESSAGE);
@@ -75,6 +78,27 @@ namespace System.Net {
set { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); }
}
+ public HttpListenerTimeoutManager TimeoutManager {
+ get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); }
+ }
+
+ public ExtendedProtectionPolicy ExtendedProtectionPolicy
+ {
+ get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); }
+ set { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); }
+ }
+
+ public ExtendedProtectionSelector ExtendedProtectionSelectorDelegate
+ {
+ get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); }
+ set { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); }
+ }
+
+ public ServiceNameCollection DefaultServiceNames
+ {
+ get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); }
+ }
+
public void Abort ()
{
throw new PlatformNotSupportedException (EXCEPTION_MESSAGE);
diff --git a/mcs/class/System/System.Net/HttpListenerContext.platformnotsupported.cs b/mcs/class/System/System.Net/HttpListenerContext.platformnotsupported.cs
index 4c729de26c4..275d6d4ad14 100644
--- a/mcs/class/System/System.Net/HttpListenerContext.platformnotsupported.cs
+++ b/mcs/class/System/System.Net/HttpListenerContext.platformnotsupported.cs
@@ -55,6 +55,11 @@ namespace System.Net {
throw new PlatformNotSupportedException (EXCEPTION_MESSAGE);
}
+ public Task<HttpListenerWebSocketContext> AcceptWebSocketAsync (string subProtocol, TimeSpan keepAliveInterval)
+ {
+ throw new PlatformNotSupportedException (EXCEPTION_MESSAGE);
+ }
+
public Task<HttpListenerWebSocketContext> AcceptWebSocketAsync (string subProtocol, int receiveBufferSize, TimeSpan keepAliveInterval)
{
throw new PlatformNotSupportedException (EXCEPTION_MESSAGE);
diff --git a/mcs/class/System/System.Net/HttpWebRequest.platformnotsupported.cs b/mcs/class/System/System.Net/HttpWebRequest.platformnotsupported.cs
index 3977c7bad9c..590c82b0bd2 100644
--- a/mcs/class/System/System.Net/HttpWebRequest.platformnotsupported.cs
+++ b/mcs/class/System/System.Net/HttpWebRequest.platformnotsupported.cs
@@ -67,12 +67,12 @@ namespace System.Net
get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); }
}
- public bool AllowAutoRedirect {
+ public virtual bool AllowAutoRedirect {
get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); }
set { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); }
}
- public bool AllowWriteStreamBuffering {
+ public virtual bool AllowWriteStreamBuffering {
get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); }
set { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); }
}
@@ -360,6 +360,11 @@ namespace System.Net
throw new PlatformNotSupportedException (EXCEPTION_MESSAGE);
}
+ public System.IO.Stream GetRequestStream (out TransportContext context)
+ {
+ throw new PlatformNotSupportedException (EXCEPTION_MESSAGE);
+ }
+
public override IAsyncResult BeginGetResponse (AsyncCallback callback, object state)
{
throw new PlatformNotSupportedException (EXCEPTION_MESSAGE);
diff --git a/mono/btls/Makefile.am b/mono/btls/Makefile.am
index fa4a949b5fb..6a5b1061320 100644
--- a/mono/btls/Makefile.am
+++ b/mono/btls/Makefile.am
@@ -1,7 +1,44 @@
BTLS_STATIC_LIST = build-static/mono-btls-static-lo.txt
BTLS_SHARED_LIST = build-shared/mono-btls-shared-lo.txt
-BTLS_DEPS = $(BTLS_LIBS) build-shared/Makefile build-static/Makefile
+EXTRA_DIST = \
+ btls-bio.c \
+ btls-bio.h \
+ btls-error.c \
+ btls-error.h \
+ btls-key.c \
+ btls-key.h \
+ btls-pkcs12.c \
+ btls-pkcs12.h \
+ btls-ssl.c \
+ btls-ssl-ctx.c \
+ btls-ssl-ctx.h \
+ btls-ssl.h \
+ btls-time64.c \
+ btls-util.c \
+ btls-util.h \
+ btls-x509.c \
+ btls-x509-chain.c \
+ btls-x509-chain.h \
+ btls-x509-crl.c \
+ btls-x509-crl.h \
+ btls-x509.h \
+ btls-x509-lookup.c \
+ btls-x509-lookup.h \
+ btls-x509-lookup-mono.c \
+ btls-x509-lookup-mono.h \
+ btls-x509-name.c \
+ btls-x509-name.h \
+ btls-x509-revoked.c \
+ btls-x509-revoked.h \
+ btls-x509-store.c \
+ btls-x509-store-ctx.c \
+ btls-x509-store-ctx.h \
+ btls-x509-store.h \
+ btls-x509-verify-param.c \
+ btls-x509-verify-param.h \
+ CMakeLists.txt \
+ create-object-library.sh
CMAKE_VERBOSE=$(if $(V),VERBOSE=1,)
diff --git a/mono/btls/btls-time64.c b/mono/btls/btls-time64.c
index f01e8c0a2b3..5c67546911b 100644
--- a/mono/btls/btls-time64.c
+++ b/mono/btls/btls-time64.c
@@ -31,6 +31,7 @@ THE SOFTWARE.
#include <assert.h>
#include <stdlib.h>
#include <stdio.h>
+#include <stdint.h>
#include <string.h>
#include <time.h>
#include <errno.h>
diff --git a/mono/metadata/object-offsets.h b/mono/metadata/object-offsets.h
index e4965a512a7..5c78288ec8b 100644
--- a/mono/metadata/object-offsets.h
+++ b/mono/metadata/object-offsets.h
@@ -238,6 +238,8 @@ DECL_OFFSET(GSharedVtCallInfo, gsharedvt_in)
#endif
#if defined(TARGET_ARM64)
+DECL_OFFSET (MonoContext, has_fregs)
+
DECL_OFFSET(GSharedVtCallInfo, stack_usage)
DECL_OFFSET(GSharedVtCallInfo, gsharedvt_in)
DECL_OFFSET(GSharedVtCallInfo, ret_marshal)
diff --git a/mono/metadata/threadpool-ms.c b/mono/metadata/threadpool-ms.c
index 3eaa48dc518..666e3739363 100644
--- a/mono/metadata/threadpool-ms.c
+++ b/mono/metadata/threadpool-ms.c
@@ -423,18 +423,20 @@ domain_remove (ThreadPoolDomain *tpdomain)
static ThreadPoolDomain *
domain_get (MonoDomain *domain, gboolean create)
{
- ThreadPoolDomain *tpdomain = NULL;
guint i;
g_assert (domain);
for (i = 0; i < threadpool->domains->len; ++i) {
+ ThreadPoolDomain *tpdomain;
+
tpdomain = (ThreadPoolDomain *)g_ptr_array_index (threadpool->domains, i);
if (tpdomain->domain == domain)
return tpdomain;
}
if (create) {
+ ThreadPoolDomain *tpdomain;
ThreadPoolDomainCleanupSemaphore *cleanup_semaphore;
cleanup_semaphore = g_new0 (ThreadPoolDomainCleanupSemaphore, 1);
cleanup_semaphore->ref = 2;
@@ -446,9 +448,11 @@ domain_get (MonoDomain *domain, gboolean create)
tpdomain = g_new0 (ThreadPoolDomain, 1);
tpdomain->domain = domain;
domain_add (tpdomain);
+
+ return tpdomain;
}
- return tpdomain;
+ return NULL;
}
static void
diff --git a/mono/mini/debugger-agent.c b/mono/mini/debugger-agent.c
index 0a708d48229..747cc484fae 100644
--- a/mono/mini/debugger-agent.c
+++ b/mono/mini/debugger-agent.c
@@ -5398,7 +5398,10 @@ ss_create (MonoInternalThread *thread, StepSize size, StepDepth depth, StepFilte
tls = (DebuggerTlsData *)mono_g_hash_table_lookup (thread_to_tls, thread);
mono_loader_unlock ();
g_assert (tls);
- g_assert (tls->context.valid);
+ if (!tls->context.valid) {
+ DEBUG_PRINTF (1, "Received a single step request on a thread with no managed frames.");
+ return ERR_INVALID_ARGUMENT;
+ }
if (tls->restore_state.valid && MONO_CONTEXT_GET_IP (&tls->context.ctx) != MONO_CONTEXT_GET_IP (&tls->restore_state.ctx)) {
/*
diff --git a/mono/mini/main.c b/mono/mini/main.c
index 80044897a83..77f8bc9578c 100644
--- a/mono/mini/main.c
+++ b/mono/mini/main.c
@@ -151,7 +151,7 @@ bundle_save_library_initialize ()
bundle_save_library_initialized = 1;
char *path = g_build_filename (g_get_tmp_dir (), "mono-bundle-XXXXXX", NULL);
bundled_dylibrary_directory = g_mkdtemp (path);
- g_free (path);
+ /* don't free path - mkdtemp modifies it in place, and bundled_dylibrary_directory is an alias of it */
if (bundled_dylibrary_directory == NULL)
return;
atexit (delete_bundled_libraries);
diff --git a/mono/mini/mini-arm64.c b/mono/mini/mini-arm64.c
index b7652c94f21..b4871f36b91 100644
--- a/mono/mini/mini-arm64.c
+++ b/mono/mini/mini-arm64.c
@@ -1789,25 +1789,21 @@ mono_arch_flush_icache (guint8 *code, gint size)
* icache/dcache cache line sizes, that can vary between cores on
* big.LITTLE architectures. */
guint64 end = (guint64) (code + size);
- guint64 addr, ctr_el0;
- static size_t icache_line_size = 0xffff, dcache_line_size = 0xffff;
- size_t isize, dsize;
-
- asm volatile ("mrs %0, ctr_el0" : "=r" (ctr_el0));
- isize = 4 << ((ctr_el0 >> 0 ) & 0xf);
- dsize = 4 << ((ctr_el0 >> 16) & 0xf);
-
- /* determine the global minimum cache line size */
- icache_line_size = isize = MIN (icache_line_size, isize);
- dcache_line_size = dsize = MIN (dcache_line_size, dsize);
-
- addr = (guint64) code & ~(guint64) (dsize - 1);
- for (; addr < end; addr += dsize)
+ guint64 addr;
+ /* always go with cacheline size of 4 bytes as this code isn't perf critical
+ * anyway. Reading the cache line size from a machine register can be racy
+ * on a big.LITTLE architecture if the cores don't have the same cache line
+ * sizes. */
+ const size_t icache_line_size = 4;
+ const size_t dcache_line_size = 4;
+
+ addr = (guint64) code & ~(guint64) (dcache_line_size - 1);
+ for (; addr < end; addr += dcache_line_size)
asm volatile("dc civac, %0" : : "r" (addr) : "memory");
asm volatile("dsb ish" : : : "memory");
- addr = (guint64) code & ~(guint64) (isize - 1);
- for (; addr < end; addr += isize)
+ addr = (guint64) code & ~(guint64) (icache_line_size - 1);
+ for (; addr < end; addr += icache_line_size)
asm volatile("ic ivau, %0" : : "r" (addr) : "memory");
asm volatile ("dsb ish" : : : "memory");
diff --git a/mono/tests/Makefile.am b/mono/tests/Makefile.am
index 41e4a9b9a4c..51ceefca2ee 100644
--- a/mono/tests/Makefile.am
+++ b/mono/tests/Makefile.am
@@ -140,7 +140,8 @@ BASE_TEST_MOBILE_STATIC_NOT_SUPPORTED= \
threadpool-exceptions7.cs # Needs AppDomains \
cross-domain.cs # Needs AppDomains \
generic-unloading.2.cs # Needs AppDomains \
- thread6.cs # On MOBILE, ThreadAbortException doesn't have necessary field for this test
+ thread6.cs # On MOBILE, ThreadAbortException doesn't have necessary field for this test \
+ appdomain-threadpool-unload.cs
# Disabled until ?mcs is fixed
# bug-331958.cs
diff --git a/mono/tests/appdomain-threadpool-unload.cs b/mono/tests/appdomain-threadpool-unload.cs
new file mode 100644
index 00000000000..d8a7049af77
--- /dev/null
+++ b/mono/tests/appdomain-threadpool-unload.cs
@@ -0,0 +1,52 @@
+
+using System;
+using System.Linq;
+using System.Threading;
+
+class Driver
+{
+ class ThreadPoolLauncherObject
+ {
+ public volatile int i = 0;
+
+ public ThreadPoolLauncherObject ()
+ {
+ ThreadPool.QueueUserWorkItem (_ => { for (int i = 0; i < 10 * 1000 * 1000; ++i); }, null);
+ }
+ }
+
+ public static void Main ()
+ {
+ int count = 0;
+ object o = new object ();
+
+ foreach (var i in
+ Enumerable.Range (0, 100)
+ .AsParallel ().WithDegreeOfParallelism (Environment.ProcessorCount)
+ .Select (i => {
+ AppDomain ad;
+
+ ad = AppDomain.CreateDomain ("testdomain" + i);
+ ad.CreateInstance (typeof (ThreadPoolLauncherObject).Assembly.FullName, typeof (ThreadPoolLauncherObject).FullName);
+
+ Thread.Sleep (10);
+
+ AppDomain.Unload (ad);
+
+ return i;
+ })
+ .Select (i => {
+ lock (o) {
+ count += 1;
+
+ Console.Write (".");
+ if (count % 25 == 0)
+ Console.WriteLine ();
+ }
+
+ return i;
+ })
+ ) {
+ }
+ }
+}
diff --git a/mono/utils/mono-threads-posix.c b/mono/utils/mono-threads-posix.c
index ce2f58ad138..de38adf1373 100644
--- a/mono/utils/mono-threads-posix.c
+++ b/mono/utils/mono-threads-posix.c
@@ -456,8 +456,13 @@ This begins async resume. This function must do the following:
gboolean
mono_threads_suspend_begin_async_resume (MonoThreadInfo *info)
{
- mono_threads_add_to_pending_operation_set (info);
- return mono_threads_pthread_kill (info, mono_threads_posix_get_restart_signal ()) == 0;
+ int sig = mono_threads_posix_get_restart_signal ();
+
+ if (!mono_threads_pthread_kill (info, sig)) {
+ mono_threads_add_to_pending_operation_set (info);
+ return TRUE;
+ }
+ return FALSE;
}
void
diff --git a/scripts/Makefile.am b/scripts/Makefile.am
index 3174ec4c3fa..39595455dad 100644
--- a/scripts/Makefile.am
+++ b/scripts/Makefile.am
@@ -158,6 +158,7 @@ EXTRA_DIST = \
update_submodules \
mcs.in \
dmcs.in \
+ mono-package-runtime \
mono-test-install \
mono-heapviz \
$(MDOC_COMPAT) \
diff --git a/tools/offsets-tool/Makefile b/tools/offsets-tool/Makefile
index b4c6b68c223..37909156cee 100644
--- a/tools/offsets-tool/Makefile
+++ b/tools/offsets-tool/Makefile
@@ -1,7 +1,34 @@
-CPPSHARP_DIR = CppSharp
+CPPSHARP_BASE_DIR = CppSharp
+
+ifeq ($(OS),Windows_NT)
+ CPPSHARP_OS=windows
+ ifeq ($(PROCESSOR_ARCHITEW6432),AMD64)
+ CPPSHARP_ARCH=64
+ else
+ ifeq ($(PROCESSOR_ARCHITECTURE),AMD64)
+ CPPSHARP_ARCH=64
+ endif
+ ifeq ($(PROCESSOR_ARCHITECTURE),x86)
+ CPPSHARP_ARCH=32
+ endif
+ endif
+else
+ UNAME_S := $(shell uname -s)
+ ifeq ($(UNAME_S),Linux)
+ CPPSHARP_OS=linux
+ CPPSHARP_ARCH=64
+ endif
+ ifeq ($(UNAME_S),Darwin)
+ CPPSHARP_OS=osx
+ CPPSHARP_ARCH=32
+ endif
+endif
+
+CPPSHARP_DIR = $(CPPSHARP_BASE_DIR)/$(CPPSHARP_OS)_$(CPPSHARP_ARCH)
CPPSHARP_REFS = -r:$(CPPSHARP_DIR)/CppSharp.dll \
-r:$(CPPSHARP_DIR)/CppSharp.AST.dll \
+ -r:$(CPPSHARP_DIR)/CppSharp.Parser.dll \
-r:$(CPPSHARP_DIR)/CppSharp.Parser.CSharp.dll \
-r:$(CPPSHARP_DIR)/CppSharp.Generator.dll
@@ -10,8 +37,8 @@ SRC_ROOT = ../..
MONO_OPTIONS_SRC = $(SRC_ROOT)/mcs/class/Mono.Options/Mono.Options/Options.cs
.stamp-clone:
- @if [ ! -d $(CPPSHARP_DIR) ]; then \
- git clone git://github.com/xamarin/CppSharpBinaries.git $(CPPSHARP_DIR) && touch $@; \
+ @if [ ! -d $(CPPSHARP_BASE_DIR) ]; then \
+ git clone -b 60f763a9 --depth 1 git://github.com/xamarin/CppSharpBinaries.git $(CPPSHARP_BASE_DIR) && touch $@; \
fi
MonoAotOffsetsDumper.exe: .stamp-clone MonoAotOffsetsDumper.cs $(MONO_OPTIONS_SRC)
diff --git a/tools/offsets-tool/MonoAotOffsetsDumper.cs b/tools/offsets-tool/MonoAotOffsetsDumper.cs
index e04a23809a5..0f9a984833d 100644
--- a/tools/offsets-tool/MonoAotOffsetsDumper.cs
+++ b/tools/offsets-tool/MonoAotOffsetsDumper.cs
@@ -235,7 +235,7 @@ namespace CppSharp
if (!driver.ParseCode())
return;
- Dump(driver.ASTContext, driver.TargetInfo, target);
+ Dump(driver.Context.ASTContext, driver.Context.TargetInfo, target);
}
}
@@ -244,13 +244,13 @@ namespace CppSharp
foreach (var header in driver.Options.Headers)
{
var source = driver.Project.AddFile(header);
- source.Options = driver.BuildParseOptions(source);
+ source.Options = driver.BuildParserOptions(source);
if (header.Contains ("mini"))
continue;
- source.Options.addDefines ("HAVE_SGEN_GC");
- source.Options.addDefines ("HAVE_MOVING_COLLECTOR");
+ source.Options.AddDefines ("HAVE_SGEN_GC");
+ source.Options.AddDefines ("HAVE_MOVING_COLLECTOR");
}
}
@@ -306,22 +306,24 @@ namespace CppSharp
{
var options = driver.Options;
options.DryRun = true;
- options.Verbose = false;
options.LibraryName = "Mono";
- options.MicrosoftMode = false;
- options.addArguments("-xc");
- options.addArguments("-std=gnu99");
- options.addDefines("CPPSHARP");
+
+ var parserOptions = driver.ParserOptions;
+ parserOptions.Verbose = false;
+ parserOptions.MicrosoftMode = false;
+ parserOptions.AddArguments("-xc");
+ parserOptions.AddArguments("-std=gnu99");
+ parserOptions.AddDefines("CPPSHARP");
foreach (var define in target.Defines)
- options.addDefines(define);
+ parserOptions.AddDefines(define);
SetupToolchainPaths(driver, target);
- SetupMono(options, target);
+ SetupMono(driver, target);
}
- static void SetupMono(DriverOptions options, Target target)
+ static void SetupMono(Driver driver, Target target)
{
string targetPath;
switch (target.Platform) {
@@ -356,7 +358,7 @@ namespace CppSharp
};
foreach (var inc in includeDirs)
- options.addIncludeDirs(inc);
+ driver.ParserOptions.AddIncludeDirs(inc);
var filesToParse = new[]
{
@@ -365,15 +367,15 @@ namespace CppSharp
};
foreach (var file in filesToParse)
- options.Headers.Add(file);
+ driver.Options.Headers.Add(file);
}
static void SetupMSVC(Driver driver, string triple)
{
- var options = driver.Options;
+ var parserOptions = driver.ParserOptions;
- options.Abi = Parser.AST.CppAbi.Microsoft;
- options.MicrosoftMode = true;
+ parserOptions.Abi = Parser.AST.CppAbi.Microsoft;
+ parserOptions.MicrosoftMode = true;
var systemIncludeDirs = new[]
{
@@ -382,9 +384,9 @@ namespace CppSharp
};
foreach (var inc in systemIncludeDirs)
- options.addSystemIncludeDirs(inc);
+ parserOptions.AddSystemIncludeDirs(inc);
- options.addDefines("HOST_WIN32");
+ parserOptions.AddDefines("HOST_WIN32");
}
static void SetupToolchainPaths(Driver driver, Target target)
@@ -487,7 +489,7 @@ namespace CppSharp
static void SetupXcode(Driver driver, Target target)
{
- var options = driver.Options;
+ var parserOptions = driver.ParserOptions;
var builtinsPath = GetXcodeBuiltinIncludesFolder();
string includePath;
@@ -503,12 +505,12 @@ namespace CppSharp
throw new ArgumentOutOfRangeException ();
}
- options.addSystemIncludeDirs(builtinsPath);
- options.addSystemIncludeDirs(includePath);
+ parserOptions.AddSystemIncludeDirs(builtinsPath);
+ parserOptions.AddSystemIncludeDirs(includePath);
- options.NoBuiltinIncludes = true;
- options.NoStandardIncludes = true;
- options.TargetTriple = target.Triple;
+ parserOptions.NoBuiltinIncludes = true;
+ parserOptions.NoStandardIncludes = true;
+ parserOptions.TargetTriple = target.Triple;
}
static string GetAndroidHostToolchainPath()
@@ -555,9 +557,10 @@ namespace CppSharp
static void SetupAndroidNDK(Driver driver, Target target)
{
var options = driver.Options;
+ var parserOptions = driver.ParserOptions;
var builtinsPath = GetAndroidBuiltinIncludesFolder();
- options.addSystemIncludeDirs(builtinsPath);
+ parserOptions.AddSystemIncludeDirs(builtinsPath);
var androidNdkRoot = GetAndroidNdkPath ();
const int androidNdkApiLevel = 21;
@@ -565,11 +568,11 @@ namespace CppSharp
var toolchainPath = Path.Combine(androidNdkRoot, "platforms",
"android-" + androidNdkApiLevel, "arch-" + GetArchFromTriple(target.Triple),
"usr", "include");
- options.addSystemIncludeDirs(toolchainPath);
+ parserOptions.AddSystemIncludeDirs(toolchainPath);
- options.NoBuiltinIncludes = true;
- options.NoStandardIncludes = true;
- options.TargetTriple = target.Triple;
+ parserOptions.NoBuiltinIncludes = true;
+ parserOptions.NoStandardIncludes = true;
+ parserOptions.TargetTriple = target.Triple;
}
static uint GetTypeAlign(ParserTargetInfo target, ParserIntType type)
@@ -638,8 +641,8 @@ namespace CppSharp
{
var targetFile = target.Triple;
- if (!string.IsNullOrEmpty (OutputDir))
- targetFile = Path.Combine (OutputDir, targetFile);
+ if (!string.IsNullOrEmpty (OutputDir))
+ targetFile = Path.Combine (OutputDir, targetFile);
targetFile += ".h";
@@ -754,7 +757,7 @@ namespace CppSharp
var types = new List<string>
{
"MonoObject",
- "MonoObjectHandlePayload",
+ "MonoObjectHandlePayload",
"MonoClass",
"MonoVTable",
"MonoDelegate",
@@ -803,7 +806,7 @@ namespace CppSharp
"SeqPointInfo",
"DynCallArgs",
"MonoLMFTramp",
- };
+ };
DumpClasses(writer, ctx, optionalTypes, optional: true);
@@ -813,8 +816,8 @@ namespace CppSharp
static void DumpStruct(TextWriter writer, Class @class)
{
var name = @class.Name;
- if (name.StartsWith ("_", StringComparison.Ordinal))
- name = name.Substring (1);
+ if (name.StartsWith ("_", StringComparison.Ordinal))
+ name = name.Substring (1);
foreach (var field in @class.Fields)
{
@@ -823,8 +826,10 @@ namespace CppSharp
if (name == "SgenThreadInfo" && field.Name == "regs")
continue;
+ var layout = @class.Layout.Fields.First(f => f.FieldPtr == field.OriginalPtr);
+
writer.WriteLine("DECL_OFFSET2({0},{1},{2})", name, field.Name,
- field.Offset / 8);
+ layout.Offset);
}
}
}