On Sun, Nov 01, 2009 at 04:18:46AM +0000, Daniël W. Crompton wrote: > Sorry Herbert you are absolutely right. > From Gentoo Portage, 2.6.22-vs2.2.0.7-gentoo, using gcc > (Gentoo 4.3.2-r3 p1.6, pie-10.1.5) 4.3.2 that kernel is 1.5 years old, and your gcc is pretty new, so it optimizes out the loop and uses a div/mod, which is not available to the kernel (lack of libgcc) I think the patch you mentioned should be fine, but I see no point in adding it to the 2.6.22.x branch ... (would require additional testing with older and newer gcc as well as verification that it doesn't harm anything) possible alternative solutions: - get an older gcc, which is known to compile that kernel fine (vanilla) - get a newer kernel, preferably 2.6.31.x and use that instead of the old 2.6.22.x branch best, Herbert > Ciao, > Daniel > blaze your trail > -- > redhat > > http://feeds.feedburner.com/GeneralMusing > > 2009/10/31 Herbert Poetzl <herbert@13thfloor.at> > > > On Sat, Oct 31, 2009 at 07:04:33PM +0000, Daniël W. Crompton wrote: > > > Happy Halloween, > > > > > > I was getting a error (below) while compiling a new kernel, I found out > > that > > > a patch (also below) was required for linux/include/time.h as part of the > > > code is being optimized away losing the references. > > > > > > I check the vserver mailing list and didn't see any post about this > > issue, > > > so I am posting it here so we now have a record of it. > > > > > > Ciao, > > > Daniel > > > > > > > > > *ERROR:* > > > make bzImage > > > ... > > > LD .tmp_vmlinux1 > > > kernel/built-in.o: In function `getnstimeofday': > > > (.text+0x22bdc): undefined reference to `__umoddi3' > > > kernel/built-in.o: In function `getnstimeofday': > > > (.text+0x22bfc): undefined reference to `__udivdi3' > > > kernel/built-in.o: In function `do_gettimeofday': > > > (.text+0x22d0e): undefined reference to `__udivdi3' > > > kernel/built-in.o: In function `do_gettimeofday': > > > (.text+0x22d2c): undefined reference to `__umoddi3' > > > kernel/built-in.o: In function `timekeeping_resume': > > > timekeeping.c:(.text+0x22fd4): undefined reference to `__umoddi3' > > > timekeeping.c:(.text+0x22ff4): undefined reference to `__udivdi3' > > > kernel/built-in.o: In function `update_wall_time': > > > (.text+0x23306): undefined reference to `__umoddi3' > > > kernel/built-in.o: In function `update_wall_time': > > > (.text+0x23326): undefined reference to `__udivdi3' > > > kernel/built-in.o: In function `update_wall_time': > > > (.text+0x23796): undefined reference to `__umoddi3' > > > kernel/built-in.o: In function `update_wall_time': > > > (.text+0x237b6): undefined reference to `__udivdi3' > > > make: *** [.tmp_vmlinux1] Error 1 > > > > what kernel and Linux-VServer patch is that? > > and what compiler do you use? > > > > TIA, > > Herbert > > > > > *PATCH:* > > > > > > diff --git a/include/linux/time.h b/include/linux/time.h > > > index 2091a19..d32ef0a 100644 > > > --- a/include/linux/time.h > > > +++ b/include/linux/time.h > > > > > > @@ -174,6 +174,10 @@ static inline void timespec_add_ns(struct > > > timespec *a, u64 ns) > > > { > > > ns += a->tv_nsec; > > > while(unlikely(ns >= NSEC_PER_SEC)) { > > > + /* The following asm() prevents the compiler from > > > > > > + * optimising this loop into a modulo operation. */ > > > + asm("" : "+r"(ns)); > > > + > > > ns -= NSEC_PER_SEC; > > > a->tv_sec++; > > > } > > > > > > > > > > > > > > > blaze your trail > > > > > > -- > > > redhat > > > > > > http://feeds.feedburner.com/GeneralMusing > >