github.com/zxy12/go_duplicate_112_new@v0.0.0-20200807091221-747231827200/src/cmd/link/internal/sym/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 sym 32 33 // A SymKind describes the kind of memory represented by a symbol. 34 type SymKind uint8 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 SXCOFFTOC 93 SBSS 94 SNOPTRBSS 95 STLSBSS 96 SXREF 97 SMACHOSYMSTR 98 SMACHOSYMTAB 99 SMACHOINDIRECTPLT 100 SMACHOINDIRECTGOT 101 SFILEPATH 102 SCONST 103 SDYNIMPORT 104 SHOSTOBJ 105 106 // Sections for debugging information 107 SDWARFSECT 108 SDWARFINFO 109 SDWARFRANGE 110 SDWARFLOC 111 SDWARFMISC // Not really a section; informs/affects other DWARF section generation 112 113 // ABI aliases (these never appear in the output) 114 SABIALIAS 115 ) 116 117 // AbiSymKindToSymKind maps values read from object files (which are 118 // of type cmd/internal/objabi.SymKind) to values of type SymKind. 119 var AbiSymKindToSymKind = [...]SymKind{ 120 Sxxx, 121 STEXT, 122 SRODATA, 123 SNOPTRDATA, 124 SDATA, 125 SBSS, 126 SNOPTRBSS, 127 STLSBSS, 128 SDWARFINFO, 129 SDWARFRANGE, 130 SDWARFLOC, 131 SDWARFMISC, 132 SABIALIAS, 133 } 134 135 // ReadOnly are the symbol kinds that form read-only sections. In some 136 // cases, if they will require relocations, they are transformed into 137 // rel-ro sections using relROMap. 138 var ReadOnly = []SymKind{ 139 STYPE, 140 SSTRING, 141 SGOSTRING, 142 SGOFUNC, 143 SGCBITS, 144 SRODATA, 145 SFUNCTAB, 146 } 147 148 // RelROMap describes the transformation of read-only symbols to rel-ro 149 // symbols. 150 var RelROMap = map[SymKind]SymKind{ 151 STYPE: STYPERELRO, 152 SSTRING: SSTRINGRELRO, 153 SGOSTRING: SGOSTRINGRELRO, 154 SGOFUNC: SGOFUNCRELRO, 155 SGCBITS: SGCBITSRELRO, 156 SRODATA: SRODATARELRO, 157 SFUNCTAB: SFUNCTABRELRO, 158 }