github.com/sagernet/gvisor@v0.0.0-20240428053021-e691de28565f/pkg/abi/linux/ptrace_arm64.go (about)

     1  // Copyright 2019 The gVisor Authors.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //     http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  //go:build arm64
    16  // +build arm64
    17  
    18  package linux
    19  
    20  const (
    21  	//PSR bits
    22  	PSR_MODE_EL0t = 0x00000000
    23  	PSR_MODE_EL1t = 0x00000004
    24  	PSR_MODE_EL1h = 0x00000005
    25  	PSR_MODE_EL2t = 0x00000008
    26  	PSR_MODE_EL2h = 0x00000009
    27  	PSR_MODE_EL3t = 0x0000000c
    28  	PSR_MODE_EL3h = 0x0000000d
    29  	PSR_MODE_MASK = 0x0000000f
    30  
    31  	// AArch32 CPSR bits
    32  	PSR_MODE32_BIT = 0x00000010
    33  
    34  	// AArch64 SPSR bits
    35  	PSR_F_BIT      = 0x00000040
    36  	PSR_I_BIT      = 0x00000080
    37  	PSR_A_BIT      = 0x00000100
    38  	PSR_D_BIT      = 0x00000200
    39  	PSR_BTYPE_MASK = 0x00000c00
    40  	PSR_SSBS_BIT   = 0x00001000
    41  	PSR_PAN_BIT    = 0x00400000
    42  	PSR_UAO_BIT    = 0x00800000
    43  	PSR_DIT_BIT    = 0x01000000
    44  	PSR_TCO_BIT    = 0x02000000
    45  	PSR_V_BIT      = 0x10000000
    46  	PSR_C_BIT      = 0x20000000
    47  	PSR_Z_BIT      = 0x40000000
    48  	PSR_N_BIT      = 0x80000000
    49  )
    50  
    51  // PtraceRegs is the set of CPU registers exposed by ptrace. Source:
    52  // syscall.PtraceRegs.
    53  //
    54  // +marshal
    55  // +stateify savable
    56  type PtraceRegs struct {
    57  	Regs   [31]uint64
    58  	Sp     uint64
    59  	Pc     uint64
    60  	Pstate uint64
    61  }
    62  
    63  // InstructionPointer returns the address of the next instruction to be
    64  // executed.
    65  func (p *PtraceRegs) InstructionPointer() uint64 {
    66  	return p.Pc
    67  }
    68  
    69  // StackPointer returns the address of the Stack pointer.
    70  func (p *PtraceRegs) StackPointer() uint64 {
    71  	return p.Sp
    72  }
    73  
    74  // SetStackPointer sets the stack pointer to the specified value.
    75  func (p *PtraceRegs) SetStackPointer(sp uint64) {
    76  	p.Sp = sp
    77  }