Merge pull request #4387 from lubinszARM:pr_tls_host_sentry_1

PiperOrigin-RevId: 337544656
This commit is contained in:
gVisor bot
2020-10-16 11:32:38 -07:00
4 changed files with 25 additions and 16 deletions
+13
View File
@@ -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 {
+12
View File
@@ -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:
-6
View File
@@ -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.
-10
View File
@@ -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)