You've already forked linux-packaging-mono
Imported Upstream version 4.6.0.165
Former-commit-id: d509131f71da404210981e7263b375675928eea7
This commit is contained in:
parent
b95516a3dd
commit
c911219690
@@ -131,11 +131,9 @@ DECL_OFFSET(MonoThreadsSync, nest)
|
||||
|
||||
#ifdef HAVE_SGEN_GC
|
||||
DECL_OFFSET(SgenClientThreadInfo, in_critical_region)
|
||||
#ifndef HAVE_KW_THREAD
|
||||
DECL_OFFSET(SgenThreadInfo, tlab_next_addr)
|
||||
DECL_OFFSET(SgenThreadInfo, tlab_next)
|
||||
DECL_OFFSET(SgenThreadInfo, tlab_temp_end)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif //DISABLE METADATA OFFSETS
|
||||
|
||||
|
||||
@@ -994,32 +994,7 @@ static gboolean use_managed_allocator = TRUE;
|
||||
|
||||
#ifdef MANAGED_ALLOCATION
|
||||
|
||||
#ifdef HAVE_KW_THREAD
|
||||
|
||||
#define EMIT_TLS_ACCESS_VAR(_mb, _var) /* nothing to do */
|
||||
|
||||
#define EMIT_TLS_ACCESS_IN_CRITICAL_REGION_ADDR(mb, _var) \
|
||||
do { \
|
||||
mono_mb_emit_byte ((mb), MONO_CUSTOM_PREFIX); \
|
||||
mono_mb_emit_byte ((mb), CEE_MONO_TLS); \
|
||||
mono_mb_emit_i4 ((mb), TLS_KEY_SGEN_IN_CRITICAL_REGION_ADDR); \
|
||||
} while (0)
|
||||
|
||||
#define EMIT_TLS_ACCESS_NEXT_ADDR(mb, _var) do { \
|
||||
mono_mb_emit_byte ((mb), MONO_CUSTOM_PREFIX); \
|
||||
mono_mb_emit_byte ((mb), CEE_MONO_TLS); \
|
||||
mono_mb_emit_i4 ((mb), TLS_KEY_SGEN_TLAB_NEXT_ADDR); \
|
||||
} while (0)
|
||||
|
||||
#define EMIT_TLS_ACCESS_TEMP_END(mb, _var) do { \
|
||||
mono_mb_emit_byte ((mb), MONO_CUSTOM_PREFIX); \
|
||||
mono_mb_emit_byte ((mb), CEE_MONO_TLS); \
|
||||
mono_mb_emit_i4 ((mb), TLS_KEY_SGEN_TLAB_TEMP_END); \
|
||||
} while (0)
|
||||
|
||||
#else
|
||||
|
||||
#if defined(TARGET_OSX) || defined(TARGET_WIN32) || defined(TARGET_ANDROID) || defined(TARGET_IOS)
|
||||
#if defined(HAVE_KW_THREAD) || defined(TARGET_OSX) || defined(TARGET_WIN32) || defined(TARGET_ANDROID) || defined(TARGET_IOS)
|
||||
|
||||
// Cache the SgenThreadInfo pointer in a local 'var'.
|
||||
#define EMIT_TLS_ACCESS_VAR(mb, var) \
|
||||
@@ -1040,9 +1015,8 @@ static gboolean use_managed_allocator = TRUE;
|
||||
|
||||
#define EMIT_TLS_ACCESS_NEXT_ADDR(mb, var) do { \
|
||||
mono_mb_emit_ldloc ((mb), (var)); \
|
||||
mono_mb_emit_icon ((mb), MONO_STRUCT_OFFSET (SgenThreadInfo, tlab_next_addr)); \
|
||||
mono_mb_emit_icon ((mb), MONO_STRUCT_OFFSET (SgenThreadInfo, tlab_next)); \
|
||||
mono_mb_emit_byte ((mb), CEE_ADD); \
|
||||
mono_mb_emit_byte ((mb), CEE_LDIND_I); \
|
||||
} while (0)
|
||||
|
||||
#define EMIT_TLS_ACCESS_TEMP_END(mb, var) do { \
|
||||
@@ -1057,7 +1031,6 @@ static gboolean use_managed_allocator = TRUE;
|
||||
#define EMIT_TLS_ACCESS_NEXT_ADDR(mb, _var) do { g_error ("sgen is not supported when using --with-tls=pthread.\n"); } while (0)
|
||||
#define EMIT_TLS_ACCESS_TEMP_END(mb, _var) do { g_error ("sgen is not supported when using --with-tls=pthread.\n"); } while (0)
|
||||
#define EMIT_TLS_ACCESS_IN_CRITICAL_REGION_ADDR(mb, _var) do { g_error ("sgen is not supported when using --with-tls=pthread.\n"); } while (0)
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1145,6 +1118,10 @@ create_allocator (int atype, ManagedAllocatorVariant variant)
|
||||
goto done;
|
||||
}
|
||||
|
||||
/*
|
||||
* Tls access might call foreign code or code without jinfo. This can
|
||||
* only happen if we are outside of the critical region.
|
||||
*/
|
||||
EMIT_TLS_ACCESS_VAR (mb, thread_var);
|
||||
|
||||
#ifdef MANAGED_ALLOCATOR_CAN_USE_CRITICAL_REGION
|
||||
@@ -1507,10 +1484,10 @@ mono_gc_get_managed_allocator_by_type (int atype, ManagedAllocatorVariant varian
|
||||
MonoMethod *res;
|
||||
MonoMethod **cache;
|
||||
|
||||
if (!use_managed_allocator)
|
||||
if (variant == MANAGED_ALLOCATOR_REGULAR && !use_managed_allocator)
|
||||
return NULL;
|
||||
|
||||
if (!mono_runtime_has_tls_get ())
|
||||
if (variant == MANAGED_ALLOCATOR_REGULAR && !mono_runtime_has_tls_get ())
|
||||
return NULL;
|
||||
|
||||
switch (variant) {
|
||||
@@ -2990,7 +2967,7 @@ mono_gc_base_init (void)
|
||||
|
||||
#if defined(HAVE_KW_THREAD)
|
||||
/* This can happen with using libmonosgen.so */
|
||||
if (mono_tls_key_get_offset (TLS_KEY_SGEN_TLAB_NEXT_ADDR) == -1)
|
||||
if (mono_tls_key_get_offset (TLS_KEY_SGEN_THREAD_INFO) == -1)
|
||||
sgen_set_use_managed_allocator (FALSE);
|
||||
#endif
|
||||
|
||||
|
||||
@@ -824,7 +824,7 @@ EXTRA_DIST = TestDriver.cs \
|
||||
Makefile.am.in
|
||||
|
||||
version.h: Makefile
|
||||
echo "#define FULL_VERSION \"Stable 4.6.0.150/d0fc1a6\"" > version.h
|
||||
echo "#define FULL_VERSION \"Stable 4.6.0.165/23c6a4d\"" > version.h
|
||||
|
||||
# Utility target for patching libtool to speed up linking
|
||||
patch-libtool:
|
||||
|
||||
@@ -824,7 +824,7 @@ EXTRA_DIST = TestDriver.cs \
|
||||
Makefile.am.in
|
||||
|
||||
version.h: Makefile
|
||||
echo "#define FULL_VERSION \"Stable 4.6.0.150/d0fc1a6\"" > version.h
|
||||
echo "#define FULL_VERSION \"Stable 4.6.0.165/23c6a4d\"" > version.h
|
||||
|
||||
# Utility target for patching libtool to speed up linking
|
||||
patch-libtool:
|
||||
|
||||
@@ -1 +1 @@
|
||||
8661c97fc5b49dd62fa3c458b6a8636dacd3a88d
|
||||
0a7bed95863ec573d057b5483fa32bf8b8784029
|
||||
@@ -1 +1 @@
|
||||
5dc9da91ce53bbcc4a67ac0d7bf46f54bfa0119e
|
||||
04d5b1fd041a94fe234652daf1ae896b2891ee66
|
||||
@@ -459,26 +459,26 @@ atomic_exchange_i8: dest:i src1:i src2:i len:32
|
||||
atomic_cas_i4: dest:i src1:i src2:i src3:i len:32
|
||||
atomic_cas_i8: dest:i src1:i src2:i src3:i len:32
|
||||
memory_barrier: len:8 clob:a
|
||||
atomic_load_i1: dest:i src1:b len:20
|
||||
atomic_load_u1: dest:i src1:b len:20
|
||||
atomic_load_i2: dest:i src1:b len:20
|
||||
atomic_load_u2: dest:i src1:b len:20
|
||||
atomic_load_i4: dest:i src1:b len:16
|
||||
atomic_load_u4: dest:i src1:b len:16
|
||||
atomic_load_i8: dest:i src1:b len:12
|
||||
atomic_load_u8: dest:i src1:b len:12
|
||||
atomic_load_r4: dest:f src1:b len:24
|
||||
atomic_load_r8: dest:f src1:b len:20
|
||||
atomic_store_i1: dest:b src1:i len:16
|
||||
atomic_store_u1: dest:b src1:i len:16
|
||||
atomic_store_i2: dest:b src1:i len:16
|
||||
atomic_store_u2: dest:b src1:i len:16
|
||||
atomic_store_i4: dest:b src1:i len:16
|
||||
atomic_store_u4: dest:b src1:i len:16
|
||||
atomic_store_i8: dest:b src1:i len:12
|
||||
atomic_store_u8: dest:b src1:i len:12
|
||||
atomic_store_r4: dest:b src1:f len:24
|
||||
atomic_store_r8: dest:b src1:f len:20
|
||||
atomic_load_i1: dest:i src1:b len:24
|
||||
atomic_load_u1: dest:i src1:b len:24
|
||||
atomic_load_i2: dest:i src1:b len:24
|
||||
atomic_load_u2: dest:i src1:b len:24
|
||||
atomic_load_i4: dest:i src1:b len:24
|
||||
atomic_load_u4: dest:i src1:b len:24
|
||||
atomic_load_i8: dest:i src1:b len:20
|
||||
atomic_load_u8: dest:i src1:b len:20
|
||||
atomic_load_r4: dest:f src1:b len:28
|
||||
atomic_load_r8: dest:f src1:b len:24
|
||||
atomic_store_i1: dest:b src1:i len:20
|
||||
atomic_store_u1: dest:b src1:i len:20
|
||||
atomic_store_i2: dest:b src1:i len:20
|
||||
atomic_store_u2: dest:b src1:i len:20
|
||||
atomic_store_i4: dest:b src1:i len:20
|
||||
atomic_store_u4: dest:b src1:i len:20
|
||||
atomic_store_i8: dest:b src1:i len:20
|
||||
atomic_store_u8: dest:b src1:i len:20
|
||||
atomic_store_r4: dest:b src1:f len:28
|
||||
atomic_store_r8: dest:b src1:f len:24
|
||||
|
||||
generic_class_init: src1:a len:44 clob:c
|
||||
gc_safe_point: src1:i len:12 clob:c
|
||||
|
||||
@@ -1 +1 @@
|
||||
cb75bdf7a74fda7899a813f97ceae60ad6f7c895
|
||||
688594d96602b50770485925c92a521726edeea7
|
||||
@@ -1 +1 @@
|
||||
237cbd1f9f0cd84a02cf9c448b35d3ee463f467d
|
||||
a76acc17e46cbc10c09f1cf6671e933495786600
|
||||
@@ -1 +1 @@
|
||||
b3f8d8b2972ec79b000a05ec29e18a238c4bb025
|
||||
a26cd536b26205a3f69081a24c42314c0e520704
|
||||
@@ -1 +1 @@
|
||||
#define FULL_VERSION "Stable 4.6.0.150/d0fc1a6"
|
||||
#define FULL_VERSION "Stable 4.6.0.165/23c6a4d"
|
||||
|
||||
@@ -57,27 +57,11 @@ static guint64 stat_bytes_alloced_los = 0;
|
||||
* tlab_real_end points to the end of the TLAB.
|
||||
*/
|
||||
|
||||
/*
|
||||
* FIXME: What is faster, a TLS variable pointing to a structure, or separate TLS
|
||||
* variables for next+temp_end ?
|
||||
*/
|
||||
#ifdef HAVE_KW_THREAD
|
||||
static __thread char *tlab_start;
|
||||
static __thread char *tlab_next;
|
||||
static __thread char *tlab_temp_end;
|
||||
static __thread char *tlab_real_end;
|
||||
/* Used by the managed allocator/wbarrier */
|
||||
static __thread char **tlab_next_addr MONO_ATTR_USED;
|
||||
#ifndef SGEN_WITHOUT_MONO
|
||||
static __thread volatile int *in_critical_region_addr MONO_ATTR_USED;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_KW_THREAD
|
||||
#define TLAB_START tlab_start
|
||||
#define TLAB_NEXT tlab_next
|
||||
#define TLAB_TEMP_END tlab_temp_end
|
||||
#define TLAB_REAL_END tlab_real_end
|
||||
#define TLAB_START (sgen_thread_info->tlab_start)
|
||||
#define TLAB_NEXT (sgen_thread_info->tlab_next)
|
||||
#define TLAB_TEMP_END (sgen_thread_info->tlab_temp_end)
|
||||
#define TLAB_REAL_END (sgen_thread_info->tlab_real_end)
|
||||
#else
|
||||
#define TLAB_START (__thread_info__->tlab_start)
|
||||
#define TLAB_NEXT (__thread_info__->tlab_next)
|
||||
@@ -490,26 +474,6 @@ sgen_alloc_obj_mature (GCVTable vtable, size_t size)
|
||||
return res;
|
||||
}
|
||||
|
||||
void
|
||||
sgen_init_tlab_info (SgenThreadInfo* info)
|
||||
{
|
||||
#ifndef HAVE_KW_THREAD
|
||||
SgenThreadInfo *__thread_info__ = info;
|
||||
#endif
|
||||
|
||||
info->tlab_start_addr = &TLAB_START;
|
||||
info->tlab_next_addr = &TLAB_NEXT;
|
||||
info->tlab_temp_end_addr = &TLAB_TEMP_END;
|
||||
info->tlab_real_end_addr = &TLAB_REAL_END;
|
||||
|
||||
#ifdef HAVE_KW_THREAD
|
||||
tlab_next_addr = &tlab_next;
|
||||
#ifndef SGEN_WITHOUT_MONO
|
||||
in_critical_region_addr = &info->client_info.in_critical_region;
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* Clear the thread local TLAB variables for all threads.
|
||||
*/
|
||||
@@ -518,30 +482,16 @@ sgen_clear_tlabs (void)
|
||||
{
|
||||
FOREACH_THREAD (info) {
|
||||
/* A new TLAB will be allocated when the thread does its first allocation */
|
||||
*info->tlab_start_addr = NULL;
|
||||
*info->tlab_next_addr = NULL;
|
||||
*info->tlab_temp_end_addr = NULL;
|
||||
*info->tlab_real_end_addr = NULL;
|
||||
info->tlab_start = NULL;
|
||||
info->tlab_next = NULL;
|
||||
info->tlab_temp_end = NULL;
|
||||
info->tlab_real_end = NULL;
|
||||
} FOREACH_THREAD_END
|
||||
}
|
||||
|
||||
void
|
||||
sgen_init_allocator (void)
|
||||
{
|
||||
#if defined(HAVE_KW_THREAD) && !defined(SGEN_WITHOUT_MONO)
|
||||
int tlab_next_addr_offset = -1;
|
||||
int tlab_temp_end_offset = -1;
|
||||
int in_critical_region_addr_offset = -1;
|
||||
|
||||
MONO_THREAD_VAR_OFFSET (tlab_next_addr, tlab_next_addr_offset);
|
||||
MONO_THREAD_VAR_OFFSET (tlab_temp_end, tlab_temp_end_offset);
|
||||
MONO_THREAD_VAR_OFFSET (in_critical_region_addr, in_critical_region_addr_offset);
|
||||
|
||||
mono_tls_key_set_offset (TLS_KEY_SGEN_TLAB_NEXT_ADDR, tlab_next_addr_offset);
|
||||
mono_tls_key_set_offset (TLS_KEY_SGEN_TLAB_TEMP_END, tlab_temp_end_offset);
|
||||
mono_tls_key_set_offset (TLS_KEY_SGEN_IN_CRITICAL_REGION_ADDR, in_critical_region_addr_offset);
|
||||
#endif
|
||||
|
||||
#ifdef HEAVY_STATISTICS
|
||||
mono_counters_register ("# objects allocated", MONO_COUNTER_GC | MONO_COUNTER_ULONG, &stat_objects_alloced);
|
||||
mono_counters_register ("bytes allocated", MONO_COUNTER_GC | MONO_COUNTER_ULONG, &stat_bytes_alloced);
|
||||
|
||||
@@ -1 +1 @@
|
||||
2a1cd09094a18072d2cc366ab4c686942eee3913
|
||||
921c94696e63d97030b39de7cc7cb998792fc575
|
||||
@@ -382,17 +382,10 @@ void sgen_scan_area_with_callback (char *start, char *end, IterateObjectCallback
|
||||
struct _SgenThreadInfo {
|
||||
SgenClientThreadInfo client_info;
|
||||
|
||||
char **tlab_next_addr;
|
||||
char **tlab_start_addr;
|
||||
char **tlab_temp_end_addr;
|
||||
char **tlab_real_end_addr;
|
||||
|
||||
#ifndef HAVE_KW_THREAD
|
||||
char *tlab_start;
|
||||
char *tlab_next;
|
||||
char *tlab_temp_end;
|
||||
char *tlab_real_end;
|
||||
#endif
|
||||
};
|
||||
|
||||
gboolean sgen_is_worker_thread (MonoNativeThreadId thread);
|
||||
@@ -977,7 +970,6 @@ typedef enum {
|
||||
ATYPE_NUM
|
||||
} SgenAllocatorType;
|
||||
|
||||
void sgen_init_tlab_info (SgenThreadInfo* info);
|
||||
void sgen_clear_tlabs (void);
|
||||
|
||||
GCObject* sgen_alloc_obj (GCVTable vtable, size_t size);
|
||||
|
||||
@@ -23,12 +23,9 @@ typedef enum {
|
||||
TLS_KEY_DOMAIN = 2,
|
||||
TLS_KEY_LMF = 3,
|
||||
TLS_KEY_SGEN_THREAD_INFO = 4,
|
||||
TLS_KEY_SGEN_TLAB_NEXT_ADDR = 5,
|
||||
TLS_KEY_SGEN_TLAB_TEMP_END = 6,
|
||||
TLS_KEY_BOEHM_GC_THREAD = 7,
|
||||
TLS_KEY_LMF_ADDR = 8,
|
||||
TLS_KEY_SGEN_IN_CRITICAL_REGION_ADDR = 9,
|
||||
TLS_KEY_NUM = 10
|
||||
TLS_KEY_BOEHM_GC_THREAD = 5,
|
||||
TLS_KEY_LMF_ADDR = 6,
|
||||
TLS_KEY_NUM = 7
|
||||
} MonoTlsKey;
|
||||
|
||||
#ifdef HOST_WIN32
|
||||
|
||||
Reference in New Issue
Block a user