CLI-Based Compilation Flows for the C Language Erven Rohou, Andrea Ornstein, Marco Cornero

Total Page:16

File Type:pdf, Size:1020Kb

CLI-Based Compilation Flows for the C Language Erven Rohou, Andrea Ornstein, Marco Cornero CLI-Based Compilation Flows for the C Language Erven Rohou, Andrea Ornstein, Marco Cornero To cite this version: Erven Rohou, Andrea Ornstein, Marco Cornero. CLI-Based Compilation Flows for the C Language. International Conference on Embedded Computer Systems: Architectures, Modeling and Simulation, Jul 2010, Samos, Greece. pp.162-169, 10.1109/ICSAMOS.2010.5642069. inria-00505640 HAL Id: inria-00505640 https://hal.inria.fr/inria-00505640 Submitted on 25 Jul 2010 HAL is a multi-disciplinary open access L’archive ouverte pluridisciplinaire HAL, est archive for the deposit and dissemination of sci- destinée au dépôt et à la diffusion de documents entific research documents, whether they are pub- scientifiques de niveau recherche, publiés ou non, lished or not. The documents may come from émanant des établissements d’enseignement et de teaching and research institutions in France or recherche français ou étrangers, des laboratoires abroad, or from public or private research centers. publics ou privés. CLI-Based Compilation Flows for the C Language Erven Rohou Andrea C. Ornstein Marco Cornero INRIA Rennes STMicroelectronics ST-Ericsson Rennes, France Castelletto, Italy Agrate Brianza, Italy [email protected] [email protected] [email protected] Abstract—Embedded systems contain a wide variety of proces- duplication, complex build and validation environments and sors. Economical and technological factors favor systems made of rigid distribution channels, reducing their productivity and a combination of diverse but programmable processors. Software market opportunities to a big extent. has a longer lifetime than the hardware for which it is initially designed. Application portability is thus of utmost importance Software has a longer lifetime than hardware: many appli- for the embedded systems industry. cations run on hardware that did not exist at the time they The Common Language Infrastructure (CLI) is a rich virtu- were designed. Hardware binary compatibility comes at a alization environment for the execution of applications written in multiple languages. CLI efficiently captures the semantics high cost, which embedded systems manufacturers can rarely of unmanaged languages, such as C. We investigate the use of afford. These industrial trends make application portability of CLI as a deployment format for embedded systems to reconcile utmost importance. apparently contradictory constraints: the need for portability, the need for high performance and the existence of a large base of Our main motivation is to extend the benefits of processor legacy C code. virtualization for embedded systems. In particular, we focus In this paper, we motivate our CLI-based compilation environ- on the processor virtualization aspects [3], as an independent ment for C, and its different use scenarios. We then focus on the feature, while paying particular attention to performance and specific challenges of effectively mapping the C language to CLI, to integration aspects with existing native or managed envi- and our proposed solutions. We finally analyze the interactions between the CLI environment and native libraries, which is of ronments. Using a platform-neutral bytecode representation primary importance for a practical use of the proposed approach. is an opportunity for split-compilation: a first compilation pass translates the source language into bytecode, and a second pass converts the bytecode to native machine code. I. INTRODUCTION The first pass can run aggressive analyses and encode their Complex embedded systems provide a wide range of dedi- results for the benefit of the second pass [4]. Thanks to this cated and demanding functionalities, such as communication, additional information, the second pass can apply in a dynamic multimedia and user interface. Increasing non-recurring en- environment optimizations that would be otherwise too costly. gineering costs of integrated circuits push manufacturers to Legacy code makes the C language mandatory in embedded use a given circuit in several products. This trend makes software. An additional motivation is the higher performance ASICs less attractive and favors programmable solutions [1]. that programmers can achieve in writing “low-level” C, com- Given the tight area and power constraints, it is impossible pared to higher-level languages, managed ones in particular. to provide these functions using homogeneous programmable In addition, C does not require any managed environment, architectures. Rather, they are composed of different subsys- reducing the run-time system to a minimum, with benefits tems, typically including a host micro-controller running the in terms of memory footprint and real-time responsiveness system software, and a growing number of heterogeneous (though possible, a JIT compiler is not strictly necessary). dedicated processors, such as DSP and/or VLIW. Some studies [2] predict that embedded systems will feature hundreds of This paper analyzes the interactions of the C language cores by 2020. with the CLI (Common Language Infrastructure) framework. Each platform provider has its own proprietary solutions CLI is not a usual processor instruction set. It adds new and evolutions. This results is the extreme diversity of the constraints (evaluation stack, strong typing), but it also opens embedded market, making software productivity a daunting new opportunities in terms of features (support for unmanaged task. Independent software vendors for embedded systems languages) and optimizations. We address in particular porta- must deal with all the combinations of target processors, bility issues and interaction with existing native environments. toolchains and operating systems, forcing them to restrict Section II reviews related work. Section III presents some their developments to niche domains, and to deal with code alternatives to the standard static compilation flow made possible by the design of CLI. We then go into the details This work was supported in part by the European project Advanced of code generation (Section IV), library issues (Section V) Compiler Technologies for Embedded Streaming (ACOTES), under contract IST-5-034869. All authors were with STMicroelectronics when this work was and intrinsics and builtins (Section VI). Limits are described initiated, INRIA also contributed to further developments. in Section VII. We conclude in Section VIII. CLI-based (1) (2) II. RELATED WORK optimizations load-time Embedded CLI CLI run-time Several solutions address platform virtualization. The most CLI file.o file.exe System notable ones are Java, LLVM and CLI. Java proposes a partial solution to the above-mentioned problems. It defines source install-time Flash native memory a bytecode-based virtual machine and a standard library. Java native file.exe Micro Edition has been widely accepted in embedded systems native file.o to provide additional capabilities, like games for cellphones Fig. 1. CLI-based Compilation Scenarios or TV guides for set-top-boxes. However, programs written in Java remain constrained to the host processor for the non- critical part of the application. The primary goal in the defi- III. ACUSTOMIZABLE CLI-BASED COMPILATION FLOW nition of the Java bytecode was to support the Java language A. Compilation Scenarios features, including its safeness characteristics and managed CLI offers several options to introduce flexibility and op- execution environment. It is not well suited to efficiently timization opportunities at different stages of the compilation support unmanaged languages such as C. flow. Our implementation leaves all options open. Consider LLVM [5] is a compiler framework that defines a low- Fig.1. At any stage of the compilation process, we have the level code representation appropriate for program analysis choice to either produce native binaries, or to keep the code in and transformation. The representation is typed and language- CLI format, deferring native code generation to a later stage. independent, but it as at a lower level than CLI, and it is not The decision of which specific scenario is preferable depends meant as a deployment format. LLVM provides a C compiler. on the context, such as distribution format requirements, CLI is a framework that lets applications written in high- availability or not of CLI support in the target device, real- level languages execute on different systems, without re- time requirements, and possibly others. compilation. It is better known as the base of widespread This approach also smoothly integrates in existing build .NET environment. CLI supports a growing set of languages, systems, such as multi-level Makefiles, by adhering to the managed as well as unmanaged. In contrast to Java and LLVM, traditional separate compilation model and using familiar CLI is an international standard [6]. tools: compiler, assembler, linker. We have previously shown that CLI is a convenient interme- a) CLI as compiler internal format: as shown in [8], diate representation not only for code size [7] but also perfor- using CLI as a compiler middle-level intermediate representa- mance [8]. However, a robust C compiler is a prerequisite for tion does not introduce any performance penalty due to loss the adoption of this format in embedded systems, especially of information. In particular, we showed that the GCC internal to program the media part of the system. representation can be dumped to CLI and then re-generated in The DotGNU Portable.NET [9] project developed a CLI order to proceed with the normal GCC native compilation
Recommended publications
  • Python Guide Documentation 0.0.1
    Python Guide Documentation 0.0.1 Kenneth Reitz 2015 11 07 Contents 1 3 1.1......................................................3 1.2 Python..................................................5 1.3 Mac OS XPython.............................................5 1.4 WindowsPython.............................................6 1.5 LinuxPython...............................................8 2 9 2.1......................................................9 2.2...................................................... 15 2.3...................................................... 24 2.4...................................................... 25 2.5...................................................... 27 2.6 Logging.................................................. 31 2.7...................................................... 34 2.8...................................................... 37 3 / 39 3.1...................................................... 39 3.2 Web................................................... 40 3.3 HTML.................................................. 47 3.4...................................................... 48 3.5 GUI.................................................... 49 3.6...................................................... 51 3.7...................................................... 52 3.8...................................................... 53 3.9...................................................... 58 3.10...................................................... 59 3.11...................................................... 62
    [Show full text]
  • NET Core 3 and Unit Testing
    Learn C# Programming A guide to building a solid foundation in C# language for writing efcient programs Marius Bancila Rafaele Rialdi Ankit Sharma BIRMINGHAM—MUMBAI Learn C# Programming Copyright © 2020 Packt Publishing All rights reserved. No part of this book may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, without the prior written permission of the publisher, except in the case of brief quotations embedded in critical articles or reviews. Every efort has been made in the preparation of this book to ensure the accuracy of the information presented. However, the information contained in this book is sold without warranty, either express or implied. Neither the authors, nor Packt Publishing or its dealers and distributors, will be held liable for any damages caused or alleged to have been caused directly or indirectly by this book. Packt Publishing has endeavored to provide trademark information about all of the companies and products mentioned in this book by the appropriate use of capitals. However, Packt Publishing cannot guarantee the accuracy of this information. Commissioning Editor: Richa Tripathi Acquisition Editor: Alok Dhuri Senior Editor: Storm Mann Content Development Editor: Ruvika Rao Technical Editor: Pradeep Sahu Copy Editor: Safs Editing Language Support Editor: Safs Editing Project Coordinator: Francy Puthiry Proofreader: Safs Editing Indexer: Pratik Shirodkar Production Designer: Jyoti Chauhan First published: April 2020 Production reference: 1280420 Published by Packt Publishing Ltd. Livery Place 35 Livery Street Birmingham B3 2PB, UK. ISBN 978-1-78980-586-4 www.packt.com To my smart boys, Cristian and Bogdan, who love learning new things every day.
    [Show full text]
  • 0672325756 A020601
    .NET Refresher A020601 .NET is the latest version of the component-based architec- ture that Microsoft has been developing for a number of years to support its applications and operating systems. As the name suggests, .NET provides a range of technologies specially designed to enable applications to be integrated across a network, often using XML as the glue between the different components. In turn, this helps it support many of the emerging standards for application in development, including UDDI, SOAP Messaging, WSDL, and other Web services standards to enable you to build XML Web services applications. The .NET Framework consists of the main technology components and libraries that support .NET application development. By using .NET, it’s possible to build a desktop application, a desktop interface to a Web applica- tion, or a Web application and still use the same toolkits and libraries. It’s even possible to convert a desktop appli- cation to a Web-based one and provide both application types by using the same core code base. The real benefit of .NET, however, is how it integrates with other applications and, more importantly, with other components within the .NET system. Existing application development models rely on compiling an application written in one language into a native format directly executable by the operating system and the underlying hardware. With .NET, application components are compiled from their native language (C++, Java, Perl) to run in the Common Language Runtime (CLR). This means that a single application can be made up of components written in a number of different languages—each component using the strengths of each language while simultaneously contributing toward a common goal.
    [Show full text]
  • Pdf for a Detailed Explanation, Along with Various Techniques for Debouncing
    MicroPython Documentation Release 1.11 Damien P. George, Paul Sokolovsky, and contributors May 29, 2019 CONTENTS i ii CHAPTER ONE MICROPYTHON LIBRARIES Warning: Important summary of this section • MicroPython implements a subset of Python functionality for each module. • To ease extensibility, MicroPython versions of standard Python modules usually have u (“micro”) prefix. • Any particular MicroPython variant or port may miss any feature/function described in this general docu- mentation (due to resource constraints or other limitations). This chapter describes modules (function and class libraries) which are built into MicroPython. There are a few categories of such modules: • Modules which implement a subset of standard Python functionality and are not intended to be extended by the user. • Modules which implement a subset of Python functionality, with a provision for extension by the user (via Python code). • Modules which implement MicroPython extensions to the Python standard libraries. • Modules specific to a particular MicroPython port and thus not portable. Note about the availability of the modules and their contents: This documentation in general aspires to describe all modules and functions/classes which are implemented in MicroPython project. However, MicroPython is highly configurable, and each port to a particular board/embedded system makes available only a subset of MicroPython libraries. For officially supported ports, there is an effort to either filter out non-applicable items, or mark individual descriptions with “Availability:” clauses describing which ports provide a given feature. With that in mind, please still be warned that some functions/classes in a module (or even the entire module) described in this documentation may be unavailable in a particular build of MicroPython on a particular system.
    [Show full text]
  • Comparison of C++ and C
    Comparison of C++ and C# Jim Fawcett CSE681 – Software Modeling and analysis Summer 2005 Table of Contents • Object Models • C# Language • C# Object Model • Common Type System • C# Object Type • Type Class • Class Browser in IDE • Delegates • Events • Threads • Assemblies • C# Libraries Both are Important • C++ has a huge installed base. • Your next employer is very likely to be a C++ house. • C# is gaining popularity very quickly. • But, your next employer may not yet do C#. • CSE681 – Software Modeling and Analysis • Focuses almost exclusively on C# and .Net. • CSE687 – Object Oriented Design: • Focuses almost exclusively on C++ and the Standard Library. Comparison of Object Models Contents • C++ Object Model • .Net Object Model • All objects share a rich memory model: • More Spartan memory model: • Static, stack, and heap • Value types are stack-based only. • Rich object life-time model: • Reference types (all user defined types • Static objects live of the duration of the and library types) live on the heap. program. • Non-deterministic life-time model: • Objects on stack live within a scope defined • All reference types are garbage collected. by { and }. • That’s the good news. • Objects on heap live at the designer’s • That’s the bad news. descretion. • Semantics based on a shallow reference • Semantics based on a deep copy model. model. • That’s the good news. • For compilation, client’s use their • That’s the bad news. server’s meta-data. • For compilation, clients carry their • That is great news. server’s type information. • It is this property that makes .Net • That’s definitely bad news.
    [Show full text]
  • Discovering Ironpython
    PART I Introducing IronPython ⊲⊲ CHAPTER 1: Discovering IronPython ⊲⊲ CHAPTER 2: Understanding the IronPython Basics COPYRIGHTED MATERIAL 548592c01.indd 1 2/24/10 12:47:07 PM 548592c01.indd 2 2/24/10 12:47:08 PM 1 Discovering IronPython WHAT’S IN THIS CHAPTER? ➤➤ Understanding why you want to add IronPython to your developer toolbox ➤➤ Obtaining and installing IronPython on your machine ➤➤ Understanding some underlying basics of how IronPython works ➤➤ Using IronPython at the console and within a window ➤➤ Designing and building a simple application IronPython: It sounds like some kind of metal snake infesting your computer, but it isn’t. IronPython is the .NET version of the open source Python language (http://www .python.org/). Python is a dynamic language that can greatly enhance your programming experience, help you create applications in less time, and make the applications you create significantly more responsive to user needs. Of course, you’ve heard these promises before from other languages. This chapter helps you understand how IronPython delivers on these promises in specific situations. The smart developer soon learns that every language serves specific needs and might not work well in others. So this chapter isn’t here to blow smoke at you — ​once you complete it, you’ll understand the strengths and weaknesses of IronPython. Of course, you’ll need to obtain a copy of IronPython before you can use it because Visual Studio doesn’t include IronPython as part of the default installation. This chapter helps you get IronPython installed on your system and tells you about some options you may want to install as well.
    [Show full text]
  • Comparative Studies of Six Programming Languages
    Comparative Studies of Six Programming Languages Zakaria Alomari Oualid El Halimi Kaushik Sivaprasad Chitrang Pandit Concordia University Concordia University Concordia University Concordia University Montreal, Canada Montreal, Canada Montreal, Canada Montreal, Canada [email protected] [email protected] [email protected] [email protected] Abstract Comparison of programming languages is a common topic of discussion among software engineers. Multiple programming languages are designed, specified, and implemented every year in order to keep up with the changing programming paradigms, hardware evolution, etc. In this paper we present a comparative study between six programming languages: C++, PHP, C#, Java, Python, VB ; These languages are compared under the characteristics of reusability, reliability, portability, availability of compilers and tools, readability, efficiency, familiarity and expressiveness. 1. Introduction: Programming languages are fascinating and interesting field of study. Computer scientists tend to create new programming language. Thousand different languages have been created in the last few years. Some languages enjoy wide popularity and others introduce new features. Each language has its advantages and drawbacks. The present work provides a comparison of various properties, paradigms, and features used by a couple of popular programming languages: C++, PHP, C#, Java, Python, VB. With these variety of languages and their widespread use, software designer and programmers should to be aware
    [Show full text]
  • Introducing .NET Standard @Dotnet @Aspnet September 26, 2016 by Immo Landwerth [MSFT] // 199 Comments
    Server & Tools Blogs > Developer Tools Blogs > .NET Blog Sign in .NET Blog A first-hand look from the .NET engineering teams Introducing .NET Standard @dotnet @aspnet September 26, 2016 by Immo Landwerth [MSFT] // 199 Comments Share 2K 1622 1175 Search MSDN with Bing Questions? Check out the .NET Standard FAQ. You can find the latest version of the Search this blog compatibility matrix here. Search all blogs In my last post, I talked about how we want to make porting to .NET Core easier. In this post, I’ll Tags focus on how we’re making this plan a reality with .NET Standard. We’ll cover which APIs we plan to include, how cross-framework compatibility will work, and what all of this means for .NET Core. .NET .NET Core If you’re interested in details, this post is for you. But don’t worry if you don’t have time or you’re not interested in details: you can just read the TL;DR section. .net framework .NET Update For the impatient: TL;DR announcement .NET Standard solves the code sharing problem for .NET developers across all platforms by bringing asp.net ASP.NET Core open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com asp.net all the APIs that you expect and love across the environments that you need: desktop applications, async azure c# clr mobile apps & games, and cloud services: bcl codegen .NET Standard is a set of APIs that all .NET platforms have to implement. This unifies the community .NET platforms and prevents future fragmentation.
    [Show full text]
  • Points-To and Side-Effect Analyses for Programs Built with Precompiled
    Points-to and Side-effect Analyses for Programs Built with Precompiled Libraries Atanas Rountev and Barbara G. Ryder Department of Computer Science, Rutgers University, Piscataway, NJ 08854, USA {rountev,ryder}@cs.rutgers.edu Abstract. Large programs are typically built from separate modules. Traditional whole-program analysis cannot be used in the context of such modular development. In this paper we consider analysis for programs that combine client modules with precompiled library modules. We define separate analyses that allow library modules and client modules to be analyzed separately from each other. Our target analyses are Andersen’s points-to analysis for C [1] and a side-effect analysis based on it. We perform separate points-to and side-effect analyses of a library module by using worst-case assumptions about the rest of the program. We also show how to construct summary information about a library module and how to use it for separate analysis of client modules. Our empirical results show that the separate points-to analyses are practical even for large modules, and that the cost of constructing and storing library summaries is low. This work is a step toward incorporating practical points-to and side-effect analyses in realistic compilers and software productivity tools. 1 Introduction Large programs are typically built from separate modules. Such modular devel- opment allows better software management and provides a practical compilation model: instead of (re)compiling large programs from scratch, compilers can per- form separate compilation of individual modules. This approach allows sharing of modules between programs; for example, an already compiled library module can be reused with no implementation or compilation cost.
    [Show full text]
  • Types and Intermediate Representations
    University of Pennsylvania ScholarlyCommons Technical Reports (CIS) Department of Computer & Information Science January 1998 Types and Intermediate Representations Michael Hicks University of Pennsylvania Follow this and additional works at: https://repository.upenn.edu/cis_reports Recommended Citation Michael Hicks, "Types and Intermediate Representations", . January 1998. University of Pennsylvania Department of Computer and Information Science Technical Report No. MS-CIS-98-05. This paper is posted at ScholarlyCommons. https://repository.upenn.edu/cis_reports/796 For more information, please contact [email protected]. Types and Intermediate Representations Abstract The design objectives and the mechanisms for achieving those objectives are considered for each of three systems, Java, Erlang, and TIL. In particular, I examine the use of types and intermediate representations in the system implementation. In addition, the systems are compared to examine how one system's mechanisms may (or may not) be applied to another. Comments University of Pennsylvania Department of Computer and Information Science Technical Report No. MS- CIS-98-05. This technical report is available at ScholarlyCommons: https://repository.upenn.edu/cis_reports/796 Types and Intermediate Representations Michael Hicks Universitv of Pennsylvania School of Engineering and Applied Science Computer and Information Science Department Philadelphia, PA 19104-6389 Types and Intermediate Representations Michael Hicks University of Pennsylvania The design objectives and the mechanisms for achieving those objectives are considered for each of three systems, Java, Erlang, and TIL. In particular, I examine the use of types and intermediate representations in the system implementation. In addition, the systems are compared to examine how one system's mechanisms may (or may not) be applied to another.
    [Show full text]
  • NET Overview Objectives
    .NET Overview Objectives • Introduce .NET –overview – languages –libraries – development and execution model • Examine simple C# program 2 .NET Overview • .NET is a sweeping marketing term for a family of products – development tools and languages –platform – application management servers – value-added services development platform servers services Languages Common Language Runtime SQL Server My Services Compilers Framework Libraries BizTalk Alerts Visual Studio .NET SharePoint Passport ... ... 3 Evolution of the platform • .NET is the next evolutionary step for the Microsoft platform – new languages largely replace classic C++ and Visual Basic – new runtime model reduces need for COM style integration – XML web services used in place of DCOM – Windows Forms replace MFC – ASP.NET improves on ASP –etc. 4 Software development • .NET software development and execution has many actors – languages –libraries – compilers – intermediate language – execution engine 5 Languages • Many .NET programming languages available –C# –VB.NET – C++ –etc. • Language choice typically based on many factors – programmer background – problem domain – language features – corporate mandate 6 Language power • All languages can access .NET infrastructure class Hello { static void Main() { C# System.Console.WriteLine("hello"); } } Class Goodbye Shared Sub Main() VB.NET System.Console.WriteLine("goodbye") End Sub End Class 7 Language interoperability • All .NET languages can interoperate class Hello { static void Main() C# calling { System.Console.WriteLine(Greeting.Message());
    [Show full text]
  • Reference Net Standard Library from Net Framework
    Reference Net Standard Library From Net Framework Is Torrey dehydrated or judgmental when stet some armures punned punctiliously? Commonplace and sylphy Kelly puttied: which Lyle is sublinear enough? Untrustworthy and supine Angel syllabicated his Anjou louses yodel downstate. Please make it might have been ported as simple as more content is to one by selecting the same codebase and both full framework library reference from right side cache and their contents are Reference required to assembly netstandard. NET equity is installed. Apache Hadoop, yet was generous enough to address the specifics of evidence new mobile platform. Or fifty about relative Link. GDPR: floating video: is through consent? The build process can take whole of rubber easily enough. NET Standard library furniture must start will a Portable Class Library content type. Keep a platform specific functionality and effective way to add nuget reference to automate things, which makes good so long time the standard library is the visual studio. How is Use Gulp? NET Core, range and use alternatives, and UWP applications. NET Standard, plus it did work but fine before. Lastly, VS does grow offer highligh, just try do execute the console app that side a function built on the netstandard library using System. CLR implementations, you straight not deny to question this update one please click this update to ascertain the latest product bits. Capgemini from the United Kingdom. NET gain for Linux. Portable dll and xml file. Net core console, questions are here, we are being a particular platform standard library reference from previous versions and its previous instance while pcl.
    [Show full text]