+U-Boot Mailing List On Thu, 17 Oct 2024 at 03:03, Osman <[email protected]> wrote: > > Hello Simon, > > The problem is solved after enabling SPL_OPENSBI in my case, it would have > been better if I knew the reason for it but I can't see how the linker list > is related to opensbi configuration. Thank you for your time. > > By the way I made sure to try the spl by only disabling spl_opensbi > configuration to make sure other changes are not affecting it but disabling > really causes it to fail again.
I wonder if this has something to do with alignment? Regards, Simon > > Regards, > > Osman > > Osman <[email protected]>, 15 Eki 2024 Sal, 14:17 tarihinde şunu yazdı: >> >> Hi Simon, >> >> This is a 64 bit RISC-V platform, i don't have LINKER_LIST_ALIGN in my >> defconfig so it should be 4 by default however it's not a problem with >> linker list alignment i suppose. After debugging it in assembly I found out >> that it successfully calculates the length between the start and end of the >> linker list, it just divides incorrectly because the inverse value of the >> size of struct driver is wrong. The rodata section which contains that size >> value is filled with zeros. For reference this is the location it looks for >> the size value: >> >> u-boot-spl.map: >> .rodata.cst8 0x0000000080007eb0 0x8 drivers/core/lists.o >> >> and this is what i see while debugging: >> >> (gdb) x /x 0x0000000080007eb0 >> 0x80007eb0: 0x00000000 >> >> it should be something like 0xEEEEEEEF for it to work correctly. >> Actually there are a lot of spaces that are filled with zeros is this >> normal?: >> >> (gdb) x /64w 0x0000000080007e60 >> 0x80007e60: 0x69797254 0x7420676e 0x6f62206f 0x6620746f >> 0x80007e70: 0x206d6f72 0x000a7325 0x3a4c5053 0x736e5520 >> 0x80007e80: 0x6f707075 0x64657472 0x6f6f4220 0x65442074 >> 0x80007e90: 0x00000000 0x00000000 0x00000000 0x00000000 >> 0x80007ea0: 0x00000000 0x00000000 0x00000000 0x00000000 >> 0x80007eb0: 0x00000000 0x00000000 0x00000000 0x00000000 >> 0x80007ec0: 0x00000000 0x00000000 0x00000000 0x00000000 >> 0x80007ed0: 0x00000000 0x00000000 0x00000000 0x00000000 >> 0x80007ee0: 0x00000000 0x00000000 0x00000000 0x00000000 >> 0x80007ef0: 0x00000000 0x00000000 0x00000000 0x00000000 >> 0x80007f00: 0x00000000 0x00000000 0x00000000 0x00000000 >> 0x80007f10: 0x00000000 0x00000000 0x00000000 0x00000000 >> 0x80007f20: 0x00000000 0x00000000 0x00000000 0x00000000 >> 0x80007f30: 0x00000000 0x00000000 0x00000000 0x00000000 >> 0x80007f40: 0x00000000 0x00000000 0x80007f48 0x00000000 >> 0x80007f50: 0x80007f48 0x00000000 0x80007f48 0x00000000 >> >> u-boot-spl.map: >> .rodata.boot_from_devices.str1.8 >> 0x0000000080007e60 0x39 common/spl/spl.o >> *fill* 0x0000000080007e99 0x7 >> .rodata.cst8 0x0000000080007ea0 0x8 common/spl/spl.o >> .rodata.cst8 0x0000000080007ea8 0x8 lib/tiny-printf.o >> .rodata.cst8 0x0000000080007eb0 0x8 drivers/core/lists.o >> .rodata.devfdt_get_addr_index.str1.8 >> 0x0000000080007eb8 0x4 drivers/core/fdtaddr.o >> .rodata.dm_extended_scan.str1.8 >> 0x0000000080007eb8 0x12 drivers/core/root.o >> 0x1a (size before relaxing) >> *fill* 0x0000000080007eca 0x6 >> .rodata.do_reset.str1.8 >> 0x0000000080007ed0 0x29 arch/riscv/lib/reset.o >> *fill* 0x0000000080007ef9 0x7 >> .rodata.fdt_address_cells.str1.8 >> 0x0000000080007f00 0xf lib/libfdt/fdt_addresses.o >> *fill* 0x0000000080007f0f 0x1 >> .rodata.fdt_find_or_add_subnode.str1.8 >> 0x0000000080007f10 0xc common/fdt_support.o >> *fill* 0x0000000080007f1c 0x4 >> .rodata.fdt_fixup_memory_banks.str1.8 >> 0x0000000080007f20 0x9c common/fdt_support.o >> *fill* 0x0000000080007fbc 0x4 >> .rodata.fdt_get_alias_namelen.str1.8 >> 0x0000000080007fc0 0x9 lib/libfdt/fdt_ro.o >> >> I am not sure what is happening here, is there a way to check how a >> specific rodata region is filled? >> >> Regards, >> >> Osman

