Resources

Non-Stop Multi-Threaded Debugging in GDB

Nathan Sidwell, Vladimir Prus, Pedro Alves, Sandra Loosemore, and Jim Blandy, 2008 GCC Developers' Summit

This paper describes how CodeSourcery enhanced the GNU Debugger to allow some threads of a multithreaded application to continue, while other threads are stopped and examined by the debugger.

Reversible Debugging

Paul Brook & Daniel Jacobowitz, 2007 GCC Developers' Summit

A reversible debugger offers both standard debugger operations (e.g. step and next) and reverse execution equivalents that rewind the program's state. Even on simple programs, this is convenient: for instance, if you identify a bad memory write, it allows you to step backward and see the value that was in memory before it was overwritten. In more complex systems, reversible debugging allows you to examine the environment at and before an intermittent fault. This paper describes a prototype implementation of reversible debugging, using entirely Free Software - GDB and QEMU. We explain how source-level debugging actions are built on top of primitive operations, how the primitive operations are implemented, and how the simulated environment interacts with the outside world.

Improving Software Floating-Point Support

Nathan Sidwell & Joseph Myers, 2006 GCC Developers' Summit

Both GCC and GLIBC contain implementations of floating point routines. This paper discusses the issues with GCC's routines and shows how we incorporated GLIBC's routines into the compiler's library to give a significant performance increase.

Inside the VSIPL++ API

Mark Mitchell, Dr. Dobb's Journal

VSIPL++ is a C++ API for high-performance computing. One unique feature of it is that it includes direct support for parallel applications.

Statically Typed Trees in GCC

Nathan Sidwell & Zachary Weinberg, 2004 GCC Developers' Summit

The current abstract syntax tree of GCC uses a dynamically typed über-union for nearly all nodes. The desire for a statically typed tree design has been raised several times over recent years, but there has been no concerted effort to implement such a design. We describe the impacts of the current design, both in implementation and performance degradation. We present a design for statically typed trees, along with case studies of part of the conversion. We outline a plan for full conversion and discuss further improvements that this would enable.

Statically Typed Trees in GCC (Slides)

Nathan Sidwell & Zachary Weinberg, 2004 GCC Developers' Summit

Slides for paper above.

GCC: 3.4 and Beyond

Nathan Sidwell, Ottawa Linux User's Group

This presentation describes new features and capabilites of GCC 3.4 and outlines the SSA infrastructure that will be present in GCC 3.5.

GCC: Looking Forward

Mark Mitchell, 2003 GCC Developers' Summit

This presentation (given as the closing keynote for the first annual GCC Summit) discusses the unique challenges faced by GCC due to its reliance on multiple developers with sometimes competing agendas. The solutions proposed include increased design formalism and centralized funding.

A Maintenance Programmers View of GCC

Zachary Weinberg, 2003 GCC Developers' Summit

GCC is considered more difficult to modify or debug than other programs of similar size. This paper will investigate the reasons for this difficulty, from the point of view of a maintenance programmer: someone producing a small patch to fix a bug or implement a feature, without causing new problems for unrelated use. Because the development tree's head is expected to be functional at all times, such incremental changes are normal -- even regular contributors are in the maintenance programmer's shoes.

Getting the Best from G++

Nathan Sidwell, 2003 GCC Developers' Summit

The 3.0 series of G++ compilers and libraries offers a new multi-vendor ABI and increasing conformance to the C++ standard. The C++ ABI offers increased efficiency for C++ idioms and interoperability with other compilers. Features of the ABI of which the G++ user should be aware are described. Both additional and deprecated features in versions of 3.2, 3.3, and 3.4 are described. Using various source idioms to aid the G++ optimizers and loading process is shown. The process of tracking the C++ standard as both defect reports and C++0X become available is outlined.

A Common Vendor ABI for C++

Nathan Sidwell, ACCU 2003

During 2000/2001 a C++ ABI was designed from scratch. GCC implemented that ABI and uses it for all architectures. This paper describes the origin of the ABI, why GCC uses it, what it is, and what it is not. The ABI has some optimizations that improve user programs. User programs that have assumed more than the C++ language guarantees may be affected.

Safe Asyncronous Exceptions for Python

Stephen Freund & Mark Mitchell, Second Lightweight Languages Workshop

This paper demonstrates that the Python language is not signal-safe, due to Python's support for raising exceptions from signal handlers. A modification of the language that restores signal safety is proposed.

Generic Programming in C++

Gabriel Dos Reis, ACCU 2002

This slide presentation proposes a mechanism for constraining the types of template arguments via the concept of "signatures."

What is Required for GCC to Support Microsoft's .NET?

Mark Mitchell, Linux Magazine

The February 2001 Linux Magazine presented an article entitled Embrace and Extend: What Can Linux Learn from Microsoft's .NET? In that piece, Jon Udell put forth the notion that Microsoft's .NET initiative is built upon a number of ideas that have substantial technical merit and argued that GNU/Linux users ought to consider embracing and extending the platform. However, while that article laid out many of the reasons why .NET might be interesting to GNU/Linux aficionados, it did not spend much time on the technical aspects of how supporting .NET on GNU/Linux would work. Because this is a topic worthy of further discussion, we will take an in-depth look at what it will take to make the GNU Compiler Collection (GCC) support .NET.

Advanced Linux Programming

Mark Mitchell, Jeffrey Oldham, Alex Samuel, New Riders

If you're a developer already experienced with programming for the GNU/Linux system, are experienced with another UNIX-like system and are interested in developing GNU/Linux software, or want to make the transition from a non-UNIX environment and are already familiar with the general principles of writing good software, this book is for you.

Compile Time

Benjamin Chelf, Linux Magazine

These articles explain how to make maximum use of the GNU/Linux C library.

GCC: Where Do We Go From Here?

Mark Mitchell, Open Source Developers Journal

Although GCC is more popular now than ever before, it is also up against some of the toughest competitive and technical challenges it has ever faced. As more and more commercial compilers become available for Linux and other open source platforms, what needs to be done to make sure that GCC retains its position as the "king of the hill?"

GCC 3.0: The State of the Source

Mark Mitchell & Alex Samuel, Atlanta Linux Showcase

The GNU Compiler Collection (GCC) is the most fundamental component of the GNU/Linux developer's toolchest. GCC, like the Linux kernel and the X windowing system, is a complex but important part of the GNU/Linux operating system. In fact, both the kernel and X are built with GCC, so, to a large extent, the speed and correctness of the entire system depends on GCC.

Type-Based Alias Analysis

Mark Mitchell, Dr. Dobb's Journal

Aliasing issues make it difficult for compilers to generate code that runs as fast as you might hope. Luckily, the C++ type system makes clear what can and cannot alias.