1// Copyright 2017 The Go Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style 3// license that can be found in the LICENSE file. 4 5package sym 6 7import ( 8 "cmd/internal/obj" 9 "internal/buildcfg" 10) 11 12const ( 13 SymVerABI0 = 0 14 SymVerABIInternal = 1 15 SymVerABICount = 2 // Number of internal ABIs 16 SymVerStatic = 10 // Minimum version used by static (file-local) syms 17) 18 19func ABIToVersion(abi obj.ABI) int { 20 switch abi { 21 case obj.ABI0: 22 return SymVerABI0 23 case obj.ABIInternal: 24 if !buildcfg.Experiment.RegabiWrappers { 25 // If wrappers are not enabled, ABI0 and ABIInternal are actually same 26 // so we normalize everything to ABI0. 27 return SymVerABI0 28 } 29 return SymVerABIInternal 30 } 31 return -1 32} 33 34func VersionToABI(v int) (obj.ABI, bool) { 35 switch v { 36 case SymVerABI0: 37 return obj.ABI0, true 38 case SymVerABIInternal: 39 return obj.ABIInternal, true 40 } 41 return ^obj.ABI(0), false 42} 43