1gold is an ELF linker. It is intended to have complete support for 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. 4 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 * MRI compatible linker scripts 19 * cross-reference reports (--cref) 20 * various other minor options 21 22 23Notes on the code 24================= 25 26These are some notes which may be helpful to people working on the 27source code of gold itself. 28 29gold is written in C++. It is a GNU program, and therefore follows 30the GNU formatting standards as modified for C++. Source documents in 31order of decreasing precedence: 32 http://www.gnu.org/prep/standards/ 33 http://gcc.gnu.org/onlinedocs/libstdc++/manual/source_code_style.html 34 http://www.zembu.com/eng/procs/c++style.html 35 36The linker is intended to have complete support for cross-compilation, 37while still supporting the normal case of native linking as fast as 38possible. In order to do this, many classes are actually templates 39whose parameter is the ELF file class (e.g., 32 bits or 64 bits). The 40C++ code is the same, but we don't pay the execution time cost of 41always using 64-bit integers if the target is 32 bits. Many of these 42class templates also have an endianness parameter: true for 43big-endian, false for little-endian. 44 45The linker is multi-threaded. The Task class represents a single unit 46of work. Task objects are stored on a single Workqueue object. Tasks 47communicate via Task_token objects. Task_token objects are only 48manipulated while holding the master Workqueue lock. Relatively few 49mutexes are used. 50 51 52Build requirements 53================== 54 55The gold source code uses templates heavily. Building it requires a 56recent version of g++. g++ 4.0.3 and 4.1.3 are known to work. g++ 573.2, 3.4.3, and 4.1.2 are known to fail. 58 59The linker script parser uses features which are only in newer 60versions of bison. bison 2.3 is known to work. bison 1.26 is known 61to fail. If you are building gold from an official binutils release, 62the bison output should already be included. 63 64 65Copyright (C) 2012-2014 Free Software Foundation, Inc. 66 67Copying and distribution of this file, with or without modification, 68are permitted in any medium without royalty provided the copyright 69notice and this notice are preserved. 70