Index: tools/ppc32/gencontext.c
===================================================================
--- tools/ppc32/gencontext.c	(revision c1e43e44606c21c846afd41392f15d5b46968466)
+++ tools/ppc32/gencontext.c	(revision c1e43e44606c21c846afd41392f15d5b46968466)
@@ -0,0 +1,55 @@
+#include <stdio.h>
+
+typedef unsigned int __u32;
+typedef __u32 ipl_t;
+typedef __u32 __address;
+
+#define __ppc32_TYPES_H__
+#include "../../arch/ppc32/include/context.h"
+
+#define FILENAME "../../arch/ppc32/include/context_offset.h"
+
+int main(void)
+{
+	FILE *f;
+	struct context *pctx = NULL;
+	
+
+	f = fopen(FILENAME,"w");
+	if (!f) {
+		perror(FILENAME);
+		return 1;
+	}
+
+	fprintf(f, "/* This file is automatically generated by %s. */\n", __FILE__);	
+
+	fprintf(f,"/* struct context */\n");
+
+	fprintf(f,"#define OFFSET_SP   0x%x\n", ((int) &pctx->sp) - (int) pctx);
+	fprintf(f,"#define OFFSET_PC   0x%x\n", ((int) &pctx->pc) - (int) pctx);
+	fprintf(f,"#define OFFSET_R2   0x%x\n", ((int) &pctx->r2) - (int) pctx);
+	fprintf(f,"#define OFFSET_R13  0x%x\n", ((int) &pctx->r13) - (int) pctx);
+	fprintf(f,"#define OFFSET_R14  0x%x\n", ((int) &pctx->r14) - (int) pctx);
+	fprintf(f,"#define OFFSET_R15  0x%x\n", ((int) &pctx->r15) - (int) pctx);
+	fprintf(f,"#define OFFSET_R16  0x%x\n", ((int) &pctx->r16) - (int) pctx);
+	fprintf(f,"#define OFFSET_R17  0x%x\n", ((int) &pctx->r17) - (int) pctx);
+	fprintf(f,"#define OFFSET_R18  0x%x\n", ((int) &pctx->r18) - (int) pctx);
+	fprintf(f,"#define OFFSET_R19  0x%x\n", ((int) &pctx->r19) - (int) pctx);
+	fprintf(f,"#define OFFSET_R20  0x%x\n", ((int) &pctx->r20) - (int) pctx);
+	fprintf(f,"#define OFFSET_R21  0x%x\n", ((int) &pctx->r21) - (int) pctx);
+	fprintf(f,"#define OFFSET_R22  0x%x\n", ((int) &pctx->r22) - (int) pctx);
+	fprintf(f,"#define OFFSET_R23  0x%x\n", ((int) &pctx->r23) - (int) pctx);
+	fprintf(f,"#define OFFSET_R24  0x%x\n", ((int) &pctx->r24) - (int) pctx);
+	fprintf(f,"#define OFFSET_R25  0x%x\n", ((int) &pctx->r25) - (int) pctx);
+	fprintf(f,"#define OFFSET_R26  0x%x\n", ((int) &pctx->r26) - (int) pctx);
+	fprintf(f,"#define OFFSET_R27  0x%x\n", ((int) &pctx->r27) - (int) pctx);
+	fprintf(f,"#define OFFSET_R28  0x%x\n", ((int) &pctx->r28) - (int) pctx);
+	fprintf(f,"#define OFFSET_R29  0x%x\n", ((int) &pctx->r29) - (int) pctx);
+	fprintf(f,"#define OFFSET_R30  0x%x\n", ((int) &pctx->r30) - (int) pctx);
+	fprintf(f,"#define OFFSET_R31  0x%x\n", ((int) &pctx->r31) - (int) pctx);
+	fprintf(f,"#define OFFSET_CR   0x%x\n", ((int) &pctx->cr) - (int) pctx);
+
+	fclose(f);
+
+	return 0;
+}
