# HG changeset patch # User Space Falcon # Date 1433610280 0 # Node ID 3213b5ecae51ce24e1333e171d7983ed9e2443f1 # Parent 89ea4c7215a7dbd3de445d1caf9094769fccb9f8 README added diff -r 89ea4c7215a7 -r 3213b5ecae51 README --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/README Sat Jun 06 17:04:40 2015 +0000 @@ -0,0 +1,29 @@ +The Mercurial tree you are looking at is a kit for applying patches to those +parts of TCS211 Calypso GSM firmware that came as binary object libraries +without complete corresponding source. + +TI's TCS211 fw build system expects all prebuilt objects (i.e., those which it +should not or cannot recompile from source) to be packaged in libraries (*.lib); +TI's *.lib format is a variant of classic UNIX ar(5) with COFF objects inside. +One can use the standard ar command on a GNU/Linux machine to extract the *.obj +files from TI's *.lib, but I wasn't comfortable with the idea of patching these +*.obj files in their extracted form and then using GNU/Linux version of ar to +repackage them back into *.lib, so instead I wrote a tool that processes a *.lib +archive and applies a specified set of patches to one or more member objects +contained therein. + +The libs, gpflibs and oslibs subdirectories contain the set of *.lib files that +constitute our starting point, i.e., the baseline to which patches are to be +applied; the tool subdirectory contains the library patching tool and the +patches subdirectory contains some example patches. The patched libraries +built in the patches directory can then be plopped directly into a TCS211 +project tree in the place of the original without any manual splitting or +repackaging. + +The leo-obj subtree in the freecalypso-reveng repository contains a specialized +object format parser and disassembler for TI's version of COFF in question, as +well as some already prepared disassembly hints for some parts of the TCS211 +binary deliverable we are working with. The present library patching tool +allows one to patch any given byte in any section in any member object in an +archive library; disassembly with tiobjd should be used to figure out which +byte(s) one needs to patch in order to effect the desired change.