Re: unresolved symbol: __udivdi3

Ben Greear
2002-04-19T21:58:13Z

Randy.Dunlap wrote:

> On Fri, 19 Apr 2002, Ben Greear wrote:
>
> | I would like to be able to devide 64bit numbers in a kernel module,
> | but I get unresolved symbols when trying to insmod.
> |
> | Does anyone have any ideas how to get around this little issue
> | (without the obvious of casting the hell out of all my __u64s
> | when doing division and throwing away precision.)?
>
> Did you look at linux/include/asm*/div64.h ?

I changed my code to look like this:

char *p = info->pg_result;
__u64 mbps = 0;
__u64 t1 = (info->pg_sofar*1000);
__u64 t2 = do_div(total, 1000);
__u64 pps = 0; /* do_div(t1, t2); */
t1 = (info->pg_sofar * 1000);
mbps = 0;/* do_div(t1, t2); */
/* mbps *= info->pkt_size; */

This code will load w/out problems. However, if I uncomment the do_div
on the line: __u64 pps = 0; /* do_div(t1, t2); */
then I get another unresolved symbol:
__umodi3

I'm guessing that there is some optimization the compiler is doing that
is using the mod operator somehow, but I am unsure about how to work around
this.

Thanks,
Ben

>
>

--
Ben Greear <greearb@candelatech.com> <Ben_Greear AT excite.com>
President of Candela Technologies Inc http://www.candelatech.com
ScryMUD: http://scry.wanfear.com http://scry.wanfear.com/~greear