buildrootschalter/package/mono/0005-Fix-build-errors-in-mono-context.c-on-ppc64el.patch
Thomas Petazzoni 786b32a2fb mono: backport patches to fix PowerPC build
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>
2015-02-07 12:50:46 +01:00

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