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:
Matthias Mailänder 2015-03-24 06:13:37 +00:00 committed by Git OBS Bridge
parent 4e766ee22d
commit a16ceea4d9
5 changed files with 570 additions and 590 deletions

File diff suppressed because it is too large Load Diff

View File

@ -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);
}

View File

@ -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

View File

@ -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

View File

@ -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