Messages in this thread Patch in this message | | | Date | Tue, 07 May 2002 18:43:54 -0400 | From | Brian Gerst <> | Subject | Re: 2.5.14-dj1: misc.o: undefined reference to `__io_virt_debug' |
| |
Martin J. Bligh wrote: >>>>Compiling misc.c with -O0 gives a better error message: >>>> >>>><-- snip --> >>>> >>>>... >>>>ld -m elf_i386 -Ttext 0x100000 -e startup_32 -o bvmlinux head.o misc.o >>>>piggy.o >>>>misc.o: In function `outb_quad': >>>>misc.o(.text+0x289c): undefined reference to `__io_virt_debug' >>>>make[2]: *** [bvmlinux] Error 1 >>>>make[2]: Leaving directory >>>>`/home/bunk/linux/kernel-2.5/linux-2.5.14-modular/arch/i386/boot/compressed' >>> >>>Seems like you're not linking in lib/iodebug.c for some reason. >>> >>>outb_quad calls readb, which calls __io_virt, which calls __io_virt_debug, >>>which is defined in iodebug.c >> >>It's in the boot decompression code, before any of that stuff is >>available. I'm working on a patch. > > > Is this arch/i386/boot/compressed/misc.c ? > I can't see how it would be doing outb_quad, and even if it was, it > would be totally pointless, as xquad_portio isn't set yet .... > > M. >
This patch fixes the compile problem, but I'm not quite convinced it's the best solution. The decompressor is a completely seperate environment from the kernel, so including kernel headers continues to invite problems like this in the future.
--
Brian Gerst diff -urN linux-2.5.14-dj1/arch/i386/boot/compressed/misc.c linux/arch/i386/boot/compressed/misc.c --- linux-2.5.14-dj1/arch/i386/boot/compressed/misc.c Thu Mar 7 21:18:54 2002 +++ linux/arch/i386/boot/compressed/misc.c Tue May 7 18:04:08 2002 @@ -124,10 +124,6 @@ static int vidport; static int lines, cols; -#ifdef CONFIG_MULTIQUAD -static void *xquad_portio = NULL; -#endif - #include "../../../../lib/inflate.c" static void *malloc(int size) @@ -202,10 +198,10 @@ SCREEN_INFO.orig_y = y; pos = (x + cols * y) * 2; /* Update cursor position */ - outb_p(14, vidport); - outb_p(0xff & (pos >> 9), vidport+1); - outb_p(15, vidport); - outb_p(0xff & (pos >> 1), vidport+1); + outb_local(14, vidport); slow_down_io(); + outb_local(0xff & (pos >> 9), vidport+1); slow_down_io(); + outb_local(15, vidport); slow_down_io(); + outb_local(0xff & (pos >> 1), vidport+1); slow_down_io(); } static void* memset(void* s, int c, size_t n) | |