CLI-based compilation flows for the C language

Embedded systems contain a wide variety of processors. Economical and technological factors favor systems made of a combination of diverse but programmable processors. Software has a longer lifetime than the hardware for which it is initially designed. Application portability is thus of utmost importance for the embedded systems industry. The Common Language Infrastructure (CLI) is a rich virtu-alization environment for the execution of applications written in multiple languages. CLI efficiently captures the semantics of unmanaged languages, such as C. We investigate the use of CLI as a deployment format for embedded systems to reconcile apparently contradictory constraints: the need for portability, the need for high performance and the existence of a large base of legacy C code. In this paper, we motivate our CLI-based compilation environment for C, and its different use scenarios. We then focus on the specific challenges of effectively mapping the C language to CLI, and our proposed solutions. We finally analyze the interactions between the CLI environment and native libraries, which is of primary importance for a practical use of the proposed approach.

[1]  David R. Hanson lcc.NET: targeting the .NET Common Intermediate Language from Standard C , 2004, Softw. Pract. Exp..

[2]  Erven Rohou Portable and Efficient Auto-vectorized Bytecode: a Look at the Interaction between Static and JIT Compilers , 2010 .

[3]  Richard Henderson,et al.  Multi-platform auto-vectorization , 2006, International Symposium on Code Generation and Optimization (CGO'06).

[4]  Vikram S. Adve,et al.  LLVM: a compilation framework for lifelong program analysis & transformation , 2004, International Symposium on Code Generation and Optimization, 2004. CGO 2004..

[5]  Erven Rohou,et al.  Comparing the size of .NET applications with native code , 2005, 2005 Third IEEE/ACM/IFIP International Conference on Hardware/Software Codesign and System Synthesis (CODES+ISSS'05).

[6]  Erven Rohou,et al.  Combining Processor Virtualization and Component-Based Engineering in C for Heterogeneous Many-Core Platforms , 2009 .

[7]  K. De Bosschere,et al.  HIGH PERFORMANCE AND EMBEDDED ARCHITECTURE AND COMPILATION , .

[8]  Erven Rohou,et al.  A stack-based internal representation for GCC , 2009 .

[9]  Koen De Bosschere,et al.  Compilation and virtualization in the HiPEAC vision , 2010, Design Automation Conference.

[10]  Babak Falsafi,et al.  The HiPEAC Vision , 2010 .

[11]  Albert Cohen,et al.  Processor virtualization and split compilation for heterogeneous multicore embedded systems , 2008, Design Automation Conference.

[12]  Jeremy Singer GCC . NET — a feasibility study , 2003 .

[13]  Ricardo Fernández Pascual,et al.  An Experimental Environment Validating the Suitability of CLI as an Effective Deployment Format for Embedded Systems , 2008, HiPEAC.