On Wednesday 07 October 2015 20:46:23 Ksenija Stanojević wrote:
On Sun, Oct 4, 2015 at 9:34 PM, Arnd Bergmann arnd@arndb.de wrote:
On Saturday 03 October 2015 21:15:46 Ksenija Stanojević wrote:
On Thu, Oct 1, 2015 at 10:05 PM, Arnd Bergmann arnd@arndb.de wrote:
On Thursday 01 October 2015 19:44:46 Ksenija Stanojević wrote:
In my local repository I modified my .config file so that CONFIG_64BIT is not set, and after that I recompiled all directory, but I don't get any errors/warning at compile-time. Also I separetly compiled this specific file but still no warnings My .config looks something like this:
. . .
Should I change my working kernel or .config file is just enough?
I think the problem is that you only compiled that directory but did not attempt to do a full rebuild of the kernel and modules, which is required to catch link-time errors.
The compiler does not know at this point that the 64-bit division function is undefined in the kernel, you only get a warning at the 'make vmlinux' link stage (for built-in drivers) or the 'make modules' modpost stage afterwards.
I rebuilded my repository with: make vmlinux make modules but I still don't get any warnings. Do you have any other suggestion on what I'm doing wrong?
I just tried it on my machine and I get (for an ARM build)
$ make -skj30 ERROR: "__aeabi_ldivmod" [drivers/staging/fbtft/fbtft.ko] undefined!
I got this error: ERROR: "__divdi3" [drivers/staging/fbtft/fbtft.ko] undefined!
I suppose that divdi3 is division used for long long by gcc on x86
Correct, this function name is architecture specific. These functions (__divdi3, __aeabi_ldivmod, ...) are intentionally not part of the kernel image so force kernel developers to either use the div_u64() family of functions for division or find a way to avoid it, which is usually preferred but not always possible.
Arnd