+ if "HASH" in ReportType:\r
+ OutputDir = os.path.join(self._BuildDir, "OUTPUT")\r
+ DefaultEFIfile = os.path.join(OutputDir, self.ModuleName + ".efi")\r
+ if os.path.isfile(DefaultEFIfile):\r
+ Tempfile = os.path.join(OutputDir, self.ModuleName + "_hash.tmp")\r
+ # rebase the efi image since its base address may not zero\r
+ cmd = ["GenFw", "--rebase", str(0), "-o", Tempfile, DefaultEFIfile]\r
+ try:\r
+ PopenObject = subprocess.Popen(' '.join(cmd), stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)\r
+ except Exception, X:\r
+ EdkLogger.error("GenFw", COMMAND_FAILURE, ExtraData="%s: %s" % (str(X), cmd[0]))\r
+ EndOfProcedure = threading.Event()\r
+ EndOfProcedure.clear()\r
+ if PopenObject.stderr:\r
+ StdErrThread = threading.Thread(target=ReadMessage, args=(PopenObject.stderr, EdkLogger.quiet, EndOfProcedure))\r
+ StdErrThread.setName("STDERR-Redirector")\r
+ StdErrThread.setDaemon(False)\r
+ StdErrThread.start()\r
+ # waiting for program exit\r
+ PopenObject.wait()\r
+ if PopenObject.stderr:\r
+ StdErrThread.join()\r
+ if PopenObject.returncode != 0:\r
+ EdkLogger.error("GenFw", COMMAND_FAILURE, "Failed to generate firmware hash image for %s" % (DefaultEFIfile))\r
+ if os.path.isfile(Tempfile):\r
+ self.Hash = hashlib.sha1()\r
+ buf = open(Tempfile, 'rb').read()\r
+ if self.Hash.update(buf):\r
+ self.Hash = self.Hash.update(buf)\r
+ self.Hash = self.Hash.hexdigest()\r
+ os.remove(Tempfile)\r
+\r