On Jul 26, 2013, at 9:36 AM, "Kirkendall, Garrett" <[email protected]> wrote:
> According to http://docs.python.org/2/library/struct.html there are > indicators to be put at the beginning of the format string to indicate that > we want elements in standard size instead of native size. "=" selects native > byte order with python standard size and no alignment restrictions. > > So, maybe it should be: > struct.unpack("=LHHBBBBBBBB", DepexFile.read(16)) > Garrett, Good point, the table in 7.3.2.2 shows standard sizes and that is what probably caused the issues. It looks the default for a struct format string is native size and alignment, both of which are bad. Size can change based on OS ABI and if your Python is 32 or 64 bits (what I saw). Also the ABIs on structure alignment are different between Windows and Unix when it comes to 64-bit items. Given EFI is little-endian it may be better to use "<" vs. "=" so we never have an endian issue. Thanks, Andrew Fish > But then the code that builds the "DepexFile" needs to be updated as well. > > I guess to be truly portable, we would need to pick an endianness as well and > then fix all structure references in all of the python files. > > Here are what my two python installs show for the size of "L" and "l": > > ActivePython 2.7.2.5 (ActiveState Software Inc.) based on > Python 2.7.2 (default, Jun 24 2011, 12:22:14) [MSC v.1500 64 bit (AMD64)] on > win32 >>>> struct.calcsize("L") > 4 >>>> struct.calcsize("l") > 4 >>>> struct.calcsize("=L") > 4 >>>> struct.calcsize("=l") > 4 > > Python 2.7.4 (default, Apr 19 2013, 18:28:01) > [GCC 4.7.3] on linux2 >>>> struct.calcsize("L") > 8 >>>> struct.calcsize("l") > 8 >>>> struct.calcsize("=L") > 4 >>>> struct.calcsize("=l") > 4 > > Garrett Kirkendall > SMTS Firmware Engineer > AMD Technology & Engineering > 7171 Southwest Parkway > Austin, TX, 78735 > U.S.A. > O: +(1) 512 602 3255 > > Visit us at: Facebook | amd.com > > -----Original Message----- > From: Andrew Fish [mailto:[email protected]] > Sent: Wednesday, July 17, 2013 12:32 PM > To: [email protected] > Cc: [email protected] > Subject: [edk2-buildtools] struct.unpack("LHHBBBBBBBB", DepexFile.read(16)) > fails on OS X 64-bit Python as the size is 20. > > I was trying to run a build report and I started to get failures parsing > binary Depex files. I tracked it down to struct.unpack("LHHBBBBBBBB", > DepexFile.read(16)) throwing an error that the size required was 20 not 16. > > After digging around I found out that struct.calcsize ("L") == 8 for 64-bit > version of Python, so the Python documentation is misleading about the sizeof > "L". It looks like "I" is a more portable way to represent a 32-bit number. > > ~/edk2(master)>python > Python 2.7.2 (default, Oct 11 2012, 20:14:37) [GCC 4.2.1 Compatible Apple > Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin Type "help", "copyright", > "credits" or "license" for more information. >>>> import struct >>>> struct.calcsize ("L") > 8 >>>> struct.calcsize ("I") > 4 > > Thanks, > > Andrew Fish > > > > > > > ------------------------------------------------------------------------------ > See everything from the browser to the database with AppDynamics Get > end-to-end visibility with application monitoring from AppDynamics Isolate > bottlenecks and diagnose root cause in seconds. > Start your free trial of AppDynamics Pro today! > http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk > _______________________________________________ > edk2-buildtools-devel mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/edk2-buildtools-devel > > ------------------------------------------------------------------------------ See everything from the browser to the database with AppDynamics Get end-to-end visibility with application monitoring from AppDynamics Isolate bottlenecks and diagnose root cause in seconds. Start your free trial of AppDynamics Pro today! http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk _______________________________________________ edk2-buildtools-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/edk2-buildtools-devel
