Index: arch/ppc64/loader/Makefile
===================================================================
--- arch/ppc64/loader/Makefile	(revision 6bbb161000a0620cf3d6ce3262e283d63efc9b7b)
+++ arch/ppc64/loader/Makefile	(revision 433a2aa71c4990eb3d8f94723861b5a439416e0f)
@@ -30,5 +30,5 @@
 #
 
-TARGET = ppc-linux-gnu
+TARGET = ppc64-linux-gnu
 TOOLCHAIN_DIR = /usr/local/ppc64/bin
 
Index: arch/ppc64/loader/ofw.c
===================================================================
--- arch/ppc64/loader/ofw.c	(revision 6bbb161000a0620cf3d6ce3262e283d63efc9b7b)
+++ arch/ppc64/loader/ofw.c	(revision 433a2aa71c4990eb3d8f94723861b5a439416e0f)
@@ -177,13 +177,13 @@
 	ofw_arg_t result[3];
 	
-	if (ofw_call("call-method", 4, 4, result, "translate", ofw_mmu, virt, 1) != 0) {
+	if (ofw_call("call-method", 4, 4, result, "translate", ofw_mmu, (unsigned long) virt, 1) != 0) {
 		puts("Error: MMU method translate() failed, halting.\n");
 		halt();
 	}
-	return (void *) result[2];
-}
-
-
-int ofw_map(const void *phys, const void *virt, const int size, const int mode)
+	return (void *) (unsigned long) result[2];
+}
+
+
+int ofw_map(const void *phys, const void *virt, const long size, const int mode)
 {
 	return ofw_call("call-method", 6, 1, NULL, "map", ofw_mmu, mode, size, virt, phys);
@@ -205,5 +205,5 @@
 	map->count = 0;
 	for (pos = 0; (pos < ret / sizeof(unsigned int)) && (map->count < MEMMAP_MAX_RECORDS); pos += ac + sc) {
-		void * start = (void *) buf[pos + ac - 1];
+		void * start = (void *) (unsigned long) buf[pos + ac - 1];
 		unsigned int size = buf[pos + ac + sc - 1];
 		
Index: arch/ppc64/loader/pack
===================================================================
--- arch/ppc64/loader/pack	(revision 6bbb161000a0620cf3d6ce3262e283d63efc9b7b)
+++ arch/ppc64/loader/pack	(revision 433a2aa71c4990eb3d8f94723861b5a439416e0f)
@@ -46,5 +46,7 @@
 		*(REALMODE);
 		*(.text);
+		*(.toc);
 		
+		*(.opd);
 		*(.rodata);
 		*(.rodata.*);
@@ -92,5 +94,5 @@
 #define ${MACRO}_SIZE ((unsigned long) ${MACRO}_END - (unsigned long) ${MACRO}_START)" >> "$HEADER"
 	
-	"$OBJCOPY" -I binary -O elf32-powerpc -B powerpc:common --rename-section ".data=.${BASENAME}_image" "$TASK" "$OBJECT"
+	"$OBJCOPY" -I binary -O elf64-powerpc -B powerpc:common64 --rename-section ".data=.${BASENAME}_image" "$TASK" "$OBJECT"
 		
 	DATA="${DATA}
@@ -102,5 +104,9 @@
 done
 
-echo '	}
+echo '}
+
+	/DISCARD/ : {
+		*(*);
+	}
 }' >> "$LINK"
 
