From c04958e2fa456587277baef361868bddc0df9e49 Mon Sep 17 00:00:00 2001 From: Haibo Xu Date: Mon, 13 Jan 2020 07:44:58 +0000 Subject: Enable thread local storage support on arm64. Linux use the task.thread.uw.tp_value field to store the TLS pointer on arm64 platform, and we use a similar way in gvisor to store it in the arch/State struct. Signed-off-by: Haibo Xu Change-Id: Ie76b5c6d109bc27ccfd594008a96753806db7764 --- pkg/sentry/arch/arch_aarch64.go | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'pkg/sentry/arch/arch_aarch64.go') diff --git a/pkg/sentry/arch/arch_aarch64.go b/pkg/sentry/arch/arch_aarch64.go index 5053393c1..b998f84fc 100644 --- a/pkg/sentry/arch/arch_aarch64.go +++ b/pkg/sentry/arch/arch_aarch64.go @@ -95,6 +95,9 @@ type State struct { // Our floating point state. aarch64FPState `state:"wait"` + // TLS pointer + TPValue uint64 + // FeatureSet is a pointer to the currently active feature set. FeatureSet *cpuid.FeatureSet } @@ -145,6 +148,7 @@ func (s *State) Fork() State { return State{ Regs: s.Regs, aarch64FPState: s.aarch64FPState.fork(), + TPValue: s.TPValue, FeatureSet: s.FeatureSet, } } @@ -255,6 +259,7 @@ func (s *State) PtraceSetFPRegs(src io.Reader) (int, error) { const ( _NT_PRSTATUS = 1 _NT_PRFPREG = 2 + _NT_ARM_TLS = 0x401 ) // PtraceGetRegSet implements Context.PtraceGetRegSet. -- cgit v1.2.3