![Thomas Petazzoni](/assets/img/avatar_default.png)
Mono 3.12.0 doesn't build properly on PowerPC, but there are already patches upstream to fix those issues. This commit backports the two necessary patches to get the PowerPC build working. Fixes: http://autobuild.buildroot.org/results/91d/91d4b9d3f2d3597b071a1bcec8339eaf2a9c7981/ Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
85 lines
3.8 KiB
Diff
85 lines
3.8 KiB
Diff
From a41c322f4c6863ebfeba1740f6f3afbc0f8c71e9 Mon Sep 17 00:00:00 2001
|
|
From: Mauricio Faria de Oliveira <mauricfo@linux.vnet.ibm.com>
|
|
Date: Mon, 22 Dec 2014 22:08:33 -0200
|
|
Subject: [PATCH] Fix build errors in mono-context.c on ppc64el
|
|
|
|
Build error #1:
|
|
|
|
libtool: compile: gcc <...> -c mono-context.c -fPIC -DPIC -o .libs/mono-context.o
|
|
mono-context.c: In function 'mono_sigctx_to_monoctx':
|
|
mono-context.c:435:68: error: 'MONO_SAVED_GREGS' undeclared (first use in this function)
|
|
memcpy (&mctx->regs, &UCONTEXT_REG_Rn(uc, 13), sizeof (mgreg_t) * MONO_SAVED_GREGS);
|
|
^
|
|
mono-context.c:435:68: note: each undeclared identifier is reported only once for each function it appears in
|
|
mono-context.c:436:70: error: 'MONO_SAVED_FREGS' undeclared (first use in this function)
|
|
memcpy (&mctx->fregs, &UCONTEXT_REG_FPRn(uc, 14), sizeof (double) * MONO_SAVED_FREGS);
|
|
^
|
|
The MONO_SAVED_GREGS and MONO_SAVED_FREGS macros are defined in mini-ppc.h.
|
|
The problem happens because commit 7e056cd346ccab104715e19d51d0ceccd51b696d
|
|
moved code using them from exceptions-ppc.h (which includes mini-ppc.h) to
|
|
mono-context.c (which doesn't), where they're not #included.
|
|
|
|
So, include mini-ppc.h in mono-context.c (in the existing powerpc ifdef block).
|
|
|
|
Signed-off-by: Mauricio Faria de Oliveira <mauricfo@linux.vnet.ibm.com>
|
|
|
|
Build error #2:
|
|
|
|
Now, it turns out mini-ppc.h doesn't know MonoMethod, MonoMethodSignature, and MonoObject.
|
|
So, include object.h (MonoObject), which includes metadata.h (MonoMethod and MonoMethodSignature),
|
|
in mini-ppc.h.
|
|
|
|
libtool: compile: gcc <...> -c mono-context.c -fPIC -DPIC -o .libs/mono-context.o
|
|
In file included from mono-context.c:427:0:
|
|
../../mono/mini/mini-ppc.h:37:2: error: unknown type name 'MonoMethod'
|
|
MonoMethod *method;
|
|
^
|
|
../../mono/mini/mini-ppc.h:306:31: error: unknown type name 'MonoMethodSignature'
|
|
mono_ppc_tail_call_supported (MonoMethodSignature *caller_sig, MonoMethodSignature *callee_sig) MONO_INTERNAL;
|
|
^
|
|
../../mono/mini/mini-ppc.h:306:64: error: unknown type name 'MonoMethodSignature'
|
|
mono_ppc_tail_call_supported (MonoMethodSignature *caller_sig, MonoMethodSignature *callee_sig) MONO_INTERNAL;
|
|
^
|
|
../../mono/mini/mini-ppc.h:312:27: error: unknown type name 'MonoObject'
|
|
mono_ppc_throw_exception (MonoObject *exc, unsigned long eip, unsigned long esp, mgreg_t *int_regs, gdouble *fp_regs, gboolean rethrow) MONO_INTERNAL;
|
|
^
|
|
|
|
Backported from upstream commit
|
|
55fa0a561acda220f1b363e4507cb1c3a62795a7 by Thomas Petazzoni
|
|
<thomas.petazzoni@free-electrons.com>.
|
|
|
|
Signed-off-by: Mauricio Faria de Oliveira <mauricfo@linux.vnet.ibm.com>
|
|
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
|
|
---
|
|
mono/mini/mini-ppc.h | 1 +
|
|
mono/utils/mono-context.c | 1 +
|
|
2 files changed, 2 insertions(+)
|
|
|
|
diff --git a/mono/mini/mini-ppc.h b/mono/mini/mini-ppc.h
|
|
index 4b39b7a..cbf73bb 100644
|
|
--- a/mono/mini/mini-ppc.h
|
|
+++ b/mono/mini/mini-ppc.h
|
|
@@ -4,6 +4,7 @@
|
|
#include <mono/arch/ppc/ppc-codegen.h>
|
|
#include <mono/utils/mono-sigcontext.h>
|
|
#include <mono/utils/mono-context.h>
|
|
+#include <mono/metadata/object.h>
|
|
#include <glib.h>
|
|
|
|
#ifdef __mono_ppc64__
|
|
diff --git a/mono/utils/mono-context.c b/mono/utils/mono-context.c
|
|
index 689bf86..0db9dce 100644
|
|
--- a/mono/utils/mono-context.c
|
|
+++ b/mono/utils/mono-context.c
|
|
@@ -424,6 +424,7 @@ mono_monoctx_to_sigctx (MonoContext *mctx, void *sigctx)
|
|
#elif (((defined(__ppc__) || defined(__powerpc__) || defined(__ppc64__)) && !defined(MONO_CROSS_COMPILE))) || (defined(TARGET_POWERPC))
|
|
|
|
#include <mono/utils/mono-context.h>
|
|
+#include <mono/mini/mini-ppc.h>
|
|
|
|
void
|
|
mono_sigctx_to_monoctx (void *sigctx, MonoContext *mctx)
|
|
--
|
|
2.1.0
|
|
|