+typedef struct {
+ gint8 reg;
+ gint8 size;
+ int vtsize;
+ int offset;
+} MonoPPCArgInfo;
+
+#ifdef PPC_USES_FUNCTION_DESCRIPTOR
+typedef struct {
+ gpointer code;
+ gpointer toc;
+ gpointer env;
+} MonoPPCFunctionDescriptor;
+
+#define PPC_FTNPTR_SIZE sizeof (MonoPPCFunctionDescriptor)
+extern guint8* mono_ppc_create_pre_code_ftnptr (guint8 *code) MONO_INTERNAL;
+#else
+#define PPC_FTNPTR_SIZE 0
+#define mono_ppc_create_pre_code_ftnptr(c) c
+#endif
+
+#if defined(__linux__)
+#define MONO_ARCH_USE_SIGACTION 1
+#elif defined (__APPLE__) && defined (_STRUCT_MCONTEXT)
+#define MONO_ARCH_USE_SIGACTION 1
+#elif defined (__APPLE__) && !defined (_STRUCT_MCONTEXT)
+#define MONO_ARCH_USE_SIGACTION 1
+#elif defined(__NetBSD__)
+#define MONO_ARCH_USE_SIGACTION 1
+#elif defined(__FreeBSD__)
+#define MONO_ARCH_USE_SIGACTION 1
+#elif defined(MONO_CROSS_COMPILE)
+ typedef MonoContext ucontext_t;
+/* typedef struct {
+ int dummy;
+ } ucontext_t;*/
+ #define UCONTEXT_REG_Rn(ctx, n)
+ #define UCONTEXT_REG_FPRn(ctx, n)
+ #define UCONTEXT_REG_NIP(ctx)
+ #define UCONTEXT_REG_LNK(ctx)
+
+#else
+/* For other operating systems, we pull the definition from an external file */
+#include "mini-ppc-os.h"
+#endif
+
+void
+mono_ppc_patch (guchar *code, const guchar *target) MONO_INTERNAL;
+
+void
+mono_ppc_throw_exception (MonoObject *exc, unsigned long eip, unsigned long esp, mgreg_t *int_regs, gdouble *fp_regs, gboolean rethrow) MONO_INTERNAL;
+
+#ifdef __mono_ppc64__
+#define MONO_PPC_32_64_CASE(c32,c64) c64
+extern void mono_ppc_emitted (guint8 *code, gint64 length, const char *format, ...);
+#else
+#define MONO_PPC_32_64_CASE(c32,c64) c32
+#endif
+
+gboolean mono_ppc_is_direct_call_sequence (guint32 *code) MONO_INTERNAL;
+
+void mono_ppc_patch_plt_entry (guint8 *code, gpointer *got, mgreg_t *regs, guint8 *addr) MONO_INTERNAL;
+
+void mono_ppc_set_func_into_sigctx (void *sigctx, void *func) MONO_INTERNAL;