github.com/karrick/go@v0.0.0-20170817181416-d5b0ec858b37/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 SDWARFLOC 109 SSUB = SymKind(1 << 8) 110 SMASK = SymKind(SSUB - 1) 111 SHIDDEN = SymKind(1 << 9) 112 SCONTAINER = SymKind(1 << 10) // has a sub-symbol 113 ) 114 115 // abiSymKindToSymKind maps values read from object files (which are 116 // of type cmd/internal/objabi.SymKind) to values of type SymKind. 117 var abiSymKindToSymKind = [...]SymKind{ 118 Sxxx, 119 STEXT, 120 SRODATA, 121 SNOPTRDATA, 122 SDATA, 123 SBSS, 124 SNOPTRBSS, 125 STLSBSS, 126 SDWARFINFO, 127 SDWARFRANGE, 128 SDWARFLOC, 129 } 130 131 // readOnly are the symbol kinds that form read-only sections. In some 132 // cases, if they will require relocations, they are transformed into 133 // rel-ro sections using relROMap. 134 var readOnly = []SymKind{ 135 STYPE, 136 SSTRING, 137 SGOSTRING, 138 SGOFUNC, 139 SGCBITS, 140 SRODATA, 141 SFUNCTAB, 142 } 143 144 // relROMap describes the transformation of read-only symbols to rel-ro 145 // symbols. 146 var relROMap = map[SymKind]SymKind{ 147 STYPE: STYPERELRO, 148 SSTRING: SSTRINGRELRO, 149 SGOSTRING: SGOSTRINGRELRO, 150 SGOFUNC: SGOFUNCRELRO, 151 SGCBITS: SGCBITSRELRO, 152 SRODATA: SRODATARELRO, 153 SFUNCTAB: SFUNCTABRELRO, 154 }