This workshop is a 4-day instructional workshop (and not a forum for contributed presentations) and involves lectures and laboratory exercises aimed at providing details of the internals of GCC (GNU Compiler Collection). GCC is the de-facto standard compiler generation framework on GNU/Linux and many variants of Unix. In the last 20 years of its existence, it has seen a rapid growth and wide acceptability.

What is GCC?

Past updates...

GCC, an acronym for GNU Compiler Collection, is a compiler generation framework which generates production quality optimizing compilers from descriptions of target platforms. It follows an open development model whereby its source is available for all for inspection and modification. It supports a wide variety of source languages and target machines (including operating system specific variants) in a ready-to-deploy form. Besides, new machines can be added by describing instruction set architectures and some other information (eg. calling conventions).

Novices may want to see the  Wikipedia introduction to GCC. For experts, the GCC page contains a wealth of information including installation instructions, reference manuals (which include users' guides as well as details of GCC internals), a set of frequently asked questions, a wiki page for the developers of GCC, additional reading material, and several mailing lists for more detailed issues and queries. An excellent description of GCC internals can also be found on Wikipedia. Some notes on GCC internals are available at Washington University.

Who should attend this workshop?

Anybody who has done at least a first level undergraduate course in compiler construction and has some experience of either working in compilers or teaching compilers. A sound understanding of the process of compilation is a must. Familiarity with Unix/Linux (particularly, the command line style of working) is absolutely necessary. We have identified some homework exercises to be done before the participants arrive for the workshop.

Take-aways from the workshop

After attending this workshop

  • A teacher of compiler construction will be able to take examples of real compilation processes to illustrate the difference phases of compilation
  • A compiler developer wanting to retarget GCC to a new machine will know how to write machine descriptions systematically
  • A researcher exploring machine independent optimizations will be able to add data flow analysis based optimization passes to GCC
  • A researcher exploring retargetable compilation will be exposed to real issues in an industry strength compiler
  • A software engineer will be exposed to the architecture of a very large and very successful software

Structure of the workshop

This offering of the workshop has a lot of new material and all the material has been upgraded to GCC 4.5.0. Besides, based on the feedback from participants in past workshops, this year we are dividing the workshop in the following two parts:

  • July 5, 2010: Introduction to compilation, GCC configuration and building, GCC graybox probing
  • July 6 - 8, 2010: Advanced details of GCC

Participants who have GCC experience can join the workshop on July 6, 2010. All other participants have to attend from July 5, 2010. Appropriate concession in fees will be provided to the participants joining on July 6, 2010. Please see the registration page for more details.

Topics to be Covered

All discussion in the workshop will happen in context of GCC 4.5.0.

Following is the tentative list of topics that will be covered:

  • Configuration, building, and testing
  • Building cross compilers using GCC
  • The retargetability model of GCC
  • Structure of a compiler generated using GCC
  • Intermediate representations used in GCC
  • Front end plugins, back end plugins, and pass plugins in GCC
  • Adding interprocedural passes to GCC
  • Inspecting and debugging GCC code
  • GCC machine descriptions
  • A systematic methodology of constructing GCC machine descriptions
  • The design and implementation of gdfa (generic data flow analyzer)
  • Adding passes on Gimple representation
  • Adding passes on RTL representation
  • Parallelization and Vectorization in GCC

To see presentations, please visit the slides and handouts page.