[coreboot-gerrit] Patch set updated for coreboot: 3651e58 AMD hudson & SB800 - Fix issues with mawk

Martin Roth (martin.roth@se-eng.com) gerrit at coreboot.org
Mon Mar 25 19:22:43 CET 2013


Martin Roth (martin.roth at se-eng.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/2628

-gerrit

commit 3651e58b74dd0480dbd0b0ed21898f59642d71fd
Author: Martin Roth <martin.roth at se-eng.com>
Date:   Mon Mar 11 13:17:27 2013 -0600

    AMD hudson & SB800 - Fix issues with mawk
    
    When calculating the offsets of the various binary blobs within the
    coreboot.rom file, we noticed that using mawk as the awk tool instead
    of using gawk led to build issues.  This was finally traced to the
    maximum value of the unsigned long variables within mawk - 0x7fff_ffff.
    Because we were doing calculations on values up in the 0xffxxxxxx
    range, these numbers would either be turned into floating point values
    and printed using scientific notation, or truncated at 0x7fff_ffff.
    
    To fix this, we print the values out as floating point, with no decimal
    digits.  This works in gawk, mawk, and original-awk and as the testing
    below show, seems to be the best way to do this.
    
    printf %u 0xFFFFFFFF | awk '{printf("%.0f %u %d", $1 , $1 , $1 )}'
    mawk:         4294967295 2147483647 2147483647
    original-awk: 4294967295 2147483648 4294967295
    gawk:         4294967295 4294967295 4294967295
    
    The issue of %d not matching gawk and original-awk has been reported
    to ubuntu.
    
    In the future, I'd recommend that whenever awk is used, a format is
    specifiedi. It doesn't seem that we can count on the representation
    being the same between the different versions.
    
    Change-Id: I7b6b821c8ab13ad11f72e674ac726a98e8678710
    Signed-off-by: Martin Roth <martin.roth at se-eng.com>
---
 src/southbridge/amd/agesa/hudson/Makefile.inc | 15 +++++++++------
 src/southbridge/amd/cimx/sb800/Makefile.inc   |  6 ++++--
 2 files changed, 13 insertions(+), 8 deletions(-)

diff --git a/src/southbridge/amd/agesa/hudson/Makefile.inc b/src/southbridge/amd/agesa/hudson/Makefile.inc
index 18a0ffb..da029a0 100644
--- a/src/southbridge/amd/agesa/hudson/Makefile.inc
+++ b/src/southbridge/amd/agesa/hudson/Makefile.inc
@@ -25,7 +25,8 @@ HUDSON_FWM_POSITION=$(shell printf %u $(CONFIG_HUDSON_FWM_POSITION))
 #assume the cbfs header is less than 128 bytes.
 ROMSIG_SIZE=16
 ifeq ($(CONFIG_HUDSON_XHCI_FWM), y)
-HUDSON_XHCI_POSITION=$(shell echo $(HUDSON_FWM_POSITION) $(ROMSIG_SIZE) 128 | awk '{print $$1 + $$2 + $$3}')
+HUDSON_XHCI_POSITION=$(shell echo $(HUDSON_FWM_POSITION) $(ROMSIG_SIZE) 128 \
+	| awk '{printf("%.0f", $$1 + $$2 + $$3)}')
 XHCI_FWM_SIZE=$(word 5,$(shell ls -l $(CONFIG_HUDSON_XHCI_FWM_FILE)))
 else
 HUDSON_XHCI_POSITION=0
@@ -34,7 +35,8 @@ endif
 
 ifeq ($(CONFIG_HUDSON_GEC_FWM), y)
 HUDSON_GEC_POSITION=$(shell echo $(HUDSON_FWM_POSITION) $(ROMSIG_SIZE) 128 \
-		$(XHCI_FWM_SIZE) 128 | awk '{print $$1 + $$2 + $$3 + $$4 + $$5}')
+	$(XHCI_FWM_SIZE) 128 \
+	| awk '{printf("%.0f", $$1 + $$2 + $$3 + $$4 + $$5)}')
 GEC_FWM_SIZE=$(word 5,$(shell ls -l $(CONFIG_HUDSON_GEC_FWM_FILE)))
 else
 HUDSON_GEC_POSITION=0
@@ -42,10 +44,11 @@ GEC_FWM_SIZE=0
 endif
 
 ifeq ($(CONFIG_HUDSON_IMC_FWM), y)
-HUDSON_IMC_POSITION_UNALIGN=$(shell echo $(HUDSON_FWM_POSITION) $(ROMSIG_SIZE) 128 \
-		$(XHCI_FWM_SIZE) 128 \
-		$(GEC_FWM_SIZE) 128 65535 | awk '{print $$1 + $$2 + $$3 + $$4 + $$5 + $$6 + $$7 + $$8}')
-HUDSON_IMC_POSITION=$(shell echo $(HUDSON_IMC_POSITION_UNALIGN) | awk '{print $$1 - $$1 % 65536}')
+HUDSON_IMC_POSITION_UNALIGN=$(shell echo $(HUDSON_FWM_POSITION) \
+	$(ROMSIG_SIZE) 128 $(XHCI_FWM_SIZE) 128 $(GEC_FWM_SIZE) 128 65535 \
+	| awk '{printf("%.0f", $$1 + $$2 + $$3 + $$4 + $$5 + $$6 + $$7 + $$8)}')
+HUDSON_IMC_POSITION=$(shell echo $(HUDSON_IMC_POSITION_UNALIGN) \
+	| awk '{printf("%.0f", $$1 - $$1 % 65536)}')
 else
 HUDSON_IMC_POSITION=0
 endif
diff --git a/src/southbridge/amd/cimx/sb800/Makefile.inc b/src/southbridge/amd/cimx/sb800/Makefile.inc
index 4041b22..524c2d3 100644
--- a/src/southbridge/amd/cimx/sb800/Makefile.inc
+++ b/src/southbridge/amd/cimx/sb800/Makefile.inc
@@ -70,8 +70,10 @@ SB800_FWM_POSITION=$(shell printf %u $(CONFIG_SB800_FWM_POSITION))
 #assume the cbfs header is less than 128 bytes.
 ROMSIG_SIZE=16
 
-SB800_IMC_POSITION_UNALIGN=$(shell echo $(SB800_FWM_POSITION) $(ROMSIG_SIZE) 128 65535 | awk '{print $$1 + $$2 + $$3 + $$4}')
-SB800_IMC_POSITION=$(shell echo $(SB800_IMC_POSITION_UNALIGN) | awk '{print $$1 - $$1 % 65536}')
+SB800_IMC_POSITION_UNALIGN=$(shell echo $(SB800_FWM_POSITION) $(ROMSIG_SIZE) \
+	128 65535 | awk '{printf("%.0f", $$1 + $$2 + $$3 + $$4)}')
+SB800_IMC_POSITION=$(shell echo $(SB800_IMC_POSITION_UNALIGN) \
+	| awk '{printf("%.0f", $$1 - $$1 % 65536)}')
 
 $(obj)/coreboot_SB800_romsig.bin: \
 			$(call strip_quotes, $(CONFIG_SB800_IMC_FWM_FILE)) \



More information about the coreboot-gerrit mailing list