Change the generation strategy from code to type descriptors. This changes the way marshalling/unmarshalling is done. Previously the code generator would produce a C function for each structure. With this change, the layout of a structure is encoded in an array of bytes, and a piece of generic code traverses the array and performs the required operations. The main reason to do this is a reduced footprint, at the expense of some marshal/unmarshal overhead (but the TPM is so slow that the impact of this overhead should be negligible). Version with generated marshallers: semenzato@semenzato:~/trunks$ size tpmc text data bss dec hex filename 188243 4172 48 192463 2efcf tpmc version with interpreter-based marshalling: semenzato@semenzato:~/trunks$ size tpmc text data bss dec hex filename 64655 8404 48 73107 11d93 tpmc Both of them contain the marshalling/unmarshalling code for all commands. For a small subset of commands, the generated-code version is probably still smaller, but the interpreted version is small enough that this won't be a concern even in the firmware. This change also adds the command TPM_GetTestResults. BUG=chromium-os:19488 TEST=none Change-Id: I2f5b30b480a0efcc4aa3db280aab20ec25681bab Reviewed-on: https://gerrit.chromium.org/gerrit/37040 Reviewed-by: Darren Krahn <dkrahn@chromium.org> Commit-Queue: Luigi Semenzato <semenzato@chromium.org> Tested-by: Luigi Semenzato <semenzato@chromium.org>
12 files changed