Bug 3571 - u-boot: fw_printenv does not build
Summary: u-boot: fw_printenv does not build
Status: RESOLVED FIXED
Alias: None
Product: buildroot
Classification: Unclassified
Component: Other (show other bugs)
Version: unspecified
Hardware: PC Linux
: P5 minor
Target Milestone: ---
Assignee: unassigned
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-04-08 15:22 UTC by Luca Ceresoli
Modified: 2011-04-24 21:35 UTC (History)
1 user (show)

See Also:
Host:
Target:
Build:


Attachments
Buildroot configuration to reproduce the problem (214 bytes, application/octet-stream)
2011-04-08 15:22 UTC, Luca Ceresoli
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Luca Ceresoli 2011-04-08 15:22:35 UTC
Created attachment 3181 [details]
Buildroot configuration to reproduce the problem

fw_printenv does not build in current versions of buildroot.

The problem is well known ussue in upstream U-Boot.
The good news is that there is a workaround.
The bad news is that the issue is known by the U-Boot developers
since last october, but there does not seem to be activity to
really fix it.

For the long story see the links in
http://lists.denx.de/pipermail/u-boot/2011-April/089987.html .

Reproduced with current buildroot (2011.02-116-g64b351f) and the
attached (minimized) config.

The result is:

  CONF  config/config.in
  CONF  config/config.in
mkdir -p /home/murray/temp/buildroot-clean/output/target/usr/sbin
/home/murray/temp/buildroot-clean/output/host/usr/bin/arm-unknown-linux-gnueabi-gcc --sysroot=/home/murray/temp/buildroot-clean/output/host/usr/arm-unknown-linux-gnueabi/sysroot -I/home/murray/temp/buildroot-clean/output/build/u-boot-2010.12/include -I/include \
		-DUSE_HOSTCC -o /home/murray/temp/buildroot-clean/output/target/usr/sbin/fw_printenv \
		/home/murray/temp/buildroot-clean/output/build/u-boot-2010.12/tools/env/*.c /home/murray/temp/buildroot-clean/output/build/u-boot-2010.12/lib*/crc32.c
/home/murray/temp/buildroot-clean/output/host/usr/lib/gcc/arm-unknown-linux-gnueabi/4.4.3/../../../../arm-unknown-linux-gnueabi/bin/ld: errno: TLS definition in /home/murray/temp/buildroot-clean/output/host/usr/arm-unknown-linux-gnueabi/sysroot/lib/libc.so.6 section .tbss mismatches non-TLS reference in /tmp/cccHIRXB.o
/home/murray/temp/buildroot-clean/output/host/usr/arm-unknown-linux-gnueabi/sysroot/lib/libc.so.6: could not read symbols: Bad value
collect2: ld returned 1 exit status
make: *** [/home/murray/temp/buildroot-clean/output/target/usr/sbin/fw_printenv] Error 1

I solved this problem applying the known workaround this way:

diff --git a/boot/u-boot/u-boot.mk b/boot/u-boot/u-boot.mk
index d859cf5..4de4d1f 100644
--- a/boot/u-boot/u-boot.mk
+++ b/boot/u-boot/u-boot.mk
@@ -166,9 +166,8 @@ $(TARGET_DIR)/usr/bin/mkimage: $(U_BOOT_DIR)/.configured
 # Build manually fw_printenv for the target
 $(TARGET_DIR)/usr/sbin/fw_printenv: $(U_BOOT_DIR)/.configured
 	mkdir -p $(@D)
-	$(TARGET_CC) -I$(U_BOOT_DIR)/include -I$(LINUX_HEADERS_DIR)/include \
-		-DUSE_HOSTCC -o $@ \
-		$(U_BOOT_DIR)/tools/env/*.c $(U_BOOT_DIR)/lib*/crc32.c
+	$(MAKE) HOSTCC="$(TARGET_CC)" -C $(U_BOOT_DIR) env
+	cp $(U_BOOT_DIR)/tools/env/fw_printenv $@
 	$(STRIPCMD) $(STRIP_STRIP_UNNEEDED) $@
 	ln -sf fw_printenv $(TARGET_DIR)/usr/sbin/fw_setenv

This works for me, but I don't know if will for other people, nor
if it is general enough to be proposed for mainline buildroot inclusion.

Any observations?

Luca
Comment 1 Peter Korsgaard 2011-04-24 21:35:30 UTC
I was first a bit concerned about how long this env target had been supported (as we support older u-boot versions as well), but it seems like it has been there very long.

Thanks, committed with minor tweaks.