Ian Lance Taylor
Ian Lance Taylor has worked on GCC and other free software projects since 1990. He is the author of the Go frontend for GCC, the gold linker, and Taylor UUCP. He works at Google.
Research Areas
Authored Publications
Sort By
Safe ICF: Pointer Safe and Unwinding Aware Identical Code Folding in Gold
Cary Coutant
Chris Demetriou
GCC Developers Summit (2010)
Preview abstract
We have found that large C++ applications and shared libraries tend to have many functions whose code is identical with another function. As much as 10% of the code could theoretically be eliminated by merging such identical functions into a single copy. This optimization, Identical Code Folding (ICF), has been implemented in the gold linker. At link time, ICF detects functions with identical object code and merges them into a single copy. ICF can be unsafe, however, as it can change the run-time behaviour of code that relies on each function having a unique address. To address this, ICF can be used in a safe mode where it identifies and folds functions whose addresses are guaranteed not to have been used in comparison operations.
Further, profiling and debugging binaries with merged functions can be confusing, as the PC values of merged functions cannot be always disambiguated to point to the correct function. To address this, we propose a new call table format for the DWARF debugging information to allow tools like the debugger and profiler to disambiguate PC values of merged functions correctly by examining the call chain.
Detailed experiments on the x86 platform show that ICF can reduce the text size of a selection of Google binaries, whose average text size is 64 MB, by about 6%. Also, the code size savings of ICF with the safe option is almost as good as the code savings obtained without the safe option. Further, experiments also show that the run-time performance of the optimized binaries on the x86 platform does not change.
View details
The Go Frontend for GCC
GCC Summit 2010 (to appear)
Preview abstract
A description of the Go language frontend for gcc. This is a new frontend which is a complete implementation of the new Go programming language. The frontend is currently some 50,000 lines of C++ code, and uses its own IR which is then converted to GENERIC. I describe the structure of the frontend and the IR, issues that arise when compiling the Go language, and issues with hooking up any frontend to the gcc middle-end.
View details
A New ELF Linker
Proceedings of the GCC Developers' Summit (2008)
Preview abstract
gold is a new ELF linker recently added to the GNU binutils. I discuss why it made sense to write a new linker rather than extend the existing one. I describe the architecture of the linker, and new features. I present performance measurements. I discuss future plans for the linker. I discuss the use of C++ in writing system tools.
View details