ChangeLog:
[deliverable/binutils-gdb.git] / gold / README
CommitLineData
bae7f79e 1gold is an ELF linker. It is intended to have complete support for
874c5b28
ILT
2ELF and to run as fast as possible on modern systems. For normal use
3it is a drop-in replacement for the older GNU linker.
bae7f79e 4
874c5b28
ILT
5gold is part of the GNU binutils. See ../binutils/README for more
6general notes, including where to send bug reports.
7
8gold was originally developed at Google, and was contributed to the
9Free Software Foundation in March 2008. At Google it was designed by
10Ian Lance Taylor, with major contributions by Cary Coutant, Craig
11Silverstein, and Andrew Chatham.
12
13The existing GNU linker manual is intended to be accurate
14documentation for features which gold supports. gold supports most of
15the features of the GNU linker for ELF targets. Notable
16omissions--features of the GNU linker not currently supported in
17gold--are:
18 * MEMORY regions in linker scripts
19 * MRI compatible linker scripts
874c5b28 20 * cross-reference reports (--cref)
874c5b28
ILT
21 * position independent executables (-pie)
22 * various other minor options
23
24
25Notes on the code
26=================
27
28These are some notes which may be helpful to people working on the
29source code of gold itself.
30
31gold is written in C++. It is a GNU program, and therefore follows
32the GNU formatting standards as modified for C++. Source documents in
33order of decreasing precedence:
bae7f79e
ILT
34 http://www.gnu.org/prep/standards/
35 http://gcc.gnu.org/onlinedocs/libstdc++/17_intro/C++STYLE
36 http://www.zembu.com/eng/procs/c++style.html
37
38The linker is intended to have complete support for cross-compilation,
874c5b28
ILT
39while still supporting the normal case of native linking as fast as
40possible. In order to do this, many classes are actually templates
41whose parameter is the ELF file class (e.g., 32 bits or 64 bits). The
42C++ code is the same, but we don't pay the execution time cost of
43always using 64-bit integers if the target is 32 bits. Many of these
44class templates also have an endianness parameter: true for
45big-endian, false for little-endian.
bae7f79e 46
874c5b28
ILT
47The linker is multi-threaded. The Task class represents a single unit
48of work. Task objects are stored on a single Workqueue object. Tasks
49communicate via Task_token objects. Task_token objects are only
50manipulated while holding the master Workqueue lock. Relatively few
51mutexes are used.
14359ca0
ILT
52
53
54Build requirements
55==================
56
57The gold source code uses templates heavily. Building it requires a
58recent version of g++. g++ 4.0.3 is known to work. g++ 3.2 and g++
593.4.3 are known to fail.
60
61The linker script parser uses features which are only in newer
62versions of bison. bison 2.3 is known to work. bison 1.26 is known
63to fail. If you are building gold from an official binutils release,
64the bison output should already be included.
This page took 0.121228 seconds and 4 git commands to generate.