|  | // Copyright 2017 The Go Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style | 
|  | // license that can be found in the LICENSE file. | 
|  |  | 
|  | package sym | 
|  |  | 
|  | import ( | 
|  | "cmd/internal/obj" | 
|  | "internal/buildcfg" | 
|  | ) | 
|  |  | 
|  | const ( | 
|  | SymVerABI0        = 0 | 
|  | SymVerABIInternal = 1 | 
|  | SymVerABICount    = 2  // Number of internal ABIs | 
|  | SymVerStatic      = 10 // Minimum version used by static (file-local) syms | 
|  | ) | 
|  |  | 
|  | func ABIToVersion(abi obj.ABI) int { | 
|  | switch abi { | 
|  | case obj.ABI0: | 
|  | return SymVerABI0 | 
|  | case obj.ABIInternal: | 
|  | if !buildcfg.Experiment.RegabiWrappers { | 
|  | // If wrappers are not enabled, ABI0 and ABIInternal are actually same | 
|  | // so we normalize everything to ABI0. | 
|  | return SymVerABI0 | 
|  | } | 
|  | return SymVerABIInternal | 
|  | } | 
|  | return -1 | 
|  | } | 
|  |  | 
|  | func VersionToABI(v int) (obj.ABI, bool) { | 
|  | switch v { | 
|  | case SymVerABI0: | 
|  | return obj.ABI0, true | 
|  | case SymVerABIInternal: | 
|  | return obj.ABIInternal, true | 
|  | } | 
|  | return ^obj.ABI(0), false | 
|  | } |