12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- gold is an ELF linker. It is intended to have complete support for
- ELF and to run as fast as possible on modern systems. For normal use
- it is a drop-in replacement for the older GNU linker.
- gold is part of the GNU binutils. See ../binutils/README for more
- general notes, including where to send bug reports.
- gold was originally developed at Google, and was contributed to the
- Free Software Foundation in March 2008. At Google it was designed by
- Ian Lance Taylor, with major contributions by Cary Coutant, Craig
- Silverstein, and Andrew Chatham.
- The existing GNU linker manual is intended to be accurate
- documentation for features which gold supports. gold supports most of
- the features of the GNU linker for ELF targets. Notable
- omissions--features of the GNU linker not currently supported in
- gold--are:
- * MRI compatible linker scripts
- * cross-reference reports (--cref)
- * various other minor options
- Notes on the code
- =================
- These are some notes which may be helpful to people working on the
- source code of gold itself.
- gold is written in C++. It is a GNU program, and therefore follows
- the GNU formatting standards as modified for C++. Source documents in
- order of decreasing precedence:
- http://www.gnu.org/prep/standards/
- http://gcc.gnu.org/onlinedocs/libstdc++/manual/source_code_style.html
- http://www.zembu.com/eng/procs/c++style.html
- The linker is intended to have complete support for cross-compilation,
- while still supporting the normal case of native linking as fast as
- possible. In order to do this, many classes are actually templates
- whose parameter is the ELF file class (e.g., 32 bits or 64 bits). The
- C++ code is the same, but we don't pay the execution time cost of
- always using 64-bit integers if the target is 32 bits. Many of these
- class templates also have an endianness parameter: true for
- big-endian, false for little-endian.
- The linker is multi-threaded. The Task class represents a single unit
- of work. Task objects are stored on a single Workqueue object. Tasks
- communicate via Task_token objects. Task_token objects are only
- manipulated while holding the master Workqueue lock. Relatively few
- mutexes are used.
- Build requirements
- ==================
- The gold source code uses templates heavily. Building it requires a
- recent version of g++. g++ 4.0.3 and 4.1.3 are known to work. g++
- 3.2, 3.4.3, and 4.1.2 are known to fail.
- The linker script parser uses features which are only in newer
- versions of bison. bison 2.3 is known to work. bison 1.26 is known
- to fail. If you are building gold from an official binutils release,
- the bison output should already be included.
- Copyright (C) 2012-2015 Free Software Foundation, Inc.
- Copying and distribution of this file, with or without modification,
- are permitted in any medium without royalty provided the copyright
- notice and this notice are preserved.
|