ll_entry_count returns 0 even though the linker list has 5 entries
Osman
aibaykaro at gmail.com
Mon Oct 14 14:17:20 CEST 2024
Hello,
After enabling CONFIG_FIT in defconfig the u-boot-spl becomes unable to
detect the root_driver in function lists_driver_lookup_name(). The spl
executes without issues when manually changing the n_ents variable to 5
while debugging so i am guessing the ll_entry_count() function somehow
returns the wrong value but i am not sure why. For reference this is the
section in u-boot-spl.map file that contains the "root_driver":
__u_boot_list_2_driver_1
0x0000000080009b78 0x0 drivers/core/root.o
__u_boot_list_2_driver_2_root_driver
0x0000000080009c68 0x78 drivers/core/root.o
0x0000000080009c68
_u_boot_list_2_driver_2_root_driver
__u_boot_list_2_driver_3
0x0000000080009dd0 0x0 drivers/core/root.o
(gdb) x /8xw 0x0000000080009c68
0x80009c68 <_u_boot_list_2_driver_2_root_driver>: 0x800091a0 0x00000000
0x00000000 0x00000000
By manually calculating (end-start)/size from the symbol addresses of the
.map file i found the correct value to be 5 but ll_entry_count returns 0
while the function lists_driver_lookup_name executes:
(gdb) s
27 const int n_ents = ll_entry_count(struct driver, driver);
(gdb) s
30 for (entry = drv; entry != drv + n_ents; entry++) {
(gdb) info locals
drv = 0x80009b78 <_u_boot_list_2_driver_2_cpu_bus>
n_ents = 0
entry = 0x80009b78 <_u_boot_list_2_driver_2_cpu_bus>(gdb) frame#0
lists_driver_lookup_name (name=0x800091a0 "root_driver")
I am not sure whats causing this but disabling CONFIG_FIT in my defconfig
causes the program to execute without issues again. Could someone point out
what i am missing here?
Regards,
Osman
More information about the U-Boot
mailing list