Real-time tracing of dynamic local data in high level languages in the presence of process context switches Patent #: 5127103
ApplicationNo. 666083 filed on 03/07/1991
US Classes:717/159, Code restructuring714/38, Of computer software717/128, Tracing717/132, Using program flow graph717/147, Platform-independent form (e.g., abstract code)717/156Using flow graph
ExaminersPrimary: Shaw, Gareth D.
Assistant: Chaki, Kakali
Attorney, Agent or Firm
Foreign Patent References
International ClassesG06F 009/45
AbstractA code translator, constructed similar to a compiler, accepts as an input to be translated the assembly code written for one architecture (e.g., VAX), and produces as an output object code for a different machine architecture (e.g., RISC). The input code is converted into an intermediate language, and a flow graph is constructed. The flow graph is referenced by a flow analyzer for recognizing certain architecture-specific and calling standard-specific coding practices or idioms that cannot be automatically converted, particularly relating to stack usage, register usage, condition codes, and passing arguments for procedure calls. By tracking stack usage within routines, the compiler can distinguish up-level stack and return address references from valid local references. Also, it can inform the user of stack misalignment, which has a severe performance penalty, and can detect code segments where different flow paths may result in different stack depths at runtime, which may indicate a source code error. Register usage is likewise tracked to determine which registers are destroyed by a routine, and generate routine prologue and epilogue code which performs register saves, as well as provide register "hints" to aid the user in adding an entry point declaration or documentation for the routine. The usage of condition codes is likewise tracked, by a backward walk through the flow graph, so that code to fabricate needed values is generated. In addition, all argument pointer based memory references in the input code is tracked to determine how the same argument reference may be made in the target environment.