...

Source file src/pkg/cmd/link/internal/sym/symkind.go

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

View as plain text