Fix build errors in mono-context.c on ppc64el
authorMauricio Faria de Oliveira <mauricfo@linux.vnet.ibm.com>
Tue, 23 Dec 2014 00:08:33 +0000 (22:08 -0200)
committerMauricio Faria de Oliveira <mauricfo@linux.vnet.ibm.com>
Tue, 23 Dec 2014 14:48:20 +0000 (12:48 -0200)
commite36ef8bda681f0e836f949fc90ca785670a58448
treecddfb7ea9092aa9434c404463454a9852e5ee272
parent95f9770413d7963a417274aa5f99b81de9a5278a
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;
                   ^

Signed-off-by: Mauricio Faria de Oliveira <mauricfo@linux.vnet.ibm.com>
mono/mini/mini-ppc.h
mono/utils/mono-context.c