From 58f6e553625c90d928ddd54b8f31634a5b26f05e Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Sat, 24 Apr 2010 19:15:51 +0100 Subject: [PATCH] [build] Generate random build identifier Randomly generate a 32-bit build identifier that can be used to identify identical iPXE ROMs when multiple such ROMs are present in a system (e.g. when a multi-function NIC exposes the same iPXE ROM image via each function's expansion ROM BAR). Signed-off-by: Michael Brown --- src/Makefile.housekeeping | 9 +++++++-- src/arch/i386/prefix/romprefix.S | 3 +++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/Makefile.housekeeping b/src/Makefile.housekeeping index a7162e6f..685b6d6e 100644 --- a/src/Makefile.housekeeping +++ b/src/Makefile.housekeeping @@ -686,13 +686,18 @@ $(BLIB) : $(BLIB_OBJS) $(BLIB_LIST) $(MAKEDEPS) $(Q)$(RANLIB) $@ blib : $(BLIB) +# Command to generate build ID. Must be unique for each $(BIN)/%.tmp, +# even within the same build run. +# +BUILD_ID_CMD := perl -e 'printf "0x%08x", int ( rand ( 0xffffffff ) );' + # Build an intermediate object file from the objects required for the # specified target. # -$(BIN)/%.tmp : $(BLIB) $(MAKEDEPS) $(LDSCRIPT) +$(BIN)/%.tmp : $(BLIB) $(MAKEDEPS) $(LDSCRIPT) $(QM)$(ECHO) " [LD] $@" $(Q)$(LD) $(LDFLAGS) -T $(LDSCRIPT) $(TGT_LD_FLAGS) $(BLIB) -o $@ \ - -Map $(BIN)/$*.tmp.map + --defsym _build_id=`$(BUILD_ID_CMD)` -Map $(BIN)/$*.tmp.map $(Q)$(OBJDUMP) -ht $@ | $(SORTOBJDUMP) >> $(BIN)/$*.tmp.map # Keep intermediate object file (useful for debugging) diff --git a/src/arch/i386/prefix/romprefix.S b/src/arch/i386/prefix/romprefix.S index 6c9b4b0f..dc7c0744 100644 --- a/src/arch/i386/prefix/romprefix.S +++ b/src/arch/i386/prefix/romprefix.S @@ -52,6 +52,9 @@ checksum: .long 0 .previous +build_id: + .long _build_id /* Randomly-generated build ID */ + pciheader: .ascii "PCIR" /* Signature */ .word pci_vendor_id /* Vendor identification */