Hello community,

here is the log from the commit of package mono-core for openSUSE:Factory 
checked in at 2015-12-17 15:54:37
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/mono-core (Old)
 and      /work/SRC/openSUSE:Factory/.mono-core.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "mono-core"

Changes:
--------
--- /work/SRC/openSUSE:Factory/mono-core/mono-core.changes      2015-11-24 
22:33:32.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.mono-core.new/mono-core.changes 2015-12-17 
15:54:39.000000000 +0100
@@ -1,0 +2,19 @@
+Fri Dec 11 08:32:06 UTC 2015 - norm...@linux.vnet.ibm.com
+
+- retrieve from upstream all ppc patches not yet in 4.2.1 tarball
+  ppc_instruction_length_of_atomic_add_i4_is_28.patch
+  fix_atomic_add_i4_support_for_32bit_ppc.patch
+  basic_changes_powerpc_be.patch (already done yesterday)
+  ppc_add_monocontext_and_async_callback.patch
+  fix_passing_struct_parms_per_elf_abiv2.patch
+  update_elf_abiv2_testcases.patch
+  partial_sharing_false_4_powerpc.patch
+  fix_exception_when_reading_from_timezone_file.patch
+
+-------------------------------------------------------------------
+Thu Dec 10 15:08:07 UTC 2015 - norm...@linux.vnet.ibm.com
+
+- new basic_changes_powerpc_be.patch to build ppc64 archi
+  and disable ppc build that still segfault.
+
+-------------------------------------------------------------------

New:
----
  basic_changes_powerpc_be.patch
  fix_atomic_add_i4_support_for_32bit_ppc.patch
  fix_exception_when_reading_from_timezone_file.patch
  fix_passing_struct_parms_per_elf_abiv2.patch
  partial_sharing_false_4_powerpc.patch
  ppc_add_monocontext_and_async_callback.patch
  ppc_instruction_length_of_atomic_add_i4_is_28.patch
  update_elf_abiv2_testcases.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ mono-core.spec ++++++
--- /var/tmp/diff_new_pack.cyL9Tw/_old  2015-12-17 15:54:44.000000000 +0100
+++ /var/tmp/diff_new_pack.cyL9Tw/_new  2015-12-17 15:54:44.000000000 +0100
@@ -30,6 +30,8 @@
 Source0:        
http://download.mono-project.com/sources/mono/mono-%{version}.102.tar.bz2
 Source1:        mono-core.rpmlintrc
 Source2:        gmcs
+# ppc build segfault so exclude it
+ExcludeArch:    ppc
 # PATCH-FIX-OPENSUSE Use runtime 4.5 as default for nunit
 Patch0:         mono-nunit-default-runtime-4.5.patch
 # PATCH-FIX-OPENSUSE authors file is missing
@@ -37,6 +39,17 @@
 # PATCH-FIX-OPENSUSE fix insecure use of strncat at process.c:383 to fix build 
process
 Patch3:         strncat-process-c.patch
 Patch4:         mono-un-revoke-fix-in-BNC-144655.patch
+##################
+## set of ppc patches from git upstream not yet in tarball 4.2.1
+Patch5:                ppc_instruction_length_of_atomic_add_i4_is_28.patch
+Patch6:                fix_atomic_add_i4_support_for_32bit_ppc.patch
+Patch7:                basic_changes_powerpc_be.patch
+Patch8:                ppc_add_monocontext_and_async_callback.patch
+Patch9:                fix_passing_struct_parms_per_elf_abiv2.patch
+Patch10:       update_elf_abiv2_testcases.patch
+Patch11:       partial_sharing_false_4_powerpc.patch
+Patch12:       fix_exception_when_reading_from_timezone_file.patch
+##################
 BuildRequires:  autoconf
 BuildRequires:  automake
 BuildRequires:  bison
@@ -113,6 +126,14 @@
 %patch2 -p1
 %patch3 -p1
 %patch4 -p1
+%patch5 -p1
+%patch6 -p1
+%patch7 -p1
+%patch8 -p1
+%patch9 -p1
+%patch10 -p1
+%patch11 -p1
+%patch12 -p1
 
 %build
 NOCONFIGURE="yes" ./autogen.sh

++++++ basic_changes_powerpc_be.patch ++++++
commit 8332185abf23e2f27a536e6b7a08310aba8564fb
Author: Bill Seurer <seu...@linux.vnet.ibm.com>
Date:   Tue Aug 18 09:36:23 2015 -0500

[ppc] Basic changes to allow mono to build and run on power BE
patch adapted to current mono 4.2.1.102

The patch of tramp-ppc.c was not from above commit
but is also required to avoid ppc64 build segfault.

Signed-off-by: Michel Normand <norm...@linux.vnet.ibm.com>
---
 mono/mini/mini-ppc.c         |   10 ++++++++--
 mono/mini/mini-trampolines.c |    5 ++++-
 mono/mini/tramp-ppc.c        |    4 ++++
 mono/sgen/sgen-archdep.h     |    4 ++--
 4 files changed, 18 insertions(+), 5 deletions(-)

Index: mono-4.2.1/mono/mini/mini-ppc.c
===================================================================
--- mono-4.2.1.orig/mono/mini/mini-ppc.c
+++ mono-4.2.1/mono/mini/mini-ppc.c
@@ -1086,7 +1086,10 @@ get_call_info (MonoGenericSharingContext
                                cinfo->args [n].size = size;
 
                                /* It was 7, now it is 8 in LinuxPPC */
-                               if (fr <= PPC_LAST_FPARG_REG) {
+                               if (fr <= PPC_LAST_FPARG_REG
+                               // For non-native vararg calls the parms must 
go in storage
+                                       && !(!sig->pinvoke && 
(sig->call_convention == MONO_CALL_VARARG))
+                                      ) {
                                        cinfo->args [n].regtype = RegTypeFP;
                                        cinfo->args [n].reg = fr;
                                        fr ++;
@@ -1177,7 +1180,10 @@ get_call_info (MonoGenericSharingContext
                case MONO_TYPE_R8:
                        cinfo->args [n].size = 8;
                        /* It was 7, now it is 8 in LinuxPPC */
-                       if (fr <= PPC_LAST_FPARG_REG) {
+                       if (fr <= PPC_LAST_FPARG_REG
+                       // For non-native vararg calls the parms must go in 
storage
+                               && !(!sig->pinvoke && (sig->call_convention == 
MONO_CALL_VARARG))
+                              ) {
                                cinfo->args [n].regtype = RegTypeFP;
                                cinfo->args [n].reg = fr;
                                fr ++;
Index: mono-4.2.1/mono/mini/mini-trampolines.c
===================================================================
--- mono-4.2.1.orig/mono/mini/mini-trampolines.c
+++ mono-4.2.1/mono/mini/mini-trampolines.c
@@ -1066,7 +1066,10 @@ mono_delegate_trampoline (mgreg_t *regs,
                                }
                        }
                }
-       } else {
+       // If "delegate->method_ptr" is null mono_get_addr_from_ftnptr will 
fail if
+       // ftnptrs are being used.  "method" would end up null on 
archtitectures without
+       // ftnptrs so we can just skip this.
+       } else if (delegate->method_ptr) {
                ji = mono_jit_info_table_find (domain, 
mono_get_addr_from_ftnptr (delegate->method_ptr));
                if (ji)
                        method = jinfo_get_method (ji);
Index: mono-4.2.1/mono/sgen/sgen-archdep.h
===================================================================
--- mono-4.2.1.orig/mono/sgen/sgen-archdep.h
+++ mono-4.2.1/mono/sgen/sgen-archdep.h
@@ -88,8 +88,8 @@
        } while (0)
 
 /* MS_BLOCK_SIZE must be a multiple of the system pagesize, which for some
-   archs is 64k.  */
-#if defined(TARGET_POWERPC64) && _CALL_ELF == 2
+   architectures is 64k.  */
+#if defined(TARGET_POWERPC64)
 #define ARCH_MIN_MS_BLOCK_SIZE (64*1024)
 #define ARCH_MIN_MS_BLOCK_SIZE_SHIFT   16
 #endif
Index: mono-4.2.1/mono/mini/tramp-ppc.c
===================================================================
--- mono-4.2.1.orig/mono/mini/tramp-ppc.c
+++ mono-4.2.1/mono/mini/tramp-ppc.c
@@ -625,8 +625,12 @@ mono_arch_get_nullified_class_init_tramp
 
        g_assert (code - buf <= tramp_size);
 
+       if (info)
        *info = mono_tramp_info_create ("nullified_class_init_trampoline", buf, 
code - buf, NULL, NULL);
 
+       /* It is expected to be a function descriptor on power pre-v2 ABI */
+       buf = mono_create_ftnptr (mono_domain_get (), buf);
+
        return buf;
 }
 
++++++ fix_atomic_add_i4_support_for_32bit_ppc.patch ++++++
>From 8f379f0c8f98493180b508b9e68b9aa76c0c5bdf Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= <ale...@xamarin.com>
Date: Mon, 3 Aug 2015 17:32:31 +0200
Subject: [PATCH] [ppc] Fix atomic_add_i4 support for 32-bit PPC.


---
 mono/mini/mini-ppc.c |   31 ++++++++++++++++---------------
 1 file changed, 16 insertions(+), 15 deletions(-)

Index: mono-4.2.1/mono/mini/mini-ppc.c
===================================================================
--- mono-4.2.1.orig/mono/mini/mini-ppc.c
+++ mono-4.2.1/mono/mini/mini-ppc.c
@@ -4417,6 +4417,22 @@ mono_arch_output_basic_block (MonoCompil
                        else
                                ppc_mr (code, ins->dreg, ins->sreg1);
                        break;
+#else
+               case OP_ICONV_TO_R4:
+               case OP_ICONV_TO_R8: {
+                       if (cpu_hw_caps & PPC_ISA_64) {
+                               ppc_srawi(code, ppc_r0, ins->sreg1, 31);
+                               ppc_stw (code, ppc_r0, -8, ppc_r1);
+                               ppc_stw (code, ins->sreg1, -4, ppc_r1);
+                               ppc_lfd (code, ins->dreg, -8, ppc_r1);
+                               ppc_fcfid (code, ins->dreg, ins->dreg);
+                               if (ins->opcode == OP_ICONV_TO_R4)
+                                       ppc_frsp (code, ins->dreg, ins->dreg);
+                               }
+                       break;
+               }
+#endif
+
                case OP_ATOMIC_ADD_I4:
                CASE_PPC64 (OP_ATOMIC_ADD_I8) {
                        int location = ins->inst_basereg;
@@ -4450,21 +4466,6 @@ mono_arch_output_basic_block (MonoCompil
                        ppc_mr (code, ins->dreg, ppc_r0);
                        break;
                }
-#else
-               case OP_ICONV_TO_R4:
-               case OP_ICONV_TO_R8: {
-                       if (cpu_hw_caps & PPC_ISA_64) {
-                               ppc_srawi(code, ppc_r0, ins->sreg1, 31);
-                               ppc_stw (code, ppc_r0, -8, ppc_r1);
-                               ppc_stw (code, ins->sreg1, -4, ppc_r1);
-                               ppc_lfd (code, ins->dreg, -8, ppc_r1);
-                               ppc_fcfid (code, ins->dreg, ins->dreg);
-                               if (ins->opcode == OP_ICONV_TO_R4)
-                                       ppc_frsp (code, ins->dreg, ins->dreg);
-                               }
-                       break;
-               }
-#endif
                case OP_ATOMIC_CAS_I4:
                CASE_PPC64 (OP_ATOMIC_CAS_I8) {
                        int location = ins->sreg1;
++++++ fix_exception_when_reading_from_timezone_file.patch ++++++
>From 45c3685e3b360ecc8c5a78ee10c298d6b584a302 Mon Sep 17 00:00:00 2001
From: Bill Seurer <seu...@linux.vnet.ibm.com>
Date: Thu, 10 Sep 2015 13:34:27 -0500
Subject: [PATCH] [ppc] Fix exception when reading from timezone file. See
 https://bugzilla.xamarin.com/show_bug.cgi?id=30360


---
 mcs/class/corlib/System/TimeZoneInfo.cs |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Index: mono-4.2.1/mcs/class/corlib/System/TimeZoneInfo.cs
===================================================================
--- mono-4.2.1.orig/mcs/class/corlib/System/TimeZoneInfo.cs
+++ mono-4.2.1/mcs/class/corlib/System/TimeZoneInfo.cs
@@ -1175,7 +1175,7 @@ namespace System
                        return (((i >> 24) & 0xff)
                                | ((i >> 8) & 0xff00)
                                | ((i << 8) & 0xff0000)
-                               | ((i << 24)));
+                               | (((i & 0xff) << 24)));
                }
 
                static int ReadBigEndianInt32 (byte [] buffer, int start)
++++++ fix_passing_struct_parms_per_elf_abiv2.patch ++++++
++++ 3352 lines (skipped)

++++++ partial_sharing_false_4_powerpc.patch ++++++
>From 35b511524a4d15b75cfbba982d82b7abef3a29dc Mon Sep 17 00:00:00 2001
From: Bill Seurer <seu...@linux.vnet.ibm.com>
Date: Tue, 8 Dec 2015 12:52:01 -0600
Subject: [PATCH] [ppc] Temporary fix for power to get builds working.


---
 mono/mini/mini-ppc.c |    3 +++
 1 file changed, 3 insertions(+)

Index: mono-4.2.1/mono/mini/mini-ppc.c
===================================================================
--- mono-4.2.1.orig/mono/mini/mini-ppc.c
+++ mono-4.2.1/mono/mini/mini-ppc.c
@@ -627,6 +627,9 @@ mono_arch_init (void)
        mono_mprotect (bp_trigger_page, mono_pagesize (), 0);
 
        mono_aot_register_jit_icall ("mono_ppc_throw_exception", 
mono_ppc_throw_exception);
+
+       // FIXME: Fix partial sharing for power and remove this
+       mono_set_partial_sharing_supported (FALSE);
 }
 
 /*
++++++ ppc_add_monocontext_and_async_callback.patch ++++++
>From f05362d9a16317c65cf46506b7557dfb0176a678 Mon Sep 17 00:00:00 2001
From: Bill Seurer <seu...@linux.vnet.ibm.com>
Date: Mon, 24 Aug 2015 17:10:36 -0500
Subject: [PATCH] [ppc] Add MonoContext and asynch callback support


---
 mono/mini/exceptions-ppc.c |   13 ++++++
 mono/mini/mini-ppc.h       |   11 ++++-
 mono/utils/mono-context.h  |   95 +++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 117 insertions(+), 2 deletions(-)

Index: mono-4.2.1/mono/mini/exceptions-ppc.c
===================================================================
--- mono-4.2.1.orig/mono/mini/exceptions-ppc.c
+++ mono-4.2.1/mono/mini/exceptions-ppc.c
@@ -783,3 +783,16 @@ mono_arch_handle_exception (void *ctx, g
        return result;
 #endif
 }
+
+
+// FIX ME: This is not complete
+void
+mono_arch_setup_async_callback (MonoContext *ctx, void (*async_cb)(void *fun), 
gpointer user_data)
+{
+       uintptr_t sp = (uintptr_t) MONO_CONTEXT_GET_SP(ctx);
+       sp -= PPC_MINIMAL_STACK_SIZE;
+       *(unsigned long *)sp = MONO_CONTEXT_GET_SP(ctx);
+       MONO_CONTEXT_SET_BP(ctx, sp);
+       MONO_CONTEXT_SET_IP(ctx, (unsigned long) async_cb);
+}
+
Index: mono-4.2.1/mono/mini/mini-ppc.h
===================================================================
--- mono-4.2.1.orig/mono/mini/mini-ppc.h
+++ mono-4.2.1/mono/mini/mini-ppc.h
@@ -139,8 +139,15 @@ typedef struct MonoCompileArch {
 /* Linux */
 #ifdef __mono_ppc64__
 #define PPC_RET_ADDR_OFFSET 16
-#define PPC_STACK_PARAM_OFFSET 48
-#define PPC_MINIMAL_STACK_SIZE 48
+ // Power LE abvi2
+ #if (_CALL_ELF == 2)
+  #define PPC_STACK_PARAM_OFFSET 32
+  #define PPC_MINIMAL_STACK_SIZE 32
+ #else
+  #define PPC_STACK_PARAM_OFFSET 48
+  #define PPC_MINIMAL_STACK_SIZE 48
+ #endif
+#define MONO_ARCH_HAVE_SETUP_ASYNC_CALLBACK 1
 #define PPC_MINIMAL_PARAM_AREA_SIZE 64
 #define PPC_LAST_FPARG_REG ppc_f13
 #define PPC_PASS_STRUCTS_BY_VALUE 1
Index: mono-4.2.1/mono/utils/mono-context.h
===================================================================
--- mono-4.2.1.orig/mono/utils/mono-context.h
+++ mono-4.2.1/mono/utils/mono-context.h
@@ -359,6 +359,100 @@ typedef struct {
  * We might also want to add an additional field to propagate
  * the original context from the signal handler.
  */
+#ifdef __mono_ppc64__
+
+typedef struct {
+       gulong sc_ir;          // pc
+       gulong sc_sp;          // r1
+       mgreg_t regs [32];
+       double fregs [32];
+} MonoContext;
+
+/* we have the stack pointer, not the base pointer in sigcontext */
+#define MONO_CONTEXT_SET_IP(ctx,ip) do { (ctx)->sc_ir = (gulong)ip; } while 
(0);
+#define MONO_CONTEXT_SET_BP(ctx,bp) do { (ctx)->sc_sp = (gulong)bp; } while 
(0);
+#define MONO_CONTEXT_SET_SP(ctx,sp) do { (ctx)->sc_sp = (gulong)sp; } while 
(0);
+
+#define MONO_CONTEXT_GET_IP(ctx) ((gpointer)((ctx)->sc_ir))
+#define MONO_CONTEXT_GET_BP(ctx) ((gpointer)((ctx)->regs [ppc_r31-13]))
+#define MONO_CONTEXT_GET_SP(ctx) ((gpointer)((ctx)->sc_sp))
+
+#define MONO_CONTEXT_GET_CURRENT(ctx)  \
+       __asm__ __volatile__(   \
+               "std 0, 0(%0)\n"        \
+               "std 1, 8(%0)\n"        \
+               "std 0, 8*0+16(%0)\n"   \
+               "std 1, 8*1+16(%0)\n"   \
+               "std 2, 8*2+16(%0)\n"   \
+               "std 3, 8*3+16(%0)\n"   \
+               "std 4, 8*4+16(%0)\n"   \
+               "std 5, 8*5+16(%0)\n"   \
+               "std 6, 8*6+16(%0)\n"   \
+               "std 7, 8*7+16(%0)\n"   \
+               "std 8, 8*8+16(%0)\n"   \
+               "std 9, 8*9+16(%0)\n"   \
+               "std 10, 8*10+16(%0)\n" \
+               "std 11, 8*11+16(%0)\n" \
+               "std 12, 8*12+16(%0)\n" \
+               "std 13, 8*13+16(%0)\n" \
+               "std 14, 8*14+16(%0)\n" \
+               "std 15, 8*15+16(%0)\n" \
+               "std 16, 8*16+16(%0)\n" \
+               "std 17, 8*17+16(%0)\n" \
+               "std 18, 8*18+16(%0)\n" \
+               "std 19, 8*19+16(%0)\n" \
+               "std 20, 8*20+16(%0)\n" \
+               "std 21, 8*21+16(%0)\n" \
+               "std 22, 8*22+16(%0)\n" \
+               "std 23, 8*23+16(%0)\n" \
+               "std 24, 8*24+16(%0)\n" \
+               "std 25, 8*25+16(%0)\n" \
+               "std 26, 8*26+16(%0)\n" \
+               "std 27, 8*27+16(%0)\n" \
+               "std 28, 8*28+16(%0)\n" \
+               "std 29, 8*29+16(%0)\n" \
+               "std 30, 8*30+16(%0)\n" \
+               "std 31, 8*31+16(%0)\n" \
+               "stfd 0, 8*0+8*32+16(%0)\n"     \
+               "stfd 1, 8*1+8*32+16(%0)\n"     \
+               "stfd 2, 8*2+8*32+16(%0)\n"     \
+               "stfd 3, 8*3+8*32+16(%0)\n"     \
+               "stfd 4, 8*4+8*32+16(%0)\n"     \
+               "stfd 5, 8*5+8*32+16(%0)\n"     \
+               "stfd 6, 8*6+8*32+16(%0)\n"     \
+               "stfd 7, 8*7+8*32+16(%0)\n"     \
+               "stfd 8, 8*8+8*32+16(%0)\n"     \
+               "stfd 9, 8*9+8*32+16(%0)\n"     \
+               "stfd 10, 8*10+8*32+16(%0)\n"   \
+               "stfd 11, 8*11+8*32+16(%0)\n"   \
+               "stfd 12, 8*12+8*32+16(%0)\n"   \
+               "stfd 13, 8*13+8*32+16(%0)\n"   \
+               "stfd 14, 8*14+8*32+16(%0)\n"   \
+               "stfd 15, 8*15+8*32+16(%0)\n"   \
+               "stfd 16, 8*16+8*32+16(%0)\n"   \
+               "stfd 17, 8*17+8*32+16(%0)\n"   \
+               "stfd 18, 8*18+8*32+16(%0)\n"   \
+               "stfd 19, 8*19+8*32+16(%0)\n"   \
+               "stfd 20, 8*20+8*32+16(%0)\n"   \
+               "stfd 21, 8*21+8*32+16(%0)\n"   \
+               "stfd 22, 8*22+8*32+16(%0)\n"   \
+               "stfd 23, 8*23+8*32+16(%0)\n"   \
+               "stfd 24, 8*24+8*32+16(%0)\n"   \
+               "stfd 25, 8*25+8*32+16(%0)\n"   \
+               "stfd 26, 8*26+8*32+16(%0)\n"   \
+               "stfd 27, 8*27+8*32+16(%0)\n"   \
+               "stfd 28, 8*28+8*32+16(%0)\n"   \
+               "stfd 29, 8*29+8*32+16(%0)\n"   \
+               "stfd 30, 8*30+8*32+16(%0)\n"   \
+               "stfd 31, 8*31+8*32+16(%0)\n"   \
+               : : "r" (&(ctx))        \
+               : "memory"                      \
+       )
+
+#define MONO_ARCH_HAS_MONO_CONTEXT 1
+
+#else
+
 typedef struct {
        gulong sc_ir;          // pc 
        gulong sc_sp;          // r1
@@ -375,6 +469,7 @@ typedef struct {
 #define MONO_CONTEXT_GET_IP(ctx) ((gpointer)((ctx)->sc_ir))
 #define MONO_CONTEXT_GET_BP(ctx) ((gpointer)((ctx)->regs [ppc_r31-13]))
 #define MONO_CONTEXT_GET_SP(ctx) ((gpointer)((ctx)->sc_sp))
+#endif
 
 #elif defined(__sparc__) || defined(sparc) /* defined(__mono_ppc__) */
 
++++++ ppc_instruction_length_of_atomic_add_i4_is_28.patch ++++++
>From f967c79926900343f399c75624deedaba460e544 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= <ale...@xamarin.com>
Date: Mon, 3 Aug 2015 17:32:07 +0200
Subject: [PATCH] [ppc] Instruction length of atomic_add_i4 is 28.


---
 mono/mini/cpu-ppc.md |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Index: mono-4.2.1/mono/mini/cpu-ppc.md
===================================================================
--- mono-4.2.1.orig/mono/mini/cpu-ppc.md
+++ mono-4.2.1/mono/mini/cpu-ppc.md
@@ -314,5 +314,5 @@ vcall2_membase: src1:b len:16 clob:c
 
 jump_table: dest:i len:8
 
-atomic_add_i4: src1:b src2:i dest:i len:20
+atomic_add_i4: src1:b src2:i dest:i len:28
 atomic_cas_i4: src1:b src2:i src3:i dest:i len:38
++++++ update_elf_abiv2_testcases.patch ++++++
++++ 4409 lines (skipped)


Reply via email to