Essential Abstractions in GCC
(
Tutorial
to
be conducted along with PLDI 2014)
Schedule
Friday, 13 June 2014, Afternoon Slot.
Motivation
The
GNU
Compiler
collection
is
a
compiler
generation
framework
which
constructs a compiler for a given architecture by reading the machine
descriptions for that architecture. It has been used to create industry
strength optimizing compilers on a wide variety of platforms. The GCC
generated compilers are routinely used by millions of users for their
regular compilation needs.
GCC is a huge infrastructure that has evolved over a quarter century
through the efforts of a large number of contributors. On the one
hand, its comprehensiveness, wide applicability, and ability to generate
back ends from specifications, makes it a fertile test bed for
research; on the other hand the very same features make it difficult to
understand GCC. To complicate the matters further, many publicly
available explanations of GCC internals tend to be heavy on information
rather than insights. As a consequence, a clear and crisp explanation
of the journey from the compiler specifications to an actual run of a
compiler generated from them is not easily understandable. We believe
that this is the main reason why experimentation with GCC (particularly
in academia) is not as wide-spread as it could have been, given that
the entire source code is available with documentation. We are aware of
many efforts that were abondoned because of the overheads of learning
GCC internals and the steep ramp up required.
This tutorial describes some carefully chosen abstractions that explain
the architecture of the compiler generation framework of GCC and relate
it to a generated compiler. The focus is on presenting concepts rather
than information so that the desired information can be discovered
independently.
Target Audience
The tutorial will be helpful to all those people who are interesting in knowing GCC internals.
For students and researchers, it may help them to explore how to use GCC as a test bed for
their research projects. For practitioners, it may help them to them to explore how GCC implements
the familiar concepts.
Requirements
This
tutorial
is
a
lecture
based
tutorial
and
hence
it is not necessary for
the audience to bring a laptop. Soft copies of the slides will be made
available on this page well in advance.
Overview
The
tutorial
is
an
abridged
version
of the full tutorial which is organized
around the external and the internal views of
the specifications, the compiler generator, and the generated compiler
as illustrated below. As a matter of pedagogy, the tutorial
introduces internal view only after building a clear external view.
This helps in taming the
complexity of GCC internals.
In the abridged version, the topics
listed in gray color will be excluded. Besides, some details of the
other topics will be omitted. However, the study material for all these
omissions will be made available.
List of Topics and Resources
Additional Material
A
lot of additional material from different versions of this tutorial
are available online. These include slides; lecture videos (to be made
available soon); well crafted programming assignments, their resources,
and solutions, etc.
Please visit the web pages of our
flagship event titled the Workshop on
Essential Abstractions in GCC
which are summer schools based on
on a homogeneous
teaching plan and have been held at IIT Bombay in 2013, 2012, 2011,
2010, and
2009.
Apart from the slides of various offerings of the workshop,
videos of lectures of 2012 workshop are also available.