Files
Konstantin Bogomolov adde0cc814 Refactor context-related shared memory usage.
This change introduces an abstraction for most accesses to shared thread-context
memory. In general, there are very few cases where accessing this memory is not
supposed to be atomic, so it makes sense to abstract these accesses into
getters/setters that perform the actions atomically. After this change, we
should treat most direct accesses through sharedContext.shared as suspect.

Additionally this cleanup allows the new sharedContext instance to become the
context interruptor. When doing this it is no longer required to use locks, as
was done in context.NotifyInterrupt.

PiperOrigin-RevId: 517166307
2023-03-16 10:50:15 -07:00

59 lines
1.4 KiB
Go

// Copyright 2023 The gVisor Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//go:build arm64
// +build arm64
package sysmsg
import (
_ "embed"
"fmt"
"strings"
"gvisor.dev/gvisor/pkg/cpuid"
)
// SighandlerBlob contains the compiled code of the sysmsg signal handler.
//
//go:embed sighandler.built-in.arm64.bin
var SighandlerBlob []byte
// ArchState defines variables specific to the architecture being
// used.
type ArchState struct {
fpLen uint32
}
// Init initializes the arch specific state.
func (s *ArchState) Init() {
fs := cpuid.HostFeatureSet()
fpLenUint, _ := fs.ExtendedStateSize()
s.fpLen = uint32(fpLenUint)
}
// FpLen returns the FP state length for ARM.
func (s *ArchState) FpLen() int {
return int(s.fpLen)
}
func (s *ArchState) String() string {
var b strings.Builder
fmt.Fprintf(&b, "sysmsg.ArchState{")
fmt.Fprintf(&b, " fpLen %d", s.fpLen)
b.WriteString(" }")
return b.String()
}