Messages in this thread Patch in this message | | | Date | Fri, 26 May 2006 16:12:14 +0100 | Subject | [PATCH] Compile failure fix for ppc on 2.6.17-rc4-mm3 (2nd attempt) | From | (Mel Gorman) |
| |
(Resending with Andrew's email address correct this time)
For the last few -mm releases, kernels built for an old RS6000 failed to compile with the message;
arch/powerpc/kernel/built-in.o(.init.text+0x77b4): In function `vrsqrtefp': : undefined reference to `__udivdi3' arch/powerpc/kernel/built-in.o(.init.text+0x7800): In function `vrsqrtefp': : undefined reference to `__udivdi3' make: *** [.tmp_vmlinux1] Error 1
2.6.17-rc5 is not affected but I didn't search for the culprit patch in -mm. The following patch adds an implementation of __udivdi3 for plain old ppc32. This may not be the correct fix as Google tells me that __udivdi3 has been replaced by calls to do_div() in a number of cases. There was no obvious way to do that for vrsqrtefp, hence this workaround. The patch should be acked, rejected or replaced by a ppc expert.
Signed-off-by: Mel Gorman <mel@csn.ul.ie>
diff -rup -X /usr/src/patchset-0.6/bin//dontdiff linux-2.6.17-rc5-clean/arch/powerpc/lib/Makefile linux-2.6.17-rc5-udivdi3_ppc/arch/powerpc/lib/Makefile --- linux-2.6.17-rc5-clean/arch/powerpc/lib/Makefile 2006-05-25 02:50:17.000000000 +0100 +++ linux-2.6.17-rc5-udivdi3_ppc/arch/powerpc/lib/Makefile 2006-05-26 13:17:15.000000000 +0100 @@ -4,7 +4,7 @@ ifeq ($(CONFIG_PPC_MERGE),y) obj-y := string.o strcase.o -obj-$(CONFIG_PPC32) += div64.o copy_32.o checksum_32.o +obj-$(CONFIG_PPC32) += div64.o copy_32.o checksum_32.o udivdi3.o endif obj-y += bitops.o diff -rup -X /usr/src/patchset-0.6/bin//dontdiff linux-2.6.17-rc5-clean/arch/powerpc/lib/udivdi3.c linux-2.6.17-rc5-udivdi3_ppc/arch/powerpc/lib/udivdi3.c --- linux-2.6.17-rc5-clean/arch/powerpc/lib/udivdi3.c 2006-05-26 13:17:22.000000000 +0100 +++ linux-2.6.17-rc5-udivdi3_ppc/arch/powerpc/lib/udivdi3.c 2006-05-26 13:25:26.000000000 +0100 @@ -0,0 +1,15 @@ +/* + * Simple __udivdi3 function which doesn't use FPU. + */ + +#include <linux/types.h> +#include <linux/kernel.h> +#include <asm-generic/div64.h> + +u64 __udivdi3(u64 n, u64 d) +{ + if (d & ~0xffffffff) + panic("Need true 64-bit/64-bit division"); + return __div64_32(&n, (u32)d); +} + -- Mel Gorman Part-time Phd Student Linux Technology Center University of Limerick IBM Dublin Software Lab - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |