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