Messages in this thread | | | Date | Sat, 1 May 2004 10:45:36 -0700 (PDT) | From | Linus Torvalds <> | Subject | Re: 2.6.6-rc3: gcc 2.95: cx88 __ucmpdi2 error |
| |
On Sat, 1 May 2004, Adrian Bunk wrote: > >... > > WARNING: /lib/modules/2.6.6-rc3/kernel/drivers/media/video/cx88/cx8800.ko > > needs unknown symbol __ucmpdi2 > > I'm also seeing this, but only with gcc 2.95, not with gcc 3.3.3 . > > It comes from drivers/media/video/cx88/cx88-video.c, more exactly from > the switch in set_tvaudio.
I don't see that set_tvaudio() uses any 64-bit comparisons at all, so I have this suspicion that the linker reports the wrong function or something.
It might help to use "objdump" to disassemble the object file and see where the call to __ucmpdi2 really is - or just build the file as an asm file in the first place ("make drivers/media/video/cx88/cx88-video.s") and see if you see anything interesting there.
> But I have to admit I don't understand why exactly it does happen.
I'm susprised too. gcc has historically done all the "simple" 64-bit ops in-line, since they usually are just two instructions or so, and doing them out-of-line tends to be _more_ work with argument setup etc.
Also, most of the time when this happens, we didn't really want 64-bit arithmetic in the first place ("long long" arithmetic generates not only slower and bigger code, it's historically been pretty buggy in gcc, so most of the kernel is pretty careful about minimizing it). I suspect that this will end up being the same thing (ie we wanted a 64-bit temporary result to avoid overflows, but didn't actually need to propagate it all the way).
Linus - 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/
| |