Hi Patrick, On 13 December 2017 at 03:15, Patrick Brünn <p.bru...@beckhoff.com> wrote: >>From: Patrick Brünn >>Sent: Donnerstag, 30. November 2017 12:22 >> >>Since commit 8eafae209c35932d9a6560809c55ee4641534236 >>my mx53cx9020_defconfig stopped booting. >>... >>It seems important to read into do_fat_read_at_block. If I >>allocate a temporary buffer and read into that one, I still >>can't boot. That seems strange to me as, I couldn't find >>any uninitialized access to do_fat_read_at_block anywhere. >> > I believe I finally tracked it down to the linker. > > Without accessing do_fat_read_at_block within fat.c, I find > .bss. do_fat_read_at_block as "discarded input section" in > my u-boot.map > > With a patch like this: > diff --git a/fs/fat/fat.c b/fs/fat/fat.c > index d16883fa10..8e70fdbc8d 100644 > --- a/fs/fat/fat.c > +++ b/fs/fat/fat.c > @@ -1157,6 +1157,7 @@ int fat_opendir(const char *filename, struct > fs_dir_stream **dirsp) > return -ENOMEM; > memset(dir, 0, sizeof(*dir)); > > + if (do_fat_read_at_block[0]) > + printf("value doesn't matter, the access is important\n"); > + > ret = fat_itr_root(&dir->itr, &dir->fsdata); > if (ret) > goto fail_free_dir; > > The section isn't discarded and my board boots again. > > > Another workaround would be: > diff --git a/arch/arm/config.mk b/arch/arm/config.mk > index 124b44a337..02f61fcc3c 100644 > --- a/arch/arm/config.mk > +++ b/arch/arm/config.mk > @@ -17,7 +17,7 @@ CFLAGS_NON_EFI := -fno-pic -ffixed-r9 -ffunction-sections > -fdata-sections > CFLAGS_EFI := -fpic -fshort-wchar > > LDFLAGS_FINAL += --gc-sections > -PLATFORM_RELFLAGS += -ffunction-sections -fdata-sections \ > +PLATFORM_RELFLAGS += -ffunction-sections \ > -fno-common -ffixed-r9 > PLATFORM_RELFLAGS += $(call cc-option, -msoft-float) \ > $(call cc-option,-mshort-load-bytes,$(call > cc-option,-malignment-traps,)) > > Or a hack like: > diff --git a/arch/arm/cpu/u-boot.lds b/arch/arm/cpu/u-boot.lds > index 37d4c605ac..b916cbc733 100644 > --- a/arch/arm/cpu/u-boot.lds > +++ b/arch/arm/cpu/u-boot.lds > @@ -219,6 +219,7 @@ SECTIONS > } > > .bss_end __bss_limit (OVERLAY) : { > + KEEP(*(.bss.do_fat_read_at_block)); > KEEP(*(.__bss_end)); > } > > I also tried to mark do_fat_read_at_block as: > volatile, __used and/or __attribute__((externally_visible)) > > This doesn't help. > > Moving it into fat_write.c doesn't help either(with/without static) > > My toolchain is: > ~/u-boot$ arm-linux-gnueabihf-gcc -v > Using built-in specs. > COLLECT_GCC=arm-linux-gnueabihf-gcc > COLLECT_LTO_WRAPPER=/usr/lib/gcc-cross/arm-linux-gnueabihf/6/lto-wrapper > Target: arm-linux-gnueabihf > Configured with: ../src/configure -v --with-pkgversion='Debian 6.3.0-18' > --with-bugurl=file:///usr/share/doc/gcc-6/README.Bugs > --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr > --program-suffix=-6 --enable-shared --enable-linker-build-id > --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix > --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu > --enable-libstdcxx-debug --enable-libstdcxx-time=yes > --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libitm > --disable-libquadmath --enable-plugin --enable-default-pie --with-system-zlib > --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo > --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-6-armhf-cross/jre > --enable-java-home > --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-6-armhf-cross > --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-6-armhf-cross > --with-arch-directory=arm --with-ecj-jar=/usr/share/java/eclipse-ecj.jar > --disable-libgcj --with-target-system-zlib --enable-objc-gc=auto > --enable-multiarch --disable-sjlj-exceptions --with-arch=armv7-a > --with-fpu=vfpv3-d16 --with-float=hard --with-mode=thumb > --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu > --target=arm-linux-gnueabihf --program-prefix=arm-linux-gnueabihf- > --includedir=/usr/arm-linux-gnueabihf/include > Thread model: posix > gcc version 6.3.0 20170516 (Debian 6.3.0-18) > > ~/u-boot$ arm-linux-gnueabihf-ld -v > GNU ld (GNU Binutils for Debian) 2.28 > > > Does anyone have an idea what else I can try to prevent my linker from > removing > do_fat_read_at_block?
This doesn't seem to be used unless you have enabled CONFIG_FAT_WRITE. Have you? I wonder if the problem is somewhere else, and the presence of this buffer is just moving things apart in the data space, and thus masking the problem? Regards, Simon _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot