mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
Merge pull request #4387 from lubinszARM:pr_tls_host_sentry_1
PiperOrigin-RevId: 337544656
This commit is contained in:
@@ -39,6 +39,16 @@ var (
|
||||
}
|
||||
)
|
||||
|
||||
// getTLS returns the value of TPIDR_EL0 register.
|
||||
//
|
||||
//go:nosplit
|
||||
func getTLS() (value uint64)
|
||||
|
||||
// setTLS writes the TPIDR_EL0 value.
|
||||
//
|
||||
//go:nosplit
|
||||
func setTLS(value uint64)
|
||||
|
||||
// bluepillArchEnter is called during bluepillEnter.
|
||||
//
|
||||
//go:nosplit
|
||||
@@ -51,6 +61,8 @@ func bluepillArchEnter(context *arch.SignalContext64) (c *vCPU) {
|
||||
regs.Pstate = context.Pstate
|
||||
regs.Pstate &^= uint64(ring0.PsrFlagsClear)
|
||||
regs.Pstate |= ring0.KernelFlagsSet
|
||||
regs.TPIDR_EL0 = getTLS()
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
@@ -65,6 +77,7 @@ func bluepillArchExit(c *vCPU, context *arch.SignalContext64) {
|
||||
context.Pstate = regs.Pstate
|
||||
context.Pstate &^= uint64(ring0.PsrFlagsClear)
|
||||
context.Pstate |= ring0.UserFlagsSet
|
||||
setTLS(regs.TPIDR_EL0)
|
||||
|
||||
lazyVfp := c.GetLazyVFP()
|
||||
if lazyVfp != 0 {
|
||||
|
||||
@@ -32,6 +32,18 @@
|
||||
#define CONTEXT_PC 0x1B8
|
||||
#define CONTEXT_R0 0xB8
|
||||
|
||||
// getTLS returns the value of TPIDR_EL0 register.
|
||||
TEXT ·getTLS(SB),NOSPLIT,$0-8
|
||||
MRS TPIDR_EL0, R1
|
||||
MOVD R1, ret+0(FP)
|
||||
RET
|
||||
|
||||
// setTLS writes the TPIDR_EL0 value.
|
||||
TEXT ·setTLS(SB),NOSPLIT,$0-8
|
||||
MOVD addr+0(FP), R1
|
||||
MSR R1, TPIDR_EL0
|
||||
RET
|
||||
|
||||
// See bluepill.go.
|
||||
TEXT ·bluepill(SB),NOSPLIT,$0
|
||||
begin:
|
||||
|
||||
@@ -53,12 +53,6 @@ func LoadFloatingPoint(*byte)
|
||||
// SaveFloatingPoint saves floating point state.
|
||||
func SaveFloatingPoint(*byte)
|
||||
|
||||
// GetTLS returns the value of TPIDR_EL0 register.
|
||||
func GetTLS() (value uint64)
|
||||
|
||||
// SetTLS writes the TPIDR_EL0 value.
|
||||
func SetTLS(value uint64)
|
||||
|
||||
// Init sets function pointers based on architectural features.
|
||||
//
|
||||
// This must be called prior to using ring0.
|
||||
|
||||
@@ -29,16 +29,6 @@ TEXT ·FlushTlbAll(SB),NOSPLIT,$0
|
||||
ISB $15
|
||||
RET
|
||||
|
||||
TEXT ·GetTLS(SB),NOSPLIT,$0-8
|
||||
MRS TPIDR_EL0, R1
|
||||
MOVD R1, ret+0(FP)
|
||||
RET
|
||||
|
||||
TEXT ·SetTLS(SB),NOSPLIT,$0-8
|
||||
MOVD addr+0(FP), R1
|
||||
MSR R1, TPIDR_EL0
|
||||
RET
|
||||
|
||||
TEXT ·CPACREL1(SB),NOSPLIT,$0-8
|
||||
WORD $0xd5381041 // MRS CPACR_EL1, R1
|
||||
MOVD R1, ret+0(FP)
|
||||
|
||||
Reference in New Issue
Block a user