Accepting request 292535 from home:k0da:branches:Mono:Factory
- Cleanup patch numbers - Rebase ppc64 patches based on upstream (commits are 173eaf1dfaf, 7e056cd346c, PR#1479) - 0001-ppc64le-fixes.patch bsc#923558 OBS-URL: https://build.opensuse.org/request/show/292535 OBS-URL: https://build.opensuse.org/package/show/Mono:Factory/mono-core?expand=0&rev=145
This commit is contained in:
parent
4e766ee22d
commit
a16ceea4d9
File diff suppressed because it is too large
Load Diff
@ -1,198 +0,0 @@
|
||||
Use ppc_r12 for some global call sequences
|
||||
|
||||
After the mechanical exchange of ppc_r11 and ppc_r12 we now can use
|
||||
ppc_r12 for global calls to hold the callees address without clobbering
|
||||
r11 (which potentially contains IMT_REG, VTABLE_REG and RGCTX_REG).
|
||||
We don't need to change all indirect calls, only those potentially reaching
|
||||
functions containing a TOC setup based on r12 (in particular functions
|
||||
in shared libs). As the instruction sequence patcher can only deal
|
||||
with one destination register we also need to make some additional
|
||||
calls use r12. We probably should convert all calls that currently
|
||||
use r0 to use r12 if no other conflicts arise but this is enough to build.
|
||||
|
||||
Index: mono-3.4.0/mono/mini/exceptions-ppc.c
|
||||
===================================================================
|
||||
--- mono-3.4.0.orig/mono/mini/exceptions-ppc.c
|
||||
+++ mono-3.4.0/mono/mini/exceptions-ppc.c
|
||||
@@ -391,8 +391,8 @@ mono_arch_get_throw_exception_generic (i
|
||||
ppc_bcctrl (code, PPC_BR_ALWAYS, 0);
|
||||
} else {
|
||||
ppc_load (code, ppc_r3, (gulong)mono_defaults.corlib);
|
||||
- ppc_load_func (code, ppc_r0, mono_exception_from_token);
|
||||
- ppc_mtctr (code, ppc_r0);
|
||||
+ ppc_load_func (code, PPC_CALL_REG, mono_exception_from_token);
|
||||
+ ppc_mtctr (code, PPC_CALL_REG);
|
||||
ppc_bcctrl (code, PPC_BR_ALWAYS, 0);
|
||||
}
|
||||
}
|
||||
@@ -426,8 +426,8 @@ mono_arch_get_throw_exception_generic (i
|
||||
ppc_mtctr (code, ppc_r12);
|
||||
ppc_bcctrl (code, PPC_BR_ALWAYS, 0);
|
||||
} else {
|
||||
- ppc_load_func (code, ppc_r0, mono_ppc_throw_exception);
|
||||
- ppc_mtctr (code, ppc_r0);
|
||||
+ ppc_load_func (code, PPC_CALL_REG, mono_ppc_throw_exception);
|
||||
+ ppc_mtctr (code, PPC_CALL_REG);
|
||||
ppc_bcctrl (code, PPC_BR_ALWAYS, 0);
|
||||
}
|
||||
/* we should never reach this breakpoint */
|
||||
Index: mono-3.4.0/mono/mini/mini-ppc.c
|
||||
===================================================================
|
||||
--- mono-3.4.0.orig/mono/mini/mini-ppc.c
|
||||
+++ mono-3.4.0/mono/mini/mini-ppc.c
|
||||
@@ -1782,8 +1782,8 @@ mono_arch_instrument_prolog (MonoCompile
|
||||
|
||||
ppc_load_ptr (code, ppc_r3, cfg->method);
|
||||
ppc_li (code, ppc_r4, 0); /* NULL ebp for now */
|
||||
- ppc_load_func (code, ppc_r0, func);
|
||||
- ppc_mtlr (code, ppc_r0);
|
||||
+ ppc_load_func (code, PPC_CALL_REG, func);
|
||||
+ ppc_mtlr (code, PPC_CALL_REG);
|
||||
ppc_blrl (code);
|
||||
return code;
|
||||
}
|
||||
@@ -1880,8 +1880,8 @@ mono_arch_instrument_epilog_full (MonoCo
|
||||
}
|
||||
|
||||
ppc_load_ptr (code, ppc_r3, cfg->method);
|
||||
- ppc_load_func (code, ppc_r0, func);
|
||||
- ppc_mtlr (code, ppc_r0);
|
||||
+ ppc_load_func (code, PPC_CALL_REG, func);
|
||||
+ ppc_mtlr (code, PPC_CALL_REG);
|
||||
ppc_blrl (code);
|
||||
|
||||
switch (save_mode) {
|
||||
@@ -2922,7 +2922,7 @@ ppc_patch_full (guchar *code, const guch
|
||||
|
||||
if (!is_fd) {
|
||||
guint8 *buf = (guint8*)&seq [5];
|
||||
- ppc_mr (buf, ppc_r0, ppc_r12);
|
||||
+ ppc_mr (buf, PPC_CALL_REG, ppc_r12);
|
||||
ppc_nop (buf);
|
||||
}
|
||||
} else {
|
||||
@@ -2935,7 +2935,7 @@ ppc_patch_full (guchar *code, const guch
|
||||
/* FIXME: we're assuming we're using r12 here */
|
||||
ppc_load_ptr_sequence (code, ppc_r12, target);
|
||||
#else
|
||||
- ppc_load_ptr_sequence (code, ppc_r0, target);
|
||||
+ ppc_load_ptr_sequence (code, PPC_CALL_REG, target);
|
||||
#endif
|
||||
mono_arch_flush_icache ((guint8*)seq, 28);
|
||||
#else
|
||||
@@ -2951,8 +2951,8 @@ ppc_patch_full (guchar *code, const guch
|
||||
g_assert ((seq [2] >> 26) == 31);
|
||||
g_assert (seq [3] == 0x4e800021 || seq [3] == 0x4e800020 || seq [3] == 0x4e800420);
|
||||
/* FIXME: make this thread safe */
|
||||
- ppc_lis (code, ppc_r0, (guint32)(target) >> 16);
|
||||
- ppc_ori (code, ppc_r0, ppc_r0, (guint32)(target) & 0xffff);
|
||||
+ ppc_lis (code, PPC_CALL_REG, (guint32)(target) >> 16);
|
||||
+ ppc_ori (code, PPC_CALL_REG, PPC_CALL_REG, (guint32)(target) & 0xffff);
|
||||
mono_arch_flush_icache (code - 8, 8);
|
||||
#endif
|
||||
} else {
|
||||
@@ -3370,8 +3370,8 @@ mono_arch_output_basic_block (MonoCompil
|
||||
mono_add_patch_info (cfg, code - cfg->native_code, MONO_PATCH_INFO_INTERNAL_METHOD,
|
||||
(gpointer)"mono_break");
|
||||
if ((FORCE_INDIR_CALL || cfg->method->dynamic) && !cfg->compile_aot) {
|
||||
- ppc_load_func (code, ppc_r0, 0);
|
||||
- ppc_mtlr (code, ppc_r0);
|
||||
+ ppc_load_func (code, PPC_CALL_REG, 0);
|
||||
+ ppc_mtlr (code, PPC_CALL_REG);
|
||||
ppc_blrl (code);
|
||||
} else {
|
||||
ppc_bl (code, 0);
|
||||
@@ -3818,8 +3818,8 @@ mono_arch_output_basic_block (MonoCompil
|
||||
else
|
||||
mono_add_patch_info (cfg, offset, MONO_PATCH_INFO_ABS, call->fptr);
|
||||
if ((FORCE_INDIR_CALL || cfg->method->dynamic) && !cfg->compile_aot) {
|
||||
- ppc_load_func (code, ppc_r0, 0);
|
||||
- ppc_mtlr (code, ppc_r0);
|
||||
+ ppc_load_func (code, PPC_CALL_REG, 0);
|
||||
+ ppc_mtlr (code, PPC_CALL_REG);
|
||||
ppc_blrl (code);
|
||||
} else {
|
||||
ppc_bl (code, 0);
|
||||
@@ -3912,8 +3912,8 @@ mono_arch_output_basic_block (MonoCompil
|
||||
mono_add_patch_info (cfg, code - cfg->native_code, MONO_PATCH_INFO_INTERNAL_METHOD,
|
||||
(gpointer)"mono_arch_throw_exception");
|
||||
if ((FORCE_INDIR_CALL || cfg->method->dynamic) && !cfg->compile_aot) {
|
||||
- ppc_load_func (code, ppc_r0, 0);
|
||||
- ppc_mtlr (code, ppc_r0);
|
||||
+ ppc_load_func (code, PPC_CALL_REG, 0);
|
||||
+ ppc_mtlr (code, PPC_CALL_REG);
|
||||
ppc_blrl (code);
|
||||
} else {
|
||||
ppc_bl (code, 0);
|
||||
@@ -3926,8 +3926,8 @@ mono_arch_output_basic_block (MonoCompil
|
||||
mono_add_patch_info (cfg, code - cfg->native_code, MONO_PATCH_INFO_INTERNAL_METHOD,
|
||||
(gpointer)"mono_arch_rethrow_exception");
|
||||
if ((FORCE_INDIR_CALL || cfg->method->dynamic) && !cfg->compile_aot) {
|
||||
- ppc_load_func (code, ppc_r0, 0);
|
||||
- ppc_mtlr (code, ppc_r0);
|
||||
+ ppc_load_func (code, PPC_CALL_REG, 0);
|
||||
+ ppc_mtlr (code, PPC_CALL_REG);
|
||||
ppc_blrl (code);
|
||||
} else {
|
||||
ppc_bl (code, 0);
|
||||
@@ -5070,8 +5070,8 @@ mono_arch_emit_prolog (MonoCompile *cfg)
|
||||
mono_add_patch_info (cfg, code - cfg->native_code, MONO_PATCH_INFO_INTERNAL_METHOD,
|
||||
(gpointer)"mono_get_lmf_addr");
|
||||
if ((FORCE_INDIR_CALL || cfg->method->dynamic) && !cfg->compile_aot) {
|
||||
- ppc_load_func (code, ppc_r0, 0);
|
||||
- ppc_mtlr (code, ppc_r0);
|
||||
+ ppc_load_func (code, PPC_CALL_REG, 0);
|
||||
+ ppc_mtlr (code, PPC_CALL_REG);
|
||||
ppc_blrl (code);
|
||||
} else {
|
||||
ppc_bl (code, 0);
|
||||
@@ -5380,8 +5380,8 @@ mono_arch_emit_exceptions (MonoCompile *
|
||||
patch_info->data.name = "mono_arch_throw_corlib_exception";
|
||||
patch_info->ip.i = code - cfg->native_code;
|
||||
if (FORCE_INDIR_CALL || cfg->method->dynamic) {
|
||||
- ppc_load_func (code, ppc_r0, 0);
|
||||
- ppc_mtctr (code, ppc_r0);
|
||||
+ ppc_load_func (code, PPC_CALL_REG, 0);
|
||||
+ ppc_mtctr (code, PPC_CALL_REG);
|
||||
ppc_bcctr (code, PPC_BR_ALWAYS, 0);
|
||||
} else {
|
||||
ppc_bl (code, 0);
|
||||
Index: mono-3.4.0/mono/mini/mini-ppc.h
|
||||
===================================================================
|
||||
--- mono-3.4.0.orig/mono/mini/mini-ppc.h
|
||||
+++ mono-3.4.0/mono/mini/mini-ppc.h
|
||||
@@ -172,6 +172,8 @@ typedef struct MonoCompileArch {
|
||||
#define PPC_FIRST_FPARG_REG ppc_f1
|
||||
#endif
|
||||
|
||||
+#define PPC_CALL_REG ppc_r12
|
||||
+
|
||||
#if defined(HAVE_WORKING_SIGALTSTACK) && !defined(__APPLE__)
|
||||
#define MONO_ARCH_SIGSEGV_ON_ALTSTACK 1
|
||||
#define MONO_ARCH_SIGNAL_STACK_SIZE (12 * 1024)
|
||||
Index: mono-3.4.0/mono/mini/tramp-ppc.c
|
||||
===================================================================
|
||||
--- mono-3.4.0.orig/mono/mini/tramp-ppc.c
|
||||
+++ mono-3.4.0/mono/mini/tramp-ppc.c
|
||||
@@ -306,8 +306,8 @@ mono_arch_create_generic_trampoline (Mon
|
||||
ppc_mtlr (code, ppc_r12);
|
||||
ppc_blrl (code);
|
||||
} else {
|
||||
- ppc_load_func (code, ppc_r0, mono_get_lmf_addr);
|
||||
- ppc_mtlr (code, ppc_r0);
|
||||
+ ppc_load_func (code, PPC_CALL_REG, mono_get_lmf_addr);
|
||||
+ ppc_mtlr (code, PPC_CALL_REG);
|
||||
ppc_blrl (code);
|
||||
}
|
||||
/* we build the MonoLMF structure on the stack - see mini-ppc.h
|
||||
@@ -368,8 +368,8 @@ mono_arch_create_generic_trampoline (Mon
|
||||
ppc_blrl (code);
|
||||
} else {
|
||||
tramp_handler = mono_get_trampoline_func (tramp_type);
|
||||
- ppc_load_func (code, ppc_r0, tramp_handler);
|
||||
- ppc_mtlr (code, ppc_r0);
|
||||
+ ppc_load_func (code, PPC_CALL_REG, tramp_handler);
|
||||
+ ppc_mtlr (code, PPC_CALL_REG);
|
||||
ppc_blrl (code);
|
||||
}
|
||||
|
@ -1,256 +0,0 @@
|
||||
Basic ppc64le support
|
||||
|
||||
This adds initial support for ppc64le to the ppc64 port. That is:
|
||||
* little endian aware (also in strtod),
|
||||
* and ELFv2 aware (not using function descriptors)
|
||||
* adjust various block sizes to be multiple of 64k, the default
|
||||
pagesize on ppc64le. The sources should have used the system function
|
||||
to ensure alignment on pagesize, so this is just a stop-gap
|
||||
|
||||
It also corrects the list of registers for the precise GC, but that isn't
|
||||
used in mini at all on any architecture currently.
|
||||
|
||||
Index: mono-3.4.0/mono/arch/ppc/ppc-codegen.h
|
||||
===================================================================
|
||||
--- mono-3.4.0.orig/mono/arch/ppc/ppc-codegen.h
|
||||
+++ mono-3.4.0/mono/arch/ppc/ppc-codegen.h
|
||||
@@ -123,7 +123,7 @@ enum {
|
||||
PPC_TRAP_GE_UN = 16 + PPC_TRAP_EQ
|
||||
};
|
||||
|
||||
-#define ppc_emit32(c,x) do { *((guint32 *) (c)) = GUINT32_TO_BE (x); (c) = (gpointer)((guint8 *)(c) + sizeof (guint32));} while (0)
|
||||
+#define ppc_emit32(c,x) do { *((guint32 *) (c)) = (guint32) (x); (c) = (gpointer)((guint8 *)(c) + sizeof (guint32));} while (0)
|
||||
|
||||
#define ppc_is_imm16(val) ((((val)>> 15) == 0) || (((val)>> 15) == -1))
|
||||
#define ppc_is_uimm16(val) ((glong)(val) >= 0L && (glong)(val) <= 65535L)
|
||||
@@ -806,11 +806,15 @@ my and Ximian's copyright to this code.
|
||||
} \
|
||||
} G_STMT_END
|
||||
|
||||
+#if _CALL_ELF == 2
|
||||
+#define ppc_load_func(c,D,V) ppc_load_sequence ((c), (D), (V))
|
||||
+#else
|
||||
#define ppc_load_func(c,D,v) G_STMT_START { \
|
||||
ppc_load_sequence ((c), ppc_r11, (guint64)(gsize)(v)); \
|
||||
ppc_ldptr ((c), ppc_r2, sizeof (gpointer), ppc_r11); \
|
||||
ppc_ldptr ((c), (D), 0, ppc_r11); \
|
||||
} G_STMT_END
|
||||
+#endif
|
||||
|
||||
#define ppc_load_multiple_regs(c,D,d,A) G_STMT_START { \
|
||||
int __i, __o = (d); \
|
||||
Index: mono-3.4.0/mono/metadata/sgen-marksweep.c
|
||||
===================================================================
|
||||
--- mono-3.4.0.orig/mono/metadata/sgen-marksweep.c
|
||||
+++ mono-3.4.0/mono/metadata/sgen-marksweep.c
|
||||
@@ -45,8 +45,10 @@
|
||||
#define SGEN_HAVE_CONCURRENT_MARK
|
||||
#endif
|
||||
|
||||
-#define MS_BLOCK_SIZE (16*1024)
|
||||
-#define MS_BLOCK_SIZE_SHIFT 14
|
||||
+/* MS_BLOCK_SIZE must be a multiple of the system pagesize, which for some
|
||||
+ archs is 64k. */
|
||||
+#define MS_BLOCK_SIZE (64*1024)
|
||||
+#define MS_BLOCK_SIZE_SHIFT 16
|
||||
#define MAJOR_SECTION_SIZE MS_BLOCK_SIZE
|
||||
#define CARDS_PER_BLOCK (MS_BLOCK_SIZE / CARD_SIZE_IN_BYTES)
|
||||
|
||||
Index: mono-3.4.0/mono/mini/mini-gc.c
|
||||
===================================================================
|
||||
--- mono-3.4.0.orig/mono/mini/mini-gc.c
|
||||
+++ mono-3.4.0/mono/mini/mini-gc.c
|
||||
@@ -439,7 +439,12 @@ static int callee_saved_regs [] = { ARMR
|
||||
#elif defined(TARGET_S390X)
|
||||
static int callee_saved_regs [] = { s390_r6, s390_r7, s390_r8, s390_r9, s390_r10, s390_r11, s390_r12, s390_r13, s390_r14 };
|
||||
#elif defined(TARGET_POWERPC)
|
||||
-static int callee_saved_regs [] = { ppc_r6, ppc_r7, ppc_r8, ppc_r9, ppc_r10, ppc_r11, ppc_r12, ppc_r13, ppc_r14 };
|
||||
+static int callee_saved_regs [] = {
|
||||
+ ppc_r13, ppc_r14, ppc_r15, ppc_r16,
|
||||
+ ppc_r17, ppc_r18, ppc_r19, ppc_r20,
|
||||
+ ppc_r21, ppc_r22, ppc_r23, ppc_r24,
|
||||
+ ppc_r25, ppc_r26, ppc_r27, ppc_r28,
|
||||
+ ppc_r29, ppc_r30, ppc_r31 };
|
||||
#endif
|
||||
|
||||
static guint32
|
||||
Index: mono-3.4.0/mono/mini/mini-ppc.c
|
||||
===================================================================
|
||||
--- mono-3.4.0.orig/mono/mini/mini-ppc.c
|
||||
+++ mono-3.4.0/mono/mini/mini-ppc.c
|
||||
@@ -2811,14 +2811,14 @@ handle_thunk (int absolute, guchar *code
|
||||
static void
|
||||
patch_ins (guint8 *code, guint32 ins)
|
||||
{
|
||||
- *(guint32*)code = GUINT32_TO_BE (ins);
|
||||
+ *(guint32*)code = ins;
|
||||
mono_arch_flush_icache (code, 4);
|
||||
}
|
||||
|
||||
void
|
||||
ppc_patch_full (guchar *code, const guchar *target, gboolean is_fd)
|
||||
{
|
||||
- guint32 ins = GUINT32_FROM_BE (*(guint32*)code);
|
||||
+ guint32 ins = *(guint32*)code;
|
||||
guint32 prim = ins >> 26;
|
||||
guint32 ovf;
|
||||
|
||||
@@ -2901,7 +2901,13 @@ ppc_patch_full (guchar *code, const guch
|
||||
else
|
||||
code -= 24;
|
||||
} else {
|
||||
- if (ppc_is_load_op (seq [5]) || ppc_opcode (seq [5]) == 31) /* ld || lwz || mr */
|
||||
+ if (ppc_is_load_op (seq [5])
|
||||
+#ifdef PPC_USES_FUNCTION_DESCRIPTOR
|
||||
+ /* With function descs we need to do more careful
|
||||
+ matches. */
|
||||
+ || ppc_opcode (seq [5]) == 31 /* ld || lwz || mr */
|
||||
+#endif
|
||||
+ )
|
||||
branch_ins = seq + 8;
|
||||
else
|
||||
branch_ins = seq + 6;
|
||||
@@ -2925,8 +2931,12 @@ ppc_patch_full (guchar *code, const guch
|
||||
}
|
||||
|
||||
/* FIXME: make this thread safe */
|
||||
+#ifdef PPC_USES_FUNCTION_DESCRIPTOR
|
||||
/* FIXME: we're assuming we're using r11 here */
|
||||
ppc_load_ptr_sequence (code, ppc_r11, target);
|
||||
+#else
|
||||
+ ppc_load_ptr_sequence (code, ppc_r0, target);
|
||||
+#endif
|
||||
mono_arch_flush_icache ((guint8*)seq, 28);
|
||||
#else
|
||||
guint32 *seq;
|
||||
@@ -4481,6 +4491,16 @@ mono_arch_register_lowlevel_calls (void)
|
||||
}
|
||||
|
||||
#ifdef __mono_ppc64__
|
||||
+#ifdef _LITTLE_ENDIAN
|
||||
+#define patch_load_sequence(ip,val) do {\
|
||||
+ guint16 *__load = (guint16*)(ip); \
|
||||
+ g_assert (sizeof (val) == sizeof (gsize)); \
|
||||
+ __load [0] = (((guint64)(gsize)(val)) >> 48) & 0xffff; \
|
||||
+ __load [2] = (((guint64)(gsize)(val)) >> 32) & 0xffff; \
|
||||
+ __load [6] = (((guint64)(gsize)(val)) >> 16) & 0xffff; \
|
||||
+ __load [8] = ((guint64)(gsize)(val)) & 0xffff; \
|
||||
+ } while (0)
|
||||
+#elif defined _BIG_ENDIAN
|
||||
#define patch_load_sequence(ip,val) do {\
|
||||
guint16 *__load = (guint16*)(ip); \
|
||||
g_assert (sizeof (val) == sizeof (gsize)); \
|
||||
@@ -4490,6 +4510,9 @@ mono_arch_register_lowlevel_calls (void)
|
||||
__load [9] = ((guint64)(gsize)(val)) & 0xffff; \
|
||||
} while (0)
|
||||
#else
|
||||
+#error huh? No endianess defined by compiler
|
||||
+#endif
|
||||
+#else
|
||||
#define patch_load_sequence(ip,val) do {\
|
||||
guint16 *__lis_ori = (guint16*)(ip); \
|
||||
__lis_ori [1] = (((gulong)(val)) >> 16) & 0xffff; \
|
||||
Index: mono-3.4.0/mono/mini/mini-ppc.h
|
||||
===================================================================
|
||||
--- mono-3.4.0.orig/mono/mini/mini-ppc.h
|
||||
+++ mono-3.4.0/mono/mini/mini-ppc.h
|
||||
@@ -69,7 +69,13 @@ typedef struct MonoCompileArch {
|
||||
#define MONO_ARCH_NO_EMULATE_LONG_SHIFT_OPS
|
||||
#define MONO_ARCH_NO_EMULATE_LONG_MUL_OPTS
|
||||
#define MONO_ARCH_HAVE_ATOMIC_ADD 1
|
||||
+
|
||||
+/* ELFv2 ABI doesn't use function descriptors. */
|
||||
+#if _CALL_ELF == 2
|
||||
+#undef PPC_USES_FUNCTION_DESCRIPTOR
|
||||
+#else
|
||||
#define PPC_USES_FUNCTION_DESCRIPTOR
|
||||
+#endif
|
||||
|
||||
#ifndef __mono_ilp32__
|
||||
#define MONO_ARCH_HAVE_TLS_GET 1
|
||||
Index: mono-3.4.0/mono/mini/mini.c
|
||||
===================================================================
|
||||
--- mono-3.4.0.orig/mono/mini/mini.c
|
||||
+++ mono-3.4.0/mono/mini/mini.c
|
||||
@@ -7004,10 +7004,9 @@ mini_get_debug_options (void)
|
||||
static gpointer
|
||||
mini_create_ftnptr (MonoDomain *domain, gpointer addr)
|
||||
{
|
||||
-#if !defined(__ia64__) && !defined(__ppc64__) && !defined(__powerpc64__)
|
||||
+#if !defined(__ia64__) && (!defined(__ppc64__) && !defined(__powerpc64__) || _CALL_ELF == 2)
|
||||
return addr;
|
||||
#else
|
||||
-
|
||||
gpointer* desc = NULL;
|
||||
|
||||
if ((desc = g_hash_table_lookup (domain->ftnptrs_hash, addr)))
|
||||
@@ -7033,7 +7032,7 @@ mini_create_ftnptr (MonoDomain *domain,
|
||||
static gpointer
|
||||
mini_get_addr_from_ftnptr (gpointer descr)
|
||||
{
|
||||
-#if defined(__ia64__) || defined(__ppc64__) || defined(__powerpc64__)
|
||||
+#if defined(__ia64__) || ((defined(__ppc64__) || defined(__powerpc64__)) && _CALL_ELF != 2)
|
||||
return *(gpointer*)descr;
|
||||
#else
|
||||
return descr;
|
||||
Index: mono-3.4.0/mono/utils/lock-free-alloc.c
|
||||
===================================================================
|
||||
--- mono-3.4.0.orig/mono/utils/lock-free-alloc.c
|
||||
+++ mono-3.4.0/mono/utils/lock-free-alloc.c
|
||||
@@ -123,7 +123,9 @@ struct _MonoLockFreeAllocDescriptor {
|
||||
|
||||
#define NUM_DESC_BATCH 64
|
||||
|
||||
-#define SB_SIZE 16384
|
||||
+/* SB_SIZE must be a multiple of the system pagesize, which for some
|
||||
+ archs is 64k. */
|
||||
+#define SB_SIZE 65536
|
||||
#define SB_HEADER_SIZE 16
|
||||
#define SB_USABLE_SIZE (SB_SIZE - SB_HEADER_SIZE)
|
||||
|
||||
Index: mono-3.4.0/mono/utils/mono-mmap.c
|
||||
===================================================================
|
||||
--- mono-3.4.0.orig/mono/utils/mono-mmap.c
|
||||
+++ mono-3.4.0/mono/utils/mono-mmap.c
|
||||
@@ -332,6 +332,11 @@ mono_valloc (void *addr, size_t length,
|
||||
int
|
||||
mono_vfree (void *addr, size_t length)
|
||||
{
|
||||
+/*if ( (length & (mono_pagesize () - 1)) != 0)
|
||||
+ printf ("XXXX vfree: length not multiple of pagesize\n");
|
||||
+if ( aligned_address (addr, length, mono_pagesize()) != addr)
|
||||
+ printf ("XXXX vfree: addr not aligned to pagesize\n");*/
|
||||
+
|
||||
return munmap (addr, length);
|
||||
}
|
||||
|
||||
Index: mono-3.4.0/mono/utils/strtod.c
|
||||
===================================================================
|
||||
--- mono-3.4.0.orig/mono/utils/strtod.c
|
||||
+++ mono-3.4.0/mono/utils/strtod.c
|
||||
@@ -173,6 +173,12 @@
|
||||
* #define NO_ERRNO if strtod should not assign errno = ERANGE when
|
||||
* the result overflows to +-Infinity or underflows to 0.
|
||||
*/
|
||||
+#if defined __BIG_ENDIAN__ || defined _BIG_ENDIAN
|
||||
+# define IEEE_MC68k
|
||||
+#elif defined __LITTLE_ENDIAN__ || defined _LITTLE_ENDIAN
|
||||
+# define IEEE_8087
|
||||
+#else
|
||||
+
|
||||
#if defined(TARGET_X86) || defined(mips) && defined(MIPSEL) || defined (__arm__)
|
||||
|
||||
# define IEEE_8087
|
||||
@@ -194,9 +200,12 @@
|
||||
# define IEEE_MC68k
|
||||
|
||||
#else
|
||||
+#warning byte order unknown, assuming big endian
|
||||
#define IEEE_MC68k
|
||||
#endif
|
||||
|
||||
+#endif
|
||||
+
|
||||
#define Long gint32
|
||||
#define ULong guint32
|
||||
|
@ -1,3 +1,10 @@
|
||||
-------------------------------------------------------------------
|
||||
Mon Mar 23 22:04:47 UTC 2015 - dvaleev@suse.com
|
||||
|
||||
- Cleanup patch numbers
|
||||
- Rebase ppc64 patches based on upstream (commits are 173eaf1dfaf,
|
||||
7e056cd346c, PR#1479) - 0001-ppc64le-fixes.patch bsc#923558
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Mar 17 17:37:18 UTC 2015 - astieger@suse.com
|
||||
|
||||
|
@ -30,20 +30,16 @@ Url: http://www.mono-project.com
|
||||
Source0: http://download.mono-project.com/sources/mono/mono-%{version}.tar.bz2
|
||||
Source1: mono-core.rpmlintrc
|
||||
# PATCH-FIX-UPSTREAM Use runtime 4.5 as default for nunit
|
||||
Patch5: mono-nunit-default-runtime-4.5.patch
|
||||
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
|
||||
Patch7: mono-core-ppc64le.diff
|
||||
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
|
||||
Patch8: mono-core-ppc64le-swr11r12.diff
|
||||
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
|
||||
Patch9: mono-core-ppc64le-callreg.diff
|
||||
Patch0: mono-nunit-default-runtime-4.5.patch
|
||||
# PATCH-FIX-UPSTREAM resources/keyboards.resources exists on x86_64,
|
||||
# so cp won't work, should add -r argument
|
||||
Patch10: mono-3.x-keyboards.resources-cp_r.patch
|
||||
Patch1: mono-3.x-keyboards.resources-cp_r.patch
|
||||
# PATCH-FIX-UPSTREAM https://github.com/mono/mono/commit/b27d0248772e0b3288fba4f7328bfea1a6693689.patch
|
||||
Patch11: gc-64bit-portability-warning.patch
|
||||
Patch2: gc-64bit-portability-warning.patch
|
||||
# PATCH-FIX-UPSTREAM https://github.com/mono/mono/pull/1514.patch
|
||||
Patch12: X509Certificate-workaround.patch
|
||||
Patch3: X509Certificate-workaround.patch
|
||||
# PATCH-FIX-UPSTREAM 173eaf1dfaf,7e056cd346c, PR#1479
|
||||
Patch4: 0001-ppc64le-fixes.patch
|
||||
BuildRequires: autoconf
|
||||
BuildRequires: automake
|
||||
BuildRequires: bison
|
||||
@ -106,15 +102,11 @@ technologies that have been submitted to the ECMA for standardization.
|
||||
|
||||
%prep
|
||||
%setup -q -n mono-%{version}
|
||||
%patch5 -p1
|
||||
%ifarch ppc64
|
||||
%patch7 -p1
|
||||
%patch8 -p1
|
||||
%patch9 -p1
|
||||
%endif
|
||||
%patch10 -p1
|
||||
%patch11 -p1
|
||||
%patch12 -p1
|
||||
%patch0 -p1
|
||||
%patch1 -p1
|
||||
%patch2 -p1
|
||||
%patch3 -p1
|
||||
%patch4 -p1
|
||||
|
||||
%build
|
||||
./autogen.sh
|
||||
@ -1204,10 +1196,7 @@ Requires: mono-web = %{version}
|
||||
Requires: mono-winforms = %{version}
|
||||
Requires: pkgconfig
|
||||
Provides: mono-xbuild = %{version}
|
||||
# We build natively on ppc64 now
|
||||
%ifarch ppc64
|
||||
Provides: mono-biarchcompat = %{version}
|
||||
%endif
|
||||
Provides: mono(PEAPI) = 1.0.5000.0
|
||||
Provides: mono(resgen) = 1.0.5000.0
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user