github.com/zebozhuang/go@v0.0.0-20200207033046-f8a98f6f5c5d/src/cmd/link/internal/ld/symkind.go (about) 1 // Derived from Inferno utils/6l/l.h and related files. 2 // https://bitbucket.org/inferno-os/inferno-os/src/default/utils/6l/l.h 3 // 4 // Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved. 5 // Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net) 6 // Portions Copyright © 1997-1999 Vita Nuova Limited 7 // Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com) 8 // Portions Copyright © 2004,2006 Bruce Ellis 9 // Portions Copyright © 2005-2007 C H Forsyth (forsyth@terzarima.net) 10 // Revisions Copyright © 2000-2007 Lucent Technologies Inc. and others 11 // Portions Copyright © 2009 The Go Authors. All rights reserved. 12 // 13 // Permission is hereby granted, free of charge, to any person obtaining a copy 14 // of this software and associated documentation files (the "Software"), to deal 15 // in the Software without restriction, including without limitation the rights 16 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 17 // copies of the Software, and to permit persons to whom the Software is 18 // furnished to do so, subject to the following conditions: 19 // 20 // The above copyright notice and this permission notice shall be included in 21 // all copies or substantial portions of the Software. 22 // 23 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 24 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 25 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 26 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 27 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 28 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 29 // THE SOFTWARE. 30 31 package ld 32 33 // A SymKind describes the kind of memory represented by a symbol. 34 type SymKind int16 35 36 // Defined SymKind values. 37 // 38 // TODO(rsc): Give idiomatic Go names. 39 //go:generate stringer -type=SymKind 40 const ( 41 Sxxx SymKind = iota 42 STEXT 43 SELFRXSECT 44 45 // Read-only sections. 46 STYPE 47 SSTRING 48 SGOSTRING 49 SGOFUNC 50 SGCBITS 51 SRODATA 52 SFUNCTAB 53 54 SELFROSECT 55 SMACHOPLT 56 57 // Read-only sections with relocations. 58 // 59 // Types STYPE-SFUNCTAB above are written to the .rodata section by default. 60 // When linking a shared object, some conceptually "read only" types need to 61 // be written to by relocations and putting them in a section called 62 // ".rodata" interacts poorly with the system linkers. The GNU linkers 63 // support this situation by arranging for sections of the name 64 // ".data.rel.ro.XXX" to be mprotected read only by the dynamic linker after 65 // relocations have applied, so when the Go linker is creating a shared 66 // object it checks all objects of the above types and bumps any object that 67 // has a relocation to it to the corresponding type below, which are then 68 // written to sections with appropriate magic names. 69 STYPERELRO 70 SSTRINGRELRO 71 SGOSTRINGRELRO 72 SGOFUNCRELRO 73 SGCBITSRELRO 74 SRODATARELRO 75 SFUNCTABRELRO 76 77 // Part of .data.rel.ro if it exists, otherwise part of .rodata. 78 STYPELINK 79 SITABLINK 80 SSYMTAB 81 SPCLNTAB 82 83 // Writable sections. 84 SELFSECT 85 SMACHO 86 SMACHOGOT 87 SWINDOWS 88 SELFGOT 89 SNOPTRDATA 90 SINITARR 91 SDATA 92 SBSS 93 SNOPTRBSS 94 STLSBSS 95 SXREF 96 SMACHOSYMSTR 97 SMACHOSYMTAB 98 SMACHOINDIRECTPLT 99 SMACHOINDIRECTGOT 100 SFILE 101 SFILEPATH 102 SCONST 103 SDYNIMPORT 104 SHOSTOBJ 105 SDWARFSECT 106 SDWARFINFO 107 SDWARFRANGE 108 SSUB = SymKind(1 << 8) 109 SMASK = SymKind(SSUB - 1) 110 SHIDDEN = SymKind(1 << 9) 111 SCONTAINER = SymKind(1 << 10) // has a sub-symbol 112 ) 113 114 // abiSymKindToSymKind maps values read from object files (which are 115 // of type cmd/internal/objabi.SymKind) to values of type SymKind. 116 var abiSymKindToSymKind = [...]SymKind{ 117 Sxxx, 118 STEXT, 119 SRODATA, 120 SNOPTRDATA, 121 SDATA, 122 SBSS, 123 SNOPTRBSS, 124 STLSBSS, 125 SDWARFINFO, 126 SDWARFRANGE, 127 } 128 129 // readOnly are the symbol kinds that form read-only sections. In some 130 // cases, if they will require relocations, they are transformed into 131 // rel-ro sections using relROMap. 132 var readOnly = []SymKind{ 133 STYPE, 134 SSTRING, 135 SGOSTRING, 136 SGOFUNC, 137 SGCBITS, 138 SRODATA, 139 SFUNCTAB, 140 } 141 142 // relROMap describes the transformation of read-only symbols to rel-ro 143 // symbols. 144 var relROMap = map[SymKind]SymKind{ 145 STYPE: STYPERELRO, 146 SSTRING: SSTRINGRELRO, 147 SGOSTRING: SGOSTRINGRELRO, 148 SGOFUNC: SGOFUNCRELRO, 149 SGCBITS: SGCBITSRELRO, 150 SRODATA: SRODATARELRO, 151 SFUNCTAB: SFUNCTABRELRO, 152 }