Subject: Re: [vserver] Undefined references to `__umoddi3' and `__udivdi3'
From:Daniël W. Crompton <daniel.crompton@gmail.com>
Date: Sun, 1 Nov 2009 04:18:46 +0000
Sun, 1 Nov 2009 04:18:46 +0000
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

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
>



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

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