【实例简介】The GNU linker
【实例截图】







【核心代码】
Table of Contents
1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
2 Invocation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.1 Command-line Options. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.1.1 Options Specific to i386 PE Targets . . . . . . . . . . . . . . . . . . . . . . 34
2.1.2 Options specific to C6X uClinux targets . . . . . . . . . . . . . . . . . . 41
2.1.3 Options specific to C-SKY targets . . . . . . . . . . . . . . . . . . . . . . . . 42
2.1.4 Options specific to Motorola 68HC11 and 68HC12 targets
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
2.1.5 Options specific to Motorola 68K target . . . . . . . . . . . . . . . . . . 42
2.1.6 Options specific to MIPS targets . . . . . . . . . . . . . . . . . . . . . . . . . 42
2.2 Environment Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3 Linker Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
3.1 Basic Linker Script Concepts. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
3.2 Linker Script Format. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
3.3 Simple Linker Script Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
3.4 Simple Linker Script Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
3.4.1 Setting the Entry Point . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
3.4.2 Commands Dealing with Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
3.4.3 Commands Dealing with Object File Formats. . . . . . . . . . . . . 49
3.4.4 Assign alias names to memory regions . . . . . . . . . . . . . . . . . . . . 49
3.4.5 Other Linker Script Commands. . . . . . . . . . . . . . . . . . . . . . . . . . . 52
3.5 Assigning Values to Symbols . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
3.5.1 Simple Assignments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
3.5.2 HIDDEN. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
3.5.3 PROVIDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
3.5.4 PROVIDE HIDDEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
3.5.5 Source Code Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
3.6 SECTIONS Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
3.6.1 Output Section Description. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
3.6.2 Output Section Name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
3.6.3 Output Section Address . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
3.6.4 Input Section Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
3.6.4.1 Input Section Basics. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
3.6.4.2 Input Section Wildcard Patterns. . . . . . . . . . . . . . . . . . . . . 61
3.6.4.3 Input Section for Common Symbols. . . . . . . . . . . . . . . . . . 63
3.6.4.4 Input Section and Garbage Collection. . . . . . . . . . . . . . . . 63
3.6.4.5 Input Section Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
3.6.5 Output Section Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
3.6.6 Output Section Keywords . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
3.6.7 Output Section Discarding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66ii The GNU linker
3.6.8 Output Section Attributes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
3.6.8.1 Output Section Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
3.6.8.2 Output Section LMA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
3.6.8.3 Forced Output Alignment . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
3.6.8.4 Forced Input Alignment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
3.6.8.5 Output Section Constraint. . . . . . . . . . . . . . . . . . . . . . . . . . . 68
3.6.8.6 Output Section Region . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
3.6.8.7 Output Section Phdr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
3.6.8.8 Output Section Fill. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
3.6.9 Overlay Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
3.7 MEMORY Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
3.8 PHDRS Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
3.9 VERSION Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
3.10 Expressions in Linker Scripts. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
3.10.1 Constants. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
3.10.2 Symbolic Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
3.10.3 Symbol Names. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
3.10.4 Orphan Sections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
3.10.5 The Location Counter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
3.10.6 Operators. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
3.10.7 Evaluation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
3.10.8 The Section of an Expression . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
3.10.9 Builtin Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
3.11 Implicit Linker Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
4 Machine Dependent Features . . . . . . . . . . . . . . . . . 89
4.1 ld and the H8/300 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
4.2
ld and the Motorola 68HC11 and 68HC12 families. . . . . . . . . . . . . 89
4.2.1 Linker Relaxation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
4.2.2 Trampoline Generation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
4.3
ld and the ARM family . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
4.4
ld and HPPA 32-bit ELF Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
4.5
ld and the Motorola 68K family. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
4.6
ld and the MIPS family. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
4.7
ld and MMIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
4.8
ld and MSP430 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
4.9
ld and NDS32 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
4.10
ld and the Altera Nios II . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
4.11 ld and PowerPC 32-bit ELF Support . . . . . . . . . . . . . . . . . . . . . . . . 97
4.12
ld and PowerPC64 64-bit ELF Support . . . . . . . . . . . . . . . . . . . . . . 98
4.13
ld and S/390 ELF Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
4.14
ld and SPU ELF Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
4.15
ld’s Support for Various TI COFF Versions . . . . . . . . . . . . . . . . . 101
4.16
ld and WIN32 (cygwin/mingw). . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
4.17
ld and Xtensa Processors. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109iii
5 BFD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
5.1 How It Works: An Outline of BFD . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
5.1.1 Information Loss. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
5.1.2 The BFD canonical object-file format. . . . . . . . . . . . . . . . . . . . 112
6 Reporting Bugs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
6.1 Have You Found a Bug? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
6.2 How to Report Bugs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Appendix A MRI Compatible Script Files . . 119
Appendix B GNU Free Documentation License
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
LD Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
网友评论
我要评论