| // Derived from Inferno utils/6l/l.h and related files. | 
 | // https://bitbucket.org/inferno-os/inferno-os/src/default/utils/6l/l.h | 
 | // | 
 | //	Copyright © 1994-1999 Lucent Technologies Inc.  All rights reserved. | 
 | //	Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net) | 
 | //	Portions Copyright © 1997-1999 Vita Nuova Limited | 
 | //	Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com) | 
 | //	Portions Copyright © 2004,2006 Bruce Ellis | 
 | //	Portions Copyright © 2005-2007 C H Forsyth (forsyth@terzarima.net) | 
 | //	Revisions Copyright © 2000-2007 Lucent Technologies Inc. and others | 
 | //	Portions Copyright © 2009 The Go Authors. All rights reserved. | 
 | // | 
 | // Permission is hereby granted, free of charge, to any person obtaining a copy | 
 | // of this software and associated documentation files (the "Software"), to deal | 
 | // in the Software without restriction, including without limitation the rights | 
 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | 
 | // copies of the Software, and to permit persons to whom the Software is | 
 | // furnished to do so, subject to the following conditions: | 
 | // | 
 | // The above copyright notice and this permission notice shall be included in | 
 | // all copies or substantial portions of the Software. | 
 | // | 
 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | 
 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | 
 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE | 
 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | 
 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | 
 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | 
 | // THE SOFTWARE. | 
 |  | 
 | package sym | 
 |  | 
 | // A SymKind describes the kind of memory represented by a symbol. | 
 | type SymKind uint8 | 
 |  | 
 | // Defined SymKind values. | 
 | // | 
 | // TODO(rsc): Give idiomatic Go names. | 
 | //go:generate stringer -type=SymKind | 
 | const ( | 
 | 	Sxxx SymKind = iota | 
 | 	STEXT | 
 | 	SELFRXSECT | 
 |  | 
 | 	// Read-only sections. | 
 | 	STYPE | 
 | 	SSTRING | 
 | 	SGOSTRING | 
 | 	SGOFUNC | 
 | 	SGCBITS | 
 | 	SRODATA | 
 | 	SFUNCTAB | 
 |  | 
 | 	SELFROSECT | 
 | 	SMACHOPLT | 
 |  | 
 | 	// Read-only sections with relocations. | 
 | 	// | 
 | 	// Types STYPE-SFUNCTAB above are written to the .rodata section by default. | 
 | 	// When linking a shared object, some conceptually "read only" types need to | 
 | 	// be written to by relocations and putting them in a section called | 
 | 	// ".rodata" interacts poorly with the system linkers. The GNU linkers | 
 | 	// support this situation by arranging for sections of the name | 
 | 	// ".data.rel.ro.XXX" to be mprotected read only by the dynamic linker after | 
 | 	// relocations have applied, so when the Go linker is creating a shared | 
 | 	// object it checks all objects of the above types and bumps any object that | 
 | 	// has a relocation to it to the corresponding type below, which are then | 
 | 	// written to sections with appropriate magic names. | 
 | 	STYPERELRO | 
 | 	SSTRINGRELRO | 
 | 	SGOSTRINGRELRO | 
 | 	SGOFUNCRELRO | 
 | 	SGCBITSRELRO | 
 | 	SRODATARELRO | 
 | 	SFUNCTABRELRO | 
 |  | 
 | 	// Part of .data.rel.ro if it exists, otherwise part of .rodata. | 
 | 	STYPELINK | 
 | 	SITABLINK | 
 | 	SSYMTAB | 
 | 	SPCLNTAB | 
 |  | 
 | 	// Writable sections. | 
 | 	SELFSECT | 
 | 	SMACHO | 
 | 	SMACHOGOT | 
 | 	SWINDOWS | 
 | 	SELFGOT | 
 | 	SNOPTRDATA | 
 | 	SINITARR | 
 | 	SDATA | 
 | 	SXCOFFTOC | 
 | 	SBSS | 
 | 	SNOPTRBSS | 
 | 	STLSBSS | 
 | 	SXREF | 
 | 	SMACHOSYMSTR | 
 | 	SMACHOSYMTAB | 
 | 	SMACHOINDIRECTPLT | 
 | 	SMACHOINDIRECTGOT | 
 | 	SFILEPATH | 
 | 	SCONST | 
 | 	SDYNIMPORT | 
 | 	SHOSTOBJ | 
 |  | 
 | 	// Sections for debugging information | 
 | 	SDWARFSECT | 
 | 	SDWARFINFO | 
 | 	SDWARFRANGE | 
 | 	SDWARFLOC | 
 | 	SDWARFMISC // Not really a section; informs/affects other DWARF section generation | 
 |  | 
 | 	// ABI aliases (these never appear in the output) | 
 | 	SABIALIAS | 
 | ) | 
 |  | 
 | // AbiSymKindToSymKind maps values read from object files (which are | 
 | // of type cmd/internal/objabi.SymKind) to values of type SymKind. | 
 | var AbiSymKindToSymKind = [...]SymKind{ | 
 | 	Sxxx, | 
 | 	STEXT, | 
 | 	SRODATA, | 
 | 	SNOPTRDATA, | 
 | 	SDATA, | 
 | 	SBSS, | 
 | 	SNOPTRBSS, | 
 | 	STLSBSS, | 
 | 	SDWARFINFO, | 
 | 	SDWARFRANGE, | 
 | 	SDWARFLOC, | 
 | 	SDWARFMISC, | 
 | 	SABIALIAS, | 
 | } | 
 |  | 
 | // ReadOnly are the symbol kinds that form read-only sections. In some | 
 | // cases, if they will require relocations, they are transformed into | 
 | // rel-ro sections using relROMap. | 
 | var ReadOnly = []SymKind{ | 
 | 	STYPE, | 
 | 	SSTRING, | 
 | 	SGOSTRING, | 
 | 	SGOFUNC, | 
 | 	SGCBITS, | 
 | 	SRODATA, | 
 | 	SFUNCTAB, | 
 | } | 
 |  | 
 | // RelROMap describes the transformation of read-only symbols to rel-ro | 
 | // symbols. | 
 | var RelROMap = map[SymKind]SymKind{ | 
 | 	STYPE:     STYPERELRO, | 
 | 	SSTRING:   SSTRINGRELRO, | 
 | 	SGOSTRING: SGOSTRINGRELRO, | 
 | 	SGOFUNC:   SGOFUNCRELRO, | 
 | 	SGCBITS:   SGCBITSRELRO, | 
 | 	SRODATA:   SRODATARELRO, | 
 | 	SFUNCTAB:  SFUNCTABRELRO, | 
 | } |