Imported Upstream version 5.12.0.223

Former-commit-id: c3840b30a5998a62e5368c8f88eef1601a6fc491
This commit is contained in:
Xamarin Public Jenkins (auto-signing) 2018-04-27 08:59:58 +00:00
parent d611fefa02
commit 9e13e72606
53 changed files with 284 additions and 46 deletions

View File

@ -1 +1 @@
9544823d03e71dc9059564b8c7fbe8be9483d0bc
18fbfd8270e70f42071ea2077a1d057e42223842

View File

@ -1 +1 @@
28f60a5aa88f85c58ecdc32445f6a814f3a5fdbc
d5bcc43ef87c733105d69a5bcde120c81608f89f

View File

@ -34,7 +34,7 @@ static class Consts
// Use these assembly version constants to make code more maintainable.
//
public const string MonoVersion = "5.12.0.222";
public const string MonoVersion = "5.12.0.223";
public const string MonoCompany = "Mono development team";
public const string MonoProduct = "Mono Common Language Infrastructure";
public const string MonoCopyright = "(c) Various Mono authors";

View File

@ -1 +1 @@
d28b6c3703a58531f125c423c27f8adbde573af9
27fd453a8a108d8d59359580a637bd58c05565e9

View File

@ -1 +1 @@
3604c375f47486e552da59ed4a25284180b314e6
2ef294e45a4cf7f14ae9063fa2ba18d20196dd5e

View File

@ -1 +1 @@
58d245d451489dbeea28505fea734a77300d3616
80e0eec30e4bf790b0b02079dd2ad3124400ab89

View File

@ -1 +1 @@
4c6742c18b8578b8206b12de108cc6a6e225a4ec
95e13d525c52bcd65bd86f6c66f306e4bfff7285

View File

@ -1 +1 @@
dd3b73736ed3fae602f5f62d52f593ca267d37e8
d8e876168b44d4dc88a526a69165ef7e3b519740

View File

@ -1 +1 @@
06506c4a96a36fa5f17807f9c4d9047bc2fa413f
45c7d8d59688f506db9d16ea9a1b854604d1ed6c

View File

@ -1 +1 @@
4ead486d5a9c37a72b0a4e192ba811c507c551f5
f93e3dea1100aa00ec51aa2eb95a392c9be120e3

View File

@ -1 +1 @@
d28b6c3703a58531f125c423c27f8adbde573af9
27fd453a8a108d8d59359580a637bd58c05565e9

View File

@ -1 +1 @@
3604c375f47486e552da59ed4a25284180b314e6
2ef294e45a4cf7f14ae9063fa2ba18d20196dd5e

View File

@ -1 +1 @@
58d245d451489dbeea28505fea734a77300d3616
80e0eec30e4bf790b0b02079dd2ad3124400ab89

View File

@ -1 +1 @@
4c6742c18b8578b8206b12de108cc6a6e225a4ec
95e13d525c52bcd65bd86f6c66f306e4bfff7285

View File

@ -1 +1 @@
dd3b73736ed3fae602f5f62d52f593ca267d37e8
d8e876168b44d4dc88a526a69165ef7e3b519740

View File

@ -1 +1 @@
06506c4a96a36fa5f17807f9c4d9047bc2fa413f
45c7d8d59688f506db9d16ea9a1b854604d1ed6c

View File

@ -1 +1 @@
4ead486d5a9c37a72b0a4e192ba811c507c551f5
f93e3dea1100aa00ec51aa2eb95a392c9be120e3

View File

@ -1 +1 @@
d28b6c3703a58531f125c423c27f8adbde573af9
27fd453a8a108d8d59359580a637bd58c05565e9

View File

@ -1 +1 @@
3604c375f47486e552da59ed4a25284180b314e6
2ef294e45a4cf7f14ae9063fa2ba18d20196dd5e

View File

@ -1 +1 @@
58d245d451489dbeea28505fea734a77300d3616
80e0eec30e4bf790b0b02079dd2ad3124400ab89

View File

@ -1 +1 @@
4c6742c18b8578b8206b12de108cc6a6e225a4ec
95e13d525c52bcd65bd86f6c66f306e4bfff7285

View File

@ -1 +1 @@
dd3b73736ed3fae602f5f62d52f593ca267d37e8
d8e876168b44d4dc88a526a69165ef7e3b519740

View File

@ -1 +1 @@
06506c4a96a36fa5f17807f9c4d9047bc2fa413f
45c7d8d59688f506db9d16ea9a1b854604d1ed6c

View File

@ -1 +1 @@
4ead486d5a9c37a72b0a4e192ba811c507c551f5
f93e3dea1100aa00ec51aa2eb95a392c9be120e3

View File

@ -121,7 +121,8 @@ typedef enum {
/* Subtypes of MONO_WRAPPER_UNKNOWN */
WRAPPER_SUBTYPE_GSHAREDVT_IN_SIG,
WRAPPER_SUBTYPE_GSHAREDVT_OUT_SIG,
WRAPPER_SUBTYPE_INTERP_IN
WRAPPER_SUBTYPE_INTERP_IN,
WRAPPER_SUBTYPE_INTERP_LMF
} WrapperSubtype;
typedef struct {

View File

@ -286,6 +286,9 @@ DECL_OFFSET(CallContext, stack_size)
DECL_OFFSET(CallContext, stack)
#endif
DECL_OFFSET(MonoFtnDesc, arg)
DECL_OFFSET(MonoFtnDesc, addr)
#endif //DISABLE_JIT_OFFSETS
#endif //USED_CROSS_COMPILER_OFFSETS

View File

@ -1 +1 @@
0a964f9d46c0c1c78cb33cad45bd7be6f537dd4f
dc6ccdd9e32db46edaceb26fd359a8890e0a4244

View File

@ -1 +1 @@
3897ff261c812f0c8b906c55bc59b56b9cd568db
50774d9173c34a2729f12201de0a24fba264f540

View File

@ -15,7 +15,7 @@
#ifndef __MONO_EE_H__
#define __MONO_EE_H__
#define MONO_EE_API_VERSION 0x1
#define MONO_EE_API_VERSION 0x3
typedef struct _MonoInterpStackIter MonoInterpStackIter;
@ -27,6 +27,7 @@ struct _MonoInterpStackIter {
typedef gpointer MonoInterpFrameHandle;
struct _MonoEECallbacks {
void (*entry_from_trampoline) (gpointer ccontext, gpointer imethod);
gpointer (*create_method_pointer) (MonoMethod *method, MonoError *error);
MonoObject* (*runtime_invoke) (MonoMethod *method, void *obj, void **params, MonoObject **exc, MonoError *error);
void (*init_delegate) (MonoDelegate *del);
@ -49,6 +50,7 @@ struct _MonoEECallbacks {
void (*frame_arg_to_data) (MonoInterpFrameHandle frame, MonoMethodSignature *sig, int index, gpointer data);
void (*data_to_frame_arg) (MonoInterpFrameHandle frame, MonoMethodSignature *sig, int index, gpointer data);
gpointer (*frame_arg_to_storage) (MonoInterpFrameHandle frame, MonoMethodSignature *sig, int index);
void (*frame_arg_set_storage) (MonoInterpFrameHandle frame, MonoMethodSignature *sig, int index, gpointer storage);
MonoInterpFrameHandle (*frame_get_parent) (MonoInterpFrameHandle frame);
void (*start_single_stepping) (void);
void (*stop_single_stepping) (void);

View File

@ -458,7 +458,11 @@ mono_arch_unwind_frame (MonoDomain *domain, MonoJitTlsData *jit_tls,
guint32 unwind_info_len;
guint8 *unwind_info;
frame->type = FRAME_TYPE_MANAGED;
if (ji->is_trampoline)
frame->type = FRAME_TYPE_TRAMPOLINE;
else
frame->type = FRAME_TYPE_MANAGED;
unwind_info = mono_jinfo_get_unwind_info (ji, &unwind_info_len);

View File

@ -1 +1 @@
cff128861e5b755a79ec07d1bce5fce43e427dad
fc3b9aec0bea8849c001f3ef08f468f0f22b5485

View File

@ -1 +1 @@
91e1e78fbac343ad581d1761878b8f403ce84f1f
293b7302145f5887e3be21fe4157f186f6c0bdc0

View File

@ -1 +1 @@
06e56484c1395a31e102aecbc301bfcb3f2ab7d2
c4f30bb0b37fd257d5b466807cf1c977d6c0af40

View File

@ -361,6 +361,8 @@ typedef struct MonoCompileArch {
#define MONO_ARCH_HAVE_PATCH_CODE_NEW 1
#define MONO_ARCH_HAVE_OP_GENERIC_CLASS_INIT 1
#define MONO_ARCH_HAVE_INTERP_ENTRY_TRAMPOLINE 1
#define MONO_ARCH_HAVE_FTNPTR_ARG_TRAMPOLINE 1
#define MONO_ARCH_HAVE_INTERP_PINVOKE_TRAMP 1
#if defined(TARGET_WATCHOS) || (defined(__linux__) && !defined(TARGET_ANDROID))

View File

@ -1 +1 @@
a83e686bbdd60f7d511d5e1db1d4b014dafb1957
c075fc0459f19d3168cab466518d1d12b02717cf

View File

@ -134,6 +134,7 @@ typedef struct {
#define MONO_ARCH_HAVE_SIGCTX_TO_MONOCTX 1
#define MONO_ARCH_HAVE_CONTEXT_SET_INT_REG 1
#define MONO_ARCH_GSHARED_SUPPORTED 1
#define MONO_ARCH_HAVE_INTERP_ENTRY_TRAMPOLINE 1
#define MONO_ARCH_AOT_SUPPORTED 1
#define MONO_ARCH_LLVM_SUPPORTED 1
#define MONO_ARCH_HAVE_FULL_AOT_TRAMPOLINES 1

View File

@ -593,7 +593,7 @@ mono_find_jit_info_ext (MonoDomain *domain, MonoJitTlsData *jit_tls,
if (prev_ji && (ip > prev_ji->code_start && ((guint8*)ip < ((guint8*)prev_ji->code_start) + prev_ji->code_size)))
ji = prev_ji;
else
ji = mini_jit_info_table_find (domain, (char *)ip, &target_domain);
ji = mini_jit_info_table_find_ext (domain, (char *)ip, TRUE, &target_domain);
if (!target_domain)
target_domain = domain;
@ -1189,7 +1189,10 @@ mono_walk_stack_full (MonoJitStackWalk func, MonoContext *start_ctx, MonoDomain
if (!res)
return;
if ((unwind_options & MONO_UNWIND_LOOKUP_IL_OFFSET) && frame.ji && !frame.ji->is_trampoline) {
if (frame.type == FRAME_TYPE_TRAMPOLINE)
goto next;
if ((unwind_options & MONO_UNWIND_LOOKUP_IL_OFFSET) && frame.ji) {
MonoDebugSourceLocation *source;
source = mono_debug_lookup_source_location (jinfo_get_method (frame.ji), frame.native_offset, domain);
@ -1208,7 +1211,7 @@ mono_walk_stack_full (MonoJitStackWalk func, MonoContext *start_ctx, MonoDomain
frame.il_offset = il_offset;
if ((unwind_options & MONO_UNWIND_LOOKUP_ACTUAL_METHOD) && frame.ji && !frame.ji->is_trampoline) {
if ((unwind_options & MONO_UNWIND_LOOKUP_ACTUAL_METHOD) && frame.ji) {
frame.actual_method = get_method_from_stack_frame (frame.ji, get_generic_info_from_stack_frame (frame.ji, &ctx));
} else {
frame.actual_method = frame.method;
@ -1220,6 +1223,7 @@ mono_walk_stack_full (MonoJitStackWalk func, MonoContext *start_ctx, MonoDomain
if (func (&frame, &ctx, user_data))
return;
next:
if (get_reg_locations) {
for (i = 0; i < MONO_MAX_IREGS; ++i)
if (new_reg_locations [i])

View File

@ -1 +1 @@
dff97edefd1576fbe199e3e8370bd0420aff5353
72a502a095b99e5181288df5a5d9989a45882158

View File

@ -1 +1 @@
bf3d8b37974e590dfaa3878724c9ff2a8945448b
30473fec52330026da763214017ba02e9686702a

View File

@ -141,6 +141,7 @@ mono_create_static_rgctx_trampoline (MonoMethod *m, gpointer addr)
return res;
}
#else
gpointer
mono_create_static_rgctx_trampoline (MonoMethod *m, gpointer addr)
@ -153,6 +154,25 @@ mono_create_static_rgctx_trampoline (MonoMethod *m, gpointer addr)
}
#endif
gpointer
mono_create_ftnptr_arg_trampoline (gpointer arg, gpointer addr)
{
gpointer res;
#ifdef MONO_ARCH_HAVE_FTNPTR_ARG_TRAMPOLINE
if (mono_aot_only)
g_error ("FIXME");
else
res = mono_arch_get_ftnptr_arg_trampoline (arg, addr);
#else
if (mono_aot_only)
res = mono_aot_get_static_rgctx_trampoline (arg, addr);
else
res = mono_arch_get_static_rgctx_trampoline (arg, addr);
#endif
return res;
}
#if 0
#define DEBUG_IMT(stmt) do { stmt; } while (0)
#else

View File

@ -1 +1 @@
042034c359ca78e6a61e590e4c9456e78cb4a5bb
c9ef3d396433f9c5e079412d64ad4a673e61f988

View File

@ -579,6 +579,36 @@ mono_arch_get_static_rgctx_trampoline (gpointer arg, gpointer addr)
return start;
}
/* Same as static rgctx trampoline, but clobbering ARMREG_IP, which is scratch */
gpointer
mono_arch_get_ftnptr_arg_trampoline (gpointer arg, gpointer addr)
{
guint8 *code, *start;
GSList *unwind_ops;
int buf_len = 16;
MonoDomain *domain = mono_domain_get ();
start = code = mono_domain_code_reserve (domain, buf_len);
unwind_ops = mono_arch_get_cie_program ();
ARM_LDR_IMM (code, ARMREG_IP, ARMREG_PC, 0);
ARM_LDR_IMM (code, ARMREG_PC, ARMREG_PC, 0);
*(guint32*)code = (guint32)arg;
code += 4;
*(guint32*)code = (guint32)addr;
code += 4;
g_assert ((code - start) <= buf_len);
mono_arch_flush_icache (start, code - start);
MONO_PROFILER_RAISE (jit_code_buffer, (start, code - start, MONO_PROFILER_CODE_BUFFER_GENERICS_TRAMPOLINE, NULL));
mono_tramp_info_register (mono_tramp_info_create (NULL, start, code - start, NULL, unwind_ops), domain);
return start;
}
gpointer
mono_arch_create_rgctx_lazy_fetch_trampoline (guint32 slot, MonoTrampInfo **info, gboolean aot)
{
@ -920,6 +950,79 @@ mono_arch_get_interp_to_native_trampoline (MonoTrampInfo **info)
#endif /* DISABLE_INTERPRETER */
}
gpointer
mono_arch_get_native_to_interp_trampoline (MonoTrampInfo **info)
{
#ifndef DISABLE_INTERPRETER
guint8 *start = NULL, *code;
MonoJumpInfo *ji = NULL;
GSList *unwind_ops = NULL;
int buf_len, i;
const int fp_reg = ARMREG_R7;
int framesize;
buf_len = 512;
start = code = (guint8 *) mono_global_codeman_reserve (buf_len);
unwind_ops = mono_arch_get_cie_program ();
/* iOS ABI */
ARM_PUSH (code, (1 << fp_reg) | (1 << ARMREG_LR));
mono_add_unwind_op_def_cfa_offset (unwind_ops, code, start, 2 * sizeof (mgreg_t));
mono_add_unwind_op_offset (unwind_ops, code, start, ARMREG_LR, -4);
mono_add_unwind_op_offset (unwind_ops, code, start, fp_reg, -8);
ARM_MOV_REG_REG (code, fp_reg, ARMREG_SP);
mono_add_unwind_op_def_cfa_reg (unwind_ops, code, start, fp_reg);
/* allocate the CallContext on the stack */
framesize = ALIGN_TO (sizeof (CallContext), MONO_ARCH_FRAME_ALIGNMENT);
ARM_SUB_REG_IMM8 (code, ARMREG_SP, ARMREG_SP, framesize);
/* save all general purpose registers into the CallContext */
for (i = 0; i < PARAM_REGS; i++)
ARM_STR_IMM (code, i, ARMREG_SP, MONO_STRUCT_OFFSET (CallContext, gregs) + i * sizeof (mgreg_t));
/* save all floating registers into the CallContext */
for (i = 0; i < FP_PARAM_REGS; i++)
ARM_FSTD (code, i * 2, ARMREG_SP, MONO_STRUCT_OFFSET (CallContext, fregs) + i * sizeof (double));
/* set the stack pointer to the value at call site */
ARM_ADD_REG_IMM8 (code, ARMREG_R0, fp_reg, 2 * sizeof (mgreg_t));
ARM_STR_IMM (code, ARMREG_R0, ARMREG_SP, MONO_STRUCT_OFFSET (CallContext, stack));
/* call interp_entry with the ccontext and rmethod as arguments */
ARM_MOV_REG_REG (code, ARMREG_R0, ARMREG_SP);
ARM_LDR_IMM (code, ARMREG_R1, ARMREG_IP, MONO_STRUCT_OFFSET (MonoFtnDesc, arg));
ARM_LDR_IMM (code, ARMREG_IP, ARMREG_IP, MONO_STRUCT_OFFSET (MonoFtnDesc, addr));
ARM_BLX_REG (code, ARMREG_IP);
/* load the return values from the context */
for (i = 0; i < PARAM_REGS; i++)
ARM_LDR_IMM (code, i, ARMREG_SP, MONO_STRUCT_OFFSET (CallContext, gregs) + i * sizeof (mgreg_t));
for (i = 0; i < FP_PARAM_REGS; i++)
ARM_FLDD (code, i * 2, ARMREG_SP, MONO_STRUCT_OFFSET (CallContext, fregs) + i * sizeof (double));
/* reset stack and return */
ARM_MOV_REG_REG (code, ARMREG_SP, fp_reg);
ARM_POP (code, (1 << fp_reg) | (1 << ARMREG_PC));
g_assert (code - start < buf_len);
mono_arch_flush_icache (start, code - start);
MONO_PROFILER_RAISE (jit_code_buffer, (start, code - start, MONO_PROFILER_CODE_BUFFER_EXCEPTION_HANDLING, NULL));
if (info)
*info = mono_tramp_info_create ("native_to_interp_trampoline", start, code - start, ji, unwind_ops);
return start;
#else
g_assert_not_reached ();
return NULL;
#endif /* DISABLE_INTERPRETER */
}
#else
guchar*
@ -950,6 +1053,13 @@ mono_arch_get_static_rgctx_trampoline (gpointer arg, gpointer addr)
return NULL;
}
gpointer
mono_arch_get_ftnptr_arg_trampoline (gpointer arg, gpointer addr)
{
g_assert_not_reached ();
return NULL;
}
gpointer
mono_arch_create_rgctx_lazy_fetch_trampoline (guint32 slot, MonoTrampInfo **info, gboolean aot)
{
@ -970,6 +1080,13 @@ mono_arch_get_interp_to_native_trampoline (MonoTrampInfo **info)
g_assert_not_reached ();
return NULL;
}
gpointer
mono_arch_get_native_to_interp_trampoline (MonoTrampInfo **info)
{
g_assert_not_reached ();
return NULL;
}
#endif /* DISABLE_JIT */
guint8*

View File

@ -721,6 +721,82 @@ mono_arch_get_interp_to_native_trampoline (MonoTrampInfo **info)
#endif /* DISABLE_INTERPRETER */
}
gpointer
mono_arch_get_native_to_interp_trampoline (MonoTrampInfo **info)
{
#ifndef DISABLE_INTERPRETER
guint8 *start = NULL, *code;
MonoJumpInfo *ji = NULL;
GSList *unwind_ops = NULL;
int buf_len, i;
int framesize, offset, ccontext_offset;
buf_len = 512;
start = code = (guint8 *) mono_global_codeman_reserve (buf_len);
/* Allocate frame (FP + LR + CallContext) */
offset = 2 * sizeof (mgreg_t);
ccontext_offset = offset;
offset += sizeof (CallContext);
framesize = ALIGN_TO (offset, MONO_ARCH_FRAME_ALIGNMENT);
mono_add_unwind_op_def_cfa (unwind_ops, code, start, ARMREG_SP, 0);
arm_subx_imm (code, ARMREG_SP, ARMREG_SP, framesize);
mono_add_unwind_op_def_cfa_offset (unwind_ops, code, start, framesize);
arm_stpx (code, ARMREG_FP, ARMREG_LR, ARMREG_SP, 0);
mono_add_unwind_op_offset (unwind_ops, code, start, ARMREG_LR, -framesize + 8);
mono_add_unwind_op_offset (unwind_ops, code, start, ARMREG_FP, -framesize);
arm_movspx (code, ARMREG_FP, ARMREG_SP);
mono_add_unwind_op_def_cfa_reg (unwind_ops, code, start, ARMREG_FP);
/* save all general purpose registers into the CallContext */
for (i = 0; i < PARAM_REGS + 1; i++)
arm_strx (code, i, ARMREG_FP, ccontext_offset + MONO_STRUCT_OFFSET (CallContext, gregs) + i * sizeof (mgreg_t));
/* save all floating registers into the CallContext */
for (i = 0; i < FP_PARAM_REGS; i++)
arm_strfpx (code, i, ARMREG_FP, ccontext_offset + MONO_STRUCT_OFFSET (CallContext, fregs) + i * sizeof (double));
/* set the stack pointer to the value at call site */
arm_addx_imm (code, ARMREG_R0, ARMREG_FP, framesize);
arm_strx (code, ARMREG_R0, ARMREG_FP, ccontext_offset + MONO_STRUCT_OFFSET (CallContext, stack));
/* call interp_entry with the ccontext and rmethod as arguments */
arm_addx_imm (code, ARMREG_R0, ARMREG_FP, ccontext_offset);
arm_ldrx (code, ARMREG_R1, MONO_ARCH_RGCTX_REG, MONO_STRUCT_OFFSET (MonoFtnDesc, arg));
arm_ldrx (code, ARMREG_IP0, MONO_ARCH_RGCTX_REG, MONO_STRUCT_OFFSET (MonoFtnDesc, addr));
arm_blrx (code, ARMREG_IP0);
/* load the return values from the context */
for (i = 0; i < PARAM_REGS; i++)
arm_ldrx (code, i, ARMREG_FP, ccontext_offset + MONO_STRUCT_OFFSET (CallContext, gregs) + i * sizeof (mgreg_t));
for (i = 0; i < FP_PARAM_REGS; i++)
arm_ldrfpx (code, i, ARMREG_FP, ccontext_offset + MONO_STRUCT_OFFSET (CallContext, fregs) + i * sizeof (double));
/* reset stack and return */
arm_ldpx (code, ARMREG_FP, ARMREG_LR, ARMREG_SP, 0);
arm_addx_imm (code, ARMREG_SP, ARMREG_SP, framesize);
arm_retx (code, ARMREG_LR);
g_assert (code - start < buf_len);
mono_arch_flush_icache (start, code - start);
MONO_PROFILER_RAISE (jit_code_buffer, (start, code - start, MONO_PROFILER_CODE_BUFFER_EXCEPTION_HANDLING, NULL));
if (info)
*info = mono_tramp_info_create ("native_to_interp_trampoline", start, code - start, ji, unwind_ops);
return start;
#else
g_assert_not_reached ();
return NULL;
#endif /* DISABLE_INTERPRETER */
}
#else /* DISABLE_JIT */
guchar*
@ -778,4 +854,12 @@ mono_arch_get_interp_to_native_trampoline (MonoTrampInfo **info)
g_assert_not_reached ();
return NULL;
}
gpointer
mono_arch_get_native_to_interp_trampoline (MonoTrampInfo **info)
{
g_assert_not_reached ();
return NULL;
}
#endif /* !DISABLE_JIT */

View File

@ -1 +1 @@
#define FULL_VERSION "explicit/9150941"
#define FULL_VERSION "explicit/a022829"

Binary file not shown.

View File

@ -1 +1 @@
900d8c124b72c4dd30803a8afb8e9a2a48614bd9
568b60d27dfeed69de4e54005d0ab9bdb52630ee

Binary file not shown.

View File

@ -1 +1 @@
f7c2bb79bc946f6d4bd686ff44fe7ffe32e8dbf0
7754ee7e80a58b21e676fdc99f60ff5d0fcbd1c8

Binary file not shown.

View File

@ -1 +1 @@
3245f7d49da55416c78d07f12d0b2ea70ced3b23
76a6261ab5625732b3876fd8a766a0108a561f4d

View File

@ -6,9 +6,9 @@
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: mono 5.12.0.222\n"
"Project-Id-Version: mono 5.12.0.223\n"
"Report-Msgid-Bugs-To: http://www.mono-project.com/Bugs\n"
"POT-Creation-Date: 2018-04-25 08:14+0000\n"
"POT-Creation-Date: 2018-04-27 08:33+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

Binary file not shown.

View File

@ -1 +1 @@
58e85a4d934ff61d18241e3ecdebf3df6f88e9ba
828a9fb8b9ca87d2b0bfa5228bad5c307559595d