gpt4 book ai didi

c - __udivdi3 undefined — 如何找到使用它的代码?

转载 作者:太空宇宙 更新时间:2023-11-04 13:00:45 29 4
gpt4 key购买 nike

在 32 位 Linux 内核上编译内核模块导致

"__udivdi3" [mymodule.ko] undefined!
"__umoddi3" [mymodule.ko] undefined!

在 64 位系统上一切正常。据我所知,这是因为 32 位 Linux 内核不支持 64 位整数除法和取模。

如何找到发布 64 位操作的代码。它们很难手动找到,因为我无法轻易检查“/”是 32 位宽还是 64 位宽。如果“普通”函数未定义,我可以对它们进行 grep,但这在这里是不可能的。还有另一种搜索引用文献的好方法吗?某种“机器代码 grep”?

该模块由几千行代码组成。我真的无法手动检查每一行。

最佳答案

首先,您可以使用 do_div 宏进行 64 位除法。 (注意原型(prototype)是 uint32_t do_div(uint64_t dividend, uint32_t divisor) 并且“dividend”可能会被计算多次。

{
unsigned long long int x = 6;
unsigned long int y = 4;
unsigned long int rem;

rem = do_div(x, y);
/* x now contains the result of x/y */
}

此外,您应该能够在代码中找到 long long int(或 uint64_t)类型的用法,或者,您可以使用-g 标记并使用 objdump -S 获取源注释反汇编。

注意:这适用于 2.6 内核,我没有检查任何更低版本的用法

关于c - __udivdi3 undefined — 如何找到使用它的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33964538/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com